Skip to content

Commit 7dceded

Browse files
committed
Use showTypeModels setting instead of canary mode
1 parent 32d981a commit 7dceded

File tree

8 files changed

+96
-19
lines changed

8 files changed

+96
-19
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export type ModelsAsDataLanguagePredicate<T> = {
7070

7171
export type GenerationContext = {
7272
mode: Mode;
73-
isCanary: boolean;
73+
config: ModelConfig;
7474
};
7575

7676
type ParseGenerationResults = (

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ export function parseGenerateModelResults(
1212
bqrs: DecodedBqrs,
1313
modelsAsDataLanguage: ModelsAsDataLanguage,
1414
logger: BaseLogger,
15-
{ isCanary }: GenerationContext,
15+
{ config }: GenerationContext,
1616
): ModeledMethod[] {
1717
const modeledMethods: ModeledMethod[] = [];
1818

1919
for (const resultSetName in bqrs) {
2020
if (
2121
resultSetName ===
2222
modelsAsDataLanguage.predicates.type?.extensiblePredicate &&
23-
!isCanary
23+
!config.showTypeModels
2424
) {
25-
// Don't load generated type results in non-canary mode. These are already automatically
26-
// generated on start-up.
25+
// Don't load generated type results when type models are hidden. These are already
26+
// automatically generated on start-up.
2727
continue;
2828
}
2929

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,9 @@ export const ruby: ModelsAsDataLanguage = {
209209
},
210210
];
211211
},
212-
// Only enabled for framework mode in non-canary
213-
enabled: ({ mode, isCanary }) => mode === Mode.Framework && !isCanary,
212+
// Only enabled for framework mode when type models are hidden
213+
enabled: ({ mode, config }) =>
214+
mode === Mode.Framework && !config.showTypeModels,
214215
},
215216
accessPathSuggestions: {
216217
queryConstraints: (mode) => ({

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ import type { Method } from "./method";
4040
import type { ModeledMethod } from "./modeled-method";
4141
import type { ExtensionPack } from "./shared/extension-pack";
4242
import type { ModelConfigListener } from "../config";
43-
import { isCanary } from "../config";
4443
import { Mode } from "./shared/mode";
4544
import {
4645
GENERATED_MODELS_SUFFIX,
@@ -273,6 +272,7 @@ export class ModelEditorView extends AbstractWebview<
273272
modeledMethods,
274273
mode,
275274
this.cliServer,
275+
this.modelConfig,
276276
this.app.logger,
277277
);
278278

@@ -490,6 +490,7 @@ export class ModelEditorView extends AbstractWebview<
490490
this.extensionPack,
491491
this.language,
492492
this.cliServer,
493+
this.modelConfig,
493494
this.app.logger,
494495
);
495496
this.modelingStore.setModeledMethods(this.databaseItem, modeledMethods);
@@ -663,7 +664,7 @@ export class ModelEditorView extends AbstractWebview<
663664
this.app.logger,
664665
{
665666
mode,
666-
isCanary: isCanary(),
667+
config: this.modelConfig,
667668
},
668669
);
669670

@@ -701,7 +702,7 @@ export class ModelEditorView extends AbstractWebview<
701702

702703
if (
703704
autoModelGeneration.enabled &&
704-
!autoModelGeneration.enabled({ mode, isCanary: isCanary() })
705+
!autoModelGeneration.enabled({ mode, config: this.modelConfig })
705706
) {
706707
return;
707708
}

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

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ 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 { isCanary } from "../config";
15+
import type { ModelConfig } from "./languages";
1616

1717
export const GENERATED_MODELS_SUFFIX = ".model.generated.yml";
1818

@@ -23,12 +23,14 @@ export async function saveModeledMethods(
2323
modeledMethods: Readonly<Record<string, readonly ModeledMethod[]>>,
2424
mode: Mode,
2525
cliServer: CodeQLCliServer,
26+
modelConfig: ModelConfig,
2627
logger: NotificationLogger,
2728
): Promise<void> {
2829
const existingModeledMethods = await loadModeledMethodFiles(
2930
extensionPack,
3031
language,
3132
cliServer,
33+
modelConfig,
3234
logger,
3335
);
3436

@@ -51,9 +53,14 @@ async function loadModeledMethodFiles(
5153
extensionPack: ExtensionPack,
5254
language: QueryLanguage,
5355
cliServer: CodeQLCliServer,
56+
modelConfig: ModelConfig,
5457
logger: NotificationLogger,
5558
): Promise<Record<string, Record<string, ModeledMethod[]>>> {
56-
const modelFiles = await listModelFiles(extensionPack.path, cliServer);
59+
const modelFiles = await listModelFiles(
60+
extensionPack.path,
61+
cliServer,
62+
modelConfig,
63+
);
5764

5865
const modeledMethodsByFile: Record<
5966
string,
@@ -85,6 +92,7 @@ export async function loadModeledMethods(
8592
extensionPack: ExtensionPack,
8693
language: QueryLanguage,
8794
cliServer: CodeQLCliServer,
95+
modelConfig: ModelConfig,
8896
logger: NotificationLogger,
8997
): Promise<Record<string, ModeledMethod[]>> {
9098
const existingModeledMethods: Record<string, ModeledMethod[]> = {};
@@ -93,6 +101,7 @@ export async function loadModeledMethods(
93101
extensionPack,
94102
language,
95103
cliServer,
104+
modelConfig,
96105
logger,
97106
);
98107
for (const modeledMethods of Object.values(modeledMethodsByFile)) {
@@ -111,6 +120,7 @@ export async function loadModeledMethods(
111120
export async function listModelFiles(
112121
extensionPackPath: string,
113122
cliServer: CodeQLCliServer,
123+
modelConfig: ModelConfig,
114124
): Promise<Set<string>> {
115125
const result = await cliServer.resolveExtensions(
116126
extensionPackPath,
@@ -121,8 +131,11 @@ export async function listModelFiles(
121131
for (const [path, extensions] of Object.entries(result.data)) {
122132
if (pathsEqual(path, extensionPackPath)) {
123133
for (const extension of extensions) {
124-
// We only load generated models in canary mode
125-
if (!isCanary() && extension.file.endsWith(GENERATED_MODELS_SUFFIX)) {
134+
// We only load generated models when type models are shown
135+
if (
136+
!modelConfig.showTypeModels &&
137+
extension.file.endsWith(GENERATED_MODELS_SUFFIX)
138+
) {
126139
continue;
127140
}
128141

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { createMockLogger } from "../../../../__mocks__/loggerMock";
55
import type { ModeledMethod } from "../../../../../src/model-editor/modeled-method";
66
import { EndpointType } from "../../../../../src/model-editor/method";
77
import { Mode } from "../../../../../src/model-editor/shared/mode";
8+
import { defaultModelConfig } from "../../../../../src/model-editor/languages";
89

910
describe("parseGenerateModelResults", () => {
1011
it("should return the results", async () => {
@@ -78,8 +79,11 @@ describe("parseGenerateModelResults", () => {
7879
ruby,
7980
createMockLogger(),
8081
{
81-
isCanary: true,
8282
mode: Mode.Framework,
83+
config: {
84+
...defaultModelConfig,
85+
showTypeModels: true,
86+
},
8387
},
8488
);
8589
expect(result).toEqual([

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

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ 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";
1617

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

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

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

148-
const modelFiles = await listModelFiles(extensionPackPath, cli);
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+
);
149178
expect(modelFiles).toEqual(
150179
new Set([
151180
join("models", "library1.model.yml"),
@@ -154,13 +183,37 @@ describe("modeled-method-fs", () => {
154183
);
155184
});
156185

186+
it("should include generated type models when type models are shown", async () => {
187+
const extensionPackPath = writeExtensionPackFiles("extension-pack", [
188+
"library1.model.yml",
189+
"library2.model.yml",
190+
"library.model.generated.yml",
191+
]);
192+
193+
const modelFiles = await listModelFiles(extensionPackPath, cli, {
194+
...defaultModelConfig,
195+
showTypeModels: true,
196+
});
197+
expect(modelFiles).toEqual(
198+
new Set([
199+
join("models", "library.model.generated.yml"),
200+
join("models", "library1.model.yml"),
201+
join("models", "library2.model.yml"),
202+
]),
203+
);
204+
});
205+
157206
it("should ignore model files from other extension packs", async () => {
158207
const extensionPackPath = writeExtensionPackFiles("extension-pack", [
159208
"library1.model.yml",
160209
]);
161210
writeExtensionPackFiles("another-extension-pack", ["library2.model.yml"]);
162211

163-
const modelFiles = await listModelFiles(extensionPackPath, cli);
212+
const modelFiles = await listModelFiles(
213+
extensionPackPath,
214+
cli,
215+
defaultModelConfig,
216+
);
164217
expect(modelFiles).toEqual(
165218
new Set([join("models", "library1.model.yml")]),
166219
);
@@ -177,6 +230,7 @@ describe("modeled-method-fs", () => {
177230
makeExtensionPack(extensionPackPath),
178231
QueryLanguage.Java,
179232
cli,
233+
defaultModelConfig,
180234
extLogger,
181235
);
182236

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { ruby } from "../../../../src/model-editor/languages/ruby";
1414
import type { ModeledMethod } from "../../../../src/model-editor/modeled-method";
1515
import { EndpointType } from "../../../../src/model-editor/method";
1616
import { Mode } from "../../../../src/model-editor/shared/mode";
17+
import { defaultModelConfig } from "../../../../src/model-editor/languages";
1718

1819
describe("runGenerateQueries", () => {
1920
const modelsAsDataLanguage = ruby;
@@ -136,8 +137,11 @@ describe("runGenerateQueries", () => {
136137
modelsAsDataLanguage,
137138
createMockLogger(),
138139
{
139-
isCanary: true,
140140
mode: Mode.Framework,
141+
config: {
142+
...defaultModelConfig,
143+
showTypeModels: true,
144+
},
141145
},
142146
),
143147
);

0 commit comments

Comments
 (0)