Store available modes per language

This commit is contained in:
Koen Vlaswinkel
2023-10-27 15:50:46 +02:00
parent 712b55768f
commit c77a57f383
6 changed files with 21 additions and 14 deletions

View File

@@ -1,3 +1,2 @@
export * from "./initial-mode";
export * from "./languages";
export * from "./models-as-data";

View File

@@ -1,10 +0,0 @@
import { QueryLanguage } from "../../common/query-language";
import { INITIAL_MODE, Mode } from "../shared/mode";
export function getInitialMode(language: QueryLanguage): Mode {
if (language === QueryLanguage.Ruby) {
return Mode.Framework;
}
return INITIAL_MODE;
}

View File

@@ -1,6 +1,7 @@
import { MethodDefinition } from "../method";
import { ModeledMethod, ModeledMethodType } from "../modeled-method";
import { DataTuple } from "../model-extension-file";
import { Mode } from "../shared/mode";
type GenerateMethodDefinition = (method: ModeledMethod) => DataTuple[];
type ReadModeledMethod = (row: DataTuple[]) => ModeledMethod;
@@ -20,6 +21,11 @@ export type ModelsAsDataLanguagePredicates = Record<
>;
export type ModelsAsDataLanguage = {
/**
* The modes that are available for this language. If not specified, all
* modes are available.
*/
availableModes?: Mode[];
createMethodSignature: (method: MethodDefinition) => string;
predicates: ModelsAsDataLanguagePredicates;
};

View File

@@ -1,5 +1,6 @@
import { ModelsAsDataLanguage } from "./models-as-data";
import { sharedExtensiblePredicates, sharedKinds } from "./shared";
import { Mode } from "../shared/mode";
function parseRubyMethodFromPath(path: string): string {
const match = path.match(/Method\[([^\]]+)].*/);
@@ -27,6 +28,7 @@ function rubyMethodSignature(typeName: string, methodName: string) {
}
export const ruby: ModelsAsDataLanguage = {
availableModes: [Mode.Framework],
createMethodSignature: ({ typeName, methodName }) =>
`${typeName}#${methodName}`,
predicates: {

View File

@@ -22,7 +22,8 @@ import { showResolvableLocation } from "../databases/local-databases/locations";
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
import { ModelConfigListener } from "../config";
import { ModelingEvents } from "./modeling-events";
import { getInitialMode } from "./languages";
import { getModelsAsDataLanguage } from "./languages";
import { Mode } from "./shared/mode";
const SUPPORTED_LANGUAGES: string[] = ["java", "csharp"];
@@ -142,6 +143,10 @@ export class ModelEditorModule extends DisposableObject {
return;
}
const definition = getModelsAsDataLanguage(language);
const initialMode = definition.availableModes?.[0] ?? Mode.Application;
const existingView = this.editorViewTracker.getView(
db.databaseUri.toString(),
);
@@ -238,7 +243,7 @@ export class ModelEditorModule extends DisposableObject {
db,
modelFile,
language,
getInitialMode(language),
initialMode,
);
this.modelingEvents.onDbClosed(async (dbUri) => {

View File

@@ -50,12 +50,14 @@ import { telemetryListener } from "../common/vscode/telemetry";
import { ModelingStore } from "./modeling-store";
import { ModelEditorViewTracker } from "./model-editor-view-tracker";
import { ModelingEvents } from "./modeling-events";
import { getModelsAsDataLanguage, ModelsAsDataLanguage } from "./languages";
export class ModelEditorView extends AbstractWebview<
ToModelEditorMessage,
FromModelEditorMessage
> {
private readonly autoModeler: AutoModeler;
private readonly languageDefinition: ModelsAsDataLanguage;
public constructor(
protected readonly app: App,
@@ -95,6 +97,7 @@ export class ModelEditorView extends AbstractWebview<
this.addModeledMethods(modeledMethods);
},
);
this.languageDefinition = getModelsAsDataLanguage(language);
}
public async openView() {
@@ -376,7 +379,9 @@ export class ModelEditorView extends AbstractWebview<
const sourceArchiveAvailable =
this.databaseItem.hasSourceArchiveInExplorer();
const showModeSwitchButton = this.language !== QueryLanguage.Ruby;
const showModeSwitchButton =
this.languageDefinition.availableModes === undefined ||
this.languageDefinition.availableModes.length > 1;
await this.postMessage({
t: "setModelEditorViewState",