Skip to content

Commit d1a09b6

Browse files
committed
Address review comments
1 parent 3471e75 commit d1a09b6

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

ruby/ql/src/queries/analysis/Definitions.ql

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ select src, target, kind
3535
*/
3636
newtype DefLoc =
3737
/** A constant, module or class. */
38-
ConstantDefLoc(ConstantReadAccess read, ConstantWriteAccess write) { write = definitionOf(read) } or
38+
ConstantDefLoc(ConstantReadAccess read, ConstantWriteAccess write) {
39+
write = definitionOf(resolveConstant(read))
40+
} or
3941
/** A method call. */
4042
MethodLoc(MethodCall call, Method meth) { meth = call.getATarget() } or
4143
/** A local variable. */
@@ -65,19 +67,22 @@ newtype DefLoc =
6567
not exists(MethodBase m | m.getAChild+() = write)
6668
}
6769

68-
pragma[noinline]
69-
ConstantWriteAccess definitionOf0(string fqn) {
70-
fqn = resolveConstant(_) and
71-
result =
72-
min(ConstantWriteAccess w | w.getQualifiedName() = fqn | w order by w.getLocation().toString())
73-
}
74-
7570
/**
7671
* Gets the constant write that defines the given constant.
7772
* Modules often don't have a unique definition, as they are opened multiple times in different
7873
* files. In these cases we arbitrarily pick the definition with the lexicographically least
7974
* location.
8075
*/
81-
ConstantWriteAccess definitionOf(ConstantReadAccess r) {
82-
result = definitionOf0(resolveConstant(r))
76+
pragma[noinline]
77+
ConstantWriteAccess definitionOf(string fqn) {
78+
fqn = resolveConstant(_) and
79+
result =
80+
min(ConstantWriteAccess w, Location l |
81+
w.getQualifiedName() = fqn and l = w.getLocation()
82+
|
83+
w
84+
order by
85+
l.getFile().getAbsolutePath(), l.getStartLine(), l.getStartColumn(), l.getEndLine(),
86+
l.getEndColumn()
87+
)
8388
}

0 commit comments

Comments
 (0)