0

问题在标题中。

例如,假设我有兴趣捕获使用某个全局变量(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

4

0 回答 0