CN114579203A - 脚本文件检查方法、装置、电子设备及存储介质 - Google Patents

脚本文件检查方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN114579203A
CN114579203A CN202210216642.XA CN202210216642A CN114579203A CN 114579203 A CN114579203 A CN 114579203A CN 202210216642 A CN202210216642 A CN 202210216642A CN 114579203 A CN114579203 A CN 114579203A
Authority
CN
China
Prior art keywords
file
checked
checking
script
syntax
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.)
Granted
Application number
CN202210216642.XA
Other languages
English (en)
Other versions
CN114579203B (zh
Inventor
吴炜峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202210216642.XA priority Critical patent/CN114579203B/zh
Publication of CN114579203A publication Critical patent/CN114579203A/zh
Application granted granted Critical
Publication of CN114579203B publication Critical patent/CN114579203B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种脚本文件检查方法、装置、电子设备及存储介质,涉及数据处理技术领域。该方法包括:获取待检查工程文件目录对应的至少一个目标语法树,待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个目标语法树对应一个待检查脚本文件,且至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系;根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,应用本申请实施例,通过对待检查工程文件目录对应的至少一个目标语法树进行检查,可以实现对待检查工程文件的自动化检查,可以提高检查效率。

Description

脚本文件检查方法、装置、电子设备及存储介质
技术领域
本申请涉及数据处理技术领域,特别涉及一种脚本文件检查方法、装置、电子设备及存储介质。
背景技术
脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。比如,C Shell、JavaScript、Perl、PHP、Python、VBScript、CSS等脚本语言。
现有的对脚本文件进行检查时,主要依靠人工进行逐行检查,因此,现有的脚本文件检查方法完全依赖于人工,存在检查效率较低的问题。
发明内容
本申请的目的在于,针对上述现有技术中的不足,提供一种脚本文件检查方法、装置、电子设备及存储介质,可以提高检查效率。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本发明提供一种脚本文件检查方法,包括:
获取待检查工程文件目录对应的至少一个目标语法树,所述待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个所述目标语法树对应一个待检查脚本文件,且所述目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示所述待检查脚本文件里的每个语法类型代码段;
根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告。
在可选的实施方式中,所述获取待检查工程文件目录对应的至少一个目标语法树,包括:
根据待检查工程文件目录,获取至少一个待检查脚本文件对应的目标文件路径;
若根据至少一个待检查脚本文件对应的目标文件路径,确定语法树缓存池中包括至少一个所述待检查脚本文件对应的目标语法树,则通过所述语法树缓存池获取至少一个所述目标语法树,所述语法树缓存池包括:历史检查过程中已构建的语法树,以及所述已构建的语法树对应的文件路径之间的映射关系。
在可选的实施方式中,若确定语法树缓存池不包括所述待检查脚本文件对应的目标语法树,所述获取待检查工程文件目录对应的至少一个目标语法树,包括:
对所述待检查脚本文件进行解析,获取语法树配置文件,所述语法树配置文件以字典数据格式存储每个语法类型代码段;
根据所述语法树配置文件构建所述目标语法树,并将所述目标语法树和所述目标语法树对应的文件路径之间的映射关系存储至所述语法树缓存池中。
在可选的实施方式中,所述对所述待检查脚本文件进行解析,获取语法树配置文件,包括:
遍历所述待检查工程文件目录,获取多个所述待检查脚本文件对应的文件路径列表,所述文件路径列表包括各待检查脚本文件对应的存储路径;
根据多个所述待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
在可选的实施方式中,所述根据多个所述待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件,包括:
根据所述文件路径列表,获取各所述待检查脚本文件对应的存储空间;
根据各所述待检查脚本文件对应的存储空间、预设最大进程数以及单个解析子进程解析时所占用的内存空间阈值,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
在可选的实施方式中,若所述目标语法树包括多个,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据预设语法检查规则,采用多个检查子进程对多个所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告。
在可选的实施方式中,若至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中显式包含第二待检查脚本文件、且包括定义在所述第二待检查脚本文件中的第一类,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据所述第一类的属性信息,获取所述第二待检查脚本文件的文件路径;
根据预设语法检查规则和所述第二待检查脚本文件的文件路径,对所述第一类的类定义节点进行检查,输出所述第一待检查脚本文件以及所述第二待检查脚本文件中所述第一类对应的检查报告。
在可选的实施方式中,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中隐式加载有定义在第三待检查脚本文件中的第二类,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据所述第二类的类名和预设类命名规则,获取所述第三待检查脚本文件的文件路径,其中,所述预设类命名规则包括:类名与类定义文件的文件路径之间的映射关系;
根据所述第三待检查脚本文件的文件路径,基于预设跨文件接口获取所述第三待检查脚本文件对应的语法树,所述预设跨文件接口被配置为可根据待检查文件的文件路径跨文件获取所述待检查文件对应的语法树;
根据预设语法检查规则和所述第三待检查脚本文件对应的语法树,对所述第二类对应的类定义节点,输出所述第一待检查脚本文件以及所述第三待检查脚本文件中所述第二类对应的检查报告。
在可选的实施方式中,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中包括定义在待检查工程文件的运行环境路径所指向的运行环境文件中的第三类,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据所述第三类的属性信息,基于类定义内置代码访问接口访问所述待检查工程文件的运行环境路径所指向的运行环境文件,获取所述第三类对应的类结构信息,并将所述类结构信息存储至缓存中;
根据预设语法检查规则,对所述第三类对应的类结构信息进行检查,输出所述第一待检查脚本文件中所述第三类对应的检查报告。
在可选的实施方式中,所述根据预设语法检查规则,采用多个检查子进程对多个所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告,包括:
采用各检查子进程加载至少一个检查插件对各所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告,所述检查插件包括所述预设语法检查规则。
在可选的实施方式中,所述待检查工程文件目录对应多个目标语法树,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据预设语法检查规则,对各所述目标语法树进行遍历检查,获取各所述目标语法树对应的检查报告,所述目标语法树对应的检查报告以字典数据格式存储,所述字典数据格式中的键包括所述目标语法树对应的待检查脚本文件的文件路径、所述字典数据格式中的值包括所述目标语法树对应的待检查文件对应的异常信息;
对各所述目标语法树对应的检查报告进行整理,得到待检查工程文件对应的检查报告。
在可选的实施方式中,所述检查报告包括下述至少一项:
异常语法类型代码段对应的异常待检查脚本文件的文件标识、异常语法类型代码段在对应的异常待检查脚本文件中的位置信息、异常提示类型、异常等级。
第二方面,本发明提供一种脚本文件检查装置,包括:
获取模块,用于获取待检查工程文件目录对应的至少一个目标语法树,所述待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个所述目标语法树对应一个待检查脚本文件,且所述目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示所述待检查脚本文件里的每个语法类型代码段;
输出模块,用于根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告。
在可选的实施方式中,所述获取模块,具体用于根据待检查工程文件目录,获取至少一个待检查脚本文件对应的目标文件路径;
若根据至少一个待检查脚本文件对应的目标文件路径,确定语法树缓存池中包括至少一个所述待检查脚本文件对应的目标语法树,则通过所述语法树缓存池获取至少一个所述目标语法树,所述语法树缓存池包括:历史检查过程中已构建的语法树,以及所述已构建的语法树对应的文件路径之间的映射关系。
在可选的实施方式中,若确定语法树缓存池不包括所述待检查脚本文件对应的目标语法树,所述获取模块,具体用于对所述待检查脚本文件进行解析,获取语法树配置文件,所述语法树配置文件以字典数据格式存储每个语法类型代码段;
根据所述语法树配置文件构建所述目标语法树,并将所述目标语法树和所述目标语法树对应的文件路径之间的映射关系存储至所述语法树缓存池中。
在可选的实施方式中,所述获取模块,具体用于遍历所述待检查工程文件目录,获取多个所述待检查脚本文件对应的文件路径列表,所述文件路径列表包括各待检查脚本文件对应的存储路径;
根据多个所述待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
在可选的实施方式中,所述获取模块,具体用于根据所述文件路径列表,获取各所述待检查脚本文件对应的存储空间;
根据各所述待检查脚本文件对应的存储空间、预设最大进程数以及单个解析子进程解析时所占用的内存空间阈值,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
在可选的实施方式中,所述输出模块,具体用于根据预设语法检查规则,采用多个检查子进程对多个所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告。
在可选的实施方式中,若至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中显式包含第二待检查脚本文件、且包括定义在所述第二待检查脚本文件中的第一类,所述输出模块,具体用于根据所述第一类的属性信息,获取所述第二待检查脚本文件的文件路径;
根据预设语法检查规则和所述第二待检查脚本文件的文件路径,对所述第一类的类定义节点进行检查,输出所述第一待检查脚本文件以及所述第二待检查脚本文件中所述第一类对应的检查报告。
在可选的实施方式中,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中隐式加载有定义在第三待检查脚本文件中的第二类,所述输出模块,具体用于根据所述第二类的类名和预设类命名规则,获取所述第三待检查脚本文件的文件路径,其中,所述预设类命名规则包括:类名与类定义文件的文件路径之间的映射关系;
根据所述第三待检查脚本文件的文件路径,基于预设跨文件接口获取所述第三待检查脚本文件对应的语法树,所述预设跨文件接口被配置为可根据待检查文件的文件路径跨文件获取所述待检查文件对应的语法树;
根据预设语法检查规则和所述第三待检查脚本文件对应的语法树,对所述第二类对应的类定义节点,输出所述第一待检查脚本文件以及所述第三待检查脚本文件中所述第二类对应的检查报告。
在可选的实施方式中,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中包括定义在待检查工程文件的运行环境路径所指向的运行环境文件中的第三类,所述输出模块,具体用于根据所述第三类的属性信息,基于类定义内置代码访问接口访问所述待检查工程文件的运行环境路径所指向的运行环境文件,获取所述第三类对应的类结构信息,并将所述类结构信息存储至缓存中;
根据预设语法检查规则,对所述第三类对应的类结构信息进行检查,输出所述第一待检查脚本文件中所述第三类对应的检查报告。
在可选的实施方式中,所述输出模块,具体用于采用各检查子进程加载至少一个检查插件对各所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告,所述检查插件包括所述预设语法检查规则。
在可选的实施方式中,所述待检查工程文件目录对应多个目标语法树,所述输出模块,具体用于根据预设语法检查规则,对各所述目标语法树进行遍历检查,获取各所述目标语法树对应的检查报告,所述目标语法树对应的检查报告以字典数据格式存储,所述字典数据格式中的键包括所述目标语法树对应的待检查脚本文件的文件路径、所述字典数据格式中的值包括所述目标语法树对应的待检查文件对应的异常信息;
对各所述目标语法树对应的检查报告进行整理,得到待检查工程文件对应的检查报告。
在可选的实施方式中,所述检查报告包括下述至少一项:异常语法类型代码段对应的异常待检查脚本文件的文件标识、异常语法类型代码段在对应的异常待检查脚本文件中的位置信息、异常提示类型、异常等级。
第三方面,本发明提供一种电子设备,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行如前述实施方式任一所述脚本文件检查方法的步骤。
第四方面,本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如前述实施方式任一所述脚本文件检查方法的步骤。
本申请的有益效果是:
本申请实施例提供的一种脚本文件检查方法、装置、电子设备及存储介质中,包括:获取待检查工程文件目录对应的至少一个目标语法树,待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个目标语法树对应一个待检查脚本文件,且目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示待检查脚本文件里的每个语法类型代码段;根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,应用本申请实施例,通过对待检查工程文件目录对应的至少一个目标语法树进行检查,可以实现对待检查工程文件的自动化检查,可以提高检查效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种脚本文件检查方法的流程示意图;
图2为本申请实施例提供的另一种脚本文件检查方法的流程示意图;
图3为本申请实施例提供的又一种脚本文件检查方法的流程示意图;
图4为本申请实施例提供的一种类定义节点的示意图;
图5为本申请实施例提供的另一种脚本文件检查方法的流程示意图;
图6为本申请实施例提供的又一种脚本文件检查方法的流程示意图;
图7为本申请实施例提供的另一种脚本文件检查方法的流程示意图;
图8为本申请实施例提供的又一种脚本文件检查方法的流程示意图;
图9为本申请实施例提供的另一种脚本文件检查方法的流程示意图;
图10为本申请实施例提供的一种脚本文件检查装置的功能模块示意图;
图11为本申请实施例提供的一种电子设备结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
图1为本申请实施例提供的一种脚本文件检查方法的流程示意图,该方法的执行主体可以是计算机、服务器、处理器等可以进行数据处理的电子设备,如图1所示,该方法可以包括:
S101、获取待检查工程文件目录对应的至少一个目标语法树。
其中,待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个目标语法树对应一个待检查脚本文件,且目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示待检查脚本文件里的每个语法类型代码段。
其中,待检查工程文件目录也即需要进行检查的工程文件所在的目录,其可以为任意存储路径,在此不作限定。根据待检查脚本文件的不同,其所对应的目标语法树可以包括:类定义、函数定义、文件引用、全局变量赋值等至少一种语法类型的定义索引表。
每种语法类型的定义索引表中每一个节点可以表征对应的待检查脚本文件里的每个语法类型代码段,其中,根节点可以表示待检查脚本文件对应的整个语法类型代码段,语法类型代码段指根据脚本语言对应的不同语法规则编写的代码段,比如,根据类定义、函数定义、文件引用、全局变量赋值等语法规则编写的代码段可以分别称为类定义语法类型代码段、函数定义语法类型代码段、文件引用语法类型代码段、全局变量赋值语法类型代码段,每一个语法类型代码段可以表示成一个节点。基于该说明,对于目标语法树中的各节点来说,根据各节点之间的关系,各节点又可以为其他节点的父节点或子节点。
可选地,在一些场景下,根节点下可以包括:类定义、函数定义、其他文件引用、全局变量赋值等语法代码段对应的节点,且各节点的子节点在其父节点下的存放访问顺序遵从语法代码段在待检查脚本里从上到下的位置顺序,每个节点对应的语法代码段内也可以解析出许多更下一级的子节点。比如,类定义节点可以划分出类成员变量、类方法等子节点,这些都将作为类定义节点的同级子节点;类方法节点里又可以解析出方法参数、函数体内每一行表达式等子节点,这些都将作为类方法节点的同级子节点,直到待检查脚本文件对应的代码段内无法继续解析出该类定义节点或该类方法节点的子节点为止。此外,对于各节点来说,每个节点可以具有相应的节点属性,节点属性可以包括:父节点标识、子节点标识、节点所对应语法类型代码段在待检查脚本文件中的起始位置、终止位置等,此外,根据各节点对应语法结构的特点,还会记录一些关键属性。
示例地,类定义节点可以记录自己的类名、继承的类名、类内部成员变量名定义索引表、类方法名定义索引表等,其中,类内部成员变量名定义索引表可以包括:公用变量、私有变量、保护成员变量,静态成员变量,成员常量等变量名与节点之间的映射关系;类方法名定义索引表可以包括:公有类方法、私有类方法、保护类方法等类方法名与节点之间的映射关系,应用本申请实施例,可以在检查过程访问类定义节点时可以快速地获取类名,类内部的某个方法或成员变量等,根据节点表示的语法类型代码段的不同可以有所不同。
由上可知,对于各待检查脚本文件对应的各目标语法树来说,通过目标语法树对应的至少一种语法类型的定义索引表可以确定某语法结构是否定义在该目标语法树中,若确定该语法结构定义在该目标语法树中,那么可以通过目标语法树获取该语法结构对应的节点,因此,通过各目标语法树可以完整地表征各待检查脚本文件的代码信息。可选地,语法结构标识可以包括:语法结构名称、语法结构对应的编号等,在此不作限定。
在一些实施例中,待检查脚本文件中采用的脚本语言可以包括但不限于:超文本预处理器(Hypertext Preprocessor,PHP)、Python、vbscript、javascript、installshieldscript、ActionScript等类型的脚本语言,在此不作限定,根据实际的应用场景,每个待检查脚本文件可以采用一种或多种脚本语言编写。
在一些实施例中,待检查工程文件目录对应的至少一个目标语法树可以存储在待检查工程文件目录下,又或者,可以存储在预设的语法树文件中,在此不作限定。
S102、根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告。
基于上述说明,可以看出,每个目标语法树可以对应一个待检查脚本文件,各目标语法树可以完整地表征各待检查脚本文件的代码信息,因此,根据预设语法检查规则,通过对至少一个目标语法树进行遍历检查,可以得到对各待检查脚本文件对应的检查报告,进而根据各待检查脚本文件对应的检查报告,可以得到待检查工程文件对应的检查报告。
示例的,若待检查脚本文件中包括类对象,对该待检查脚本文件对应的目标语法树进行遍历检查的过程中,若访问到类对象节点,可以根据类定义索引表快速确定该类对象节点在本目标语法树中是否有定义,若有则可以根据预设语法检查规则对该类对象节点进行相关语法检查,从而实现对待检查脚本文件中类对象的语法检查。可以理解的是,根据预设语法检查规则对该类对象节点进行相关语法检查,也即可以根据预设语法检查规则对该类对象节点对应的代码段进行语法检查,以确定该类对象节点对应的代码段是否有语法错误。
可选地,检查报告可以表征是否检查成功的检查结果,检查成功也即不存在任何语法错误,当然,根据实际的应用场景,检查报告还可以包括:检查时间、异常语法类型代码段的相关信息等,在此并不限定。当然,本申请在此并不限定预设语法检查规则的具体内容,其可以根据脚本语言对应的脚本语法设置。
综上,本申请实施例提供一种脚本文件检查方法,该方法包括:获取待检查工程文件目录对应的至少一个目标语法树,待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个目标语法树对应一个待检查脚本文件,且目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示待检查脚本文件里的每个语法类型代码段;根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,应用本申请实施例,通过对待检查工程文件目录对应的至少一个目标语法树进行检查,可以实现对待检查工程文件的自动化检查,可以提高检查效率。
在一些实施例中,也可以将本申请所提供的检查方法在所运行的机器上(比如,计算机)部署成一个检查应用程序,那么若需要对某待检查工程文件进行检查时,可以通过运行该检查应用程序实现,并通过该检查应用程序输出待检查工程文件对应的检查报告。此外,还可以理解的是,为保证待检查工程文件的正常运行,还应在检查方法所运行的机器上配置好待检查工程文件的运行环境。比如,待检查工程文件为PHP工程文件时,那么可以在检查方法所运行的机器上配置好PHP运行环境。当然,本申请在此并不限定检查应用程序的编程语言,可以是python语言、JAVA语言等,在此不作限定,根据实际的应用场景可以灵活选择。
图2为本申请实施例提供的另一种脚本文件检查方法的流程示意图。地,如图2所示,上述获取待检查工程文件目录对应的至少一个目标语法树,包括:
S201、根据待检查工程文件目录,获取至少一个待检查脚本文件对应的目标文件路径。
其中,待检查工程文件目录下可以包括:采用脚本语言编写的至少一个待检查脚本文件,那么,根据待检查工程文件目录,可以获取至少一个待检查脚本文件对应的目标文件路径,可选地,待检查工程文件目录下包括多个待检查脚本时,该多个待检查脚本文件对应的目标文件路径可以部分相同或不同。在一些实施例中,待检查工程文件目录下还可以包括多个子目录,每个子目录下可以包括至少一个待检查脚本文件,本申请在此并不限定各待检查脚本文件的存储目录。
可以理解的是,根据待检查工程的大小,待检查工程文件目录下可以包括采用脚本语言编写的多个待检查脚本文件,当然,本申请并不限定待检查工程文件目录下待检查脚本文件的数量,根据实际的应用场景可以包括10个、20个、50个等。
S202、若根据至少一个待检查脚本文件对应的目标文件路径,确定语法树缓存池中包括至少一个待检查脚本文件对应的目标语法树,则通过语法树缓存池获取至少一个目标语法树。
其中,语法树缓存池:历史检查过程中已构建的语法树,以及已构建的语法树对应的文件路径之间的映射关系。
可选地,该语法树缓冲池可以为共享缓存池,为了提高语法树的获取效率,语法树缓冲池可以缓存有历史检查过程中已构建的语法树,以及该已构建的语法树和已检查脚本文件的文件路径之间的映射关系,因此,获取待检查工程文件目录对应的至少一个目标语法树时,可以根据待检查工程文件目录,获取至少一个待检查脚本文件对应的目标文件路径,根据至少一个待检查脚本文件对应的目标文件路径,确定语法树缓存池中是否包括至少一个待检查脚本文件对应的目标语法树,若包括,那么可以通过该语法树缓存池获取至少一个目标语法树。
图3为本申请实施例提供的又一种脚本文件检查方法的流程示意图。图4为本申请实施例提供的一种类定义节点的示意图。可选地,若确定语法树缓存池不包括待检查脚本文件对应的目标语法树,如图3所示,上述获取待检查工程文件目录对应的至少一个目标语法树的步骤可以包括:
S301、对待检查脚本文件进行解析,获取语法树配置文件。
其中,语法树配置文件以字典数据格式存储每个语法类型代码段。
在一些实施例中,可以采用预设解析算法对各待检查脚本文件进行解析,以得到各待检查脚本文件对应的语法树配置文件,该语法树配置文件可以采用json、(ExtensibleMarkup Language,xml)等支撑多层级结构可转换为语法树的语言编写,在此不作限定。
其中,语法树配置文件中可以以字典数据格式存储每个语法类型代码段,可选地,具体存储时,每个语法类型代码段内解析出下一层级的语法类型代码段也以字典数据格式嵌套保存在上一层级字典数据里,每个语法类型代码段对应的字典数据中可以采用特定字段(比如,nodeType字段)标记该代码段所属的语法类型,比如是类定义、函数定义、变量赋值等,并以字典键值对记录该代码段的语法结构内的信息,比如,可以包括语法结构的类型、语法结构对应代码段的起始行号和结束行号等。
可选地,根据语法树配置文件构建目标语法树时,可以根据语法树配置文件里各字典数据的特定标记字段创建对应的节点实例以构建目标语法树,并把字典数据里其他有用信息存放在节点的节点属性中。当然,语法类型代码段的存储方式并不以此为限,根据实际的应用场景可以有所不同。
S302、根据语法树配置文件构建目标语法树,并将目标语法树和目标语法树对应的文件路径之间的映射关系存储至语法树缓存池中。
基于上述说明,在获取到各语法树配置文件后,可以根据各语法树配置文件获取各目标语法树中的类定义索引表和节点,根据类定义索引表和节点,构建各目标语法树。此外,基于上述说明,还可以理解的是,通过将该目标语法树和该目标语法树对应的文件路径之间的映射关系存储至语法树缓存池中,使得当检查过程中需要再次获取该目标语法树(比如,对其他多个待检查脚本文件进行检查时,均需要访问该目标语法树)时,可以优先在语法树缓存池中查找,有缓存则直接获取,没有则进行目标语法树的构建操作,从而可以提高目标语法树的获取效率。
示例地,在一些实施例中,所建立的目标语法树中可以包括图4所示的类定义节点,该类定义节点可以包括n个成员变量定义节点(成员变量1定义子节点、成员变量2定义子节点...,成员变量n定义子节点)以及n个成员函数定义节点(成员函数1定义子节点、成员函数2定义子节点...,成员函数n定义子节点)。其中成员函数1定义节点又可以包括:参数列表子节点和函数体子节点,参数列表子节点可以包括n个参数节点(参数1子节点...,参数n子节点),函数体子节点可以包括n个表达式(表达式1子节点...,表达式n子节点)。可以看出,通过类定义节点可以反映该类定义节点的所有语法结构信息,进而在对该类定义节点进行检查时,可以避免遗漏,提高本申请检查方法的适用性。当然,类定义节点的语法结构并不以图4所示出的为限,根据不同的应用场景可以有所不同。
图5为本申请实施例提供的另一种脚本文件检查方法的流程示意图。可选地,如图5所示,上述对待检查脚本文件进行解析,获取语法树配置文件,包括:
S401、遍历待检查工程文件目录,获取多个待检查脚本文件对应的文件路径列表,文件路径列表包括各待检查脚本文件对应的存储路径。
其中,通过对待检查工程文件目录进行遍历,可以获取待检查工程文件目录下各待检查脚本文件对应的存储路径,根据各待检查脚本文件对应的存储路径可以提取得到多个待检查脚本文件对应的文件路径列表。
S402、根据多个待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个待检查脚本文件进行解析,生成各待检查脚本文件对应的语法树配置文件。
可选地,进行解析时,可以根据文件路径列表获取待检查脚本文件的数量,根据待检查脚本文件的数量,采用多个解析子进程对多个待检查脚本文件进行同时解析,生成各待检查脚本文件对应的语法树配置文件,所生成的各语法树配置文件可以存储至预设配置文件目录中,又或者,可以存储在各待检查脚本文件对应的存储路径下,在此不作限定。可选地,各语法树配置文件的文件名可以与各待检查脚本文件的文件名相同,以便后续查找时,可以实现快速查找。在一些实施例中,为各解析子进程分配的待检查脚本文件的数量可以相同或不同,在此不作限定。
综上,还可以看出,相较于采用单个解析子进程对多个待检查脚本文件进行解析的方法,本申请实施例可以有效提高对多个待检查脚本文件解析效率。
在一些实施例中,为了提高本申请检查方法的开发效率,可选地,可以结合已有的解析工具生成各检查脚本文件对应的语法树配置文件,该已有的解析工具可以为phpparse解析工具,其中,若通过phpparse解析工具进行解析时,可以将待检查脚本文件对应的存储路径传入phpparse解析工具,通过该phpparse解析工具可以对该待检查脚本文件进行解析,生成待检查脚本文件对应的语法树配置文件。当然,具体解析工具并不以此为限,根据待检查脚本文件所使用脚本语言的不同可以有所不同。
可选地,检查过程中,也可以通过检查应用程序的预设配置面板或预设配置文件增加额外的配置项,比如,可以指定待检查工程文件目录下某些目录文件不参与解析或代码检查以减少解析计算量,又或者,可以配置第三方库信息,从而保证待检查脚本文件内使用第三方库时可以正常进行语法解析,再或者,可以配置检查时过滤掉第三方库相关检查等,根据实际的应用场景可以灵活配置,在此不作限定。
图6为本申请实施例提供的又一种脚本文件检查方法的流程示意图。可选地,如图6所示,上述根据多个待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个待检查脚本文件进行解析,生成各待检查脚本文件对应的语法树配置文件,包括:
S501、根据文件路径列表,获取各待检查脚本文件对应的存储空间。
其中,根据文件路径列表,可以确定取各待检查脚本文件的存储位置,根据各待检查脚本文件的存储位置,可以获取各待检查脚本文件对应的存储空间。当然,本申请在此并不限定文件路径列表中各待检查脚本文件对应的存储路径的排列顺利,根据实际的应用场景可以随机排列,又或者,根据各待检查脚本文件对应的存储空间升序或降序排列,在此不作限定。
S502、根据各待检查脚本文件对应的存储空间、预设最大进程数以及单个解析子进程解析时所占用的内存空间阈值,采用多个解析子进程对多个待检查脚本文件进行解析,生成各待检查脚本文件对应的语法树配置文件。
其中,预设最大进程数也即允许同时工作的最大进程数量,可选地,其取值可以是5、10等,在此不作限定。在一些实施例中,考虑到各待检查脚本文件对应的存储空间可能相差较大,因此,若根据文件数量,采用多个解析子进程对多个待检查脚本文件进行批量解析时,可能会使得各解析子进程的解析工作量相差较大进而导致整个待检查工程文件的解析效率低下,因此,可以各待检查脚本文件对应的存储空间、预设最大进程数以及单个解析子进程解析时所占用的内存空间阈值,为每个解析子进程分配一定数量的待检查脚本文件,实现采用多个解析子进程对多个待检查脚本文件进行逐个解析,以生成各待检查脚本文件对应的语法树配置文件。其中,若各待检查脚本文件对应的语法树配置文件均已生成,可以认为待检查工程文件的解析工作已完成。
其中,单个解析子进程解析时所占用的内存空间阈值可以理解为单个解析子进程单次解析文件占用的总内存空间上限阈值。
基于上述说明,可以理解的是,若检查过程中,已建立的解析子进程数量等于预设最大进程数时,可以暂停建立新的解析子进程,待已建立的解析子进程数量小于预设最大进程数时可以建立新的解析子进程。
可选地,若目标语法树包括多个,上述根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据预设语法检查规则,采用多个检查子进程对多个目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告。
其中,考虑到目标语法树较多时,若采用单进程对多个目标语法树进行遍历检查时会导致检查效率低下,因此,本申请实施例中,可以用多个检查子进程对多个目标语法树进行批量遍历检查,以输出待检查工程文件对应的检查报告。其中,该遍历检查可以是深度优先的遍历方式,如此可以符合待检查脚本文件在执行过程的先后顺序,保证检查过程目标语法树上的每个节点都确保会被遍历到一次,提高本申请检查方法的可靠性。当然,具体遍历方式并不以此为限,根据实际的应用场景可以灵活调整。
当然,需要说明的是,根据预设语法检查规则,采用多个检查子进程对多个目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告的步骤也可以包括:
根据文件路径列表,获取各待检查脚本文件对应的存储空间;根据各待检查脚本文件对应的存储空间、预设最大进程数以及单个检查子进程检查时所占用的内存空间阈值,采用多个检查子进程对多个待检查脚本文件进行批量遍历检查,输出待检查工程文件对应的检查报告。
可选地,检查子进程的数量可以小于或等于待检查脚本文件的数量,关于检查子进程的检查方式可参见上述S501、S502中解析子进程的解析方式,本申请在此不再赘述。
此外,还可以理解的是,检查过程中可能会涉及到各待检查脚本文件间的相互访问,各待检查脚本文件间的相互访问的方式有显式包含和隐式加载。其中,显式包含也即显式的文件指定包含。示例地,以待检查脚本文件为PHP脚本文件,待检查脚本文件A中指明require/include B待检查脚本文件,那么待检查脚本文件A中就可以直接使用B文件中定义的类和函数等。隐式加载也即隐式的类文件自动加载机制方式。示例地,待检查脚本文件A使用了A文件中没定义的C类,那么则需要通过事先定义的autoload自动加载接口根据C类的名称路由找到定义了C类的文件B,也即不管哪种访问方式,在对待检查脚本文件A进行检查时,若A文件中涉及没定义的函数、类等的使用时,都会需要从实际定义的文件中获取该类、函数定义等在对应语法树中的节点部分用于协助A文件的检查。基于该说明,为了实现不同情况下的检查,下面分情况进行说明。
图7为本申请实施例提供的另一种脚本文件检查方法的流程示意图。可选地,若至少一个目标语法树中第一目标语法树对应的第一待检查脚本文件中显式包含第二待检查脚本文件、且包括定义在第二待检查脚本文件中的第一类,如图7所示,上述根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
S601、根据第一类的属性信息,获取第二待检查脚本文件的文件路径。
其中,第一待检查文件中显式包含第二待检查脚本文件,也即第一待检查文件显式加载有第二待检查脚本文件,那么在该情况下,可以根据第一目标语法树中第一类的属性信息,获取第一类所属第二待检查脚本文件的文件路径,也即可以获取第一类的类定义文件的文件路径。
基于上述说明,可以理解的是,各目标语法树在整个检查过程都是只读不可改的,和语法树配置文件一一对应。
S602、根据预设语法检查规则和第二待检查脚本文件的文件路径,对第一类的类定义节点进行检查,输出第一待检查脚本文件以及第二待检查脚本文件中第一类对应的检查报告。
基于上述说明,在获取到第二待检查脚本文件的文件路径后,可以根据第二待检查脚本文件的文件路径获取该第二待检查脚本文件对应的目标语法树,根据该第二待检查脚本文件对应的目标语法树可以获取该第一类对应的类定义节点,从而可以实现对第一待检查文件的检查,可以理解的是,那么通过检查可以输出第一待检查脚本文件以及第二待检查脚本文件中第一类对应的检查报告。可选地,根据第二待检查脚本文件的文件路径获取该第二待检查脚本文件对应的目标语法树时,可以参见上述的S202的步骤获取,在此不再赘述。
综上,可以看出,如果第一待检查脚本文件显式包含第二待检查脚本文件,且包括定义在第二待检查脚本文件中的第一类,那么可以查找出第一待检查脚本文件中使用的第一类,通过加载显式包含的第二待检查脚本文件的目标语法树,然后在该第二待检查脚本文件的目标语法树即可查找出该第一类对应的类节点以实现对第一待检查脚本文件中第一类的检查。
此外,需要说明的是,上述S601和S602的步骤不仅适用于定义在第二待检查脚本文件中的第一类的检查,还可以适用于定义在第二待检查脚本文件中的第一函数、第一变量等的检查,可以理解的是,若为第一函数、第一变量等,其检查过程与第一类的检查过程类似,在此不再赘述。
图8为本申请实施例提供的又一种脚本文件检查方法的流程示意图。可选地,如图8所示,若确定至少一个目标语法树中第一目标语法树对应的第一待检查脚本文件中隐式加载有定义在第三待检查脚本文件中的第二类,上述根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
S701、根据第二类的类名和预设类命名规则,获取第三待检查脚本文件的文件路径。
其中,预设类命名规则可以包括:类名与类定义文件的文件路径之间的映射关系。可选地,预设类命令规则具体可以包括:类名前缀应与文件名一致,当然,本申请在此并不限定该预设类命名规则的具体内容,根据实际的应用场景可以有所不同。
第一待检查脚本文件中隐式加载有定义在第三待检查脚本文件中的第二类,也即第一待检查脚本文件中使用了该第一待检查脚本文件中未定义的第二类,那么在该情况下,需要跨文件访问定义了第二类的第三待检查脚本文件才能完成对第一待检查文件中第二类的检查。
可选地,具体检查时,可以获取第二类的类名,根据第二类的类名以及预设类命名规则,获取第二类对应的类定义文件的文件路径,也即获取第三检查文件的文件路径。
S702、根据第三待检查脚本文件的文件路径,基于预设跨文件接口获取第三待检查脚本文件对应的语法树。
其中,预设跨文件接口被配置为可根据待检查文件的文件路径跨文件获取待检查文件对应的语法树。
S703、根据预设语法检查规则和第三待检查脚本文件对应的语法树,对第二类对应的类定义节点,输出第一待检查脚本文件以及第三待检查脚本文件中第二类对应的检查报告。
在获取到第三待检查脚本文件的文件路径后,则可以根据第三待检查脚本文件的文件路径,基于预设跨文件接口跨文件访问该第三待检查脚本文件对应的语法树,那么此时,则可以根据预设语法检查规则,对该第三待检查脚本文件对应的语法树进行检查,从而输出第一待检查脚本文件以及第三待检查脚本文件第二类对应的检查报告。
综上,可以看出,如果第一待检查脚本文件中隐式加载有定义在第三待检查脚本文件中的第二类,那么,可以根据第二类的类名和预设类命名规则定位到第二类的类定义文件,也即定位到第三待检查脚本文件的文件路径,根据该第三待检查脚本文件的文件路径,基于预设跨文件接口可以访问第三待检查脚本文件对应的语法树,然后在该第三待检查脚本文件的目标语法树即可查找出该第二类对应的类节点以实现对第一待检查脚本文件中第二类的检查。
基于上述说明,在一些实施例中,考虑到待检查脚本文件会访问待检查工程文件的运行环境文件中的类、函数、变量等的情形,因此,有必要对该部分内容进行检查,否则,若检查过程中找不到定义地方将会报错,以提高本申请检查方法的适用性,具体检查过程可参加下述内容。
图9为本申请实施例提供的另一种脚本文件检查方法的流程示意图。可选地,若确定至少一个目标语法树中第一目标语法树对应的第一待检查脚本文件中包括定义在待检查工程文件的运行环境路径所指向的运行环境文件中的第三类,如图9所示,上述根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
S801、根据第三类的属性信息,基于类定义内置代码访问接口访问待检查工程文件的运行环境路径所指向的运行环境文件,获取第三类对应的类结构信息,并将类结构信息存储至缓存中。
其中,第一待检查脚本文件中包括定义在待检查工程文件的运行环境路径所指向的运行环境文件中的第三类,在一些实施例中,运行环境文件也可包括扩展库文件,在此不作限定。
第三类的属性信息可以包括:类名、成员变量标识和成员函数标识等,在此不作限定,可选地,具体进行检查时,可以根据第三类的属性信息,以及该运行环境文件中各类的属性信息,确定第三类是否定义在运行环境文件中,若确定是,那么可以基于类定义内置代码访问接口访问待检查工程文件的运行环境路径所指向的运行环境文件,获取第三类对应的类结构信息,可选地,所获取的类结构信息可以包括类定义内的所有属性,比如,成员变量、成员函数等。在一些实施例中,可以将所获取的第三类对应的类名作为索引,建立类名与类结构信息之间的映射关系并存储至缓存中,以便其他待检查脚本文件进行检查时,可以快速获取待该第三类对应的类结构信息,提高检查效率。
基于上述说明可以理解的是,由于第三类是定义在待检查工程文件的运行环境路径所指向的运行环境文件中,因此,无法通过解析运行环境文件对应的语法树获取该第三类的节点,在该情况下,那么可以通过运行环境文件获取该第三类对应的类结构信息以代替该第三类对应的类定义节点,提高本申请方法的适用性。
S802、根据预设语法检查规则,对第三类对应的类结构信息进行检查,输出第一待检查脚本文件中第三类对应的检查报告。
基于上述说明,在获取到第三类对应的类结构信息后,可根据预设语法检查规则,对该第三类对应的类结构信息进行检查,通过检查可以输出第一待检查脚本文件中第三类对应的检查报告。
当然,需要说明的是,根据待检查脚本文件中脚本语言的不同,根据实际的应用场景,也可以根据待检查脚本文件所访问的模块名获取对应的文件路径,根据所确定的文件路径,参见前述步骤S602的说明进行相关检查,在此不再赘述。
可选地,上述根据预设语法检查规则,采用多个检查子进程对多个目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告,包括:
采用各检查子进程加载至少一个检查插件对各目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告。
其中,检查插件包括预设语法检查规则,预设语法检查规则也即预设检查逻辑,也即可以以检查插件的形式体现预设检查逻辑,可以理解的是,由于每个插件可以作为一个独立代码文件管理,因此,进行预设语法检查规则的扩展或移除时,只需将包括待增扩或待移除的预设语法检查规则的插件放到或移走插件的指定目录中,即可实现预设语法检查规则的生效或移除,提高了本申请检查方法的可扩展性。
当然,本申请在此并不限定检查插件的数量,根据实际的应用场景,可以包括一个或多个。其中,通过至少一个检查插件对各目标语法树进行批量遍历检查时,各检查子进程可以在启动后加载所有可用的检查插件,并将各检查插件加载在工作进程内存中,进而在进行检查时,可以通过加载的每一个检查插件对各目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告。
可选地,各检查插件可检查内容可以包括:检查未赋值变量是否正确使用,未定义的类是否正确创建,函数调用是否正确,函数调用传参数是否正确等常规的代码语法检查,也可以包括根据项目需求自定义的一些检查内容,比如,检查类、变量、函数命名规范,检查代码开发过程一些约定事项是否符合项目自身实际相关的规则;当然,检查过程中,也可以对各检查插件不断迭代更新。
具体实现时,各个检查插件的类定义可以实现在独立代码文件里,在加载进各检查子进程时实例化成检查插件的类对象,检查插件需要访问的节点回调函数以插件类成员函数的方式开发,检查过程一些中间数据存储保持在插件对象里,每检查完一个待检查脚本文件的目标语法树之后,插件对象可以选择清理一些中间数据也可以保留一些可以作为其他待检查脚本文件检查时使用的中间数据,检查插件检查过程中在回调函数里执行检查逻辑后如遇到有检查异常的地方(比如,代码语法、逻辑等不符合预设语法检查规则)可以通过预设接口收集异常信息,各检查子进程根据所收集的异常信息可以输出待检查工程文件对应的检查报告。
在一些实施例中,若检查插件事先对某类型节点注册过访问和离开事件,则语法树遍历到该类型节点时,就会先后执行检查插件的访问事件回调函数和离开事件回调函数,每个检查插件都根据自己的检查需求在自己插件内的各个回调函数里完成插件所需的检查逻辑,各插件间保持独立不互相影响。
基于上述说明,可分为以下情况分别不同回调函数内部的检查逻辑:
情况一:当检查插件执行函数节点的访问事件回调函数时,检查插件内可以标记当前要进入访问的函数节点,重置插件缓存记录当前函数体作用域的已赋值变量列表;
情况二:当检查插件执行各种变量赋值的访问回调函数时,可以从节点里提取被赋值的变量名,并记录进插件内赋值变量列表,比较典型的变量赋值是在函数定义的传入参数列表里和函数体内的局部变量赋值;
情况三:当检查插件执行变量使用节点的访问回调函数时,可以从节点里获取使用的变量名,判断该变量名是否存在当前插件内赋值变量列表里,如果存在,则说明使用的变量是已赋值的,继续后续遍历;如果不存在,则首先判断变量是否为内置变量(也即定义在待检查工程文件的运行环境路径所指向的运行环境文件中),如果是内置变量,继续后续遍历;如果不是内置变量,则说明变量是尚未赋值变量,则可以通过预设接口收集该异常信息;
情况四:当检查插件执行函数节点的离开事件回调函数时,检查插件内可以清空标记当前所访问的函数节点,清空当前插件已记录的已赋值变量列表;
情况五:当检查插件执行各种类使用节点的访问回调函数时,可以从节点里获取出使用到的类名,然后参见上述的相关步骤获取到该类名对应的节点,如果获取到,则可以继续根据类定义的详细信息对类使用做更进一步检查,如果获取不到,则可以通过预设接口收集该异常信息。
当然,各回调函数内的具体检查逻辑并不以上述示出为限。
可选地,待检查工程文件目录对应多个目标语法树,上述根据预设语法检查规则,对至少一个目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据预设语法检查规则,对各目标语法树进行遍历检查,获取各目标语法树对应的检查报告;对各目标语法树对应的检查报告进行整理,得到待检查工程文件对应的检查报告。
其中,目标语法树对应的检查报告以字典数据格式存储,字典数据格式中的键包括目标语法树对应的待检查脚本文件的文件路径、字典数据格式中的值包括目标语法树对应的待检查文件对应的异常信息。
其中,待检查工程文件目录对应的多个目标语法树,则输出待检查工程文件对应的检查报告时,根据预设语法检查规则,对各目标语法树进行遍历检查,获取各目标语法树对应的检查报告,进而可以对各目标语法树对应的检查报告进行整理,得到待检查工程文件对应的检查报告。可选地,待检查工程文件对应的检查报告也可以以字典数据格式存储,以便用户根据该检查包括可以快速确定待检查工程文件中各待检查文件的异常信息,当然,数据存储方式并不以此为限。
在一些实施中,所获取的待检查工程文件对应的检查报告可以以报表、图表等形式呈现,在此不作限定,根据实际的应用场景,也可以设置该检查报告以邮件、消息等方式主动推送给用户查看。
可选地,各目标语法树对应的检查报告可以为json文件格式,当然,文件存储格式并不以此为限;可选地,所获取的各目标语法树对应的检查报告可以存放至预设检查目录下,各检查报告可以以预设标识进行区分,比如,可以以各待检查文件的文件名、又或者,可以以各检查子进程的进程号进行区分,在此不作限定。
可选地,上述检查报告可以包括下述至少一项:异常语法类型代码段对应的异常待检查脚本文件的文件标识、异常语法类型代码段在对应的异常待检查脚本文件中的位置信息、异常提示类型、异常等级。
文件标识可以包括:文件名称、文件编号、文件创建日期、文件权限等在此不作限定;异常语法类型代码段在对应的异常待检查脚本文件中的位置信息可以包括:行号、列号等,在此不作限定。
异常提示类型可以与异常语法类型代码段对应的语法类型相对应,比如,类定义错误、函数定义错误、变量赋值错误等,在此不作限定。
可选地,根据异常语法类型代码段是否会影响待检查工程文件预设功能的实现,异常等级可以包括:可忽略等级、高级等,其中,可忽略等级可以指示异常语法类型代码段无较为严重的语法问题,不会影响待检查工程文件预设功能的实现;高级可以指示异常语法类型代码段存在严重的语法问题,将会影响待检查工程文件预设功能的实现,当然,具体划分方式并不以此为限。
图10为本申请实施例提供的一种脚本文件检查装置的功能模块示意图,该装置基本原理及产生的技术效果与前述对应的方法实施例相同,为简要描述,本实施例中未提及部分,可参考方法实施例中的相应内容。如图10所示,该脚本文件检查100包括:
获取模块110,用于获取待检查工程文件目录对应的至少一个目标语法树,所述待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个所述目标语法树对应一个待检查脚本文件,且所述目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示所述待检查脚本文件里的每个语法类型代码段;
输出模块120,用于根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告。
在可选的实施方式中,所述获取模块110,具体用于根据待检查工程文件目录,获取至少一个待检查脚本文件对应的目标文件路径;
若根据至少一个待检查脚本文件对应的目标文件路径,确定语法树缓存池中包括至少一个所述待检查脚本文件对应的目标语法树,则通过所述语法树缓存池获取至少一个所述目标语法树,所述语法树缓存池包括:历史检查过程中已构建的语法树,以及所述已构建的语法树对应的文件路径之间的映射关系。
在可选的实施方式中,若确定语法树缓存池不包括所述待检查脚本文件对应的目标语法树,所述获取模块110,具体用于对所述待检查脚本文件进行解析,获取语法树配置文件,所述语法树配置文件以字典数据格式存储每个语法类型代码段;
根据所述语法树配置文件构建所述目标语法树,并将所述目标语法树和所述目标语法树对应的文件路径之间的映射关系存储至所述语法树缓存池中。
在可选的实施方式中,所述获取模块110,具体用于遍历所述待检查工程文件目录,获取多个所述待检查脚本文件对应的文件路径列表,所述文件路径列表包括各待检查脚本文件对应的存储路径;
根据多个所述待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
在可选的实施方式中,所述获取模块110,具体用于根据所述文件路径列表,获取各所述待检查脚本文件对应的存储空间;
根据各所述待检查脚本文件对应的存储空间、预设最大进程数以及单个解析子进程解析时所占用的内存空间阈值,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
在可选的实施方式中,所述输出模块120,具体用于根据预设语法检查规则,采用多个检查子进程对多个所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告。
在可选的实施方式中,若至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中显式包含第二待检查脚本文件、且包括定义在所述第二待检查脚本文件中的第一类,所述输出模块120,具体用于根据所述第一类的属性信息,获取所述第二待检查脚本文件的文件路径;
根据预设语法检查规则和所述第二待检查脚本文件的文件路径,对所述第一类的类定义节点进行检查,输出所述第一待检查脚本文件以及所述第二待检查脚本文件中所述第一类对应的检查报告。
在可选的实施方式中,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中隐式加载有定义在第三待检查脚本文件中的第二类,所述输出模块120,具体用于根据所述第二类的类名和预设类命名规则,获取所述第三待检查脚本文件的文件路径,其中,所述预设类命名规则包括:类名与类定义文件的文件路径之间的映射关系;
根据所述第三待检查脚本文件的文件路径,基于预设跨文件接口获取所述第三待检查脚本文件对应的语法树,所述预设跨文件接口被配置为可根据待检查文件的文件路径跨文件获取所述待检查文件对应的语法树;
根据预设语法检查规则和所述第三待检查脚本文件对应的语法树,对所述第二类对应的类定义节点,输出所述第一待检查脚本文件以及所述第三待检查脚本文件中所述第二类对应的检查报告。
在可选的实施方式中,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中包括定义在待检查工程文件的运行环境路径所指向的运行环境文件中的第三类,所述输出模块120,具体用于根据所述第三类的属性信息,基于类定义内置代码访问接口访问所述待检查工程文件的运行环境路径所指向的运行环境文件,获取所述第三类对应的类结构信息,并将所述类结构信息存储至缓存中;
根据预设语法检查规则,对所述第三类对应的类结构信息进行检查,输出所述第一待检查脚本文件中所述第三类对应的检查报告。
在可选的实施方式中,所述输出模块120,具体用于采用各检查子进程加载至少一个检查插件对各所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告,所述检查插件包括所述预设语法检查规则。
在可选的实施方式中,所述待检查工程文件目录对应多个目标语法树,所述输出模块120,具体用于根据预设语法检查规则,对各所述目标语法树进行遍历检查,获取各所述目标语法树对应的检查报告,所述目标语法树对应的检查报告以字典数据格式存储,所述字典数据格式中的键包括所述目标语法树对应的待检查脚本文件的文件路径、所述字典数据格式中的值包括所述目标语法树对应的待检查文件对应的异常信息;
对各所述目标语法树对应的检查报告进行整理,得到待检查工程文件对应的检查报告。
在可选的实施方式中,所述检查报告包括下述至少一项:异常语法类型代码段对应的异常待检查脚本文件的文件标识、异常语法类型代码段在对应的异常待检查脚本文件中的位置信息、异常提示类型、异常等级。
上述装置用于执行前述实施例提供的方法,其实现原理和技术效果类似,在此不再赘述。
以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(Application Specific Integrated Circuit,简称ASIC),或,一个或多个微处理器,或,一个或者多个现场可编程门阵列(Field Programmable Gate Array,简称FPGA)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(Central Processing Unit,简称CPU)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,简称SOC)的形式实现。
图11为本申请实施例提供的一种电子设备结构示意图。如图11所示,该电子设备可以包括:处理器210、存储介质220和总线230,存储介质220存储有处理器210可执行的机器可读指令,当电子设备运行时,处理器210与存储介质220之间通过总线230通信,处理器210执行机器可读指令,以执行上述方法实施例的步骤。具体实现方式和技术效果类似,这里不再赘述。
可选地,本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述方法实施例的步骤。具体实现方式和技术效果类似,这里不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (15)

