CN112817876B - 一种代码诊断方法、装置、服务端、用户设备及存储介质 - Google Patents

一种代码诊断方法、装置、服务端、用户设备及存储介质 Download PDF

Info

Publication number
CN112817876B
CN112817876B CN202110418566.6A CN202110418566A CN112817876B CN 112817876 B CN112817876 B CN 112817876B CN 202110418566 A CN202110418566 A CN 202110418566A CN 112817876 B CN112817876 B CN 112817876B
Authority
CN
China
Prior art keywords
code
diagnosis
document
statement
editor
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.)
Active
Application number
CN202110418566.6A
Other languages
English (en)
Other versions
CN112817876A (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.)
Alibaba Cloud Computing Ltd
Original Assignee
Alibaba Cloud Computing 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 Alibaba Cloud Computing Ltd filed Critical Alibaba Cloud Computing Ltd
Priority to CN202110418566.6A priority Critical patent/CN112817876B/zh
Publication of CN112817876A publication Critical patent/CN112817876A/zh
Application granted granted Critical
Publication of CN112817876B publication Critical patent/CN112817876B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供一种代码诊断方法、装置、服务端、用户设备及存储介质,其中方法包括:确定代码编辑界面当前输入的代码文档;响应于代码诊断指令,确定代码文档的代码语句;对代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到代码文档在各诊断类型对应的诊断结果;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;进而将代码文档在各诊断类型对应的诊断结果,发送给编辑器前端,以便编辑器前端展示。本申请实施例可支持对代码进行多种诊断类型的代码诊断,并可在用户编辑代码的过程中,及时的提供各种诊断类型对应的诊断结果,便于用户修改代码编辑过程中出现的错误。

Description

