Skip to content

Commit 9a8a377

Browse files
committed
fix code generator
1 parent 42e8fa3 commit 9a8a377

19 files changed

Lines changed: 144 additions & 133 deletions

File tree

packages/generator-nmfglsp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"lint": "eslint src test --ext .ts",
2929
"run": "yo nmf",
3030
"test": "vitest run",
31-
"debug": "npx --node-arg=--inspect yo nmf",
31+
"debug": "npx --node-arg=--inspect yo nmfglsp",
3232
"publish:next": "npm --no-git-tag-version version \"$(semver $npm_package_version -i minor)-next.$(git rev-parse --short HEAD)\" && npm publish --tag next",
3333
"publish:latest": "npm publish --tag latest --access public"
3434
},

packages/generator-nmfglsp/src/index.ts

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
1717

1818
const TEMPLATE_CORE_DIR = '../templates/client';
1919
const TEMPLATE_VSCODE_DIR = '../templates/vscode';
20-
const TEMPLATE_WEB_DIR = '../templates/web';
20+
const TEMPLATE_VSCODE_WEBVIEW_DIR = '../templates/web';
2121
const TEMPLATE_STANDALONE_DIR = '../templates/standalone';
2222
const TEMPLATE_BACKEND_DIR = '../templates/backend';
23+
const TEMPLATE_DOTVSCODE_DIR = '../templates/vscodesettings';
2324
const USER_DIR = '.';
2425

2526
const EXTENSION_NAME = /<%= extension-name %>/g;
@@ -29,6 +30,7 @@ const FILE_EXTENSION_GLOB = /<%= file-glob-extension %>/g;
2930
const TSCONFIG_BASE_NAME = /<%= tsconfig %>/g;
3031

3132
const LANGUAGE_NAME = /<%= LanguageName %>/g;
33+
const LANGUAGE_NAME_CAMEL = /<%= LanguageNameCamel %>/g;
3234
const LANGUAGE_ID = /<%= language-id %>/g;
3335
const LANGUAGE_PATH_ID = /language-id/g;
3436
const LANGUAGE_PATH_NAME = /LanguageName/g;
@@ -69,7 +71,7 @@ export class NMFGenerator extends Generator {
6971
type: 'input',
7072
name: 'extensionName',
7173
prefix: description(
72-
'Welcome to NMF!',
74+
'Welcome to NMF GLSP!',
7375
'This tool generates a VS Code extension with a simple state machine language to get started quickly.',
7476
'The extension name is an identifier used in the extension marketplace or package registry.'
7577
),
@@ -142,14 +144,13 @@ export class NMFGenerator extends Generator {
142144
/(?![\w| |\-|_])./g,
143145
''
144146
);
145-
const languageName = _.upperFirst(
146-
_.camelCase(this.answers.rawLanguageName)
147-
);
147+
const languageNameCamel = _.camelCase(this.answers.rawLanguageName);
148+
const languageName = _.upperFirst(languageNameCamel);
148149
const languageId = _.kebabCase(this.answers.rawLanguageName);
149150

150151
const referencedTsconfigBaseName = 'tsconfig.json';
151152
const templateCopyOptions: CopyOptions = {
152-
process: content => this._replaceTemplateWords(fileExtensionGlob, languageName, languageId, referencedTsconfigBaseName, content),
153+
process: content => this._replaceTemplateWords(fileExtensionGlob, languageName, languageNameCamel, languageId, referencedTsconfigBaseName, content),
153154
processDestinationPath: path => this._replaceTemplateNames(languageId, languageName, path)
154155
};
155156

@@ -175,15 +176,6 @@ export class NMFGenerator extends Generator {
175176
);
176177
}
177178

178-
this.sourceRoot(path.join(__dirname, TEMPLATE_WEB_DIR));
179-
for (const path of ['.']) {
180-
this.fs.copy(
181-
this.templatePath(path),
182-
this._extensionPath('packages/' + languageId + '-glsp-web/' + path),
183-
templateCopyOptions
184-
);
185-
}
186-
187179
this.sourceRoot(path.join(__dirname, TEMPLATE_BACKEND_DIR));
188180
for (const path of ['.']) {
189181
this.fs.copy(
@@ -220,6 +212,25 @@ export class NMFGenerator extends Generator {
220212
templateCopyOptions
221213
);
222214
}
215+
this.sourceRoot(path.join(__dirname, TEMPLATE_DOTVSCODE_DIR));
216+
for (const path of ['.']) {
217+
this.fs.copy(
218+
this.templatePath(path),
219+
this._extensionPath('.vscode/' + path),
220+
templateCopyOptions
221+
);
222+
}
223+
224+
pkgJson.workspaces.push('packages/' + languageId + '-vscode-webview');
225+
pkgJson.scripts.build += ' --workspace=' + languageId + '-vscode-webview';
226+
this.sourceRoot(path.join(__dirname, TEMPLATE_VSCODE_WEBVIEW_DIR));
227+
for (const path of ['.']) {
228+
this.fs.copy(
229+
this.templatePath(path),
230+
this._extensionPath('packages/' + languageId + '-vscode-webview/' + path),
231+
templateCopyOptions
232+
);
233+
}
223234
}
224235

