zenstack 0.4.2 → 0.6.0-pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/{LICENSE.md → LICENSE} +0 -0
  2. package/bin/cli +1 -1
  3. package/package.json +18 -13
  4. package/bin/post-install.js +0 -24
  5. package/bundle/asset/logo-256-bg.png +0 -0
  6. package/bundle/asset/logo-dark-256.png +0 -0
  7. package/bundle/asset/logo-light-256.png +0 -0
  8. package/bundle/cli/index.js +0 -6952
  9. package/bundle/extension.js +0 -39
  10. package/bundle/language-server/main.js +0 -6208
  11. package/bundle/res/package.template.json +0 -9
  12. package/bundle/res/prism-zmodel.js +0 -22
  13. package/bundle/res/stdlib.zmodel +0 -218
  14. package/bundle/res/tsconfig.template.json +0 -17
  15. package/src/cli/cli-error.ts +0 -4
  16. package/src/cli/cli-util.ts +0 -214
  17. package/src/cli/index.ts +0 -246
  18. package/src/extension.ts +0 -76
  19. package/src/generator/ast-utils.ts +0 -18
  20. package/src/generator/constants.ts +0 -6
  21. package/src/generator/field-constraint/index.ts +0 -304
  22. package/src/generator/index.ts +0 -86
  23. package/src/generator/prisma/expression-writer.ts +0 -360
  24. package/src/generator/prisma/index.ts +0 -44
  25. package/src/generator/prisma/prisma-builder.ts +0 -370
  26. package/src/generator/prisma/query-guard-generator.ts +0 -249
  27. package/src/generator/prisma/schema-generator.ts +0 -313
  28. package/src/generator/prisma/typescript-expression-transformer.ts +0 -108
  29. package/src/generator/react-hooks/index.ts +0 -273
  30. package/src/generator/service/index.ts +0 -113
  31. package/src/generator/tsc/index.ts +0 -59
  32. package/src/generator/types.ts +0 -20
  33. package/src/global.d.ts +0 -3
  34. package/src/language-server/constants.ts +0 -29
  35. package/src/language-server/generated/ast.ts +0 -643
  36. package/src/language-server/generated/grammar.ts +0 -2492
  37. package/src/language-server/generated/module.ts +0 -24
  38. package/src/language-server/langium-ext.d.ts +0 -22
  39. package/src/language-server/lsp/zmodel-definition-provider.ts +0 -87
  40. package/src/language-server/main.ts +0 -13
  41. package/src/language-server/types.ts +0 -25
  42. package/src/language-server/utils.ts +0 -21
  43. package/src/language-server/validator/attribute-validator.ts +0 -11
  44. package/src/language-server/validator/datamodel-validator.ts +0 -426
  45. package/src/language-server/validator/datasource-validator.ts +0 -102
  46. package/src/language-server/validator/enum-validator.ts +0 -14
  47. package/src/language-server/validator/expression-validator.ts +0 -48
  48. package/src/language-server/validator/schema-validator.ts +0 -31
  49. package/src/language-server/validator/utils.ts +0 -158
  50. package/src/language-server/validator/zmodel-validator.ts +0 -91
  51. package/src/language-server/zmodel-linker.ts +0 -457
  52. package/src/language-server/zmodel-module.ts +0 -136
  53. package/src/language-server/zmodel-scope.ts +0 -45
  54. package/src/language-server/zmodel-workspace-manager.ts +0 -23
  55. package/src/language-server/zmodel.langium +0 -207
  56. package/src/res/package.template.json +0 -9
  57. package/src/res/prism-zmodel.js +0 -22
  58. package/src/res/stdlib.zmodel +0 -218
  59. package/src/res/tsconfig.template.json +0 -17
  60. package/src/telemetry.ts +0 -119
  61. package/src/utils/exec-utils.ts +0 -8
  62. package/src/utils/indent-string.ts +0 -9
  63. package/src/utils/pkg-utils.ts +0 -63
