CN117289929B - 一种插件框架、插件及数据处理方法、装置及电子设备 - Google Patents
一种插件框架、插件及数据处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN117289929B CN117289929B CN202311585177.8A CN202311585177A CN117289929B CN 117289929 B CN117289929 B CN 117289929B CN 202311585177 A CN202311585177 A CN 202311585177A CN 117289929 B CN117289929 B CN 117289929B
- Authority
- CN
- China
- Prior art keywords
- code
- information
- plug
- current
- ide
- 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.)
- Active
Links
- 238000003672 processing method Methods 0.000 title abstract description 20
- 239000000463 material Substances 0.000 claims abstract description 497
- 238000012545 processing Methods 0.000 claims abstract description 100
- 230000008859 change Effects 0.000 claims abstract description 91
- 238000011161 development Methods 0.000 claims abstract description 69
- 230000004044 response Effects 0.000 claims abstract description 56
- 230000006978 adaptation Effects 0.000 claims abstract description 43
- 230000006399 behavior Effects 0.000 claims abstract description 31
- 230000006870 function Effects 0.000 claims description 113
- 238000000034 method Methods 0.000 claims description 52
- 238000003860 storage Methods 0.000 claims description 24
- 230000003993 interaction Effects 0.000 claims description 23
- 238000012544 monitoring process Methods 0.000 claims description 17
- 230000002452 interceptive effect Effects 0.000 claims description 15
- 238000004806 packaging method and process Methods 0.000 claims description 9
- 238000004422 calculation algorithm Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 7
- 230000004913 activation Effects 0.000 claims description 5
- 238000012549 training Methods 0.000 claims description 4
- 230000002045 lasting effect Effects 0.000 claims description 2
- 230000001960 triggered effect Effects 0.000 abstract description 10
- 230000003044 adaptive effect Effects 0.000 abstract 1
- 230000000875 corresponding effect Effects 0.000 description 165
- 239000013598 vector Substances 0.000 description 61
- 238000003780 insertion Methods 0.000 description 57
- 230000037431 insertion Effects 0.000 description 57
- 238000010586 diagram Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 10
- 238000007726 management method Methods 0.000 description 9
- 238000013461 design Methods 0.000 description 8
- 230000010354 integration Effects 0.000 description 7
- 239000012634 fragment Substances 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 230000008447 perception Effects 0.000 description 4
- 230000002688 persistence Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000002085 persistent effect Effects 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 230000037007 arousal Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000000275 quality assurance Methods 0.000 description 2
- 238000011282 treatment Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000006378 damage Effects 0.000 description 1
- 238000013499 data model Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 210000001503 joint Anatomy 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000035515 penetration Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- 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
-
- 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/43—Checking; Contextual analysis
Abstract
本申请公开了一种插件框架、插件及数据处理方法、装置及电子设备。所述插件框架包括:适配模块、代码元信息模块、响应式处理层;适配模块用于将光标变化事件提供给代码元信息模块以及响应式处理层;触发将光标位置对应的可选代码物料组装为适配IDE的代码推荐信息;基于用户操作行为触发执行预定的辅助编码功能逻辑;代码元信息模块用于生成与目标代码对应的代码元信息,包括语法树的信息、代码块的信息以及当前光标位置;响应式处理层调用出码服务,获取可选代码物料并异步回填至对应的代码块;响应于光标变化事件,触发可选代码物料被组装为通过所述IDE显示的代码推荐信息。采用所述插件框架,解决了插件定制开发效率及软件开发效率较低的问题。
Description
技术领域
本申请涉及计算机处理技术领域,具体涉及一种插件框架。本申请同时还涉及一种用于辅助编码的插件。本申请同时还涉及一种代码辅助系统。本申请同时还涉及一种数据处理方法、装置、电子设备及存储介质。本申请同时还涉及另一种用于辅助编码的插件。本申请同时还涉及一种辅助编码方法、装置、电子设备及存储介质。本申请同时还涉及另一种数据处理方法、装置、电子设备及存储介质。
背景技术
随着软件项目规模越来越大,软件项目的开发迭代难度逐渐增加。为提高开发效率,往往通过集成开发环境(Intergarted development environment,IDE)进行开发。IDE在编码用户输入部分代码的情况下向用户提供推荐信息,以辅助编码,从而降低编码用户的工作量,提高开发效率。
现有技术中,IDE一般通过提供插件来扩展功能,然而,实际开发实践中不同软件项目的辅助编码场景以及各开发团队的编码规范可能并不相同,因此往往需要定制不同插件来扩展IDE的辅助编码功能,在保证质量的同时快速开发定制化插件无疑是提高开发效率的重要手段。
因此,如何提供高效的插件开发方案以提高插件定制开发的效率是需要解决的问题。
在所述背景技术部分公开的上述信息仅用于加强对本申请的背景的理解,
因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本申请实施例提供的插件框架,解决了如何提高插件定制开发效率的问题。
本申请实施例提供一种插件框架,包括:适配模块、代码元信息模块、响应式处理层;其中,所述适配模块,用于将IDE分发的光标变化事件通知所述代码元信息模块以及所述响应式处理层;响应于所述响应式处理层针对所述光标变化事件的提示触发指令而触发将当前光标位置对应的可选代码物料基于IDE的提示协议组装为通过所述IDE显示的代码推荐信息;响应于所述IDE检测到的针对所述代码推荐信息的用户操作行为,触发执行所述响应式处理层的预定的辅助编码功能逻辑;所述代码元信息模块,用于生成与目标代码对应的代码元信息,其中,所述代码元信息用于记录所述目标代码的语法树的信息、代码块的信息以及当前光标位置,所述代码块与所述语法树的语法树节点关联;根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块;所述响应式处理层,用于异步调用出码服务,获取代码块的可选代码物料并异步回填至所述代码元信息中对应的代码块;响应于所述光标变化事件,向所述适配模块发送所述提示触发指令以触发所述可选代码物料被组装为通过所述IDE显示的代码推荐信息;根据所述IDE的功能逻辑命令规则实现所述预定的辅助编码功能逻辑。
可选的,还包括:桥接模块;所述桥接模块,用于根据指定插件拓展规范将所述IDE的提示协议封装为插件接口并提供对应的插件拓展点,所述插件拓展点用于向所述插件框架注册基于所述插件接口实现的辅助编码功能逻辑以提供特定插件功能。
可选的,还包括:元信息管理模块;所述元信息管理模块,用于根据所述适配模块的光标变化事件、功能逻辑命令以及针对所述光标变化事件反馈的代码推荐信息管理多代码文件并进行代码元信息的更新插入,并将所述代码元信息进行持久化保存;其中,代码元信息与打开的代码文件一一对应。
可选的,所述代码块为在所述目标代码中执行辅助编码操作的操作单元;所述代码块元信息中记录的代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息。
可选的,所述响应式处理层,具体用于:根据所述用户输入信息确定所述物料上下文,并将所述物料上下文记录在所述代码元信息的当前代码块中;根据所述物料上下文向所述出码服务请求获得与所述物料上下文匹配的代码物料,并确定与所述代码物料关联的代码推荐信息;将所述代码物料以及与所述代码物料关联的代码推荐信息,记录至所述当前代码块中;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。
可选的,所述响应式处理层,还用于:如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,并且当前代码块的信息中包括可选代码物料集,则获取至少部分可选代码物料,所述至少部分可选代码物料,基于IDE的提示协议被组装为通过所述IDE显示的代码推荐信息;如果根据当前光标位置从所述代码元信息中未得到对应的代码块,则根据用户输入信息生成初始化的代码块,则通过所述IDE展示默认推荐信息;如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,但当前代码块的信息中未包括可选代码物料,则通过所述IDE展示默认推荐信息。
可选的,所述根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块,包括:根据相似度算法从所述代码元信息中剔除语法树更新后差异超出相似度阈值的代码块。
可选的,所述用户输入信息包括所述光标变化事件对应的单一字符输入或多个字符批量输入。
可选的,所述适配模块还用于:预先向IDE的交互类扩展点注册光标变化事件、功能逻辑命令以及推荐提供器;所述响应式处理层还用于:根据IDE的接口规则实现推荐提供器的功能,以及实现与所述光标变化事件、功能逻辑命令对应的交互接口;通过所述光标变化事件对应的交互接口,实现根据所述代码元信息模块传递的光标变化事件从所述代码元信息记录的代码块中确定当前光标位置关联的当前代码块,触发推荐提供器确定所述当前代码块对应的当前推荐信息并基于IDE的提示协议封装后反馈给IDE进行显示;通过与功能逻辑命令对应的交互接口,实现响应于所述功能逻辑命令来确定所述代码推荐信息中的目标推荐信息以及根据所述目标推荐信息对当前代码块执行辅助编码操作。
本申请实施例还提供一种用于辅助编码的插件,根据所述插件框架实现,所述插件框架遵循IDE的开发规范;所述插件包括:智能提示模块,以及自动编码模块;其中,所述智能提示模块,用于响应于监听到光标变化事件确定光标位置关联的代码块,所述代码块的信息保存与目标代码对应的代码元信息中;调用出码服务以请求获取所述代码块对应的可选代码物料,将所述可选代码物料异步回填至所述代码块的信息中;根据当前光标位置确定并输出当前推荐信息;其中,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的代码块的可选代码物料进行组装而得到;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;所述自动编码模块,用于响应于对所述当前推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息对应的代码物料对当前代码块执行辅助编码操作。
本申请实施例还提供一种代码辅助系统,包括:IDE、所述插件框架、所述插件、出码服务层、物料存储层;其中,所述IDE,响应于激活事件而加载所述插件;捕获光标变化事件以及功能逻辑命令并分发给所述插件框架;通过用户界面显示代码推荐信息,接收针对所述代码推荐信息的用户操作行为;所述插件框架,用于生成与目标代码对应的代码元信息,其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;响应于IDE分发的光标变化事件,根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块,以及调用第一插件接口;响应于所述IDE分发的功能逻辑命令,调用第二插件接口;其中,所述第一插件接口为所述插件向所述插件框架的编程扩展点注册的插件接口;所述第二插件接口为所述插件向所述插件框架的命令扩展点注册的插件接口;所述插件,用于响应于所述第一插件接口被调用,从所述代码元信息记录的代码块中确定当前光标位置关联的当前代码块;向所述出码服务层发送出码请求以获得可选代码物料并异步回填至所述当前代码块,以及,触发所述可选代码物料基于所述插件框架封装的IDE的提示协议被组装为可通过IDE显示的代码推荐信息;响应于所述第二插件接口被调用,根据所述功能逻辑命令对应的用户操作行为实现所述插件的辅助编码功能;所述出码服务层,用于响应于所述出码请求调用出码服务,得到与所述出码请求包含的物料上下文匹配的可选代码物料,将所述可选代码物料反馈给所述插件;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息;所述物料存储层,包括存储有用于生成多模型的训练集的物料中心和/或用于多维搜索的物料库。
本申请实施例还提供一种数据处理方法,包括:生成与目标代码对应的代码元信息;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;获取用户输入信息,根据所述用户输入信息更新所述语法树后更新所述代码块;响应于监听到光标变化事件,从所述代码元信息记录的代码块中确定光标位置关联的代码块,获取所述代码块对应的可选代码物料并填写至所述代码块;根据当前光标位置确定并输出当前推荐信息,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的当前代码块的可选代码物料进行组装而得到。
可选的,还包括:响应于对所述当前推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息对当前代码块执行辅助编码操作。
可选的,所述代码块为在所述目标代码中执行辅助编码操作的最小操作单元;所述代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息;所述代码块与所述物料上下文所对应的一个或多个语法树节点关联。
可选的,所述根据所述用户输入信息更新所述语法树后更新所述代码块,包括:根据相似度算法从所述代码元信息中剔除语法树更新后差异超出相似度阈值的代码块。
可选的,所述获取所述代码块对应的可选代码物料,包括:判断针对所述代码块是否已完成上一次出码请求;若是,则异步调用出码服务以请求获取与所述代码块的物料上下文匹配的可选代码物料;若否,则等待完成上一次出码请求;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。
可选的,所述根据当前光标位置确定当前推荐信息并输出,包括:如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,并且当前代码块的信息中包括可选代码物料,则获取至少部分可选代码物料,根据IDE的提示协议组装得到可通过IDE显示的代码推荐信息,作为所述当前推荐信息;如果根据当前光标位置从所述代码元信息中未得到对应的代码块,则根据用户输入信息生成初始化的代码块,展示默认推荐信息;如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,但当前代码块的信息中未包括可选代码物料,则展示默认推荐信息。
本申请实施例还提供一种数据处理装置,包括:核心数据缓存单元,用于生成与目标代码对应的代码元信息;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;数据更新单元,用于获取用户输入信息,根据所述用户输入信息更新所述语法树后更新所述代码块;物料获取单元,用于响应于监听到光标变化事件,从所述代码元信息记录的代码块中确定光标位置关联的代码块,获取所述代码块对应的可选代码物料并填写至所述代码块;推荐单元,用于根据当前光标位置确定并输出当前推荐信息,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的当前代码块的可选代码物料进行组装而得到。
本申请实施例还提供一种电子设备,包括:存储器,以及处理器;所述存储器用于存储计算机程序,所述计算机程序被所述处理器运行后,执行本申请实施例提供的所述方法。
本申请实施例还提供一种计算机存储介质,存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现本申请实施例提供的所述方法。
与现有技术相比,本申请具有的优点是:
本申请实施例提供的一种插件框架、根据所述插件框架实现的插件以及包括所述插件的代码辅助系统,所述插件框架包括:适配模块、代码元信息模块、响应式处理层;所述适配模块,用于将IDE分发的光标变化事件通知所述代码元信息模块以及所述响应式处理层;响应于所述响应式处理层针对所述光标变化事件的提示触发指令而触发将当前光标位置对应的可选代码物料基于IDE的提示协议组装为可通过所述IDE显示的代码推荐信息;响应于所述IDE检测到的针对所述代码推荐信息的用户操作行为,触发执行所述响应式处理层的预定的辅助编码功能逻辑;所述代码元信息模块,用于生成与目标代码对应的代码元信息,其中,所述代码元信息用于记录所述目标代码的语法树的信息、代码块的信息以及当前光标位置,所述代码块与所述语法树的语法树节点关联;根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块;所述响应式处理层,用于异步调用出码服务,获取代码块的可选代码物料并异步回填至所述代码元信息中对应的代码块;响应于所述光标变化事件,向所述适配模块发送所述提示触发指令以触发所述可选代码物料被组装为通过所述IDE显示的代码推荐信息;根据所述IDE的功能逻辑命令规则实现所述预定的辅助编码功能逻辑。通过适配模块将与插件交互相关的光标变化事件、提供代码推荐信息、针对代码推荐信息的功能逻辑命令等交互类接口处理抽离封装,从而与响应式处理层承载的插件功能链路解耦,并适配响应式处理层,实现插件框架驱动IDE;通过代码元信息模块进行辅助编码相关的底层数据缓存及持久化保存,便于保存复杂交互场景的信息以及实现辅助编码能力的整合,并且便于通过较细粒度的代码块相关的数据缓存而实现复杂场景拆解。从而有助于实现多个关联代码物料复杂辅助编码功能的定制化插件。进一步,通过桥接模块,插件开发用户可以向插件框架提供的插件拓展点注册特定插件功能,并实现指定插件拓展规范,从而基于所述插件框架实现在质量保证的同时快速开发定制化插件,实现基于IDE的插件拓展功能。从而便于不同开发团队定制开发符合本团队编程规范的插件,在输出的代码逻辑合理基础上,提供符合本团队编程规范的高标准、高可维护性的代码。编码人员通过将插件安装于IDE而运行的代码辅助系统,能够在该系统中根据所述插件提供的符合本团队编程规范的代码推荐信息完成编码工作,从而提高开发效率。
本申请实施例提供的一种数据处理方法、装置、电子设备及存储介质,通过生成与目标代码对应的代码元信息;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;获取用户输入信息,根据所述用户输入信息更新所述语法树后更新所述代码块;响应于监听到光标变化事件,从所述代码元信息记录的代码块中确定光标位置关联的代码块,获取所述代码块对应的可选代码物料并填写至所述代码块;根据当前光标位置确定并输出当前推荐信息,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的当前代码块的可选代码物料进行组装而得到。通过代码元信息记录代码块信息,从而能实现辅助编码相关的底层数据缓存,便于保存复杂交互场景的信息以用于向编码用户提供复杂交互场景的辅助编码,从而提高编码用户的开发效率。进一步,向出码服务发送出码请求后不等待出码请求完成即返回,并通过提示触发指令触发执行根据当前光标位置确定并输出当前推荐信息,从而实现调用出码服务与根据调用结果回填代码块的异步处理,提高运行效率。
附图说明
图1是本申请第一实施例提供的一种插件框架的系统结构图。
图2是本申请第一实施例提供的插件框架的又一系统结构示意图。
图3是本申请第一实施例提供的一种插件框架的核心链路流程图。
图4是本申请第二实施例提供的一种用于辅助编码的插件的系统结构图。
图5是本申请第三实施例提供的一种代码辅助系统的系统结构图。
图6是本申请第四实施例提供的一种数据处理方法的处理流程图。
图7是本申请第五实施例提供的一种数据处理装置示意图。
图8是本申请第六实施例提供的另一种数据处理方法的处理流程图。
图9是本申请第七实施例提供的另一种数据处理装置示意图。
图10是本申请提供的电子设备示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请实施例提供一种插件框架。本申请实施例还涉及一种用于辅助编码的插件以及一种代码辅助系统。本申请实施例还涉及一种数据处理方法、装置、电子设备及存储介质。在下面的实施例中逐一进行说明。
为便于理解,首先给出本申请的相关概念及应用场景。
开发集成环境(IDE),是用于提供程序开发环境的应用程序,向编码用户提供代码编写功能、分析功能、编译功能、调试功能等开发软件服务功能。
插件(plug-in,或addin,或addon),是遵循一定的应用程序接口规范编写的程序。本申请实施例中,插件是指可集成于IDE用于向编码用户提供编写代码辅助能力的功能组件。
插件框架,是指开发可安装或集成于所述IDE的插件时自动生成的脚手架代码,并向插件开发用户提供应用程序接口规范,以用于编写所述插件。
本申请的一个应用场景为插件开发场景,即插件开发用户基于插件框架开发实现插件的场景。该场景中仅仅是开发插件的一个场景实施例,提供此场景实施例的目的是便于理解本申请中提供的插件、插件框架,而并非用于限定本申请的插件、插件框架的应用或实现方法。插件开发用户需要根据开发团队的编程规范和/或软件项目特征等确定需要扩展IDE的插件功能时,根据所述编程规范确定功能逻辑(即待扩展的插件功能的处理逻辑),通过预先设计的插件框架自动生成待开发插件的脚手架代码,向插件框架的拓展点注册待开发插件按照插件框架的拓展规范实现的功能接口,在所述功能接口的实现代码中包括所述功能逻辑。安装或集成于IDE后,配置插件运行环境及插件路径,IDE可调用插件以向该开发团队提供基于所述功能逻辑对应的插件功能。所述开发团队可理解为使用该插件的编码用户。
本申请的另一个应用场景为辅助编码场景,即编码用户在代码辅助系统的提示或引导下进行编码的场景,该场景仅仅是辅助编码的一个场景实施例,提供此场景实施例的目的是便于理解本申请中提供的插件、插件框架、代码辅助系统,而并非用于限定本申请的插件、插件框架、代码辅助系统应用或实现方法。辅助编码场景中代码辅助系统向编码用户提供包含但不限于代码编辑、代码插入、代码生成、基于代码生成注释和/或生成解释性描述、代码简化与优化等代码完成相关的功能。本申请实施例的产品化形态可以为代码辅助类应用程序,其可以运行于开发端用户对应的终端设备,也可以运行于云端服务器。代码辅助类应用程序应用于软件开发实践活动中的辅助编码场景,一方面可以基于多模型对复杂语言的理解能力以及学习能力从而提供辅助编码能力,为开发团队提供高效的程序开发环境。另一方面也可以根据物料上下文通过搜索服务提供匹配的代码物料,从而提供辅助编码能力。示例性的,代码辅助类程序可以响应于输入的包含任务描述的推荐信息而生成符合任务描述的代码。示例性的,代码辅助类应用程序可以响应于输入或选定的代码而生成代码注释,代码注释以输入或选定的代码作为与代码辅助模型的交互上下文而生成。示例性的,代码辅助类应用程序可以响应于输入的代码得到代码编辑位置并显示代码推荐信息(如备选代码或代码选项),响应于代码推荐信息的操作指令而进行辅助编码操作。辅助编码操作可以包括代码插入、代码替换、代码比较、代码删除等操作。可以理解的是,代码辅助类应用也可以应用于代码纠错、生成单元测试代码、针对代码生成对应说明文档和/或属性描述文档等代码辅助场景。实际应用中,编码用户可以在终端设备上运行代码辅助类应用程序,加载或创建代码文件,针对代码文件进行辅助编码操作;编码用户也可以访问云端服务器提供的代码辅助类应用服务,从而使用辅助编码功能进行辅助编码操作。
本申请可以但不限于应用于开发插件的场景、插件应用于其他软件项目的软件开发场景。
需要说明的是,以上所公开的信息仅用于帮助对本申请进行理解,并不意味着构成对本领域普通技术人员已知的现有技术。
本申请实施例中首先设计一种插件框架,该插件框架包含适配模块、代码元信息模块以及响应式处理层,通过代码元信息模块提供支持工程化能力的辅助编码功能,并且通过响应式处理层可调用出码服务,出码服务可为支持AI辅助编码能力的服务。进一步,插件开发用户应用该插件框架,遵循插件框架的开发规范,能快速定制开发适合本开发团队编程规范的定制化插件。
以下结合图1至图3对本申请第一实施例提供的插件框架进行说明。图1所示的插件框架,包括:适配模块101、代码元信息模块102、响应式处理层103。其中,适配模块封装了IDE与交互相关的底层接口;代码元信息模块用于缓存辅助编码流程中相关数据以及待提供代码推荐信息的上下文状态,并在插件和IDE之间透传数据;响应式处理层根据插件开发用户按照该插件框架的开发规范实现的插件来调用出码服务以获得用于辅助编码的可选代码物料,可选代码物料按照IDE的提示协议封装为代码推荐信息;代码推荐信息可显示于IDE的用户界面,例如以选项形式展示,供编码用户参考和/或选择,选中的代码物料可在当前光标匹配的编码位置插入或用于编辑相关代码。用户界面包括用户图形界面和控制台界面。进一步,所述插件框架还包括桥接模块,通过该桥接模块向插件开发用户提供插件开发服务规范(包括插件能力拓展规范)。适配模块对接该桥接模块,以拓展点形式向插件开发用户提供插件的开发定制服务,便于快速开发定制化插件。其中,所述代码物料包括但不限于以下与编程相关的物料:标识符(如关键字、类名、方法名、函数名、变量名、参数名、运算符等均属于标识符)、代码片段、注释信息、属性描述信息等。代码物料还可以包括单元测试代码等。
首先给出所述插件框架的设计思路。
关于适配模块的设计,本实施例提供的插件框架,用于快速开发提供辅助编码能力的插件。所述提供辅助编码能力的插件,为软件开发生命周期中使用,包括但不限于在编码用户的代码编写、调试、测试、维护等开发实践活动中提供代码推荐信息以向编码用户提供代码插入、代码替换、代码比较、代码删除、代码生成、代码优化与简化、单元测试代码和/或单元测试描述信息、生成注释和/或说明文档、生成属性描述文档等方面的辅助。编码用户将所述插件安装于支持该插件框架的IDE中,配置插件运行环境及插件路径后该插件即集成于该IDE,编码用户通过该即可使用该插件的辅助编码功能,例如,提供代码推荐信息帮助编码用户在光标位置关联的代码编辑位置处进行插入等。因此该插件涉及用于向IDE提供代码推荐信息的推荐提供器(provider)、用于触发执行预定的辅助编码功能逻辑的功能逻辑命令(command)、光标事件(event)等IDE底层交互事件。为了在所述插件框架的架构设计中将以上与底层交互事件相关的交互类接口与插件的功能链路进行解耦,将所述交互类接口进行统一抽象处理并封装为适配模块,可以理解为适配模块封装了IDE底层能力,并适配所述响应式处理层。实施时在如图1中所示的适配模块中包括但不限于实现:提示协议适配(即适配IDE的提示协议)、封装功能逻辑命令以及封装光标监听事件等。所谓接口包括API(Application Programming Interface,应用程序编程接口)。通过封装后的交互类接口,还可以针对IDE的与辅助编码能力相关的智能感知和行内插入的能力重新编排,即按照一定机制基于封装后的交互类接口的相互配合实现智能感知能力和行内插入能力的扩展,从而提供辅助编码功能的代码推荐的前期、中期、后期生命周期的开放,方便实现功能更强大、适应更复杂的辅助编码场景的用于辅助编码的插件。
关于代码元信息模块的设计,由于软件项目开发是工程体系,因此辅助编码场景可能不只是存在单一代码物料(如可直接插入到代码编辑位置处理的标识符、代码片段等)的插入,而是还存在复杂的辅助编码场景如:多片段代码物料或弹层等多步骤代码插入场景;代码片段插入之后可能存在后续逻辑如编码用户编辑其他区域后返回时需要延续原上下文继续操作的场景,从而存在多个辅助编码流程触发入口,不同于单次代码插入的触发入口为输入或光标停留位置;软件项目开发的工程化能力需要整体项目管理能力而不只是涉及当前位置代码片段的插入;工程体系整合(如)的复杂场景。针对复杂的辅助编码场景,需要进行数据缓存、编辑器撤销恢复适配、保留多线程上下文、序列化持久存储、整合辅助系统等,因而所述插件框架设计有代码元信息模块,用于缓存数据及辅助编码场景的上下文状态。进一步,针对以上复杂的辅助编码场景进行拆解,能最小化到单一代码片段插入的粒度,作为最小操作单元,最小操作单元可以完成单一代码片段插入的基础操作。因此设计代码块,其为对应于每一代码插入片段的最小操作单元。代码块仅关联单次插入代码物料所对应的语法树节点。对于复杂的辅助编码场景,能够基于代码块这一操作单元实现细粒度的数据缓存、上下文状态缓存,因此,在基于所述插件框架实现的插件中,当光标离开当前代码物料流程后,返回时只要触发到所述代码元信息记录的某个代码块的监听区域,则通过该监听区域作为一触发入口继续执行对应代码物料的功能流程。
实际应用中,IDE包括代码编辑与代码插入,通过代码块的设计也能够解决针对多步骤代码物料的场景中可能出现的撤销恢复栈混乱问题。例如,一个多步骤代码物料的第一步插入后,即使交互上自动触发了第二步的内容,编码用户仍然可能将光标移开而编辑其他区域内容。此时如果执行撤销操作,在具体某一代码物料插入的功能逻辑中,不能认定此次撤销为第N步回退至第(N-1)步。因此,代码物料步骤的节点逻辑与IDE的撤销恢复栈需要分离。该场景中,一方面,需要废弃IDE撤销恢复的逻辑前后关系,另一方面存在多个代码片段插入的上下游关系,因此采用组合设计模式解决可能出现的撤销恢复栈混乱问题。具体的,将每一个代码物料作为独立单元,互相之间可能存在关联关系,将各独立单元的状态内聚到代码块中。从而,当前焦点所在的文件的实时状态在代码元信息与代码块看来都是可识别的状态切面,结合响应式数据流的框架设计,因此能够实现在每次代码变化时校准代码块的内部数据,具体的,代码元信息模块响应于光标变化事件根据用户输入信息(包括用户输入的代码)同步更新语法树以及代码块,而当编码用户触发某个代码块的代码物料插入逻辑时,第一次触发与第N次触发都是基于同状态的,因此就避免了对撤销恢复栈的监听和管控,降低了逻辑复杂度。
关于响应式处理层,由以上设计思路可知所述插件框架的整体方案的核心流程基于对代码元信息以及代码块的数据的操作,映射到实际辅助编码流程对应的文件中,收敛数据操作入口以避免数据操作散落在流程的多个节点,因而选择响应式数据流,使得代码简洁且拓展灵活性强,避免了大量模板化代码。
其次,对所述插件框架的实现进行详细说明。
所述适配模块101,用于将IDE分发的光标变化事件通知所述代码元信息模块以及所述响应式处理层;响应于所述响应式处理层针对所述光标变化事件的提示触发指令而触发将当前光标位置对应的可选代码物料基于IDE的提示协议组装为可通过所述IDE显示的代码推荐信息;响应于所述IDE检测到的针对所述代码推荐信息的用户操作行为,触发执行所述响应式处理层的预定的辅助编码功能逻辑。其中,光标移动触发、单一字符输入、复制粘贴的批量字符输入中的任意操作都产生光标变化事件,从而触发更新代码元信息中记录的光标位置,所述光标位置是指光标在所述目标代码中的位置,也就是,当前焦点对应的打开文件的当前光标位置。具体的,适配模块获取到IDE分发的光标变化事件后,将该光标变化事件提供给所述代码元信息模块,所述代码元信息模块传递给所述响应式处理层。
具体实施时,所述适配模块,用于根据所述插件框架对应的插件开发服务规范对IDE的交互类接口进行封装,以适配所述响应式处理层;封装后的交互类接口,用于向插件开发用户提供插件开发服务;即插件开发用户可以根据待开发插件对应的需求,按照所述插件开发服务规范在响应式处理层实现封装后的交互类接口(具体如:光标监听接口、功能逻辑接口以及提示协议接口),从而实现定制化插件。其中,所述功能逻辑接口包括但不限于选项功能逻辑接口、AI代码功能逻辑接口等。相应的,所述响应式处理层,用于实现封装后的交互类接口;其中,封装后的光标监听接口用于处理光标变化事件,封装后的功能逻辑接口用于处理IDE检测到的用户操作行为对应的功能逻辑命令,封装后的提示协议接口用于根据所述代码元信息模块传递的光标变化事件从所述代码元信息记录的代码块中确定当前光标位置关联的当前代码块,通过提示触发指令触发所述适配模块获取所述当前代码块对应的可选代码物料并组装为通过所述IDE显示的代码推荐信息。其中,基于光标位置确定语法树节点,获取与语法树节点对应的代码块,作为与光标位置关联的代码块。依此可以得到当前代码块。所述功能逻辑命令包括但不限于选项功能逻辑命令、AI代码功能逻辑命令等。进一步,所述适配模块,用于将IDE分发的光标变化事件提供给所述代码元信息模块,通过所述代码元信息模块通知所述响应式处理层实现的光标监听接口处理;响应于所述响应式处理层针对光标变化事件的提示触发指令,通过提示协议接口(此处可为指向响应式处理层的提示协议接口的函数地址而执行,可以理解为IDE检测到事件后直接调用该事件对应注册的事件函数的函数地址,从而执行该事件函数)将当前光标位置关联的当前代码块的可选代码物料组装为代码推荐信息并通过所述IDE显示;将IDE检测到的针对代码推荐信息的用户操作行为通知所述响应式处理层实现的功能逻辑接口处理。进一步还包括:所述插件框架,在IDE的事件扩展点增加光标变化事件,在IDE的命令扩展点增加功能逻辑命令,在IDE的编程扩展点增加推荐提供器;所述插件框架的所述响应式处理层实现与增加的扩展点对应的接口。
实施时,如果适配模块获得IDE分发的光标变化事件,如光标移动、光标悬停一定时长等,触发代码元信息更新记录的光标位置,以及通过代码元信息模块触发调用响应式处理层实现的光标监听接口,以更新当前光标位置对应的当前代码块的可选代码物料,并触发调用推荐提供器(如以类似hook形式调用provider对象),以获取当前代码块的可选代码物料,使其按照IDE的提示协议显示于IDE的用户界面。如果适配模块接收到IDE分发检测到的触发事件,所述触发事件包括但不限于点击事件、双击事件、右键事件、触摸事件等;例如,IDE检测到IDE代码推荐信息或者与代码推荐信息关联的代码推荐选项(suggesiton)被选择(即用户操作行为)的触发命令或事件(即功能逻辑命令),适配模块以命令形式将该功能逻辑命令通知响应式处理层处理,也就是说,适配模块触发命令扩展点增加的对应与该功能逻辑命令的功能逻辑命令,使得响应式处理层根据封装后的功能逻辑命令接口实现的功能逻辑命令(command)被调用从而执行所述功能逻辑命令所实现的辅助编码操作。由于本实施例中通过功能逻辑命令接口的实现控制与用户操作行为对应的功能逻辑,因而整个针对代码推荐信息的插入过程是完全可控的,这为功能拓展能力提供了基础。
其中,所述将当前光标位置对应的可选代码物料基于IDE的提示协议组装为可通过所述IDE显示的代码推荐信息,包括:根据所述IDE的提示协议将所述可选代码物料组装为所述代码推荐信息。例如,所述提示协议包括针对IDE的智能感知能力和/或行内插入能力的接口协议;相应获得的所述代码推荐信息,为按照IDE的智能感知能力和/或行内插入能力的接口协议将所述可选代码物料包装后的数据。更具体的,所述代码推荐信息为基于符合所述接口协议的数据结构包装后的数据,通过IDE显示于用户界面;或者,所述代码推荐信息作为代码推荐选项的数据源,代码推荐选项通过IDE显示于用户界面。
所述代码元信息模块102,用于生成与目标代码对应的代码元信息,其中,所述代码元信息用于记录所述目标代码的语法树的信息、代码块的信息以及当前光标位置,所述代码块与所述语法树的语法树节点关联;根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块。
其中,所述目标代码是IDE当前焦点对应的打开的文件(如代码文件)包括的代码;所述语法树,是用一种形式语言编写的文本(通常是源代码)的抽象语法结构的树状表示。树上的每个节点都表示文本中出现的一个结构。一个代码块可以与一个或多个语法树节点关联。一个语法树节点的信息包括:语法信息、节点位置、唯一标识等信息。
其中,所述用户输入信息包括所述光标变化事件对应的单一字符输入或多个字符批量输入。
本实施例中,所述代码块从创建到销毁的生命周期中,代码块的创建时机包括:持续输入导致代码块重复创建;或者,执行类型格式化的操作使得整个文件的代码位置发生了变化,语法树随之更新,代码块重新创建。代码块生命周期中与语法树需要保持关联一致。另外,用户输入信息(单一字符或批量字符的输入)可能导致语法树更新,因此需要同步更新代码块范围。具体的,所述根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块,包括:根据相似度算法从所述代码元信息中剔除语法树更新后差异超出相似度阈值的代码块。
优选的,所述代码元信息中包括一个或多个代码块,具体可以用代码块列表的形式体现。一个代码块为在所述目标代码中执行辅助编码操作的最小操作单元。所述插件框架通过所述代码块缓存与透传基于所述插件框架开发的插件相关的数据内容。所述数据内容是由所述插件实现的功能所定义的。优选的,所述代码块元信息中记录的代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息。其中,所述物料上下文,为与光标位置关联的代码编辑位置所对应的上下文环境,可以基于代码编辑位置处代码的上下文以及用户输入信息构造;调用出码服务时在出码请求中携带所述物料上下文,以使得出码服务根据物料上下文输出匹配的代码物料。实际实施时,代码块类提供出码服务调用方法(类的method),对应的代码块实例向出码服务发送出码请求。所述代码推荐历史信息,可以用于光标移回原代码块监听区域时恢复显示历史的代码推荐信息。所述代码块的信息还包括:编码用户选中的物料信息、可选物料(suggestion list)等。
所述代码块的信息还包括代码源类型,所述代码源类型是指触发进入辅助编码流程的触发入口的输入代码的来源,包括用户输入代码和系统插入代码。响应式处理层异步调用出码请求,因此在每次调用时需要进行判断,包括:如果所述代码源类型为用户输入,则所述响应式处理层,具体用于:判断针对当前代码块是否已完成上一次出码请求;若是,则调用所述出码服务以请求获取所述当前代码块对应的推荐可选代码物料;若否,则等待完成上一次出码请求。其中,如果有正在请求中的代码推荐列表、出码请求已失败、上一次出码请求的内容不同于用户输入信息则判断已完成上一次出码请求。如果所述代码源类型为系统插入,则直接触发适配模块的推荐提供器,以获得当前代码块对应的代码推荐信息。
具体的,一个打开的文件(包括代码文件、文档文件)对应一个代码元信息,即代码元信息与打开的代码文件一一对应。所述代码元信息中还包括:文件基础信息,如文件路径(唯一标识)、文件类型;文档信息,如文档文本、文档当前光标位置。优选的,所述插件框架还包括:元信息管理模块;所述元信息管理模块,用于管理多个打开文件各自对应的代码元信息,具体根据所述适配模块的光标变化事件、功能逻辑命令以及针对所述光标变化事件反馈的代码推荐信息管理多代码文件并进行代码元信息的更新插入,并将所述代码元信息进行持久化保存;其中,所述持久化保存,包括基于对象序列化机制将对象转换为二进制数据流持久化存储。
进一步,所述插件框架还包括:用于进行元编程和反射的meta-utils,从而实现响应式数据流,使得代码简洁且拓展灵活性强,避免了大量模板化代码。
所述响应式处理层103,用于异步调用出码服务,获取代码块的可选代码物料并异步回填至所述代码元信息中对应的代码块;响应于所述光标变化事件,向所述适配模块发送所述提示触发指令以触发所述可选代码物料被组装为通过所述IDE显示的代码推荐信息;根据所述IDE的功能逻辑命令规则实现所述预定的辅助编码功能逻辑。
具体的,所述响应式处理层,用于:根据所述用户输入信息确定所述物料上下文,并将所述物料上下文记录在所述代码元信息的当前代码块中;根据所述物料上下文向所述出码服务请求获得与所述物料上下文匹配的代码物料,并确定与所述代码物料关联的代码推荐信息;将所述代码物料以及与所述代码物料关联的代码推荐信息,记录至所述当前代码块中;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。所述多维搜索为基于关键词匹配的搜索方式。
本实施例中,所述适配模块,还用于:预先向IDE的交互类扩展点注册光标变化事件、功能逻辑命令以及推荐提供器;所述响应式处理层,还用于:根据IDE的接口规则实现推荐提供器的功能,以及实现与所述光标变化事件、功能逻辑命令对应的交互接口;通过与所述光标变化事件对应的交互接口,实现根据所述代码元信息模块传递的光标变化事件从所述代码元信息记录的代码块中确定当前光标位置关联的当前代码块,触发推荐提供器确定所述当前代码块对应的当前推荐信息并基于IDE的提示协议封装后反馈给IDE进行显示;通过与功能逻辑命令对应的交互接口,实现响应于所述功能逻辑命令来确定所述代码推荐信息中的目标推荐信息以及根据所述目标推荐信息对当前代码块执行辅助编码操作。其中,IDE通过定义功能逻辑命令对应的交互接口来定义所述功能逻辑命令规则;功能逻辑命令由针对代码推荐信息的用户操作行为如选择行为触发产生。
本实施例中,所述插件框架还包括:桥接模块;所述桥接模块,具体用于根据指定插件拓展规范将所述IDE的提示协议封装为插件接口并提供对应的插件拓展点,所述插件拓展点用于向所述插件框架注册基于所述插件接口实现的辅助编码功能逻辑以提供特定插件功能。从而实现定制开发特定插件。对插件开发用户而言,仅通过桥接模块访问插件框架的其他模块提供的功能。所述桥接模块的共享数据也可以记录至对的代码块中。
请参考图2,图中示出了插件框架的另一系统结构示意图,在图1的基础上增加:桥接模块201、元信息管理模块202。所述桥接模块分别与所述适配模块以及所述响应式处理层连接,根据所述指定插件拓展规范将所述IDE的提示协议封装为插件接口并提供对应的插件拓展点,所述插件拓展点用于向所述插件框架注册基于所述插件接口实现的辅助编码功能逻辑。所述响应式处理层用于根据插件接口实现辅助编码功能逻辑。所述元信息管理模块,用于进行多文件管理、元信息更新插入以及持久化保存。当然,在图1的基础上可以增加桥接模块201以及元信息管理模块202中任意模块构成插件框架的又一系统结构。
本实施例中,还包括所述插件框架的核心链路可以划分为以下部分:代码元信息更新链路、选项推荐链路、代码插入链路。其中,选项推荐链路的处理中,所述响应式处理层,还用于:如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,并且当前代码块的信息中包括可选代码物料集,则获取至少部分可选代码物料,所述至少部分可选代码物料,基于IDE的提示协议被组装为通过所述IDE显示的代码推荐信息;如果根据当前光标位置从所述代码元信息中未得到对应的代码块,则根据用户输入信息生成初始化的代码块,则通过所述IDE展示默认推荐信息;如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,但当前代码块的信息中未包括可选代码物料,则通过所述IDE展示默认推荐信息。代码元信息更新链路中,代码元信息模块具体进行下述处理:更新语法树;以及,基于相似度算法剔除差异较大的代码块。代码元信息更新链路中,响应层处理层用于进行下述处理:监听光标变化事件,具体可以通过监听所述代码元信息中保存的当前光标位置对应的光标变化信息确定是否发生光标变化事件;响应于监听到光标变化事件确定光标当前所在代码块;代码块的信息中记录有代码源类型,如果代码源类型为系统插入,即所述用户输入信息为系统插入代码信息的场景,则触发选项推荐链路;如果代码源类型为用户输入,即所述用户输入信息为编码用户输入的代码信息,则判断上一次出码请求是否完成,若未完成,则等待上一次请求完成,若已完成,则异步调用出码服务,异步回填可选代码物料至对应的代码块,从而更新代码块的可选代码物料列表。其中,出码请求是指响应式处理层调用服务发起的出码请求。根据针对显示的代码推荐信息的用户操作行为触发代码插入链路。在代码插入链路中,根据编码用户选择的代码推荐信息确定对应的代码物料,插入代码物料后根据相似度确定与包括插入的代码物料的代码段匹配的新代码块,使用新代码块替代代码元信息中所述插入对应操作的代码块。
请参考图3,图中示出了所述插件框架的一种链路流程,包括:S301,光标变化事件。适配模块分发光标变化事件。光标变化事件对应的信息触发当前光标更新,并基于响应式数据流的处理方式通知代码元信息模块以及响应式处理层,如S306和S309所示。S302,光标移动触发。S303,输入单一字符。S304,复制粘贴批量字符插入。其中,S302至S304任意步骤触发执行S305;S303和至S304任意步骤触发执行S307。S305,更新代码元信息记录的当前光标。S306,代码元信息模块处理当前光标并响应。S307,更新语法树。S308,基于相似度算法剔除差异较大的代码块。S309,响应式处理层监听光标变化。S310,响应于监听到光标变化获取(确定)当前光标所在代码块。代码块的信息中记录有代码源类型。如果代码源类型为系统插入,即所述用户输入信息为系统插入代码信息的场景,直接执行S315。如果代码源类型为用户输入,即所述用户输入信息为编码用户输入的代码信息,执行S311。S311,上一次出码请求是否完成,若未完成,则执行S312,否则执行S313。其中,出码请求是指响应式处理层调用服务发起的出码请求。S312,等待上一次请求完成。上一次请求完成后执行S314根据请求结果中的可选代码物料异步回填代码块。S313,响应处理层异步调用出码服务,异步回填可选代码物料至对应的代码块。也就是,向出码服务发送出码请求后不等待出码请求完成即返回,通过提示触发指令使得执行S315。从而实现调用出码服务与根据调用结果回填代码块的异步处理。S314,更新代码块的可选代码物料列表。其中,S307至S308,以及S310至S314这些步骤可以理解为代码元信息更新链路。S315,调用provider触发代码推荐链路。provider为向IDE编程扩展点注册的推荐提供器。provider对象用于处理代码推荐链路。S316,代码推荐链路中根据光标位置确定代码块,如果不存在,跳转至S319;如果存在,则执行S317。S317,当前代码块是否存在可选代码物料列表,如果不存在,则执行S319;如果存在,则执行S318。S318,获取可选代码物料列表并展示。S319,展示默认推荐信息。S320,根据用户操作行为触发代码插入链路。S321,代码插入链路中获取代码片段并插入。S322,根据相似度匹配代码块,并替代当前代码块。
本实施例中,所述插件框架与代码编辑相关,因而还包括代码块占位符。所述代码块占位符,所述代码块占位符与代码元信息中的代码块关联。响应式处理层用于:响应于所述光标变化事件,识别当前光标位置下代码块占位符,确定关联的代码块,并以可视方式显示代码块占位符的位置标记;在用户通过代码推荐信息选择代码物料后执行对应的功能逻辑命令,光标移动到第一个占位符。
本实施例中,基于所述插件框架以及开发团队的指定编程规范开发的插件,其所产出的代码在逻辑合理或功能实现的基础上,还符合所述指定编程规范,因而利用该插件开发的代码可维护性较高。另外,随着代码物料数量的扩充以及质量的增强,该插件能提供代码纠错功能,并且反过来可推进团队编程规范。
需要说明的是,在不冲突的情况下,在本实施例和本申请的其他实施例中给出的特征可以相互组合。
至此,对本实施例提供的系统进行了说明,所述插件框架通过适配模块将与插件交互相关的光标变化事件、功能逻辑命令、代码推荐信息等的相关处理抽离封装,从而与响应式处理层承载的插件功能链路解耦,并适配响应式处理层,实现插件框架驱动IDE;通过代码元信息模块进行辅助编码相关的底层数据缓存及持久化保存,便于保存复杂交互场景的信息以及实现辅助编码能力的整合,并且便于通过较细粒度的代码块相关的数据缓存而实现复杂场景拆解。从而有助于实现多个关联代码物料复杂辅助编码功能的定制化插件。进一步,通过桥接模块,插件开发用户可以向插件框架提供的插件拓展点注册特定插件功能,并实现指定插件拓展规范,从而基于所述插件框架实现在质量保证的同时快速开发定制化插件,实现基于IDE的插件拓展功能。所述插件框架可以用于开发适用于不同编程规范的用于辅助编码的插件,从而为具有不同开发团队提供辅助编码功能,整体提升开发效率。
以上述实施例为基础,本申请第二实施例提供一种用于辅助编码的插件。以下结合图4对所述插件进行说明,相同部分请参见上述实施例对应部分的描述,不再赘述。图4所示的用于辅助编码的插件,根据本申请实施例提供的所述插件框架实现,所述插件框架遵循IDE的开发规范;所述插件包括:智能提示模块401,自动编码模块402。在本申请实施例中,所述插件框架安装或集成于所述IDE,所述插件框架以及所述插件激活后用于接收编码用户(即插件使用者)的用户输入信息,根据所述用户操作行为编码用户提供辅助编码功能。所述插件扩展了插件框架基于IDE提供的辅助编码功能。所述插件框架实现IDE定义的接口。并且,插件框架定义用于实现需要扩展的辅助编码功能的插件接口,插件实现所述插件接口并通过插件框架的扩展点注册本插件的功能。
所述智能提示模块,用于响应于监听到光标变化事件确定光标位置关联的代码块,所述代码块的信息保存与目标代码对应的代码元信息中;调用出码服务以请求获取所述代码块对应的可选代码物料,将所述可选代码物料异步回填至所述代码块的信息中;根据当前光标位置确定并输出当前推荐信息;其中,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的代码块的可选代码物料进行组装而得到;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;
所述自动编码模块,用于响应于对所述当前推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息对应的代码物料对当前代码块执行辅助编码操作。
至此,对本实施例提供的插件进行了说明,所述插件通过所述桥接模块向插件框架提供的插件拓展点注册特定插件功能,并通过所述桥接模块访问所述插件框架包括的代码元信息模块、适配模块,从而通过插件框架驱动IDE以及将辅助编码相关的底层数据缓存及持久化保存,便于保存复杂交互场景的信息以及实现辅助编码能力的整合,并且便于通过较细粒度的代码块相关的数据缓存而实现复杂场景拆解。从而能够按照指定插件拓展规范实现多个关联代码物料复杂辅助编码功能。拓展基于IDE的辅助编码能力,提升开发效率。
以上述实施例为基础,本申请第三实施例提供一种代码辅助系统。以下结合图5对所述系统进行说明,相同部分请参见上述实施例对应部分的描述,不再赘述。图5所示的代码辅助系统,包括:IDE 501、本申请实施例提供的所述插件框架502及所述插件503、出码服务层504、物料存储层505;其中,所述插件框架遵循所述IDE的开发规范;所述插件遵循所述插件框架的插件开发规范;所述插件集成或安装于预先加载所述插件框架的IDE。
在本申请实施例中,所述插件框架安装或集成于所述IDE,所述插件框架以及所述插件激活后用于接收编码用户(即插件使用者)的用户输入信息,根据所述用户操作行为编码用户提供辅助编码功能。所述插件扩展了插件框架基于IDE提供的辅助编码功能。所述插件框架实现IDE定义的接口。并且,插件框架定义用于实现需要扩展的辅助编码功能的插件接口,插件实现所述插件接口并通过插件框架的扩展点注册本插件的功能。
所述IDE,响应于激活事件而加载所述插件;捕获光标变化事件以及功能逻辑命令并分发给所述插件框架;通过用户界面显示代码推荐信息,接收针对所述代码推荐信息的用户操作行为。所述用户操作行为触发产生功能逻辑命令。
所述插件框架,用于生成与目标代码对应的代码元信息,其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;响应于IDE分发的光标变化事件,根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块,以及调用第一插件接口,从而能够执行插件所实现的代码推荐相关的提供逻辑;响应于所述IDE分发的功能逻辑命令,调用第二插件接口,从而能够执行插件所实现的对应于该功能逻辑命令的处理逻辑;实际上IDE也可以事件(如分发功能逻辑事件)的形式触发执行插件所实现的功能逻辑命令的处理逻辑;其中,所述第一插件接口为所述插件向所述插件框架的编程扩展点注册的插件接口;所述第二插件接口为所述插件向所述插件框架的命令扩展点注册的插件接口。功能逻辑包括选项功能逻辑,和/或,AI编码功能逻辑。其中,所述选项功能逻辑,包括对代码推荐信息对应的选项进行处理的逻辑;所述AI编码功能逻辑,包括基于大模型出码服务提供代码物料,并且,提供AI会话窗口的处理逻辑。
所述插件,用于响应于所述第一插件接口被调用,从所述代码元信息记录的代码块中确定当前光标位置关联的当前代码块;向所述出码服务层发送出码请求以获得可选代码物料并异步回填至所述当前代码块,以及,触发所述可选代码物料基于所述插件框架封装的IDE的提示协议被组装为可通过IDE显示的代码推荐信息;响应于所述第二插件接口被调用,根据所述功能逻辑命令对应的用户操作行为实现所述插件的辅助编码功能。例如,第一插件接口为用于提供代码推荐信息的推荐提供器(provider);第二插件接口为功能逻辑命令(注册的command)。
所述出码服务层,用于响应于所述出码请求调用出码服务,得到与所述出码请求包含的物料上下文匹配的可选代码物料,将所述可选代码物料反馈给所述插件;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。
所述物料存储层,包括存储有用于生成多模型的训练集的物料中心和/或用于多维搜索的物料库。所述训练集包括应用所述插件的开发团队的功能代码以及标准代码样例。所述物料库中的代码物料可以基于物料名称和物料标签进行匹配。进一步,物料存储层的代码物料的信息包括但不限于编程语言、版本控制、操作指令(即插入指令)、物料上下文特征等。
至此,对本实施例提供的系统进行了说明,所述代码辅助系统集成或安装有基于本申请实施例提供的所述插件框架开发的插件,从而通过插件框架将辅助编码相关的底层数据缓存及持久化保存,便于保存复杂交互场景的信息以及实现辅助编码能力的整合,并且便于通过较细粒度的代码块相关的数据缓存而实现复杂场景拆解。从而能够按照所述插件对应的拓展规范实现多个关联代码物料复杂辅助编码功能。编码用户通过所述系统进行编码能够减少编码量,提升开发效率。
以上述实施例为基础,本申请第四实施例提供一种数据处理方法。以下结合图6对所述方法进行说明,相同部分请参见上述实施例对应部分的描述,不再赘述。图6所示的数据处理方法,包括:步骤S601至步骤S604;
步骤S601,生成与目标代码对应的代码元信息;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;
步骤S602,获取用户输入信息,根据所述用户输入信息更新所述语法树后更新所述代码块;
步骤S603,响应于监听到光标变化事件,从所述代码元信息记录的代码块中确定光标位置关联的代码块,获取所述代码块对应的可选代码物料并填写至所述代码块;
步骤S604,根据当前光标位置确定并输出当前推荐信息,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的当前代码块的可选代码物料进行组装而得到。
本实施例提供的方法可以应用于本申请实施例提供的所述插件框架或基于所述插件框架开发的插件。
具体的,所述代码元信息与打开的代码文件一一对应。所述代码元信息中还记录有打开的文件(尤其是代码文件)的文件基础信息,文件基础信息包括但不限于:唯一标识该文件的文件路径、文件类型等。例如,绝对路径及文件名构成的文件路径信息。再如,文件存放网络位置及文件名构成的文件路径信息。再如,文件类型可以是不同分类维度的类型:源代码文件、头文件、脚本文件、标识编程语言的类型等。所述代码元信息中还记录有当前焦点所在文件的当前光标信息,如当前光标位置。
具体的,所述代码块为在所述目标代码中执行辅助编码操作的最小操作单元;所述代码块与所述物料上下文所对应的一个或多个语法树节点关联。所述代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息。其中,所述物料上下文为当前编码位置所对应的上下文信息,可以是当前编码位置前或后一行或多行代码。当前编码位置可以光标位置关联的代码块,也可以是当前光标。所述代码推荐历史信息为该代码块的前一次或前N次的代码推荐信息或代码推荐信息中被编码用户选择使用的目标推荐信息,便于进行撤销回退操作。所述代码块的信息还可以包括:物料信息(即编码用户从代码推荐信息中选择的目标推荐信息所关联的代码物料);可选代码列表(即根据调用出码服务后根据调用结果异步回填的代码物料的集合);代码源类型(即所述用户输入信息的来源),用户输入信息可以是系统插入的代码,也可以包括用户输入的代码(单一字符或粘贴的批量字符)。
如步骤S602所述,更新语法树以及代码块。具体的,响应于光标变化事件,更新所述语法树,并保持语法树与代码块关联一致。其中,所述根据所述用户输入信息更新所述语法树后更新所述代码块,包括:根据相似度算法从所述代码元信息中剔除语法树更新后差异超出相似度阈值的代码块。
如步骤S603所述,获取代码块对应的可选代码物料并更新到代码元信息记录的代码块的信息中。具体的,通过对监听到的事件的处理实现出码服务调用以及根据调用结果更新代码块中记录的可选代码物料的异步处理。其中,由于光标变化事件引起代码元信息中记录的文件的当前光标位置的变化,因而通过监听代码元信息中记录的文件的当前光标位置的变化信息可实现监听光标变化事件的目的。光标移动触发、单一字符输入、批量字符输入等操作均可产生光标变化事件。具体的,所述获取所述代码块对应的可选代码物料,包括:判断针对所述代码块是否已完成上一次出码请求;若是,则异步调用出码服务以请求获取与所述代码块的物料上下文匹配的可选代码物料;若否,则等待完成上一次出码请求;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。所述搜索服务为基于关键字匹配搜索。进一步,还包括:通过搜索服务获得代码物料之后,将物料上下文以及该代码物料输入到大模型出码服务,由大模型出码服务对该代码物料进行润色处理,生成较符合预定编码规范的代码片段,如增加合理的注释。生成的所述代码片段作为回填至代码块的可选代码物料。回填可选代码物料之后可选代码物料集合被更新,通过提示触发指令触发执行步骤S604。
如步骤S604所述,确定并输出当前推荐信息。本步骤响应于所述提示触发指令而执行。其中,所述根据当前光标位置确定当前推荐信息并输出,包括:如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,并且当前代码块的信息中包括可选代码物料,则获取至少部分可选代码物料,根据IDE的提示协议组装得到可通过IDE显示的代码推荐信息,作为所述当前推荐信息;如果根据当前光标位置从所述代码元信息中未得到对应的代码块,则根据用户输入信息生成初始化的代码块,展示默认推荐信息;如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,但当前代码块的信息中未包括可选代码物料,则展示默认推荐信息。所述IDE的提示协议,包括IDE预设的提示规则,例如针对不同可选代码物料包装得到对应的提示词或提示选项,作为所述代码推荐信息。代码推荐信息显示于IDE的用户界面(图形用户界面和/或控制台console界面),供编码用户参考、选择或执行其他操作,选择或执行其他操作可触发调用对应的功能逻辑命令,在功能逻辑命令中实现预设的功能逻辑。其中,代码推荐信息以可辨识出自动代码插入的方式显示、以浮层显示,并显示于光标关联的代码段附近。
本实施例中还包括:响应于对所述当前推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息对当前代码块执行辅助编码操作。也就是,用户操作行为是编码用户针对当前推荐信息选择的目标推荐信息以及针对该目标推荐信息的操作指令。根据该操作指令,将目标推荐信息所关联的代码物料用于对当前代码块进行相应的代码物料插入处理(如补全、优化、编辑等),插入代码物料后根据相似度确定与包括插入的代码物料的代码段匹配的新代码块,使用新代码块替代代码元信息中所述插入对应操作的代码块。
需要说明的是,步骤S601和S602或类似用语不限定步骤必须先后执行。
至此,对本实施例提供的方法进行了说明,所述方法通过代码元信息记录代码块信息,从而能实现辅助编码相关的底层数据缓存,便于保存复杂交互场景的信息以用于向编码用户提供复杂交互场景的辅助编码,从而提高编码用户的开发效率。进一步,向出码服务发送出码请求后不等待出码请求完成即返回,并通过提示触发指令触发执行根据当前光标位置确定并输出当前推荐信息,从而实现调用出码服务与根据调用结果回填代码块的异步处理,提高运行效率。
与第四实施例对应,本申请第五实施例提供一种数据处理装置,相关的部分请参见对应方法实施例的说明即可。请参考图7,图中所示的数据处理装置,包括:
核心数据缓存单元701,用于生成与目标代码对应的代码元信息;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;
数据更新单元702,用于获取用户输入信息,根据所述用户输入信息更新所述语法树后更新所述代码块;
物料获取单元703,用于响应于监听到光标变化事件,从所述代码元信息记录的代码块中确定光标位置关联的代码块,获取所述代码块对应的可选代码物料并填写至所述代码块;
推荐单元704,用于根据当前光标位置确定并输出当前推荐信息,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的当前代码块的可选代码物料进行组装而得到。
可选的,所述装置还包括代码插入单元,所述代码插入单元,用于:响应于对所述当前推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息对当前代码块执行辅助编码操作。
可选的,所述代码块为在所述目标代码中执行辅助编码操作的最小操作单元;所述代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息;所述代码块与所述物料上下文所对应的一个或多个语法树节点关联。
可选的,所述数据更新单元702,具体用于:根据相似度算法从所述代码元信息中剔除语法树更新后差异超出相似度阈值的代码块。
可选的,所述物料获取单元703,具体用于:判断针对所述代码块是否已完成上一次出码请求;若是,则异步调用出码服务以请求获取与所述代码块的物料上下文匹配的可选代码物料;若否,则等待完成上一次出码请求;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。
可选的,所述推荐单元704,具体用于:如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,并且当前代码块的信息中包括可选代码物料,则获取至少部分可选代码物料,根据IDE的提示协议组装得到可通过IDE显示的代码推荐信息,作为所述当前推荐信息;如果根据当前光标位置从所述代码元信息中未得到对应的代码块,则根据用户输入信息生成初始化的代码块,展示默认推荐信息;如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,但当前代码块的信息中未包括可选代码物料,则展示默认推荐信息。
可选的,所述代码元信息与打开的代码文件一一对应。
以上述实施例为基础,本申请第六实施例提供一种数据处理方法,相关的部分请参见上述实施例的对应说明即可。请参考图8,图中所示的数据处理方法,基于遵循IDE的开发规范的插件框架实现,所述插件框架保存目标代码的代码元信息,所述代码元信息用于记录所述目标代码对应的语法树的信息以及代码块的信息,所述代码块与所述语法树的语法树节点关联并与所述语法树同步更新;所述方法包括:步骤S801至步骤S803。
步骤S801,获取目标代码的当前光标位置对应的物料上下文并进行向量化处理,得到第一上下文向量;
步骤S802,根据所述第一上下文向量进行相似度查询确定与所述第一上下文向量相似的第一物料向量;其中,所述第一物料向量为备选代码物料中第一物料被向量化后存储的物料向量;
步骤S803,根据所述第一物料向量生成与所述第一上下文向量匹配的第一代码物料;其中,所述第一代码物料作为针对所述物料上下文反馈的可选代码物料,根据IDE的提示协议被封装为可通过IDE显示的代码推荐信息;所述代码推荐信息被选择后触发基于对应的第一代码物料以及当前光标位置针对所述目标代码执行辅助编码功能逻辑。
本实施例中,基于插件框架的能力将软件项目开发需要的工程化能力与智能编码支持能力结合,从而提供辅助编码解决方案。所述数据处理方法在所述插件框架以及基于所述插件框架开发实现的插件中应用。其中,智能编码支持能力可以由出码服务提供,所述出码服务可以为基于关键词匹配的搜索服务,也可以为AI代码生成服务(即大由出码模型出码服务),还可以是搜索服务与AI代码生成服务二者的结合。具体的,所述插件框架安装或集成于所述IDE,所述插件框架以及所述插件激活后用于接收编码用户(即插件使用者)的用户输入信息,根据所述用户操作行为编码用户提供辅助编码功能。所述插件框架实现IDE定义的接口以及,定义用于实现需要扩展的辅助编码功能的插件接口;插件实现所述插件接口并通过插件框架的扩展点注册本插件的功能。
实际上,当由大模型出码服务提供出码服务,可以对接多个提供代码生成(AIGC)能力的大模型,以应对不同功能场景的使用。通过插件的功能逻辑命令的具体实现,可以选择性的提供大模型能力的透出,例如通过在可执行指令的地方触发命令API执行而触发大模型的会话能力。
另外,本实施例中给出的辅助编码场景既包括在当前光标位置关联的代码编辑位置处直接插入代码物料的单一代码插入场景,还包括复杂编码场景,如分步骤编码的多步骤插入代码场景。多步骤插入代码场景,是指针对所述代码编辑位置插入一次代码物料(如使用一个组件),该代码物料还关联有其他物料,例如需要生成该组件等。因此需要在不只一个文件中插入代码,也可能涉及生成新的代码文件以插入生成的代码,或者在其他关联文件中插入新生成的代码。
如步骤S801所述,本步骤为对代码块中记录的物料上下文进行向量化处理得到第一上下文向量,以用于向量相似度查询。其中,所述目标代码的当前光标位置对应的物料上下文为所述插件框架保存的代码元信息记录的代码块所包括的物料上下文。
具体的,所述物料上下文包括光标位置关联的代码块记录的代码,这些代码至少包括用户输入的部分代码。由于功能场景涉及大量的非结构化数据,因而采用相似性查询是快速有效的数据访问方式。非结构化数据是指没有预设数据模型和预定规则的数据。所述数据处理方法中根据物料上下文通过向量相似度查询由存储有备选代码物料的物料库中搜索出与物料上下文最相似的一个或多个物料,作为匹配上的可选物料。该可选物料进一步处理为可选代码物料。另外,在所述数据处理方法的功能场景中,进行相似度查询时的输入内容并不限定为会话窗口的用户提问内容作为输入内容与稳定内容进行相似度匹配,而是将保存于所述代码块中的内容作为输入内容,因此输入内容与当前光标位置关联的用户输入强相关,能够有效提升物料匹配效果,更符合用户编码需求或说预期。
如步骤S802所述,本步骤为基于第一上下文向量在备选代码物料中进行向量相似度查询。其中,每一备选代码物料,包含以下任意信息:物料基础信息、版本控制信息、插入文本信息、物料上下文、插入指令、文件操作信息、自执行物料标记、关联物料标记。
具体的,预先对备选物料进行向量化物料制作,在持久化或缓存的用于存储代码物料的向量物料表中增加mysql json字段,存储制作的物料向量,以备进行向量查询尤其是向量相似度查询。实施时可使用Node运行时全局状态做向量运行时存储,从而提高实时查询性能。具体由js运行时计算第一上下文向量相似度,从而得到最相似或相似度满足一定条件的一个或多个物料向量,如得到一个或多个与第一上下文向量相似的第一物料向量。其中,所谓Node,是指javascript运行环境。
本实施例中,为区分开发团队,所述向量物料表还包括团队标识(如teamID)字段。一个较佳方式中,考虑到查询到的物料可能还有关联物料,或者一些辅助编码场景还包括关联物料的使用,因此向量物料表还包括关联物料标识字段,以指示该物料是否具有关联物料。
如步骤S803所述,根据第一物料向量生成与第一上下文向量匹配的代码物料。在查询到与第一上下文向量匹配的第一物料向量后,根据第一物料向量确定对应的第一物料。例如向量物料表还包括物料标识字段,通过该物料标识字段能够检索到与一条物料向量记录对应的物料。
具体的,所述根据所述第一物料向量生成与所述第一上下文向量匹配的代码物料,包括:根据所述第一物料向量和/或第一上下文向量构造提示信息;将所述提示信息输入代码生成模型得到所述代码物料;所述代码生成模型用于根据所述提示信息预测生成与所述提示信息的特征匹配的代码物料。一个实施方式中,所述将所述提示信息输入代码生成模型得到所述代码物料,包括:将所述第一物料作为参考代码添加至所述提示信息;将包含所述参考代码的提示信息输入所述代码生成模型得到所述代码物料。优选的,参考代码添加在所述提示信息的头部。当然,参考代码可以添加在所述提示信息的其他指定位置。
具体的,在确定第一物料后,根据不同链路进行不同的处理。例如,对于智能感知链路,可以直接将第一物料代码根据IDE的提示协议封装为选项形式体现的代码推荐信息,直接在用户界面展示,供编码用户选择并插入该第一物料。再例如,对于行内(inline)补全注释链路,将第一物料向量以及相关内容生成提示信息作为代码生成模型的输入,由该大模型进行处理后输出为带注释的代码片段,作为可选代码物料并按照IDE的提示协议封装为代码推荐信息。其中,第一物料的代码可以作为参考代码插入该提示信息的头部,输入给该代码生成模型。代码生成模型可以是处理自然语言的大模型。再例如,对于涉及关联物料的多步骤插入代码场景,其中涉及多个上下文,不同于在目标代码的当前光标位置直接插入代码,而是可能存在跨文件和/或全文本的代码生成,需要整合多个文件覆盖需要修改的内容,通过比较视图引导用户在多个文件中执行代码插入。所谓跨文件的代码生成,是指在多步骤插入代码场景中的一个或多个步骤中在与目标代码所属代码文件的关联文件插入代码。所谓全文本的代码生成,是指在其中一些步骤中生成一个新文件自动插入关联物料代码。多步骤插入代码场景中存在代码源类型为系统输入的情况,也就是说,在其中一些步骤中系统输入的代码为下一步骤的物料上下文。因此,本实施例提供的数据方法中,出码服务的输出内容是多样化的,输出后的执行链路也是多样化的。
实施时,还包括:根据所述物料上下文和/或所述第一物料向量确定所述物料上下文对应的当前编码场景;其中,所述当前编码场景为以下任意辅助编码场景:行内插入代码场景、多步骤插入代码场景,且不同辅助编码场景下对所述代码物料进行对应的代码插入处理。其中,所述根据所述物料上下文和/或所述第一物料向量确定所述物料上下文对应的当前编码场景,包括:根据所述物料上下文和/或所述第一物料向量对应的第一物料,判断所述第一物料是否具有关联的第二物料;如果是,则所述当前编码场景为多步骤插入代码场景;否则,所述当前编码场景为行内插入代码场景。
具体的,如果所述当前编码场景为行内插入代码场景,则将所述第一物料插入当前光标位置关联的代码逻辑位置,并更新所述代码块。其中,所述将所述第一物料插入当前光标位置关联的代码逻辑位置,并更新所述代码块,包括:将所述第一物料作为与所述第一上下文向量匹配的第一代码物料填写至所述代码块;根据所述IDE的提示协议将至少部分第一代码物料封装为可通过IDE显示的代码推荐信息并以提示选项形式显示;响应于所述提示选项中的目标选项被选择,将所述目标选项对应的第一代码物料插入当前光标位置关联的代码编辑位置。
具体的,如果所述当前编码场景为多步骤插入代码场景,则获取用于确定所述第二物料的第二物料上下文,并根据所述第二物料上下文生成匹配的第二代码物料;其中,所述第二代码物料包括用于在所述第一代码物料的基础上对所述目标代码和/或与所述目标代码关联的其他代码进行辅助编码的一个或多个代码片段和/或代码文件。其中,所述获取用于确定所述第二物料的第二物料上下文,包括:响应于针对与所述第一代码物料对应的代码推荐信息的选择触发,获取用于预测生成所述第二代码物料的需求规则;根据所述需求规则以及所述第一物料上下文生成所述第二物料上下文。其中,根据所述第二物料上下文生成匹配的第二代码物料,包括:对所述第二物料上下文进行向量化得到第二上下文向量;根据所述第二上下文向量进行相似度查询得到匹配的第二物料向量以及对应的第二物料;根据所述第二物料向量构造第一提示信息,将所述第二物料作为参考代码插入所述第一提示信息得到第二提示信息;将所述第二提示信息输入用于提供代码物料的代码生成模型,得到与第二物料上下文匹配的所述第二代码物料。具体的,所述响应于针对与所述第一代码物料对应的代码推荐信息的选择触发,获取用于预测生成所述第二代码物料的需求规则,包括:将IDE的用户界面作为第一界面,在所述第一界面显示与所述第一代码物料对应的代码推荐信息;响应于针对所述代码推荐信息的选择触发,加载用于与编码用户交互的第二界面,所述第二界面用于引导编码用户输入和/或选择所述需求规则。进一步,还包括:响应于针对与所述第二代码物料对应的代码推荐信息的选择触发,加载用于比较代码的第三界面;在所第三界面比较基于所述第二代码物料修改的一个或多个代码文件,引导编码用户插入代码。例如,显示代码插入前后的差异,用户可以自行确定是否执行插入操作。
多步骤插入代码场景的物料一个例子为表单组件,表单组件的代码内容涉及上下文较多,无法在一个代码编辑位置插入,因此需要整合覆盖全部需要修改的内容的多个文件,通过比较视图(即第三界面)逐步引导用户插入代码。优选的,所述针对与所述第一代码物料对应的代码推荐信息的选择触发,表示编码用户选择插入表单组件;所述第二代码物料的需求规则,包括编码用户输入或选择的表单接口;所述第二代码物料,包括生成的表单文件。进一步,还包括:生成的所述表单文件,以流式输出形式显示于所述第二界面。由于全文本生成表单文件涉及的计算量及代码量较大,因而通过流式输出提升用户体验。
本实施例中,还包括:响应于用于加载AI会话窗口的唤起指令,加载所述AI会话窗口;通过所述AI会话窗口接收编码用户输入的用户提示信息;获取并显示针对所述用户提示信息的响应信息。
本实施例中,编码用户可通过实现了所述数据处理方法的插件进行辅助编码。相应的辅助编码方法包括:通过用户界面接收针对目标代码的用户输入信息;在所述用户界面标识所述目标代码中与光标位置关联且与所述用户输入信息匹配的代码段;其中,代码段为所述代码块中记录的作为一个编码操作单元的代码信息;获取并通过所述用户界面显示所述代码段对应的代码推荐信息,所述代码推荐信息关联有可选代码物料,所述可选代码物料为与所述代码段对应的物料上下文匹配的代码物料;其中,所述代码推荐信息,为选项形式展示;所述可选代码物料,由安装或集成于IDE的用于辅助编码的插件根据所述代码段对应的物料上下文信息得到。具体的,所述可选代码物料通过执行本实施例提供的所述数据处理方法而生成。进一步,响应于对所述代码推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息针对所述代码段执行辅助编码功能。
优选的,所述物料信息包括一个或多个关联物料,所述代码推荐信息包括所述多个关联物料中各关联物料对应的可选代码物料;
其中,所述通过所述用户界面显示所述代码段对应的代码推荐信息,包括:在所述代码段的预设范围内以浮层显示所述代码推荐信息中第一物料对应的一个或多个第一候选项;响应于所述第一候选项中的第一目标选项处于选中状态,显示所述第一目标选项对应的第二物料的代码推荐信息,所述第二物料的代码推荐信息包含一个或多个第二候选项;响应于所述第二候选项中的第二目标选项处于选中状态,根据所述第二目标选项执行辅助编码操作。其中,所述辅助编码操作,包括:生成与所述代码段的信息关联的新代码文件,在新代码文件中插入所述第二目标选项表示的代码片段。
一个较佳方式中,所述用户界面显示用于比较所述代码段与所述代码推荐信息的比较控件;所述用户操作行为包括触发所述比较控件;所述根据所述目标推荐信息针对所述代码段执行辅助编码功能,包括:比较所述代码段与所述代码推荐信息,获取并显示所述代码段与所述代码推荐信息之间的差异。进一步,还包括:响应于确认合入所述差异的用户操作行为,将所述差异对应的代码片段合入所述代码段。
本实施例中,还包括:响应于AI辅助编码功能的触发指令,加载AI会话窗口;在所述AI辅助编码窗口接收用户输入信息。响应于针对所述AI会话窗口的拖拽操作,所述AI会话窗口被拖拽至指定位置。例如拖拽至用户界面的右侧栏,从而不影响文件切换等日常编码工作。
至此,对本实施例提供的方法进行了说明,所述方法通过代码元信息记录代码块信息,从而能实现辅助编码相关的底层数据缓存,便于保存复杂交互场景的信息以用于向编码用户提供复杂交互场景的辅助编码,从而提高编码用户的开发效率。
与第六实施例对应,本申请第七实施例提供一种数据处理装置,相关的部分请参见对应方法的说明即可。请参考图9,图中所示的数据处理装置,包括:
插件框架901,基于遵循IDE的开发规范实现,用于保存目标代码的代码元信息,所述代码元信息用于记录所述目标代码对应的语法树的信息以及代码块的信息,所述代码块与所述语法树的语法树节点关联并与所述语法树同步更新;
向量化单元902,用于获取目标代码的当前光标位置对应的物料上下文并进行向量化处理,得到第一上下文向量;
相似性搜索单元903,用于根据所述第一上下文向量进行相似度查询确定与所述第一上下文向量相似的第一物料向量;其中,所述第一物料向量为备选代码物料中第一物料被向量化后存储的物料向量;
代码物料推荐单元904,用于根据所述第一物料向量生成与所述第一上下文向量匹配的第一代码物料;其中,所述第一代码物料作为针对所述物料上下文反馈的可选代码物料,根据IDE的提示协议被封装为可通过IDE显示的代码推荐信息;所述代码推荐信息被选择后触发基于对应的第一代码物料以及当前光标位置针对所述目标代码执行辅助编码功能逻辑。
可选的,所述装置还包括:场景识别单元,所述场景识别单元用于:根据所述物料上下文和/或所述第一物料向量确定所述物料上下文对应的当前编码场景;其中,所述当前编码场景为以下任意辅助编码场景:行内插入代码场景、多步骤插入代码场景,且不同辅助编码场景下对所述代码物料进行对应的代码插入处理。
可选的,所述场景识别单元,具体用于:根据所述物料上下文和/或所述第一物料向量对应的第一物料,判断所述第一物料是否具有关联的第二物料;如果是,则所述当前编码场景为多步骤插入代码场景;否则,所述当前编码场景为行内插入代码场景。
可选的,所述装置还包括:代码插入单元,所述代码插入单元用于:如果所述当前编码场景为行内插入代码场景,则将所述第一物料插入当前光标位置关联的代码逻辑位置。
可选的,所述代码插入单元,具体用于:将所述第一物料作为与所述第一上下文向量匹配的第一代码物料填写至所述代码块;根据所述IDE的提示协议将至少部分第一代码物料封装为可通过IDE显示的代码推荐信息并以提示选项形式显示;响应于所述提示选项中的目标选项被选择,将所述目标选项对应的第一代码物料插入当前光标位置关联的代码编辑位置。
可选的,所述代码插入单元,具体用于:如果所述当前编码场景为多步骤插入代码场景,则获取用于确定所述第二物料的第二物料上下文,并根据所述第二物料上下文生成匹配的第二代码物料;其中,所述第二代码物料包括用于在所述第一代码物料的基础上对所述目标代码和/或与所述目标代码关联的其他代码进行辅助编码的一个或多个代码片段和/或代码文件。
可选的,所述代码插入单元,具体用于:对所述第二物料上下文进行向量化得到第二上下文向量;根据所述第二上下文向量进行相似度查询得到匹配的第二物料向量以及对应的第二物料;根据所述第二物料向量构造第一提示信息,将所述第二物料作为参考代码插入所述第一提示信息得到第二提示信息;将所述第二提示信息输入用于提供代码物料的代码生成模型,得到与第二物料上下文匹配的所述第二代码物料。
可选的,所述代码插入单元,具体用于:响应于针对与所述第一代码物料对应的代码推荐信息的选择触发,获取用于预测生成所述第二代码物料的需求规则;根据所述需求规则以及所述第一物料上下文生成所述第二物料上下文。
可选的,所述代码插入单元,具体用于:将IDE的用户界面作为第一界面,在所述第一界面显示与所述第一代码物料对应的代码推荐信息;响应于针对所述代码推荐信息的选择触发,加载用于与编码用户交互的第二界面,所述第二界面用于引导编码用户输入和/或选择所述需求规则。
可选的,所述代码插入单元,具体用于:响应于针对与所述第二代码物料对应的代码推荐信息的选择触发,加载用于比较代码的第三界面;在所第三界面比较基于所述第二代码物料修改的一个或多个代码文件,引导编码用户插入代码。
可选的,所述针对与所述第一代码物料对应的代码推荐信息的选择触发,表示编码用户选择插入表单组件;所述第二代码物料的需求规则,包括编码用户输入或选择的表单接口;所述第二代码物料,包括生成的表单文件。
可选的,所述代码插入单元,具体用于:生成的所述表单文件,以流式输出形式显示于所述第二界面。
可选的,所述代码推荐单元904,具体用于:响应于用于加载AI会话窗口的唤起指令,加载所述AI会话窗口;通过所述AI会话窗口接收编码用户输入的用户提示信息;获取并显示针对所述用户提示信息的响应信息。
可选的,所述代码推荐单元904,具体用于:根据所述第一物料向量和/或第一上下文向量构造提示信息;将所述提示信息输入代码生成模型得到所述代码物料;所述代码生成模型用于根据所述提示信息预测生成与所述提示信息的特征匹配的代码物料。
可选的,所述代码推荐单元904,具体用于:将所述第一物料作为参考代码添加至所述提示信息;将包含所述参考代码的提示信息输入所述代码生成模型得到所述代码物料。
可选的,每一备选代码物料,包含以下任意信息:物料基础信息、版本控制信息、插入文本信息、物料上下文、插入指令、文件操作信息、自执行物料标记、关联物料标记。
以上述实施例为基础,本申请第八实施例提供一种用于辅助编码的插件,相关的部分请参见上述实施例的对应说明即可。所述用于辅助编码的插件,基于遵循IDE的开发规范的插件框架实现;所述插件框架保存目标代码的代码元信息,所述代码元信息用于记录所述目标代码对应的语法树的信息以及代码块的信息,所述代码块与所述语法树的语法树节点关联并与所述语法树同步更新;所述插件安装或集成于所述IDE之后用于实现本申请实施例提供的所述数据处理方法。
以上述实施例为基础,本申请第九实施例提供一种电子设备,相关的部分请参见上述实施例的对应说明即可。请参考图10,图中所示的电子设备包括:存储器,以及处理器;所述存储器用于存储计算机程序,所述计算机程序被处理器运行后,执行本申请实施例提供的所述方法。
以上述实施例为基础,本申请第十实施例提供一种计算机存储介质,相关的部分请参见上述实施例的对应说明即可。所述计算机存储介质的示意图类似图10,图中的存储器可以理解为所述存储介质。所述计算机存储介质存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现本申请实施例提供的所述方法。
在一个典型的配置中,电子设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
Claims (13)
1.一种插件框架,其特征在于,包括:适配模块、代码元信息模块、响应式处理层;
所述适配模块,用于将IDE分发的光标变化事件通知所述代码元信息模块以及所述响应式处理层;响应于所述响应式处理层针对所述光标变化事件的提示触发指令而触发将当前光标位置对应的可选代码物料基于IDE的提示协议组装为通过所述IDE显示的代码推荐信息;响应于所述IDE检测到的针对所述代码推荐信息的用户操作行为,触发执行所述响应式处理层的预定的辅助编码功能逻辑;其中,所述代码物料,为用于辅助编码的物料;
所述代码元信息模块,用于生成与目标代码对应的代码元信息,其中,所述代码元信息用于记录所述目标代码的语法树的信息、代码块的信息以及当前光标位置,所述代码块与所述语法树的语法树节点关联;根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块;其中,所述代码块为在所述目标代码中执行辅助编码操作的最小操作单元;所述代码块元信息中记录的代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息;
所述响应式处理层,用于异步调用出码服务,获取代码块的可选代码物料并异步回填至所述代码元信息中对应的代码块;响应于所述光标变化事件,向所述适配模块发送所述提示触发指令以触发所述可选代码物料被组装为通过所述IDE显示的代码推荐信息;根据所述IDE的功能逻辑命令规则实现所述预定的辅助编码功能逻辑;
其中,所述响应式处理层,具体用于:根据所述用户输入信息确定所述物料上下文,并将所述物料上下文记录在所述代码元信息的当前代码块中;根据所述物料上下文向所述出码服务请求获得与所述物料上下文匹配的代码物料,并确定与所述代码物料关联的代码推荐信息;将所述代码物料以及与所述代码物料关联的代码推荐信息,记录至所述当前代码块中;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型出码服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。
2.根据权利要求1所述的插件框架,其特征在于,还包括:桥接模块;
所述桥接模块,用于根据指定插件拓展规范将所述IDE的提示协议封装为插件接口并提供对应的插件拓展点,所述插件拓展点用于向所述插件框架注册基于所述插件接口实现的辅助编码功能逻辑以提供特定插件功能。
3.根据权利要求1所述的插件框架,其特征在于,还包括:元信息管理模块;
所述元信息管理模块,用于根据所述适配模块的光标变化事件、功能逻辑命令以及针对所述光标变化事件反馈的代码推荐信息管理多代码文件并进行代码元信息的更新插入,并将所述代码元信息进行持久化保存;其中,代码元信息与打开的代码文件一一对应。
4.根据权利要求1所述的插件框架,其特征在于,所述响应式处理层,还用于:
如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,并且当前代码块的信息中包括可选代码物料集,则获取至少部分可选代码物料,所述至少部分可选代码物料,基于IDE的提示协议被组装为通过所述IDE显示的代码推荐信息;
如果根据当前光标位置从所述代码元信息中未得到对应的代码块,则根据用户输入信息生成初始化的代码块,则通过所述IDE展示默认推荐信息;
如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,但当前代码块的信息中未包括可选代码物料,则通过所述IDE展示默认推荐信息。
5.根据权利要求1所述的插件框架,其特征在于,所述根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块,包括:
根据相似度算法从所述代码元信息中剔除语法树更新后差异超出相似度阈值的代码块;
其中,所述用户输入信息包括所述光标变化事件对应的单一字符输入或多个字符批量输入。
6.根据权利要求1所述的插件框架,其特征在于,所述适配模块,还用于:预先向IDE的交互类扩展点注册光标变化事件、功能逻辑命令以及推荐提供器;
所述响应式处理层,还用于:根据IDE的接口规则实现推荐提供器的功能,以及实现与所述光标变化事件、功能逻辑命令对应的交互接口;
通过所述光标变化事件对应的交互接口,实现根据所述代码元信息模块传递的光标变化事件从所述代码元信息记录的代码块中确定当前光标位置关联的当前代码块,触发推荐提供器确定所述当前代码块对应的当前推荐信息并基于IDE的提示协议封装后反馈给IDE进行显示;
通过与功能逻辑命令对应的交互接口,实现响应于所述功能逻辑命令来确定所述代码推荐信息中的目标推荐信息以及根据所述目标推荐信息对当前代码块执行辅助编码操作。
7.一种用于辅助编码的插件,其特征在于,根据权利要求1-6任一项所述的插件框架实现,所述插件框架遵循IDE的开发规范;所述插件包括:智能提示模块,自动编码模块;其中,
所述智能提示模块,用于响应于监听到光标变化事件确定光标位置关联的代码块,所述代码块的信息保存与目标代码对应的代码元信息中;调用出码服务以请求获取所述代码块对应的可选代码物料,将所述可选代码物料异步回填至所述代码块的信息中;根据当前光标位置确定并输出当前推荐信息;其中,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的代码块的可选代码物料进行组装而得到;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;
所述自动编码模块,用于响应于对所述当前推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息对应的代码物料对当前代码块执行辅助编码操作。
8.一种代码辅助系统,其特征在于,包括:IDE、权利要求1-6任一项所述的插件框架、权利要求7所述的插件、出码服务层、物料存储层;其中,
所述IDE,响应于激活事件而加载所述插件;捕获光标变化事件以及功能逻辑命令并分发给所述插件框架;通过用户界面显示代码推荐信息,接收针对所述代码推荐信息的用户操作行为;
所述插件框架,用于生成与目标代码对应的代码元信息,其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;响应于IDE分发的光标变化事件,根据所述光标变化事件对应的用户输入信息同步更新所述语法树与所述代码块,以及调用第一插件接口;响应于所述IDE分发的功能逻辑命令,调用第二插件接口;其中,所述第一插件接口为所述插件向所述插件框架的编程扩展点注册的插件接口;所述第二插件接口为所述插件向所述插件框架的命令扩展点注册的插件接口;
所述插件,用于响应于所述第一插件接口被调用,从所述代码元信息记录的代码块中确定当前光标位置关联的当前代码块;向所述出码服务层发送出码请求以获得可选代码物料并异步回填至所述当前代码块,以及,触发所述可选代码物料基于所述插件框架封装的IDE的提示协议被组装为可通过IDE显示的代码推荐信息;响应于所述第二插件接口被调用,根据所述功能逻辑命令对应的用户操作行为实现所述插件的辅助编码功能;
所述出码服务层,用于响应于所述出码请求调用出码服务,得到与所述出码请求包含的物料上下文匹配的可选代码物料,将所述可选代码物料反馈给所述插件;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型出码服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息;
所述物料存储层,包括存储有用于生成多模型的训练集的物料中心和/或用于多维搜索的物料库。
9.一种数据处理方法,其特征在于,包括:
生成与目标代码对应的代码元信息;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;其中,所述代码块为在所述目标代码中执行辅助编码操作的最小操作单元;所述代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息;
获取用户输入信息,根据所述用户输入信息更新所述语法树后更新所述代码块;
响应于监听到光标变化事件,从所述代码元信息记录的代码块中确定光标位置关联的代码块,获取所述代码块对应的可选代码物料并填写至所述代码块;其中,所述代码物料,为用于辅助编码的物料;
根据当前光标位置确定并输出当前推荐信息,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的当前代码块的可选代码物料进行组装而得到;
其中,所述获取所述代码块对应的可选代码物料,包括:判断针对所述代码块是否已完成上一次出码请求;若是,则异步调用出码服务以请求获取与所述代码块的物料上下文匹配的可选代码物料;若否,则等待完成上一次出码请求;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型出码服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。
10.根据权利要求9所述的方法,其特征在于,还包括:
响应于对所述当前推荐信息的用户操作行为,确定目标推荐信息,根据所述目标推荐信息对当前代码块执行辅助编码操作;
所述代码块与所述物料上下文所对应的一个或多个语法树节点关联。
11.根据权利要求9所述的方法,其特征在于,所述根据当前光标位置确定并输出当前推荐信息,包括:
如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,并且当前代码块的信息中包括可选代码物料,则获取至少部分可选代码物料,根据IDE的提示协议组装得到可通过IDE显示的代码推荐信息,作为所述当前推荐信息;
如果根据当前光标位置从所述代码元信息中未得到对应的代码块,则根据用户输入信息生成初始化的代码块,展示默认推荐信息;
如果根据当前光标位置从所述代码元信息中得到对应的当前代码块,但当前代码块的信息中未包括可选代码物料,则展示默认推荐信息。
12.一种数据处理装置,其特征在于,包括:
核心数据缓存单元,用于生成与目标代码对应的代码元信息;其中,所述代码元信息用于记录所述目标代码的语法树的信息及代码块的信息,所述代码块与所述语法树的语法树节点关联;其中,所述代码块为在所述目标代码中执行辅助编码操作的最小操作单元;所述代码块的信息包括:物料上下文、所述物料上下文关联的一个或多个语法树节点、代码推荐历史信息;
数据更新单元,用于获取用户输入信息,根据所述用户输入信息更新所述语法树后更新所述代码块;
物料获取单元,用于响应于监听到光标变化事件,从所述代码元信息记录的代码块中确定光标位置关联的代码块,获取所述代码块对应的可选代码物料并填写至所述代码块;其中,所述代码物料,为用于辅助编码的物料;
推荐单元,用于根据当前光标位置确定并输出当前推荐信息,所述当前推荐信息,为基于IDE的提示协议针对当前光标位置关联的当前代码块的可选代码物料进行组装而得到;
其中,所述获取所述代码块对应的可选代码物料,包括:判断针对所述代码块是否已完成上一次出码请求;若是,则异步调用出码服务以请求获取与所述代码块的物料上下文匹配的可选代码物料;若否,则等待完成上一次出码请求;其中,所述出码服务包括大模型出码服务和/或搜索服务;所述大模型出码服务基于多模型识别物料上下文语义特征,从而学习生成所述物料上下文匹配的代码物料;所述搜索服务用于根据所述物料上下文对应的关键字进行多维搜索得到匹配的代码物料的信息。
13.一种电子设备,其特征在于,包括:
存储器,以及处理器;所述存储器用于存储计算机程序,所述计算机程序被所述处理器运行后,执行权利要求9-11任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311585177.8A CN117289929B (zh) | 2023-11-24 | 2023-11-24 | 一种插件框架、插件及数据处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311585177.8A CN117289929B (zh) | 2023-11-24 | 2023-11-24 | 一种插件框架、插件及数据处理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117289929A CN117289929A (zh) | 2023-12-26 |
CN117289929B true CN117289929B (zh) | 2024-03-19 |
Family
ID=89253923
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311585177.8A Active CN117289929B (zh) | 2023-11-24 | 2023-11-24 | 一种插件框架、插件及数据处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117289929B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117289919B (zh) * | 2023-11-24 | 2024-02-20 | 浙江口碑网络技术有限公司 | 一种数据处理方法、装置及电子设备 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN110083340A (zh) * | 2019-03-19 | 2019-08-02 | 深圳壹账通智能科技有限公司 | 代码生成方法、装置、计算机设备及存储介质 |
CN112817583A (zh) * | 2021-04-19 | 2021-05-18 | 阿里云计算有限公司 | 一种代码编辑方法、装置、服务端、用户设备及存储介质 |
CN112925563A (zh) * | 2021-02-24 | 2021-06-08 | 南通大学 | 一种面向代码重用的源代码推荐方法 |
CN113391797A (zh) * | 2021-06-15 | 2021-09-14 | 北京猿力未来科技有限公司 | 一种辅助编程方法及相关设备 |
CN113672208A (zh) * | 2021-09-08 | 2021-11-19 | 国泰君安证券股份有限公司 | 基于计算机软件实现兼容信创适配的低代码开发框架系统 |
CN114356335A (zh) * | 2021-12-24 | 2022-04-15 | 北京字跳网络技术有限公司 | 数据处理方法、装置、设备及介质 |
CN114675816A (zh) * | 2022-03-14 | 2022-06-28 | 麒麟软件有限公司 | 一种基于用户行为的代码补全排序方法及系统 |
CN116069303A (zh) * | 2023-02-14 | 2023-05-05 | 杭州数跑科技有限公司 | 一种代码生成方法、装置、设备及存储介质 |
CN116406459A (zh) * | 2020-11-02 | 2023-07-07 | 华为云计算技术有限公司 | 一种代码处理方法、装置、设备及介质 |
CN116931911A (zh) * | 2023-06-15 | 2023-10-24 | 明物数智科技研究院(南京)有限公司 | 一种基于aigc的智能低代码应用开发平台及开发方法 |
CN117093261A (zh) * | 2023-08-09 | 2023-11-21 | 上海妙一生物科技有限公司 | 一种基于构建时抽象语法树的代码容错处理方法和装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102190813B1 (ko) * | 2014-03-25 | 2020-12-14 | 한국전자통신연구원 | 코드 추천 및 공유 시스템 및 방법 |
US11836469B2 (en) * | 2021-06-03 | 2023-12-05 | International Business Machines Corporation | Dynamic code snippet promotion |
-
2023
- 2023-11-24 CN CN202311585177.8A patent/CN117289929B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN110083340A (zh) * | 2019-03-19 | 2019-08-02 | 深圳壹账通智能科技有限公司 | 代码生成方法、装置、计算机设备及存储介质 |
CN116406459A (zh) * | 2020-11-02 | 2023-07-07 | 华为云计算技术有限公司 | 一种代码处理方法、装置、设备及介质 |
CN112925563A (zh) * | 2021-02-24 | 2021-06-08 | 南通大学 | 一种面向代码重用的源代码推荐方法 |
CN112817583A (zh) * | 2021-04-19 | 2021-05-18 | 阿里云计算有限公司 | 一种代码编辑方法、装置、服务端、用户设备及存储介质 |
CN113391797A (zh) * | 2021-06-15 | 2021-09-14 | 北京猿力未来科技有限公司 | 一种辅助编程方法及相关设备 |
CN113672208A (zh) * | 2021-09-08 | 2021-11-19 | 国泰君安证券股份有限公司 | 基于计算机软件实现兼容信创适配的低代码开发框架系统 |
CN114356335A (zh) * | 2021-12-24 | 2022-04-15 | 北京字跳网络技术有限公司 | 数据处理方法、装置、设备及介质 |
CN114675816A (zh) * | 2022-03-14 | 2022-06-28 | 麒麟软件有限公司 | 一种基于用户行为的代码补全排序方法及系统 |
CN116069303A (zh) * | 2023-02-14 | 2023-05-05 | 杭州数跑科技有限公司 | 一种代码生成方法、装置、设备及存储介质 |
CN116931911A (zh) * | 2023-06-15 | 2023-10-24 | 明物数智科技研究院(南京)有限公司 | 一种基于aigc的智能低代码应用开发平台及开发方法 |
CN117093261A (zh) * | 2023-08-09 | 2023-11-21 | 上海妙一生物科技有限公司 | 一种基于构建时抽象语法树的代码容错处理方法和装置 |
Non-Patent Citations (3)
Title |
---|
Vaithilingam, P 等.Towards More Effective AI-Assisted Programming: A Systematic Design Exploration to Improve Visual Studio IntelliCode's User Experience. 2023 IEEE/ACM 45TH INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING: SOFTWARE ENGINEERING IN PRACTICE, ICSE-SEIP.2023,全文. * |
动态分析JavaScript的代码推荐方法;刘爽;;数码世界(第02期);全文 * |
基于结构嵌入分析的智能代码推荐系统的设计与实现;韩奇;中国优秀硕士学位论文全文数据库信息科技辑;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117289929A (zh) | 2023-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10606573B2 (en) | System and method for computer language migration using a re-architecture tool for decomposing a legacy system and recomposing a modernized system | |
CN102222039B (zh) | 使用dsl来调用api以测试软件 | |
TWI493464B (zh) | 用於晚期繫結可程式化輔助的系統與方法 | |
US20200125482A1 (en) | Code examples sandbox | |
CN110244942B (zh) | 一种页面生成方法、装置及系统 | |
CN117289929B (zh) | 一种插件框架、插件及数据处理方法、装置及电子设备 | |
US9524279B2 (en) | Help document animated visualization | |
CN105683924A (zh) | 通过从在本机模式中执行转变为在经解释的模式中执行来调试本机代码 | |
US8108829B2 (en) | Method for automating variables in end-user programming system | |
CN104407863A (zh) | 抽象控件模型编程装置和方法 | |
CN109710250B (zh) | 一种用于构建用户界面的可视化引擎系统及方法 | |
US20200150937A1 (en) | Advanced machine learning interfaces | |
WO2023065746A1 (zh) | 算法应用元生成方法、装置、电子设备、计算机程序产品及计算机可读存储介质 | |
CN114564199A (zh) | 一种生成使用页面的方法、装置、设备及可读存储介质 | |
CN114356964A (zh) | 数据血缘构建方法、装置、存储介质及电子设备 | |
CN117311683A (zh) | 一种代码辅助系统、代码辅助处理方法、装置及电子设备 | |
US20020147963A1 (en) | Method and apparatus for generating machine control instructions | |
CN117289919B (zh) | 一种数据处理方法、装置及电子设备 | |
US10430309B2 (en) | Duplicating a task sequence from a graphical user interface interaction for a development application in view of trace data | |
CN113885844A (zh) | 一种业务服务编排方法及相关装置 | |
CN112181483A (zh) | 等离子体控制系统软件开发平台及方法 | |
Nogueira et al. | Automatic generation of test cases and test purposes from natural language | |
Blunk et al. | Efficient Development of Domain-Specific Simulation Modelling Languages and Tools | |
Couto et al. | MapIt: A model based pattern recovery tool | |
CN113010400B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |