diff --git a/extensions/ql-vscode/src/model-editor/flow-model-queries.ts b/extensions/ql-vscode/src/model-editor/flow-model-queries.ts index 62552b036..c5f6b8b7d 100644 --- a/extensions/ql-vscode/src/model-editor/flow-model-queries.ts +++ b/extensions/ql-vscode/src/model-editor/flow-model-queries.ts @@ -156,7 +156,7 @@ async function runSingleFlowQuery( // Interpret the results const modelsAsDataLanguage = getModelsAsDataLanguage(language); - const definition = modelsAsDataLanguage[type]; + const definition = modelsAsDataLanguage.predicates[type]; const bqrsPath = completedQuery.outputDir.bqrsPath; diff --git a/extensions/ql-vscode/src/model-editor/languages/models-as-data.ts b/extensions/ql-vscode/src/model-editor/languages/models-as-data.ts index 4ea0531b8..77390f9e7 100644 --- a/extensions/ql-vscode/src/model-editor/languages/models-as-data.ts +++ b/extensions/ql-vscode/src/model-editor/languages/models-as-data.ts @@ -6,14 +6,18 @@ type ReadModeledMethod = (row: DataTuple[]) => ModeledMethod; export type ModelsAsDataLanguageModelType = Exclude; -export type ModelsAsDataLanguageModel = { +export type ModelsAsDataLanguagePredicate = { extensiblePredicate: string; supportedKinds: string[]; generateMethodDefinition: GenerateMethodDefinition; readModeledMethod: ReadModeledMethod; }; -export type ModelsAsDataLanguage = Record< +export type ModelsAsDataLanguagePredicates = Record< ModelsAsDataLanguageModelType, - ModelsAsDataLanguageModel + ModelsAsDataLanguagePredicate >; + +export type ModelsAsDataLanguage = { + predicates: ModelsAsDataLanguagePredicates; +}; diff --git a/extensions/ql-vscode/src/model-editor/languages/static.ts b/extensions/ql-vscode/src/model-editor/languages/static.ts index d80454a6d..3e2a46b35 100644 --- a/extensions/ql-vscode/src/model-editor/languages/static.ts +++ b/extensions/ql-vscode/src/model-editor/languages/static.ts @@ -8,125 +8,127 @@ function readRowToMethod(row: DataTuple[]): string { } export const staticLanguage: ModelsAsDataLanguage = { - source: { - extensiblePredicate: sharedExtensiblePredicates.source, - supportedKinds: sharedKinds.source, - // extensible predicate sourceModel( - // string package, string type, boolean subtypes, string name, string signature, string ext, - // string output, string kind, string provenance - // ); - generateMethodDefinition: (method) => [ - method.packageName, - method.typeName, - true, - method.methodName, - method.methodParameters, - "", - method.output, - method.kind, - method.provenance, - ], - readModeledMethod: (row) => ({ - type: "source" as ModeledMethodType, - input: "", - output: row[6] as string, - kind: row[7] as string, - provenance: row[8] as Provenance, - signature: readRowToMethod(row), - packageName: row[0] as string, - typeName: row[1] as string, - methodName: row[3] as string, - methodParameters: row[4] as string, - }), - }, - sink: { - extensiblePredicate: sharedExtensiblePredicates.sink, - supportedKinds: sharedKinds.sink, - // extensible predicate sinkModel( - // string package, string type, boolean subtypes, string name, string signature, string ext, - // string input, string kind, string provenance - // ); - generateMethodDefinition: (method) => [ - method.packageName, - method.typeName, - true, - method.methodName, - method.methodParameters, - "", - method.input, - method.kind, - method.provenance, - ], - readModeledMethod: (row) => ({ - type: "sink", - input: row[6] as string, - output: "", - kind: row[7] as string, - provenance: row[8] as Provenance, - signature: readRowToMethod(row), - packageName: row[0] as string, - typeName: row[1] as string, - methodName: row[3] as string, - methodParameters: row[4] as string, - }), - }, - summary: { - extensiblePredicate: sharedExtensiblePredicates.summary, - supportedKinds: sharedKinds.summary, - // extensible predicate summaryModel( - // string package, string type, boolean subtypes, string name, string signature, string ext, - // string input, string output, string kind, string provenance - // ); - generateMethodDefinition: (method) => [ - method.packageName, - method.typeName, - true, - method.methodName, - method.methodParameters, - "", - method.input, - method.output, - method.kind, - method.provenance, - ], - readModeledMethod: (row) => ({ - type: "summary", - input: row[6] as string, - output: row[7] as string, - kind: row[8] as string, - provenance: row[9] as Provenance, - signature: readRowToMethod(row), - packageName: row[0] as string, - typeName: row[1] as string, - methodName: row[3] as string, - methodParameters: row[4] as string, - }), - }, - neutral: { - extensiblePredicate: sharedExtensiblePredicates.neutral, - supportedKinds: sharedKinds.neutral, - // extensible predicate neutralModel( - // string package, string type, string name, string signature, string kind, string provenance - // ); - generateMethodDefinition: (method) => [ - method.packageName, - method.typeName, - method.methodName, - method.methodParameters, - method.kind, - method.provenance, - ], - readModeledMethod: (row) => ({ - type: "neutral", - input: "", - output: "", - kind: row[4] as string, - provenance: row[5] as Provenance, - signature: `${row[0]}.${row[1]}#${row[2]}${row[3]}`, - packageName: row[0] as string, - typeName: row[1] as string, - methodName: row[2] as string, - methodParameters: row[3] as string, - }), + predicates: { + source: { + extensiblePredicate: sharedExtensiblePredicates.source, + supportedKinds: sharedKinds.source, + // extensible predicate sourceModel( + // string package, string type, boolean subtypes, string name, string signature, string ext, + // string output, string kind, string provenance + // ); + generateMethodDefinition: (method) => [ + method.packageName, + method.typeName, + true, + method.methodName, + method.methodParameters, + "", + method.output, + method.kind, + method.provenance, + ], + readModeledMethod: (row) => ({ + type: "source" as ModeledMethodType, + input: "", + output: row[6] as string, + kind: row[7] as string, + provenance: row[8] as Provenance, + signature: readRowToMethod(row), + packageName: row[0] as string, + typeName: row[1] as string, + methodName: row[3] as string, + methodParameters: row[4] as string, + }), + }, + sink: { + extensiblePredicate: sharedExtensiblePredicates.sink, + supportedKinds: sharedKinds.sink, + // extensible predicate sinkModel( + // string package, string type, boolean subtypes, string name, string signature, string ext, + // string input, string kind, string provenance + // ); + generateMethodDefinition: (method) => [ + method.packageName, + method.typeName, + true, + method.methodName, + method.methodParameters, + "", + method.input, + method.kind, + method.provenance, + ], + readModeledMethod: (row) => ({ + type: "sink", + input: row[6] as string, + output: "", + kind: row[7] as string, + provenance: row[8] as Provenance, + signature: readRowToMethod(row), + packageName: row[0] as string, + typeName: row[1] as string, + methodName: row[3] as string, + methodParameters: row[4] as string, + }), + }, + summary: { + extensiblePredicate: sharedExtensiblePredicates.summary, + supportedKinds: sharedKinds.summary, + // extensible predicate summaryModel( + // string package, string type, boolean subtypes, string name, string signature, string ext, + // string input, string output, string kind, string provenance + // ); + generateMethodDefinition: (method) => [ + method.packageName, + method.typeName, + true, + method.methodName, + method.methodParameters, + "", + method.input, + method.output, + method.kind, + method.provenance, + ], + readModeledMethod: (row) => ({ + type: "summary", + input: row[6] as string, + output: row[7] as string, + kind: row[8] as string, + provenance: row[9] as Provenance, + signature: readRowToMethod(row), + packageName: row[0] as string, + typeName: row[1] as string, + methodName: row[3] as string, + methodParameters: row[4] as string, + }), + }, + neutral: { + extensiblePredicate: sharedExtensiblePredicates.neutral, + supportedKinds: sharedKinds.neutral, + // extensible predicate neutralModel( + // string package, string type, string name, string signature, string kind, string provenance + // ); + generateMethodDefinition: (method) => [ + method.packageName, + method.typeName, + method.methodName, + method.methodParameters, + method.kind, + method.provenance, + ], + readModeledMethod: (row) => ({ + type: "neutral", + input: "", + output: "", + kind: row[4] as string, + provenance: row[5] as Provenance, + signature: `${row[0]}.${row[1]}#${row[2]}${row[3]}`, + packageName: row[0] as string, + typeName: row[1] as string, + methodName: row[2] as string, + methodParameters: row[3] as string, + }), + }, }, }; diff --git a/extensions/ql-vscode/src/model-editor/yaml.ts b/extensions/ql-vscode/src/model-editor/yaml.ts index 726b0197d..196e4efad 100644 --- a/extensions/ql-vscode/src/model-editor/yaml.ts +++ b/extensions/ql-vscode/src/model-editor/yaml.ts @@ -4,7 +4,7 @@ import { Method } from "./method"; import { ModeledMethod, ModeledMethodType } from "./modeled-method"; import { getModelsAsDataLanguage, - ModelsAsDataLanguageModel, + ModelsAsDataLanguagePredicate, } from "./languages"; import * as modelExtensionFileSchema from "./model-extension-file.schema.json"; @@ -18,7 +18,7 @@ const modelExtensionFileSchemaValidate = ajv.compile(modelExtensionFileSchema); function createDataProperty( methods: readonly ModeledMethod[], - definition: ModelsAsDataLanguageModel, + definition: ModelsAsDataLanguagePredicate, ) { if (methods.length === 0) { return " []"; @@ -56,7 +56,7 @@ export function createDataExtensionYaml( } } - const extensions = Object.entries(modelsAsDataLanguage).map( + const extensions = Object.entries(modelsAsDataLanguage.predicates).map( ([type, definition]) => ` - addsTo: pack: codeql/${language}-all extensible: ${definition.extensiblePredicate} @@ -260,7 +260,7 @@ export function loadDataExtensionYaml( const extensible = addsTo.extensible; const data = extension.data; - const definition = Object.values(modelsAsDataLanguage).find( + const definition = Object.values(modelsAsDataLanguage.predicates).find( (definition) => definition.extensiblePredicate === extensible, ); if (!definition) { diff --git a/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx index 0a74327e5..fb5e2d738 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx @@ -26,7 +26,7 @@ export const ModelKindDropdown = ({ const modelsAsDataLanguage = getModelsAsDataLanguage(language); return modeledMethod?.type && modeledMethod.type !== "none" - ? modelsAsDataLanguage[modeledMethod.type] + ? modelsAsDataLanguage.predicates[modeledMethod.type] : undefined; }, [language, modeledMethod?.type]);