Skip to content

Commit d67cf4b

Browse files
committed
Remove codeQL.model.showTypeModels config
This removes the `codeQL.model.showTypeModels` setting. We will now always show type models in the model editor. This also means that the "auto-generation mode" needs to change to `models` to ensure that the type models are actually shown to the user. This is done for Ruby, which is currently the only language to show type models.
1 parent c37bd99 commit d67cf4b

File tree

11 files changed

+37
-144
lines changed

11 files changed

+37
-144
lines changed

extensions/ql-vscode/src/config.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,6 @@ export async function setAutogenerateQlPacks(choice: AutogenerateQLPacks) {
725725
const MODEL_SETTING = new Setting("model", ROOT_SETTING);
726726
const FLOW_GENERATION = new Setting("flowGeneration", MODEL_SETTING);
727727
const LLM_GENERATION = new Setting("llmGeneration", MODEL_SETTING);
728-
const SHOW_TYPE_MODELS = new Setting("showTypeModels", MODEL_SETTING);
729728
const LLM_GENERATION_BATCH_SIZE = new Setting(
730729
"llmGenerationBatchSize",
731730
MODEL_SETTING,
@@ -749,7 +748,6 @@ export type ModelConfigPackVariables = {
749748
export interface ModelConfig {
750749
flowGeneration: boolean;
751750
llmGeneration: boolean;
752-
showTypeModels: boolean;
753751
getPackLocation(
754752
languageId: string,
755753
variables: ModelConfigPackVariables,
@@ -771,10 +769,6 @@ export class ModelConfigListener extends ConfigListener implements ModelConfig {
771769
return !!LLM_GENERATION.getValue<boolean>();
772770
}
773771

774-
public get showTypeModels(): boolean {
775-
return !!SHOW_TYPE_MODELS.getValue<boolean>();
776-
}
777-
778772
/**
779773
* Limits the number of candidates we send to the model in each request to avoid long requests.
780774
* Note that the model may return fewer than this number of candidates.

extensions/ql-vscode/src/model-editor/languages/models-as-data.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import type { AccessPathSuggestionRow } from "../suggestions";
2020
// This is a subset of the model config that doesn't import the vscode module.
2121
// It only includes settings that are actually used.
2222
export type ModelConfig = {
23-
showTypeModels: boolean;
23+
flowGeneration: boolean;
2424
};
2525

2626
/**
@@ -32,12 +32,12 @@ export type ModelConfig = {
3232
*/
3333
export function createModelConfig(modelConfig: ModelConfig): ModelConfig {
3434
return {
35-
showTypeModels: modelConfig.showTypeModels,
35+
flowGeneration: modelConfig.flowGeneration,
3636
};
3737
}
3838

3939
export const defaultModelConfig: ModelConfig = {
40-
showTypeModels: false,
40+
flowGeneration: false,
4141
};
4242

4343
type GenerateMethodDefinition<T> = (method: T) => DataTuple[];

extensions/ql-vscode/src/model-editor/languages/ruby/generate.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import type { BaseLogger } from "../../../common/logging";
22
import type { DecodedBqrs } from "../../../common/bqrs-cli-types";
3-
import type {
4-
GenerationContext,
5-
ModelsAsDataLanguage,
6-
} from "../models-as-data";
3+
import type { ModelsAsDataLanguage } from "../models-as-data";
74
import type { ModeledMethod } from "../../modeled-method";
85
import type { DataTuple } from "../../model-extension-file";
96

@@ -12,21 +9,10 @@ export function parseGenerateModelResults(
129
bqrs: DecodedBqrs,
1310
modelsAsDataLanguage: ModelsAsDataLanguage,
1411
logger: BaseLogger,
15-
{ config }: GenerationContext,
1612
): ModeledMethod[] {
1713
const modeledMethods: ModeledMethod[] = [];
1814

1915
for (const resultSetName in bqrs) {
20-
if (
21-
resultSetName ===
22-
modelsAsDataLanguage.predicates.type?.extensiblePredicate &&
23-
!config.showTypeModels
24-
) {
25-
// Don't load generated type results when type models are hidden. These are already
26-
// automatically generated on start-up.
27-
continue;
28-
}
29-
3016
const definition = Object.values(modelsAsDataLanguage.predicates).find(
3117
(definition) => definition.extensiblePredicate === resultSetName,
3218
);

extensions/ql-vscode/src/model-editor/languages/ruby/index.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ export const ruby: ModelsAsDataLanguage = {
170170
methodParameters: "",
171171
};
172172
},
173-
isHidden: ({ config }) => !config.showTypeModels,
174173
},
175174
},
176175
modelGeneration: {
@@ -210,7 +209,7 @@ export const ruby: ModelsAsDataLanguage = {
210209
},
211210
];
212211
},
213-
parseResults: (queryPath, bqrs, modelsAsDataLanguage, logger, context) => {
212+
parseResults: (queryPath, bqrs, modelsAsDataLanguage, logger) => {
214213
// Only parse type models when automatically generating models
215214
const typePredicate = modelsAsDataLanguage.predicates.type;
216215
if (!typePredicate) {
@@ -229,13 +228,12 @@ export const ruby: ModelsAsDataLanguage = {
229228
},
230229
modelsAsDataLanguage,
231230
logger,
232-
context,
233231
);
234232
},
235233
// Only enabled for framework mode when type models are hidden
236-
type: ({ mode, config }) =>
237-
mode === Mode.Framework && !config.showTypeModels
238-
? AutoModelGenerationType.SeparateFile
234+
type: ({ mode }) =>
235+
mode === Mode.Framework
236+
? AutoModelGenerationType.Models
239237
: AutoModelGenerationType.Disabled,
240238
},
241239
accessPathSuggestions: {

extensions/ql-vscode/src/model-editor/model-editor-view.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,6 @@ export class ModelEditorView extends AbstractWebview<
278278
modeledMethods,
279279
mode,
280280
this.cliServer,
281-
this.modelConfig,
282281
this.app.logger,
283282
);
284283

@@ -487,7 +486,6 @@ export class ModelEditorView extends AbstractWebview<
487486
this.extensionPack,
488487
this.language,
489488
this.cliServer,
490-
this.modelConfig,
491489
this.app.logger,
492490
);
493491
this.modelingStore.setModeledMethods(this.databaseItem, modeledMethods);

extensions/ql-vscode/src/model-editor/modeled-method-fs.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { load as loadYaml } from "js-yaml";
1212
import type { CodeQLCliServer } from "../codeql-cli/cli";
1313
import { pathsEqual } from "../common/files";
1414
import type { QueryLanguage } from "../common/query-language";
15-
import type { ModelConfig } from "./languages";
1615

1716
export const GENERATED_MODELS_SUFFIX = ".model.generated.yml";
1817

@@ -23,14 +22,12 @@ export async function saveModeledMethods(
2322
modeledMethods: Readonly<Record<string, readonly ModeledMethod[]>>,
2423
mode: Mode,
2524
cliServer: CodeQLCliServer,
26-
modelConfig: ModelConfig,
2725
logger: NotificationLogger,
2826
): Promise<void> {
2927
const existingModeledMethods = await loadModeledMethodFiles(
3028
extensionPack,
3129
language,
3230
cliServer,
33-
modelConfig,
3431
logger,
3532
);
3633

@@ -53,14 +50,9 @@ async function loadModeledMethodFiles(
5350
extensionPack: ExtensionPack,
5451
language: QueryLanguage,
5552
cliServer: CodeQLCliServer,
56-
modelConfig: ModelConfig,
5753
logger: NotificationLogger,
5854
): Promise<Record<string, Record<string, ModeledMethod[]>>> {
59-
const modelFiles = await listModelFiles(
60-
extensionPack.path,
61-
cliServer,
62-
modelConfig,
63-
);
55+
const modelFiles = await listModelFiles(extensionPack.path, cliServer);
6456

6557
const modeledMethodsByFile: Record<
6658
string,
@@ -92,7 +84,6 @@ export async function loadModeledMethods(
9284
extensionPack: ExtensionPack,
9385
language: QueryLanguage,
9486
cliServer: CodeQLCliServer,
95-
modelConfig: ModelConfig,
9687
logger: NotificationLogger,
9788
): Promise<Record<string, ModeledMethod[]>> {
9889
const existingModeledMethods: Record<string, ModeledMethod[]> = {};
@@ -101,7 +92,6 @@ export async function loadModeledMethods(
10192
extensionPack,
10293
language,
10394
cliServer,
104-
modelConfig,
10595
logger,
10696
);
10797
for (const modeledMethods of Object.values(modeledMethodsByFile)) {
@@ -120,7 +110,6 @@ export async function loadModeledMethods(
120110
export async function listModelFiles(
121111
extensionPackPath: string,
122112
cliServer: CodeQLCliServer,
123-
modelConfig: ModelConfig,
124113
): Promise<Set<string>> {
125114
const result = await cliServer.resolveExtensions(
126115
extensionPackPath,
@@ -131,11 +120,8 @@ export async function listModelFiles(
131120
for (const [path, extensions] of Object.entries(result.data)) {
132121
if (pathsEqual(path, extensionPackPath)) {
133122
for (const extension of extensions) {
134-
// We only load generated models when type models are shown
135-
if (
136-
!modelConfig.showTypeModels &&
137-
extension.file.endsWith(GENERATED_MODELS_SUFFIX)
138-
) {
123+
// We never load generated models
124+
if (extension.file.endsWith(GENERATED_MODELS_SUFFIX)) {
139125
continue;
140126
}
141127

extensions/ql-vscode/src/view/model-editor/__tests__/ModelTypeDropdown.spec.tsx

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ describe(ModelTypeDropdown.name, () => {
3636
);
3737
});
3838

39-
it("allows changing the type to 'Type' for Ruby when type models are shown", async () => {
39+
it("allows changing the type to 'Type' for Ruby", async () => {
4040
const method = createMethod();
4141
const modeledMethod = createNoneModeledMethod();
4242

@@ -47,10 +47,7 @@ describe(ModelTypeDropdown.name, () => {
4747
modelPending={false}
4848
onChange={onChange}
4949
method={method}
50-
modelConfig={{
51-
...defaultModelConfig,
52-
showTypeModels: true,
53-
}}
50+
modelConfig={defaultModelConfig}
5451
/>,
5552
);
5653

@@ -62,26 +59,6 @@ describe(ModelTypeDropdown.name, () => {
6259
);
6360
});
6461

65-
it("does not allow changing the type to 'Type' for Ruby when type models are not shown", async () => {
66-
const method = createMethod();
67-
const modeledMethod = createNoneModeledMethod();
68-
69-
render(
70-
<ModelTypeDropdown
71-
language={QueryLanguage.Ruby}
72-
modeledMethod={modeledMethod}
73-
modelPending={false}
74-
onChange={onChange}
75-
method={method}
76-
modelConfig={defaultModelConfig}
77-
/>,
78-
);
79-
80-
expect(
81-
screen.queryByRole("option", { name: "Type" }),
82-
).not.toBeInTheDocument();
83-
});
84-
8562
it("does not allow changing the type to 'Type' for Java", async () => {
8663
const method = createMethod();
8764
const modeledMethod = createNoneModeledMethod();

extensions/ql-vscode/test/unit-tests/model-editor/languages/ruby/generate.test.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import { ruby } from "../../../../../src/model-editor/languages/ruby";
44
import { createMockLogger } from "../../../../__mocks__/loggerMock";
55
import type { ModeledMethod } from "../../../../../src/model-editor/modeled-method";
66
import { EndpointType } from "../../../../../src/model-editor/method";
7-
import { Mode } from "../../../../../src/model-editor/shared/mode";
8-
import { defaultModelConfig } from "../../../../../src/model-editor/languages";
97

108
describe("parseGenerateModelResults", () => {
119
it("should return the results", async () => {
@@ -78,13 +76,6 @@ describe("parseGenerateModelResults", () => {
7876
bqrs,
7977
ruby,
8078
createMockLogger(),
81-
{
82-
mode: Mode.Framework,
83-
config: {
84-
...defaultModelConfig,
85-
showTypeModels: true,
86-
},
87-
},
8879
);
8980
expect(result).toEqual([
9081
{

extensions/ql-vscode/test/vscode-tests/cli-integration/model-editor/modeled-method-fs.test.ts

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { homedir, tmpdir } from "os";
1313
import { mkdir, rm } from "fs-extra";
1414
import { nanoid } from "nanoid";
1515
import { QueryLanguage } from "../../../../src/common/query-language";
16-
import { defaultModelConfig } from "../../../../src/model-editor/languages";
1716

1817
const dummyExtensionPackContents = `
1918
name: dummy/pack
@@ -136,11 +135,7 @@ describe("modeled-method-fs", () => {
136135
it("should return the empty set when the extension pack is empty", async () => {
137136
const extensionPackPath = writeExtensionPackFiles("extension-pack", []);
138137

139-
const modelFiles = await listModelFiles(
140-
extensionPackPath,
141-
cli,
142-
defaultModelConfig,
143-
);
138+
const modelFiles = await listModelFiles(extensionPackPath, cli);
144139
expect(modelFiles).toEqual(new Set());
145140
});
146141

@@ -150,31 +145,7 @@ describe("modeled-method-fs", () => {
150145
"library2.model.yml",
151146
]);
152147

153-
const modelFiles = await listModelFiles(
154-
extensionPackPath,
155-
cli,
156-
defaultModelConfig,
157-
);
158-
expect(modelFiles).toEqual(
159-
new Set([
160-
join("models", "library1.model.yml"),
161-
join("models", "library2.model.yml"),
162-
]),
163-
);
164-
});
165-
166-
it("should ignore generated type models when type models are hidden", async () => {
167-
const extensionPackPath = writeExtensionPackFiles("extension-pack", [
168-
"library1.model.yml",
169-
"library2.model.yml",
170-
"library.model.generated.yml",
171-
]);
172-
173-
const modelFiles = await listModelFiles(
174-
extensionPackPath,
175-
cli,
176-
defaultModelConfig,
177-
);
148+
const modelFiles = await listModelFiles(extensionPackPath, cli);
178149
expect(modelFiles).toEqual(
179150
new Set([
180151
join("models", "library1.model.yml"),
@@ -183,20 +154,16 @@ describe("modeled-method-fs", () => {
183154
);
184155
});
185156

186-
it("should include generated type models when type models are shown", async () => {
157+
it("should ignore generated models", async () => {
187158
const extensionPackPath = writeExtensionPackFiles("extension-pack", [
188159
"library1.model.yml",
189160
"library2.model.yml",
190161
"library.model.generated.yml",
191162
]);
192163

193-
const modelFiles = await listModelFiles(extensionPackPath, cli, {
194-
...defaultModelConfig,
195-
showTypeModels: true,
196-
});
164+
const modelFiles = await listModelFiles(extensionPackPath, cli);
197165
expect(modelFiles).toEqual(
198166
new Set([
199-
join("models", "library.model.generated.yml"),
200167
join("models", "library1.model.yml"),
201168
join("models", "library2.model.yml"),
202169
]),
@@ -209,11 +176,7 @@ describe("modeled-method-fs", () => {
209176
]);
210177
writeExtensionPackFiles("another-extension-pack", ["library2.model.yml"]);
211178

212-
const modelFiles = await listModelFiles(
213-
extensionPackPath,
214-
cli,
215-
defaultModelConfig,
216-
);
179+
const modelFiles = await listModelFiles(extensionPackPath, cli);
217180
expect(modelFiles).toEqual(
218181
new Set([join("models", "library1.model.yml")]),
219182
);
@@ -230,7 +193,6 @@ describe("modeled-method-fs", () => {
230193
makeExtensionPack(extensionPackPath),
231194
QueryLanguage.Java,
232195
cli,
233-
defaultModelConfig,
234196
extLogger,
235197
);
236198

extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/generate.test.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,7 @@ describe("runGenerateQueries", () => {
138138
createMockLogger(),
139139
{
140140
mode: Mode.Framework,
141-
config: {
142-
...defaultModelConfig,
143-
showTypeModels: true,
144-
},
141+
config: defaultModelConfig,
145142
},
146143
),
147144
);

0 commit comments

Comments
 (0)