1.一种脚本文件检查方法,其特征在于,包括:
获取待检查工程文件目录对应的至少一个目标语法树,所述待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个所述目标语法树对应一个待检查脚本文件,且所述目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示所述待检查脚本文件里的每个语法类型代码段;
根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告。
2.根据权利要求1所述的方法,其特征在于,所述获取待检查工程文件目录对应的至少一个目标语法树,包括:
根据待检查工程文件目录,获取至少一个待检查脚本文件对应的目标文件路径;
若根据至少一个待检查脚本文件对应的目标文件路径,确定语法树缓存池中包括至少一个所述待检查脚本文件对应的目标语法树,则通过所述语法树缓存池获取至少一个所述目标语法树,所述语法树缓存池包括:历史检查过程中已构建的语法树,以及所述已构建的语法树对应的文件路径之间的映射关系。
3.根据权利要求2所述的方法,其特征在于,若确定语法树缓存池不包括所述待检查脚本文件对应的目标语法树,所述获取待检查工程文件目录对应的至少一个目标语法树,包括:
对所述待检查脚本文件进行解析,获取语法树配置文件,所述语法树配置文件以字典数据格式存储每个语法类型代码段;
根据所述语法树配置文件构建所述目标语法树,并将所述目标语法树和所述目标语法树对应的文件路径之间的映射关系存储至所述语法树缓存池中。
4.根据权利要求3所述的方法,其特征在于,所述对所述待检查脚本文件进行解析,获取语法树配置文件,包括:
遍历所述待检查工程文件目录,获取多个所述待检查脚本文件对应的文件路径列表,所述文件路径列表包括各待检查脚本文件对应的存储路径;
根据多个所述待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
5.根据权利要求4所述的方法,其特征在于,所述根据多个所述待检查脚本文件对应的文件路径列表,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件,包括:
根据所述文件路径列表,获取各所述待检查脚本文件对应的存储空间;
根据各所述待检查脚本文件对应的存储空间、预设最大进程数以及单个解析子进程解析时所占用的内存空间阈值,采用多个解析子进程对多个所述待检查脚本文件进行解析,生成各所述待检查脚本文件对应的语法树配置文件。
6.根据权利要求1所述的方法,其特征在于,若所述目标语法树包括多个,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据预设语法检查规则,采用多个检查子进程对多个所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告。
7.根据权利要求1所述的方法,其特征在于,若至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中显式包含第二待检查脚本文件、且包括定义在所述第二待检查脚本文件中的第一类,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据所述第一类的属性信息,获取所述第二待检查脚本文件的文件路径;
根据预设语法检查规则和所述第二待检查脚本文件的文件路径,对所述第一类的类定义节点进行检查,输出所述第一待检查脚本文件以及所述第二待检查脚本文件中所述第一类对应的检查报告。
8.根据权利要求1所述的方法,其特征在于,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中隐式加载有定义在第三待检查脚本文件中的第二类,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据所述第二类的类名和预设类命名规则,获取所述第三待检查脚本文件的文件路径,其中,所述预设类命名规则包括:类名与类定义文件的文件路径之间的映射关系;
根据所述第三待检查脚本文件的文件路径,基于预设跨文件接口获取所述第三待检查脚本文件对应的语法树,所述预设跨文件接口被配置为可根据待检查文件的文件路径跨文件获取所述待检查文件对应的语法树;
根据预设语法检查规则和所述第三待检查脚本文件对应的语法树,对所述第二类对应的类定义节点,输出所述第一待检查脚本文件以及所述第三待检查脚本文件中所述第二类对应的检查报告。
9.根据权利要求1所述的方法,其特征在于,若确定至少一个所述目标语法树中第一目标语法树对应的第一待检查脚本文件中包括定义在待检查工程文件的运行环境路径所指向的运行环境文件中的第三类,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据所述第三类的属性信息,基于类定义内置代码访问接口访问所述待检查工程文件的运行环境路径所指向的运行环境文件,获取所述第三类对应的类结构信息,并将所述类结构信息存储至缓存中;
根据预设语法检查规则,对所述第三类对应的类结构信息进行检查,输出所述第一待检查脚本文件中所述第三类对应的检查报告。
10.根据权利要求6所述的方法,其特征在于,所述根据预设语法检查规则,采用多个检查子进程对多个所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告,包括:
采用各检查子进程加载至少一个检查插件对各所述目标语法树进行批量遍历检查,输出待检查工程文件对应的检查报告,所述检查插件包括所述预设语法检查规则。
11.根据权利要求1所述的方法,其特征在于,所述待检查工程文件目录对应多个目标语法树,所述根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告,包括:
根据预设语法检查规则,对各所述目标语法树进行遍历检查,获取各所述目标语法树对应的检查报告,所述目标语法树对应的检查报告以字典数据格式存储,所述字典数据格式中的键包括所述目标语法树对应的待检查脚本文件的文件路径、所述字典数据格式中的值包括所述目标语法树对应的待检查文件对应的异常信息;
对各所述目标语法树对应的检查报告进行整理,得到待检查工程文件对应的检查报告。
12.根据权利要求1-11任一项所述的方法,其特征在于,所述检查报告包括下述至少一项:
异常语法类型代码段对应的异常待检查脚本文件的文件标识、异常语法类型代码段在对应的异常待检查脚本文件中的位置信息、异常提示类型、异常等级。
13.一种脚本文件检查装置,其特征在于,包括:
获取模块,用于获取待检查工程文件目录对应的至少一个目标语法树,所述待检查工程文件目录下包括:采用脚本语言编写的至少一个待检查脚本文件,每个所述目标语法树对应一个待检查脚本文件,且所述目标语法树包括至少一种语法类型的定义索引表,每种语法类型的定义索引表包括:定义在目标语法树中的语法结构标识与节点的映射关系,每个节点用于表示所述待检查脚本文件里的每个语法类型代码段;
输出模块,用于根据预设语法检查规则,对至少一个所述目标语法树进行遍历检查,输出待检查工程文件对应的检查报告。
14.一种电子设备,其特征在于,包括:处理器、存储介质和总线,所述存储介质存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储介质之间通过总线通信,所述处理器执行所述机器可读指令,以执行如权利要求1-12任一所述脚本文件检查方法的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1-12任一所述脚本文件检查方法的步骤。
CN202210216642.XA 2022-03-07 2022-03-07 脚本文件检查方法、装置、电子设备及存储介质 Active CN114579203B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210216642.XA CN114579203B (zh) 2022-03-07 2022-03-07 脚本文件检查方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210216642.XA CN114579203B (zh) 2022-03-07 2022-03-07 脚本文件检查方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN114579203A true CN114579203A (zh) 2022-06-03
CN114579203B CN114579203B (zh) 2024-03-15

