Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,42 +30,50 @@ class EmptyExternalReferenceCollector implements ExternalReferenceCollector {

/**
* Plugin for generated model transformations (.mt_gen).
*
* @param languageJsUrl The HTTP URL of this plugin's `language.js` entry file, used
* to bind the GED worker so the metadata manager can attempt a smart old-to-new ID
* remapping after a textual edit, instead of always falling back to naive ID matching.
*/
const generatedModelTransformationPlugin: LangiumLanguagePlugin<GeneratedModelTransformationServices> = {
rootRule: GeneratedModelTransformationRule,
additionalTerminals: [],
module: {
references: {
ExternalReferenceCollector: () => new EmptyExternalReferenceCollector()
},
action: {
ActionHandlerRegistry: (services) => {
const registry = new ActionHandlerRegistry();
registry.register(
"save-as-model-transformation",
new SaveGeneratedModelTransformationActionHandler(services.shared)
);
return registry;
function createGeneratedModelTransformationPlugin(
languageJsUrl?: string
): LangiumLanguagePlugin<GeneratedModelTransformationServices> {
return {
rootRule: GeneratedModelTransformationRule,
additionalTerminals: [],
module: {
references: {
ExternalReferenceCollector: () => new EmptyExternalReferenceCollector()
},
action: {
ActionHandlerRegistry: (services) => {
const registry = new ActionHandlerRegistry();
registry.register(
"save-as-model-transformation",
new SaveGeneratedModelTransformationActionHandler(services.shared)
);
return registry;
},
ActionProvider: () => new GeneratedModelTransformationActionProvider()
},
ActionProvider: () => new GeneratedModelTransformationActionProvider()
workspace: {
WorkspaceEdit: (services) => new DefaultWorkspaceEditService(services)
}
},
workspace: {
WorkspaceEdit: (services) => new DefaultWorkspaceEditService(services)
postCreate(services) {
services.shared.glsp.serverModule.configureDiagramModule(
new GeneratedModelTransformationDiagramModule(services, languageJsUrl)
);
}
},
postCreate(services) {
services.shared.glsp.serverModule.configureDiagramModule(
new GeneratedModelTransformationDiagramModule(services)
);
}
};
};
}

/**
* Provider for the generated model transformation language plugin.
*/
export const generatedModelTransformationPluginProvider: LangiumLanguagePluginProvider<GeneratedModelTransformationServices> =
{
create(): LangiumLanguagePlugin<GeneratedModelTransformationServices> {
return generatedModelTransformationPlugin;
create(_contributionPlugins, languageJsUrl): LangiumLanguagePlugin<GeneratedModelTransformationServices> {
return createGeneratedModelTransformationPlugin(languageJsUrl);
}
};
52 changes: 30 additions & 22 deletions app/packages/language-model/src/generatedModelPlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,36 +32,44 @@ class EmptyExternalReferenceCollector implements ExternalReferenceCollector {
* The plugin for the Generated Model language.
* Provides minimal language server functionality for .m_gen files.
* The language treats the entire file content as JSON, captured in a single string field.
*
* @param languageJsUrl The HTTP URL of this plugin's `language.js` entry file, used
* to bind the GED worker so the metadata manager can attempt a smart old-to-new ID
* remapping after a textual edit, instead of always falling back to naive ID matching.
*/
const generatedModelPlugin: LangiumLanguagePlugin<GeneratedModelServices> = {
rootRule: GeneratedModelRule,
additionalTerminals: [],
module: {
references: {
ExternalReferenceCollector: () => new EmptyExternalReferenceCollector()
},
action: {
ActionHandlerRegistry: (services) => {
const registry = new ActionHandlerRegistry();
registry.register("save-as-model", new SaveGeneratedModelActionHandler(services.shared));
return registry;
function createGeneratedModelPlugin(languageJsUrl?: string): LangiumLanguagePlugin<GeneratedModelServices> {
return {
rootRule: GeneratedModelRule,
additionalTerminals: [],
module: {
references: {
ExternalReferenceCollector: () => new EmptyExternalReferenceCollector()
},
action: {
ActionHandlerRegistry: (services) => {
const registry = new ActionHandlerRegistry();
registry.register("save-as-model", new SaveGeneratedModelActionHandler(services.shared));
return registry;
},
ActionProvider: () => new GeneratedModelActionProvider()
},
ActionProvider: () => new GeneratedModelActionProvider()
workspace: {
WorkspaceEdit: (services) => new DefaultWorkspaceEditService(services)
}
},
workspace: {
WorkspaceEdit: (services) => new DefaultWorkspaceEditService(services)
postCreate(services) {
services.shared.glsp.serverModule.configureDiagramModule(
new GeneratedModelDiagramModule(services, languageJsUrl)
);
}
},
postCreate(services) {
services.shared.glsp.serverModule.configureDiagramModule(new GeneratedModelDiagramModule(services));
}
};
};
}

/**
* Provider for the Generated Model language plugin.
*/
export const generatedModelPluginProvider: LangiumLanguagePluginProvider<GeneratedModelServices> = {
create(): LangiumLanguagePlugin<GeneratedModelServices> {
return generatedModelPlugin;
create(_contributionPlugins, languageJsUrl): LangiumLanguagePlugin<GeneratedModelServices> {
return createGeneratedModelPlugin(languageJsUrl);
}
};
1 change: 1 addition & 0 deletions infra/docker/workbench/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ WORKDIR /build
COPY app/ ./

RUN npm ci
ENV NODE_OPTIONS="--max-old-space-size=6144"
RUN npm run build

# Workbench runtime (nginx)
Expand Down
Loading