mirror of
https://github.com/github/codeql.git
synced 2026-05-01 03:35:13 +02:00
Ruby: make up qnames for top-level namespaces
This commit is contained in:
@@ -21,6 +21,8 @@ private module Cached {
|
||||
qName = getAnAssumedGlobalConst()
|
||||
or
|
||||
qName = namespaceDeclaration(_)
|
||||
or
|
||||
qName = getAnAssumedGlobalNamespacePrefix(_)
|
||||
} or
|
||||
TUnresolved(Namespace n) { not exists(namespaceDeclaration(n)) }
|
||||
|
||||
@@ -36,6 +38,8 @@ private module Cached {
|
||||
TResolved(container) = resolveConstantReadAccess(n.getScopeExpr()) and
|
||||
result = scopeAppend(container, n.getName())
|
||||
)
|
||||
or
|
||||
result = getAnAssumedGlobalNamespacePrefix(n)
|
||||
}
|
||||
|
||||
cached
|
||||
@@ -412,6 +416,30 @@ private module ResolveImpl {
|
||||
)
|
||||
}
|
||||
|
||||
private ConstantAccess getANamespaceScopeInTopLevel() {
|
||||
result.(Namespace).getEnclosingModule() instanceof Toplevel
|
||||
or
|
||||
result = getANamespaceScopeInTopLevel().getScopeExpr()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the syntactical qualified name of the given constant access, which must be a top-level
|
||||
* namespace or scope prefix thereof.
|
||||
*
|
||||
* For example, for `module A::B::C` this gets `A`, `A::B`, and `A::B::C` for the two prefixes
|
||||
* and the module itself, respectively.
|
||||
*/
|
||||
string getAnAssumedGlobalNamespacePrefix(ConstantAccess access) {
|
||||
access = getANamespaceScopeInTopLevel() and
|
||||
(
|
||||
not exists(access.getScopeExpr()) and
|
||||
result = access.getName()
|
||||
or
|
||||
result =
|
||||
scopeAppend(getAnAssumedGlobalNamespacePrefix(access.getScopeExpr()), access.getName())
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private string isDefinedConstantNonRec(string container, string name) {
|
||||
result = resolveConstantWriteAccessNonRec(_, container, name)
|
||||
@@ -419,6 +447,12 @@ private module ResolveImpl {
|
||||
result = [builtin(), getAnAssumedGlobalConst()] and
|
||||
name = result and
|
||||
container = "Object"
|
||||
or
|
||||
exists(ConstantAccess access |
|
||||
container = getAnAssumedGlobalNamespacePrefix(access.getScopeExpr()) and
|
||||
name = access.getName() and
|
||||
result = getAnAssumedGlobalNamespacePrefix(access)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
|
||||
@@ -36,6 +36,12 @@
|
||||
#-----| TrueClass
|
||||
#-----| super -> Object
|
||||
|
||||
#-----| UnresolvedNamespace::X1
|
||||
|
||||
#-----| UnresolvedNamespace::X1::X2
|
||||
|
||||
#-----| UnresolvedNamespace::X1::X2::X3
|
||||
|
||||
calls.rb:
|
||||
# 21| M
|
||||
|
||||
@@ -273,11 +279,11 @@ unresolved_subclass.rb:
|
||||
# 11| UnresolvedNamespace::A
|
||||
#-----| super -> Object
|
||||
|
||||
# 14| ...::Subclass1
|
||||
# 14| UnresolvedNamespace::X1::X2::X3::Subclass1
|
||||
#-----| super -> ResolvableBaseClass
|
||||
|
||||
# 17| ...::Subclass2
|
||||
#-----| super -> Object
|
||||
# 17| UnresolvedNamespace::X1::X2::X3::Subclass2
|
||||
#-----| super -> UnresolvedNamespace::X1::X2::X3::Subclass1
|
||||
|
||||
# 21| ...::A
|
||||
# 21| UnresolvedNamespace::X1::X2::X3::A
|
||||
#-----| super -> Object
|
||||
|
||||
@@ -660,15 +660,15 @@ lookupMethod
|
||||
| unresolved_subclass.rb:11:1:12:3 | UnresolvedNamespace::A | new | calls.rb:117:5:117:16 | new |
|
||||
| unresolved_subclass.rb:11:1:12:3 | UnresolvedNamespace::A | puts | calls.rb:102:5:102:30 | puts |
|
||||
| unresolved_subclass.rb:11:1:12:3 | UnresolvedNamespace::A | to_s | calls.rb:172:5:173:7 | to_s |
|
||||
| unresolved_subclass.rb:14:1:15:3 | ...::Subclass1 | new | calls.rb:117:5:117:16 | new |
|
||||
| unresolved_subclass.rb:14:1:15:3 | ...::Subclass1 | puts | calls.rb:102:5:102:30 | puts |
|
||||
| unresolved_subclass.rb:14:1:15:3 | ...::Subclass1 | to_s | calls.rb:172:5:173:7 | to_s |
|
||||
| unresolved_subclass.rb:17:1:18:3 | ...::Subclass2 | new | calls.rb:117:5:117:16 | new |
|
||||
| unresolved_subclass.rb:17:1:18:3 | ...::Subclass2 | puts | calls.rb:102:5:102:30 | puts |
|
||||
| unresolved_subclass.rb:17:1:18:3 | ...::Subclass2 | to_s | calls.rb:172:5:173:7 | to_s |
|
||||
| unresolved_subclass.rb:21:1:22:3 | ...::A | new | calls.rb:117:5:117:16 | new |
|
||||
| unresolved_subclass.rb:21:1:22:3 | ...::A | puts | calls.rb:102:5:102:30 | puts |
|
||||
| unresolved_subclass.rb:21:1:22:3 | ...::A | to_s | calls.rb:172:5:173:7 | to_s |
|
||||
| unresolved_subclass.rb:14:1:15:3 | UnresolvedNamespace::X1::X2::X3::Subclass1 | new | calls.rb:117:5:117:16 | new |
|
||||
| unresolved_subclass.rb:14:1:15:3 | UnresolvedNamespace::X1::X2::X3::Subclass1 | puts | calls.rb:102:5:102:30 | puts |
|
||||
| unresolved_subclass.rb:14:1:15:3 | UnresolvedNamespace::X1::X2::X3::Subclass1 | to_s | calls.rb:172:5:173:7 | to_s |
|
||||
| unresolved_subclass.rb:17:1:18:3 | UnresolvedNamespace::X1::X2::X3::Subclass2 | new | calls.rb:117:5:117:16 | new |
|
||||
| unresolved_subclass.rb:17:1:18:3 | UnresolvedNamespace::X1::X2::X3::Subclass2 | puts | calls.rb:102:5:102:30 | puts |
|
||||
| unresolved_subclass.rb:17:1:18:3 | UnresolvedNamespace::X1::X2::X3::Subclass2 | to_s | calls.rb:172:5:173:7 | to_s |
|
||||
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A | new | calls.rb:117:5:117:16 | new |
|
||||
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A | puts | calls.rb:102:5:102:30 | puts |
|
||||
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A | to_s | calls.rb:172:5:173:7 | to_s |
|
||||
enclosingMethod
|
||||
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:3:3 | foo |
|
||||
| calls.rb:2:5:2:14 | self | calls.rb:1:1:3:3 | foo |
|
||||
|
||||
@@ -51,6 +51,9 @@ getModule
|
||||
| file://:0:0:0:0 | Symbol |
|
||||
| file://:0:0:0:0 | TrueClass |
|
||||
| file://:0:0:0:0 | UnresolvedNamespace |
|
||||
| file://:0:0:0:0 | UnresolvedNamespace::X1 |
|
||||
| file://:0:0:0:0 | UnresolvedNamespace::X1::X2 |
|
||||
| file://:0:0:0:0 | UnresolvedNamespace::X1::X2::X3 |
|
||||
| hello.rb:1:1:8:3 | EnglishWords |
|
||||
| hello.rb:11:1:16:3 | Greeting |
|
||||
| hello.rb:18:1:22:3 | HelloWorld |
|
||||
@@ -97,9 +100,9 @@ getModule
|
||||
| unresolved_subclass.rb:4:1:5:3 | UnresolvedNamespace::Subclass1 |
|
||||
| unresolved_subclass.rb:7:1:8:3 | UnresolvedNamespace::Subclass2 |
|
||||
| unresolved_subclass.rb:11:1:12:3 | UnresolvedNamespace::A |
|
||||
| unresolved_subclass.rb:14:1:15:3 | ...::Subclass1 |
|
||||
| unresolved_subclass.rb:17:1:18:3 | ...::Subclass2 |
|
||||
| unresolved_subclass.rb:21:1:22:3 | ...::A |
|
||||
| unresolved_subclass.rb:14:1:15:3 | UnresolvedNamespace::X1::X2::X3::Subclass1 |
|
||||
| unresolved_subclass.rb:17:1:18:3 | UnresolvedNamespace::X1::X2::X3::Subclass2 |
|
||||
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A |
|
||||
getADeclaration
|
||||
| calls.rb:21:1:34:3 | M | calls.rb:21:1:34:3 | M |
|
||||
| calls.rb:43:1:58:3 | C | calls.rb:43:1:58:3 | C |
|
||||
@@ -200,9 +203,9 @@ getADeclaration
|
||||
| unresolved_subclass.rb:4:1:5:3 | UnresolvedNamespace::Subclass1 | unresolved_subclass.rb:4:1:5:3 | Subclass1 |
|
||||
| unresolved_subclass.rb:7:1:8:3 | UnresolvedNamespace::Subclass2 | unresolved_subclass.rb:7:1:8:3 | Subclass2 |
|
||||
| unresolved_subclass.rb:11:1:12:3 | UnresolvedNamespace::A | unresolved_subclass.rb:11:1:12:3 | A |
|
||||
| unresolved_subclass.rb:14:1:15:3 | ...::Subclass1 | unresolved_subclass.rb:14:1:15:3 | Subclass1 |
|
||||
| unresolved_subclass.rb:17:1:18:3 | ...::Subclass2 | unresolved_subclass.rb:17:1:18:3 | Subclass2 |
|
||||
| unresolved_subclass.rb:21:1:22:3 | ...::A | unresolved_subclass.rb:21:1:22:3 | A |
|
||||
| unresolved_subclass.rb:14:1:15:3 | UnresolvedNamespace::X1::X2::X3::Subclass1 | unresolved_subclass.rb:14:1:15:3 | Subclass1 |
|
||||
| unresolved_subclass.rb:17:1:18:3 | UnresolvedNamespace::X1::X2::X3::Subclass2 | unresolved_subclass.rb:17:1:18:3 | Subclass2 |
|
||||
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A | unresolved_subclass.rb:21:1:22:3 | A |
|
||||
getSuperClass
|
||||
| calls.rb:43:1:58:3 | C | calls.rb:115:1:118:3 | Object |
|
||||
| calls.rb:65:1:69:3 | D | calls.rb:43:1:58:3 | C |
|
||||
@@ -265,9 +268,9 @@ getSuperClass
|
||||
| unresolved_subclass.rb:4:1:5:3 | UnresolvedNamespace::Subclass1 | unresolved_subclass.rb:1:1:2:3 | ResolvableBaseClass |
|
||||
| unresolved_subclass.rb:7:1:8:3 | UnresolvedNamespace::Subclass2 | unresolved_subclass.rb:4:1:5:3 | UnresolvedNamespace::Subclass1 |
|
||||
| unresolved_subclass.rb:11:1:12:3 | UnresolvedNamespace::A | calls.rb:115:1:118:3 | Object |
|
||||
| unresolved_subclass.rb:14:1:15:3 | ...::Subclass1 | unresolved_subclass.rb:1:1:2:3 | ResolvableBaseClass |
|
||||
| unresolved_subclass.rb:17:1:18:3 | ...::Subclass2 | calls.rb:115:1:118:3 | Object |
|
||||
| unresolved_subclass.rb:21:1:22:3 | ...::A | calls.rb:115:1:118:3 | Object |
|
||||
| unresolved_subclass.rb:14:1:15:3 | UnresolvedNamespace::X1::X2::X3::Subclass1 | unresolved_subclass.rb:1:1:2:3 | ResolvableBaseClass |
|
||||
| unresolved_subclass.rb:17:1:18:3 | UnresolvedNamespace::X1::X2::X3::Subclass2 | unresolved_subclass.rb:14:1:15:3 | UnresolvedNamespace::X1::X2::X3::Subclass1 |
|
||||
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A | calls.rb:115:1:118:3 | Object |
|
||||
getAPrependedModule
|
||||
| calls.rb:115:1:118:3 | Object | calls.rb:171:1:174:3 | A |
|
||||
| calls.rb:171:1:174:3 | A | toplevel_self_singleton.rb:2:5:5:7 | A::B |
|
||||
@@ -429,11 +432,27 @@ resolveConstantReadAccess
|
||||
| unresolved_subclass.rb:11:7:11:25 | UnresolvedNamespace | UnresolvedNamespace |
|
||||
| unresolved_subclass.rb:11:32:11:50 | UnresolvedNamespace | UnresolvedNamespace |
|
||||
| unresolved_subclass.rb:14:7:14:25 | UnresolvedNamespace | UnresolvedNamespace |
|
||||
| unresolved_subclass.rb:14:7:14:29 | X1 | UnresolvedNamespace::X1 |
|
||||
| unresolved_subclass.rb:14:7:14:33 | X2 | UnresolvedNamespace::X1::X2 |
|
||||
| unresolved_subclass.rb:14:7:14:37 | X3 | UnresolvedNamespace::X1::X2::X3 |
|
||||
| unresolved_subclass.rb:14:52:14:70 | ResolvableBaseClass | ResolvableBaseClass |
|
||||
| unresolved_subclass.rb:17:7:17:25 | UnresolvedNamespace | UnresolvedNamespace |
|
||||
| unresolved_subclass.rb:17:7:17:29 | X1 | UnresolvedNamespace::X1 |
|
||||
| unresolved_subclass.rb:17:7:17:33 | X2 | UnresolvedNamespace::X1::X2 |
|
||||
| unresolved_subclass.rb:17:7:17:37 | X3 | UnresolvedNamespace::X1::X2::X3 |
|
||||
| unresolved_subclass.rb:17:52:17:70 | UnresolvedNamespace | UnresolvedNamespace |
|
||||
| unresolved_subclass.rb:17:52:17:74 | X1 | UnresolvedNamespace::X1 |
|
||||
| unresolved_subclass.rb:17:52:17:78 | X2 | UnresolvedNamespace::X1::X2 |
|
||||
| unresolved_subclass.rb:17:52:17:82 | X3 | UnresolvedNamespace::X1::X2::X3 |
|
||||
| unresolved_subclass.rb:17:52:17:93 | Subclass1 | UnresolvedNamespace::X1::X2::X3::Subclass1 |
|
||||
| unresolved_subclass.rb:21:7:21:25 | UnresolvedNamespace | UnresolvedNamespace |
|
||||
| unresolved_subclass.rb:21:7:21:29 | X1 | UnresolvedNamespace::X1 |
|
||||
| unresolved_subclass.rb:21:7:21:33 | X2 | UnresolvedNamespace::X1::X2 |
|
||||
| unresolved_subclass.rb:21:7:21:37 | X3 | UnresolvedNamespace::X1::X2::X3 |
|
||||
| unresolved_subclass.rb:21:44:21:62 | UnresolvedNamespace | UnresolvedNamespace |
|
||||
| unresolved_subclass.rb:21:44:21:66 | X1 | UnresolvedNamespace::X1 |
|
||||
| unresolved_subclass.rb:21:44:21:70 | X2 | UnresolvedNamespace::X1::X2 |
|
||||
| unresolved_subclass.rb:21:44:21:74 | X3 | UnresolvedNamespace::X1::X2::X3 |
|
||||
resolveConstantWriteAccess
|
||||
| calls.rb:21:1:34:3 | M | M |
|
||||
| calls.rb:43:1:58:3 | C | C |
|
||||
@@ -538,6 +557,9 @@ resolveConstantWriteAccess
|
||||
| unresolved_subclass.rb:4:1:5:3 | Subclass1 | UnresolvedNamespace::Subclass1 |
|
||||
| unresolved_subclass.rb:7:1:8:3 | Subclass2 | UnresolvedNamespace::Subclass2 |
|
||||
| unresolved_subclass.rb:11:1:12:3 | A | UnresolvedNamespace::A |
|
||||
| unresolved_subclass.rb:14:1:15:3 | Subclass1 | UnresolvedNamespace::X1::X2::X3::Subclass1 |
|
||||
| unresolved_subclass.rb:17:1:18:3 | Subclass2 | UnresolvedNamespace::X1::X2::X3::Subclass2 |
|
||||
| unresolved_subclass.rb:21:1:22:3 | A | UnresolvedNamespace::X1::X2::X3::A |
|
||||
enclosingModule
|
||||
| calls.rb:1:1:3:3 | foo | calls.rb:1:1:651:24 | calls.rb |
|
||||
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:651:24 | calls.rb |
|
||||
|
||||
@@ -36,6 +36,12 @@
|
||||
#-----| TrueClass
|
||||
#-----| -> Object
|
||||
|
||||
#-----| UnresolvedNamespace::X1
|
||||
|
||||
#-----| UnresolvedNamespace::X1::X2
|
||||
|
||||
#-----| UnresolvedNamespace::X1::X2::X3
|
||||
|
||||
calls.rb:
|
||||
# 21| M
|
||||
|
||||
@@ -263,11 +269,11 @@ unresolved_subclass.rb:
|
||||
# 11| UnresolvedNamespace::A
|
||||
#-----| -> Object
|
||||
|
||||
# 14| ...::Subclass1
|
||||
# 14| UnresolvedNamespace::X1::X2::X3::Subclass1
|
||||
#-----| -> ResolvableBaseClass
|
||||
|
||||
# 17| ...::Subclass2
|
||||
#-----| -> Object
|
||||
# 17| UnresolvedNamespace::X1::X2::X3::Subclass2
|
||||
#-----| -> UnresolvedNamespace::X1::X2::X3::Subclass1
|
||||
|
||||
# 21| ...::A
|
||||
# 21| UnresolvedNamespace::X1::X2::X3::A
|
||||
#-----| -> Object
|
||||
|
||||
Reference in New Issue
Block a user