Store available modes per language
This commit is contained in:
@@ -1,3 +1,2 @@
|
||||
export * from "./initial-mode";
|
||||
export * from "./languages";
|
||||
export * from "./models-as-data";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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: {
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user