From 6a41028d3a236b167ca6d3703e5249d51be56b70 Mon Sep 17 00:00:00 2001 From: alexet Date: Mon, 13 Jan 2020 18:36:55 +0000 Subject: [PATCH 1/9] CPP:Add preliminary local jump to def queries --- cpp/ql/src/definitions.qll | 2 +- cpp/ql/src/localDefinitions.ql | 21 +++++++++++++++++++++ cpp/ql/src/localReferences.ql | 21 +++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 cpp/ql/src/localDefinitions.ql create mode 100644 cpp/ql/src/localReferences.ql diff --git a/cpp/ql/src/definitions.qll b/cpp/ql/src/definitions.qll index 4af638e07b98..40ce9335731e 100644 --- a/cpp/ql/src/definitions.qll +++ b/cpp/ql/src/definitions.qll @@ -132,7 +132,7 @@ private predicate constructorCallTypeMention(ConstructorCall cc, TypeMention tm) * - `"X"` for macro accesses * - `"I"` for import / include directives */ -Top definitionOf(Top e, string kind) { +cached Top definitionOf(Top e, string kind) { ( // call -> function called kind = "M" and diff --git a/cpp/ql/src/localDefinitions.ql b/cpp/ql/src/localDefinitions.ql new file mode 100644 index 000000000000..1e7225d86f4b --- /dev/null +++ b/cpp/ql/src/localDefinitions.ql @@ -0,0 +1,21 @@ +/** + * @name Jump-to-definition links + * @description Generates use-definition pairs that provide the data + * for jump-to-definition in the code viewer. + * @kind definitions + * @id cpp/jump-to-definition + */ + +import definitions + +external string selectedSourceFile(); + +cached File getEncodedFile(string name) { + result.getAbsolutePath().replaceAll(":", "_") = name +} + + + +from Top e, Top def, string kind +where def = definitionOf(e, kind) and e.getFile() = getEncodedFile(selectedSourceFile()) +select e, def, kind diff --git a/cpp/ql/src/localReferences.ql b/cpp/ql/src/localReferences.ql new file mode 100644 index 000000000000..b8ace7006b00 --- /dev/null +++ b/cpp/ql/src/localReferences.ql @@ -0,0 +1,21 @@ +/** + * @name Jump-to-definition links + * @description Generates use-definition pairs that provide the data + * for jump-to-definition in the code viewer. + * @kind definitions + * @id cpp/jump-to-definition + */ + +import definitions + +external string selectedSourceFile(); + +cached File getEncodedFile(string name) { + result.getAbsolutePath().replaceAll(":", "_") = name +} + + + +from Top e, Top def, string kind +where def = definitionOf(e, kind) and def.getFile() = getEncodedFile(selectedSourceFile()) +select e, def, kind From aa7a0e68793be9fabecc2612fb6f70ca15045930 Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Mon, 13 Apr 2020 08:53:40 -0400 Subject: [PATCH 2/9] CPP: Add tags for VS Code jump-to-defition --- cpp/ql/src/localDefinitions.ql | 1 + cpp/ql/src/localReferences.ql | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/src/localDefinitions.ql b/cpp/ql/src/localDefinitions.ql index 1e7225d86f4b..426dadef3824 100644 --- a/cpp/ql/src/localDefinitions.ql +++ b/cpp/ql/src/localDefinitions.ql @@ -4,6 +4,7 @@ * for jump-to-definition in the code viewer. * @kind definitions * @id cpp/jump-to-definition + * @tags local-definitions */ import definitions diff --git a/cpp/ql/src/localReferences.ql b/cpp/ql/src/localReferences.ql index b8ace7006b00..2a010512fa0b 100644 --- a/cpp/ql/src/localReferences.ql +++ b/cpp/ql/src/localReferences.ql @@ -4,6 +4,7 @@ * for jump-to-definition in the code viewer. * @kind definitions * @id cpp/jump-to-definition + * @tags local-references */ import definitions @@ -11,11 +12,9 @@ import definitions external string selectedSourceFile(); cached File getEncodedFile(string name) { - result.getAbsolutePath().replaceAll(":", "_") = name + result.getAbsolutePath().replaceAll(":", "_") = name } - - from Top e, Top def, string kind where def = definitionOf(e, kind) and def.getFile() = getEncodedFile(selectedSourceFile()) select e, def, kind From 5390f4b25599a49df540cf225269601d71be1f40 Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Tue, 21 Apr 2020 13:13:08 -0400 Subject: [PATCH 3/9] C++: Scope tags meant for ide contextual queries --- cpp/ql/src/localDefinitions.ql | 2 +- cpp/ql/src/localReferences.ql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/localDefinitions.ql b/cpp/ql/src/localDefinitions.ql index 426dadef3824..2a9678b6423f 100644 --- a/cpp/ql/src/localDefinitions.ql +++ b/cpp/ql/src/localDefinitions.ql @@ -4,7 +4,7 @@ * for jump-to-definition in the code viewer. * @kind definitions * @id cpp/jump-to-definition - * @tags local-definitions + * @tags ide-contextual-queries/local-definitions */ import definitions diff --git a/cpp/ql/src/localReferences.ql b/cpp/ql/src/localReferences.ql index 2a010512fa0b..5db5e6550d7e 100644 --- a/cpp/ql/src/localReferences.ql +++ b/cpp/ql/src/localReferences.ql @@ -4,7 +4,7 @@ * for jump-to-definition in the code viewer. * @kind definitions * @id cpp/jump-to-definition - * @tags local-references + * @tags ide-contextual-queries/local-references */ import definitions From 3b7fecab93997e25a53341ac963f01124e8cc8f6 Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Tue, 21 Apr 2020 16:04:25 -0400 Subject: [PATCH 4/9] C++: Fix duplicate query ids --- cpp/ql/src/localDefinitions.ql | 2 +- cpp/ql/src/localReferences.ql | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/localDefinitions.ql b/cpp/ql/src/localDefinitions.ql index 2a9678b6423f..a755f58200f2 100644 --- a/cpp/ql/src/localDefinitions.ql +++ b/cpp/ql/src/localDefinitions.ql @@ -3,7 +3,7 @@ * @description Generates use-definition pairs that provide the data * for jump-to-definition in the code viewer. * @kind definitions - * @id cpp/jump-to-definition + * @id cpp/ide-jump-to-definition * @tags ide-contextual-queries/local-definitions */ diff --git a/cpp/ql/src/localReferences.ql b/cpp/ql/src/localReferences.ql index 5db5e6550d7e..e0cbe5108429 100644 --- a/cpp/ql/src/localReferences.ql +++ b/cpp/ql/src/localReferences.ql @@ -3,7 +3,7 @@ * @description Generates use-definition pairs that provide the data * for jump-to-definition in the code viewer. * @kind definitions - * @id cpp/jump-to-definition + * @id cpp/ide-find-references * @tags ide-contextual-queries/local-references */ From b341f768de02cd1322cc2ba0dff87d81d74de104 Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Wed, 22 Apr 2020 12:24:15 -0400 Subject: [PATCH 5/9] C++: Fix formatting --- cpp/ql/src/definitions.qll | 3 ++- cpp/ql/src/localDefinitions.ql | 7 ++----- cpp/ql/src/localReferences.ql | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/cpp/ql/src/definitions.qll b/cpp/ql/src/definitions.qll index 40ce9335731e..31d41b52c5a0 100644 --- a/cpp/ql/src/definitions.qll +++ b/cpp/ql/src/definitions.qll @@ -132,7 +132,8 @@ private predicate constructorCallTypeMention(ConstructorCall cc, TypeMention tm) * - `"X"` for macro accesses * - `"I"` for import / include directives */ -cached Top definitionOf(Top e, string kind) { +cached +Top definitionOf(Top e, string kind) { ( // call -> function called kind = "M" and diff --git a/cpp/ql/src/localDefinitions.ql b/cpp/ql/src/localDefinitions.ql index a755f58200f2..4cd61c0a59af 100644 --- a/cpp/ql/src/localDefinitions.ql +++ b/cpp/ql/src/localDefinitions.ql @@ -11,11 +11,8 @@ import definitions external string selectedSourceFile(); -cached File getEncodedFile(string name) { - result.getAbsolutePath().replaceAll(":", "_") = name -} - - +cached +File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } from Top e, Top def, string kind where def = definitionOf(e, kind) and e.getFile() = getEncodedFile(selectedSourceFile()) diff --git a/cpp/ql/src/localReferences.ql b/cpp/ql/src/localReferences.ql index e0cbe5108429..5c5850bba16c 100644 --- a/cpp/ql/src/localReferences.ql +++ b/cpp/ql/src/localReferences.ql @@ -11,9 +11,8 @@ import definitions external string selectedSourceFile(); -cached File getEncodedFile(string name) { - result.getAbsolutePath().replaceAll(":", "_") = name -} +cached +File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } from Top e, Top def, string kind where def = definitionOf(e, kind) and def.getFile() = getEncodedFile(selectedSourceFile()) From f0a7ff0d9d7f3f413c3ce6835b6871ab5ae187cf Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Wed, 22 Apr 2020 12:53:20 -0400 Subject: [PATCH 6/9] Exclude ide queries from lgtm suite. --- cpp/ql/src/codeql-suites/cpp-lgtm-full.qls | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/ql/src/codeql-suites/cpp-lgtm-full.qls b/cpp/ql/src/codeql-suites/cpp-lgtm-full.qls index 2036584e44c7..e9fda1cdb9e8 100644 --- a/cpp/ql/src/codeql-suites/cpp-lgtm-full.qls +++ b/cpp/ql/src/codeql-suites/cpp-lgtm-full.qls @@ -12,3 +12,8 @@ - Critical/FileNeverClosed.ql - Critical/MemoryMayNotBeFreed.ql - Critical/MemoryNeverFreed.ql +# These are only for IDE use. +- exclude: + tags contain: + - ide-contextual-queries/local-definitions + - ide-contextual-queries/local-references From 0500715bc185f1c690d8d21da926f4feebc18dda Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Fri, 24 Apr 2020 12:30:54 -0400 Subject: [PATCH 7/9] C++: Fix docstring in localReferences.ql --- cpp/ql/src/localReferences.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/localReferences.ql b/cpp/ql/src/localReferences.ql index 5c5850bba16c..98fda97dd5ac 100644 --- a/cpp/ql/src/localReferences.ql +++ b/cpp/ql/src/localReferences.ql @@ -1,7 +1,7 @@ /** - * @name Jump-to-definition links + * @name Find-references links * @description Generates use-definition pairs that provide the data - * for jump-to-definition in the code viewer. + * for find-references in the code viewer. * @kind definitions * @id cpp/ide-find-references * @tags ide-contextual-queries/local-references From e73833eda611f807288bedbd73822cef3fc14607 Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Wed, 29 Apr 2020 09:53:13 -0400 Subject: [PATCH 8/9] C++: Factor out file encoding predicate --- cpp/ql/src/definitions.qll | 3 +++ cpp/ql/src/localDefinitions.ql | 3 --- cpp/ql/src/localReferences.ql | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cpp/ql/src/definitions.qll b/cpp/ql/src/definitions.qll index 31d41b52c5a0..4dab89c91aa6 100644 --- a/cpp/ql/src/definitions.qll +++ b/cpp/ql/src/definitions.qll @@ -214,3 +214,6 @@ Top definitionOf(Top e, string kind) { // later on. strictcount(result.getLocation()) < 10 } + +cached +File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } diff --git a/cpp/ql/src/localDefinitions.ql b/cpp/ql/src/localDefinitions.ql index 4cd61c0a59af..1e525d8e2ddb 100644 --- a/cpp/ql/src/localDefinitions.ql +++ b/cpp/ql/src/localDefinitions.ql @@ -11,9 +11,6 @@ import definitions external string selectedSourceFile(); -cached -File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } - from Top e, Top def, string kind where def = definitionOf(e, kind) and e.getFile() = getEncodedFile(selectedSourceFile()) select e, def, kind diff --git a/cpp/ql/src/localReferences.ql b/cpp/ql/src/localReferences.ql index 98fda97dd5ac..13ca4dd25613 100644 --- a/cpp/ql/src/localReferences.ql +++ b/cpp/ql/src/localReferences.ql @@ -11,9 +11,6 @@ import definitions external string selectedSourceFile(); -cached -File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } - from Top e, Top def, string kind where def = definitionOf(e, kind) and def.getFile() = getEncodedFile(selectedSourceFile()) select e, def, kind From 62c128f9a4c371d2761e717fcc1e20b7b1f59c2f Mon Sep 17 00:00:00 2001 From: Jason Reed Date: Wed, 29 Apr 2020 11:06:06 -0400 Subject: [PATCH 9/9] C++: Add QLDoc. --- cpp/ql/src/definitions.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/ql/src/definitions.qll b/cpp/ql/src/definitions.qll index 4dab89c91aa6..b42903953b60 100644 --- a/cpp/ql/src/definitions.qll +++ b/cpp/ql/src/definitions.qll @@ -215,5 +215,10 @@ Top definitionOf(Top e, string kind) { strictcount(result.getLocation()) < 10 } +/** + * Returns an appropriately encoded version of a filename `name` + * passed by the VS Code extension in order to coincide with the + * output of `.getFile()` on locatable entities. + */ cached File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name }