一种代码诊断方法、装置、服务端、用户设备及存储介质
技术领域
本申请实施例涉及数据处理技术领域,具体涉及一种代码诊断方法、装置、服务端、用户设备及存储介质。
背景技术
用户使用代码编辑器(简称编辑器)编辑的代码可能会存在各种各样的错误,如果仅对用户编辑的代码进行语法诊断,这将导致代码后续运行时会出现报错,使得用户需要根据代码运行时的报错来修改代码。因此如何在代码编辑过程中提供及时且支持多种诊断类型的代码诊断方案,成为了本领域技术人员亟需解决的问题。
发明内容
有鉴于此,本申请实施例提供一种代码诊断方法、装置、服务端、用户设备及存储介质。
第一方面,本申请实施例提供一种代码诊断方法,所述方法应用于编辑器服务端,所述方法包括:
确定代码编辑界面当前输入的代码文档;
响应于代码诊断指令,确定所述代码文档的代码语句;
对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果;其中,所述代码文档的各代码语句在一种诊断类型对应的诊断结果,汇总得到所述代码文档在该种诊断类型对应的诊断结果;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端,以便编辑器前端展示所述代码文档在各诊断类型对应的诊断结果。
第二方面,本申请实施例提供一种代码诊断方法,所述方法应用于编辑器前端,所述方法包括:
展示代码编辑界面,所述代码编辑界面展示有当前输入的代码文档,所述代码文档包括代码语句;
接收编辑器服务端发送的所述代码文档的诊断结果;
若所述诊断结果不为空,且包括代码语句在至少一种诊断类型对应的诊断结果,则根据所述诊断结果,确定代码编辑界面中存在错误的目标代码语句以及目标代码语句存在错误的诊断类型;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
在代码编辑界面以不同的提示方式,展示目标代码语句在不同诊断类型对应的错误提示,并将目标代码语句在一种诊断类型对应的错误提示,与目标代码语句在该种诊断类型对应的诊断结果进行关联;
响应于代码编辑界面中具有错误提示的目标代码语句的用户操作,展示与该错误提示关联的诊断结果。
第三方面,本申请实施例提供一种代码诊断装置,所述装置应用于编辑器服务端,所述装置包括:
代码文档确定模块,用于确定代码编辑界面当前输入的代码文档;
代码语句确定模块,用于响应于代码诊断指令,确定所述代码文档的代码语句;
诊断执行模块,用于对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果;其中,所述代码文档的各代码语句在一种诊断类型对应的诊断结果,汇总得到所述代码文档在该种诊断类型对应的诊断结果;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
诊断结果发送模块,用于将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端,以便编辑器前端展示所述代码文档在各诊断类型对应的诊断结果。
第四方面,本申请实施例提供一种代码诊断装置,所述装置应用于编辑器前端,所述装置包括:
代码编辑界面展示模块,用于展示代码编辑界面,所述代码编辑界面展示有当前输入的代码文档,所述代码文档包括代码语句;
诊断结果接收模块,用于接收编辑器服务端发送所述代码文档的诊断结果;
错误语句及类型确定模块,用于若所述诊断结果不为空,且包括代码语句在至少一种诊断类型对应的诊断结果,则根据所述诊断结果,确定代码编辑界面中存在错误的目标代码语句以及目标代码语句存在错误的诊断类型;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
错误提示展示及关联模块,用于在代码编辑界面以不同的提示方式,展示目标代码语句在不同诊断类型对应的错误提示,并将目标代码语句在一种诊断类型对应的错误提示,与目标代码语句在该种诊断类型对应的诊断结果进行关联;
诊断结果展示模块,用于响应于代码编辑界面中具有错误提示的目标代码语句的用户操作,展示与该错误提示关联的诊断结果。
第五方面,本申请实施例提供一种编辑器服务端,包括至少一个存储器和至少一个处理器,所述存储器存储一条或多条计算机指令,所述处理器调用所述计算机指令以实现如上述第一方面所述的代码诊断方法。
第六方面,本申请实施例提供一种用户设备,所述用户设备运行有编辑器前端,所述用户设备包括至少一个存储器和至少一个处理器,所述存储器存储一条或多条计算机指令,所述处理器调用所述计算机指令以实现如上述第二方面所述的代码诊断方法。
第七方面,本申请实施例提供一种存储介质,所述存储介质存储一条或多条计算机指令,所述计算机指令被执行时实现如上述第一方面所述的代码诊断方法,或者,如上述第二方面所述的代码诊断方法。
本申请实施例提供的代码诊断方法中,编辑器服务端可确定代码编辑界面当前输入的代码文档,并响应于代码诊断指令,对所述代码文档执行至少一种诊断类型的代码诊断;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断。由于代码诊断是针对代码文档中的代码语句进行,因此编辑器服务端可确定所述代码文档的代码语句,从而对所述代码文档的各代码语句分别执行至少一种诊断类型的代码诊断,得到代码文档在各诊断类型对应的诊断结果;其中,所述代码文档在一种诊断类型对应的诊断结果,由所述代码文档的各代码语句在该种诊断类型对应的诊断结果汇总得到。进而,编辑器服务端可将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端。编辑器前端可展示所述代码文档在各诊断类型对应的诊断结果,以提示用户编辑的代码中存在的错误和/或修改建议。本申请实施例提供的代码编辑方法,可在用户在代码编辑界面编辑代码的过程中,由编辑器服务端对代码文档进行执行一种诊断类型的代码诊断,并将诊断结果反馈给编辑器前端,从而编辑器前端可展示代码文档在各诊断类型对应的诊断结果,以提示用户编辑的代码在各诊断类型所存在的错误。可见,本申请实施例提供的方案能够支持对代码进行多种诊断类型的代码诊断,并可在用户编辑代码的过程中,及时的提供各种诊断类型对应的诊断结果,便于用户修改代码编辑过程中出现的错误。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为编辑器系统的示意图。
图2a为本申请实施例提供的代码诊断方法的流程图。
图2b为代码文档的语法诊断示例图。
图3为对代码文档进行多种类型的代码诊断的方法流程图。
图4a为执行可执行性诊断的方法流程图。
图4b为权限诊断的方法流程图。
图4c为确定目标操作数据的方法流程图。
图5a为编辑器前端实现代码诊断的流程图。
图5b为以下划线方式提示存在错误的目标代码语句的示意图。
图5c为代码编辑界面展示具体诊断结果的示意图。
图6a为收起状态的辅助面板的示意图。
图6b为展开展示状态的辅助面板的示意图。
图6c为目标代码语句的突出展示示意图。
图7为本申请实施例提供的代码诊断装置的框图。
图8为编辑器服务端的框图。
图9为本申请实施例提供的代码诊断装置的另一框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例所指的代码诊断是指检查用户在编辑器中编写的代码的错误,并提供诊断结果。
实现代码诊断的一种方式是由编辑器用户端,检查编辑器中编写的代码的错误,并提供诊断结果。编辑器用户端也可称为编辑器前端,其可以认为是用户设备上以网页、应用程序等形式运行的编辑器工具。
由编辑器前端实现代码诊断的方案存在一定的缺点:代码诊断的处理性能依赖于用户设备的机器能力,若用户设备的机器能力较差,则可能导致代码诊断所能支持的数据量级有限;并且编辑器前端只能支持简单的语法诊断,而无法支持多种诊断类型。
实现代码诊断的另一种方式是由编辑器服务端,检查编辑器中编写的代码的错误,并提供诊断结果。编辑器服务端可以认为是提供编辑器服务支持的服务器设备。
编辑器服务端实现代码诊断的方案可将代码诊断的处理工作放置在服务器设备,避免了编辑器前端实现代码诊断带来的处理性能问题,但是由编辑器服务端实现代码诊断的方案也存在需要优化的问题:编辑器服务端所能支持的诊断类型有限,如何支持多种诊断类型一直是亟需解决的问题。
另外,由编辑器服务端实现代码诊断,则需要编辑器前端不断的向编辑器服务端发送代码、请求等消息,如果不合理的选用编辑器服务器与编辑器前端的通信协议,也会对编辑器服务端实现代码诊断存在影响。例如,编辑器服务器与编辑器前端使用http(HyperText Transfer Protocol,超文本传输协议)协议进行通信,则由于http请求容易达到并发上限并且http请求的包头比较大,这极易造成网络延迟增大,导致http请求的发送阻塞或编辑器服务端响应http请求不及时,影响代码诊断性能。
基于此,本申请实施例提供一种新型的代码编辑方案。本申请实施例提供的代码编辑方案可由编辑器服务端在代码编辑过程中提供及时的代码诊断,并支持多种诊断类型;同时,将包含错误描述、修改建议的不同诊断类型的诊断结果反馈给编辑器前端,可使得编辑器前端支持对代码文档展示多种诊断类型的诊断结果,更加便于用户修改代码编辑过程中出现的错误。
本申请实施例提供了一种编辑器系统,该编辑器系统可由编辑器服务端实现代码诊断。在一些实施例中,图1示出了编辑器系统100的可选示意图。如图1所示,编辑器系统100可以包括:编辑器前端110和编辑器服务端120。
在一些实施例中,编辑器前端110和编辑器服务端120可基于websocket进行实时通信,以处理编辑器前端110和编辑器服务端120之间的高频交互。websocket可以认为是一种在单个TCP(Transmission Control Protocol,传输控制协议)连接上进行全双工通信的协议。websocket 协议具有如下优势:能够实现双向通信、节约网络开销,具有比 http 更强的扩展性,并能够支持数据压缩,同时又具有状态连接等特性。
在一些实施例中,编辑器前端与编辑器服务端之间的传输数据,可基于 RPC协议(例如,json-RPC协议)进行包装。同时将传输数据的消息头部去掉,利用其比 http 更精简的特性,能够实现编辑器前端与编辑器服务端进行更少数据量数据传输,减少编辑器服务端的压力。在进一步的一些实施例中,编辑器前端与编辑器服务端可依据RPC(RemoteProcedure Call,远程过程调用)的消息类型,来确定编辑器前端与编辑器服务端各自接收的消息是服务调用请求、消息通知、还是调用返回结果;如果是消息通知类的消息,执行具体的操作即可;如果是调用返回结果类的消息,则需要确定对应的服务调用请求,确定请求处理结果并将请求处理结果进行返回。
在一些实施例中,编辑器前端与编辑器服务端之间的数据传输格式,可以采用LSP(Language Server Protocol,语言服务器协议)。LSP是一套描述编辑行为与语言特性的统一协议,该协议能够解耦编辑器前端与编辑器服务端的语言服务。通过定义一套统一的数据通信协议(例如LSP),可使得采用该协议的编辑器可以对接,各种同样基于该协议实现的语言服务。
在一个示例中,编辑器前端与编辑器服务端的通信机制实现可以如下:
编辑器前端与编辑器服务端各自基于websocket实现RPC机制;
根据编辑器与语言服务器的交互,制定一套公共的流程,保证每个语言实现 LSP协议后,编辑器只需调用不同的语言服务(Language Server),即可支持不同语言特性;
编辑器前端与编辑器服务端各自接收到消息后,进行消息类型的判定,并执行不同的流程。如果是通知或响应类的消息,执行具体的操作即可;如果是请求类的消息,需要处理请求并将请求处理结果进行返回。
图2a示出了本申请实施例提供的代码诊断方法的流程图。在图2a所示代码诊断方法中,编辑器服务端可支持对代码编辑界面编写的代码实现多种类型的代码诊断,例如语法诊断、可执行性诊断、权限诊断、性能诊断等。从而,编辑器服务端可汇总各诊断类型对应的诊断结果并反馈给编辑器前端,使得编辑器前端可展示代码文档在各诊断类型对应的诊断结果。当然,上述所指的语法诊断、可执行性诊断、权限诊断、性能诊断等诊断类型,仅是编辑器服务端支持的多种诊断类型的可选示例,基于不同的诊断需求,编辑器服务端可适应提供相应的多种诊断类型。参照图2a,该流程可以包括如下步骤。
在步骤S211中,编辑器前端展示代码编辑界面。
编辑器前端可展示用于用户编辑代码的代码编辑界面。用户可在该代码编辑界面中输入代码数据。
在步骤S212中,编辑器前端向编辑器服务端发送代码编辑界面实时的代码变更内容。
在步骤S213中,编辑器服务端根据所述代码变更内容,确定编辑器前端在代码编辑界面实时输入的代码文档。
步骤S212和步骤S213可以认为是编辑器服务端确定编辑器前端在代码编辑界面实时输入的代码文档的可选过程。在一些实施例中,编辑器前端在编辑代码前,可打开初始代码文档并将该初始代码文档同步给编辑器服务端。在编辑器前端编辑代码的过程中,如果代码编辑界面存在新输入的字符或者修改的字符,则编辑器前端可通过websocket通信向编辑器服务端发送实时的代码变更内容。从而,编辑器服务器端可根据初始代码文档以及实时的代码变更内容,拼装出编辑器前端在代码编辑界面实时输入的代码文档。
需要说明的是,编辑器服务端确定代码编辑界面实时输入的代码文档,仅是编辑器服务端确定代码编辑界面当前输入的代码文档的可选方式。例如,编辑器前端也可直接将代码编辑界面当前输入的代码文档发送给编辑器服务端。
在步骤S214中,编辑器服务端响应于代码诊断指令,确定所述代码文档的代码语句。
在步骤S215中,编辑器服务端对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果;其中,所述代码文档的各代码语句在一种诊断类型对应的诊断结果,汇总得到所述代码文档在该种诊断类型对应的诊断结果。
在一些实施例中,所述代码诊断指令可由编辑器前端发送给编辑器服务端,以便编辑器服务端响应和处理所述代码诊断指令,来对所述代码文档执行至少一种诊断类型的代码诊断。例如,编辑器前端可在向编辑器服务端发送实时的代码变更内容时,可同步发送所述代码诊断指令。又如,编辑器前端可定时向编辑器服务端发送所述代码诊断指令,或者,编辑器前端可在检测到代码编辑界面停止输入代码预设时间(例如1秒)后,向编辑器服务端发送所述代码诊断指令,或者,编辑器前端可受用户操作触发,向编辑器服务端发送所述代码诊断指令。
在另一些实施例中,编辑器服务端可自动的生成所述代码诊断指令,并响应和处理所述代码诊断指令。例如,编辑器服务端可在检测到代码编辑界面停止输入代码预设时间后,自动生成所述代码诊断指令。编辑服务端基于编辑器前端实时发送的代码变更内容,可自动检测代码编辑界面是否停止输入代码,以及停止输入代码的持续时间。
在本申请的一些实施例中,编辑器服务端可调用底层的诊断引擎,来支持对代码文档进行多种诊断类型的代码诊断。例如,编辑器服务端可设置不同诊断类型的诊断引擎,并通过调用不同诊断类型的诊断引擎,来分别对代码文档进行诊断。该不同诊断类型的诊断引擎例如执行语法诊断的诊断引擎,执行可执行性诊断的诊断引擎,执行权限诊断的诊断引擎、执行性能诊断的诊断引擎等。
在一些实施例中,由于底层的诊断引擎是以代码语句为对象进行诊断,例如底层引擎的调用参数是针对一个代码语句。因此编辑器服务端可确定代码文档中的代码语句,以通过调用不同诊断类型的诊断引擎,来分别对各代码语句进行诊断。基于此,如果所述代码文档中存在多条代码语句,则编辑器服务端可将所述代码文档拆分为多条代码语句,然后通过调用不同诊断类型的诊断引擎,来分别对各代码语句进行诊断,得到各代码语句在各诊断类型对应的诊断结果。进而,针对任一诊断类型,编辑器服务端可汇总各代码语句在该诊断类型对应的诊断结果,得到代码文档在该诊断类型对应的诊断结果。
在一个示例中,代码语句可以是SQL语句。以语法诊断为例,图2b示例代码文档的语法诊断示例。如图2b所示,编辑器服务器可将代码文档拆分为多个SQL语句,并分别对各SQL语句执行语法诊断,然后汇总各SQL语句的语法诊断的结果,得到代码文档在语法诊断对应的诊断结果。可执行性诊断、权限诊断、性能诊断的诊断可以图2b示例方式进行,从而可得到代码文档分别在可执行性诊断、权限诊断、性能诊断对应的诊断结果。
在一些实施例中,编辑器服务端可预先配置所述至少一种诊断类型中优先执行的诊断类型,从而先基于该优先执行的诊断类型,对代码文档进行代码诊断,然后再对代码文档执行其他诊断类型的代码诊断。例如,编辑器服务端可预先配置语法诊断为优先执行的诊断类型,从而先对代码文档执行语法诊断,再对代码文档执行可执行性诊断、权限诊断和性能诊断,从而得到代码文档在各诊断类型对应的诊断结果。在一些实施例中,编辑器服务端也可配置各诊断类型并行执行,从而编辑器服务端可对所述代码文档的各代码语句,并行执行各种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果。
在一些实施例中,编辑器服务端也可基于用户历史习惯,设置优先执行的诊断类型。例如,编辑器服务端可基于用户历史的代码诊断数据,分析用户出错概率较高的诊断类型,从而设置用户出错概率较高的诊断类型为优先执行的诊断类型。
在另一些实施例中,用户也可自主选择执行代码诊断的诊断类型,和/或优先执行的诊断类型。例如编辑器服务端可提供权限管理页面,以便编辑器前端进行展示,从而用户可在该权限管理页面,选择执行代码诊断的诊断类型和/或优先执行的诊断类型,进而编辑器服务端可获取编辑器前端反馈的用户在权限管理页面选择的执行诊断的诊断类型,和/或,优先执行的诊断类型,实现相应的配置。
当然,优先执行的诊断类型并不限于语法诊断,而是可根据具体的业务需求进行配置,本申请实施例对于优先执行的诊断类型并不设限。
在步骤S216中,编辑器服务端将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端。
在步骤S217中,编辑器前端展示所述代码文档在各诊断类型对应的诊断结果。
编辑器服务器端在得到所述代码文档在各诊断类型对应的诊断结果后,可将所述代码文档在各诊断类型对应的诊断结果返回给编辑器前端,以便编辑器前端进行展示。在一些实施例中,代码文档在一种诊断类型对应的诊断结果可以包括:代码文档的代码语句(例如SQL语句)在该种诊断类型对应的错误描述。在进一步的一些实施例中,如果代码的错误需要用户进行修改,则代码文档在一种诊断类型对应的诊断结果可以包括:代码文档的代码语句在该种诊断类型对应的错误描述以及修改建议。
在一些实施例中,编辑器前端可展示代码文档的代码语句在各种诊断类型对应的错误描述以及修改建议,例如,代码文档中的SQL语句在语法诊断对应的错误描述以及修改建议,和/或,代码文档中的SQL语句在可执行性诊断对应的错误描述以及修改建议,和/或,代码文档中的SQL语句在权限诊断对应的错误描述以及修改建议,和/或,代码文档中的SQL语句在性能诊断对应的错误描述以及修改建议。
本申请实施例提供的代码诊断方法中,编辑器服务端可确定代码编辑界面当前输入的代码文档,并响应于代码诊断指令,对所述代码文档执行至少一种诊断类型的代码诊断。由于代码诊断是针对代码文档中的代码语句进行,因此编辑器服务端可确定所述代码文档的代码语句,从而对所述代码文档的各代码语句分别执行至少一种诊断类型的代码诊断,得到代码文档在各诊断类型对应的诊断结果;其中,所述代码文档在一种诊断类型对应的诊断结果,由所述代码文档的各代码语句在该种诊断类型对应的诊断结果汇总得到。进而,编辑器服务端可将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端。编辑器前端可展示所述代码文档在各诊断类型对应的诊断结果,以提示用户编辑的代码中存在的错误和/或修改建议。本申请实施例提供的代码编辑方法,可在用户在代码编辑界面编辑代码的过程中,由编辑器服务端对代码文档进行执行一种诊断类型的代码诊断,并将诊断结果反馈给编辑器前端,从而编辑器前端可展示代码文档在各诊断类型对应的诊断结果,以提示用户编辑的代码在各诊断类型所存在的错误。可见,本申请实施例提供的方案能够支持对代码进行多种诊断类型的代码诊断,并可在用户编辑代码的过程中,及时的提供各种诊断类型对应的诊断结果,便于用户修改代码编辑过程中出现的错误。
编辑器服务端可支持对代码文档进行语法诊断、可执行性诊断、权限诊断、性能诊断(性能诊断例如UDF诊断、数据倾斜诊断等)。例如,编辑器服务端对代码文档执行的至少一种诊断类型的代码诊断可以包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断(性能诊断例如UDF诊断、数据倾斜诊断等)。
在一些实施例中,编辑器服务端可预先配置所述至少一种诊断类型中优先执行的诊断类型。编辑器服务端可基于该优先执行的诊断类型,先对所述代码文档的各代码语句执行代码诊断,再对所述代码文档的各代码语句执行其他诊断类型的代码诊断,从而得到所述代码文档在各诊断类型对应的诊断结果。其中,所述其他诊断类型不同于所述优先执行的诊断类型。例如,所述优先执行的诊断类型可以是语法诊断,所述其他诊断类型可以是可执行性诊断、权限诊断、性能诊断等。
在一些实施例中,编辑器服务端可首先对代码文档进行语法诊断,如果语法诊断存在语法错误,则不进行后续其他诊断类型的代码诊断,如果语法诊断不存在语法错误,则才进行后续其他诊断类型的代码诊断。图3示出了对代码文档进行多种类型的代码诊断的方法流程图。图3所示流程可以是通过对代码文档中的各代码语句进行诊断来实现。图3所示流程可由编辑器服务端执行,如图3所示,该流程可以包括如下步骤。
在步骤S311中,对代码文档中的各代码语句执行语法诊断,得到代码文档的语法诊断结果。
在本申请实施例中,语法诊断主要是检查代码文档中的语法错误,并为用户给出修改建议,从而解决因语法错误而无法运行代码文档的问题。
在一些实施例中,编辑器服务端可基于Antlr的语法诊断引擎,对代码文档中的各代码语句进行语法诊断。例如,编辑器服务端可基于Antlr的语法诊断引擎,对所述代码文档的各代码语句分别执行语法诊断,得到所述代码文档的各代码语句的语法诊断结果;从而各代码语句的语法诊断结果,汇总得到代码文档的语法诊断结果。需要说明的是,ANTLR是可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器。
在步骤S312中,基于所述语法诊断结果,判断代码文档中的代码语句是否存在语法错误,若是,执行步骤S313,若否,执行步骤S314。
如果代码文档中的代码语句存在语法错误,则说明用户在编辑代码的过程中存在使用错误语法或者用语不准确等基本错误。这些语法错误将导致代码文档衍生出其他类型的错误,而用户在修正代码文档中的语法错误后,代码文档衍生的其他类型的错误可能也会消除。因此编辑器服务端在诊断代码文档中的代码语句存在语法错误时,不进行后续其他类型的代码诊断,而是进入步骤S313,将代码文档的语法诊断结果反馈给编辑器前端进行展示。
如果代码文档中的代码语句不存在语法错误,则编辑器服务端继续进行后续其他诊断类型的代码诊断,此时进入步骤S314进行后续处理。
在步骤S313中,向编辑器前端发送代码文档的语法诊断结果,以便编辑器前端展示该语法诊断结果。
此时,编辑器服务端推送给编辑器前端的代码文档在各类型的代码诊断对应的诊断结果,仅包含代码文档的语法诊断结果。该语法诊断结果可以包括代码文档的代码语句的语法错误和语法修改建议,以便编辑器前端在代码编辑界面进行相应展示。
在步骤S314中,判断底层引擎是否支持可执行性诊断的能力,若是,执行步骤S315,若否,执行步骤S316。
在本申请的一些实施例中,当代码文档中的代码语句存在语法错误时,编辑器服务端可继续对代码文档执行可执行性诊断;此时,编辑器服务端可判断底层引擎是否支持可执行性诊断的能力,例如编辑器服务端是否设置有支持可执行性诊断的诊断引擎,若是,则编辑器服务端进入步骤S315进行可执行性诊断,若否,则编辑器服务端进行诊断类型的降级,进入步骤S316对代码文档进行权限诊断。
在步骤S315中,对代码文档中的各代码语句执行可执行性诊断的预处理逻辑,得到代码文档的可执行性诊断结果。
在本申请实施例中,可执行性诊断是在代码文档(例如SQL脚本)运行前,先检查执行计划是否能通过,如果不能,则提供报错提示,以便用户修改后即可直接成功运行代码文档。
在本申请的一些实施例中,编辑器服务端可通过可执行性诊断的预处理逻辑,来得到代码文档的可执行性诊断结果,而并不真正调度执行代码文档。在一些实施例中,数据库引擎(比如odps,mysql等)在执行提交的代码文档之前都会进行预处理,如果预处理失败则说明对应的代码文档存在问题(比如代码文档中的表、列不存在,或者用户没有权限等问题),通过捕获预处理失败原因,编辑器服务端可以得出代码文档在可执行性诊断中存在的问题,得到代码文档的可执行性诊断结果,以避免真正调度执行代码文档中的代码语句而造成的副作用。
在一些实施例中,编辑器服务端可对代码文档中的各代码语句均执行可执行性诊断的预处理逻辑,得到所述代码文档的各代码语句的可执行性诊断结果;从而各代码语句的可执行性诊断结果,汇总得到代码文档的可执行性诊断结果。
在步骤S316中,对代码文档中的各代码语句执行权限诊断,得到代码文档的权限诊断结果。
在本申请实施例中,权限诊断是指对代码文档中没权限的表给出提示,并提供申请权限的地址,以在代码文档中的表没有权限时,提供一键申请权限的方式。
在本公开的一些实施例中,编辑器服务端可基于Antlr和元数据,实现对代码文档进行权限诊断。例如,编辑器服务端可设置权限诊断引擎,该权限诊断引擎可基于Antlr和元数据,实现检测代码文档中的表是否具有权限,并提供相应的权限诊断结果。
在一些实施例中,编辑器服务端可对代码文档中的各代码语句均执行可执行权限诊断,得到所述代码文档的各代码语句的权限诊断结果;从而各代码语句的权限诊断结果,汇总得到代码文档的权限诊断结果。
需要说明的是,元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。表是数据库中用来存储数据的对象,是有结构的数据的集合,是数据库的基本元素。
在步骤S317中,对代码文档中的各代码语句执行性能诊断,得到代码文档的性能诊断结果。
在对代码文档执行可执行性诊断(底层的诊断引擎支持可执行性诊断的情况下),或者,对代码文档执行权限诊断(底层的诊断引擎支持不可执行性诊断的情况下)之后,编辑器服务端可对代码文档执行性能诊断,例如对代码文档执行UDF(User DefinedFunction,用户自定义函数)诊断和数据倾斜诊断。
在本申请实施例中,性能诊断是指对代码文档的性能进行检查,如果检查到存在问题,则提供性能优化建议,从而用户优化后,可加快代码文档的运行速度。
在一些实施例中,性能诊断可以包括UDF诊断和数据倾斜诊断。其中,UDF是代码文档中用户的自定义函数,例如SQL语言提供了很多内建函数来满足用户的计算需求,但同时用户还可以通过创建自定义函数来满足不同的计算需求;UDF诊断可以认为是对代码文档中的UDF函数的性能进行检查诊断。数据倾斜是指有少数实例处理的数据量远远超过其他实例处理的数据量,从而导致少数实例的运行时长远远超过其他实例的平均运行时长,进而导致整个代码文档的运行时间变长,造成任务延迟;数据倾斜诊断可以认为是针对代码文档中是否存在上述数据倾斜的情况。当然,UDF诊断和数据倾斜诊断仅是性能诊断的可选形式,本申请实施例也可支持其他形式的性能诊断。
在一些实施例中,编辑器服务端可对代码文档中的各代码语句均执行性能诊断,得到所述代码文档的各代码语句的性能诊断结果;从而各代码语句的性能诊断结果,汇总得到代码文档的性能诊断结果。例如,编辑器服务端可对代码文档中的各代码语句均执行UDF诊断,得到所述代码文档的各代码语句的UDF诊断结果,从而各代码语句的UDF诊断结果,汇总得到代码文档的UDF诊断结果。编辑器服务端可对代码文档中的各代码语句均执行数据倾斜诊断,得到所述代码文档的各代码语句的数据倾斜诊断结果,从而各代码语句的数据倾斜诊断结果,汇总得到代码文档的数据倾斜诊断结果。
在步骤S318中,汇总代码文档在各诊断类型对应的诊断结果,并发送给编辑器前端。
基于编辑器服务端对代码文档进行的多种诊断类型的代码诊断,编辑器服务端可汇总代码文档在各诊断类型对应的诊断结果,并发送给编辑器前端,以便编辑器前端进行展示。在一些实施例中,代码文档在各诊断类型对应的诊断结果可以包括:可执行诊断结果以及性能诊断结果,或者,权限诊断结果和性能诊断结果。
需要说明的是,图3所示的执行代码诊断使用的诊断类型仅是可选的,同时,图3所示的诊断类型的执行顺序也是可选的。在一些实施例中,本申请实施例也可支持对代码文档并行执行多种诊断类型的代码诊断。例如编辑器服务端可对代码文档并行执行语法诊断、可执行性诊断、权限诊断、性能诊断,从而汇总得到代码文档分别在语法诊断、可执行性诊断、权限诊断、性能诊断对应的诊断结果。
本申请实施例可支持由编辑器服务端对用户编辑的代码文档,进行多种诊断类型的代码诊断,从而向编辑器前端反馈代码文档在各种诊断类型对应的诊断结果,可使得编辑器前端支持展示代码文档在各种诊断类型对应的诊断结果,更加便于用户修改代码编辑过程中出现的各种类型错误。
在一些实施例中,图4a示例了执行可执行性诊断的方法流程图。该流程可通过执行性诊断的预处理逻辑,得出代码文档的可执行性诊断结果。图4a所示流程可由编辑器服务端执行,参照图4a,该流程可以包括如下步骤。
在步骤S411中,为代码文档的各代码语句设置预处理参数。
在步骤S412中,将设置预处理参数的各代码语句,分别提交给可执行性诊断引擎,使得可执行性诊断引擎对各代码语句执行可执行性诊断的预处理逻辑。
在一些实施例中,可执行性诊断引擎可以是数据库引擎(比如odps,mysql等)。这些引擎可通过设置提交参数,来使得引擎只对代码文档进行可执行性诊断的预处理,而不真正调度执行代码文档。因此编辑器服务端可为代码文档中的各代码语句设置预处理参数,从而在向可执行性诊断引擎提交各代码语句时,携带上所设置的预处理参数,使得可执行性诊断引擎只对各代码语句进行预处理,而不真正调度执行各代码语句。
在步骤S413中,获取可执行性诊断引擎输出的代码语句的预处理失败信息,汇总各代码语句的预处理失败信息,得到所述代码文档的可执行性诊断结果。
在代码语句中的表、列不存在,代码语句没有用户权限等情况下,预处理逻辑可输出代码语句的预处理失败信息(该预处理失败信息可以表达预处理失败的原因),从而代码语句的预处理失败信息可以作为代码语句的可执行性诊断结果,进而,汇总各代码语句的预处理失败信息,可得到代码文档的可执行性诊断结果。如果预处理逻辑没有输出代码语句的预处理失败信息,则说明代码文档没有可执行性问题,可得到没有问题的可执行性诊断结果(例如内容为空的可执行性诊断结果)。
本申请实施例可通过可执行诊断的预处理逻辑,来实现对代码文档的各代码语句进行预处理,得到代码文档的可执行性诊断结果,而不必对代码文档真正进行调度执行,可避免真正调度执行代码文档中的代码语句而造成的副作用。
在一些实施例中,图4b示例了权限诊断的方法流程图。图4b所示流程可由编辑器服务端调用权限诊断引擎实现。参照图4b,该流程可以包括如下步骤。
在步骤S421中,解析代码语句,确定代码语句中用户操作的操作数据。
在一些实施例中,可基于Antlr解析代码语句,确定代码语句中的用户操作。Antlr是一款开源并且强大的语法生成器工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。通过提供语法配置文件,Antlr可以从代码语句中解析出用户操作,确定出代码语句中用户进行操作的操作数据,也可以基于Antlr语法配置,诊断出代码语句中的语法错误。
在步骤S422中,结合所述操作数据以及代码语句中的元数据,确定所述代码语句中用户的目标操作数据。
在本申请实施例中,单纯通过Antlr并不能对代码语句进行权限诊断,主要原因在于现代数据库会从更细的列粒度而不是表粒度对用户权限进行控制。当代码语句比较复杂的时候(比如涉及多个join,select嵌套等场景时),基于Antlr解析不能精准判断用户需要操作的列数据。由于无法准确判断用户需要操作的列数据,这会导致检测用户是否具有操作列数据的权限的诊断结果出现偏差,从而不适于对代码语句进行权限诊断。因此,在本申请实施例中,还需结合代码语句中的元数据,来确定代码语句中用户真实意图操作的目标操作数据。该目标操作数据可以包括用户的操作动作,操作动作涉及的表数据,以及操作动作涉及的列数据。
在步骤S423中,根据用户账号信息,确定用户是否具有所述目标操作数据的权限,得出代码语句的权限诊断结果;其中,代码文档中各代码语句的权限诊断结果,汇总得到代码文档的权限诊断结果。
在确定代码语句中用户真实意图操作的目标操作数据后,编辑器服务端可基于用户的用户账号信息,判断用户是否具有对目标操作数据进行操作的权限,从而基于判断结果,得出代码语句的权限诊断结果。在一些实施例中,用户账号信息可以表达用户的操作权限,比如用户具有操作权限的操作动作、表、列等。
代码文档中的各代码语句基于图4b所示流程,得到权限诊断结果后,各代码语句的权限诊断结果可汇总得到代码文档的权限诊断结果。
在一些实施例中,图4c示出了确定目标操作数据的方法流程图。该方法流程可结合解析代码语句所确定的操作数据,以及代码语句中的元数据,来确定用户真实意图操作的目标操作数据。如图4c所示,该流程可以包括如下步骤。
在步骤S431中,当解析得到的所述操作数据中存在列数据时,将该列数据作为候选列数据,从代码语句中的上下文中查找所述候选列数据对应的表数据。
在一些实施例中,本申请实施例可将Antlr的语法文件配置中的select(选择)、update(更新)、insert(嵌入)等动作,与代码语句中的上下文相对应。例如将代码语句中涉及上述动作的内容确定为代码语句的上下文。
当基于Antlr解析代码语句,确定出代码语句中的用户操作数据后,如果用户操作数据中存在列数据(例如,基于Antlr解析代码语句,解析出列数据),则本申请实施例可从代码语句中的上下文中,查找与该列数据对应的表数据。由于该列数据是通过解析代码语句得到,因此准确性存在一定的偏差,即该列数据是用户的操作动作可能涉及的列,并不一定是用户操作动作真实涉及的列,因此本申请实施例称该列数据为候选列数据。
基于步骤S431,本申请实施例可得到用户在代码语句中涉及的操作动作、操作动作涉及的表、操作动作可能涉及的列。
在步骤S432中,基于所述操作数据中的表数据对应的列数据,以及所述候选列数据和查找到的对应表数据,判断所述候选列数据是否为用户真实操作的列数据;基于判断结果,确定用户真实操作的列数据,结合所述用户真实操作的列数据,以及所述操作数据中的用户的操作动作和操作动作涉及的表数据,得出所述目标操作数据。
由于步骤S431中解析得到的候选列数据存在一定的偏差,因此在解析得到的操作数据已表达用户的操作动作,操作动作涉及的表数据的情况下,针对所述操作数据中用户对应每一个表的操作动作,本申请实施例需要进一步查询用户操作动作涉及的表和表中的列,与用户操作动作可能涉及的列以及该列在上下文中查找到的对应表,是否相一致。在可选实现中,本申请实施例可基于所述操作数据中的表数据对应的列数据,以及所述候选列数据和查找到的对应表数据,判断所述候选列数据是否为用户真实操作的列数据。例如,所述操作数据中操作动作涉及的表和该表中的列,是否与候选列数据以及候选列数据查找到的对应表相一致。也就是说,所述操作数据中表达的用户操作的表和表中的列的对应关系,与解析得到的用户操作可能涉及的列和该可能涉及的列在上下文中查找到的表的对应关系,是否相一致。若一致,则说明所述候选列数据为用户真实操作的列数据,若不一致,则说明所述候选列数据不为用户真实操作的列数据。
基于上述判断结果,本申请实施例可确定出候选列数据是否为用户真实操作的列数据,从而在候选列数据为用户真实操作的列数据时,对于用户在代码语句中表达的每一个操作动作,本申请实施例可确定用户操作动作,用户操作动作对应的表数据,和用户操作动作对应的列数据,形成代码语句的目标操作数据。进而,基于代码语句的目标操作数据,在步骤S423中实现对代码语句进行更精准的权限判断。
在本申请实现权限诊断的一些实施例中,编辑器服务端可将多次权限诊断合并成一次执行,而不是在编辑器服务端每次检测到代码诊断指令时,均进行权限诊断。例如,用户在代码编辑界面每次修改代码时,编辑器服务端每次都会触发代码更新事件,从而重新确定代码编辑界面实时输入的代码文档,此时,编辑器服务端可将权限诊断请求的调用加入单线程执行器,延迟特定时间再执行;如果这个特定时间内用户再对代码进行修改,则放弃执行权限诊断,直到用户在特定时间内没有对代码进行修改时,才基于此时对应的代码文档进行权限诊断。也就是说,如果编辑服务端检测到用户在特定时间内没有修改代码,才对当前代码编辑界面输入的代码文档进行权限诊断,而不是用户修改一次代码则进行一次权限诊断。如此设置,可使得编辑器服务端将权限诊断压缩到比较低的调用频率而且基本不影响用户使用体验。
在实现UDF诊断的一些实施例中,编辑器服务端可预置多个内置函数,一个内置函数可实现至少一种功能。从而编辑器服务端在调用UDF诊断引擎实现对代码语句进行UDF诊断时,编辑器服务端可确定代码语句中的UDF函数以及UDF函数实现的功能,进而分析预置的多个内置函数中是否有实现相同功能的目标内置函数,若有,以实现相同功能的目标内置函数替换代码语句中的UDF函数,以实现对代码语句进行UDF诊断并输出UDF诊断结果。该UDF诊断结果可以表达代码语句中替换后的目标内置函数以及其功能。在一个示例中,用户一般是使用bi_udf 下面的java udf方法来实现各种功能的UDF函数,然而由于一些函数数据的缺失,可能会导致bi_udf 下面以java udf方法实现的UDF函数的性能存在缺陷,因此本申请实施例可在bi_udf预先设置实现不同功能的内置函数,该内置函数的性能优于 bi_udf 下面以java udf方法实现的UDF函数。从而,编辑器服务端可在获取代码文档后,通过bi_udf的Java源码,确定代码文档中代码语句的UDF函数实现的功能,然后判断是否有实现相同功能的内置函数,如果有实现相同功能的内置函数,则该实现相同功能的内置函数可作为目标内置函数,替换代码语句中的UDF函数,以提升代码语句的性能。
在实现数据倾斜诊断的一些实施例中,编辑器服务端可对历史代码语句进行分析,确定存在数据倾斜的代码语句对应的代码节点和代码特征,从而在对代码语句进行数据倾斜诊断时,编辑器服务端可确定代码语句的代码节点和代码特征,判断代码语句的代码节点和代码特征是否与预先分析的存在数据倾斜的代码节点和代码特征相匹配,若是,则将代码语句中与所述数据倾斜的代码节点和代码特征相应的代码数据,确定为存在数据倾斜,得出代码语句的数据倾斜诊断结果,若否,则确定该代码语句不存在数据倾斜。
在一些实施例中,编辑器服务端可在历史文档数据库中存储历史代码文档,并定位到历史代码文档中具有数据倾斜的历史代码语句,分析该历史代码语句中存在数据倾斜的代码节点和代码特征。例如编辑器服务端可扫描历史文档数据库中的历史代码文档,找到有数据倾斜的历史代码语句,分析该历史代码语句的代码节点和代码特征。
基于具有数据倾斜的历史代码语句的代码节点和代码特征,本申请实施例可定义数据倾斜的判断规则,例如判断规则:max_rowcount>n * avg_rowcount&&max_latency>n*avg_rowcount。n例如5,n的具体数值可根据实际情况定义。本申请实施例在对代码语句进行数据倾斜诊断时,可确定代码语句中的多个输入StreamLineRead节点以及对应的Inputtable/column,从而通过判断规则,可判断哪个streamLineRead节点存在数据倾斜,然后输出对应的Inputtable/column,得出代码语句中具有数据倾斜情况的代码数据。
在本申请的一些实施例中,针对任一诊断类型(不限于语法诊断、可执行性诊断、权限诊断、性能诊断等),如果编辑器服务端缓存有与当前的代码文档相同的诊断结果,则编辑器服务端可直接获取缓存的代码文档在该诊断类型对应的诊断结果,而不调用诊断引擎再具体执行诊断过程。也就是说,编辑器服务端可缓存历史代码文档在至少一种诊断类型的诊断结果,如果当前的代码文档与缓存诊断结果的历史文档相同,则编辑器服务端可直接获取缓存的该代码文档的诊断结果并返回给编辑器前端,从而提升代码诊断效率。
在本申请进一步的一些实施例中,如果编辑器服务端诊断代码文档在各种诊断类型对应的诊断结果均不存在错误,则编辑器服务端可反馈内容为空的诊断结果,以提示编辑器前端当前编辑的代码不存在错误。
本申请实施例可支持对代码文档进行多种诊断类型的代码诊断,从而在用户编辑代码的过程中,能够及时获取到代码文档在各种诊断类型对应的诊断结果,便于用户及时修正代码编辑过程中存在的各种类型的错误。
下面从编辑器前端的角度,对本申请实施例提供的代码编辑方案进行介绍。
图5a示出了编辑器前端实现代码诊断的流程图。参照图5a,该流程可以包括如下步骤。
在步骤S511中,展示代码编辑界面。
在步骤S512中,将代码编辑界面实时的代码变更内容,发送给编辑器服务端。
需要说明的是,步骤S511和步骤S512仅是编辑器前端使得编辑器服务端获取到代码编辑界面当前输入的代码文档的可选方式。编辑器前端也可直接将代码编辑界面当前输入的代码文档发送给编辑器服务端。可以理解的是,代码编辑界面展示有当前输入的代码文档,并且所述代码文档包括代码语句。
在步骤S513中,接收编辑器服务端发送的诊断结果。
在一些实施例中,编辑器前端可事先注册诊断监听事件,以监听编辑器服务端通过websocket等方式传输的诊断结果。
编辑器服务端对代码文档进行代码诊断的时机,以及实现各种诊断类型的代码诊断的方式,可参照前文相应部分的描述,此处不再赘述。
在步骤S514中,判断诊断结果是否为空,若是,执行步骤S515,若否,执行步骤S516。
在步骤S515中,清空代码编辑界面展示的代码文档历史的错误提示。
编辑器服务端反馈的诊断结果为空,则说明代码编辑界面当前的代码文档不存在错误,编辑器前端可将代码编辑界面原本的错误提示进行清空,以提示用户当前编辑的代码不存在错误。
在步骤S516中,若所述诊断结果包括代码编辑界面的代码语句在至少一种诊断类型对应的诊断结果,根据所述诊断结果,确定代码编辑界面中存在错误的目标代码语句以及目标代码语句存在错误的诊断类型。
编辑器服务端反馈的诊断结果不为空,则在编辑器服务端支持对代码文档,进行多种诊断类型的诊断的情况下,编辑器服务端反馈的诊断结果可以包括代码编辑界面的代码语句在至少一种诊断类型对应的诊断结果。从而,编辑器前端基于编辑器服务端反馈的诊断结果,可确定代码编辑界面中存在错误的目标代码语句,以及该目标代码语句存在错误的诊断类型。
在一些实施例中,所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断。例如,编辑器前端可确定代码编辑界面中存在语法错误的目标代码语句,存在权限诊断错误的目标代码语句,存在可执行性诊断错误的目标代码语句,存在性能诊断错误的目标代码语句等。
在步骤S517中,在代码编辑界面以不同的提示方式,展示目标代码语句在不同诊断类型对应的错误提示,并将目标代码语句在一种诊断类型对应的错误提示,与目标代码语句在该种诊断类型对应的诊断结果进行关联。
编辑器前端在确定代码编辑界面中存在错误的目标代码语句,以及目标代码语句存在错误的诊断类型后,可对代码编辑界面中存在错误的目标代码语句进行错误提示。具体的,编辑器前端可在代码编辑界面以不同的提示方式,提示目标代码语句在不同诊断类型对应的错误提示。在一些实施例中,代码编辑界面中出现错误的代码语句可通过下划线等提示方式进行错误提示,并且代码语句在不同诊断类型的错误提示,以不同颜色的下划线进行区分。例如,代码语句的权限诊断错误、可执行性诊断错误可通过红色下划线的错误提示来提示用户,代码语句的性能诊断问题,可通过绿色下划线的错误提示来提示用户。当然,此处说明的具体颜色和下划线的提示方式仅是一种示例。图5b示出了以下划线方式在代码编辑界面提示存在错误的目标代码语句的示意图,可进行参照。
在步骤S518中,响应于代码编辑界面中具有错误提示的目标代码语句的用户操作,展示与该错误提示关联的诊断结果。
代码语句在一种诊断类型对应的诊断结果可以包括:代码语句在该种诊断类型对应的错误说明和修改建议。在一些实施例中,当用户将光标放置到具有错误提示的目标代码语句时,可视为用户对具有错误提示的目标代码语句进行了用户操作,编辑器服务端可通过弹窗等展示方式,展示目标代码语句在该错误提示关联的诊断结果,从而展示出目标代码语句在该错误提示的诊断类型对应的具体错误描述和修改建议。图5c示出了代码编辑界面展示具体诊断结果的示意图,可进行参照。如图5c所示,当用户将光标放置到具有权限诊断错误提示的目标代码语句时,代码编辑界面可通过弹窗等弹层方式,展示出该目标代码语句在权限诊断错误提示关联的诊断结果,即展示出该目标代码语句在权限诊断层面的具体错误描述和修改建议。当然,用户将光标放置在具有错误提示的目标代码语句,仅是上述所述的展示与错误提示关联的诊断结果的用户操作的可选方式,本申请实施例也可支持其他形式的用户操作。
在本申请实施例中,编辑器前端针对代码语句不同诊断类型的错误,可在代码编辑界面通过不同提示方式(例如不同颜色的下划线等)进行错误提示,并将错误提示与代码语句在相应诊断类型的诊断结果进行关联,从而在用户操作具有错误提示的代码语句时,展示关联的诊断结果,可实现编辑器前端在代码编辑界面展示代码语句在不同诊断类型的错误提示,以及具体的诊断结果。
在本申请进一步的一些实施例中,编辑器前端还可提供辅助面板,以展示代码编辑界面中存在错误的目标代码语句在各种诊断类型对应的具体诊断结果。在一些实施例中,该辅助面板默认在代码编辑界面为收起状态,收起状态的辅助面板可展示代码编辑界面的代码文档存在的错误数量,而不展示具体的目标代码语句在各种诊断类型对应的具体诊断结果。图6a示出了收起状态的辅助面板。如图6a所示,收起状态的辅助面板可位于代码编辑界面的右侧(辅助面板的具体位置可根据实际情况设置,本申请实施例并不设限),且收起状态的辅助面板只展示代码文档存在的错误数量。
辅助面板可受用户的操作在代码编辑界面中展开展示,例如,编辑器服务端可响应于辅助面板的展开展示指令,将辅助面板进行展开展示。在本申请实施例中,辅助面板可具体展示代码编辑界面中存在错误的目标代码语句在各种诊断类型对应的诊断结果。
在一些实施例中,当用户第一次打开辅助面板,或者刷新辅助面板的数据时,编辑器前端也可向编辑器服务端发送代码诊断指令,从而编辑器服务端可对代码编辑界面当前的代码文档进行至少一种诊断类型的诊断,并向编辑器前端返回诊断结果。编辑器前端可基于诊断结果,在辅助面板展示代码文档的代码语句在各种诊断类型对应的诊断结果。
在一些实施例中,辅助面板可根据目标代码语句在代码编辑界面的编辑顺序,依序展示各目标代码语句在各种诊断类型对应的具体诊断结果。例如,辅助面板可具有与存在错误的目标代码语句的数量相应的展示区,一个展示区可展示一个存在错误的目标代码语句在各种诊断类型对应的具体诊断结果,并且各展示区在辅助面板的展示顺序,与目标代码语句在代码编辑界面的编辑顺序一致。在一个示例中,图6b示出了展开展示状态的辅助面板的示意图。如图6b所示,图6b中的一个方框区域为辅助面板的一个展示区,第一个展示区可与代码编辑界面中存在错误的第一条目标代码语句相对应,用于展示该第一条目标代码语句在各种诊断类型对应的具体诊断结果,包括该第一条目标代码语句的权限诊断结果,数据倾斜针对结果,UDF函数诊断结果等。图6b中辅助面板的第二个展示区可与代码编辑界面中存在错误的第二条目标代码语句相对应,用于展示代码编辑界面中存在错误的第二条目标代码语句在各种诊断类型对应的具体诊断结果。
在一些实施例中,辅助面板的一个展示区展示的目标代码语句的诊断结果可依据诊断类型进行分类展示。例如辅助面板的一个展示区可针对一条目标代码语句,分类展示权限诊断、数据倾斜诊断、UDF函数诊断、以及可执行性诊断等诊断类型的诊断结果。
在一些实施例中,辅助面板可通过不同的提示方式,来提示所展示的不同诊断类型的诊断结果。结合图6b所示,辅助面板可通过不同的图标(如图6b中不同的前置图标),提示所展示的不同诊断类型的诊断结果。例如目标代码语句在权限或可执行性诊断的诊断结果,可以用红色图标进行标识,数据倾斜、UFF函数等性能诊断的诊断结果可采用黄色图标进行标识。
在进一步的一些实施例中,辅助面板可以被设置为具有默认宽度,也可被设置为具有最大、最小宽度限制,诊断结果的展示宽度超过默认宽度,辅助面板可对诊断结果进行缩略显示。例如,辅助面板在展示一条目标代码语句在某一诊断类型的诊断结果时,如果该诊断结果的展示宽度超过辅助面板的默认宽度,则该诊断结果超过默认宽度的内容可进行缩略显示(图6b同时示出了缩略显示的示意,可结合参照),并且在用户将光标放置到该诊断结果时,辅助面板可通过弹窗等弹层方式展示该诊断结果的全部内容。通过这样的展示设置,用户可通过辅助面板查看到整个代码文档存在的错误,也可聚焦到某一代码语句的具体错误。
在本申请的一些实施例中,目标代码语句在某一诊断类型的诊断结果可提供具体的修改建议,以方便用户对目标代码语句进行修正,从而解决目标代码语句在该诊断类型存在的错误。例如,如果目标代码语句存在权限诊断错误,则辅助面板在展示该目标代码语句的权限诊断结果时,可展示权限诊断错误的修改建议。在一种示例中,结合图6b所示,权限诊断结果可以设置一键申请权限的图标,用户可以点击该图标,跳转到申请权限的地址,直接申请权限。在另一种示例中,结合图6b所示,数据倾斜诊断结果可设置学习hint使用的图标,用户点击该图标,可跳转到学习使用 hint的学习地址,帮助用户掌握数据倾斜的优化技巧,减少后续代码编辑过程中出现数据倾斜问题。
在本申请的一些实施例中,由于辅助面板的展示宽度和高度有限,当一条目标代码语句在一个诊断类型的诊断结果的条数超过设定条数,则辅助面板可折叠隐藏目标代码语句在该诊断类型的诊断结果,仅展示目标代码语句在该诊断类型对应的展开展示图标,当用户点击该展开展示图标时,辅助面板可展开该折叠隐藏的诊断结果。
在本申请的一些实施例中,编辑器前端可将辅助面板展示的诊断结果,与代码编辑界面中该诊断结果对应的目标代码语句进行关联。在可选实现中,用户在辅助面板点击某一条诊断结果时,编辑器前端可解析到被点击的诊断结果对应的目标代码语句在代码编辑界面对应的位置,然后将编辑器的光标位置设置为与解析到的位置相匹配,并对解析到的位置的目标代码语句进行突出展示。
结合图6c所示目标代码语句的突出展示示意图。在一个示例中,编辑器前端可将编辑器的光标位置设置为与解析到的位置相匹配;同时将代码编辑界面中用户点击的诊断结果对应的目标代码语句,进行突出展示(例如以设定颜色进行高亮展示);同时,编辑器前端可在用户点击的诊断结果对应的目标代码语句的编辑行,设置特定提示方式(例如特定颜色的竖直方块)。可以理解的是,如果存在用户在辅助面板上一次点击诊断结果的情况,则代码编辑界面中上一次点击的诊断结果对应的目标代码语句的突出展示需进行清除,例如将该上一次点击的诊断结果对应的目标代码语句的高亮展示,和编辑行的特定颜色的竖直方块进行清除。
本申请实施例的编辑器前端可基于编辑器服务端反馈的代码文档在至少一种诊断类型对应的诊断结果,在代码编辑界面以不同的提示方式,展示目标代码语句在不同诊断类型对应的错误提示,并将目标代码语句在一种诊断类型对应的错误提示,与目标代码语句在该种诊断类型对应的诊断结果进行关联。从而在用户操作具有错误提示的目标代码语句时,编辑器前端可展示出与该错误提示关联的诊断结果,以实现在编辑器前端展示代码文档的代码语句在各种诊断类型对应的诊断结果,实现对用户编辑的代码,支持展示多种类型的错误提示、以及具体的错误描述和修改建议。进一步的,编辑器前端通过提供辅助面板,可全面、系统的展示各目标代码语句在各种诊断类型对应的诊断结果,并且一条目标代码语句在各种诊断类型对应的诊断结果集中在辅助面板的一个展示区且分类展示。进一步的,通过将用户在辅助面板点击的诊断结果与代码编辑界面中对应的目标代码语句进行关联,可更为方便用户结合使用辅助面板,对代码编辑界面中错误的目标代码语句进行定位和修正。
在本申请实施例的一个应用示例中,编辑器可用于数据工程平台(例如DataWorks)。数据工程平台是专注于数据开发和数据治理,为企业提供数据管理能力的下一代数据产品。在数据工程平台中,编辑器在整个数据开发中占据着不可或缺的地位,从开发、调试、运行、发布,到运维,都能见到编辑器的身影,尤其是基于编辑器的SQL编辑工作。
使用本申请实施例提供的代码诊断方案,可使得用于数据工程平台的编辑器,可由编辑器服务端对编辑器前端输入的代码文档,执行至少一种诊断类型的代码诊断,并将代码文档在各种诊断类型对应的诊断结果反馈给编辑器前端进行展示。编辑器前端通过展示代码文档的代码语句在各诊断类型对应的错误提示,以及具体的诊断结果,可使得用户在编辑代码的过程中,及时发现编辑过程中代码语句存在的各种诊断类型对应的错误,并通过代码语句在各种诊断类型对应的具体诊断结果,进行及时修正,从而为用户高效准确编辑能够成功运行的代码文档提供了支撑。
本申请实施例用于数据工程平台的编辑器服务端、编辑器前端的功能可参照前文相应部分的描述,此处不再赘述。
上文描述了本申请实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本申请实施例披露、公开的实施例方案。
下面对应用于编辑器服务端的代码诊断装置进行介绍。下文描述的装置内容可以认为是编辑器服务端为实现本申请实施例提供的代码诊断方法,所需设置的功能模块。下文描述的装置内容可与上文描述内容相互参照。需要说明的是,编辑器服务端实现的代码诊断方法,与编辑器前端实现的代码诊断方法是相对应的,两者可相互参照。
图7示出了本申请实施例提供的代码诊断装置的框图。如图7所示,该装置可以包括:
代码文档确定模块711,用于确定代码编辑界面当前输入的代码文档;
代码语句确定模块712,用于响应于代码诊断指令,确定所述代码文档的代码语句;
诊断执行模块713,用于对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果;其中,所述代码文档的各代码语句在一种诊断类型对应的诊断结果,汇总得到所述代码文档在该种诊断类型对应的诊断结果;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
诊断结果发送模块714,用于将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端,以便编辑器前端展示所述代码文档在各诊断类型对应的诊断结果。
在一些实施例中,诊断执行模块713,用于对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果,包括:
根据所述至少一种诊断类型中预先配置的优先执行的诊断类型,先对所述代码文档的各代码语句执行代码诊断,再对所述代码文档的各代码语句执行其他诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果,所述其他诊断类型不同于所述优先执行的诊断类型;
或者,对所述代码文档的各代码语句,并行执行各种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果。
在一些实施例中,诊断执行模块713,用于根据所述至少一种诊断类型中预先配置的优先执行的诊断类型,先对所述代码文档的各代码语句执行代码诊断,再对所述代码文档的各代码语句执行其他诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果,包括:
对代码文档中的各代码语句执行语法诊断,得到代码文档的语法诊断结果;
基于所述语法诊断结果,若确定所述代码文档中的代码语句不存在语法错误,则判断底层引擎是否支持可执行性诊断的能力;
若支持可执行性诊断的能力,对代码文档中的各代码语句执行可执行性诊断的预处理逻辑,得到代码文档的可执行性诊断结果;
若不支持可执行性诊断的能力,对代码文档中的各代码语句执行权限诊断,得到代码文档的权限诊断结果;
以及,对代码文档中的各代码语句执行性能诊断,得到代码文档的性能诊断结果。
在一些实施例中,诊断执行模块713,用于对代码文档中的各代码语句执行可执行性诊断的预处理逻辑,得到代码文档的可执行性诊断结果包括:
为代码文档的各代码语句设置预处理参数;
将设置预处理参数的各代码语句,分别提交给可执行性诊断引擎,使得可执行性诊断引擎对各代码语句执行可执行性诊断的预处理逻辑;
获取可执行性诊断引擎输出的代码语句的预处理失败信息,汇总各代码语句的预处理失败信息,得到所述代码文档的可执行性诊断结果。
在一些实施例中,诊断执行模块713,用于对代码文档中的各代码语句执行权限诊断,得到代码文档的权限诊断结果包括:
针对代码文档中的任一代码语句,解析所述代码语句,确定所述代码语句中用户操作的操作数据;
结合所述操作数据以及所述代码语句中的元数据,确定所述代码语句中用户的目标操作数据;
根据用户账号信息,确定用户是否具有所述目标操作数据的权限,得出所述代码语句的权限诊断结果;其中,代码文档中各代码语句的权限诊断结果,汇总得到代码文档的权限诊断结果。
在一些实施例中,诊断执行模块713,用于结合所述操作数据以及所述代码语句中的元数据,确定所述代码语句中用户的目标操作数据包括:
当解析得到的所述操作数据中存在列数据时,将该列数据作为候选列数据,从代码语句中的上下文中查找所述候选列数据对应的表数据;
基于所述操作数据中的表数据对应的列数据,以及所述候选列数据和查找到的对应表数据,判断所述候选列数据是否为用户真实操作的列数据;
基于判断结果,确定用户真实操作的列数据;结合所述用户真实操作的列数据,以及所述操作数据中用户的操作动作和操作动作涉及的表数据,得出所述目标操作数据。
在一些实施例中,所述性能诊断包括自定义函数诊断,和/或,数据倾斜诊断;诊断执行模块713,用于对代码文档中的各代码语句执行性能诊断,得到代码文档的性能诊断结果包括:
针对代码文档中各代码语句,确定所述代码语句的自定义函数UDF函数以及UDF函数实现的功能,分析预置的多个内置函数中是否有实现相同功能的目标内置函数,若是,以实现相同功能的目标内置函数替换所述代码语句中的UDF函数,得到所述代码语句的UDF诊断结果,其中,代码文档中各代码语句的UDF诊断结果,汇总得到代码文档的UDF诊断结果;
和/或,针对代码文档中各代码语句,确定所述代码语句的代码节点和代码特征,判断所述代码语句的代码节点和代码特征是否与预先分析的存在数据倾斜的代码节点和代码特征相匹配,若是,则将所述代码语句中与所述数据倾斜的代码节点和代码特征序相应的代码数据,确定为存在数据倾斜,得出所述代码语句的数据倾斜诊断结果,其中,代码文档中各代码语句的数据倾斜诊断结果,汇总得到代码文档的数据倾斜诊断结果。
在一些实施例中,编辑器服务端还可进一步设置功能模块,以实现如下功能:
提供权限管理页面,获取编辑器前端反馈的用户在权限管理页面选择的执行诊断的诊断类型,和/或,优先执行的诊断类型。
在一些实施例中,编辑器服务端对应的编辑器用于数据工程平台。
本申请实施例还提供一种编辑器服务端,该编辑器服务端可通过装载上述应用于编辑器服务端的装置,以实现代码诊断方法。图8示出了编辑器服务端的可选框图。如图8所示,该编辑器服务端可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4。
在本申请实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信。
可选的,通信接口2可以为用于进行网络通信的通信模块的接口。
可选的,处理器1可能是CPU(中央处理器),GPU(Graphics Processing Unit,图形处理器),NPU(嵌入式神经网络处理器),FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列),TPU(张量处理单元),AI芯片,特定集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路等。
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
其中,存储器3存储一条或多条计算机可执行指令,处理器1调用所述一条或多条计算机可执行指令,以执行编辑器服务端执行的代码诊断方法。
下面对应用于编辑器前端的代码诊断装置进行介绍。下文描述的装置内容可以认为是编辑器前端为实现本申请实施例提供的代码诊断方法,所需设置的功能模块。
图9示出了本申请实施例提供的代码诊断装置的另一框图。如图9所示,该装置可以包括:
代码编辑界面展示模块911,用于展示代码编辑界面,所述代码编辑界面展示有当前输入的代码文档,所述代码文档包括代码语句;
诊断结果接收模块912,用于接收编辑器服务端发送所述代码文档的诊断结果;
错误语句及类型确定模块913,用于若所述诊断结果不为空,且包括代码编辑界面的代码语句在至少一种诊断类型对应的诊断结果,则根据所述诊断结果,确定代码编辑界面中存在错误的目标代码语句以及目标代码语句存在错误的诊断类型;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
错误提示展示及关联模块914,用于在代码编辑界面以不同的提示方式,展示目标代码语句在不同诊断类型对应的错误提示,并将目标代码语句在一种诊断类型对应的错误提示,与目标代码语句在该种诊断类型对应的诊断结果进行关联;
诊断结果展示模块915,用于响应于代码编辑界面中具有错误提示的目标代码语句的用户操作,展示与该错误提示关联的诊断结果。
在进一步的一些实施例中,编辑器前端的代码诊断装置还可进一步设置功能模块实现下述功能:
响应于辅助面板的展开展示指令,展开展示所述辅助面板;所述辅助面板具有展开展示状态和收起状态;展开展示的所述辅助面板具有与存在错误的目标代码语句的数量相应的展示区,且一个展示区展示一个存在错误的目标代码语句在各种诊断类型对应的诊断结果,目标代码语句在一种诊断类型对应的诊断结果包括具体的错误描述和修改建议;收起状态的所述辅助面板展示所述代码文档存在的错误数量;
其中,所述辅助面板受用户操作展开展示时,或者刷新数据时,编辑器前端向编辑器服务端发送一次代码诊断指令,以使编辑器服务端对代码文档执行一次至少一种诊断类型的代码诊断。
在进一步的一些实施例中,编辑器前端的代码诊断装置还可进一步设置功能模块实现下述功能:
确定辅助面板中被点击的诊断结果,解析被点击的诊断结果对应的目标代码语句在代码编辑界面对应的位置,将编辑器的光标位置设置为与解析到的位置相匹配,并对解析到的位置的目标代码语句进行突出展示。
本申请实施例还提供一种用户设备,该用户设备可运行编辑器前端,并可通过装载上述应用于编辑器前端的装置,以实现代码诊断方法。该用户设备的框图可结合图8所示,包括至少一个存储器和至少一个处理器,所述存储器存储一条或多条计算机指令,所述处理器调用所述计算机指令以执行编辑器前端执行的代码诊断方法。
本申请实施例还提供一种存储介质,该存储介质可存储一条或多条计算机指令,所述计算机指令被执行时实现如编辑器服务端执行的代码诊断方法,或者,如编辑器前端执行的代码诊断方法。
虽然本申请实施例披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。

