如何使用 CodeNarc 或 Groovy AST 类解析变量值?

问题描述 投票:0回答:1

我正在为 CodeNarc Groovy Linter 编写一些自定义规则。

我想创建/扩展一个类似于 ConstantIfExpressionRule 的规则,但涵盖了可以推断常量的情况。

例如:

def final b = false;

// later
if (b) {
  doSomething()
}

我想制定一个规则来检测 if 语句的代码块永远不可访问。

可以说,这可能不是静态分析,但也相差不远,因为它只涉及对已定义变量的查找。我在 Java 代码的 IDE 中看到过类似的 linting,所以我认为它不需要动态运行代码。

作为 CodeNarc 和 Groovy AST 的新手,我不知道这两个库是否有任何现有支持来在检查

b
语句时确定
if
的值。这可能吗?

groovy abstract-syntax-tree codenarc
1个回答
0
投票

ast/cst 可以在解析类/脚本后给你一个语法树

您可以使用 groovyconsole“inspect cst”来运行解析器、可视化生成的树并了解目标的复杂性:)

以下语法树对应于您问题中的代码:

所以,回答你的问题 - 是的,可以在 AST

 的帮助下确定 
b = false
if(b)

© www.soinside.com 2019 - 2024. All rights reserved.