【问题标题】:General purpose plain-text linting tool通用纯文本 linting 工具
【发布时间】:2016-08-18 21:47:18
【问题描述】:

我正在寻找一个命令行工具,我可以在其中为某些文件扩展名(例如 cs 文件、js 文件、xaml 文件)指定正则表达式模式(或类似模式),这些文件扩展名可以在运行时提供错误/警告,例如在建造。这些将扫描所有类型的纯文本源代码。

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

诸如源标记化之类的功能是额外的。开源/免费是巨大的奖励。

有这样的工具吗?

【问题讨论】:

    标签: c# code-analysis lint


    【解决方案1】:

    如果你想走老路,你可以为这个清理 Awk。

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

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

    【讨论】:

    • Awk 仍然广泛用于 bash 脚本:) awk 万岁
    • @Rex 你是对的,我只是为我说话,并不是每个人都替换了它。我编辑了我的答案以反映这一点。谢谢。
    • 所以基本上自己写吧!我想这些工具足够简单,可以快速运行。感谢您为我验证。
    • 在原始代码上编写正则表达式可能很笨拙;请记住,字符串文字和注释文本可以包含任意字符,这些字符可能看起来是真实的代码。所以要建立一个 linting 规则,你必须自己写一些完全理解语言的词法语法的东西。 [您知道 Java 字符串文字可以以字符序列 \u0022 开头吗?] 更糟糕的是,要编写一个独立于空白/布局的查询,您的查询将不得不在您的每个标记之间引用空白和注释定义想要测试。 eeyujk。
    【解决方案2】:

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

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

      'if' '(' I '='
    

    在源代码中搜索模式;此示例“lints”类 C 代码,以解决在 IF 语句中分配变量(I 表示“标识符”)的常见错误,该错误是由于意外使用 '=' 而不是预期的 '==' 而导致的。

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

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

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

    可以使用大约 40 种语言的语言准确词法分析器获得 SCSE。

    【讨论】:

    • 谢谢。我看了看,我并不清楚该工具在您的网站上是如何工作的——大量的文字!下载试用版还需要我的个人信息和协议,当大多数东西可以轻松地从 GitHub 下载时,这是一个关闭。定价页面也很大而且很复杂!无论如何,我希望您发现此反馈对下一个人有用!
    • 感谢您的反馈。很难弄清楚一些东西是如何与微小的文本一起工作的。大概我提供的示例给了您阅读一页文本的动力[不是吗?]。忍不住大定价页面;我们有很多产品。亚马逊也有同样的问题。
    • ,,, 你在 Github 上发现了什么有用的东西?
    猜你喜欢
    • 2020-09-13
    • 2022-07-08
    • 2013-06-23
    • 1970-01-01
    • 2011-11-19
    • 2013-08-23
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多