JS: Add discard predicates

This commit is contained in:
Asger F
2025-07-02 11:29:37 +02:00
parent ba585b8af5
commit 6783456213
2 changed files with 31 additions and 0 deletions

View File

@@ -146,3 +146,4 @@ import semmle.javascript.linters.JSLint
import semmle.javascript.linters.Linting
import semmle.javascript.security.dataflow.RemoteFlowSources
import semmle.javascript.frameworks.UnderscoreDotString
private import semmle.javascript.internal.Overlay

View File

@@ -0,0 +1,30 @@
private import javascript
/** Holds if the database is an overlay. */
overlay[local]
private predicate isOverlay() { databaseMetadata("isOverlay", "true") }
overlay[local]
private string getFileFromEntity(@locatable node) {
exists(@location loc, @file file |
hasLocation(node, loc) and
locations_default(loc, file, _, _, _, _) and
files(file, result)
)
}
/** Holds if `file` was changed or deleted in the overlay. */
overlay[local]
private predicate discardFile(string file) { isOverlay() and overlayChangedFiles(file) }
/** Holds if `node` is in the `file` and is part of the overlay base database. */
overlay[local]
private predicate discardableEntity(string file, @locatable node) {
not isOverlay() and file = getFileFromEntity(node)
}
/** Holds if `node` should be discarded, because it is part of the overlay base and is in a file that was also extracted as part of the overlay database. */
overlay[discard_entity]
private predicate discardEntity(@locatable node) {
exists(string file | discardableEntity(file, node) and discardFile(file))
}