diff --git a/ruby/ql/test/library-tests/modules/ancestors.expected b/ruby/ql/test/library-tests/modules/ancestors.expected index 942bb00ccacc..b8ebd1d1a521 100644 --- a/ruby/ql/test/library-tests/modules/ancestors.expected +++ b/ruby/ql/test/library-tests/modules/ancestors.expected @@ -1,25 +1,21 @@ +#-----| BasicObject + #-----| Class #-----| super -> Module -#-----| EsotericInstanceMethods - -#-----| MyStruct - -#-----| Struct - -#-----| UnresolvedNamespace - -#-----| BasicObject - #-----| Complex #-----| super -> Numeric +#-----| EsotericInstanceMethods + #-----| FalseClass #-----| super -> Object #-----| Float #-----| super -> Numeric +#-----| MyStruct + #-----| NilClass #-----| super -> Object @@ -31,11 +27,15 @@ #-----| Rational #-----| super -> Numeric +#-----| Struct + #-----| Symbol #-----| TrueClass #-----| super -> Object +#-----| UnresolvedNamespace + #-----| UnresolvedNamespace::X1 #-----| UnresolvedNamespace::X1::X2 diff --git a/ruby/ql/test/library-tests/modules/ancestors.ql b/ruby/ql/test/library-tests/modules/ancestors.ql index 89f1c9ca256a..2c1e4e5af71a 100644 --- a/ruby/ql/test/library-tests/modules/ancestors.ql +++ b/ruby/ql/test/library-tests/modules/ancestors.ql @@ -5,22 +5,33 @@ import codeql.ruby.AST +int locationModuleRank(Module node) { + node = + rank[result](Module m, Location l | + l = m.getLocation() + | + m + order by + l.getFile().getBaseName(), l.getFile().getAbsolutePath(), l.getStartLine(), + l.getStartColumn(), l.getEndLine(), l.getEndColumn(), m.toString() + ) +} + +int stringModuleRank(Module node) { + node = rank[result](Module m | not exists(locationModuleRank(m)) | m order by m.toString()) +} + +int moduleRank(Module node) { + result = locationModuleRank(node) + max(stringModuleRank(_)) + or + result = stringModuleRank(node) +} + query predicate nodes(Module node, string key, string value) { key = "semmle.label" and value = node.toString() or key = "semmle.order" and - value = - any(int i | - node = - rank[i](Module m, Location l | - l = m.getLocation() - | - m - order by - l.getFile().getBaseName(), l.getFile().getAbsolutePath(), l.getStartLine(), - l.getStartColumn(), l.getEndLine(), l.getEndColumn(), m.toString() - ) - ).toString() + value = moduleRank(node).toString() } Module getATarget(Module source, string value) { diff --git a/ruby/ql/test/library-tests/modules/superclasses.expected b/ruby/ql/test/library-tests/modules/superclasses.expected index ca19e00a71ad..60acb625eaf2 100644 --- a/ruby/ql/test/library-tests/modules/superclasses.expected +++ b/ruby/ql/test/library-tests/modules/superclasses.expected @@ -1,25 +1,21 @@ +#-----| BasicObject + #-----| Class #-----| -> Module -#-----| EsotericInstanceMethods - -#-----| MyStruct - -#-----| Struct - -#-----| UnresolvedNamespace - -#-----| BasicObject - #-----| Complex #-----| -> Numeric +#-----| EsotericInstanceMethods + #-----| FalseClass #-----| -> Object #-----| Float #-----| -> Numeric +#-----| MyStruct + #-----| NilClass #-----| -> Object @@ -31,11 +27,15 @@ #-----| Rational #-----| -> Numeric +#-----| Struct + #-----| Symbol #-----| TrueClass #-----| -> Object +#-----| UnresolvedNamespace + #-----| UnresolvedNamespace::X1 #-----| UnresolvedNamespace::X1::X2 diff --git a/ruby/ql/test/library-tests/modules/superclasses.ql b/ruby/ql/test/library-tests/modules/superclasses.ql index e8f4fd027047..f3dfd43a80d7 100644 --- a/ruby/ql/test/library-tests/modules/superclasses.ql +++ b/ruby/ql/test/library-tests/modules/superclasses.ql @@ -5,22 +5,33 @@ import codeql.ruby.AST +int locationModuleRank(Module node) { + node = + rank[result](Module m, Location l | + l = m.getLocation() + | + m + order by + l.getFile().getBaseName(), l.getFile().getAbsolutePath(), l.getStartLine(), + l.getStartColumn(), l.getEndLine(), l.getEndColumn(), m.toString() + ) +} + +int stringModuleRank(Module node) { + node = rank[result](Module m | not exists(locationModuleRank(m)) | m order by m.toString()) +} + +int moduleRank(Module node) { + result = locationModuleRank(node) + max(stringModuleRank(_)) + or + result = stringModuleRank(node) +} + query predicate nodes(Module node, string key, string value) { key = "semmle.label" and value = node.toString() or key = "semmle.order" and - value = - any(int i | - node = - rank[i](Module m, Location l | - l = m.getLocation() - | - m - order by - l.getFile().getBaseName(), l.getFile().getAbsolutePath(), l.getStartLine(), - l.getStartColumn(), l.getEndLine(), l.getEndColumn(), m.toString() - ) - ).toString() + value = moduleRank(node).toString() } query predicate edges(Module source, Module target, string key, string value) {