数据打印方法、装置、设备及存储介质与流程

文档序号:30795161发布日期:2022-07-16 13:10阅读:110来源:国知局

1.本发明涉及计算机技术领域,尤其涉及一种数据打印方法、装置、设备及存储介质。


背景技术:

2.前端开发工程师在开发调试的时候,经常会用到打印日志的方法在控制台看变量的值。当控制台有多个变量打印时,不容易分清打印的值是对应哪个变量。而有些代码,每秒都会进行数据更新刷新,大量的打印信息将会出现在控制台,导致测试人员难以分清控制台打印的变量信息,增加代码调试的难度,降低了代码调试的效率。
3.上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。


技术实现要素:

4.本发明的主要目的在于提供了一种数据打印方法、装置、设备及存储介质,旨在解决现有技术控制台打印信息过多时,测试人员难以分清控制台打印的变量信息,增加代码调试的难度,降低代码调试效率的技术问题。
5.为实现上述目的,本发明提供了一种数据打印方法,所述方法包括以下步骤:获取待处理源代码的初始抽象语法树中的待转换打印代码;对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树;根据所述目标抽象语法树生成目标源代码,并根据所述目标源代码进行数据打印,以对所述待转换打印代码对应的变量数据进行标识。
6.可选地,所述获取待处理源代码的初始抽象语法树中的待转换打印代码的步骤,包括:获取待处理源代码的初始抽象语法树;识别所述初始抽象语法树中各代码的代码类型;在所述代码类型为预设代码类型时,确定所述代码为待转换打印代码,所述预设代码类型包括callexpression或memberexpression。
7.可选地,所述对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树的步骤,包括:识别所述初始抽象语法树中的所述待转换打印代码对应的代码属性;根据所述代码属性和预设打印格式转换策略对所述待转换打印代码进行打印格式转换,获得目标抽象语法树。
8.可选地,所述获取待处理源代码的初始抽象语法树中的待转换打印代码的步骤之后,还包括:判断所述待转换打印代码是否为预设缩写代码;
在所述待转换打印代码为所述预设缩写代码时,对所述待转换打印代码进行代码补全;根据补全后的待转换打印代码更新所述初始抽象语法树。
9.可选地,所述识别所述初始抽象语法树中的所述待转换打印代码对应的代码属性的步骤之后,还包括:判断所述代码属性是否为预设自定义属性;在所述代码属性为所述预设自定义属性时,获取所述代码属性对应的代码补全信息;根据所述代码补全信息对所述待转换打印代码进行代码补全。
10.可选地,所述判断所述代码属性是否为预设自定义属性的步骤之前,还包括:获取用户设置的数据打印语法信息;根据所述数据打印语法信息确定预设自定义属性。
11.可选地,所述获取待处理源代码的初始抽象语法树中的待转换打印代码的步骤之前,还包括:获取用户设置的环境变量;在所述环境变量为禁止打印数据时,不对所述待处理源代码进行打印格式转换。
12.此外,为实现上述目的,本发明还提供一种数据打印装置,所述装置包括:获取模块,用于获取待处理源代码的初始抽象语法树中的待转换打印代码;转换模块,用于对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树;数据打印模块,用于根据所述目标抽象语法树生成目标源代码,并根据所述目标源代码进行数据打印,以对所述待转换打印代码对应的变量数据进行标识。
13.此外,为实现上述目的,本发明还提出一种数据打印设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的数据打印程序,所述数据打印程序配置为实现如上文所述的数据打印方法的步骤。
14.此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有数据打印程序,所述数据打印程序被处理器执行时实现如上文所述的数据打印方法的步骤。
15.本发明获取待处理源代码的初始抽象语法树中的待转换打印代码;对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树;根据所述目标抽象语法树生成目标源代码,并根据所述目标源代码进行数据打印,以对所述待转换打印代码对应的变量数据进行标识。由于本发明是对初始抽象语法树中的待转换打印代码进行打印格式转换,获得目标抽象语法树;根据目标抽象语法树生成目标源代码,并根据目标源代码进行数据打印,以对待转换打印代码对应的变量数据进行标识。相对于现有的在对代码进行调试时,将代码中的大量打印信息展示在控制台,依赖测试人员区分打印的变量值对应的变量信息的方式,本发明上述方式能够对打印的变量数据进行标识,提高代码调试的效率。
附图说明
16.图1是本发明实施例方案涉及的硬件运行环境的数据打印设备的结构示意图;
图2为本发明数据打印方法第一实施例的流程示意图;图3为本发明数据打印方法第二实施例的流程示意图;图4为本发明数据打印方法第三实施例的流程示意图;图5为本发明数据打印装置第一实施例的结构框图。
17.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
18.应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
19.参照图1,图1为本发明实施例方案涉及的硬件运行环境的数据打印设备结构示意图。
20.如图1所示,该数据打印设备可以包括:处理器1001,例如中央处理器(central processing unit,cpu),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(wireless-fidelity,wi-fi)接口)。存储器1005可以是高速的随机存取存储器(random access memory,ram),也可以是稳定的非易失性存储器(non-volatile memory,nvm),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
21.本领域技术人员可以理解,图1中示出的结构并不构成对数据打印设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
22.如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及数据打印程序。
23.在图1所示的数据打印设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明数据打印设备中的处理器1001、存储器1005可以设置在数据打印设备中,所述数据打印设备通过处理器1001调用存储器1005中存储的数据打印程序,并执行本发明实施例提供的数据打印方法。
24.基于上述数据打印设备,本发明实施例提供了一种数据打印方法,参照图2,图2为本发明数据打印方法第一实施例的流程示意图。
25.本实施例中,所述数据打印方法包括以下步骤:步骤s10:获取待处理源代码的初始抽象语法树中的待转换打印代码。
26.需要说明的是,本实施例的执行主体可以是一种具有数据处理、网络通信以及程序运行功能的计算服务设备,例如手机、平板电脑、个人电脑等,或者是一种能够实现上述功能的电子设备或数据打印插件。以下以所述数据打印插件为例,对本实施例及下述各实施例进行说明。
27.需要说明的是,所述待处理源代码可以是需要根据在控制台打印的变量信息进行代码调试的代码,例如,测试人员在调试源代码a时,需要根据所述源代码a运行时,在控制台打印的变量数据进行调试时,即可将源代码a作为所述待处理源代码。所述初始抽象语法树可以是所述待处理源代码对应的语法树。所述待转换打印代码可以是所述待处理源代码的初始抽象语法树中进行数据打印的代码。例如,待处理源代码中包含代码console.log
(name),console.log(name)在执行时会在控制台输出name这个变量对应的变量值。console.log(name)这个代码就是需要进行打印格式转换的代码,即待转换打印代码。
28.应理解的是,抽象语法树(abstract syntax tree,ast),或简称语法树(syntax tree),是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
29.进一步的,在代码调试完成或不需要调试时,不需要在控制台进行打印变量值,此时,为了合理的控制程序运行的资源开销,可不对待处理源代码进行打印格式转换,因此,所述步骤s10之前,还包括:获取用户设置的环境变量;在所述环境变量为禁止打印数据时,不对所述待处理源代码进行打印格式转换。
30.需要说明的是,所述环境变量可以是用户基于所述数据打印插件设置的环境设置信息,在所述环境变量为禁止打印数据时,所述数据打印插件即不对待处理源代码进行打印格式转换。例如,可通过在数据打印插件中设置以下代码:process.env.xxx === 'development' ['babel-plugin-log'] : [] 使所述数据打印插件不对待处理源代码进行打印格式转换。
[0031]
进一步的,为了提高开发人员的开发效率,所述步骤s10之后,还包括判断所述待转换打印代码是否为预设缩写代码;在所述待转换打印代码为所述预设缩写代码时,对所述待转换打印代码进行代码补全;根据补全后的待转换打印代码更新所述初始抽象语法树。
[0032]
需要说明的是,所述预设缩写代码可以是预先设置的在开发过程中可不必完整写出其完整名称的代码,可提高开发人员的开发效率,开发人员在开发代码时,可直接采用缩写即可,例如,对于在控制台打印变量的代码console.log(),开发人员可以在开发代码时,用log()代替。因为缩写后的代码的类型在初始抽象语法树中与未缩写时候的代码的类型相同,因此,在通过本实施例的数据打印插件对待转换打印代码进行打印格式转换时,可识别出所述预设缩写代码,并可按照预设缩写代码表对所述预设缩写代码进行代码补全;根据补全后的待转换打印代码更新所述初始抽象语法树。所述预设缩写代码表可以是存储预设缩写代码和其对应的完整代码的对照表。
[0033]
步骤s20:对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树。
[0034]
需要说明的是,所述对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换可以是将所述待转换打印代码转换为预设格式的代码,例如,将log()转换为console.log(),将console.log()转换为console.log('xxx', 'color: red;')。所述预设格式的代码在执行变量的打印时,可将变量进行标识打印,例如,在变量打印时前面加上变量的名称,或将打印的变量进行加粗、加深打印。
[0035]
步骤s30:根据所述目标抽象语法树生成目标源代码,并根据所述目标源代码进行数据打印,以对所述待转换打印代码对应的变量数据进行标识。
[0036]
需要说明的是,所述目标源代码可以是根据所述目标抽象语法树生成的代码,所述目标源代码在执行时,可将其中包含的在控制台打印的变量按照预设的格式进行打印,例如,颜色加深、字体变大等。所述变量数据可以是测试人员在调试时,需要在控制台进行打印的变量。对所述待转换打印代码对应的变量数据进行标识可以是使打印的变量数据进
行加粗打印,或在打印变量时,前面加上变量的名称。
[0037]
本实施例获取待处理源代码的初始抽象语法树中的待转换打印代码;对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树;根据所述目标抽象语法树生成目标源代码,并根据所述目标源代码进行数据打印,以对所述待转换打印代码对应的变量数据进行标识。由于本实施例是对初始抽象语法树中的待转换打印代码进行打印格式转换,获得目标抽象语法树;根据目标抽象语法树生成目标源代码,并根据目标源代码进行数据打印,以对待转换打印代码对应的变量数据进行标识。相对于现有的在对代码进行调试时,将代码中的大量打印信息展示在控制台,依赖测试人员区分打印的变量值对应的变量信息的方式,本实施例上述方式能够对打印的变量数据进行标识,提高代码调试的效率。
[0038]
参考图3,图3为本发明数据打印方法第二实施例的流程示意图。
[0039]
基于上述第一实施例,在本实施例中,所述步骤s10包括:步骤s101:获取待处理源代码的初始抽象语法树步骤s102:识别所述初始抽象语法树中各代码的代码类型。
[0040]
需要说明的是,根据初始抽象语法树可知,初始抽象语法树中console.log()的类型是callexpression,calle的类型是memberexpression。memberexpression的成员可包括console和log,console这个方法调用的入参就是arguments数组,所以只要在arguments插入预设的字符串节点就能实现在进行数据打印时,使打印的结果具有标识信息的效果,所述具有标识信息可以是在变量打印时加上变量的名称,或使变量按照预设的颜色,字体或字号进行打印。
[0041]
步骤s103:在所述代码类型为预设代码类型时,确定所述代码为待转换打印代码,所述预设代码类型包括callexpression或memberexpression。
[0042]
需要说明的是,所述预设代码类型可以是在控制台进行打印变量的代码或方法在初始抽象语法树中的代码类型,例如,可在控制台打印变量的方法console()在初始抽象语法树中的代码类型为callexpression。已知的,当初始抽象语法树中的代码类型为callexpression或memberexpression时,可知其对应的代码为在控制台进行打印变量的代码。因此,可在所述代码类型为预设代码类型时确定所述代码为待转换打印代码。
[0043]
本实施例获取待处理源代码的初始抽象语法树;识别所述初始抽象语法树中各代码的代码类型;在所述代码类型为预设代码类型时,确定所述代码为待转换打印代码,所述预设代码类型包括callexpression或memberexpression。本实施例通过对初始抽象语法树中的代码类型进行识别,获得待转换打印代码,使得进而可以对待转换打印代码进行打印格式转换,使需要在控制台进行打印输出的变量更加易于测试人员区分,提高测试人员提示代码的调试效率。
[0044]
参考图4,图4为本发明数据打印方法第三实施例的流程示意图。
[0045]
基于上述各实施例,在本实施例中,所述步骤s20,包括:步骤s201:识别所述初始抽象语法树中的所述待转换打印代码对应的代码属性。
[0046]
需要说明的是,所述代码属性可以是所述待转换打印代码对应的属性值,例如,当待转换打印代码为console时,其对应的属性值可能是log, info, warn, error, debug等。
[0047]
进一步的,为了使打印的变量对应的标识为开发人员指定的标识,以提高调试效率,所述步骤s201之后,还包括:判断所述代码属性是否为预设自定义属性;在所述代码属性为所述预设自定义属性时,获取所述代码属性对应的代码补全信息;根据所述代码补全信息对所述待转换打印代码进行代码补全。
[0048]
需要说明的是,所述预设自定义属性可以是预先设置的自定义代码对应属性值,例如,预先设置的自定义代码logred(...),其对应的属性值可以是red。其对应的代码补全信息可以是使其在打印时,输出的变量颜色为红色,则根据所述代码补全信息对所述待转换打印代码进行代码补全可以是将所述代码logred(...)补全为console.log('...', 'color: red;')。
[0049]
进一步的,为了使打印的变量的标识多样化,所述判断所述代码属性是否为预设自定义属性的步骤之前,还包括:获取用户设置的数据打印语法信息;根据所述数据打印语法信息确定预设自定义属性。
[0050]
需要说明的是,所述数据打印语法信息可以包括用户设置的自定义代码和其对应的代码补全信息以及对应的属性信息。可根据所述数据打印语法信息确定自定义代码的自定义属性以及自定义代码对应的代码补全信息,并根据自定义代码的自定义属性生成预设自定义属性。
[0051]
步骤s202:根据所述代码属性和预设打印格式转换策略对所述待转换打印代码进行打印格式转换,获得目标抽象语法树。
[0052]
需要说明的是,所述预设打印格式转换策略可以是各个代码属性对应的最终的打印效果,例如,若代码属性为warn,则预设打印格式转换策略可以是使代码属性为warn的代码打印出来的变量用红色加粗字体表示。若代码属性为log,则预设打印格式转换策略可以是使代码属性为log的代码打印出来的变量用灰色颜色表示,并在前面加上打印的变量的名称。所述根据所述代码属性和预设打印格式转换策略对所述待转换打印代码进行打印格式转换可以是根据所述代码属性在所述预设打印格式转换策略中查找所述代码属性对应的打印策略,并根据所述打印策略对所述待转换打印代码进行打印格式转换。
[0053]
在具体实施中,为了使在控制台打印的变量值更容易的被测试人员区分其对应的变量名称,可通过语法:types.stringliteral(callstring + ' ===》')使在控制台打印出来的变量信息加上其对应的变量名称,通过上述语法,可将代码console.log(name)转换为代码console.log('name====》',name),若变量name对应的值为123,则其对应的在控制台输出的值由“123”变为“name====》123”在具体实施中,数据打印插件中将log()代码转成代码console.log()的代码可以是:function transformcustomlogcall(node) {const callee = types.memberexpression({object: types.identifier({name: 'console'}),property: types.identifier({name: 'log'})})node.callee = callee}将logred()代码转换成console.log()并且显示红色的代码可以参照以下代码:function transformcustomlogredcall(node) {transformcustomlogcall(node)
node.arguments.push('color: red;')}const visitor = {callexpression(nodepath, state) {const { node } = nodepath;if (types.ismemberexpression(node.callee)) {// 打印时加上变量名if (node.callee.object.name === 'console') {if (['log', 'info', 'warn', 'error', 'debug'].includes(node.callee.property.name)) {node.arguments = disposearguments(node.arguments);}}}// 如果是函数调用并且函数名是 logif(types.iscallexpression(node) && node.callee.name === 'log'){function transformcustomlogcall(node)}// 如果是函数调用并且函数名是 logredif(types.iscallexpression(node) && node.callee.name === 'logred'){function transformcustomlogredcall(node)}}}本实施例识别所述初始抽象语法树中的所述待转换打印代码对应的代码属性;根据所述代码属性和预设打印格式转换策略对所述待转换打印代码进行打印格式转换,获得目标抽象语法树。本实施例根据所述待转换打印代码对应的代码属性和预设打印格式转换策略对所述待转换打印代码进行打印格式转换,获得目标抽象语法树。可以使不同代码属性的待转换打印代码最终打印出来的变量展示不同的标记信息,提升测试人员的调试效率。
[0054]
参照图5,图5为本发明数据打印装置第一实施例的结构框图。
[0055]
如图5所示,本发明实施例提出的数据打印装置包括:获取模块10,用于获取待处理源代码的初始抽象语法树中的待转换打印代码;转换模块20,用于对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树;数据打印模块30,用于根据所述目标抽象语法树生成目标源代码,并根据所述目标源代码进行数据打印,以对所述待转换打印代码对应的变量数据进行标识。
[0056]
本实施例获取待处理源代码的初始抽象语法树中的待转换打印代码;对所述初始抽象语法树中的所述待转换打印代码进行打印格式转换,获得目标抽象语法树;根据所述目标抽象语法树生成目标源代码,并根据所述目标源代码进行数据打印,以对所述待转换打印代码对应的变量数据进行标识。由于本实施例是对初始抽象语法树中的待转换打印代码进行打印格式转换,获得目标抽象语法树;根据目标抽象语法树生成目标源代码,并根据目标源代码进行数据打印,以对待转换打印代码对应的变量数据进行标识。相对于现有的
在对代码进行调试时,将代码中的大量打印信息展示在控制台,依赖测试人员区分打印的变量值对应的变量信息的方式,本实施例上述方式能够对打印的变量数据进行标识,提高代码调试的效率。
[0057]
需要说明的是,以上所描述的工作流程仅仅是示意性的,并不对本发明的保护范围构成限定,在实际应用中,本领域的技术人员可以根据实际的需要选择其中的部分或者全部来实现本实施例方案的目的,此处不做限制。
[0058]
另外,未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的数据打印方法,此处不再赘述。
[0059]
基于本发明上述数据打印装置第一实施例,提出本发明数据打印装置的第二实施例。
[0060]
在本实施例中,所述获取模块10,还用于获取待处理源代码的初始抽象语法树;识别所述初始抽象语法树中各代码的代码类型;在所述代码类型为预设代码类型时,确定所述代码为待转换打印代码,所述预设代码类型包括callexpression或memberexpression。
[0061]
进一步的,所述转换模块20,还用于识别所述初始抽象语法树中的所述待转换打印代码对应的代码属性;根据所述代码属性和预设打印格式转换策略对所述待转换打印代码进行打印格式转换,获得目标抽象语法树。
[0062]
进一步的,所述获取模块10,还用于判断所述待转换打印代码是否为预设缩写代码;在所述待转换打印代码为所述预设缩写代码时,对所述待转换打印代码进行代码补全;根据补全后的待转换打印代码更新所述初始抽象语法树。
[0063]
进一步的,所述转换模块20,还用于判断所述代码属性是否为预设自定义属性;在所述代码属性为所述预设自定义属性时,获取所述代码属性对应的代码补全信息;根据所述代码补全信息对所述待转换打印代码进行代码补全。
[0064]
进一步的,所述转换模块20,还用于获取用户设置的数据打印语法信息;根据所述数据打印语法信息确定预设自定义属性。
[0065]
进一步的,所述获取模块10,还用于获取用户设置的环境变量;在所述环境变量为禁止打印数据时,不对所述待处理源代码进行打印格式转换。
[0066]
本发明数据打印装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
[0067]
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有数据打印程序,所述数据打印程序被处理器执行时实现如上文所述的数据打印方法的步骤。
[0068]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
[0069]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0070]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做
出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0071]
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1