JS: Recognize 'require' calls in more cases

This commit is contained in:
Asger F
2019-09-11 10:48:10 +01:00
parent 3b7ecd5ccf
commit 173f32d2ba
2 changed files with 14 additions and 4 deletions

View File

@@ -97,8 +97,9 @@ public class NodeJSDetector {
if (e instanceof CallExpression) {
CallExpression call = (CallExpression) e;
Expression callee = call.getCallee();
return (isIdentifier(callee, "require") || isRequireCall(callee))
&& call.getArguments().size() == 1;
if (isIdentifier(callee, "require") && call.getArguments().size() == 1) return true;
if (isRequireCall(callee)) return true;
return false;
} else if (e instanceof MemberExpression) {
return isRequireCall(((MemberExpression) e).getObject());
} else if (e instanceof AssignmentExpression) {

View File

@@ -164,9 +164,8 @@ public class NodeJSDetectorTests {
@Test
public void amdefine() {
// not currently detected
isNodeJS(
"if (typeof define !== 'function') define = require('amdefine')(module, require);", false);
"if (typeof define !== 'function') define = require('amdefine')(module, require);", true);
}
@Test
@@ -202,4 +201,14 @@ public class NodeJSDetectorTests {
+ "}",
true);
}
@Test
public void requireAndCall() {
isNodeJS("var foo = require('foo')();", true);
}
@Test
public void requireAndCallMethod() {
isNodeJS("var foo = require('foo').bar();", true);
}
}