mirror of
https://github.com/github/codeql.git
synced 2026-04-24 08:15:14 +02:00
JS: Name instance methods using API nodes instead of special-casing
This commit is contained in:
@@ -41,6 +41,8 @@ private predicate isPackageExport(API::Node node) { node = API::moduleExport(_)
|
||||
private predicate relevantEdge(API::Node pred, API::Node succ) {
|
||||
succ = pred.getMember(_) and
|
||||
not isPrivateLike(succ)
|
||||
or
|
||||
succ = pred.getInstance()
|
||||
}
|
||||
|
||||
/** Gets the shortest distance from a packaeg export to `nd` in the API graph. */
|
||||
@@ -77,19 +79,25 @@ private predicate isPrivateLike(API::Node node) { isPrivateAssignment(node.asSin
|
||||
private API::Node getASuccessor(API::Node node, string name, int badness) {
|
||||
isExported(node) and
|
||||
isExported(result) and
|
||||
exists(string member |
|
||||
result = node.getMember(member) and
|
||||
if member = "default"
|
||||
then
|
||||
if defaultExportCanBeInterpretedAsNamespaceExport(node)
|
||||
then (
|
||||
badness = 5 and name = ""
|
||||
) else (
|
||||
badness = 10 and name = "default"
|
||||
(
|
||||
exists(string member |
|
||||
result = node.getMember(member) and
|
||||
if member = "default"
|
||||
then
|
||||
if defaultExportCanBeInterpretedAsNamespaceExport(node)
|
||||
then (
|
||||
badness = 5 and name = ""
|
||||
) else (
|
||||
badness = 10 and name = "default"
|
||||
)
|
||||
else (
|
||||
name = member and badness = 0
|
||||
)
|
||||
else (
|
||||
name = member and badness = 0
|
||||
)
|
||||
or
|
||||
result = node.getInstance() and
|
||||
name = "prototype" and
|
||||
badness = 0
|
||||
)
|
||||
}
|
||||
|
||||
@@ -315,10 +323,6 @@ private predicate functionHasNameCandidate(
|
||||
classObjectHasPrimaryName(cls, package, name, badness)
|
||||
or
|
||||
exists(string baseName, string memberName |
|
||||
function = cls.getInstanceMethod(memberName) and
|
||||
classInstanceHasPrimaryName(cls, package, baseName, badness) and
|
||||
name = join(baseName, memberName)
|
||||
or
|
||||
function = cls.getStaticMethod(memberName) and
|
||||
classObjectHasPrimaryName(cls, package, baseName, badness) and
|
||||
name = join(baseName, memberName)
|
||||
|
||||
@@ -3,7 +3,9 @@ testFailures
|
||||
| pack11/index.ts:33:18:33:69 | // $ me ... ng.name | Missing result:method=(pack11).C3.publicField.really.long.name |
|
||||
| pack11/index.ts:41:23:41:24 | | Unexpected result: alias=(pack11).C3.publicField.really.long.name==(pack11).C3.privateField |
|
||||
ambiguousPreferredPredecessor
|
||||
| pack2/lib.js:1:1:3:1 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getInstance() |
|
||||
| pack2/lib.js:8:22:8:34 | def moduleImport("pack2").getMember("exports").getMember("lib").getMember("LibClass").getMember("foo") |
|
||||
| pack2/main.js:1:1:3:1 | def moduleImport("pack2").getMember("exports").getMember("MainClass").getInstance() |
|
||||
ambiguousSinkName
|
||||
ambiguousClassObjectName
|
||||
failures
|
||||
|
||||
Reference in New Issue
Block a user