本申请涉及计算机,尤其涉及一种检查代码的方法及装置。
背景技术:
1、目前主流的集成开发环境(integrated development environment,ide)的编辑器都支持代码实时检查功能,以检查代码中的错误,便于编写人员及时修改。
2、编辑器在检查代码时,一般采用全量遍历的方式进行检查,即通过将代码文件解析为抽象语法树(abstract syntax tree,ast),树上的每个节点都表示源代码中的一种结构。然后,编辑器自上而下遍历抽象语法树的各个节点,结合每个节点的上下文对该节点进行检查,判断节点是否存在错误。
3、但是,编辑器在检查时,即使没有被修改过的代码节点也会进行检查,导致开发者在修改代码文件后很长时间才会收到错误检查结果。尤其是当代码文件的文件规模较大,代码行数较多时,每次修改都需要更久的时间才能获取到最新的错误检查结果,影响开发者的使用体验。
技术实现思路
1、本申请实施例提供一种检查代码的方法及装置,实现代码的快速检查,提高代码开发效率。
2、为达到上述目的,本申请的实施例采用如下技术方案:
3、第一方面,提供了一种检查代码的方法,该方法包括:获取代码文件对应的第一抽象语法树。第一抽象语法树包括:代码文件中基本节点的代码信息;代码信息用于指示基本节点的代码内容。利用基本节点的代码信息,确定第一抽象语法树的依赖关系,该依赖关系用于指示第一抽象语法树中组合节点与其依赖的组合节点间的对应关系。一个组合节点包括至少一个基本节点。增量检查第一抽象语法树中满足检查条件的基本节点;该检查条件用于指示基本节点在代码文件的参考版本上存在代码内容变化和/或依赖的组合节点代码内容变化。
4、通过本申请提供的检查代码的方法,获取代码文件对应的第一抽象语法树,并利用该第一抽象语法树中的基本节点的代码信息,确定第一抽象语法树的依赖关系,进而增量检查该第一抽象语法树中满足检查条件的基本节点。本申请在检查代码文件时,利用代码文件对应的抽象语法树以及抽象语法树的依赖关系,配置合理的检查条件(基本节点代码内容变化和/或依赖的组合节点代码内容变化),仅检查该代码文件中满足检测条件的基本节点,节省代码检查的时间,从而提高代码开发效率。
5、一种可能的实现方式,检查条件包括下述内容中一项或多项:在第一抽象语法树与第二抽象语法树中的代码内容不同;第二语法树为代码文件的参考版本对应的抽象语法树。或,所属的组合节点在第一抽象语法树与第二抽象语法树中,所依赖的组合节点的代码内容不同。
6、一种可能的实现方式,检查条件还包括:在第二抽象语法树中具有错误的检查结果。
7、一种可能的实现方式,增量检查第一抽象语法树中满足检查条件的基本节点,包括:将第一抽象语法树中满足检查条件的基本节点进行标记;检查第一抽象语法树中标记的基本节点。
8、该可能的实现方式中,通过对满足检查条件的基本节点进行标记,可以在检查代码文件时,仅检查已被标记的基本节点,不重复检查未被修改的基本节点,节省代码检查的时间,从而提高代码开发效率。
9、一种可能的实现方式,本申请提供的检查代码的方法,还包括:对代码文件的初始版本进行全量解析,确定代码文件的初始版本对应的第三抽象语法树;对第三抽象语法树中所有基本节点进行全量检查;全量检查用于指示检查代码文件对应的第三抽象语法树的所有基本节点。
10、该可能的实现方式中,通过对代码文件的初始版本进行全量解析,得到该代码文件的初始版本的第三抽象语法树,并对抽象语法树中所有节点进行全量检查,可以避免第一次打开代码文件,由于代码文件中的语法问题而导致代码文件在运行时出现错误。
11、一种可能的实现方式,组合节点包括以下维度中的一种或多种:词法单元、函数或块状节点。
12、一种可能的实现方式,获取代码文件对应的第一抽象语法树,包括:对代码文件进行增量解析,确定代码文件对应的第一抽象语法树。增量解析用于解析代码文件与参考版本相比变更的代码内容。
13、第二方面,本申请提供了一种检查代码的装置,该装置可以包括:获取模块、确定模块、检查模块。其中:
14、获取模块,用于获取代码文件对应的第一抽象语法树。第一抽象语法树包括:代码文件中基本节点的代码信息;代码信息用于指示基本节点的代码内容。
15、确定模块,用于利用第一抽象语法树中基本节点的代码信息,确定第一抽象语法树的依赖关系。依赖关系用于指示第一抽象语法树中组合节点与组合节点依赖的组合节点间的对应关系。一个组合节点包括至少一个基本节点。
16、检查模块,用于增量检查第一抽象语法树中满足检查条件的基本节点。检查条件用于指示基本节点在代码文件的参考版本上存在代码内容变化和/或依赖的组合节点代码内容变化。
17、一种可能的实现方式,检查条件包括下述内容中一项或多项:在第一抽象语法树与第二抽象语法树中的代码内容不同;第二语法树为代码文件的参考版本对应的抽象语法树。或,所属的组合节点在第一抽象语法树与第二抽象语法树中,所依赖的组合节点的代码内容不同。
18、一种可能的实现方式,检查条件还包括:在第二抽象语法树中具有错误的检查结果。
19、一种可能的实现方式,检查模块,具体用于:将第一抽象语法树中满足检查条件的基本节点进行标记;检查第一抽象语法树中标记的基本节点。
20、一种可能的实现方式,获取模块,还用于对代码文件的初始版本进行全量解析,确定代码文件的初始版本对应的第三抽象语法树。
21、检查模块,用于对第三抽象语法树中所有基本节点进行全量检查。全量检查用于指示检查代码文件对应的第三抽象语法树的所有基本节点。
22、一种可能的实现方式,组合节点包括以下维度中的一种或多种:词法单元、函数或块状节点。
23、一种可能的实现方式,获取模块具体用于:对代码文件进行增量解析,确定代码文件对应的第一抽象语法树。增量解析用于解析代码文件与参考版本相比变更的代码内容。
24、第三方面,提供了一种计算设备,该计算设备具有实现上述第一方面所述的检查代码的方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
25、第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机可以执行上述第一方面中任一项所述的检查代码的方法。
26、第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机可以执行上述第一方面中任一项所述的检查代码的方法。
27、其中,第二方面至第五方面中任一种设计方式所带来的技术效果可参见第一方面中不同设计方式所带来的技术效果,此处不再赘述。
1.一种检查代码的方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述检查条件包括下述内容中一项或多项:
3.根据权利要求2所述的方法,其特征在于,所述检查条件还包括:在所述第二抽象语法树中具有错误的检查结果。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述增量检查所述第一抽象语法树中满足检查条件的基本节点,包括:
5.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
6.根据权利要求1-5任一项所述的方法,其特征在于,所述组合节点包括以下维度中的一种或多种:词法单元、函数或块状节点。
7.根据权利要求1所述的方法,其特征在于,所述获取代码文件对应的第一抽象语法树,包括:
8.一种检查代码的装置,其特征在于,所述装置包括:
9.根据权利要求8所述的装置,其特征在于,所述检查条件包括下述内容中一项或多项:
10.根据权利要求9所述的装置,其特征在于,所述检查条件还包括:在所述第二抽象语法树中具有错误的检查结果。
11.根据权利要求8-10任一项所述的装置,其特征在于,所述检查模块,具体用于:
12.根据权利要求8-11任一项所述的装置,其特征在于,
13.根据权利要求8-12任一项所述的装置,其特征在于,所述组合节点包括以下维度中的一种或多种:词法单元、函数或块状节点。
14.根据权利要求8所述的装置,其特征在于,所述获取模块,具体用于:
15.一种计算设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行如权利要求1-7任一项所述的检查代码的方法。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的检查代码的方法。
17.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如权利要求1-7中任一项所述的检查代码的方法。