问题在标题中。
例如,假设我有兴趣捕获使用某个全局变量(foo
此处)的所有函数调用。
我尝试了以下方法:
rules:
- id: dont-call-functions-using-foo
message: "don't call functions using `foo`"
languages: [ javascript ]
severity: ERROR
patterns:
- pattern: $FUNCTION(...)
- patterns:
- pattern-inside: |
$FUNCTION(...) {
...
}
- pattern: bar
在以下 JavaScript 文件中:
const foo = "GLOBAL";
function bar() { console.log(foo); }
function baz() { console.log("hello"); }
// I would like this to be reported
foo()
// ... but not this
baz()
可悲的是,这不起作用:
$ semgrep -c test.yaml test.js
Running 1 rules...
ran 1 rules on 1 files: 0 findings
我想我“理解”了为什么我的规则不正确:它寻找既是函数定义又是函数调用的模式;而且它不会“关联”两个不同的代码位置。
我开始相信,如果没有join mode ,我想要实现的目标是不可能的,但我是一个初学者,并且很高兴被证明是错误的。semgrep