Claims (15)

1.一种代码诊断方法,其中,所述方法应用于编辑器服务端,所述方法包括:
确定代码编辑界面当前输入的代码文档;
响应于代码诊断指令,确定所述代码文档的代码语句,其中,若所述代码文档中存在多条代码语句,则将所述代码文档拆分为多条代码语句;
对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果;其中,所述代码文档的各代码语句在一种诊断类型对应的诊断结果,汇总得到所述代码文档在该种诊断类型对应的诊断结果;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端,以便编辑器前端展示所述代码文档在各诊断类型对应的诊断结果;
其中,所述各诊断类型对应的诊断结果包括可执行性诊断结果,所述可执行性诊断结果的得到过程包括:
为代码文档的各代码语句设置预处理参数;
将设置预处理参数的各代码语句,分别提交给可执行性诊断引擎,使得可执行性诊断引擎对各代码语句执行可执行性诊断的预处理逻辑;
获取可执行性诊断引擎输出的代码语句的预处理失败信息,汇总各代码语句的预处理失败信息,得到所述代码文档的可执行性诊断结果。
2.根据权利要求1所述的方法,其中,所述对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果包括:
根据所述至少一种诊断类型中预先配置的优先执行的诊断类型,先对所述代码文档的各代码语句执行代码诊断,再对所述代码文档的各代码语句执行其他诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果,所述其他诊断类型不同于所述优先执行的诊断类型;
或者,对所述代码文档的各代码语句,并行执行各种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果。
3.根据权利要求2所述的方法,其中,所述根据所述至少一种诊断类型中预先配置的优先执行的诊断类型,先对所述代码文档的各代码语句执行代码诊断,再对所述代码文档的各代码语句执行其他诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果包括:对代码文档中的各代码语句执行语法诊断,得到代码文档的语法诊断结果;
基于所述语法诊断结果,若确定所述代码文档中的代码语句不存在语法错误,则判断底层引擎是否支持可执行性诊断的能力;
若支持可执行性诊断的能力,对代码文档中的各代码语句执行可执行性诊断的预处理逻辑,得到代码文档的可执行性诊断结果;
若不支持可执行性诊断的能力,对代码文档中的各代码语句执行权限诊断,得到代码文档的权限诊断结果;
以及,对代码文档中的各代码语句执行性能诊断,得到代码文档的性能诊断结果。
4.根据权利要求3所述的方法,其中,所述对代码文档中的各代码语句执行权限诊断,得到代码文档的权限诊断结果包括:
针对代码文档中的任一代码语句,解析所述代码语句,确定所述代码语句中用户操作的操作数据;
结合所述操作数据以及所述代码语句中的元数据,确定所述代码语句中用户的目标操作数据;根据用户账号信息,确定用户是否具有所述目标操作数据的权限,得出所述代码语句的权限诊断结果;其中,代码文档中各代码语句的权限诊断结果,汇总得到代码文档的权限诊断结果。
5.根据权利要求4所述的方法,其中,所述结合所述操作数据以及所述代码语句中的元数据,确定所述代码语句中用户的目标操作数据包括:
当解析得到的所述操作数据中存在列数据时,将该列数据作为候选列数据,从代码语句中的上下文中查找所述候选列数据对应的表数据;
基于所述操作数据中的表数据对应的列数据,以及所述候选列数据和查找到的对应表数据,判断所述候选列数据是否为用户真实操作的列数据;
基于判断结果,确定用户真实操作的列数据;结合所述用户真实操作的列数据,以及所述操作数据中用户的操作动作和操作动作涉及的表数据,得出所述目标操作数据。
6.根据权利要求3所述的方法,其中,所述性能诊断包括自定义函数诊断,和/或,数据倾斜诊断;所述对代码文档中的各代码语句执行性能诊断,得到代码文档的性能诊断结果包括:针对代码文档中的各代码语句,确定所述代码语句的自定义函数UDF函数以及UDF函数实现的功能,分析预置的多个内置函数中是否有实现相同功能的目标内置函数,若是,以实现相同功能的目标内置函数替换所述代码语句中的UDF函数,得到所述代码语句的UDF诊断结果,其中,代码文档中各代码语句的UDF诊断结果,汇总得到代码文档的UDF诊断结果;和/或,针对代码文档中的各代码语句,确定所述代码语句的代码节点和代码特征,判断所述代码语句的代码节点和代码特征是否与预先分析的存在数据倾斜的代码节点和代码特征相匹配,若是,则将所述代码语句中与所述数据倾斜的代码节点和代码特征相应的代码数据,确定为存在数据倾斜,得出所述代码语句的数据倾斜诊断结果,其中,代码文档中各代码语句的数据倾斜诊断结果,汇总得到代码文档的数据倾斜诊断结果。
7.根据权利要求1所述的方法,其中,还包括:
提供权限管理页面,获取编辑器前端反馈的用户在权限管理页面选择的执行诊断的诊断类型,和/或,优先执行的诊断类型。
8.一种代码诊断方法,其中,所述方法应用于编辑器前端,所述方法包括:
展示代码编辑界面,所述代码编辑界面展示有当前输入的代码文档,所述代码文档包括代码语句;
接收编辑器服务端发送的所述代码文档的诊断结果;
若所述诊断结果不为空,且包括代码语句在至少一种诊断类型对应的诊断结果,则根据所述诊断结果,确定代码编辑界面中存在错误的目标代码语句以及目标代码语句存在错误的诊断类型;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
在代码编辑界面以不同的提示方式,展示目标代码语句在不同诊断类型对应的错误提示,并将目标代码语句在一种诊断类型对应的错误提示,与目标代码语句在该种诊断类型对应的诊断结果进行关联;
响应于代码编辑界面中具有错误提示的目标代码语句的用户操作,展示与该错误提示关联的诊断结果;
其中,所述至少一种诊断类型对应的诊断结果包括可执行性诊断结果,所述可执行性诊断结果的得到过程包括:
为代码文档的各代码语句设置预处理参数;
将设置预处理参数的各代码语句,分别提交给可执行性诊断引擎,使得可执行性诊断引擎对各代码语句执行可执行性诊断的预处理逻辑;
获取可执行性诊断引擎输出的代码语句的预处理失败信息,汇总各代码语句的预处理失败信息,得到所述代码文档的可执行性诊断结果。
9.根据权利要求8所述的方法,其中,所述方法还包括:
响应于辅助面板的展开展示指令,展开展示所述辅助面板;所述辅助面板具有展开展示状态和收起状态;展开展示的所述辅助面板具有与存在错误的目标代码语句的数量相应的展示区,且一个展示区展示一个存在错误的目标代码语句在各种诊断类型对应的诊断结果,目标代码语句在一种诊断类型对应的诊断结果包括具体的错误描述和修改建议;收起状态的所述辅助面板展示所述代码文档存在的错误数量;
其中,所述辅助面板受用户操作展开展示时,或者刷新数据时,编辑器前端向编辑器服务端发送一次代码诊断指令,以使编辑器服务端对代码文档执行一次至少一种诊断类型的代码诊断。
10.根据权利要求8或9所述的方法,其中,所述方法还包括:
确定辅助面板中被点击的诊断结果,解析被点击的诊断结果对应的目标代码语句在代码编辑界面对应的位置,将编辑器的光标位置设置为与解析到的位置相匹配,并对解析到的位置的目标代码语句进行突出展示。
11.一种代码诊断装置,其中,所述装置应用于编辑器服务端,所述装置包括:
代码文档确定模块,用于确定代码编辑界面当前输入的代码文档;
代码语句确定模块,用于响应于代码诊断指令,确定所述代码文档的代码语句,其中,若所述代码文档中存在多条代码语句,则将所述代码文档拆分为多条代码语句;
诊断执行模块,用于对所述代码文档的各代码语句,分别执行至少一种诊断类型的代码诊断,得到所述代码文档在各诊断类型对应的诊断结果;其中,所述代码文档的各代码语句在一种诊断类型对应的诊断结果,汇总得到所述代码文档在该种诊断类型对应的诊断结果;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
诊断结果发送模块,用于将所述代码文档在各诊断类型对应的诊断结果,发送给编辑器前端,以便编辑器前端展示所述代码文档在各诊断类型对应的诊断结果;
其中,所述各诊断类型对应的诊断结果包括可执行性诊断结果,所述可执行性诊断结果的得到过程包括:
为代码文档的各代码语句设置预处理参数;
将设置预处理参数的各代码语句,分别提交给可执行性诊断引擎,使得可执行性诊断引擎对各代码语句执行可执行性诊断的预处理逻辑;
获取可执行性诊断引擎输出的代码语句的预处理失败信息,汇总各代码语句的预处理失败信息,得到所述代码文档的可执行性诊断结果。
12.一种代码诊断装置,其中,所述装置应用于编辑器前端,所述装置包括:
代码编辑界面展示模块,用于展示代码编辑界面,所述代码编辑界面展示有当前输入的代码文档,所述代码文档包括代码语句;
诊断结果接收模块,用于接收编辑器服务端发送所述代码文档的诊断结果;
错误语句及类型确定模块,用于若所述诊断结果不为空,且包括代码语句在至少一种诊断类型对应的诊断结果,则根据所述诊断结果,确定代码编辑界面中存在错误的目标代码语句以及目标代码语句存在错误的诊断类型;所述至少一种诊断类型包括如下至少一种:语法诊断、可执行性诊断、权限诊断、性能诊断;
错误提示展示及关联模块,用于在代码编辑界面以不同的提示方式,展示目标代码语句在不同诊断类型对应的错误提示,并将目标代码语句在一种诊断类型对应的错误提示,与目标代码语句在该种诊断类型对应的诊断结果进行关联;
诊断结果展示模块,用于响应于代码编辑界面中具有错误提示的目标代码语句的用户操作,展示与该错误提示关联的诊断结果;
其中,所述至少一种诊断类型对应的诊断结果包括可执行性诊断结果,所述可执行性诊断结果的得到过程包括:
为代码文档的各代码语句设置预处理参数;
将设置预处理参数的各代码语句,分别提交给可执行性诊断引擎,使得可执行性诊断引擎对各代码语句执行可执行性诊断的预处理逻辑;
获取可执行性诊断引擎输出的代码语句的预处理失败信息,汇总各代码语句的预处理失败信息,得到所述代码文档的可执行性诊断结果。
13.一种编辑器服务端,其中,包括至少一个存储器和至少一个处理器,所述存储器存储一条或多条计算机指令,所述处理器调用所述计算机指令以实现如权利要求1-7任一项所述的代码诊断方法。
14.一种用户设备,其中,所述用户设备运行有编辑器前端,所述用户设备包括至少一个存储器和至少一个处理器,所述存储器存储一条或多条计算机指令,所述处理器调用所述计算机指令以实现如权利要求8-10任一项所述的代码诊断方法。
15.一种存储介质,其中,所述存储介质存储一条或多条计算机指令,所述计算机指令被执行时实现如权利要求1-7任一项所述的代码诊断方法,或者,如权利要求8-10任一项所述的代码诊断方法。
CN202110418566.6A 2021-04-19 2021-04-19 一种代码诊断方法、装置、服务端、用户设备及存储介质 Active CN112817876B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110418566.6A CN112817876B (zh) 2021-04-19 2021-04-19 一种代码诊断方法、装置、服务端、用户设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110418566.6A CN112817876B (zh) 2021-04-19 2021-04-19 一种代码诊断方法、装置、服务端、用户设备及存储介质

