本发明涉及vue框架技术领域,尤其涉及一种vue框架的冗余代码检测方法、检测模块、电子设备及计算机存储介质。
背景技术:
vue是一个构建数据驱动的web界面的渐进式框架。其采用mvvm框架具有数据驱动、组件化、轻量、简洁、高效、快速、模块友好等的特性而被广泛的使用。
与react框架的完全组件化开发所不相同的是,对于数据驱动的vue框架而言,其定义的变量如果不使用会抛出错误。虽然在简单项目中可以通过合理的管理方式或者依靠编程者自身的编写习惯进行克服,避免过多的无效变量。
但是,现有的项目都会比较庞大,通常都需要使用多人共同开发,分工合作的方式来完成。在多人开发的情况下,由于不同人之间存在的编程习惯存在差异等的问题,会定义许多不使用的无效变量名和方法名。这样会导致出现代码冗余和开发效率低下的问题,不利于大型项目的推进。
现有一些编译器都会自带有搜索和匹配的功能,帮助编程人员获取相关的信息。但是现有的编译器都只是针对单个搜索进行模糊匹配,无不能实现对全局的精确匹配和搜索,很难满足使用需求。
技术实现要素:
本发明的实施例提供了一种vue框架的冗余代码检测方法、检测模块、电子设备及计算机存储介质,用于解决现有的vue框架开发过程中存在的一种或者多种问题。
本发明实施例的第一方面提供了一种vue框架的冗余代码检测方法。所述冗余代码检测方法包括:
获取所述vue框架的数据部分的数据变量名和方法部分的方法变量名;对待检测字段与所述数据变量名和所述方法变量名进行精确匹配;根据所述精确匹配的结果,统计所述待检测字段的重复出现次数;通过所述重复出现次数,筛选冗余变量名。
可选地,所述获取所述vue框架的数据部分的数据变量名,具体包括:重映射数据到设定的私有属性;设置所述私有属性的代理,以访问获取所述数据部分的数据变量名。
可选地,所述获取所述vue框架的方法部分的方法变量名,具体包括:将方法映射到设定的属性;重定义方法的引用,以访问获取所述方法部分的方法变量名。
可选地,所述对待检测字段与所述数据变量名和所述方法变量名进行精确匹配,具体包括:
构建与所述待检测字段对应的正则表达式;通过正则匹配的方式,在所述数据变量名和方法变量名中,对所述待检测字段进行搜索。
可选地,所述正则匹配使用贪婪模式,采用分支与回溯的机制进行匹配。
可选地,所述通过所述重复出现次数,筛选冗余变量名,具体包括:判断所述重复出现次数是否低于设定的阈值;若是,确定为冗余变量名。
本发明实施例的第二方面提供了一种冗余代码检测模块。其中,所述冗余代码检测模块包括:
变量名获取单元,用于获取所述vue框架的数据部分的数据变量名和方法部分的方法变量名;精确匹配单元,用于对待检测字段与所述数据变量名和所述方法变量名进行精确匹配;统计单元,用于根据所述精确匹配的结果,统计所述待检测字段的重复出现次数;标记单元,通过所述重复出现次数,筛选冗余变量名。
可选地,所述冗余代码检测模块被创建为编译器插件;所述编译器插件用于在选定的一个或者多个目标页面,对目标页面中的字段进行冗余代码检测。
本发明实施例的第三方面提供了一种冗余代码检测的电子设备。所述电子设备包括处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上所述的冗余代码检测方法的步骤。
本发明实施例第四方面提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行上所述的冗余代码检测方法的步骤。
本发明的实施例提供冗余代码检测方法,通过精确匹配的方式,可以快速统计多个字段在数据部分和方法部分的变量名出现次数,能够帮助开发人员确定变量或者方法是否被使用,从而快速去除没有被使用的冗余方法名或者变量名,使得代码更简洁,提高了编码效率。
上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的冗余代码检测方法的流程图;
图2是本发明实施例提供的步骤110的流程图;
图3是本发明实施例提供的冗余代码检测装置的功能框图;
图4是本发明实施例提供的电子设备的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
图1示出了本发明实施例提供的vue框架的冗余代码检测方法的流程图。该方法可以应用于编译器,作为编译器的其中一个插件,提供相应的冗余代码检测服务。
如图1所示,该方法可以包括如下步骤:
步骤110:获取数据部分中的数据变量名和方法部分的方法变量名。
在vue框架中,数据(data)和方法(method)都是vue框架中与数据处理相关的部分。其分别具有相应的功能和作用,可以采用任何合适的方式来访问获得data和method中所定义的数据变量名和方法变量名。
步骤120:对待检测字段与所述数据变量名和方法变量名进行精确匹配。
待检测字段可以是在当前页面中输入的一个或者多个字段,例如是开发人员输入的一些自定义变量名。在一些实施例中,可以对当前页面中所有的字段同时进行精确匹配。当然,也可以根据实际情况的需要进行一定的调整。
“精确匹配”是相对于“模糊匹配”而言的匹配方式,其实际上是一个搜索的过程。亦即,在步骤110获取到的数据集合中,以待检测字段作为搜索字段进行精确搜索。在搜索到完全或者基本一致的字段后,才确定为“命中”,实现精确匹配的目标。
在一些实施例中,可以通过正则匹配的方式,实现待检测字段在已有的数据变量名和方法变量名中的搜索。首先,为待检测字段构建合适的正则表达式。具体设置的正则表达式可以根据实际作为搜索条件的待检测变量名来确定。
为了保证精确匹配的实现,该正则表达式可以具有较为丰富的表达方式,使需要进行搜索的待检测字段可以使用简洁和恰当的正则表达式进行来表示。例如,使用test、match以及replace等方法。
进一步地,还可以加入一些特殊字符(如\b,*等)以及标识修饰符(如y.g等)来使得正则表达式的表示更为简洁和恰当。
然后,通过正则匹配的方式,在所述数据变量名和方法变量名中搜索是否存在与搜索条件(即一个或者多个待检测变量名)一致的字段。
在一些实施例中,在进行正则匹配的过程中,可以选择使用贪婪模式的匹配方式。“贪婪模式”是指在进行匹配过程中,找到那些尽量长的连续字段。
通过找到那些满足匹配要求的,尽量长的连续字段可以更好的保证待检测变量名确实存在于已经使用的数据变量名和方法变量名中,实现精确匹配的目标。
正则匹配实际上可以通过状态机来表示。在进行正则匹配的过程中,可能存在有数个分支。由此,可以设置合适的分支与回溯机制以确保匹配结果是精确的。
“回溯”是指某个分支匹配失败以后,重新回溯到上一个分支结果中尝试其他可能的分支的机制。回溯机制的存在可以使正则匹配尝试所有的可能性,保证搜索匹配结果的准确性。
较佳的是,由于回溯机制需所需要占用的时间较长。因此,为了避免匹配时间过程,需要控制分支尽可能的保持短和少的状态。
步骤130:根据所述精确匹配的结果,统计所述待检测字段的重复出现次数。
“重复出现次数”是指待检测字段(如页面中的自定义变量名)在所述数据变量名和所述方法变量名中已经出现过的次数。基于精确匹配的结果,可以看到待检测变量名是否能够在搜索的数据集合中被命中(亦即被检索得到)。由此,即可统计确定待检测变量名重复出现的次数。
步骤140:通过所述重复出现次数,筛选冗余变量名。
在步骤110中获取的数据变量名和方法变量名实际上是在vue框架中,已经被使用过的名称的数据集合。当待检测变量名在数据集合中没有出现过或者重复出现的次数较低时,可以被认为是一些没有被使用过的冗余变量名。
筛选冗余变量名的过程具体可以通过自动删除或者利用突出显示标注等方式来完成,只需要能够将最终的冗余变量名结果呈现给开发人员即可。
在一些实施例中,可以通过设置合适阈值的方式来筛选确定冗余变量名。请继续参阅图1,所述步骤140具体可以包括:
步骤141:判断所述重复出现次数是否低于设定的阈值。若是,执行步骤142。若否,返回步骤143。
该设定的阈值是一个经验性数值,可以根据实际情况的需要而进行设置。在本实施例中,可以设置为1。这样的,可以将没有在已经使用过的变量数据集合中出现过的变量名筛选出来。
步骤142:确定为冗余变量并删除。在确定为冗余变量以后,可以采用标注突出显示等方式来显示该冗余变量。开发人员可以针对相应的提示信息,对冗余变量进行手动删除等操作,令代码更为简洁并且不容易出现错误。
步骤143:确定为非冗余变量。在搜索得到该字段已经被多次使用时,表明其并非冗余变量,可以通过检测并继续使用。
本发明实施例提供的冗余代码检测方法,通过精确匹配的方式,同时检索和输出多个字段是否在已经使用的变量名数据集合中,从而确定是否属于冗余变量。这样的方式能够帮助开发人员检测和确定冗余代码。尤其是在多人开发的项目开发场景中,能够很好的提升开发效率,令代码更为简洁和不容易抛出错误。
图2为本发明实施例提供的步骤110的具体步骤的流程图。如图2所示,获取data和method中的数据变量名和方法变量名分别包括如下步骤:
获取数据部分(data)中的数据变量:
步骤111:重映射数据到设定的私有属性。
vue框架是基于数据驱动的。在vue框架的源码中,数据部分data定义在初始化对象$options中,可以通过vm.$options.data.key的方式来访问。
通过将其映射到私有属性vm._data以后,便可以通过该私有属性来实现对数据变量的访问。
步骤112:设置所述私有属性的代理,以访问获取所述数据部分的数据变量名。
由于私有属性vm._data不可以被直接外部访问。因此,可以通过设置代理proxy的方式,来访问获取所述数据部分的数据变量。
以下结合实现获取数据部分(data)中的数据变量获取的实现代码以详细说明具体的实现过程:
其中,代码行3将数据部分的初始化对象存储在变量data中。同时,新建了私有属性vm._data来映射该对象data。通过这样的重映射方式,使得vm._data访问到data数据。代码行4到11省略,用于示例设置数据代理。
代码行18用于处理在data和methods中字段存在冲突的情况。亦即,判断data中的字段是否与method中的方法变量字段存在命名冲突的问题。在代码行20中,可以根据实际情况的需要,设置相应的提示语句以提醒存在命名冲突的情况。
代码行25和26则是用于处理data和props中字段存在冲突的情况。亦即,判断data中的字段是否与props中的字段命名存在重复命名的问题。若是,则根据实际情况,设置相应的提示语句以提醒存在命名冲突的问题。
代码行30是用于设置代理(proxy)的步骤。通过代理的方式实现对私有属性的访问。代码行33用于对数据库添加观察(observe)。
获取方法部分(method)中的方法变量与获取数据部分(data)的数据变量相类似,同样也可以利用重映射和引用的方式来实现,具体为:
步骤113:将方法重新映射到设定的私有属性。
步骤114:重定义方法的引用,以访问获取所述方法部分的方法变量名。
以下结合实现获取方法部分(methods)中的方法名获取的实现代码以详细说明具体的实现过程:
代码行1至3中对方法进行了重映射。代码行15则用于对方法的引用进行了重定义,以使方法部分的数据可以被外部访问获得。
图3示出了本发明实施例提供的冗余代码检测模块的结构示意图。如图3所示,该冗余代码检测模块可以包括:变量名获取单元310,精确匹配单元320,统计单元330以及标记单元340。
其中,变量名获取单元310用于获取数据部分中的数据变量名和方法部分的方法变量名。精确匹配单元320用于对待检测变量名与所述变量名进行精确匹配。统计单元330用于根据所述精确匹配的结果,统计所述待检测变量名在所述自定义变量名中重复出现次数。标记单元340用于通过所述重复出现次数,筛选冗余变量名。
通过本发明实施例提供的冗余代码检测模块,可以实现对冗余代码的自动检测,从而有效的提高了vue框架的项目开发效率,避免无效变量名所造成的影响。
在可选的实施例中,该冗余代码检测模块可以作为编译器的插件使用。开发人员可以利用该插件提供的冗余代码检测功能,在选定的一个或者多个目标页面中进行上述方法实施例提供的冗余代码检测步骤,确定在当前页面的字段是否为冗余代码并提供相应的标注或者自动删除。
在进行特定页面的冗余代码检测的过程中,可以同时进行多个字段的精确匹配,确定自定义变量名是否为冗余变量。
通过该编译器插件提供的多数据变量或方法名的精确匹配,可以帮助开发人员快速的确定当前页面中定义的数据变量或方法名是否被使用,提示其手动剔除非必须的数据变量或方法名,使代码更为简洁。
本发明实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的冗余代码检测方法。
可执行指令具体可以用于使得处理器执行以下操作:获取数据部分中的数据变量名和方法部分的方法变量名,对待检测变量名与所述变量名进行精确匹配,根据所述精确匹配的结果,统计所述待检测变量名的重复出现次数,通过所述重复出现次数,筛选冗余变量名。
在可选的实施例中,该可执行指令可以用于使得处理器执行以下操作:判断所述重复出现次数是否低于设定的阈值。若是,确定为冗余变量并删除。
图4示出了本发明实施例提供的电子设备实施例的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(communicationsinterface)604、存储器(memory)406、以及通信总线408。
其中,处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。处理器402,用于执行程序410,具体可以执行上述用于用户感知的评价方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。
存储器406,用于存放程序410。存储器606可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行以下操作:获取数据部分中的数据变量名和方法部分的方法变量名,对待检测变量名与所述变量名进行精确匹配,根据所述精确匹配的结果,统计所述待检测变量名的重复出现次数,通过所述重复出现次数,筛选冗余变量名。
在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。