225236
this.fs.extendJSON(this._extensionPath('package-template.json'), pkgJson, undefined, 4);
@@ -236,8 +247,8 @@ export class NMFGenerator extends Generator {
236247

237248
const opts = { cwd: extensionPath };
238249
if(!this.args.includes('skip-install')) {
239-
this.spawnSync('npm', ['link'], opts);
240-
this.spawnSync('npm', ['install'], opts);
250+
this.spawnSync('yarn', ['install'], opts);
251+
this.spawnSync('yarn', ['build'], opts);
241252
this.spawnSync('dotnet', ['build', 'backend'], opts);
242253
}
243254
}
@@ -271,13 +282,14 @@ export class NMFGenerator extends Generator {
271282
return this.destinationPath(USER_DIR, this.answers.extensionName, ...path);
272283
}
273284

274-
_replaceTemplateWords(fileExtensionGlob: string, languageName: string, languageId: string, tsconfigBaseName: string, content: string | Buffer): string {
285+
_replaceTemplateWords(fileExtensionGlob: string, languageName: string, languageNameCamel: string, languageId: string, tsconfigBaseName: string, content: string | Buffer): string {
275286
return content.toString()
276287
.replace(EXTENSION_NAME, this.answers.extensionName)
277288
.replace(RAW_LANGUAGE_NAME, this.answers.rawLanguageName)
278289
.replace(FILE_EXTENSION, this.answers.fileExtensions)
279290
.replace(FILE_EXTENSION_GLOB, fileExtensionGlob)
280291
.replace(LANGUAGE_NAME, languageName)
292+
.replace(LANGUAGE_NAME_CAMEL, languageNameCamel)
281293
.replace(LANGUAGE_ID, languageId)
282294
.replace(TSCONFIG_BASE_NAME, tsconfigBaseName)
283295
.replace(NEWLINES, EOL);

packages/generator-nmfglsp/templates/.package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
"private": true,
44
"engineStrict": true,
55
"engines": {
6-
"node": ">= 18.0.0",
7-
"npm": ">= 9.5.0"
6+
"node": ">= 20",
7+
"npm": ">= 9.5.0",
8+
"yarn": ">=1.7.0 <2"
89
},
910
"scripts": {
1011
"clean": "shx rm -rf packages/*/lib packages/*/out packages/*/*.tsbuildinfo examples/*/*.tsbuildinfo",
@@ -18,7 +19,7 @@
1819
"validate-exports": "npm run validate-exports --workspace=<%= language-id %>-glsp-client --workspace=<%= language-id %>-glsp-web",
1920
"version:dependencies": "node ./scripts/update-version.js && npm install",
2021
"dev-build": "npm run dev-clean && npm install && npm link ./packages/<%= language-id %>-glsp-client",
21-
"dev-clean": "shx rm -rf packages/**/node_modules && npm uninstall -g <%= language-id %>-workspaces <%= language-id %>-glsp-client && npm unlink <%= language-id %>-workspaces <%= language-id %>-glsp-client",
22+
"dev-clean": "npm uninstall -g <%= language-id %>-workspaces <%= language-id %>-glsp-client && npm unlink <%= language-id %>-workspaces <%= language-id %>-glsp-client",
2223
"reset:repo": "git clean -f -X -d"
2324
},
2425
"devDependencies": {
@@ -36,7 +37,7 @@
3637
"eslint": "~8.56.0",
3738
"eslint-plugin-header": "~3.1.1",
3839
"shx": "~0.3.4",
39-
"typescript": "~5.1.6",
40+
"typescript": "^5.5.3",
4041
"vitest": "~1.5.0"
4142
},
4243
"overrides": {
@@ -47,8 +48,7 @@
4748
"npm": "10.2.4"
4849
},
4950
"workspaces": [
50-
"packages/<%= language-id %>-glsp-client",
51-
"packages/<%= language-id %>-glsp-web"
51+
"packages/<%= language-id %>-glsp-client"
5252
]
5353
}
5454

packages/generator-nmfglsp/templates/backend/LanguageNameGLSPServer/FsmLanguage.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using NMF.Glsp.Language;
2-
using <%= LanguageName %>.Metamodel;
2+
using NMF.Glsp.Language.Layouting;
33
using NMF.Collections;
44
using NMF.Expressions.Linq;
5+
using <%= LanguageName %>.FiniteStateMachines;
56

67
namespace <%= LanguageName %>
78
{

packages/generator-nmfglsp/templates/backend/LanguageNameGLSPServer/LanguageNameGLSPServer.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<InvariantGlobalization>true</InvariantGlobalization>
8+
<OutputPath>../../packages/<%= language-id %>-vscode/dist</OutputPath>
9+
<RollForward>LatestMajor</RollForward>
10+
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
811
</PropertyGroup>
912

1013
<ItemGroup>

packages/generator-nmfglsp/templates/client/src/diagram-module.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,30 @@ import {
22
ConsoleLogger,
33
ContainerConfiguration,
44
DeleteElementContextMenuItemProvider,
5-
GEdge,
65
GridSnapper,
76
LogLevel,
87
RevealNamedElementActionProvider,
9-
GCompartment,
10-
GCompartmentView,
118
GLabelView,
129
TYPES,
1310
bindAsService,
1411
bindOrRebind,
1512
configureDefaultModelElements,
1613
configureModelElement,
1714
initializeDiagramContainer,
18-
RectangularNodeView,
15+
GEdge,
16+
PolylineEdgeViewWithGapsOnIntersections,
17+
DefaultTypes,
18+
GGraph,
1919
} from '@eclipse-glsp/client';
2020
import 'balloon-css/balloon.min.css';
2121
import { Container, ContainerModule } from 'inversify';
2222
import 'sprotty/css/edit-label.css';
2323
import '../css/diagram.css';
24-
import { AttributeLabel, DefaultNode, ElementLabel } from './model';
25-
import { DividerView, InheritanceEdgeView, ReferenceEdgeView } from './views';
24+
import { ElementLabel, DefaultNode, EdgeLabel } from './model';
2625
import { ContextMenuService } from './menu';
26+
import { FinalStateView, StartStateView, StateMachineGraph, StateView } from './views';
2727

28-
export const <%= language-id %>DiagramModule = new ContainerModule((bind, unbind, isBound, rebind) => {
28+
export const <%= LanguageNameCamel %>DiagramModule = new ContainerModule((bind, unbind, isBound, rebind) => {
2929
const context = { bind, unbind, isBound, rebind };
3030

3131
bindOrRebind(context, TYPES.ILogger).to(ConsoleLogger).inSingletonScope();
@@ -46,5 +46,5 @@ export const <%= language-id %>DiagramModule = new ContainerModule((bind, unbind
4646
});
4747

4848
export function create<%= LanguageName %>DiagramContainer(...containerConfiguration: ContainerConfiguration): Container {
49-
return initializeDiagramContainer(new Container(), <%= language-id %>DiagramModule, ...containerConfiguration);
49+
return initializeDiagramContainer(new Container(), <%= LanguageNameCamel %>DiagramModule, ...containerConfiguration);
5050
}

packages/generator-nmfglsp/templates/client/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"lib": ["ES2017", "DOM"],
2727
"sourceMap": true,
2828
"types": ["node", "reflect-metadata"],
29-
"outDir": "lib"
29+
"outDir": "lib",
30+
"skipLibCheck": true
3031
},
3132
"include": [
3233
"src/**/*.ts",

packages/generator-nmfglsp/templates/standalone/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
"type": "module",
66
"scripts": {
77
"dev": "vite --force",
8-
"build": "tsc && vite build --force",
8+
"build": "tsc && vite build",
99
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
10-
"preview": "vite preview --force"
10+
"preview": "vite preview"
1111
},
1212
"dependencies": {
1313
"<%= language-id %>-glsp-client": "^1.0.0",

packages/generator-nmfglsp/templates/standalone/tsconfig.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"jsx": "react",
2626
"lib": ["ES2017", "DOM"],
2727
"sourceMap": true,
28-
"types": ["node", "reflect-metadata"]
28+
"types": ["node", "reflect-metadata"],
29+
"skipLibCheck": true
2930
},
3031
"include": [
3132
"src/**/*.ts",
@@ -35,4 +36,4 @@
3536
"lib/**/*",
3637
"node_modules/**/*"
3738
]
38-
}
39+
}

packages/generator-nmfglsp/templates/vscode/package.json

Lines changed: 14 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -32,39 +32,21 @@
3232
{
3333
"command": "<%= language-id %>.fit",
3434
"title": "Fit to Screen",
35-
"category": "<%= language-id %> Diagram",
35+
"category": "<%= LanguageName %> Diagram",
3636
"enablement": "activeCustomEditorId == '<%= language-id %>.glspDiagram'"
3737
},
3838
{
3939
"command": "<%= language-id %>.center",
4040
"title": "Center selection",
41-
"category": "<%= language-id %> Diagram",
41+
"category": "<%= LanguageName %> Diagram",
4242
"enablement": "activeCustomEditorId == '<%= language-id %>.glspDiagram'"
4343
},
4444
{
4545
"command": "<%= language-id %>.layout",
4646
"title": "Layout diagram",
47-
"category": "<%= language-id %> Diagram",
47+
"category": "<%= LanguageName %> Diagram",
4848
"enablement": "activeCustomEditorId == '<%= language-id %>.glspDiagram'"
4949
},
50-
{
51-
"command": "<%= language-id %>.goToNextNode",
52-
"title": "Go to next Node",
53-
"category": "<%= language-id %> Navigation",
54-
"enablement": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
55-
},
56-
{
57-
"command": "<%= language-id %>.goToPreviousNode",
58-
"title": "Go to previous Node",
59-
"category": "<%= language-id %> Navigation",
60-
"enablement": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
61-
},
62-
{
63-
"command": "<%= language-id %>.showDocumentation",
64-
"title": "Show documentation...",
65-
"category": "<%= language-id %> Diagram",
66-
"enablement": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
67-
},
6850
{
6951
"command": "<%= language-id %>.exportAsSVG",
7052
"title": "Export as SVG",
@@ -75,10 +57,10 @@
7557
"customEditors": [
7658
{
7759
"viewType": "<%= language-id %>.glspDiagram",
78-
"displayName": "<%= language-id %> Diagram Editor",
60+
"displayName": "<%= LanguageName %> Diagram Editor",
7961
"selector": [
8062
{
81-
"filenamePattern": "*.<%= language-id %>"
63+
"filenamePattern": "*.<%= file-glob-extension %>"
8264
}
8365
]
8466
}
@@ -113,40 +95,13 @@
11395
"mac": "alt+e",
11496
"command": "<%= language-id %>.exportAsSVG",
11597
"when": "activeCustomEditorId == '<%= language-id %>.glspDiagram'"
116-
},
117-
{
118-
"key": "Ctrl+4",
119-
"mac": "cmd+4",
120-
"command": "<%= language-id %>.goToNextNode",
121-
"when": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
122-
},
123-
{
124-
"key": "Ctrl+3",
125-
"mac": "cmd+3",
126-
"command": "<%= language-id %>.goToPreviousNode",
127-
"when": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
12898
}
12999
],
130100
"menus": {
131101
"editor/title": [
132102
{
133103
"submenu": "<%= language-id %>.editor.title",
134104
"group": "bookmarks"
135-
},
136-
{
137-
"command": "<%= language-id %>.goToNextNode",
138-
"group": "navigation",
139-
"when": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
140-
},
141-
{
142-
"command": "<%= language-id %>.goToPreviousNode",
143-
"group": "navigation",
144-
"when": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
145-
},
146-
{
147-
"command": "<%= language-id %>.showDocumentation",
148-
"group": "navigation",
149-
"when": "activeCustomEditorId == '<%= language-id %>.glspDiagram' && <%= language-id %>.editorSelectedElementsAmount == 1"
150105
}
151106
],
152107
"<%= language-id %>.editor.title": [
@@ -182,14 +137,18 @@
182137
"onStartupFinished"
183138
],
184139
"devDependencies": {
185-
"@eclipse-glsp/vscode-integration": "2.1.1",
186-
"@vscode/vsce": "^2.19.0",
140+
"@eclipse-glsp/vscode-integration": "2.5.0",
141+
"@types/node": "20.x",
142+
"@types/vscode": "^1.54.0",
143+
"@vscode/vsce": "^2.24.0",
187144
"copy-webpack-plugin": "^11.0.0",
145+
"path": "^0.12.7",
146+
"reflect-metadata": "^0.1.13",
147+
"rimraf": "^2.6.3",
188148
"ts-loader": "^9.4.4",
189-
"webpack": "^5.88.2",
190-
"webpack-cli": "^5.1.4",
149+
"ts-node": "^9.1.1",
191150
"webpack-merge": "^5.9.0",
192-
"<%= language-id %>-glsp-web": "1.0.0"
151+
"<%= language-id %>-vscode-webview": "1.0.0"
193152
},
194153
"engines": {
195154
"vscode": "^1.54.0"

0 commit comments

Comments
 (0)