Family

ID=81777973

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210216642.XA Active CN114579203B (zh) 2022-03-07 2022-03-07 脚本文件检查方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114579203B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116541305A (zh) * 2023-06-26 2023-08-04 京东方艺云(杭州)科技有限公司 一种异常检测的方法、装置、电子设备及存储介质

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100088666A1 (en) * 2008-10-03 2010-04-08 Microsoft Corporation Common intermediate representation for data scripting language
CN103823694A (zh) * 2014-02-10 2014-05-28 深圳市同洲电子股份有限公司 一种脚本文件的更新方法及装置
CN103885879A (zh) * 2014-03-26 2014-06-25 卡斯柯信号有限公司 用于联锁软件自动测试平台系统的脚本解析方法
CN104866412A (zh) * 2014-02-21 2015-08-26 株式会社理光 JavaScript脚本文件的检测方法和检测系统
CN106371997A (zh) * 2016-09-07 2017-02-01 网易(杭州)网络有限公司 一种代码检查方法及装置
US20170193099A1 (en) * 2015-12-31 2017-07-06 Quixey, Inc. Machine Identification of Grammar Rules That Match a Search Query
CN107015813A (zh) * 2017-04-19 2017-08-04 网易(杭州)网络有限公司 代码修复的方法、装置及电子设备
CN110688307A (zh) * 2019-09-09 2020-01-14 平安普惠企业管理有限公司 JavaScript代码检测方法、装置、设备和存储介质
CN113468873A (zh) * 2021-07-09 2021-10-01 北京东方国信科技股份有限公司 Pl/sql语言的语法解析方法及装置
CN113760729A (zh) * 2021-01-26 2021-12-07 北京沃东天骏信息技术有限公司 一种代码检测方法和装置
CN113901468A (zh) * 2021-09-29 2022-01-07 深信服科技股份有限公司 一种脚本处理方法、装置、设备和存储介质

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100088666A1 (en) * 2008-10-03 2010-04-08 Microsoft Corporation Common intermediate representation for data scripting language
CN103823694A (zh) * 2014-02-10 2014-05-28 深圳市同洲电子股份有限公司 一种脚本文件的更新方法及装置
CN104866412A (zh) * 2014-02-21 2015-08-26 株式会社理光 JavaScript脚本文件的检测方法和检测系统
JP2015158909A (ja) * 2014-02-21 2015-09-03 株式会社リコー JavaScriptスクリプトファイルの測定方法及び測定システム
CN103885879A (zh) * 2014-03-26 2014-06-25 卡斯柯信号有限公司 用于联锁软件自动测试平台系统的脚本解析方法
US20170193099A1 (en) * 2015-12-31 2017-07-06 Quixey, Inc. Machine Identification of Grammar Rules That Match a Search Query
CN106371997A (zh) * 2016-09-07 2017-02-01 网易(杭州)网络有限公司 一种代码检查方法及装置
CN107015813A (zh) * 2017-04-19 2017-08-04 网易(杭州)网络有限公司 代码修复的方法、装置及电子设备
CN110688307A (zh) * 2019-09-09 2020-01-14 平安普惠企业管理有限公司 JavaScript代码检测方法、装置、设备和存储介质
CN113760729A (zh) * 2021-01-26 2021-12-07 北京沃东天骏信息技术有限公司 一种代码检测方法和装置
CN113468873A (zh) * 2021-07-09 2021-10-01 北京东方国信科技股份有限公司 Pl/sql语言的语法解析方法及装置
CN113901468A (zh) * 2021-09-29 2022-01-07 深信服科技股份有限公司 一种脚本处理方法、装置、设备和存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116541305A (zh) * 2023-06-26 2023-08-04 京东方艺云(杭州)科技有限公司 一种异常检测的方法、装置、电子设备及存储介质
CN116541305B (zh) * 2023-06-26 2023-12-15 京东方艺云(杭州)科技有限公司 一种异常检测的方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN114579203B (zh) 2024-03-15

