CN112905169A - 一种自动化定位命名空间引用问题的方法及装置 - Google Patents
一种自动化定位命名空间引用问题的方法及装置 Download PDFInfo
- Publication number
- CN112905169A CN112905169A CN202110099437.5A CN202110099437A CN112905169A CN 112905169 A CN112905169 A CN 112905169A CN 202110099437 A CN202110099437 A CN 202110099437A CN 112905169 A CN112905169 A CN 112905169A
- Authority
- CN
- China
- Prior art keywords
- namespace
- name
- file
- space
- code file
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 86
- 230000002159 abnormal effect Effects 0.000 claims abstract description 52
- 238000001514 detection method Methods 0.000 claims abstract description 25
- 238000012545 processing Methods 0.000 claims description 11
- 210000001072 colon Anatomy 0.000 claims description 9
- 238000004590 computer program Methods 0.000 claims description 9
- 238000011161 development Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
Images
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/30—Creation or generation of source code
- G06F8/33—Intelligent editors
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种自动化定位命名空间引用问题的方法及装置,该方法包括:读取检测目录下的代码文件;获取全路径引用的第一命名空间;若某个第一命名空间对应的文件不存在则标记为异常引用;和/或,获取相对路径引用的第二命名空间,若某个第二命名空间不具有对应的引用声明则标记为异常引用。本发明提供的自动化定位命名空间引用问题的方法及装置,通过分别获取通过全路径引用的第一命名空间和通过相对路径引用的第二命名空间,将文件不存在的第一命名空间和不具有引用声明的第二命名空间标记为异常引用,可以将命名空间的引用问题在开发阶段发现,便于提前发现问题,实现了自动化定位命名空间引用问题,提高了命名空间引用问题的检测效率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种自动化定位命名空间引用问题的方法及装置。
背景技术
PHP在5.3开始引入了命名空间的概念,其作用是将PHP代码按照一种虚拟的层次结构进行组织,这种结构类似于操作系统中文件系统的目录结构。在通常的PHP开发中,除了使用自己的代码以外,往往会使用很多其他的PHP组件。这些组件代码可能会使用相同的类名、接口名、函数名或者常量名等,如果不使用命名空间就会导致命名冲突,使PHP执行出错。而将代码放到各自唯一的命名空间中,代码就可以和其他开发者使用相同的类名、接口名、函数或者常量名等,这在团队合作中相当重要。
但是在代码开发过程中往往会存在代码复制的行为,如果在复制时只复制了命名空间的使用代码没有复制命名空间的引用代码时,则程序在运行时就会报命名空间找不到的错误。平时这种错误只能通过测试人员回归发现,如果代码的逻辑复杂分支多的话,无法保证所有的情况都能覆盖,费时费力。而sonar等代码扫描工具,只能进行静态代码检查,对于代码运行时的问题无法检查。
发明内容
针对现有技术存在的问题,本发明提供一种自动化定位命名空间引用问题的方法及装置。
本发明提供一种自动化定位命名空间引用问题的方法,包括:读取检测目录下的代码文件;对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
根据本发明提供一种的自动化定位命名空间引用问题的方法,所述获取所述代码文件中通过全路径引用的第一命名空间,具体包括:通过第一正则表达式获取所述代码文件中通过全路径引用的第一命名空间;所述获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明,具体包括:通过第二正则表达式获取所述代码文件中通过相对路径引用的第二命名空间的类名;基于所述类名,通过第三正则表达式判断所述第二命名空间是否具有对应的所述引用声明。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述方法还包括:若某个所述第二命名空间不具有对应的所述引用声明,进一步判断当前目录下是否存在不具有所述引用声明的所述第二命名空间的同名文件;若否,则将不具有所述引用声明的所述第二命名空间标记为异常引用。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述方法还包括:若当前目录下存在不具有所述引用声明的所述第二命名空间的同名文件,则判断所述同名文件中是否存在通过相对路径引用的所述第二命名空间的类名;若否,则将所述不具有所述引用声明的所述第二命名空间标记为异常引用。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述方法还包括:若经判断获知某个所述第二命名空间不具有所述引用声明,则通过第四正则表达式进一步判断所述类名是否是别名,若是,则获取所述别名对应的真实名,并根据所述真实名判断所述第二命名空间是否具有所述引用声明。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述方法还包括:将标记为异常引用的所述第一命名空间和/或所述第二命名空间添加到报警队列,并在所述代码文件处理完成后,根据所述报警队列中的信息采用预设的方式进行报警。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述第一正则表达式的匹配条件包括:反斜杠后大写字母开头的字母组合,所述反斜杠后大写字母开头的字母组合允许重复多次,结尾是双冒号。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述第二正则表达式的匹配条件包括:任意个空白、感叹号、中括号,小括号、等于或符号&的后面为大写字母开头的字母组合,结尾是双冒号。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述第三正则表达式的匹配条件包括:以单词use开头,后面跟着任意个空格,再后面是任意个字母和反斜杠,最后以分号结尾。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述第四正则表达式的匹配条件包括:字符串之间包括as符号。
本发明还提供一种自动化定位命名空间引用问题的装置,包括:代码文件获取模块,用于:读取检测目录下的代码文件;命名空间检测模块,用于:对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述自动化定位命名空间引用问题的方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述自动化定位命名空间引用问题的方法的步骤。
本发明提供的自动化定位命名空间引用问题的方法及装置,通过分别获取通过全路径引用的第一命名空间和通过相对路径引用的第二命名空间,并将对应文件不存在的第一命名空间和不具有对应的引用声明的第二命名空间标记为异常引用,可以将命名空间的引用问题在开发阶段发现,便于提前发现问题,并且实现了自动化定位命名空间引用问题,提高了命名空间引用问题的检测效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的自动化定位命名空间引用问题的方法的流程示意图之一;
图2是本发明提供的自动化定位命名空间引用问题的方法的流程示意图之二;
图3是本发明提供的自动化定位命名空间引用问题的装置的结构示意图;
图4是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1~图4描述本发明的自动化定位命名空间引用问题的方法及装置。
图1是本发明提供的自动化定位命名空间引用问题的方法的流程示意图之一。如图1所示,所述方法包括:
步骤101、读取检测目录下的代码文件。
检测目录是指待进行命名空间引用问题检测的代码文件所在的目录。可以读取检测目录下的多个代码文件进行命名空间引用问题的检测。具体地,可以利用脚本通过入参的形式获取到需要处理的代码文件所在的目录,递归的遍历所有需要处理的目录获取到需要处理的文件列表。
步骤102、对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
命名空间引用有两种方式,在文件头部通过use来引用或者在使用命名空间的位置使用命名空间的全路径引用,所以自动化检测的流程可以是:
1.检测代码文件中所有对命名空间的访问,将命名空间引用分成两组,头部use引用和全路径引用。
命名空间的引用可以通过两种方式来实现,一是在文件开头通过use引用命名空间,在使用时只需要写命名空间的最后一个层级就好了。例如在代码文件开头声明了命名空间引用use MobileApi\Api\DSP;在使用的地方直接$recRes=DSP::request();就可以了。二是全路径引用,是指在使用了命名空间下方法的地址通过完整的命名空间层级关系引用,例如$recRes=\MobileApi\Api\DSP::request();。
只需要分别识别出来以上两种引用方式是否合法就可以判断命名空间引用是否有问题了。
2.对于头部use引用的命名空间,检测代码中使用的命名空间在头部是否存在use引用,如果没有use则标记为异常引用。
3.对于全路径引用的命名空间,检测命名空间对应的文件是否存在,如果不存在则标记为异常引用。
为便于区分,将通过全路径引用的命名空间称为第一命名空间,将通过相对路径引用的命名空间称为第二命名空间。在进行命名空间引用问题检测时,对各个代码文件进行如下处理,具体包括:获取各个代码文件中通过全路径引用的第一命名空间;判断各个第一命名空间对应的文件是否存在,若某个第一命名空间对应的文件不存在,则将相应第一命名空间标记为异常引用;和/或,获取各个代码文件中通过相对路径引用的第二命名空间,判断各个第二命名空间是否具有对应的引用声明;若某个第二命名空间不具有对应的引用声明,则将相应第二命名空间标记为异常引用。
本发明提供的自动化定位命名空间引用问题的方法,通过分别获取通过全路径引用的第一命名空间和通过相对路径引用的第二命名空间,并将对应文件不存在的第一命名空间和不具有对应的引用声明的第二命名空间标记为异常引用,可以将命名空间的引用问题在开发阶段发现,便于提前发现问题,并且实现了自动化定位命名空间引用问题,提高了命名空间引用问题的检测效率。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述获取所述代码文件中通过全路径引用的第一命名空间,具体包括:通过第一正则表达式获取所述代码文件中通过全路径引用的第一命名空间;所述获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明,具体包括:通过第二正则表达式获取所述代码文件中通过相对路径引用的第二命名空间的类名;基于所述类名,通过第三正则表达式判断所述第二命名空间是否具有对应的所述引用声明。
首先需要识别出代码文件中使用了命名空间的代码,根据PHP PSR规范命名空间都是大写字母开头的驼峰命名规则,命名空间的层级之间使用\分割,命名空间的代码一般是调用的静态方法,根据这个特点,可以通过模式匹配的方式匹配出来使用了命名空间的代码。
获取各个代码文件中通过全路径引用的第一命名空间时,可以通过正则表达式获取各个代码文件中通过全路径引用的命名空间。为便于区分,获取各个代码文件中通过全路径引用的命名空间的正则表达式可以称作第一正则表达式。第一正则表达式的匹配条件可以根据全路径引用的格式进行针对性设置,目的是找出代码文件中出现全路径引用的代码。
在获取各个代码文件中通过相对路径引用的第二命名空间,判断各个第二命名空间是否具有对应的引用声明时,也可以通过正则表达式实现,具体可以为:通过第二正则表达式获取各个代码文件中通过相对路径引用的第二命名空间的类名,类名是第二命名空间的最后一个层级;如$recRes=DSP::request();中,DSP这个类名即为第二命名空间的最后一个层级,是实际调用时所引用的。通过第二正则表达式可以找出如上述表达式DSP的调用位置,也即通过相对路径的方式调用相应的第二命名空间的位置。第二正则表达式的匹配条件可以根据通过相对路径调用命名空间时的格式对应设置。
基于类名,通过第三正则表达式判断各个第二命名空间是否具有对应的引用声明。得到如上DSP的调用后,获知发生了通过相对路径进行命名空间的调用,而相对路径进行命名空间调用时,需要在文件头预先进行引用声明,如声明的格式为:use MobileApi\Api\DSP;。此时,可以基于类名,通过第三正则表达式判断通过相对路径调用的各个第二命名空间是否具有对应的引用声明。第三正则表达式的匹配条件可以根据引用声明的格式对应设置。
本发明提供的自动化定位命名空间引用问题的方法,通过正则表达式获取代码文件中通过全路径引用的第一命名空间以及判断通过相对路径引用的第二命名空间是否具有对应的引用声明,提高了问题定位效率。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述方法还包括:若某个所述第二命名空间不具有对应的所述引用声明,进一步判断当前目录下是否存在不具有所述引用声明的所述第二命名空间的同名文件;若否,则将不具有所述引用声明的所述第二命名空间标记为异常引用。
如果在进行了命名空间调用的代码文件的同一目录下定义了命名空间,即在同一目录下具有命名空间对应的文件,则可以直接在代码文件中进行相对路径的调用,而不需在文件头进行引用声明。因此,若某个第二命名空间不具有对应的引用声明,进一步判断当前目录下是否存在不具有引用声明的第二命名空间的同名文件。若当前目录下不存在不具有引用声明的第二命名空间的同名文件,则表示命名空间引用异常,将不具有引用声明的第二命名空间标记为异常引用。
本发明提供的自动化定位命名空间引用问题的方法,通过在某个第二命名空间不具有对应的引用声明时,进一步判断当前目录下是否存在不具有引用声明的第二命名空间的同名文件;若否,则将不具有引用声明的第二命名空间标记为异常引用,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述方法还包括:若当前目录下存在不具有所述引用声明的所述第二命名空间的同名文件,则判断所述同名文件中是否存在通过相对路径引用的所述第二命名空间的类名;若否,则将所述不具有所述引用声明的所述第二命名空间标记为异常引用。
若当前目录下存在不具有引用声明的第二命名空间的同名文件,要判断这个同名文件是否是代码文件中所调用的命名空间对应的文件,还要判断同名文件中是否存在通过相对路径引用的第二命名空间的类名,也即代码文件中通过相对路径调用时是否实际发生了对于这个同名文件中的类的调用。若同名文件中存在通过相对路径引用的第二命名空间的类名,则表示当前目录下不具有引用声明的第二命名空间的同名文件即为代码文件中通过相对路径调用的第二命名空间所对应的文件,则命名空间的引用没有问题。若同名文件中不存在通过第二命名空间引用的类名,则表示发生了命名空间的引用异常,则将相应的不具有引用声明的第二命名空间标记为异常引用。
本发明提供的自动化定位命名空间引用问题的方法,通过在若当前目录下存在不具有引用声明的第二命名空间的同名文件时,进一步判断同名文件中是否存在通过第二命名空间引用的类名;在不存在通过第二命名空间引用的类名时,则将不具有引用声明的第二命名空间标记为异常引用,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的自动化定位命名空间引用问题的方法,所述方法还包括:若经判断获知某个所述第二命名空间不具有所述引用声明,则通过第四正则表达式进一步判断所述类名是否是别名,若是,则获取所述别名对应的真实名,并根据所述真实名判断所述第二命名空间是否具有所述引用声明。
有时候基于个人编码习惯等原因,会对命名空间的最后一个级别(即类名)设置一个别名,在通过相对路径的方式引用命名空间时,通过别名进行引用。这时,如果直接根据别名查找是否具有相应的引用声明,则得到的将是“否”的结果。但是此时并不一定发生了引用异常,因为要基于命名空间的类名的真实名来判断第二命名空间是否具有相应的引用声明。在判断类名是否是别名时,也可通过正则表达式进行判断。正则表达式的匹配条件可以根据别名定义的形式进行相应设置。
因此,若经判断获知某个第二命名空间不具有引用声明,则通过第四正则表达式进一步判断类名是否是别名,若是,则获取别名对应的真实名,并根据真实名判断第二命名空间是否具有引用声明。
本发明提供的自动化定位命名空间引用问题的方法,通过经判断获知某个第二命名空间不具有引用声明时,通过第四正则表达式进一步判断类名是否是别名,若是,则获取别名对应的真实名,并根据真实名判断第二命名空间是否具有引用声明,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述方法还包括:将标记为异常引用的所述第一命名空间和/或所述第二命名空间添加到报警队列,并在所述代码文件处理完成后,根据所述报警队列中的信息采用预设的方式进行报警。
将标记为异常引用的第一命名空间和/或第二命名空间添加到报警队列,可以在所有代码文件处理完成后,根据报警队列中的信息采用预设的方式进行报警。比如,提示哪些第一命名空间及哪些第二命名空间出现了命名空间调用异常,以供排查。报警的方式可以根据需要而定,如可以采用邮件报警、短信报警等。
本发明提供的自动化定位命名空间引用问题的方法,通过将标记为异常引用的第一命名空间和/或第二命名空间添加到报警队列,并在所有代码文件处理完成后,根据报警队列中的信息采用预设的方式进行报警,有利于命名空间引用问题的排查。
根据本发明提供的自动化定位命名空间引用问题的方法,所述第一正则表达式的匹配条件包括:反斜杠后大写字母开头的字母组合,所述反斜杠后大写字母开头的字母组合允许重复多次,结尾是双冒号。
第一正则表达式用于获取各个代码文件中通过全路径引用的第一命名空间。通过全路径引用命名空间时的形式可以为:$recRes=\MobileApi\Api\DSP::request();。相应地,获取各个代码文件中通过全路径引用的第一命名空间的第一正则表达式的匹配条件包括:反斜杠后大写字母开头的字母组合,反斜杠后大写字母开头的字母组合允许重复多次,结尾是双冒号。第一正则表达式可以表示为:$fullPathExr="(\\[A-Z]\w+)+\\([A-Z]\w+)::";。
本发明提供的自动化定位命名空间引用问题的方法,通过合理设置第一正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述第二正则表达式的匹配条件包括:任意个空白、感叹号、中括号,小括号、等于或符号&的后面为大写字母开头的字母组合,结尾是双冒号。
第二正则表达式用于获取各个代码文件中通过相对路径引用的第二命名空间的类名,类名是第二命名空间的最后一个层级。通过相对路径引用命名空间时,其调用形式可以为:$recRes=DSP::request();。其中,DSP即为第二命名空间的最后一个层级,也即类名。第二正则表达式用于查找出现如DSP的类名的代码。相应地,第二正则表达式的匹配条件包括:任意个空白、感叹号、中括号,小括号、等于或符号&的后面为大写字母开头的字母组合,结尾是双冒号。
第二正则表达式可以表示为:regExr1"/(?<=[^*][\s![(.=&|])[A-Z]\w+(?=::|\\()/"。其含义可以分为三部分:第一(?<=[^*][\s![(.=&|]),第二[A-Z]\w+,第三(?=::|\\()。其中,第一部分就是任意个空白、感叹号、中括号,小括号、等于或符号&之后;第二部分就是大写字母开头,字母组成;第三部分在双冒号之前。可以用于匹配如$recRes=DSP::request();的命名空间使用,匹配的结果就是DSP。
本发明提供的自动化定位命名空间引用问题的方法,通过合理设置第二正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述第三正则表达式的匹配条件包括:以单词use开头,后面跟着任意个空格,再后面是任意个字母和反斜杠,最后以分号结尾。
第三正则表达式用于基于类名,判断各个第二命名空间是否具有对应的引用声明。第三正则表达式的形式可以为:$regExr2="/(?<=use\s)\\\*[A-Z].*(?=;)/";,用于获取文件中所有的通过use声明的命名空间。正则表达式regExr2的含义是:以单词use开头,后面跟着任意个空格,然后后面是任意个字母和\最后以;结尾。目的是匹配到类似如下的命名空间声明:use MobileApi\Api\DSP;。如果能匹配到上述形式,并且最后一个层级是对应的类名,则表示第二命名空间具有对应的引用声明。
本发明提供的自动化定位命名空间引用问题的方法,通过合理设置第三正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的方法,所述第四正则表达式的匹配条件包括:字符串之间包括as符号。
第四正则表达式用于匹配类名使用了别名的情况。第四正则表达式的形式可以为"/\sas\s/i",用于匹配命名空间引用定义中带有as的情况,例如use Ke\Framework\Routing\Controller as BaseController;这种情况相当于给Controller起了一个别名叫BaseController。
本发明提供的自动化定位命名空间引用问题的方法,通过合理设置第四正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
图2是本发明提供的自动化定位命名空间引用问题的方法的流程示意图之二。如图2所示,所述方法的步骤包括:
通过递归读取检测目录下所有文件,计算文件和文件中类名的对应关系,依次对每个文件的命名空间的引用情况进行检测。在对每个文件的命名空间的引用情况进行检测时,首先获取全路径引用的命名空间,依次检测每一个全路径引用的命名空间是否存在(即命名空间对应的文件是否存在),若检测到不存在的命名空间,则将相应的命名空间添加到报警队列;若所有的全路径引用的命名空间均存在,或在对不存在的全路径引用的命名空间均添加到报警队列后,再处理文件中相对路径引用的命名空间,通过正则表达式检索文件中类的调用,以及通过正则表达式检索文件中命名空间的引用声明,判断文件中使用的命名空间是否都声明过,若是,则准备处理下一个文件;若否,则判断未声明的命名空间是否在当前目录下有同名文件,若是,进一步判断同名文件中是否存在通过未声明的命名空间所调用的类名,若是,则命名空间的引用无误,准备处理下一个文件;若否,则将相应的命名空间添加到报警队列。若未声明的命名空间是否在当前目录下没有同名文件,则将相应的命名空间添加到报警队列。
判断所有的文件是否均处理完成,若是,判断报警队列是否为空,若不为空,则发送报警邮件。若为空,则结束。
本发明提供的自动化定位命名空间引用问题的方法可以实现命名空间引用问题的自动化检测。命名空间引用有两种方式,在文件头部通过use来引用或者在使用命名空间的位置使用命名空间的全路径引用,所以自动化检测的流程包括:
1.检测代码文件中所有对命名空间的访问,将命名空间引用分成两组,头部use引用和全路径引用。
2.对于头部use引用的命名空间检测代码中使用的命名空间在头部是否存在use引用,如果没有use则标记为异常引用。
3.对于全路径引用的命名空间,检测命名空间对应的文件是否存在,如果不存在则标记为异常引用。
4.汇总所有文件的检测结果,如果存在异常引用则通过邮件报警。
为了能在代码提交后自动化的发现命名空间引用的问题,可以采用gitlabrunner的方式进行检测。
下面对本发明提供的自动化定位命名空间引用问题的装置进行描述,下文描述的自动化定位命名空间引用问题的装置与上文描述的自动化定位命名空间引用问题的方法可相互对应参照。
图3是本发明提供的自动化定位命名空间引用问题的装置的结构示意图。如图3所示,所述装置包括代码文件获取模块10及命名空间检测模块20,其中:代码文件获取模块10用于:读取检测目录下的代码文件;命名空间检测模块20用于:对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
本发明提供的自动化定位命名空间引用问题的装置,通过分别获取通过全路径引用的第一命名空间和通过相对路径引用的第二命名空间,并将对应文件不存在的第一命名空间和不具有对应的引用声明的第二命名空间标记为异常引用,可以将命名空间的引用问题在开发阶段发现,便于提前发现问题,并且实现了自动化定位命名空间引用问题,提高了命名空间引用问题的检测效率。
根据本发明提供的一种自动化定位命名空间引用问题的装置,命名空间检测模块20在用于获取所述代码文件中通过全路径引用的第一命名空间时,具体用于:通过第一正则表达式获取所述代码文件中通过全路径引用的第一命名空间;命名空间检测模块20在用于获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明时,具体用于:通过第二正则表达式获取所述代码文件中通过相对路径引用的第二命名空间的类名;基于所述类名,通过第三正则表达式判断所述第二命名空间是否具有对应的所述引用声明。
本发明提供的自动化定位命名空间引用问题的装置,通过正则表达式获取代码文件中通过全路径引用的第一命名空间以及判断通过相对路径引用的第二命名空间是否具有对应的引用声明,提高了问题定位效率。
根据本发明提供的一种自动化定位命名空间引用问题的装置,命名空间检测模块20还用于:若某个所述第二命名空间不具有对应的所述引用声明,进一步判断当前目录下是否存在不具有所述引用声明的所述第二命名空间的同名文件;若否,则将不具有所述引用声明的所述第二命名空间标记为异常引用。
本发明提供的自动化定位命名空间引用问题的装置,通过在某个第二命名空间不具有对应的引用声明时,进一步判断当前目录下是否存在不具有引用声明的第二命名空间的同名文件;若否,则将不具有引用声明的第二命名空间标记为异常引用,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的装置,命名空间检测模块20还用于:若当前目录下存在不具有所述引用声明的所述第二命名空间的同名文件,则判断所述同名文件中是否存在通过相对路径引用的所述第二命名空间的类名;若否,则将所述不具有所述引用声明的所述第二命名空间标记为异常引用。
本发明提供的自动化定位命名空间引用问题的装置,通过在若当前目录下存在不具有引用声明的第二命名空间的同名文件时,进一步判断同名文件中是否存在通过第二命名空间引用的类名;在不存在通过第二命名空间引用的类名时,则将不具有引用声明的第二命名空间标记为异常引用,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的装置,命名空间检测模块20还用于:若经判断获知某个所述第二命名空间不具有所述引用声明,则通过第四正则表达式进一步判断所述类名是否是别名,若是,则获取所述别名对应的真实名,并根据所述真实名判断所述第二命名空间是否具有所述引用声明。
本发明提供的自动化定位命名空间引用问题的装置,通过经判断获知某个第二命名空间不具有引用声明时,通过第四正则表达式进一步判断类名是否是别名,若是,则获取别名对应的真实名,并根据真实名判断第二命名空间是否具有引用声明,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的装置,命名空间检测模块20还用于:将标记为异常引用的所述第一命名空间和/或所述第二命名空间添加到报警队列,并在所述代码文件处理完成后,根据所述报警队列中的信息采用预设的方式进行报警。
本发明提供的自动化定位命名空间引用问题的装置,通过将标记为异常引用的第一命名空间和/或第二命名空间添加到报警队列,并在所有代码文件处理完成后,根据报警队列中的信息采用预设的方式进行报警,有利于命名空间引用问题的排查。
根据本发明提供的一种自动化定位命名空间引用问题的装置,所述第一正则表达式的匹配条件包括:反斜杠后大写字母开头的字母组合,所述反斜杠后大写字母开头的字母组合允许重复多次,结尾是双冒号。
本发明提供的自动化定位命名空间引用问题的装置,通过合理设置第一正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的装置,所述第二正则表达式的匹配条件包括:任意个空白、感叹号、中括号,小括号、等于或符号&的后面为大写字母开头的字母组合,结尾是双冒号。
本发明提供的自动化定位命名空间引用问题的装置,通过合理设置第二正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的装置,所述第三正则表达式的匹配条件包括:以单词use开头,后面跟着任意个空格,再后面是任意个字母和反斜杠,最后以分号结尾。
本发明提供的自动化定位命名空间引用问题的装置,通过合理设置第三正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
根据本发明提供的一种自动化定位命名空间引用问题的装置,所述第四正则表达式的匹配条件包括:字符串之间包括as符号。
本发明提供的自动化定位命名空间引用问题的装置,通过合理设置第四正则表达式的匹配条件,进一步提高了命名空间引用问题定位的可靠性。
图4是本发明提供的电子设备的结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行自动化定位命名空间引用问题的方法,该方法包括:读取检测目录下的代码文件;对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的自动化定位命名空间引用问题的方法,该方法包括:读取检测目录下的代码文件;对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的自动化定位命名空间引用问题的方法,该方法包括:读取检测目录下的代码文件;对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种自动化定位命名空间引用问题的方法,其特征在于,包括:
读取检测目录下的代码文件;
对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
2.根据权利要求1所述的自动化定位命名空间引用问题的方法,其特征在于,所述获取所述代码文件中通过全路径引用的第一命名空间,具体包括:通过第一正则表达式获取所述代码文件中通过全路径引用的第一命名空间;
所述获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明,具体包括:通过第二正则表达式获取所述代码文件中通过相对路径引用的第二命名空间的类名;基于所述类名,通过第三正则表达式判断所述第二命名空间是否具有对应的所述引用声明。
3.根据权利要求1所述的自动化定位命名空间引用问题的方法,其特征在于,所述方法还包括:
若某个所述第二命名空间不具有对应的所述引用声明,进一步判断当前目录下是否存在不具有所述引用声明的所述第二命名空间的同名文件;若否,则将不具有所述引用声明的所述第二命名空间标记为异常引用。
4.根据权利要求3所述的自动化定位命名空间引用问题的方法,其特征在于,所述方法还包括:
若当前目录下存在不具有所述引用声明的所述第二命名空间的同名文件,则判断所述同名文件中是否存在通过相对路径引用的所述第二命名空间的类名;若否,则将所述不具有所述引用声明的所述第二命名空间标记为异常引用。
5.根据权利要求2所述的自动化定位命名空间引用问题的方法,其特征在于,所述方法还包括:
若经判断获知某个所述第二命名空间不具有所述引用声明,则通过第四正则表达式进一步判断所述类名是否是别名,若是,则获取所述别名对应的真实名,并根据所述真实名判断所述第二命名空间是否具有所述引用声明。
6.根据权利要求1所述的自动化定位命名空间引用问题的方法,其特征在于,所述方法还包括:
将标记为异常引用的所述第一命名空间和/或所述第二命名空间添加到报警队列,并在所述代码文件处理完成后,根据所述报警队列中的信息采用预设的方式进行报警。
7.根据权利要求2所述的自动化定位命名空间引用问题的方法,其特征在于,所述第一正则表达式的匹配条件包括:
反斜杠后大写字母开头的字母组合,所述反斜杠后大写字母开头的字母组合允许重复多次,结尾是双冒号。
8.一种自动化定位命名空间引用问题的装置,其特征在于,包括:
代码文件获取模块,用于:读取检测目录下的代码文件;
命名空间检测模块,用于:对所述代码文件进行如下处理,具体包括:获取所述代码文件中通过全路径引用的第一命名空间;判断所述第一命名空间对应的文件是否存在,若某个所述第一命名空间对应的文件不存在,则将相应所述第一命名空间标记为异常引用;和/或,获取所述代码文件中通过相对路径引用的第二命名空间,判断所述第二命名空间是否具有对应的引用声明;若某个所述第二命名空间不具有对应的所述引用声明,则将相应所述第二命名空间标记为异常引用。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述自动化定位命名空间引用问题的方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述自动化定位命名空间引用问题的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110099437.5A CN112905169B (zh) | 2021-01-25 | 2021-01-25 | 一种自动化定位命名空间引用问题的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110099437.5A CN112905169B (zh) | 2021-01-25 | 2021-01-25 | 一种自动化定位命名空间引用问题的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112905169A true CN112905169A (zh) | 2021-06-04 |
CN112905169B CN112905169B (zh) | 2024-03-01 |
Family
ID=76120283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110099437.5A Active CN112905169B (zh) | 2021-01-25 | 2021-01-25 | 一种自动化定位命名空间引用问题的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112905169B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120084761A1 (en) * | 2010-09-30 | 2012-04-05 | Nec Laboratories America, Inc. | Interprocedural Exception Method |
US20120144366A1 (en) * | 2010-12-03 | 2012-06-07 | International Business Machines Corporation | Refactor exception class hierarchy for reduced footprint and faster application start |
US20190012150A1 (en) * | 2017-07-07 | 2019-01-10 | Vmware, Inc. | Methods and systems that generate proxy objects that provide an interface to third-party executables |
CN110019038A (zh) * | 2018-04-12 | 2019-07-16 | 平安普惠企业管理有限公司 | 文件引用分析方法、装置、设备及计算机可读存储介质 |
CN111428247A (zh) * | 2020-04-23 | 2020-07-17 | 南京大学 | 一种对计算机漏洞库进行改进的方法 |
US20200278893A1 (en) * | 2020-03-10 | 2020-09-03 | Intel Corporation | Maintaining storage namespace identifiers for live virtualized execution environment migration |
-
2021
- 2021-01-25 CN CN202110099437.5A patent/CN112905169B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120084761A1 (en) * | 2010-09-30 | 2012-04-05 | Nec Laboratories America, Inc. | Interprocedural Exception Method |
US20120144366A1 (en) * | 2010-12-03 | 2012-06-07 | International Business Machines Corporation | Refactor exception class hierarchy for reduced footprint and faster application start |
US20190012150A1 (en) * | 2017-07-07 | 2019-01-10 | Vmware, Inc. | Methods and systems that generate proxy objects that provide an interface to third-party executables |
CN110019038A (zh) * | 2018-04-12 | 2019-07-16 | 平安普惠企业管理有限公司 | 文件引用分析方法、装置、设备及计算机可读存储介质 |
US20200278893A1 (en) * | 2020-03-10 | 2020-09-03 | Intel Corporation | Maintaining storage namespace identifiers for live virtualized execution environment migration |
CN111428247A (zh) * | 2020-04-23 | 2020-07-17 | 南京大学 | 一种对计算机漏洞库进行改进的方法 |
Non-Patent Citations (4)
Title |
---|
WINTER_LI: "PHP-命名空间的加载问题", pages 1 - 3, Retrieved from the Internet <URL:《https://www.jianshu.com/p/84fe37424a99》> * |
一直重复的名字: "PHP命名空间——新手基础/use自动加载/引用与别名", 《HTTPS://BAIJIAHAO.BAIDU.COM/S?ID=1637822373390344577&WFR=SPIDER&FOR=PC》, pages 1 - 4 * |
叶亮: "基于安全规则的源代码分析方法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 06, pages 138 - 228 * |
赵海廷: "变量的作用域和命名空间的探讨", 《武汉工程职业技术学院学报》, vol. 18, no. 02, pages 27 - 30 * |
Also Published As
Publication number | Publication date |
---|---|
CN112905169B (zh) | 2024-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11960879B2 (en) | Code conflict resolution system and method, apparatus, device, and medium | |
CN107092491B (zh) | 一种配置加载方法和系统 | |
CN113448862B (zh) | 软件版本测试方法、装置及计算机设备 | |
CN111694612A (zh) | 配置检查方法、装置、计算机系统及存储介质 | |
WO2023179749A1 (zh) | 组态数据处理系统、方法及电子设备 | |
CN109871408B (zh) | 一种多类型数据库适配方法、装置、电子设备及存储介质 | |
WO2018188222A1 (zh) | 一种a2l文件合并方法及装置 | |
CN114661423A (zh) | 集群配置检测方法、装置、计算机设备及存储介质 | |
CN112306568A (zh) | 服务实例配置方法、装置、电子设备及存储介质 | |
CN112882717A (zh) | 一种标签名查重方法、装置、电子设备及存储介质 | |
CN112052039A (zh) | 一种多项目同步构建的方法、装置及电子设备 | |
WO2023151397A1 (zh) | 应用程序部署方法、装置、设备及介质 | |
CN111582795A (zh) | 自动检测物流商的方法、设备及可读存储介质 | |
CN112905169A (zh) | 一种自动化定位命名空间引用问题的方法及装置 | |
CN108804889B (zh) | 一种网站注册方法及装置 | |
CN106021087A (zh) | 代码检测方法及装置 | |
CN115167896A (zh) | 一种更新软件版本的方法、装置、存储介质及电子设备 | |
CN114338846B (zh) | 一种报文测试的方法及装置 | |
CN114817047A (zh) | 编译器测试方法、用例生成方法及装置、指令存储结构 | |
CN113704123A (zh) | 接口测试方法、装置、设备以及存储介质 | |
CN113704114A (zh) | 功能接口的自动化测试方法、装置、设备及介质 | |
CN111400245A (zh) | 美术资源迁移方法及装置 | |
CN114020249B (zh) | 数据处理方法、装置、电子设备和存储介质 | |
CN112882721B (zh) | 一种软件包编译方法及装置 | |
CN112698832B (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20231127 Address after: Room 102, 1st Floor, Building 1, No. 2 Chuangye Road, Haidian District, Beijing, 100080 Applicant after: Seashell Housing (Beijing) Technology Co.,Ltd. Address before: 101309 room 24, 62 Farm Road, Erjie village, Yangzhen, Shunyi District, Beijing Applicant before: Beijing fangjianghu Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |