Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5874c14

Browse files
committed
JS: Avoid materializing JSONValue.getFile()
1 parent 6c0f9be commit 5874c14

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

javascript/ql/src/semmle/javascript/JSON.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ class JSONValue extends @json_value, Locatable {
3232
predicate isTopLevel() { not exists(getParent()) }
3333

3434
override string toString() { json(this, _, _, _, result) }
35+
36+
/** Gets the JSON file containing this value. */
37+
File getJsonFile() {
38+
exists(Location loc |
39+
json_locations(this, loc) and
40+
result = loc.getFile()
41+
)
42+
}
3543
}
3644

3745
/**

javascript/ql/src/semmle/javascript/NPM.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ private import NodeModuleResolutionImpl
88
/** A `package.json` configuration object. */
99
class PackageJSON extends JSONObject {
1010
PackageJSON() {
11-
getFile().getBaseName() = "package.json" and
11+
getJsonFile().getBaseName() = "package.json" and
1212
isTopLevel()
1313
}
1414

@@ -274,7 +274,7 @@ class NPMPackage extends @folder {
274274
/** The `package.json` file of this package. */
275275
PackageJSON pkg;
276276

277-
NPMPackage() { pkg.getFile().getParentContainer() = this }
277+
NPMPackage() { pkg.getJsonFile().getParentContainer() = this }
278278

279279
/** Gets a textual representation of this package. */
280280
string toString() { result = this.(Folder).toString() }

javascript/ql/src/semmle/javascript/frameworks/Babel.qll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module Babel {
1111
*/
1212
class Config extends JSONObject {
1313
Config() {
14-
isTopLevel() and getFile().getBaseName().matches(".babelrc%")
14+
isTopLevel() and getJsonFile().getBaseName().matches(".babelrc%")
1515
or
1616
this = any(PackageJSON pkg).getPropValue("babel")
1717
}
@@ -34,12 +34,12 @@ module Babel {
3434
* Gets a file affected by this Babel configuration.
3535
*/
3636
Container getAContainerInScope() {
37-
result = getFile().getParentContainer()
37+
result = getJsonFile().getParentContainer()
3838
or
3939
result = getAContainerInScope().getAChildContainer() and
4040
// File-relative .babelrc search stops at any package.json or .babelrc file.
41-
not result.getAChildContainer() = any(PackageJSON pkg).getFile() and
42-
not result.getAChildContainer() = any(Config pkg).getFile()
41+
not result.getAChildContainer() = any(PackageJSON pkg).getJsonFile() and
42+
not result.getAChildContainer() = any(Config pkg).getJsonFile()
4343
}
4444

4545
/**
@@ -133,7 +133,7 @@ module Babel {
133133
/**
134134
* Gets the folder in which this configuration is located.
135135
*/
136-
Folder getFolder() { result = getFile().getParentContainer() }
136+
Folder getFolder() { result = getJsonFile().getParentContainer() }
137137
}
138138

139139
/**

0 commit comments

Comments
 (0)