@hydranium/core 1.0.0-next.27 → 1.0.0-next.28
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.
- package/lib/langium/integration-services.d.ts +26 -1
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +3 -1
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/transfer/transfer-encoder.d.ts +4 -1
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +13 -2
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/package.json +5 -5
- package/src/langium/integration-services.ts +29 -2
- package/src/langium/transfer/transfer-encoder.ts +13 -2
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { type Module } from '@hydranium/langium';
|
|
9
|
+
import { type DeepPartial, type Module } from '@hydranium/langium';
|
|
10
10
|
import { type LangiumServices, type LangiumSharedServices, type PartialLangiumServices, type PartialLangiumSharedServices } from '@hydranium/langium/lsp';
|
|
11
11
|
import { type ServerModuleContext } from './module.js';
|
|
12
12
|
import type { ServerSharedServicesMinimal } from './shared-services.js';
|
|
@@ -82,6 +82,31 @@ export interface IntegrationServicesOptions<TContext extends ServerModuleContext
|
|
|
82
82
|
* it is silently inert.
|
|
83
83
|
*/
|
|
84
84
|
extra?: ReadonlyArray<Module<TShared, PartialLangiumSharedServices>>;
|
|
85
|
+
/**
|
|
86
|
+
* Shared modules composed LAST — after `adopter` — and partial over
|
|
87
|
+
* `TShared` rather than over Langium's shared services.
|
|
88
|
+
*
|
|
89
|
+
* Both differences are the point, and neither is served by
|
|
90
|
+
* {@link extra}. Most framework shared services are constructed with
|
|
91
|
+
* no options (`ModelService: services => new ModelService(services)`),
|
|
92
|
+
* so rebinding the slot is the only way to boot one configured
|
|
93
|
+
* differently; a caller that needs that is usually a test, and the slot
|
|
94
|
+
* it needs is as often a framework ADDITION (`Clock`, `Tracer`,
|
|
95
|
+
* `ProjectManager`) as a Langium one. `extra` can express neither: it
|
|
96
|
+
* is typed `DeepPartial<LangiumSharedServices>`, and it loses to
|
|
97
|
+
* `adopter` on every slot the adopter binds.
|
|
98
|
+
*
|
|
99
|
+
* Kept separate rather than widening `extra` because `extra` is the
|
|
100
|
+
* protocol-head tier, and a head must NOT outrank the adopter. Widening
|
|
101
|
+
* it also does not typecheck — `Module<I, T>` puts `T` in factory
|
|
102
|
+
* return position, so a head module declaring Langium slot types stops
|
|
103
|
+
* being assignable once `T` becomes `DeepPartial<TShared>`.
|
|
104
|
+
*
|
|
105
|
+
* Composing last means an override wins over everything, including the
|
|
106
|
+
* adopter. That is what makes it usable for the slots an adopter binds
|
|
107
|
+
* itself, and why production code should not reach for it.
|
|
108
|
+
*/
|
|
109
|
+
overrides?: ReadonlyArray<Module<TShared, DeepPartial<TShared>>>;
|
|
85
110
|
};
|
|
86
111
|
/**
|
|
87
112
|
* Language-services module trio: generated, adopter, and optional
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-services.d.ts","sourceRoot":"","sources":["../../src/langium/integration-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"integration-services.d.ts","sourceRoot":"","sources":["../../src/langium/integration-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,WAAW,EAAU,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAGJ,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EACnC,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,0BAA0B,CACxC,QAAQ,SAAS,mBAAmB,EACpC,OAAO,SAAS,qBAAqB,GAAG,2BAA2B,EACnE,SAAS,SAAS,eAAe;IAEjC;;;;;;;;;OASG;IACH,OAAO,EAAE,QAAQ,CAAC;IAElB;;;;;;;;;OASG;IACH,aAAa,EAAE;QACZ;;;;;;;;;;;;;;WAcG;QACH,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QACzD,kGAAkG;QAClG,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QACvD;;;;;;;;;;;;WAYG;QACH,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC;QACrE;;;;;;;;;;;;;;;;;;;;;;;WAuBG;QACH,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACnE,CAAC;IAEF;;;;;;;;;;;;;;OAcG;IACH,eAAe,EAAE;QACd,wEAAwE;QACxE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACrD;;;;WAIG;QACH,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;QACxE;;;;;;;;WAQG;QACH,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC;KACnE,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,mBAAmB,CAAC,EAAE,aAAa,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEnF;;;;;OAKG;IACH,0BAA0B,CAAC,EAAE,aAAa,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;CAC7E;AAED;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB,CACvC,OAAO,SAAS,qBAAqB,GAAG,2BAA2B,EACnE,SAAS,SAAS,eAAe;IAEjC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IACrD,+EAA+E;IAC/E,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IACzE,mFAAmF;IACnF,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC;CACnE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CACtC,QAAQ,SAAS,mBAAmB,EACpC,OAAO,SAAS,qBAAqB,GAAG,2BAA2B,EACnE,SAAS,SAAS,eAAe,EAEjC,OAAO,EAAE,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,GACjE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;CAAE,CA0D/E"}
|
|
@@ -41,7 +41,9 @@ export function createIntegrationServices(options) {
|
|
|
41
41
|
// every adopter doesn't repeat it.
|
|
42
42
|
const sharedModule = createServerSharedModule(context);
|
|
43
43
|
const defaultSharedModule = createDefaultSharedModule(context);
|
|
44
|
-
const shared = inject(defaultSharedModule, sharedModules.generated, sharedModule, ...(sharedModules.extra ?? []), sharedModules.adopter
|
|
44
|
+
const shared = inject(defaultSharedModule, sharedModules.generated, sharedModule, ...(sharedModules.extra ?? []), sharedModules.adopter,
|
|
45
|
+
// Last, so an override outranks the adopter too — see `overrides`.
|
|
46
|
+
...(sharedModules.overrides ?? []));
|
|
45
47
|
// Each language gets its OWN `createDefaultModule({ shared })` — the
|
|
46
48
|
// baseline module is per-language state (parser, lexer, linker), so it
|
|
47
49
|
// cannot be shared between the grammars even though `shared` is.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-services.js","sourceRoot":"","sources":["../../src/langium/integration-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"integration-services.js","sourceRoot":"","sources":["../../src/langium/integration-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAoB,MAAM,EAAe,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACJ,mBAAmB,EACnB,yBAAyB,EAK3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAA4B,MAAM,aAAa,CAAC;AA8MjF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,yBAAyB,CAKtC,OAAiE;IAEjE,MAAM,EACH,OAAO,EACP,aAAa,EACb,eAAe,EACf,mBAAmB,GAAG,EAAE,EACxB,0BAA0B,GAAG,sBAAsB,EACrD,GAAG,OAAO,CAAC;IAEZ,sEAAsE;IACtE,yEAAyE;IACzE,2EAA2E;IAC3E,oDAAoD;IACpD,6EAA6E;IAC7E,uEAAuE;IACvE,+EAA+E;IAC/E,6EAA6E;IAC7E,mCAAmC;IACnC,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,CAA6D,CAAC;IACnH,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,OAAO,CAA6D,CAAC;IAC3H,MAAM,MAAM,GAAG,MAAM,CAClB,mBAAmB,EACnB,aAAa,CAAC,SAAS,EACvB,YAAY,EACZ,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE,CAAC,EAC9B,aAAa,CAAC,OAAO;IACrB,mEAAmE;IACnE,GAAI,CAAC,aAAa,CAAC,SAAS,IAAI,EAAE,CAAkE,CAChF,CAAC;IAExB,qEAAqE;IACrE,uEAAuE;IACvE,iEAAiE;IACjE,MAAM,eAAe,GAAG,CACrB,SAAoD,EACpD,OAAuE,EACvE,KAA+D,EACrD,EAAE;QACZ,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAyD,CAAC;QACtH,MAAM,oBAAoB,GAAG,0BAA0B,CAAC,OAAO,CAAyD,CAAC;QACzH,OAAO,MAAM,CAAC,qBAAqB,EAAE,SAAS,EAAE,oBAAoB,EAAE,GAAG,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAyB,CAAC;IAC5H,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAA6D,CAAC;IAC/G,MAAM,QAAQ,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACnG,MAAM,SAAS,GAAG;QACf,QAAQ;QACR,GAAG,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CACrC,eAAe,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,IAAI,YAAY,CAAC,CACxH;KACH,CAAC;IAEF,mEAAmE;IACnE,gEAAgE;IAChE,mCAAmC;IACnC,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAEzE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -275,7 +275,10 @@ export declare class TransferEncoder<TTransferMap = Record<string, TransferEleme
|
|
|
275
275
|
* LSP severity enum to the wire string union, discriminates the
|
|
276
276
|
* diagnostic type from Langium's `data.code` (`'lexing-error'` /
|
|
277
277
|
* `'parsing-error'` else `'validation-error'`), passes through
|
|
278
|
-
* message / element / property / code
|
|
278
|
+
* message / element / property / code, and lifts the framework message
|
|
279
|
+
* params out of `data` so a translating surface can render a
|
|
280
|
+
* parameterised diagnostic rather than a template with its placeholders
|
|
281
|
+
* left standing. Adopters whose validator
|
|
279
282
|
* doesn't decorate diagnostics with `element` still get a valid
|
|
280
283
|
* `TransferDiagnostic` — the field falls back to `''`.
|
|
281
284
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer-encoder.d.ts","sourceRoot":"","sources":["../../../src/langium/transfer/transfer-encoder.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"transfer-encoder.d.ts","sourceRoot":"","sources":["../../../src/langium/transfer/transfer-encoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
+
import { hasMessageIdentity } from '@hydranium/protocol';
|
|
9
10
|
import { AstUtils, DocumentCache, DocumentState, isAstNode, isReference } from '@hydranium/langium';
|
|
10
11
|
import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-protocol';
|
|
11
12
|
/**
|
|
@@ -282,7 +283,10 @@ export class TransferEncoder {
|
|
|
282
283
|
* LSP severity enum to the wire string union, discriminates the
|
|
283
284
|
* diagnostic type from Langium's `data.code` (`'lexing-error'` /
|
|
284
285
|
* `'parsing-error'` else `'validation-error'`), passes through
|
|
285
|
-
* message / element / property / code
|
|
286
|
+
* message / element / property / code, and lifts the framework message
|
|
287
|
+
* params out of `data` so a translating surface can render a
|
|
288
|
+
* parameterised diagnostic rather than a template with its placeholders
|
|
289
|
+
* left standing. Adopters whose validator
|
|
286
290
|
* doesn't decorate diagnostics with `element` still get a valid
|
|
287
291
|
* `TransferDiagnostic` — the field falls back to `''`.
|
|
288
292
|
*
|
|
@@ -291,6 +295,12 @@ export class TransferEncoder {
|
|
|
291
295
|
*/
|
|
292
296
|
toTransferDiagnostic(diagnostic) {
|
|
293
297
|
const langiumCode = diagnostic.data?.code;
|
|
298
|
+
// The same `data` the Langium code comes out of also carries the framework
|
|
299
|
+
// message identity, under its own key so the two conventions co-exist.
|
|
300
|
+
// Taking the params from there rather than from `code` is what lets a
|
|
301
|
+
// translating surface render a PARAMETERISED diagnostic: `code` survives on
|
|
302
|
+
// its own and yields a template with its placeholders left standing.
|
|
303
|
+
const identity = hasMessageIdentity(diagnostic.data) ? diagnostic.data.hydranium : undefined;
|
|
294
304
|
const result = {
|
|
295
305
|
type: langiumCode === 'lexing-error' ? 'lexing-error' : langiumCode === 'parsing-error' ? 'parsing-error' : 'validation-error',
|
|
296
306
|
element: diagnostic.element ?? '',
|
|
@@ -302,7 +312,8 @@ export class TransferEncoder {
|
|
|
302
312
|
: diagnostic.severity === DiagnosticSeverity.Warning
|
|
303
313
|
? 'warning'
|
|
304
314
|
: 'info',
|
|
305
|
-
code: typeof diagnostic.code === 'number' || typeof diagnostic.code === 'string' ? diagnostic.code : langiumCode
|
|
315
|
+
code: typeof diagnostic.code === 'number' || typeof diagnostic.code === 'string' ? diagnostic.code : langiumCode,
|
|
316
|
+
params: identity?.params
|
|
306
317
|
};
|
|
307
318
|
return result;
|
|
308
319
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer-encoder.js","sourceRoot":"","sources":["../../../src/langium/transfer/transfer-encoder.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;
|
|
1
|
+
{"version":3,"file":"transfer-encoder.js","sourceRoot":"","sources":["../../../src/langium/transfer/transfer-encoder.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hydranium/core",
|
|
3
|
-
"version": "1.0.0-next.
|
|
3
|
+
"version": "1.0.0-next.28",
|
|
4
4
|
"description": "Foundational runtime of the hydranium framework: AST coordination layer (services, integrity, AST extension, serialization, multi-client documents) plus the LSP textual head at the /lsp subpath. Consumed by protocol-head packages (@hydranium/data-server, @hydranium/glsp-server).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hydranium",
|
|
@@ -104,8 +104,8 @@
|
|
|
104
104
|
"diff": "^5.2.0"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
|
-
"@hydranium/langium": "1.0.0-next.
|
|
108
|
-
"@hydranium/protocol": "1.0.0-next.
|
|
107
|
+
"@hydranium/langium": "1.0.0-next.28",
|
|
108
|
+
"@hydranium/protocol": "1.0.0-next.28",
|
|
109
109
|
"@playwright/test": "^1.40.0",
|
|
110
110
|
"@types/diff": "^5.2.0",
|
|
111
111
|
"rimraf": "^5.0.0",
|
|
@@ -117,8 +117,8 @@
|
|
|
117
117
|
"vscode-languageserver-types": "^3.17.5"
|
|
118
118
|
},
|
|
119
119
|
"peerDependencies": {
|
|
120
|
-
"@hydranium/langium": "1.0.0-next.
|
|
121
|
-
"@hydranium/protocol": "1.0.0-next.
|
|
120
|
+
"@hydranium/langium": "1.0.0-next.28",
|
|
121
|
+
"@hydranium/protocol": "1.0.0-next.28",
|
|
122
122
|
"@playwright/test": "^1.40.0",
|
|
123
123
|
"vscode-jsonrpc": "9.0.1",
|
|
124
124
|
"vscode-languageserver": "~10.0.1",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { inject, type Module } from '@hydranium/langium';
|
|
10
|
+
import { type DeepPartial, inject, type Module } from '@hydranium/langium';
|
|
11
11
|
import {
|
|
12
12
|
createDefaultModule,
|
|
13
13
|
createDefaultSharedModule,
|
|
@@ -98,6 +98,31 @@ export interface IntegrationServicesOptions<
|
|
|
98
98
|
* it is silently inert.
|
|
99
99
|
*/
|
|
100
100
|
extra?: ReadonlyArray<Module<TShared, PartialLangiumSharedServices>>;
|
|
101
|
+
/**
|
|
102
|
+
* Shared modules composed LAST — after `adopter` — and partial over
|
|
103
|
+
* `TShared` rather than over Langium's shared services.
|
|
104
|
+
*
|
|
105
|
+
* Both differences are the point, and neither is served by
|
|
106
|
+
* {@link extra}. Most framework shared services are constructed with
|
|
107
|
+
* no options (`ModelService: services => new ModelService(services)`),
|
|
108
|
+
* so rebinding the slot is the only way to boot one configured
|
|
109
|
+
* differently; a caller that needs that is usually a test, and the slot
|
|
110
|
+
* it needs is as often a framework ADDITION (`Clock`, `Tracer`,
|
|
111
|
+
* `ProjectManager`) as a Langium one. `extra` can express neither: it
|
|
112
|
+
* is typed `DeepPartial<LangiumSharedServices>`, and it loses to
|
|
113
|
+
* `adopter` on every slot the adopter binds.
|
|
114
|
+
*
|
|
115
|
+
* Kept separate rather than widening `extra` because `extra` is the
|
|
116
|
+
* protocol-head tier, and a head must NOT outrank the adopter. Widening
|
|
117
|
+
* it also does not typecheck — `Module<I, T>` puts `T` in factory
|
|
118
|
+
* return position, so a head module declaring Langium slot types stops
|
|
119
|
+
* being assignable once `T` becomes `DeepPartial<TShared>`.
|
|
120
|
+
*
|
|
121
|
+
* Composing last means an override wins over everything, including the
|
|
122
|
+
* adopter. That is what makes it usable for the slots an adopter binds
|
|
123
|
+
* itself, and why production code should not reach for it.
|
|
124
|
+
*/
|
|
125
|
+
overrides?: ReadonlyArray<Module<TShared, DeepPartial<TShared>>>;
|
|
101
126
|
};
|
|
102
127
|
|
|
103
128
|
/**
|
|
@@ -247,7 +272,9 @@ export function createIntegrationServices<
|
|
|
247
272
|
sharedModules.generated,
|
|
248
273
|
sharedModule,
|
|
249
274
|
...(sharedModules.extra ?? []),
|
|
250
|
-
sharedModules.adopter
|
|
275
|
+
sharedModules.adopter,
|
|
276
|
+
// Last, so an override outranks the adopter too — see `overrides`.
|
|
277
|
+
...((sharedModules.overrides ?? []) as ReadonlyArray<Module<TShared, PartialLangiumSharedServices>>)
|
|
251
278
|
) as unknown as TShared;
|
|
252
279
|
|
|
253
280
|
// Each language gets its OWN `createDefaultModule({ shared })` — the
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
|
+
hasMessageIdentity,
|
|
11
12
|
type Tracer,
|
|
12
13
|
type TransferDiagnostic,
|
|
13
14
|
type TransferElement,
|
|
@@ -387,7 +388,10 @@ export class TransferEncoder<
|
|
|
387
388
|
* LSP severity enum to the wire string union, discriminates the
|
|
388
389
|
* diagnostic type from Langium's `data.code` (`'lexing-error'` /
|
|
389
390
|
* `'parsing-error'` else `'validation-error'`), passes through
|
|
390
|
-
* message / element / property / code
|
|
391
|
+
* message / element / property / code, and lifts the framework message
|
|
392
|
+
* params out of `data` so a translating surface can render a
|
|
393
|
+
* parameterised diagnostic rather than a template with its placeholders
|
|
394
|
+
* left standing. Adopters whose validator
|
|
391
395
|
* doesn't decorate diagnostics with `element` still get a valid
|
|
392
396
|
* `TransferDiagnostic` — the field falls back to `''`.
|
|
393
397
|
*
|
|
@@ -396,6 +400,12 @@ export class TransferEncoder<
|
|
|
396
400
|
*/
|
|
397
401
|
toTransferDiagnostic(diagnostic: TransferLspDiagnostic): TDiagnostic {
|
|
398
402
|
const langiumCode = (diagnostic.data as { code?: string } | undefined)?.code;
|
|
403
|
+
// The same `data` the Langium code comes out of also carries the framework
|
|
404
|
+
// message identity, under its own key so the two conventions co-exist.
|
|
405
|
+
// Taking the params from there rather than from `code` is what lets a
|
|
406
|
+
// translating surface render a PARAMETERISED diagnostic: `code` survives on
|
|
407
|
+
// its own and yields a template with its placeholders left standing.
|
|
408
|
+
const identity = hasMessageIdentity(diagnostic.data) ? diagnostic.data.hydranium : undefined;
|
|
399
409
|
const result: TransferDiagnostic = {
|
|
400
410
|
type: langiumCode === 'lexing-error' ? 'lexing-error' : langiumCode === 'parsing-error' ? 'parsing-error' : 'validation-error',
|
|
401
411
|
element: diagnostic.element ?? '',
|
|
@@ -408,7 +418,8 @@ export class TransferEncoder<
|
|
|
408
418
|
: diagnostic.severity === DiagnosticSeverity.Warning
|
|
409
419
|
? 'warning'
|
|
410
420
|
: 'info',
|
|
411
|
-
code: typeof diagnostic.code === 'number' || typeof diagnostic.code === 'string' ? diagnostic.code : langiumCode
|
|
421
|
+
code: typeof diagnostic.code === 'number' || typeof diagnostic.code === 'string' ? diagnostic.code : langiumCode,
|
|
422
|
+
params: identity?.params
|
|
412
423
|
};
|
|
413
424
|
return result as TDiagnostic;
|
|
414
425
|
}
|