diff --git a/utils/src/ast-grep/require-call.test.ts b/utils/src/ast-grep/require-call.test.ts index edc76bf7..a4f3e30c 100644 --- a/utils/src/ast-grep/require-call.test.ts +++ b/utils/src/ast-grep/require-call.test.ts @@ -13,6 +13,7 @@ describe("require-call", () => { require("no:assignment"); require(variable); require(\`backticks\`); + const cpus = require("node:os").cpus; `; const ast = astGrep.parse(astGrep.Lang.JavaScript, code); @@ -33,5 +34,9 @@ describe("require-call", () => { const utilRequires = getNodeRequireCalls(ast, 'util'); assert.strictEqual(utilRequires.length, 1); assert.strictEqual(utilRequires[0].field('value')?.text(), 'require("node:util")'); + + const osRequires = getNodeRequireCalls(ast, "os"); + assert.strictEqual(osRequires.length, 1); + assert.strictEqual(osRequires[0].field('value')?.text(), 'require("node:os").cpus'); }); }); diff --git a/utils/src/ast-grep/require-call.ts b/utils/src/ast-grep/require-call.ts index c4cdab33..7201aaa3 100644 --- a/utils/src/ast-grep/require-call.ts +++ b/utils/src/ast-grep/require-call.ts @@ -25,24 +25,58 @@ export const getNodeRequireCalls = (rootNode: SgRoot, nodeModuleName: string): S { has: { field: "value", - kind: "call_expression", - all: [ + any: [ { - has: { - field: "function", - kind: "identifier", - regex: "^require$" - } + kind: "call_expression", + all: [ + { + has: { + field: "function", + kind: "identifier", + regex: "^require$" + } + }, + { + has: { + field: "arguments", + kind: "arguments", + has: { + kind: "string", + regex: `^['"](node:)?${nodeModuleName}['"]$` + } + } + } + ] }, { - has: { - field: "arguments", - kind: "arguments", - has: { - kind: "string", - regex: `^['"](node:)?${nodeModuleName}['"]$` + kind: "member_expression", + all: [ + { + has: { + field: "object", + kind: "call_expression", + all: [ + { + has: { + field: "function", + kind: "identifier", + regex: "^require$" + } + }, + { + has: { + field: "arguments", + kind: "arguments", + has: { + kind: "string", + regex: `^['"](node:)?${nodeModuleName}['"]$` + } + } + } + ] + } } - } + ] } ] }