长期以来,SAP提供的标准ABAP开发工具是咱们对代码进行检查的惟一方式。这意味着咱们只能对ABAP服务器上的ABAP代码作出分析,而离线代码则成为了纯粹的文本,开发者没法对其进行检查。abaplint的出现改变了这一点,它能够在必定程度上“理解”代码,帮助咱们解决一些问题,和SAP的标准工具造成有效的互补。本文会介绍ABAP开发相关的工具abaplint以及它在开发过程当中的应用。html
本文连接:http://www.javashuo.com/article/p-ghakfled-cb.htmlgit
原创内容,转载请注明github
lint或linter是一种静态分析工具,能够分析并标记代码中的错误、bug、可疑结构。 abaplint是ABAP语言的linter,它基于typescript,能够在多种平台工做,做者是Lars Hvam(同时也是abapGit的做者)。typescript
项目地址:https://github.com/abaplint/abaplintjson
和Code Inspector等其它静态分析工具相似,abaplint能够作到帮助咱们找到有问题的代码、确保统一的代码风格等事情。服务器
以Visual Studio Code中的abaplint插件为例,它能够分析出代码中的错误,以下图,abaplint找出了短短一段代码中的10个问题。app
鼠标划过报错内容时,编辑器也会给出具体提示,以下图,(上面的黑色主题的提示框边界不是很明显,为了让读者看清楚提示框,这里主题颜色使用了Solarized Light)eclipse
在编辑器中使用abaplint对代码进行实时检查是一种典型的应用方式,还有一种应用方式是经过abaplint对代码进行自动检查,它能够是持续集成中的一个场景。编辑器
好比,若是以Github做为代码托管平台,能够安装Github的abaplint应用(https://github.com/apps/abaplint),配置须要检查的repo后,每当对相应的repo发起pr或push,都会有自动的代码检查,Github也会显示检查结果。(相似SAP系统中的传输前检查CTS_REQUEST_CHECK)ide
下图是个人配置,
进行一次commit以后,能够看到abaplint给出了26处问题和问题所在的代码位置。
此外,也可使用Travis CI或Gitlab的CI来执行abaplint的自动检查。具体能够参考该文:《Automatic checking of your ABAP code in Github/Gitlab with CI and abaplint》
abaplint支持多种代码编辑器和代码托管平台,列表以下,
abaplint支持不少检查规则(而且在持续地更新中),能够经过abaplint.json文件来控制各个检查规则的启用与关闭、设置某些具体的检查参数。
abaplint-clean-code项目中包含了这些规则的介绍,和配置文件示例。第一次使用abaplint的用户能够以该项目中的配置文件示例做为模板,按照本身的须要,结合规则介绍进行修改。
关于规则介绍部分,它不只给出了规则的效果,也参考sap的style guides给出了规则存在的具体缘由。
以其中一个设置为例,
"method_length": { "statements": 25, "ignoreTestClasses": false, "errorWhenEmpty": true, "reason": "https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#keep-methods-small" },
method_length是方法长度的配置项;statements的数量决定了方法的最大行数;ignoreTestClasses,忽略测试类,
errorWhenEmpty,对不含代码的空方法报错;reason,该设置的缘由。
(我的认为25有点小,有时候容易致使浅模块)
abaplint项目下还有一些实用网站,这里介绍几个我了解的。
一个在线编辑器,包含一个可编辑的report程序和一个可编辑的配置文件abaplint.json,能够经过它试验abaplint的效果。
一个ABAP的语法树网站,十分强大。以下图,
包含ABAP中的全部语句、表达式和结构。
对一些开源项目的统计,包含项目的对象数量、文件数量、语句数量、方法长度、语句兼容性、对象类型、行数趋势等信息的统计。能够帮助开源开发者分析本身的项目。效果以下图:
abaplint目前的流行度彷佛还不是很高(当前有62 star, 24 fork, 在abap标签下分别排名第8和第10)。但我相信它是一个颇有意义ABAP开源项目,将来可能会对ABAP的生态产生深远影响。
ABAP开发者一直以来都在SAP ABAP服务器上进行开发工做,代码的分析、测试彻底在ABAP服务器上进行。复杂而笨重的SAP系统不是处处都有的,并且这些系统大可能是孤立的。这意味着,开发内容的分享十分不方便。虽然理论上能够经过SAP系统工具对开发对象进行导入导出、代码分析等工做,但在本质上,它们一般是为了一个组织内部的分享而存在的。当一个素不相识的人在github发布了一个新的开源项目时,其它人没法得知这个项目曾经在ABAP服务器上进行过怎样的检查,这会影响信任的构建。abaplint独立实现了本来只能在ABAP服务器上进行的检查,若是一个项目的每次commit包含abaplint的检查结果,每一个方法都有完整的单元测试,那么人们对这个项目的信心将大大增长。信心的增长会促令人们将更多资源投入到开源项目中,从而促进社区的成长。