diff --git a/ql/src/ideContextual.qll b/ql/src/ideContextual.qll new file mode 100644 index 00000000000..97360578ea5 --- /dev/null +++ b/ql/src/ideContextual.qll @@ -0,0 +1,9 @@ +/** + * Provides classes and predicates related to contextual queries + * in the code viewer. + */ + +import go + +cached +File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } diff --git a/ql/src/localDefinitions.ql b/ql/src/localDefinitions.ql index 9618d8f8637..1825353a79b 100644 --- a/ql/src/localDefinitions.ql +++ b/ql/src/localDefinitions.ql @@ -8,12 +8,10 @@ */ import go +import ideContextual external string selectedSourceFile(); -cached -File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } - from Ident def, Ident use, Entity e where use.uses(e) and def.declares(e) and use.getFile() = getEncodedFile(selectedSourceFile()) select use, def, "V" diff --git a/ql/src/localReferences.ql b/ql/src/localReferences.ql index ddd556fc8b3..8aa8a50395f 100644 --- a/ql/src/localReferences.ql +++ b/ql/src/localReferences.ql @@ -8,12 +8,10 @@ */ import go +import ideContextual external string selectedSourceFile(); -cached -File getEncodedFile(string name) { result.getAbsolutePath().replaceAll(":", "_") = name } - from Ident def, Ident use, Entity e where use.uses(e) and def.declares(e) and def.getFile() = getEncodedFile(selectedSourceFile()) select use, def, "V" diff --git a/ql/src/printAst.ql b/ql/src/printAst.ql new file mode 100644 index 00000000000..adc1dd1fb48 --- /dev/null +++ b/ql/src/printAst.ql @@ -0,0 +1,26 @@ +/** + * @name Print AST + * @description Outputs a representation of a file's Abstract Syntax Tree. This + * query is used by the VS Code extension. + * @id go/print-ast + * @kind graph + * @tags ide-contextual-queries/print-ast + */ + +import go +import semmle.go.PrintAst +import ideContextual + +/** + * The source file to generate an AST from. + */ +external string selectedSourceFile(); + +/** + * Hook to customize the functions printed by this query. + */ +class Cfg extends PrintAstConfiguration { + override predicate shouldPrintFunction(FuncDef func) { + func.getFile() = getEncodedFile(selectedSourceFile()) + } +}