@@ -1,457 +0,0 @@
1
- import {
2
- AstNode,
3
- AstNodeDescription,
4
- AstNodeDescriptionProvider,
5
- DefaultLinker,
6
- DocumentState,
7
- interruptAndCheck,
8
- isReference,
9
- LangiumDocument,
10
- LangiumServices,
11
- LinkingError,
12
- Reference,
13
- streamContents,
14
- } from 'langium';
15
- import { CancellationToken } from 'vscode-jsonrpc';
16
- import {
17
- ArrayExpr,
18
- AttributeArg,
19
- BinaryExpr,
20
- DataModel,
21
- DataModelField,
22
- DataModelFieldType,
23
- EnumField,
24
- Function,
25
- FunctionParam,
26
- FunctionParamType,
27
- InvocationExpr,
28
- isDataModel,
29
- LiteralExpr,
30
- MemberAccessExpr,
31
- NullExpr,
32
- ReferenceExpr,
33
- ReferenceTarget,
34
- ThisExpr,
35
- UnaryExpr,
36
- } from './generated/ast';
37
- import { ResolvedShape } from './types';
38
- import { getContainingModel, isFromStdlib } from './utils';
39
- import { mapBuiltinTypeToExpressionType } from './validator/utils';
40
-
41
- interface DefaultReference extends Reference {
42
- _ref?: AstNode | LinkingError;
43
- _nodeDescription?: AstNodeDescription;
44
- }
45
-
46
- type ScopeProvider = (name: string) => ReferenceTarget | undefined;
47
-
48
- /**
49
- * Langium linker implementation which links references and resolves expression types
50
- */
51
- export class ZModelLinker extends DefaultLinker {
52
- private readonly descriptions: AstNodeDescriptionProvider;
53
-
54
- constructor(services: LangiumServices) {
55
- super(services);
56
- this.descriptions = services.workspace.AstNodeDescriptionProvider;
57
- }
58
-
59
- //#region Reference linking
60
-
61
- async link(
62
- document: LangiumDocument,
63
- cancelToken = CancellationToken.None
64
- ): Promise<void> {
65
- if (
66
- document.parseResult.lexerErrors?.length > 0 ||
67
- document.parseResult.parserErrors?.length > 0
68
- ) {
69
- return;
70
- }
71
-
72
- for (const node of streamContents(document.parseResult.value)) {
73
- await interruptAndCheck(cancelToken);
74
- this.resolve(node, document);
75
- }
76
- document.state = DocumentState.Linked;
77
- }
78
-
79
- private linkReference(
80
- container: AstNode,
81
- property: string,
82
- document: LangiumDocument,
83
- extraScopes: ScopeProvider[]
84
- ) {
85
- if (
86
- !this.resolveFromScopeProviders(
87
- container,
88
- property,
89
- document,
90
- extraScopes
91
- )
92
- ) {
93
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
94
- const reference: Reference<AstNode> = (container as any)[property];
95
- this.doLink({ reference, container, property }, document);
96
- }
97
- }
98
-
99
- //#endregion
100
-
101
- //#region Expression type resolving
102
-
103
- private resolveFromScopeProviders(
104
- node: AstNode,
105
- property: string,
106
- document: LangiumDocument,
107
- providers: ScopeProvider[]
108
- ) {
109
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
- const reference: DefaultReference = (node as any)[property];
111
- for (const provider of providers) {
112
- const target = provider(reference.$refText);
113
- if (target) {
114
- reference._ref = target;
115
- reference._nodeDescription =
116
- this.descriptions.createDescription(
117
- target,
118
- target.name,
119
- document
120
- );
121
- return target;
122
- }
123
- }
124
- return null;
125
- }
126
-
127
- private resolve(
128
- node: AstNode,
129
- document: LangiumDocument,
130
- extraScopes: ScopeProvider[] = []
131
- ) {
132
- if (node.$resolvedType) {
133
- return;
134
- }
135
-
136
- switch (node.$type) {
137
- case LiteralExpr:
138
- this.resolveLiteral(node as LiteralExpr);
139
- break;
140
-
141
- case InvocationExpr:
142
- this.resolveInvocation(
143
- node as InvocationExpr,
144
- document,
145
- extraScopes
146
- );
147
- break;
148
-
149
- case ArrayExpr:
150
- this.resolveArray(node as ArrayExpr, document, extraScopes);
151
- break;
152
-
153
- case ReferenceExpr:
154
- this.resolveReference(
155
- node as ReferenceExpr,
156
- document,
157
- extraScopes
158
- );
159
- break;
160
-
161
- case MemberAccessExpr:
162
- this.resolveMemberAccess(
163
- node as MemberAccessExpr,
164
- document,
165
- extraScopes
166
- );
167
- break;
168
-
169
- case UnaryExpr:
170
- this.resolveUnary(node as UnaryExpr, document, extraScopes);
171
- break;
172
-
173
- case BinaryExpr:
174
- this.resolveBinary(node as BinaryExpr, document, extraScopes);
175
- break;
176
-
177
- case ThisExpr:
178
- this.resolveThis(node as ThisExpr, document, extraScopes);
179
- break;
180
-
181
- case NullExpr:
182
- this.resolveNull(node as NullExpr, document, extraScopes);
183
- break;
184
-
185
- case AttributeArg:
186
- this.resolveAttributeArg(
187
- node as AttributeArg,
188
- document,
189
- extraScopes
190
- );
191
- break;
192
-
193
- default:
194
- this.resolveDefault(node, document, extraScopes);
195
- break;
196
- }
197
- }
198
-
199
- private resolveBinary(
200
- node: BinaryExpr,
201
- document: LangiumDocument<AstNode>,
202
- extraScopes: ScopeProvider[]
203
- ) {
204
- switch (node.operator) {
205
- // TODO: support arithmetics?
206
- // case '+':
207
- // case '-':
208
- // case '*':
209
- // case '/':
210
- // this.resolve(node.left, document, extraScopes);
211
- // this.resolve(node.right, document, extraScopes);
212
- // this.resolveToBuiltinTypeOrDecl(node, 'Int');
213
- // break;
214
-
215
- case '>':
216
- case '>=':
217
- case '<':
218
- case '<=':
219
- case '==':
220
- case '!=':
221
- case '&&':
222
- case '||':
223
- this.resolve(node.left, document, extraScopes);
224
- this.resolve(node.right, document, extraScopes);
225
- this.resolveToBuiltinTypeOrDecl(node, 'Boolean');
226
- break;
227
-
228
- case '?':
229
- case '!':
230
- case '^':
231
- this.resolveCollectionPredicate(node, document, extraScopes);
232
- break;
233
-
234
- default:
235
- throw Error(`Unsupported binary operator: ${node.operator}`);
236
- }
237
- }
238
-
239
- private resolveUnary(
240
- node: UnaryExpr,
241
- document: LangiumDocument<AstNode>,
242
- extraScopes: ScopeProvider[]
243
- ) {
244
- this.resolve(node.operand, document, extraScopes);
245
- node.$resolvedType = node.operand.$resolvedType;
246
- }
247
-
248
- private resolveReference(
249
- node: ReferenceExpr,
250
- document: LangiumDocument<AstNode>,
251
- extraScopes: ScopeProvider[]
252
- ) {
253
- this.linkReference(node, 'target', document, extraScopes);
254
- node.args.forEach((arg) => this.resolve(arg, document, extraScopes));
255
-
256
- if (node.target.ref) {
257
- // resolve type
258
- if (node.target.ref.$type === EnumField) {
259
- this.resolveToBuiltinTypeOrDecl(
260
- node,
261
- node.target.ref.$container
262
- );
263
- } else {
264
- this.resolveToDeclaredType(
265
- node,
266
- (node.target.ref as DataModelField | FunctionParam).type
267
- );
268
- }
269
- }
270
- }
271
-
272
- private resolveArray(
273
- node: ArrayExpr,
274
- document: LangiumDocument<AstNode>,
275
- extraScopes: ScopeProvider[]
276
- ) {
277
- node.items.forEach((item) => this.resolve(item, document, extraScopes));
278
-
279
- const itemType = node.items[0].$resolvedType;
280
- if (itemType?.decl) {
281
- this.resolveToBuiltinTypeOrDecl(node, itemType.decl, true);
282
- }
283
- }
284
-
285
- private resolveInvocation(
286
- node: InvocationExpr,
287
- document: LangiumDocument,
288
- extraScopes: ScopeProvider[]
289
- ) {
290
- this.linkReference(node, 'function', document, extraScopes);
291
- node.args.forEach((arg) => this.resolve(arg, document, extraScopes));
292
- if (node.function.ref) {
293
- // eslint-disable-next-line @typescript-eslint/ban-types
294
- const funcDecl = node.function.ref as Function;
295
- if (funcDecl.name === 'auth' && isFromStdlib(funcDecl)) {
296
- // auth() function is resolved to User model in the current document
297
- const model = getContainingModel(node);
298
- const userModel = model?.declarations.find(
299
- (d) => isDataModel(d) && d.name === 'User'
300
- );
301
- if (userModel) {
302
- node.$resolvedType = { decl: userModel };
303
- }
304
- } else {
305
- this.resolveToDeclaredType(node, funcDecl.returnType);
306
- }
307
- }
308
- }
309
-
310
- private resolveLiteral(node: LiteralExpr) {
311
- const type =
312
- typeof node.value === 'string'
313
- ? 'String'
314
- : typeof node.value === 'boolean'
315
- ? 'Boolean'
316
- : typeof node.value === 'number'
317
- ? 'Int'
318
- : undefined;
319
-
320
- if (type) {
321
- this.resolveToBuiltinTypeOrDecl(node, type);
322
- }
323
- }
324
-
325
- private resolveMemberAccess(
326
- node: MemberAccessExpr,
327
- document: LangiumDocument<AstNode>,
328
- extraScopes: ScopeProvider[]
329
- ) {
330
- this.resolve(node.operand, document, extraScopes);
331
- const operandResolved = node.operand.$resolvedType;
332
-
333
- if (
334
- operandResolved &&
335
- !operandResolved.array &&
336
- isDataModel(operandResolved.decl)
337
- ) {
338
- const modelDecl = operandResolved.decl as DataModel;
339
- const provider = (name: string) =>
340
- modelDecl.fields.find((f) => f.name === name);
341
- extraScopes = [provider, ...extraScopes];
342
- }
343
-
344
- this.linkReference(node, 'member', document, extraScopes);
345
- if (node.member.ref) {
346
- this.resolveToDeclaredType(node, node.member.ref.type);
347
- }
348
- }
349
-
350
- private resolveCollectionPredicate(
351
- node: BinaryExpr,
352
- document: LangiumDocument,
353
- extraScopes: ScopeProvider[]
354
- ) {
355
- this.resolve(node.left, document, extraScopes);
356
-
357
- const resolvedType = node.left.$resolvedType;
358
- if (
359
- resolvedType &&
360
- isDataModel(resolvedType.decl) &&
361
- resolvedType.array
362
- ) {
363
- const dataModelDecl = resolvedType.decl;
364
- const provider = (name: string) =>
365
- dataModelDecl.fields.find((f) => f.name === name);
366
- extraScopes = [provider, ...extraScopes];
367
- this.resolve(node.right, document, extraScopes);
368
- this.resolveToBuiltinTypeOrDecl(node, 'Boolean');
369
- } else {
370
- // error is reported in validation pass
371
- }
372
- }
373
-
374
- private resolveThis(
375
- node: ThisExpr,
376
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
377
- document: LangiumDocument<AstNode>,
378
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
379
- extraScopes: ScopeProvider[]
380
- ) {
381
- let decl: AstNode | undefined = node.$container;
382
-
383
- while (decl && !isDataModel(decl)) {
384
- decl = decl.$container;
385
- }
386
-
387
- if (decl) {
388
- this.resolveToBuiltinTypeOrDecl(node, decl);
389
- }
390
- }
391
-
392
- private resolveNull(
393
- node: NullExpr,
394
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
395
- document: LangiumDocument<AstNode>,
396
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
397
- extraScopes: ScopeProvider[]
398
- ) {
399
- // TODO: how to really resolve null?
400
- this.resolveToBuiltinTypeOrDecl(node, 'Null');
401
- }
402
-
403
- private resolveAttributeArg(
404
- node: AttributeArg,
405
- document: LangiumDocument<AstNode>,
406
- extraScopes: ScopeProvider[]
407
- ) {
408
- this.resolve(node.value, document, extraScopes);
409
- node.$resolvedType = node.value.$resolvedType;
410
- }
411
-
412
- private resolveDefault(
413
- node: AstNode,
414
- document: LangiumDocument<AstNode>,
415
- extraScopes: ScopeProvider[]
416
- ) {
417
- for (const [property, value] of Object.entries(node)) {
418
- if (!property.startsWith('$')) {
419
- if (isReference(value)) {
420
- this.linkReference(node, property, document, extraScopes);
421
- }
422
- }
423
- }
424
- for (const child of streamContents(node)) {
425
- this.resolve(child, document, extraScopes);
426
- }
427
- }
428
-
429
- //#endregion
430
-
431
- //#region Utils
432
-
433
- private resolveToDeclaredType(
434
- node: AstNode,
435
- type: FunctionParamType | DataModelFieldType
436
- ) {
437
- if (type.type) {
438
- const mappedType = mapBuiltinTypeToExpressionType(type.type);
439
- node.$resolvedType = { decl: mappedType, array: type.array };
440
- } else if (type.reference) {
441
- node.$resolvedType = {
442
- decl: type.reference.ref,
443
- array: type.array,
444
- };
445
- }
446
- }
447
-
448
- private resolveToBuiltinTypeOrDecl(
449
- node: AstNode,
450
- type: ResolvedShape,
451
- array = false
452
- ) {
453
- node.$resolvedType = { decl: type, array };
454
- }
455
-
456
- //#endregion
457
- }
@@ -1,136 +0,0 @@
1
- import {
2
- createDefaultModule,
3
- DefaultConfigurationProvider,
4
- DefaultDocumentBuilder,
5
- DefaultIndexManager,
6
- DefaultLangiumDocumentFactory,
7
- DefaultLangiumDocuments,
8
- DefaultLanguageServer,
9
- DefaultServiceRegistry,
10
- DefaultSharedModuleContext,
11
- DefaultTextDocumentFactory,
12
- inject,
13
- LangiumDefaultSharedServices,
14
- LangiumServices,
15
- LangiumSharedServices,
16
- Module,
17
- MutexLock,
18
- PartialLangiumServices,
19
- } from 'langium';
20
- import {
21
- ZModelGeneratedModule,
22
- ZModelGeneratedSharedModule,
23
- } from './generated/module';
24
- import { ZModelLinker } from './zmodel-linker';
25
- import { ZModelScopeComputation } from './zmodel-scope';
26
- import {
27
- ZModelValidationRegistry,
28
- ZModelValidator,
29
- } from './validator/zmodel-validator';
30
- import { TextDocuments } from 'vscode-languageserver';
31
- import { TextDocument } from 'vscode-languageserver-textdocument';
32
- import ZModelWorkspaceManager from './zmodel-workspace-manager';
33
- import ZModelDefinitionProvider from './lsp/zmodel-definition-provider';
34
-
35
- /**
36
- * Declaration of custom services - add your own service classes here.
37
- */
38
- export type ZModelAddedServices = {
39
- validation: {
40
- ZModelValidator: ZModelValidator;
41
- };
42
- };
43
-
44
- /**
45
- * Union of Langium default services and your custom services - use this as constructor parameter
46
- * of custom service classes.
47
- */
48
- export type ZModelServices = LangiumServices & ZModelAddedServices;
49
-
50
- /**
51
- * Dependency injection module that overrides Langium default services and contributes the
52
- * declared custom services. The Langium defaults can be partially specified to override only
53
- * selected services, while the custom services must be fully specified.
54
- */
55
- export const ZModelModule: Module<
56
- ZModelServices,
57
- PartialLangiumServices & ZModelAddedServices
58
- > = {
59
- references: {
60
- ScopeComputation: (services) => new ZModelScopeComputation(services),
61
- Linker: (services) => new ZModelLinker(services),
62
- },
63
- validation: {
64
- ValidationRegistry: (services) =>
65
- new ZModelValidationRegistry(services),
66
- ZModelValidator: () => new ZModelValidator(),
67
- },
68
- lsp: {
69
- DefinitionProvider: (services) =>
70
- new ZModelDefinitionProvider(services),
71
- },
72
- };
73
-
74
- // this duplicates createDefaultSharedModule except that a custom WorkspaceManager is used
75
- export function createSharedModule(
76
- context: DefaultSharedModuleContext
77
- ): Module<LangiumSharedServices, LangiumDefaultSharedServices> {
78
- return {
79
- ServiceRegistry: () => new DefaultServiceRegistry(),
80
- lsp: {
81
- Connection: () => context.connection,
82
- LanguageServer: (services) => new DefaultLanguageServer(services),
83
- },
84
- workspace: {
85
- LangiumDocuments: (services) =>
86
- new DefaultLangiumDocuments(services),
87
- LangiumDocumentFactory: (services) =>
88
- new DefaultLangiumDocumentFactory(services),
89
- DocumentBuilder: (services) => new DefaultDocumentBuilder(services),
90
- TextDocuments: () => new TextDocuments(TextDocument),
91
- TextDocumentFactory: (services) =>
92
- new DefaultTextDocumentFactory(services),
93
- IndexManager: (services) => new DefaultIndexManager(services),
94
- WorkspaceManager: (services) =>
95
- new ZModelWorkspaceManager(services),
96
- FileSystemProvider: (services) =>
97
- context.fileSystemProvider(services),
98
- MutexLock: () => new MutexLock(),
99
- ConfigurationProvider: (services) =>
100
- new DefaultConfigurationProvider(services),
101
- },
102
- };
103
- }
104
-
105
- /**
106
- * Create the full set of services required by Langium.
107
- *
108
- * First inject the shared services by merging two modules:
109
- * - Langium default shared services
110
- * - Services generated by langium-cli
111
- *
112
- * Then inject the language-specific services by merging three modules:
113
- * - Langium default language-specific services
114
- * - Services generated by langium-cli
115
- * - Services specified in this file
116
- *
117
- * @param context Optional module context with the LSP connection
118
- * @returns An object wrapping the shared services and the language-specific services
119
- */
120
- export function createZModelServices(context: DefaultSharedModuleContext): {
121
- shared: LangiumSharedServices;
122
- ZModel: ZModelServices;
123
- } {
124
- const shared = inject(
125
- createSharedModule(context),
126
- ZModelGeneratedSharedModule
127
- );
128
-
129
- const ZModel = inject(
130
- createDefaultModule({ shared }),
131
- ZModelGeneratedModule,
132
- ZModelModule
133
- );
134
- shared.ServiceRegistry.register(ZModel);
135
- return { shared, ZModel };
136
- }
@@ -1,45 +0,0 @@
1
- import {
2
- AstNode,
3
- AstNodeDescription,
4
- DefaultScopeComputation,
5
- interruptAndCheck,
6
- LangiumDocument,
7
- LangiumServices,
8
- streamAllContents,
9
- } from 'langium';
10
- import { CancellationToken } from 'vscode-jsonrpc';
11
- import { isEnumField } from './generated/ast';
12
-
13
- /**
14
- * Custom Langium ScopeComputation implementation which adds enum fields into global scope
15
- */
16
- export class ZModelScopeComputation extends DefaultScopeComputation {
17
- constructor(private readonly services: LangiumServices) {
18
- super(services);
19
- }
20
-
21
- async computeExports(
22
- document: LangiumDocument<AstNode>,
23
- cancelToken?: CancellationToken | undefined
24
- ): Promise<AstNodeDescription[]> {
25
- const result = await super.computeExports(document, cancelToken);
26
-
27
- // add enum fields so they can be globally resolved across modules
28
- for (const node of streamAllContents(document.parseResult.value)) {
29
- if (cancelToken) {
30
- await interruptAndCheck(cancelToken);
31
- }
32
- if (isEnumField(node)) {
33
- const desc =
34
- this.services.workspace.AstNodeDescriptionProvider.createDescription(
35
- node,
36
- node.name,
37
- document
38
- );
39
- result.push(desc);
40
- }
41
- }
42
-
43
- return result;
44
- }
45
- }
@@ -1,23 +0,0 @@
1
- import { DefaultWorkspaceManager, LangiumDocument } from 'langium';
2
- import path from 'path';
3
- import { WorkspaceFolder } from 'vscode-languageserver';
4
- import { URI } from 'vscode-uri';
5
- import { STD_LIB_MODULE_NAME } from './constants';
6
-
7
- /**
8
- * Custom Langium WorkspaceManager implementation which automatically loads stdlib.zmodel
9
- */
10
- export default class ZModelWorkspaceManager extends DefaultWorkspaceManager {
11
- protected async loadAdditionalDocuments(
12
- _folders: WorkspaceFolder[],
13
- _collector: (document: LangiumDocument) => void
14
- ): Promise<void> {
15
- await super.loadAdditionalDocuments(_folders, _collector);
16
- const stdLibUri = URI.file(
17
- path.join(__dirname, '../res', STD_LIB_MODULE_NAME)
18
- );
19
- console.log(`Adding stdlib document from ${stdLibUri}`);
20
- const stdlib = this.langiumDocuments.getOrCreateDocument(stdLibUri);
21
- _collector(stdlib);
22
- }
23
- }