通用纯文本 linting 工具

General purpose plain-text linting tool

我正在寻找一个命令行工具,我可以在其中为可以提供 errors/warnings 当 运行 时,就像在构建期间一样。这些将扫描所有类型的纯文本源代码。

我知道有针对特定语言的工具...我也打算使用这些工具。例如,此工具用于我们想要标记我们不想投资编写 Rosyln 规则的快速模式。我想以 easy 的方式标记某些模式或 API 用法,其中 anyone 可以添加新规则而不用想太多.很多时候我们不添加规则,因为它很难。

源标记化等功能是额外的好处。开源/免费是超级奖励。

有这样的工具吗?

如果你想要老式的,你可以为这一个除掉 Awk。

它逐行扫描文件(对于某些可配置的行定义,具有合理的默认值)将它们切成碎片(在空白 IMMSMR 上)并应用一组正则表达式并触发匹配正则表达式后面的代码。有一些条件可以匹配文件的开头和结尾来打印headers/footers.

这似乎是你想要的,但恕我直言,perl 或 ruby 脚本更容易,并且很久以前就已经为我取代了 AWK。但它对于您的用例 AFAICT 来说简单明了。

我们的 Source Code Search Engine (SCSE) 可以做到这一点。

SCSE 词法(使用语言准确的标记化,包括跳过特定语言的空格但保留注释)一组源文件,然后为每个标记类型构建一个标记索引。可以为 SCSE 提供基于令牌的搜索查询,例如:

  'if' '(' I '='

在源代码中搜索模式;此示例 "lints" 类似 C 的代码,用于在 IF 语句中因意外使用“=”而不是预期的“==”而导致分配变量(I for "identifier")的常见错误。

搜索是使用令牌索引完成的,以加快搜索速度。通常 SCSE 可以在几秒钟内搜索数百万行代码,比 grep 或其他坚持为每个查询读取文件内容的方案快得多。它还会产生更少的误报,因为令牌检查是准确的,而且查询更容易编写,因为不必担心 white space/line breaks/comments.

可以记录或仅计算对模式的命中列表。

通常SCSE是交互使用的;查询会产生一个命中列表,单击一个命中会生成一个包含命中的源文本页面视图。但是,也可以在 SCSE 上编写脚本调用。

SCSE 可以通过大约 40 种语言的语言精确词法分析器获得。