M3:如何识别 Java 个项目中的语法错误
M3: how to identify syntax errors in Java projects
我正在使用加载了 createM3FromDirectory 的 Java M3 模型编写一些分析规则。如果 Java 代码包含语法错误,我想中止而不是 运行 我的分析,因为那样模型可能处于不一致状态。
M3.messages 即使是好的项目,通常也会包含很多错误,因为像 junit 这样的项目依赖性,createM3FromDirectory 无法考虑。这些错误都很好,反正我的分析是有效的。
如何可靠地识别 Rascal 在加载模型时是否遇到语法错误?
目前我正在使用以下辅助函数。
set[Message] syntaxErrors(M3 model) =
{ e
| e:error(msg, _) <- model.messages
, /^syntax error/i := msg
};
这种方法靠谱吗?
是的,恕我直言,这足够可靠。
顺便说一句,模式匹配可以任意嵌套,像这样:
set[Message] syntaxErrors(M3 model) =
{ e | e:error(/^syntax error/i, _) <- model.messages}
另外,您还可以将类路径传递给 createM3FromDirectory,以确保正确解析 JUnit 依赖项(以及其他依赖项)。如果你需要为一个maven项目构建这样一个类路径,你可能想尝试:https://github.com/cwi-swat/rascal-java-build-manager
我正在使用加载了 createM3FromDirectory 的 Java M3 模型编写一些分析规则。如果 Java 代码包含语法错误,我想中止而不是 运行 我的分析,因为那样模型可能处于不一致状态。
M3.messages 即使是好的项目,通常也会包含很多错误,因为像 junit 这样的项目依赖性,createM3FromDirectory 无法考虑。这些错误都很好,反正我的分析是有效的。
如何可靠地识别 Rascal 在加载模型时是否遇到语法错误?
目前我正在使用以下辅助函数。
set[Message] syntaxErrors(M3 model) =
{ e
| e:error(msg, _) <- model.messages
, /^syntax error/i := msg
};
这种方法靠谱吗?
是的,恕我直言,这足够可靠。
顺便说一句,模式匹配可以任意嵌套,像这样:
set[Message] syntaxErrors(M3 model) =
{ e | e:error(/^syntax error/i, _) <- model.messages}
另外,您还可以将类路径传递给 createM3FromDirectory,以确保正确解析 JUnit 依赖项(以及其他依赖项)。如果你需要为一个maven项目构建这样一个类路径,你可能想尝试:https://github.com/cwi-swat/rascal-java-build-manager