Skip to content

Commit e7d43ce

Browse files
authored
fix(getNodeRequireCalls-utility): detect member_expression statements (#168)
1 parent b22db02 commit e7d43ce

File tree

2 files changed

+53
-14
lines changed

2 files changed

+53
-14
lines changed

utils/src/ast-grep/require-call.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ describe("require-call", () => {
1313
require("no:assignment");
1414
require(variable);
1515
require(\`backticks\`);
16+
const cpus = require("node:os").cpus;
1617
`;
1718
const ast = astGrep.parse(astGrep.Lang.JavaScript, code);
1819

@@ -33,5 +34,9 @@ describe("require-call", () => {
3334
const utilRequires = getNodeRequireCalls(ast, 'util');
3435
assert.strictEqual(utilRequires.length, 1);
3536
assert.strictEqual(utilRequires[0].field('value')?.text(), 'require("node:util")');
37+
38+
const osRequires = getNodeRequireCalls(ast, "os");
39+
assert.strictEqual(osRequires.length, 1);
40+
assert.strictEqual(osRequires[0].field('value')?.text(), 'require("node:os").cpus');
3641
});
3742
});

utils/src/ast-grep/require-call.ts

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,58 @@ export const getNodeRequireCalls = (rootNode: SgRoot, nodeModuleName: string): S
2525
{
2626
has: {
2727
field: "value",
28-
kind: "call_expression",
29-
all: [
28+
any: [
3029
{
31-
has: {
32-
field: "function",
33-
kind: "identifier",
34-
regex: "^require$"
35-
}
30+
kind: "call_expression",
31+
all: [
32+
{
33+
has: {
34+
field: "function",
35+
kind: "identifier",
36+
regex: "^require$"
37+
}
38+
},
39+
{
40+
has: {
41+
field: "arguments",
42+
kind: "arguments",
43+
has: {
44+
kind: "string",
45+
regex: `^['"](node:)?${nodeModuleName}['"]$`
46+
}
47+
}
48+
}
49+
]
3650
},
3751
{
38-
has: {
39-
field: "arguments",
40-
kind: "arguments",
41-
has: {
42-
kind: "string",
43-
regex: `^['"](node:)?${nodeModuleName}['"]$`
52+
kind: "member_expression",
53+
all: [
54+
{
55+
has: {
56+
field: "object",
57+
kind: "call_expression",
58+
all: [
59+
{
60+
has: {
61+
field: "function",
62+
kind: "identifier",
63+
regex: "^require$"
64+
}
65+
},
66+
{
67+
has: {
68+
field: "arguments",
69+
kind: "arguments",
70+
has: {
71+
kind: "string",
72+
regex: `^['"](node:)?${nodeModuleName}['"]$`
73+
}
74+
}
75+
}
76+
]
77+
}
4478
}
45-
}
79+
]
4680
}
4781
]
4882
}

0 commit comments

Comments
 (0)