Similar Documents

Publication Publication Date Title
CN108614707B (zh) 静态代码检查方法、装置、存储介质和计算机设备
AU2010350247B2 (en) Code inspection executing system for performing a code inspection of ABAP source codes
CN107644323B (zh) 一种面向业务流的智能审核系统
US6965887B2 (en) Rule processing methods for automating a decision and assessing satisfiability of rule-based decision diagrams
US9747190B2 (en) Analysis system, analysis method, and computer program product
US20100180256A1 (en) Method and system for generating functional test cases
EP2635976B1 (en) Bidirectional text checker
US20080270337A1 (en) Rule processing system
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
Delfmann et al. The generic model query language GMQL–Conceptual specification, implementation, and runtime evaluation
Malloy et al. An empirical analysis of the transition from python 2 to python 3
CN115080406A (zh) 代码日志生成方法、装置、设备和存储介质
CN111913878A (zh) 基于程序分析结果的字节码插桩方法、装置及存储介质
Oluwagbemi et al. Automatic generation of test cases from activity diagrams for UML based testing (UBT)
CN114579203B (zh) 脚本文件检查方法、装置、电子设备及存储介质
Rantala et al. Prevalence, contents and automatic detection of KL-SATD
CN116483850A (zh) 数据处理方法、装置、设备以及介质
CN112559343A (zh) 测试路径生成方法及相关设备
CN115080448B (zh) 一种软件代码不可达路径自动检测的方法和装置
CN111666216B (zh) 一种智能合约分析方法及装置
Schraps et al. Semantic annotation of a formal grammar by SemanticPatterns
KR102217092B1 (ko) 애플리케이션의 품질 정보 제공 방법 및 장치
CN112433943A (zh) 基于抽象语法树的环境变量检测方法、装置、设备及介质
Sahu et al. Computing dynamic slices of feature--oriented programs using execution trace file
Kuleshov et al. Diktat: Lightweight static analysis for kotlin

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