CN117093224A - 一种支持TypeScript智能感知的代码编辑方法、设备及介质 - Google Patents
一种支持TypeScript智能感知的代码编辑方法、设备及介质 Download PDFInfo
- Publication number
- CN117093224A CN117093224A CN202311091534.5A CN202311091534A CN117093224A CN 117093224 A CN117093224 A CN 117093224A CN 202311091534 A CN202311091534 A CN 202311091534A CN 117093224 A CN117093224 A CN 117093224A
- Authority
- CN
- China
- Prior art keywords
- typescript
- file
- dependency
- code
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000008447 perception Effects 0.000 title claims abstract description 24
- 238000013507 mapping Methods 0.000 claims abstract description 49
- 238000012544 monitoring process Methods 0.000 claims abstract description 14
- 230000008676 import Effects 0.000 claims description 18
- 238000010586 diagram Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种支持TypeScript智能感知的代码编辑方法、设备及介质。方法包括:对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;在用户进行代码编辑时,将映射文件导入代码编辑器,并监听用户输入的TypeScript代码,解析出对应的AST抽象语法树,以确定用户的引入TypeScript类型声明文件;基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,并基于AST抽象语法树,生成对提示信息进行展示。本申请通过上述方法在支持TypeScript语言且能进行第三方库api智能感知的在线代码编辑时,减轻了后端服务器的负载,且实现起来较为简单。
Description
技术领域
本申请涉及计算机软件开发技术领域,尤其涉及一种支持TypeScript智能感知的代码编辑方法、设备及介质。
背景技术
在编写前端代码时,由于JavaScript是弱类型语言,很多错误只有到了运行的时候才会被发现,而TypeScript作为拥有类型语法的JavaScript,其静态类型机制可以使这些类型错误在编码阶段就暴露出来,TypeScript的类型支持也使得IDE可以更好的为开发者提供智能提示、代码补全、智能导航等功能,这使得编写前端代码的体验提升了,调试错误的成本也显著降低。
越来越多的前端框架以TypeScript为基础进行编写,很多低代码开发平台也将TypeScript作为编写前端代码的首选语言。低代码开发平台往往需要支持代码的在线编辑,这样开发者就可以直接在浏览器上编写代码,避免因在低代码开发平台和本地IDE之间来回切换而造成的时间浪费。
要实现支持TypeScript语言且能进行第三方库api智能感知的在线代码编辑,现有的技术方案如下:在后端搭建一个支持TypeScript语言且实现了LSP(Language ServerProtocol,即语言服务端协议)的语言服务器;运行在客户浏览器上的代码编辑器组件将用户输入的内容不断提交给后端的语言服务器,语言服务器解析这些代码并生成对应的提示信息,再将提示信息返回给前端,最终显示在代码编辑器中。
由于把语法解析的工作放到后端服务器上,虽然能够支持更多的功能,但也增加了后端服务器的负载,且实现起来较为困难。
发明内容
本申请实施例提供了一种支持TypeScript智能感知的代码编辑方法、设备及介质,用以解决现有支持TypeScript语言且能进行第三方库api智能感知的在线代码编辑,增加了后端服务器的负载,且实现起来较为困难的技术问题。
第一方面,本申请实施例提供了一种支持TypeScript智能感知的代码编辑方法,其特征在于,方法包括:对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;在用户进行代码编辑时,将映射文件导入代码编辑器,并监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,以确定用户的引入TypeScript类型声明文件;基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,并基于AST抽象语法树,生成对提示信息进行展示。
在本申请的一种实现方式中,对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,具体包括:读取常用第三方npm包中的package.json文件,并基于package.json文件中的typings字段获取常用第三方npm包的TypeScript类型声明入口文件;解析TypeScript类型声明入口文件,以确定关联的TypeScript类型声明文件;递归解析关联的TypeScript类型声明文件,直至形成依赖关系闭包;记录并汇总各常用第三方npm包对其它npm包的类型依赖,形成npm包级别的类型依赖关系映射文件。
在本申请的一种实现方式中,解析TypeScript类型声明入口文件,以确定关联的TypeScript类型声明文件,具体包括:解析TypeScript类型声明入口文件,以生成对应的入口文件AST抽象语法树;基于入口文件AST抽象语法树,判断TypeScript类型声明入口文件是否通过相对路径import引入了其他TypeScript类型声明文件或者通过相对路径export导出了其它TypeScript类型声明文件。
在本申请的一种实现方式中,在对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件之后,方法还包括:解析依赖关系闭包中的各TypeScript类型声明文件,以确定对应的声明文件AST抽象语法树;基于声明文件AST抽象语法树,确定TypeScript类型声明文件中通过npm包名的导入语句;将导入语句转化为动态引入,并在删除原import语句;确定TypeScript类型声明文件中是否存在跨npm包的类继承关系,并在确定存在跨npm包的类继承关系的情况下,确定类继承关系是否作为父类;在确定类继承关系作为父类的情况下,将其对应的import语句提到declare module的外层并保留。
在本申请的一种实现方式中,方法还包括:基于声明文件AST抽象语法树,确定TypeScript类型声明文件中向外导出的类型;确定向外导出的类型是否也被TypeScript类型声明入口文件导出了,并在向外导出的类型没有被TypeScript类型声明入口文件导出的情况下,取消对向外导出的类型的导出。
在本申请的一种实现方式中,方法还包括:对没有实际导出的类型设置别名。
在本申请的一种实现方式中,监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,具体包括:监听用户输入的TypeScript代码,通过webworker异步解析出TypeScript代码对应的AST抽象语法树。
在本申请的一种实现方式中,基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,具体包括:在本地目录中确定引入TypeScript类型声明文件对应的依赖关系闭包是否已导入;在确定本地目录中已导入引入TypeScript类型声明文件对应的依赖关系闭包的情况下,直接引用引入TypeScript类型声明文件对应的依赖关系闭包。
第二方面,本申请实施例还提供了一种支持TypeScript智能感知的代码编辑设备,其特征在于,设备包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够:对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;在用户进行代码编辑时,将映射文件导入代码编辑器,并监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,以确定用户的引入TypeScript类型声明文件;基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,并基于AST抽象语法树,生成对提示信息进行展示。
第三方面,本申请实施例还提供了一种支持TypeScript智能感知的代码编辑的非易失性计算机存储介质,存储有计算机可执行指令,其特征在于,计算机可执行指令设置为:对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;在用户进行代码编辑时,将映射文件导入代码编辑器,并监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,以确定用户的引入TypeScript类型声明文件;基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,并基于AST抽象语法树,生成对提示信息进行展示。
本申请实施例提供的一种支持TypeScript智能感知的代码编辑方法、设备及介质,后端的压力小、职责少,仅负责存储具有TypeScript类型的npm包的打包后的类型声明文件,并在收到前端请求时将对应的文件返回给前端。运行在前端中的代码编辑器组件负责TypeScript代码的语法解析,同时负责向后端请求用户实际引用到的npm包的TypeScript类型声明文件。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例提供的一种支持TypeScript智能感知的代码编辑方法流程图;
图2为本申请实施例提供的一种支持TypeScript智能感知的代码编辑设备内部结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供了一种支持TypeScript智能感知的代码编辑方法、设备及介质,用以解决现有支持TypeScript语言且能进行第三方库api智能感知的在线代码编辑,增加了后端服务器的负载,且实现起来较为困难的技术问题。
下面通过附图对本申请实施例提出的技术方案进行详细的说明。
图1为本申请实施例提供的一种支持TypeScript智能感知的代码编辑方法流程图。如图1所示,本申请实施例提供的一种支持TypeScript智能感知的代码编辑方法,具体包括以下步骤:
步骤101、对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中。
首先可以理解的是,为实现支持TypeScript智能感知的代码编辑方法,首先需要在前端的代码编辑器中实现对TypeScript的语法支持。
进一步地,对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中。
需要说明的是,如果用户在TypeScript代码中通过import语句引入了第三方npm包中的内容,代码编辑器应该能够导入第三方库的类型声明文件,这样才能实现完整的类型检查和api智能感知功能。由于用户可能用到的第三方库有很多,不可能直接将所有的第三方库的类型声明文件都在编辑器加载时一口气下载到浏览器内存中,可行的做法是,每当用户输入的内容变化时,都对当前的代码进行解析,重点关注代码中都引入了哪些第三方库,与之前解析结果进行比较,如果又引入了新的npm包就向后端发起请求,将实际被用到的库的TypeScript类型声明文件下载过来即可。
要实现上述方法,必须要对npm包中的TypeScript类型声明文件进行打包,因为对于很多的支持TypeScript类型的npm包来讲,其中都包含了多个TypeScript类型声明文件,这些TypeScript类型声明文件之间还会相互引用,且还可能会引用其它npm包中的TypeScript类型声明文件。如果不对这些TypeScript类型声明文件进行打包,则一旦TypeScript代码中引用了一个第三方包,就需要下载这个第三方包所对应的十几个甚至几十个的TypeScript类型声明文件,发送大量的http请求,会产生严重的性能问题,所以,需要有一个通用的用来为npm包打包TypeScript类型声明文件的方法。可以提前将用户常用的第三方npm包的TypeScript类型声明文件打包出来,并存储在文件服务器上,如果用户在代码中引入了一个未被提前预置好的npm包,也可以由后端临时进行npm包的下载以及对应的TypeScript类型声明文件的打包。
具体地,读取常用第三方npm包中的package.json文件,并基于package.json文件中的typings字段获取常用第三方npm包的TypeScript类型声明入口文件;解析TypeScript类型声明入口文件,以确定关联的TypeScript类型声明文件;递归解析关联的TypeScript类型声明文件,直至形成依赖关系闭包;记录并汇总各常用第三方npm包对其它npm包的类型依赖,形成npm包级别的类型依赖关系映射文件。
在本申请的一个实施例中,在package.json文件中没有typings字段的情况下,也可以通过手动编写配置文件的方式记录npm包对应的TypeScript类型声明入口文件的地址数组。
在本申请的一个实施例中,解析TypeScript类型声明入口文件,以确定关联的TypeScript类型声明文件,具体包括:解析TypeScript类型声明入口文件,以生成对应的入口文件AST抽象语法树;基于入口文件AST抽象语法树,判断TypeScript类型声明入口文件是否通过相对路径import引入了其他TypeScript类型声明文件或者通过相对路径export导出了其它TypeScript类型声明文件。
在本申请的一个实施例中,在对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件之后,方法还包括:解析依赖关系闭包中的各TypeScript类型声明文件,以确定对应的声明文件AST抽象语法树;基于声明文件AST抽象语法树,确定TypeScript类型声明文件中通过npm包名的导入语句;将导入语句转化为动态引入,并在删除原import语句。
进一步地,还需要对跨npm包的类继承关系进行特殊处理,因为一旦跨npm包的类继承关系无法被识别,则使用父类中的protected属性将会被代码编辑器在编码时报错。
具体地,确定TypeScript类型声明文件中是否存在跨npm包的类继承关系,并在确定存在跨npm包的类继承关系的情况下,确定类继承关系是否作为父类;在确定类继承关系作为父类的情况下,将其对应的import语句提到declare module的外层并保留。
在本申请的一个实施例中,方法还包括:基于声明文件AST抽象语法树,确定TypeScript类型声明文件中向外导出的类型;确定向外导出的类型是否也被TypeScript类型声明入口文件导出了,并在向外导出的类型没有被TypeScript类型声明入口文件导出的情况下,取消对向外导出的类型的导出,以避免将没有导出的类型或者间接导出的类型直接导出。
在本申请的一个实施例中,由于将所有的TypeScript类型声明文件合并到了一起,可能出现类型重名的情况,因此还需要对没有实际导出的类型设置别名。
在本申请的一个实施例中,在用户编写代码时,如果引入了npm包A,而这个npm包A在TypeScript类型声明文件上依赖了npm包B,npm包B又在TypeScript类型声明文件上依赖了npm包C,则后端可以npm包的依赖关系文件为依据,同时将npm包A、B、C所对应TypeScript类型声明文件内容(作为npm包B的TypeScript类型声明文件闭包)一并返回给前端的代码编辑器组件,代码编辑器组件同时导入A、B、C的三个TypeScript类型声明文件,才能给出完整的类型提示和语法检查支持,因此本申请需要记录并汇总各常用第三方npm包对其它npm包的类型依赖,形成映射文件。
步骤102、在用户进行代码编辑时,将映射文件导入代码编辑器,并监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,以确定用户的引入TypeScript类型声明文件。
在本申请的一个实施例中,在生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中之后,如果在用户需要进行代码编辑时,首先代码编辑器请求到这个映射文件,并存储在本地。
进一步地,监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,以确定用户是否引入了TypeScript类型声明文件。
需要说明的是,前端的代码编辑器组件可以选用目前较为流行的开源编辑器插件,比如monaco-editor、codemirror等,也可以根据定制化的需求重新实现一个,只要能够满足前文中提到的要求即可。
还需要说明的是,由于要实现对TypeScript的语法支持,语法解析需要消耗时间较长,可以通过webworker来异步返回处理结果以提高效率,防止页面阻塞。
步骤103、基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,并基于AST抽象语法树,生成对提示信息进行展示。
在本申请的一个实施例中,在确定用户是否引入了新的引入TypeScript类型声明文件的情况下,基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中。
具体地,在本地目录中确定引入TypeScript类型声明文件对应的依赖关系闭包是否已导入;在确定本地目录中已导入引入TypeScript类型声明文件对应的依赖关系闭包的情况下,直接引用引入TypeScript类型声明文件对应的依赖关系闭包。在确定本地目录中没有导入引入TypeScript类型声明文件对应的依赖关系闭包的情况下,基于映射文件确定依赖关系闭包的位置并下载。
进一步地,基于AST抽象语法树,生成对提示信息进行展示。
以上为本申请提出的方法实施例。基于同样的发明构思,本申请实施例还提供了一种支持TypeScript智能感知的代码编辑设备,其结构如图2所示。
图2为本申请实施例提供的一种支持TypeScript智能感知的代码编辑设备内部结构示意图。如图2所示,设备包括:
至少一个处理器201;
以及,与至少一个处理器通信连接的存储器202;
其中,存储器202存储有可被至少一个处理器执行的指令,指令被至少一个处理器201执行,以使至少一个处理器201能够:
对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;
在用户进行代码编辑时,将映射文件导入代码编辑器,并监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,以确定用户的引入TypeScript类型声明文件;
基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,并基于AST抽象语法树,生成对提示信息进行展示。
本申请的一些实施例提供的对应于图1的一种支持TypeScript智能感知的代码编辑的非易失性计算机存储介质,存储有计算机可执行指令,计算机可执行指令设置为:
对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;
在用户进行代码编辑时,将映射文件导入代码编辑器,并监听用户输入的TypeScript代码,解析出TypeScript代码对应的AST抽象语法树,以确定用户的引入TypeScript类型声明文件;
基于引入TypeScript类型声明文件与映射文件,将后端服务器中对应的依赖关系闭包缓存入代码编辑器中,并基于AST抽象语法树,生成对提示信息进行展示。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于物联网设备和介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请实施例提供的系统和介质与方法是一一对应的,因此,系统和介质也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述系统和介质的有益技术效果。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种支持TypeScript智能感知的代码编辑方法,其特征在于,所述方法包括:
对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;
在用户进行代码编辑时,将所述映射文件导入代码编辑器,并监听所述用户输入的TypeScript代码,解析出所述TypeScript代码对应的AST抽象语法树,以确定所述用户的引入TypeScript类型声明文件;
基于所述引入TypeScript类型声明文件与所述映射文件,将所述后端服务器中对应的依赖关系闭包缓存入所述代码编辑器中,并基于所述AST抽象语法树,生成对提示信息进行展示。
2.根据权利要求1所述的一种支持TypeScript智能感知的代码编辑方法,其特征在于,对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,具体包括:
读取所述常用第三方npm包中的package.json文件,并基于所述package.json文件中的typings字段获取所述常用第三方npm包的TypeScript类型声明入口文件;
解析所述TypeScript类型声明入口文件,以确定关联的TypeScript类型声明文件;
递归解析所述关联的TypeScript类型声明文件,直至形成依赖关系闭包;
记录并汇总各常用第三方npm包对其它npm包的类型依赖,形成npm包级别的类型依赖关系映射文件。
3.根据权利要求2所述的一种支持TypeScript智能感知的代码编辑方法,其特征在于,解析所述TypeScript类型声明入口文件,以确定关联的TypeScript类型声明文件,具体包括:
解析所述TypeScript类型声明入口文件,以生成对应的入口文件AST抽象语法树;
基于所述入口文件AST抽象语法树,判断所述TypeScript类型声明入口文件是否通过相对路径import引入了其他TypeScript类型声明文件或者通过相对路径export导出了其它TypeScript类型声明文件。
4.根据权利要求3所述的一种支持TypeScript智能感知的代码编辑方法,其特征在于,在对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件之后,所述方法还包括:
解析所述依赖关系闭包中的各TypeScript类型声明文件,以确定对应的声明文件AST抽象语法树;
基于所述声明文件AST抽象语法树,确定所述TypeScript类型声明文件中通过npm包名的导入语句;
将所述导入语句转化为动态引入,并在删除原import语句;
确定所述TypeScript类型声明文件中是否存在跨npm包的类继承关系,并在确定存在跨npm包的类继承关系的情况下,确定所述类继承关系是否作为父类;
在确定所述类继承关系作为父类的情况下,将其对应的import语句提到declaremodule的外层并保留。
5.根据权利要求4所述的一种支持TypeScript智能感知的代码编辑方法,其特征在于,所述方法还包括:
基于所述声明文件AST抽象语法树,确定所述TypeScript类型声明文件中向外导出的类型;
确定所述向外导出的类型是否也被所述TypeScript类型声明入口文件导出了,并在所述向外导出的类型没有被所述TypeScript类型声明入口文件导出的情况下,取消对所述向外导出的类型的导出。
6.根据权利要求5所述的一种支持TypeScript智能感知的代码编辑方法,其特征在于,所述方法还包括:
对没有实际导出的类型设置别名。
7.根据权利要求1所述的一种支持TypeScript智能感知的代码编辑方法,其特征在于,监听所述用户输入的TypeScript代码,解析出所述TypeScript代码对应的AST抽象语法树,具体包括:
监听所述用户输入的TypeScript代码,通过webworker异步解析出所述TypeScript代码对应的AST抽象语法树。
8.根据权利要求1所述的一种支持TypeScript智能感知的代码编辑方法,其特征在于,基于所述引入TypeScript类型声明文件与所述映射文件,将所述后端服务器中对应的依赖关系闭包缓存入所述代码编辑器中,具体包括:
在本地目录中确定所述引入TypeScript类型声明文件对应的依赖关系闭包是否已导入;
在确定本地目录中已导入所述引入TypeScript类型声明文件对应的依赖关系闭包的情况下,直接引用所述引入TypeScript类型声明文件对应的依赖关系闭包。
9.一种支持TypeScript智能感知的代码编辑设备,其特征在于,所述设备包括:
至少一个处理器;
以及,与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;
在用户进行代码编辑时,将所述映射文件导入代码编辑器,并监听所述用户输入的TypeScript代码,解析出所述TypeScript代码对应的AST抽象语法树,以确定所述用户的引入TypeScript类型声明文件;
基于所述引入TypeScript类型声明文件与所述映射文件,将所述后端服务器中对应的依赖关系闭包缓存入所述代码编辑器中,并基于所述AST抽象语法树,生成对提示信息进行展示。
10.一种支持TypeScript智能感知的代码编辑的非易失性计算机存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令设置为:
对预设的常用第三方npm包中的TypeScript类型声明文件进行抽取合并,以生成出依赖关系闭包及各依赖关系闭包对应的映射文件,并保存到后端服务器中;
在用户进行代码编辑时,将所述映射文件导入代码编辑器,并监听所述用户输入的TypeScript代码,解析出所述TypeScript代码对应的AST抽象语法树,以确定所述用户的引入TypeScript类型声明文件;
基于所述引入TypeScript类型声明文件与所述映射文件,将所述后端服务器中对应的依赖关系闭包缓存入所述代码编辑器中,并基于所述AST抽象语法树,生成对提示信息进行展示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311091534.5A CN117093224A (zh) | 2023-08-28 | 2023-08-28 | 一种支持TypeScript智能感知的代码编辑方法、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311091534.5A CN117093224A (zh) | 2023-08-28 | 2023-08-28 | 一种支持TypeScript智能感知的代码编辑方法、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117093224A true CN117093224A (zh) | 2023-11-21 |
Family
ID=88782628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311091534.5A Pending CN117093224A (zh) | 2023-08-28 | 2023-08-28 | 一种支持TypeScript智能感知的代码编辑方法、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117093224A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117724988A (zh) * | 2024-02-18 | 2024-03-19 | 杭州玳数科技有限公司 | 一种基于Testing Library的UI组件库测试方法、存储介质及电子设备 |
CN117785160A (zh) * | 2024-02-28 | 2024-03-29 | 浩鲸云计算科技股份有限公司 | 一种低代码应用的行为逻辑开发调试方法、系统及装置 |
-
2023
- 2023-08-28 CN CN202311091534.5A patent/CN117093224A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117724988A (zh) * | 2024-02-18 | 2024-03-19 | 杭州玳数科技有限公司 | 一种基于Testing Library的UI组件库测试方法、存储介质及电子设备 |
CN117724988B (zh) * | 2024-02-18 | 2024-05-10 | 杭州玳数科技有限公司 | 一种基于Testing Library的UI组件库测试方法、存储介质及电子设备 |
CN117785160A (zh) * | 2024-02-28 | 2024-03-29 | 浩鲸云计算科技股份有限公司 | 一种低代码应用的行为逻辑开发调试方法、系统及装置 |
CN117785160B (zh) * | 2024-02-28 | 2024-05-14 | 浩鲸云计算科技股份有限公司 | 一种低代码应用的行为逻辑开发调试方法、系统及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117093224A (zh) | 一种支持TypeScript智能感知的代码编辑方法、设备及介质 | |
CN111090433A (zh) | 一种数据处理的方法、装置和存储介质 | |
CN110362547B (zh) | 日志文件的编码、解析、存储方法和装置 | |
FR2934388A1 (fr) | Procede de creation de programme informatique | |
WO2017107808A1 (zh) | 针对混淆脚本语言的定位方法和系统 | |
CN107147645B (zh) | 网络安全数据的获取方法及装置 | |
CN112947934A (zh) | 一种动态变换业务逻辑的方法、设备及介质 | |
CN112733158A (zh) | Android系统漏洞检测方法、电子设备及存储介质 | |
CN114968807A (zh) | 代码检测方法、装置、电子设备及可读存储介质 | |
CN114115904A (zh) | 信息处理方法、装置、服务器及存储介质 | |
CN110502215A (zh) | 一种微服务程序的构建方法、设备以及存储介质 | |
US9116714B2 (en) | Methods and systems for file processing | |
WO2015003452A1 (en) | Methods and systems for file processing | |
CN111813460A (zh) | 一种应用程序配套文件的存取方法、装置、设备及存储介质 | |
CN113986739A (zh) | 用于网站内存泄露的监测方法、装置、存储介质及处理器 | |
CN110554867B (zh) | 一种应用程序的处理方法和装置 | |
CN114840822A (zh) | 代码保护方法、装置、设备及存储介质 | |
CN111209028B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN106897588B (zh) | 一种标签函数的处理方法及装置 | |
CN110633214A (zh) | 一种内部测试报文的配置方法及装置 | |
CN110716746B (zh) | 将rn样式代码转换为小程序样式代码的方法及装置 | |
CN113157261B (zh) | 一种代码生成方法及设备 | |
CN117077148B (zh) | 程序的安全分析方法、系统、计算机设备及存储介质 | |
CN115390838A (zh) | 一种渲染子节点的方法及设备 | |
CN111771187B (zh) | 一种消除代码构建差异的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |