Skip to content

Commit c77a57f

Browse files
committed
Store available modes per language
1 parent 712b557 commit c77a57f

File tree

6 files changed

+21
-14
lines changed

6 files changed

+21
-14
lines changed
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
export * from "./initial-mode";
21
export * from "./languages";
32
export * from "./models-as-data";

extensions/ql-vscode/src/model-editor/languages/initial-mode.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { MethodDefinition } from "../method";
22
import { ModeledMethod, ModeledMethodType } from "../modeled-method";
33
import { DataTuple } from "../model-extension-file";
4+
import { Mode } from "../shared/mode";
45

56
type GenerateMethodDefinition = (method: ModeledMethod) => DataTuple[];
67
type ReadModeledMethod = (row: DataTuple[]) => ModeledMethod;
@@ -20,6 +21,11 @@ export type ModelsAsDataLanguagePredicates = Record<
2021
>;
2122

2223
export type ModelsAsDataLanguage = {
24+
/**
25+
* The modes that are available for this language. If not specified, all
26+
* modes are available.
27+
*/
28+
availableModes?: Mode[];
2329
createMethodSignature: (method: MethodDefinition) => string;
2430
predicates: ModelsAsDataLanguagePredicates;
2531
};

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ModelsAsDataLanguage } from "./models-as-data";
22
import { sharedExtensiblePredicates, sharedKinds } from "./shared";
3+
import { Mode } from "../shared/mode";
34

45
function parseRubyMethodFromPath(path: string): string {
56
const match = path.match(/Method\[([^\]]+)].*/);
@@ -27,6 +28,7 @@ function rubyMethodSignature(typeName: string, methodName: string) {
2728
}
2829

2930
export const ruby: ModelsAsDataLanguage = {
31+
availableModes: [Mode.Framework],
3032
createMethodSignature: ({ typeName, methodName }) =>
3133
`${typeName}#${methodName}`,
3234
predicates: {

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import { showResolvableLocation } from "../databases/local-databases/locations";
2222
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
2323
import { ModelConfigListener } from "../config";
2424
import { ModelingEvents } from "./modeling-events";
25-
import { getInitialMode } from "./languages";
25+
import { getModelsAsDataLanguage } from "./languages";
26+
import { Mode } from "./shared/mode";
2627

2728
const SUPPORTED_LANGUAGES: string[] = ["java", "csharp"];
2829

@@ -142,6 +143,10 @@ export class ModelEditorModule extends DisposableObject {
142143
return;
143144
}
144145

146+
const definition = getModelsAsDataLanguage(language);
147+
148+
const initialMode = definition.availableModes?.[0] ?? Mode.Application;
149+
145150
const existingView = this.editorViewTracker.getView(
146151
db.databaseUri.toString(),
147152
);
@@ -238,7 +243,7 @@ export class ModelEditorModule extends DisposableObject {
238243
db,
239244
modelFile,
240245
language,
241-
getInitialMode(language),
246+
initialMode,
242247
);
243248

244249
this.modelingEvents.onDbClosed(async (dbUri) => {

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ import { telemetryListener } from "../common/vscode/telemetry";
5050
import { ModelingStore } from "./modeling-store";
5151
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
5252
import { ModelingEvents } from "./modeling-events";
53+
import { getModelsAsDataLanguage, ModelsAsDataLanguage } from "./languages";
5354

5455
export class ModelEditorView extends AbstractWebview<
5556
ToModelEditorMessage,
5657
FromModelEditorMessage
5758
> {
5859
private readonly autoModeler: AutoModeler;
60+
private readonly languageDefinition: ModelsAsDataLanguage;
5961

6062
public constructor(
6163
protected readonly app: App,
@@ -95,6 +97,7 @@ export class ModelEditorView extends AbstractWebview<
9597
this.addModeledMethods(modeledMethods);
9698
},
9799
);
100+
this.languageDefinition = getModelsAsDataLanguage(language);
98101
}
99102

100103
public async openView() {
@@ -376,7 +379,9 @@ export class ModelEditorView extends AbstractWebview<
376379
const sourceArchiveAvailable =
377380
this.databaseItem.hasSourceArchiveInExplorer();
378381

379-
const showModeSwitchButton = this.language !== QueryLanguage.Ruby;
382+
const showModeSwitchButton =
383+
this.languageDefinition.availableModes === undefined ||
384+
this.languageDefinition.availableModes.length > 1;
380385

381386
await this.postMessage({
382387
t: "setModelEditorViewState",

0 commit comments

Comments
 (0)