Publications (2)

Publication Number Publication Date
CN112817876A CN112817876A (zh) 2021-05-18
CN112817876B true CN112817876B (zh) 2022-02-01

Family

ID=75863664

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110418566.6A Active CN112817876B (zh) 2021-04-19 2021-04-19 一种代码诊断方法、装置、服务端、用户设备及存储介质

Country Status (1)

Country Link
CN (1) CN112817876B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113409653A (zh) * 2021-06-16 2021-09-17 北京猿力未来科技有限公司 一种编程界面的信息展示方法和相关设备
CN113485715B (zh) * 2021-07-30 2024-08-16 浙江大华技术股份有限公司 一种基于数据中台的代码提示方法、系统及数据计算平台
CN113791772B (zh) * 2021-08-27 2024-04-30 成都摹客科技有限公司 一种可视化编辑器及使用方法
CN114153453A (zh) * 2021-11-09 2022-03-08 上海众言网络科技有限公司 限制代码行数的方法及装置
CN114697285B (zh) * 2022-03-31 2023-11-07 北京字跳网络技术有限公司 信息展示和信息发送方法、装置、设备和介质
CN118276903A (zh) * 2024-05-29 2024-07-02 暗物智能科技(广州)有限公司 应用程序编程接口api管理方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106354636A (zh) * 2016-08-25 2017-01-25 上海卓易科技股份有限公司 一种检测代码的方法及装置
CN109471634A (zh) * 2018-08-28 2019-03-15 上海思立微电子科技有限公司 源代码格式的检查方法及设备
CN112052008A (zh) * 2020-09-10 2020-12-08 腾讯科技(深圳)有限公司 代码检查方法、装置、计算机设备及计算机可读存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8762950B2 (en) * 2008-07-24 2014-06-24 Alcatel Lucent Software tool for scenario-based code inspections
US9239708B2 (en) * 2010-12-28 2016-01-19 Microsoft Technology Licensing, Llc Contextually intelligent code editing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106354636A (zh) * 2016-08-25 2017-01-25 上海卓易科技股份有限公司 一种检测代码的方法及装置
CN109471634A (zh) * 2018-08-28 2019-03-15 上海思立微电子科技有限公司 源代码格式的检查方法及设备
CN112052008A (zh) * 2020-09-10 2020-12-08 腾讯科技(深圳)有限公司 代码检查方法、装置、计算机设备及计算机可读存储介质

