Skip to content

Commit 5a652d5

Browse files
committed
JS: More efficient nested package naming
1 parent df28e3b commit 5a652d5

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

javascript/ql/lib/semmle/javascript/NPM.qll

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,25 +22,25 @@ class PackageJson extends JsonObject {
2222
pragma[nomagic]
2323
string getDeclaredPackageName() { result = this.getPropStringValue("name") }
2424

25+
private PackageJson getEnclosingNamedPackage() {
26+
result.getFolder() = packageInternalParent*(this.getFolder().getParentContainer()) and
27+
not result.isPrivate() and
28+
exists(result.getDeclaredPackageName())
29+
}
30+
2531
/**
2632
* Gets the name of this package.
2733
* If the package is located under the package `pkg1` and its relative path is `foo/bar`, then the resulting package name will be `pkg1/foo/bar`.
2834
*/
2935
string getPackageName() {
3036
result = this.getDeclaredPackageName()
3137
or
32-
exists(
33-
PackageJson parentPkg, Container currentDir, Container parentDir, string parentPkgName,
34-
string pkgNameDiff
35-
|
36-
currentDir = this.getJsonFile().getParentContainer() and
37-
parentDir = parentPkg.getJsonFile().getParentContainer() and
38-
parentPkgName = parentPkg.getPropStringValue("name") and
39-
parentDir.getAChildContainer+() = currentDir and
40-
pkgNameDiff = currentDir.getAbsolutePath().suffix(parentDir.getAbsolutePath().length()) and
41-
not exists(pkgNameDiff.indexOf("/node_modules/")) and
42-
result = parentPkgName + pkgNameDiff and
43-
not parentPkg.isPrivate()
38+
not exists(this.getDeclaredPackageName()) and
39+
exists(PackageJson parent |
40+
parent = this.getEnclosingNamedPackage() and
41+
result =
42+
parent.getDeclaredPackageName() +
43+
this.getFolder().getRelativePath().suffix(parent.getFolder().getRelativePath().length())
4444
)
4545
}
4646

@@ -405,5 +405,6 @@ class NpmPackage extends @folder {
405405
*/
406406
private Folder packageInternalParent(Container c) {
407407
result = c.getParentContainer() and
408-
not c.(Folder).getBaseName() = "node_modules"
408+
not c.(Folder).getBaseName() = "node_modules" and
409+
not c = any(PackageJson pkg).getFolder()
409410
}

javascript/ql/test/library-tests/NPM/tests.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ modules
3939
| src/node_modules/nested | nested | src/node_modules/nested/tst3.js:1:1:2:13 | <toplevel> |
4040
| src/node_modules/nested/node_modules/a | a | src/node_modules/nested/node_modules/a/index.js:1:1:1:25 | <toplevel> |
4141
| src/node_modules/parent-module | parent-module | src/node_modules/parent-module/main.js:1:1:2:0 | <toplevel> |
42-
| src/node_modules/parent-module | parent-module | src/node_modules/parent-module/sub-module/main.js:1:1:2:0 | <toplevel> |
4342
| src/node_modules/parent-module/sub-module | parent-module/sub-module | src/node_modules/parent-module/sub-module/main.js:1:1:2:0 | <toplevel> |
4443
| src/node_modules/third-party-module | third-party-module | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
4544
npm

0 commit comments

Comments
 (0)