代码检查的方法、装置、存储介质和处理器与流程

文档序号:11250790阅读:249来源:国知局
本发明涉及代码检查领域,具体而言,涉及代码检查的方法、装置、存储介质和处理器。
背景技术
::目前,对lua动态语言需要进行静代码检查都是出于规范程序代码的需要,现有技术对lua代码进行静态检查,主要是通过检查代码、记录错误以及通知提交者这些步骤来实现,但是这些步骤的所有操作都是由人工进行的,需要人工检查代码再逐个记录代码中有问题的地方,然后再手动发送给提交者进行修正,待提交者修正后再由他人进行复查,再次进入该检查、记录、通知的过程,所以现有技术对lua动态语言进行静代码的检查是十分低效率的。针对现有技术中对动态语言进行代码检查效率低的问题,目前尚未提出有效地解决方案。技术实现要素:本发明提供了代码检查的方法、装置、存储介质和处理器,以解决现有技术中对动态语言进行代码检查效率低的问题。根据本发明实施例的一个方面,提供了一种代码检查的方法,包括:监测步骤:根据预先配置的条件监测源代码文件库中的源代码文件是否有更新,其中,所述源代码文件为动态编程语言编写的源代码;缓存步骤:根据更新的源代码文件生成该源代码文件对应的缓存内容,并进行缓存,其中,所述缓存内容用于检查对应的源代码文件的错误信息,所述缓存内容存于缓存库中;检查步骤:对所述缓存内容进行检查;通知步骤:在检查出错误信息的情况下,将所述错误信息通知给编程人员;在所述编程人员响应于所述错误信息对对应的源代码文件进行修改之后,触发监测步骤至检查步骤,如果检查出错误信息再通知所述编程人员,直到未出现错误。进一步地,生成所述更新的源代码文件对应的缓存内容包括:生成所述更新的源代码文件对应的语法树,其中,所述缓存内容包括所述语法树;对所述缓存内容进行检查包括:对所述语法树进行检查。进一步地,所述缓存内容还包括以下至少之一:所述源代码文件的路径、所述源代码文件的校验码、所述源代码文件。进一步地,所述缓存内容包括所述源代码文件的路径的情况下,根据更新的源代码文件生成该源代码文件对应的缓存内容包括:获取所述源代码文件库中的路径,其中,所述路径下存有所述路径对应的源代码文件和所述源代码文件对应的校验码;根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到缓存库中;使所述缓存库中的语法树对应的路径与所有源代码文件库中的语法树对应的源代码文件的路径相一致。进一步地,根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到缓存库中包括:查找在所述缓存库中是否存在所述源代码文件库中的路径;如果不存在所述源代码文件库中的路径,则根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到所述缓存库中。进一步地,根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到缓存库中还包括:查找在所述缓存库中是否存在所述源代码文件库中的路径;如果存在所述源代码文件库中的路径,则判断所述缓存库中所述路径下的校验码与所述源代码文件库中所述路径下的校验码是否一致;如果不一致,则重新根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到所述缓存库中。进一步地,根据更新的源代码文件生成该源代码文件对应的缓存内容包括:查找在所述源代码文件库中是否存在所述缓存库中的所述路径,其中,所述路径下存有所述路径对应的源代码文件和所述源代码文件对应的校验码;如果不存在,则删除所述路径下的所述源代码文件和所述源代码文件对应的校验码。进一步地,对所述语法树进行检查包括:遍历所述语法树,其中,所述语法树包括至少一个节点,所述节点是将一个语法的多个数据节点包装成的一个语法对象;根据所述语法树中的节点对应的语法类型获取该节点对应的检查规则,其中,每一个语法类型对应n个预先配置的检查规则,所述n为大于等于0的整数;根据获取到的检查规则对所述语法树进行检查。进一步地,为语法类型配置的检查规则包括多个的情况下,根据获取到的检查规则对所述语法树进行检查包括:根据所述多个检查规则对应的顺序和/或优先级对所述语法树进行检查。根据本发明实施例的另一个方面,还提供了一种代码检查装置,包括:监测单元,用于根据预先配置的条件监测源代码文件库中的源代码文件是否有更新,其中,所述源代码文件为动态编程语言编写的源代码;缓存器,用于根据更新的源代码文件生成该源代码文件对应的缓存内容,并进行缓存,其中,所述缓存内容用于检查对应的源代码文件的错误信息,所述缓存内容存于缓存库中;检查器,用于对所述缓存内容进行检查;通知器,用于在检查出错误信息的情况下,将所述错误信息通知给编程人员;流程控制器,用于在所述编程人员响应于所述错误信息对对应的源代码文件进行修改之后,触发监测步骤至检查步骤,如果检查出错误信息再通知所述编程人员,直到未出现错误。进一步地,所述缓存器包括:生成模块,用于生成所述更新的源代码文件对应的语法树,其中,所述缓存内容包括所述语法树;所述检查器包括:检查模块,用于对所述语法树进行检查。进一步地,所述缓存内容还包括以下至少之一:所述源代码文件的路径、所述源代码文件的校验码、所述源代码文件。进一步地,所述缓存内容包括所述源代码文件的路径的情况下,缓存器包括:获取模块,用于获取所述源代码文件库中的路径,其中,所述路径下存有所述路径对应的源代码文件和所述源代码文件对应的校验码;添加模块,用于根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到缓存库中;同步模块,用于使所述缓存库中的语法树对应的路径与所有源代码文件库中的语法树对应的源代码文件的路径相一致。进一步地,所述添加模块包括:第一查找子模块,用于查找在所述缓存库中是否存在所述源代码文件库中的路径;第一添加子模块,用于如果不存在所述源代码文件库中的路径,则根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到所述缓存库中。进一步地,所述添加模块还包括:第二查找子模块,用于查找在所述缓存库中是否存在所述源代码文件库中的路径;判断子模块,用于如果存在所述源代码文件库中的路径,则判断所述缓存库中所述路径下的校验码与所述源代码文件库中所述路径下的校验码是否一致;第二添加子模块,用于如果不一致,则重新根据所述路径下的所述源代码文件生成相应的语法树并将所述语法树添加到所述缓存库中。进一步地,所述缓存器包括:查找模块,用于查找在所述源代码文件库中是否存在所述缓存库中的所述路径,其中,所述路径下存有所述路径对应的源代码文件和所述源代码文件对应的校验码;删除模块,用于如果不存在,则删除所述路径下的所述源代码文件和所述源代码文件对应的校验码。进一步地,所述检查模块包括:查寻子模块,用于遍历所述语法树,其中,所述语法树包括至少一个节点,所述节点是将一个语法的多个数据节点包装成的一个语法对象;获取子模块,用于根据所述语法树中的节点对应的语法类型获取该节点对应的检查规则,其中,每一个语法类型对应n个预先配置的检查规则,所述n为大于等于0的整数;第一检查子模块,用于根据获取到的检查规则对所述语法树进行检查。进一步地,所述第一检查子模块包括:第二检查子模块,用于在语法类型配置的检查规则包括多个的情况下,根据所述多个检查规则对应的顺序和/或优先级对所述语法树进行检查。根据本发明实施例的另一个方面,还提供给了一种存储介质,所述存储介质上保存有程序,所述程序被运行时执行上所述的方法。根据本发明实施例的另一个方面,还提供给了一种处理器,所述程序被运行时执行上述的方法。根据本发明实施例中,采用监测步骤:根据预先配置的条件监测源代码文件库中的源代码文件是否有更新,其中,所述源代码文件为动态编程语言编写的源代码;缓存步骤:根据更新的源代码文件生成该源代码文件对应的缓存内容,并进行缓存,其中,所述缓存内容用于检查对应的源代码文件的错误信息;检查步骤:对所述缓存内容进行检查;通知步骤:在检查出错误信息的情况下,将所述错误信息通知给编程人员;在所述编程人员响应于所述错误信息对对应的源代码文件进行修改之后,触发监测步骤至检查步骤,如果检查出错误信息再通知所述编程人员,直到未出现错误。通过本发明解决了对动态语言进行代码检查效率低的问题,从而高效率、高质量的检查代码。附图说明构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是根据本发明实施例的一种代码检查方法的流程图;图2是根据本发明实施例的源代码文件库的目录中的源代码文件以及缓存库中的缓存内容的示意图;图3是根据本发明实施例的缓存库变化示意图;图4是根据本发明实施例的缓存库变化示意图;图5是根据本发明实施例的缓存库变化示意图;图6是根据本发明实施例的缓存库变化示意图;图7是根据本发明实施例的缓存库变化示意图;图8是根据本发明实施例的检查规则示意图;图9是根据本发明实施例的检查规则示意图;图10是根据本实施例的自动化检查与复查流程示意图;图11是根据本发明实施例的语法树的缓存方法的示意图;图12是根据本发明实施例的检查与分析语法树的方法的示意图;图13是根据本发明实施例的错误绑定提交者(编程人员)的记录方法的示意图;图14是根据本发明实施例的智能发送通知的方法的示意图;以及,图15是根据本发明实施例的一种代码检查装置的结构图。具体实施方式需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。本发明实施例提供了一种代码检查方法。图1是根据本发明实施例的一种代码检查方法的流程图。如图1所示,该方法包括如下步骤:步骤s102,监测步骤:根据预先配置的条件监测源代码文件库中的源代码文件是否有更新,其中,源代码文件为动态编程语言编写的源代码;步骤s104,缓存步骤:根据更新的源代码文件生成该源代码文件对应的缓存内容,并进行缓存,其中,缓存内容用于检查对应的源代码文件的错误信息,缓存内容存于缓存库中;步骤s106,检查步骤:对缓存内容进行检查;步骤s108,通知步骤:在检查出错误信息的情况下,将错误信息通知给编程人员;步骤s110,在编程人员响应于错误信息对对应的源代码文件进行修改之后,触发监测步骤至检查步骤,如果检查出错误信息再通知编程人员,直到未出现错误。在上述步骤,采用了将源代码文件的变化存于缓存,将代码文件与缓存中的内容相同步,然后对缓存中的内容进行检查,自动通知给相关的编程人员,自动循环检查,直至修改完成,通过这种结合缓存同步源代码文件的技术以及自动循环检查的步骤代替了现有技术中对代码的人工检查,从而解决了对动态语言进行代码检查效率低的问题,可以高效率、高质量的进行代码检查。下面以lua动态语言为例对上述步骤进行说明:在对lua动态语言进行静态代码检查时可以采用上述方法,首先,启动该lua代码检查装置,然后持续监测源代码文件库的更新状况,当发生更新时,对更新的源代码文件生成缓存,再读取缓存进行检查,检查出的错误信息通知给对应的提交者或者编程人员,该提交者或者编程人员修改有错误信息的源代码文件,再将修改后的源代码文件提交到源代码文件库,会再次触发上述方法流程进行复查,如果该错误仍未修正,会再次发送通知,形成一个循环,直至错误被修正后才会消除向该提交者或者编程人员发送通知,跳出循环。上述步骤中,对缓存内容的检查需要有一定的规则,该规则就是以语法树为检查分析的对象,在一个可选地实施方式中,即,生成更新的源代码文件对应的缓存内容就是生成相对应的语法树,其中,缓存内容包括语法树;而对缓存内容进行检查就是对语法树进行检查。通过上述步骤中对将更新的源代码文件缓存成语法树,既便于自定义检查的规则,又能够提高检查的效率。上述缓存内容至少还包括以下三种情况之一:第一种是源代码文件的路径、它是为了便于缓存中的内容与源代码文件库中的文件相同步而设置的,第二种是源代码文件的校验码,当同步出现异常情况时,使用校验码进一步进行验证,第三种源代码文件是缓存内容中的核心内容,也是缓存库与源代码库中需要同步的内容。缓存内容包括源代码文件的路径的情况下,根据更新的源代码文件生成该源代码文件对应的缓存内容,在一个可选地实施方式中,首先,获取源代码文件库中的路径,其中,路径下存有路径对应的源代码文件和源代码文件对应的校验码;其次,根据路径下的源代码文件生成相应的语法树并将语法树添加到缓存库中;最后,使缓存库中的语法树对应的路径与所有源代码文件库中的语法树对应的源代码文件的路径相一致。通过上述步骤,将缓存库中内容与源代码库中的路径相同步,也就是将每个路径下的缓存内容与源代码库中的内容相同步,从而更加有效的根据源代码文件更新缓存,将相应的语法树添加进缓存是为了增加同步的效率和后续检查的效率,以及易于检查规则的改变。在将源代码库中的更新内容同步到缓存库时有以下几种情况,在一个可选地实施方式中,第一种情况是:在缓存库中完全没有出现源代码库中的某个代码文件时,同步的方式是先查找在缓存库中是否存在源代码文件库中的路径;如果不存在源代码文件库中的路径,则根据路径下的源代码文件生成相应的语法树并将语法树添加到缓存库中。通过在缓存库中查找在源代码库中存在而在缓存库中不存在的路径,将该不存在的路径同步加载到缓存库中,从而有针对性的更新缓存,使得负荷小,更新的速度更快。例如,假设目前有两个代码文件,并且从未启动运行过同步缓存过,会是如图2所示,图2是根据本发明实施例的源代码文件库的目录中的源代码文件以及缓存库中的缓存内容的示意图。图2中的缓存库是没有任何缓存,图3是根据本发明实施例的缓存库变化示意图,当首次启动运行时,如图3所示,以源代码目录中的文件a与文件b的路径作为索引,在缓存库中查找,缓存库中查找不到文件a与文件b的缓存,那么生成文件a与文件b的缓存加入到缓存库中,最终文件a对应有文件a的缓存,文件b对应有文件b的缓存,源代码目录与缓存库达成一致。第二种情况是如果缓存库中存在源代码库中的某个代码文件,但是该代码文件发生了变化,在一个可选地实施方式中,更新缓存库的方式是查找在缓存库中是否存在源代码文件库中的路径;如果存在源代码文件库中的路径,则判断缓存库中路径下的校验码与源代码文件库中路径下的校验码是否一致;如果不一致,则重新根据路径下的源代码文件生成相应的语法树并将语法树添加到缓存库中。例如,虽然会持续检测文件变化而进行同步的,使文件与缓存始终达成一致,但是,假设停止运行,停止期间文件又发生了变化,源代码库的文件目录与缓存库会出现如图4所示的情况,图4是根据本发明实施例的缓存库变化示意图。在运行停止期间,代码目录的文件b删除了,还增加了一个文件c,因此,每次启动运行都需要进行一次同步,第二次启动装置如图5所示,图5是根据本发明实施例的缓存库变化示意图。以源代码目录中的文件a、文件c的路径在缓存库中查找查找到文件a,比较一下检验码,如果检验码不一样,说明文件a发生过变化,需要重新生成语法树更新缓存,如果检验码一样,则不需要生成,从而提高启动运行的效率,查找不到文件c,则判断文件c是一个新增文件,需要生成语法树缓存,添加到缓存库中。第三种情况是源代码文件库中某个代码文件已经删除了,此时缓存库中也需要做相对应的更新,在一个可选地实施方式中,即,根据更新的源代码文件生成该源代码文件对应的缓存内容包括:查找在源代码文件库中是否存在缓存库中的路径,其中,路径下存有路径对应的源代码文件和源代码文件对应的校验码;如果不存在,则删除路径下的源代码文件和源代码文件对应的校验码。通过上述方法中的校验码解决了同一代码文件的改变更新和检查,从而保证缓存库实时的反映源代码文件库中代码文件的情况,以保证后续对缓存库中缓存内容检查的准确性。例如,当以上过程完成后,文件目录与缓存库会是如图6所示,源代码目录中的文件b删除了,但缓存库中还有文件b缓存,这是垃圾缓存,因此需要清理,上述使用源代码目录的文件路径向缓存库查找的方法是查找不到垃圾缓存的,因此,就要反过来查找,使用缓存库中的文件路径向源代码目录查找,查找过程如图7所示,以缓存库中的文件a、b、c路径向源代码目录查找,其中,文件b查找不到,则判断它为垃圾缓存,需要删除,最终缓存库就只有文件a、c的缓存,与源代码目录达成一致完成同步。上述例子中只是使用了几个文件来举例,在实际情况下的源代码文件库中是有上千个文件的,所有文件都生成语法树与只针对有变化的文件才生成,与现有技术相比效率得到极大的提高。结合一个可选的实施方式对上述几种情况进行说明:一个缓存库管理每个缓存,每个缓存的生成方法可以是由lua源代码文件路径、该lua源代码文件校验码与该lua源代码文件解析所得的语法树组合而成,每个缓存中的语法树供给检查器检查分析重复使用,帮助减少解析lua源代码的频率,从而提升效率,只有新增或修改的lua源代码文件才需要解析生成语法树,并更新缓存,缓存更新的时机是在lua静态代码检查装置的启动间期与运行间期,其中,在lua静态代码检查装置启动间期,使用lua源代码文件同步缓存库,它的同步方法是遍历lua源代码文件库中的所有lua源代码文件的路径向缓存库查找,如果找不到对应路径的缓存,则使用该lua源代码文件生成缓存,添加到缓存库中,如果找到对应路径的缓存,则不做任何处理,再遍历缓存库中的所有缓存的路径向lua源代码文件库中查找,如果找不到对应的lua源代码路径,则删除该缓存,待同步完缓存库后装置启动完成,其中在lua静态代码检查装置运行期间,检测lua源代码文件库的更新,同时触发同步缓存,同步方法是,若是增加的lua源代码文件,则生成缓存添加到缓存库中,若是修改的lua源代码文件,则生成校验码与语法树,更新至缓存库中对应的缓存,若是删除的lua源代码文件,则删除缓存库中对应的缓存,同步完成后,就可以进行检查分析。上述步骤中对缓存内容的检查分析就是对语法树进行检查,检查需要遵循一定的规则,在一个可选地实施方式中,需要遍历语法树,其中,语法树包括至少一个节点,节点是将一个语法的多个数据节点包装成的一个语法对象;再根据语法树中的节点对应的语法类型获取该节点对应的检查规则,其中,每一个语法类型对应n个预先配置的检查规则,n为大于等于0的整数;根据获取到的检查规则对语法树进行检查。例如:如图8和图9所示,遍历节点检查,根椐以上所示将会遍历5个节点进行检查检查规则库中的检查规则是根椐检查的需求,由人工制作补充上去的,而检查规则是针对每种语法类型进行制作的,所以每种语法类型会对应有0或多个检查规则。以下为检查工作的流程:首先遍历到set语法对象节点,在检查规则库找到对应set语法对象的检查规则1与2,则使用检查规则1与2,对这个set语法对象进行检查,接着遍历到varlist语法对象节点,在检查规则库中找不到对应的检查规则,则不用检查接着遍历到id语法对象节点,在检查规则库中找到对应id语法对象的检查规则3,则使用检查规则3,对这个id语法对象进行检查,接着遍历到explist语法对象节点,在检查规则库中找不到对应的检查规则,则不用检查;接着遍历到number语法对象节点,在检查规则库中找到对应number语法对象的检查规则4与5,则则使用检查规则4与5,对这个number语法对象进行检查。为语法类型配置的检查规则包括多个的情况下,根据获取到的检查规则对语法树进行检查,在一个可选地实施方式中,根据多个检查规则对应的顺序和/或优先级对语法树进行检查。结合一个可选的实施方式对上述步骤进行说明:遍历语法树,以语法树中的tag标识进行语法识别,并作为一个语法节点,语法节点包括有call、set、local、functiondef、function、localfunctiondef、if、op、paren、forin、string、number、index、id、table、field、fornum、return、invoke、true、false、nil、while、vararg、break、dots、do、block,其中生成全局变量集的方法是先找到声明全局环境源代码文件,再从缓存中取得这些源代码文件的树语法,按语法节点进行遍历,如果是set、functiondef、function语法节点,则把该语法节点添加到全局变量集中,其中检查语法节点的方法是从缓存中取得需要检查的lua源代码文件的语法树,按语法节点进行遍历,如果是block语法节点,则为作为一个代码块,再遍历该代码块下的所有语法子节点进行检查,同时如果是local、localfunctiondef语法节点,需要先把该语法节点加入到该代码块下的局部变量集中,作为该代码块以及该代码块下的所有子代码块的局部变量,每个语法节点都会包含有多个检查规则,每个检查规则都会依懒全局变量集与该代码块局部变量集一起进行检查,这些检查规则是从检查规则库中获取,检查规则库是提供一种支持扩展检查规则的方法,检查规则库用于存放检查规则,而这些检查规则是由人工自定义编写添加的,每种语法可包含多个检查规则,每个语法节点对应有0个或多个检查规则,编写检查规则方法是,以调用不存在变量的检查规则为例,需要在call语法下添加一个检查规则,call即是调用语法,遍历语法树遇到是调用时,则需要检查该调用的变量是否存在,通过call语法节点找到id的语法子节点,id是变量,即是调用的变量,再结合全局变量集与该语法节点所在代码块下的局部变量集进行检查,如果全局变量集与该代码块的局部变量集都不存在这个变量,则它为调用了一个不存在的变量的错误。通过上述步骤可以更高效率、高质量的进行代码检查。结合一个可选的实施方式对上述整个缓存以及检查的过程进行说明:参见图10,是本发明实施例的自动化检查与复查流程示意图,包括:s1001:持续监测源代码文件库的更新,当发生更新时,触发缓存器进行缓存;s1002:缓存完成后,触发检查器读取缓存进行检查;s1003:检查完成后,触发收集器收集错误信息;s1004:收集完成后,触发通知器发送错误信息;s1005:通知器把错误信息向对应提交者发送;s1006:提交者修改错误并提交源代码文件;s1007:流程控制器监测到源代码文件库更新,再次进入检查流程,进行复查;参见图11,是本发明实施例的语法树的缓存方法的示意图,包括:s1101:启动装置期间进行同步缓存;s1102:从lua源代码文件源获取所有源代码文件,包括它们校验码与路径;s1103:从语法树缓存库中获取所有缓存,包括它们校验码与路径;s1104:遍历每个源代码文件的路径,在所有缓存中查找,找出源代码文件对应的缓存,如果查找到,则使用该源代码文件的校验码与缓存中的校验码进行比较,若相同,说明源代码文件没变化,不用做任何处理,若不相同,则更新缓存。如果查找不到,则说明是新增文件,需要增加缓存,再遍历每个缓存中的路径,在所有源代码文件中查找,如果查找不到,则说该缓存对应的源代码文件已经不存在,需要删除缓存;s1105:向缓存库增加、更新与删除缓存,如果是增加缓存,则使用lua源代码文件的路径、校验码与语法树创建一个新缓存,直接添加至缓存库,如果是更新缓存,则重新生成该lua源代码文件的校验码与语法树,更新至该缓存,如果是删除缓存,则直接从缓存库中删除该缓存;s1106-s1108:装置运行期间监控源代码文件库更新,若发生增加、修改与删除源代码文件时,触发同步缓存库;s1109-s1110:如果是增加源代码文件,则使用该lua源代码文件的路径、校验码与语法树创建一个新缓存,直接向缓存库添加,如果是修改源代码文件,则重新生成该lua源代码文件的校验码与语法树,更新至该路径的缓存,如果是删除源代码文件,则直接删除该路径的缓存。参见图12,是本发明实施例的检查与分析语法树的方法的示意图,包括:s1201-s1202:监测到lua源代码文件库有更新,并且完成缓存库同步后,触发检查器对更新的lua源代码文件进行检查。s1203:从缓存库中取得该更新源代码文件的语法树,遍历该语法树中的tag语法标识,并取得该语法标识节点下的语法树,封装为一个语法节点对象,生成一个语法节点集,语法节点包括有call、set、local、functiondef、function、localfunctiondef、if、op、paren、forin、string、number、index、id、table、field、fornum、return、invoke、true、false、nil、while、vararg、break、dots、do、block。s1204:遍历每个语法节点,如果是set、functiondef、function语法节点,则把该语法节点添加到全局变量集中,最终生成一个全局变量集。s1205:遍历每个语法节点,如查是block语法节点,则把该语法节点加入代码块集中,最终生成一个代码块集。s1206-1207:遍历代码块集下的每个代码块,再遍历代码块下每个语法节点进行检查,同时如果是local、localfunctiondef语法节点,还需要先把该语法节点加入该代码块的局部变量集中。s1208-s1210:获取该代码块下的局部变量集,获取全局变量集,获取该语法节点对应的所有检查规则,结合一起进行检查。参见图13,是本发明实施例的错误绑定提交者(编程人员)的记录方法的示意图,包括:s1301:由检查器对一个源代码文件检查出所有错误结果,发给收集器创建错误对象,每个错误对象包括错误源代码文件路径、提交者、版本号、错误内容与错误的行号,最终生成一个新错误集。s1302:从错误库中取得该源代码文件路径对应的所有错误对象,最终生成一个旧错误集。s1303:遍历新错误集中每个错误对象的错误内容,如果在旧错误集中找到相同的错误内容,则该错误还未修正,需要更新错误库中的错误对象,如果在旧错误集中找不到相同错误内容,则为一个新错误,需要添加到错误库中,遍历旧错误集中每个错误对象的错误内容,如果在新错误集中找不到相同的错误内容,则该错误已修正,需要删除错误库中对应的错误对象。s1304:如果需要增加错误,直接向错误库增加该错误对象,如果需要更新错误,只更新错误库中该错误的行号,引致该错误的提交者与版本号保持不变,达到绑定提交者的效果,如果需要删除错误,直接从错误库中删除该错误对象。参见图14,是本发明实施例的智能发送通知的方法的示意图,包括:s1401-s1402:对源代码文件检查完毕后,触发通知器进行工作。s1403:从错误库中获取当前检查的源代码文件与当前提交者对应的所有错误对象。s1404:生成错误的文本信息内容,向该提交者发送错误信息。s1405-s1406:通过设置的时间间隔,触发通知器进行工作。s1407:从错误库中获取所有错误。s1408:生成错误的文本信息内容,分别向对应提交者发送错误信息。本发明实施例还提供了一种代码检查装置,该装置可以通过监测单元152、缓存器154、检查器156、通知器158和流程控制器1510实现其功能。需要说明的是,本发明实施例的一种代码检查装置可以用于执行本发明实施例所提供的一种代码检查方法,本发明实施例的一种代码检查方法也可以通过本发明实施例所提供的一种代码检查装置来执行。图15是根据本发明实施例的一种代码检查装置的示意图。如图15所示,图15是根据本发明实施例的一种代码检查装置的结构图。一种代码检查装置包括:监测单元152,用于根据预先配置的条件监测源代码文件库中的源代码文件是否有更新,其中,源代码文件为动态编程语言编写的源代码;缓存器154,用于根据更新的源代码文件生成该源代码文件对应的缓存内容,并进行缓存,其中,缓存内容用于检查对应的源代码文件的错误信息,缓存内容存于缓存库中;检查器156,用于对缓存内容进行检查;通知器158,用于在检查出错误信息的情况下,将错误信息通知给编程人员;流程控制器1510,用于在编程人员响应于错误信息对对应的源代码文件进行修改之后,触发监测步骤至检查步骤,如果检查出错误信息再通知编程人员,直到未出现错误。通知器提供一种智能发送通知的方法,包括有即时通知与定时通知的方式,即时通知的方法是,当源代码文件库发生提交更新,对当前更新源代码文件进行检查出,若检查出错误,该错误信息即时通知该提交者,定时通知的方法是,通过设定好的时间间隔,触发从错误库中获取所有错误,分别通知对应的提交者,直至错误被修正后才会停止通知。上述装置还包括收集器,收集器对检查出的每个错误结果生成错误对象进行记录,而这些错误对象的生成方法是由源代码文件路径、提交者、版本号、错误内容与错误的行号组合而成,每个错误对象的记录方法是,对一个源代码文件检查出的每个错误结果生成错误对象,而这些错误对象作为新错误集,再通过该源代码文件的路径为索引,向收集器查找,找出所有该路径的错误对象作为一个旧错误集,遍历新错误集中每个错误对象,以对象的错误内容为索引,在旧错误集中查找,如果找不到,则向收集器添加该错误对象,如果找到,则使用新错误对象的错误行号更新至旧错误对象的错误行号,引致该错误的提交者与版本号保持不变,达到绑定提交者的效果,再遍历错误集中每个错误对象,以以对象的错误内容为索引,在新错误集中查找,如果找不到,说明该错误已被修正,则从收集器删除该错误对象。收集器所收集的错误对象是供给通知器向对提交者发送通知的。在一个可选地实施方式中,缓存器包括:生成模块,用于生成更新的源代码文件对应的语法树,其中,缓存内容包括语法树;检查器包括:检查模块,用于对语法树进行检查。在一个可选地实施方式中,缓存内容还包括以下至少之一:源代码文件的路径、源代码文件的校验码、源代码文件。在一个可选地实施方式中,缓存内容包括源代码文件的路径的情况下,缓存器104包括:获取模块,用于获取源代码文件库中的路径,其中,路径下存有路径对应的源代码文件和源代码文件对应的校验码;添加模块,用于根据路径下的源代码文件生成相应的语法树并将语法树添加到缓存库中;同步模块,用于使缓存库中的语法树对应的路径与所有源代码文件库中的语法树对应的源代码文件的路径相一致。在一个可选地实施方式中,添加模块包括:第一查找子模块,用于查找在缓存库中是否存在源代码文件库中的路径;第一添加子模块,用于如果不存在源代码文件库中的路径,则根据路径下的源代码文件生成相应的语法树并将语法树添加到缓存库中。在一个可选地实施方式中,添加模块还包括:第二查找子模块,用于查找在缓存库中是否存在源代码文件库中的路径;判断子模块,用于如果存在源代码文件库中的路径,则判断缓存库中路径下的校验码与源代码文件库中路径下的校验码是否一致;第二添加子模块,用于如果不一致,则重新根据路径下的源代码文件生成相应的语法树并将语法树添加到缓存库中。在一个可选地实施方式中,缓存器104包括:查找模块,用于查找在源代码文件库中是否存在缓存库中的路径,其中,路径下存有路径对应的源代码文件和源代码文件对应的校验码;删除模块,用于如果不存在,则删除路径下的源代码文件和源代码文件对应的校验码。在一个可选地实施方式中,检查模块包括:查寻子模块,用于遍历语法树,其中,语法树包括至少一个节点,节点是将一个语法的多个数据节点包装成的一个语法对象;获取子模块,用于根据语法树中的节点对应的语法类型获取该节点对应的检查规则,其中,每一个语法类型对应n个预先配置的检查规则,n为大于等于0的整数;第一检查子模块,用于根据获取到的检查规则对语法树进行检查。在一个可选地实施方式中,第一检查子模块包括:第二检查子模块,用于在语法类型配置的检查规则包括多个的情况下,根据多个检查规则对应的顺序和/或优先级对语法树进行检查。本发明实施例提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行上述方法。本发明实施例提供了一种处理器,处理器包括处理的程序,其中,在程序运行时控制处理器所在设备执行上述方法。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1