Also Published As

Publication number Publication date
CN112817876A (zh) 2021-05-18

Similar Documents

Publication Publication Date Title
CN112817876B (zh) 一种代码诊断方法、装置、服务端、用户设备及存储介质
US10872104B2 (en) Method and apparatus for natural language query in a workspace analytics system
US10824691B2 (en) Page rendering method, device, and data storage medium
CN112817583B (zh) 一种代码编辑方法、装置、服务端、用户设备及存储介质
CN108762743B (zh) 一种数据表操作代码生成方法及装置
US7546315B2 (en) Device for reporting software problem information
US8875103B2 (en) Method of testing multiple language versions of a software system using one test script
US8316353B2 (en) Problem analysis via matching contiguous stack trace lines to symptom rules
US11243971B2 (en) System and method of database creation through form design
JP5315368B2 (ja) 文書処理装置
US20170154068A1 (en) Method, device and terminal for data processing
CN113419721B (zh) 基于web的表达式编辑方法、装置、设备和存储介质
CN114531334A (zh) 意图处理方法、装置、电子设备和可读存储介质
US10180931B2 (en) Using a template processor to determine context nodes
JPH09212353A (ja) 再利用設計支援方法および設計支援装置
CN112948419A (zh) 查询语句处理方法及装置
US11740995B2 (en) Source quality check service
CN115098365A (zh) Sql代码的调试方法、装置、电子设备及可读存储介质
CN113094122A (zh) 数据处理脚本的执行方法和装置
WO2021042532A1 (zh) 数据库信息分析方法、装置、计算机装置及存储介质
CN105787032A (zh) 网页快照的生成方法及装置
CN114328572A (zh) 基于sql解析器的数据查询方法、装置、系统及介质
CN112417024A (zh) 快速适配数据库脚本方法、装置、计算机设备及存储介质
CN110990271A (zh) 代码性能检测方法、装置、设备及存储介质
KR20140147438A (ko) 마크업 파싱 장치, 방법 및 기록 매체

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