@hydranium/core 1.0.0-next.7 → 1.0.0-next.71
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/documents/ast-document-manager.d.ts +58 -5
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +50 -18
- package/lib/documents/ast-document-manager.js.map +1 -1
- package/lib/documents/client-ids.d.ts +5 -19
- package/lib/documents/client-ids.d.ts.map +1 -1
- package/lib/documents/client-ids.js +5 -19
- package/lib/documents/client-ids.js.map +1 -1
- package/lib/documents/hydranium-text-documents.d.ts +51 -17
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +136 -40
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/language-client-text-shadow.d.ts +41 -9
- package/lib/documents/language-client-text-shadow.d.ts.map +1 -1
- package/lib/documents/language-client-text-shadow.js +56 -11
- package/lib/documents/language-client-text-shadow.js.map +1 -1
- package/lib/documents/self-save-registry.d.ts +37 -6
- package/lib/documents/self-save-registry.d.ts.map +1 -1
- package/lib/documents/self-save-registry.js +28 -15
- package/lib/documents/self-save-registry.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +60 -22
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +16 -9
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/config/configuration-provider.d.ts +81 -0
- package/lib/langium/config/configuration-provider.d.ts.map +1 -0
- package/lib/langium/config/configuration-provider.js +112 -0
- package/lib/langium/config/configuration-provider.js.map +1 -0
- package/lib/langium/config/index.d.ts +1 -0
- package/lib/langium/config/index.d.ts.map +1 -1
- package/lib/langium/config/index.js +1 -0
- package/lib/langium/config/index.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +40 -6
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +13 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +93 -0
- package/lib/langium/document-builder/build-session.d.ts.map +1 -0
- package/lib/langium/document-builder/build-session.js +72 -0
- package/lib/langium/document-builder/build-session.js.map +1 -0
- package/lib/langium/document-builder/document-builder.d.ts +150 -7
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +298 -11
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/document-builder/index.d.ts +1 -0
- package/lib/langium/document-builder/index.d.ts.map +1 -1
- package/lib/langium/document-builder/index.js +1 -0
- package/lib/langium/document-builder/index.js.map +1 -1
- package/lib/langium/integration-services.d.ts +45 -1
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +10 -5
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-service.d.ts +5 -0
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +34 -1
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/model-service/model-service.d.ts +103 -7
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +70 -89
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +82 -13
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +26 -12
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +10 -0
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -0
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +30 -1
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +31 -9
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +13 -56
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +32 -13
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +37 -20
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/shared-services.d.ts +15 -2
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/transfer/transfer-encoder.d.ts +33 -2
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +14 -3
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/validation/document-validator.d.ts +145 -6
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +211 -4
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +3 -4
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +3 -4
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +25 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +25 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +21 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +28 -0
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +8 -0
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +11 -2
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +22 -2
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +13 -5
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +79 -17
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +83 -28
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/locale/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.js +1 -1
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +1 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +1 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/messages/carriers.d.ts +54 -0
- package/lib/messages/carriers.d.ts.map +1 -0
- package/lib/messages/carriers.js +62 -0
- package/lib/messages/carriers.js.map +1 -0
- package/lib/messages/index.d.ts +25 -0
- package/lib/messages/index.d.ts.map +1 -0
- package/lib/messages/index.js +25 -0
- package/lib/messages/index.js.map +1 -0
- package/lib/messages/renderer.d.ts +136 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +159 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/latency-from-env.d.ts +1 -1
- package/lib/node/latency-from-env.js +1 -1
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +1 -40
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profiling-run.d.ts +2 -2
- package/lib/node/profiling-run.js +1 -1
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +52 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +66 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/testing/fake-document.d.ts +14 -3
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js +18 -3
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +31 -4
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +19 -3
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/node/spawned-server.d.ts +14 -0
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +33 -1
- package/lib/testing/node/spawned-server.js.map +1 -1
- package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
- package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
- package/lib/testing/playwright/flaky-network-proxy.js +164 -0
- package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
- package/lib/testing/playwright/index.d.ts +1 -0
- package/lib/testing/playwright/index.d.ts.map +1 -1
- package/lib/testing/playwright/index.js +1 -0
- package/lib/testing/playwright/index.js.map +1 -1
- package/lib/testing/playwright/server-log-capture.d.ts +14 -4
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +21 -4
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +3 -4
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +2 -5
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +8 -0
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +22 -3
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-model-service.d.ts +1 -1
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +2 -2
- package/lib/testing/stub-model-service.js.map +1 -1
- package/package.json +17 -8
- package/src/documents/ast-document-manager.ts +99 -23
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/hydranium-text-documents.ts +161 -55
- package/src/documents/language-client-text-shadow.ts +59 -11
- package/src/documents/self-save-registry.ts +52 -13
- package/src/index.ts +5 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +16 -9
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/lsp-logger.ts +41 -6
- package/src/langium/document-builder/build-pipeline-integration.ts +14 -1
- package/src/langium/document-builder/build-session.ts +87 -0
- package/src/langium/document-builder/document-builder.ts +339 -11
- package/src/langium/document-builder/index.ts +1 -0
- package/src/langium/integration-services.ts +67 -6
- package/src/langium/integrity/integrity-service.ts +35 -1
- package/src/langium/keys/containment.ts +87 -0
- package/src/langium/keys/index.ts +1 -0
- package/src/langium/keys/name-based-key-provider.ts +4 -0
- package/src/langium/model-service/model-service.ts +145 -22
- package/src/langium/module.ts +104 -19
- package/src/langium/naming/name-provider.ts +10 -0
- package/src/langium/naming/name-separator-validation.ts +34 -5
- package/src/langium/residency/cst-residency-service.ts +36 -12
- package/src/langium/scope/hydranium-scope-provider.ts +40 -22
- package/src/langium/shared-services.ts +19 -2
- package/src/langium/transfer/transfer-encoder.ts +45 -3
- package/src/langium/validation/document-validator.ts +255 -8
- package/src/langium/workspace/document-uri-policy.ts +3 -4
- package/src/langium/workspace/hydranium-langium-document-factory.ts +34 -0
- package/src/langium/workspace/hydranium-workspace-manager.ts +30 -1
- package/src/langium/workspace/in-memory-file-system-provider.ts +13 -3
- package/src/langium/workspace/initialize-workspace.ts +34 -5
- package/src/langium/workspace/langium-documents.ts +106 -33
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/hydranium-document-update-handler.ts +1 -1
- package/src/lsp/index.ts +1 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/messages/carriers.ts +78 -0
- package/src/messages/index.ts +27 -0
- package/src/messages/renderer.ts +204 -0
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/node-file-system-provider.ts +1 -41
- package/src/node/profiling-run.ts +3 -3
- package/src/node/rename-over-open-readers.ts +78 -0
- package/src/testing/fake-document.ts +22 -4
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +49 -7
- package/src/testing/node/spawned-server.ts +35 -1
- package/src/testing/playwright/flaky-network-proxy.ts +240 -0
- package/src/testing/playwright/index.ts +1 -0
- package/src/testing/playwright/server-log-capture.ts +24 -5
- package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
- package/src/testing/stub-ast-document-manager.ts +5 -10
- package/src/testing/stub-document-builder.ts +32 -3
- package/src/testing/stub-model-service.ts +2 -2
- package/lib/lsp/instrument-connection.d.ts +0 -36
- package/lib/lsp/instrument-connection.d.ts.map +0 -1
- package/lib/lsp/instrument-connection.js +0 -62
- package/lib/lsp/instrument-connection.js.map +0 -1
- package/src/lsp/instrument-connection.ts +0 -66
|
@@ -11,9 +11,13 @@ import { AstUtils, DocumentState, URI } from '@hydranium/langium';
|
|
|
11
11
|
/**
|
|
12
12
|
* Default priority of the CST-residency pass. Deliberately very high so it runs
|
|
13
13
|
* *last* among `Validated` build-phase passes (the registry iterates priority
|
|
14
|
-
* ascending)
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* ascending).
|
|
15
|
+
*
|
|
16
|
+
* The ordering is defensive, not load-bearing: the pass only arms or cancels an
|
|
17
|
+
* idle timer, so every pass at `Validated` reads a resident CST whichever order
|
|
18
|
+
* they run in, and lowering it changes nothing observable while that holds. It
|
|
19
|
+
* becomes load-bearing the moment the shed stops being deferred — a pass that
|
|
20
|
+
* frees the CST synchronously has to run after every reader of it.
|
|
17
21
|
*/
|
|
18
22
|
export const CST_RESIDENCY_PASS_PRIORITY = 1_000_000;
|
|
19
23
|
/**
|
|
@@ -127,54 +131,7 @@ function rehydrateCst(document, factory) {
|
|
|
127
131
|
}
|
|
128
132
|
return true;
|
|
129
133
|
}
|
|
130
|
-
|
|
131
|
-
* Residency policy that reclaims memory by shedding the concrete syntax tree
|
|
132
|
-
* (CST) of closed documents while keeping their AST resident. Each build refreshes
|
|
133
|
-
* the idle window of the documents in its batch; when a closed, sheddable
|
|
134
|
-
* document's window elapses, every AST node's `$cstNode` and every reference's
|
|
135
|
-
* `$refNode` are nulled, and the CST root, `Range`s and `Position`s become
|
|
136
|
-
* unreachable and are collected.
|
|
137
|
-
*
|
|
138
|
-
* **Terminology.** *Residency* is the state axis (is the CST in memory? —
|
|
139
|
-
* `resident` vs `shed`); *shed* is both the act and the policy vocabulary (drop
|
|
140
|
-
* the CST and every `$refNode`, the document itself survives with its AST,
|
|
141
|
-
* links, and identity intact — deliberately NOT "evict", which would suggest the
|
|
142
|
-
* whole document leaves); *rehydrate* is the restore (re-derive the CST from the
|
|
143
|
-
* retained source text and graft it back, identity-preserving — deliberately not
|
|
144
|
-
* "reload", which would suggest bytes coming back unchanged).
|
|
145
|
-
*
|
|
146
|
-
* **Re-entry is safe.** A shed document that later re-enters a build (because it
|
|
147
|
-
* is relinked as an affected dependent, re-validated, or edited) is re-parsed
|
|
148
|
-
* first by `HydraniumDocumentBuilder.resetToState`
|
|
149
|
-
* ("rehydrate-on-re-entry"), which rebuilds the CST and every `$refNode`. That
|
|
150
|
-
* matters because Langium derives the reference index — and thus
|
|
151
|
-
* `IndexManager.isAffected` and the `segment` used by rename / find-references —
|
|
152
|
-
* from `$refNode`; without rehydration a re-index would silently drop the
|
|
153
|
-
* document's cross-references and its dependents would stop being relinked.
|
|
154
|
-
*
|
|
155
|
-
* Constructed with `(services, options)` and self-registers a `Validated`
|
|
156
|
-
* `BuildPhasePass`, which
|
|
157
|
-
* is why the framework constructs it eagerly — the pass must be registered before
|
|
158
|
-
* the first build. Shedding itself is opt-in: the bound default strategy is
|
|
159
|
-
* `always-keep`, so the pass runs and sheds nothing until an adopter rebinds the
|
|
160
|
-
* slot with a shedding strategy.
|
|
161
|
-
*
|
|
162
|
-
* **Read-side navigation under a shedding strategy.** Read-only LSP requests do
|
|
163
|
-
* not run a build, so they do not trigger the build-side rehydrate. Features that
|
|
164
|
-
* only read the document under the cursor (completion, symbols, formatting, …)
|
|
165
|
-
* see an open document, never a shed one, and index-based cross-file features
|
|
166
|
-
* (find-references, rename, workspace symbols) read the reference index — both
|
|
167
|
-
* unaffected. What does reach a shed document is anything reading a cross-file
|
|
168
|
-
* *target*: target-range navigation (go-to-definition / declaration /
|
|
169
|
-
* implementation / type & call hierarchy) reads the target's live CST for its
|
|
170
|
-
* range, and hover/completion documentation reads the target's preceding comment
|
|
171
|
-
* out of the same CST. Into a currently-closed (shed) file the CST is restored on
|
|
172
|
-
* demand by the identity-preserving graft of {@link rehydrateNode} /
|
|
173
|
-
* {@link rehydrate}, driven transparently from the framework
|
|
174
|
-
* `NameProvider.getNameNode` chokepoint, the comment provider, and
|
|
175
|
-
* `AbstractHydraniumLangiumDocuments.getOrCreateDocument`.
|
|
176
|
-
*/
|
|
177
|
-
export class CstResidencyService {
|
|
134
|
+
export class DefaultCstResidencyService {
|
|
178
135
|
services;
|
|
179
136
|
strategy;
|
|
180
137
|
/** Bytes-per-node for the optional reclaim estimate in traces; `0` disables it. */
|
|
@@ -222,7 +179,7 @@ export class CstResidencyService {
|
|
|
222
179
|
* method is where that hook goes.
|
|
223
180
|
*/
|
|
224
181
|
rehydrate(document) {
|
|
225
|
-
|
|
182
|
+
rehydrateCst(document, this.services.workspace.LangiumDocumentFactory);
|
|
226
183
|
}
|
|
227
184
|
/**
|
|
228
185
|
* Node-level convenience over {@link rehydrate}: a resident node (its
|
|
@@ -232,9 +189,9 @@ export class CstResidencyService {
|
|
|
232
189
|
*/
|
|
233
190
|
rehydrateNode(node) {
|
|
234
191
|
if (node.$cstNode !== undefined) {
|
|
235
|
-
return
|
|
192
|
+
return;
|
|
236
193
|
}
|
|
237
|
-
|
|
194
|
+
this.rehydrate(AstUtils.getDocument(node));
|
|
238
195
|
}
|
|
239
196
|
/**
|
|
240
197
|
* After each build, refresh the idle timer of every document in the batch: an
|
|
@@ -292,8 +249,8 @@ export class CstResidencyService {
|
|
|
292
249
|
}
|
|
293
250
|
this.shedTotal += this.shed(document);
|
|
294
251
|
}
|
|
295
|
-
/** Cancel
|
|
296
|
-
|
|
252
|
+
/** Cancel every armed shed, so a document that has gone idle keeps its CST. */
|
|
253
|
+
cancelPendingShed() {
|
|
297
254
|
for (const timer of this.idleTimers.values()) {
|
|
298
255
|
timer.dispose();
|
|
299
256
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cst-residency-service.js","sourceRoot":"","sources":["../../../src/langium/residency/cst-residency-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,SAAS,EAAc,SAAS,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAEJ,QAAQ,EACR,aAAa,EAIb,GAAG,EACL,MAAM,oBAAoB,CAAC;AAK5B
|
|
1
|
+
{"version":3,"file":"cst-residency-service.js","sourceRoot":"","sources":["../../../src/langium/residency/cst-residency-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { type Tracer, type ReferenceContext, type ReferenceRequest, type ReferenceSource, type SyntheticSource } from '@hydranium/protocol';
|
|
10
|
-
import { type AstNode, type AstNodeDescription, type AstNodeLocator, DefaultScopeProvider, type
|
|
10
|
+
import { type AstNode, type AstNodeDescription, type AstNodeLocator, DefaultScopeProvider, type ReferenceInfo, type Scope, type ScopeOptions, type URI, WorkspaceCache } from '@hydranium/langium';
|
|
11
11
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
12
12
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
13
13
|
import { type NameProvider } from '../naming/name-provider.js';
|
|
14
|
+
import { type HydraniumDocumentRegistry } from '../workspace/langium-documents.js';
|
|
14
15
|
import { type ScopeExtensionService } from './scope-extension-service.js';
|
|
15
16
|
/**
|
|
16
17
|
* Construction-time options for {@link HydraniumScopeProvider}. Extends
|
|
@@ -113,7 +114,7 @@ export interface ScopeContext {
|
|
|
113
114
|
*/
|
|
114
115
|
export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
115
116
|
protected readonly services: HydraniumLanguageServices;
|
|
116
|
-
protected readonly langiumDocuments:
|
|
117
|
+
protected readonly langiumDocuments: HydraniumDocumentRegistry;
|
|
117
118
|
protected readonly astNodeLocator: AstNodeLocator;
|
|
118
119
|
protected readonly scopeExtensionService: ScopeExtensionService;
|
|
119
120
|
protected readonly options: HydraniumScopeProviderOptions;
|
|
@@ -307,12 +308,13 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
307
308
|
* Convert a protocol-layer {@link ReferenceContext} into a Langium
|
|
308
309
|
* {@link ReferenceInfo} the rest of the scope/linking machinery accepts.
|
|
309
310
|
*
|
|
310
|
-
* Walks `syntheticPath` by FABRICATING a
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
* the
|
|
311
|
+
* Walks `syntheticPath` by FABRICATING a stub per step, so a scope can be
|
|
312
|
+
* queried for an element that does not exist yet — which is what synthetic
|
|
313
|
+
* paths are for. A stub carries the grammar's declared defaults and nothing
|
|
314
|
+
* else, so its containment lists are present but EMPTY: a caller that needs
|
|
315
|
+
* to read a populated collection off the leaf wants
|
|
316
|
+
* {@link resolveReferenceSource} instead, which walks the same path into the
|
|
317
|
+
* real tree.
|
|
316
318
|
*
|
|
317
319
|
* Throws if the context references an unresolvable source; callers
|
|
318
320
|
* that prefer a soft failure should catch and fall back to
|
|
@@ -352,11 +354,28 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
352
354
|
/** Walk `syntheticPath` from the resolved anchor into real children. */
|
|
353
355
|
protected resolveContextLeaf(ctx: ReferenceContext): AstNode | undefined;
|
|
354
356
|
/**
|
|
355
|
-
* Build a transient AST-node stub for a {@link SyntheticSource} request
|
|
356
|
-
*
|
|
357
|
-
*
|
|
358
|
-
*
|
|
359
|
-
*
|
|
357
|
+
* Build a transient AST-node stub for a {@link SyntheticSource} request: a
|
|
358
|
+
* node of the requested type, contained by the document at `source.uri`.
|
|
359
|
+
*
|
|
360
|
+
* **The container is materialised when no document is loaded there**, which
|
|
361
|
+
* is the case the source type exists for — a `SyntheticSource` names a node
|
|
362
|
+
* that does not exist yet, and the create-element flow asks at the FOLDER
|
|
363
|
+
* the file is about to be written into. Abstaining there would answer an
|
|
364
|
+
* empty candidate list, which a client cannot tell from "nothing matches".
|
|
365
|
+
*
|
|
366
|
+
* The stand-in parses under THIS provider's grammar, because a folder URI
|
|
367
|
+
* carries no extension for the routing ladder to end on and this provider is
|
|
368
|
+
* bound per grammar. Reaching for `createEmptyDocument(uri)` without the id
|
|
369
|
+
* instead fails inside the parse, on an empty extension rather than on the
|
|
370
|
+
* URI.
|
|
371
|
+
*
|
|
372
|
+
* The materialised document is unregistered and transient; see
|
|
373
|
+
* `createEmptyDocument`. Overriding is still open to a consumer whose
|
|
374
|
+
* "container" is an inner element rather than the parse root, or one that
|
|
375
|
+
* deliberately declines to answer for an absent document.
|
|
376
|
+
*
|
|
377
|
+
* The stub carries the grammar's declared defaults, so an extension reading a
|
|
378
|
+
* containment list off it sees an empty array rather than `undefined`.
|
|
360
379
|
*/
|
|
361
380
|
protected resolveSyntheticSource(source: SyntheticSource): AstNode | undefined;
|
|
362
381
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-scope-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EAKtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACJ,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"hydranium-scope-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { isDocumentSource, isElementSource, isReferenceContext, isSyntheticSource } from '@hydranium/protocol';
|
|
10
10
|
import { AstUtils, DefaultScopeProvider, MapScope, StreamScope, UriUtils, WorkspaceCache, stream } from '@hydranium/langium';
|
|
11
|
+
import { buildAstNode } from '../ast-extension/ast-node-builder.js';
|
|
11
12
|
import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
12
13
|
/**
|
|
13
14
|
* Per-language scope provider that owns the full scope chain in ONE
|
|
@@ -358,12 +359,13 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
358
359
|
* Convert a protocol-layer {@link ReferenceContext} into a Langium
|
|
359
360
|
* {@link ReferenceInfo} the rest of the scope/linking machinery accepts.
|
|
360
361
|
*
|
|
361
|
-
* Walks `syntheticPath` by FABRICATING a
|
|
362
|
-
*
|
|
363
|
-
*
|
|
364
|
-
*
|
|
365
|
-
*
|
|
366
|
-
* the
|
|
362
|
+
* Walks `syntheticPath` by FABRICATING a stub per step, so a scope can be
|
|
363
|
+
* queried for an element that does not exist yet — which is what synthetic
|
|
364
|
+
* paths are for. A stub carries the grammar's declared defaults and nothing
|
|
365
|
+
* else, so its containment lists are present but EMPTY: a caller that needs
|
|
366
|
+
* to read a populated collection off the leaf wants
|
|
367
|
+
* {@link resolveReferenceSource} instead, which walks the same path into the
|
|
368
|
+
* real tree.
|
|
367
369
|
*
|
|
368
370
|
* Throws if the context references an unresolvable source; callers
|
|
369
371
|
* that prefer a soft failure should catch and fall back to
|
|
@@ -375,16 +377,15 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
375
377
|
throw new Error('Invalid reference source');
|
|
376
378
|
}
|
|
377
379
|
for (const step of ctx.syntheticPath ?? []) {
|
|
378
|
-
container = {
|
|
380
|
+
container = buildAstNode(this.services.shared.AstReflection, step.type, {
|
|
379
381
|
$container: container,
|
|
380
382
|
$containerProperty: step.containerProperty,
|
|
381
383
|
// Part of Langium's own container contract, so a stub that omits it
|
|
382
384
|
// is an under-specified node: anything reading position off the
|
|
383
385
|
// chain (a key provider, an adopter scope extension) sees
|
|
384
386
|
// `undefined` where the caller named a slot.
|
|
385
|
-
$containerIndex: step.index
|
|
386
|
-
|
|
387
|
-
};
|
|
387
|
+
$containerIndex: step.index
|
|
388
|
+
});
|
|
388
389
|
}
|
|
389
390
|
return {
|
|
390
391
|
reference: { $refText: '', ref: undefined },
|
|
@@ -472,18 +473,34 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
472
473
|
return node ?? undefined;
|
|
473
474
|
}
|
|
474
475
|
/**
|
|
475
|
-
* Build a transient AST-node stub for a {@link SyntheticSource} request
|
|
476
|
-
*
|
|
477
|
-
*
|
|
478
|
-
*
|
|
479
|
-
*
|
|
476
|
+
* Build a transient AST-node stub for a {@link SyntheticSource} request: a
|
|
477
|
+
* node of the requested type, contained by the document at `source.uri`.
|
|
478
|
+
*
|
|
479
|
+
* **The container is materialised when no document is loaded there**, which
|
|
480
|
+
* is the case the source type exists for — a `SyntheticSource` names a node
|
|
481
|
+
* that does not exist yet, and the create-element flow asks at the FOLDER
|
|
482
|
+
* the file is about to be written into. Abstaining there would answer an
|
|
483
|
+
* empty candidate list, which a client cannot tell from "nothing matches".
|
|
484
|
+
*
|
|
485
|
+
* The stand-in parses under THIS provider's grammar, because a folder URI
|
|
486
|
+
* carries no extension for the routing ladder to end on and this provider is
|
|
487
|
+
* bound per grammar. Reaching for `createEmptyDocument(uri)` without the id
|
|
488
|
+
* instead fails inside the parse, on an empty extension rather than on the
|
|
489
|
+
* URI.
|
|
490
|
+
*
|
|
491
|
+
* The materialised document is unregistered and transient; see
|
|
492
|
+
* `createEmptyDocument`. Overriding is still open to a consumer whose
|
|
493
|
+
* "container" is an inner element rather than the parse root, or one that
|
|
494
|
+
* deliberately declines to answer for an absent document.
|
|
495
|
+
*
|
|
496
|
+
* The stub carries the grammar's declared defaults, so an extension reading a
|
|
497
|
+
* containment list off it sees an empty array rather than `undefined`.
|
|
480
498
|
*/
|
|
481
499
|
resolveSyntheticSource(source) {
|
|
482
|
-
const
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
}
|
|
486
|
-
return { $type: source.type, $container: document.parseResult.value };
|
|
500
|
+
const uri = UriUtils.toUri(source.uri);
|
|
501
|
+
const document = this.langiumDocuments.getDocument(uri) ??
|
|
502
|
+
this.langiumDocuments.createEmptyDocument(uri, this.services.LanguageMetaData.languageId);
|
|
503
|
+
return buildAstNode(this.services.shared.AstReflection, source.type, { $container: document.parseResult.value });
|
|
487
504
|
}
|
|
488
505
|
/**
|
|
489
506
|
* Resolve the semantic root node of the document at `uri`. Default: looks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-scope-provider.js","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAMJ,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAIJ,QAAQ,EACR,oBAAoB,
|
|
1
|
+
{"version":3,"file":"hydranium-scope-provider.js","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,11 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import type { Clock, Logger, Project, Tracer } from '@hydranium/protocol';
|
|
10
10
|
import type { LangiumSharedCoreServices } from '@hydranium/langium';
|
|
11
|
+
import type { ServerLocale } from '../locale/server-locale.js';
|
|
12
|
+
import type { MessageRenderer } from '../messages/renderer.js';
|
|
11
13
|
import type { SelfSaveRegistry } from '../documents/self-save-registry.js';
|
|
12
14
|
import type { WritableFileSystemProvider } from '../documents/ast-document-manager.js';
|
|
15
|
+
import type { HydraniumDocumentRegistry } from './workspace/langium-documents.js';
|
|
13
16
|
import type { BuildPhasePassService } from './build-phase-pass/build-phase-pass-service.js';
|
|
14
17
|
import type { CstResidencyService } from './residency/cst-residency-service.js';
|
|
15
18
|
import type { BuildPipelineIntegration } from './document-builder/build-pipeline-integration.js';
|
|
@@ -25,8 +28,9 @@ import type { AdditionalDocumentContribution } from './workspace/additional-docu
|
|
|
25
28
|
* framework additions that other framework services consume: the dedicated
|
|
26
29
|
* {@link Clock}, {@link Logger} and {@link Tracer} top-level slots (injectable
|
|
27
30
|
* time source, emission-only logger, and the measure-and-emit tracer composed
|
|
28
|
-
* from the other two), the {@link AdditionalDocumentContribution} group,
|
|
29
|
-
* {@link
|
|
31
|
+
* from the other two), the {@link AdditionalDocumentContribution} group, the
|
|
32
|
+
* {@link MessageRenderer} and the {@link ServerLocale} it renders in,
|
|
33
|
+
* an {@link ExtendedServiceRegistry}, and on `workspace` a writable file-system
|
|
30
34
|
* provider plus {@link HydraniumWorkspaceManager}, {@link ProjectManager},
|
|
31
35
|
* {@link SelfSaveRegistry}, {@link BuildPipelineIntegration},
|
|
32
36
|
* {@link BuildPhasePassService}, {@link CstResidencyService} and
|
|
@@ -55,6 +59,14 @@ export interface ServerSharedServicesMinimal<TProject extends Project = Project>
|
|
|
55
59
|
* adopters deep-merge contributions that seed built-in / stdlib documents.
|
|
56
60
|
*/
|
|
57
61
|
additionalDocuments: Record<string, AdditionalDocumentContribution>;
|
|
62
|
+
/**
|
|
63
|
+
* Renders each user-facing message once, before the server sends it. On the
|
|
64
|
+
* shared tier with no workspace dependency, because all three heads'
|
|
65
|
+
* messages pass through it.
|
|
66
|
+
*/
|
|
67
|
+
MessageRenderer: MessageRenderer;
|
|
68
|
+
/** The locale an init handed the server, for whoever renders in it. */
|
|
69
|
+
ServerLocale: ServerLocale;
|
|
58
70
|
/**
|
|
59
71
|
* Narrows Langium's base `ServiceRegistry` slot to the framework impl the
|
|
60
72
|
* framework always binds, so the abstaining lookups — `getServicesFor`
|
|
@@ -68,6 +80,7 @@ export interface ServerSharedServicesMinimal<TProject extends Project = Project>
|
|
|
68
80
|
workspace: LangiumSharedCoreServices['workspace'] & {
|
|
69
81
|
FileSystemProvider: WritableFileSystemProvider;
|
|
70
82
|
WorkspaceManager: HydraniumWorkspaceManager;
|
|
83
|
+
LangiumDocuments: HydraniumDocumentRegistry;
|
|
71
84
|
ProjectManager: ProjectManager<TProject>;
|
|
72
85
|
SelfSaveRegistry: SelfSaveRegistry;
|
|
73
86
|
BuildPipelineIntegration: BuildPipelineIntegration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-services.d.ts","sourceRoot":"","sources":["../../src/langium/shared-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AAEtG
|
|
1
|
+
{"version":3,"file":"shared-services.d.ts","sourceRoot":"","sources":["../../src/langium/shared-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAC5F,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AAEtG;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,2BAA2B,CAAC,QAAQ,SAAS,OAAO,GAAG,OAAO,CAAE,SAAQ,yBAAyB;IAC/G,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC;IACpE;;;;OAIG;IACH,eAAe,EAAE,eAAe,CAAC;IACjC,uEAAuE;IACvE,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;;;;OAQG;IACH,eAAe,EAAE,uBAAuB,CAAC;IACzC,SAAS,EAAE,yBAAyB,CAAC,WAAW,CAAC,GAAG;QAGjD,kBAAkB,EAAE,0BAA0B,CAAC;QAI/C,gBAAgB,EAAE,yBAAyB,CAAC;QAK7B,gBAAgB,EAAE,yBAAyB,CAAC;QAC3D,cAAc,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,iBAAiB,EAAE,iBAAiB,CAAC;KACvC,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,2BAA2B,KAAK,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAEvI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-services.js","sourceRoot":"","sources":["../../src/langium/shared-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;
|
|
1
|
+
{"version":3,"file":"shared-services.js","sourceRoot":"","sources":["../../src/langium/shared-services.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAgGlF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CAAU,MAA0D;IACpG,OAAO,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,QAAuC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -68,6 +68,34 @@ export interface TransferEnvelopeSource<TDiagnostic> {
|
|
|
68
68
|
readonly version: number;
|
|
69
69
|
readonly diagnostics: readonly (TDiagnostic | Diagnostic)[];
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* The AST→transfer contract a DI slot holds, implemented by
|
|
73
|
+
* {@link DefaultTransferEncoder}.
|
|
74
|
+
*
|
|
75
|
+
* **This is an interface and not the class, and that is load-bearing.** A class
|
|
76
|
+
* in a slot drags its `protected` members into every assignability check, which
|
|
77
|
+
* TypeScript compares NOMINALLY — so the slot type could not be satisfied by a
|
|
78
|
+
* subclass declared against a second physical copy of this package, and an
|
|
79
|
+
* adopter narrowing the slot had to intersect with the framework's declaration
|
|
80
|
+
* rather than replace it, leaving method resolution dependent on declaration
|
|
81
|
+
* order. An interface has no protected members and is compared structurally, so
|
|
82
|
+
* neither applies.
|
|
83
|
+
*
|
|
84
|
+
* **The transfer returns are the structural base ({@link TransferElement}), not
|
|
85
|
+
* the per-grammar overlay.** The overlay cannot parameterise this contract:
|
|
86
|
+
* `TransferTypeFor` reaches `keyof TTransferMap`, which makes that parameter
|
|
87
|
+
* measured-INVARIANT, and invariant parameters relate only when their arguments
|
|
88
|
+
* are mutually assignable — so a map-parameterised contract admits no adopter
|
|
89
|
+
* instantiation at all. Heads read this contract and do not know adopter maps;
|
|
90
|
+
* an adopter recovers the precise type by declaring its own slot, which it can
|
|
91
|
+
* now do by replacement.
|
|
92
|
+
*/
|
|
93
|
+
export interface TransferEncoder<TDiagnostic extends TransferDiagnostic = TransferDiagnostic> {
|
|
94
|
+
toTransfer<T extends AstNode>(ast: T, mode?: TransferMode): TransferElement;
|
|
95
|
+
toTransferDocument(langiumDocument: LangiumDocument): TransferDocument<TransferElement, TDiagnostic>;
|
|
96
|
+
astDocumentToTransferDocument<TAst extends AstNode>(document: AstDocument<TAst, TDiagnostic | TransferLspDiagnostic>): TransferDocument<TransferElement, TDiagnostic>;
|
|
97
|
+
toTransferDiagnostic(diagnostic: TransferLspDiagnostic): TDiagnostic;
|
|
98
|
+
}
|
|
71
99
|
/**
|
|
72
100
|
* One-directional structural mapper from a Langium AST into the wire
|
|
73
101
|
* transfer-model shape ({@link TransferElement}-based JSON).
|
|
@@ -112,7 +140,7 @@ export interface TransferEnvelopeSource<TDiagnostic> {
|
|
|
112
140
|
* - {@link toTransferDiagnostic} — project a {@link TransferLspDiagnostic}
|
|
113
141
|
* (the framework validator's output) to {@link TDiagnostic}.
|
|
114
142
|
*/
|
|
115
|
-
export declare class
|
|
143
|
+
export declare class DefaultTransferEncoder<TTransferMap = Record<string, TransferElement>, TDiagnostic extends TransferDiagnostic = TransferDiagnostic> {
|
|
116
144
|
protected readonly services: ServerSharedServicesMinimal;
|
|
117
145
|
protected readonly tracer: Tracer;
|
|
118
146
|
/**
|
|
@@ -275,7 +303,10 @@ export declare class TransferEncoder<TTransferMap = Record<string, TransferEleme
|
|
|
275
303
|
* LSP severity enum to the wire string union, discriminates the
|
|
276
304
|
* diagnostic type from Langium's `data.code` (`'lexing-error'` /
|
|
277
305
|
* `'parsing-error'` else `'validation-error'`), passes through
|
|
278
|
-
* message / element / property / code
|
|
306
|
+
* message / element / property / code, and lifts the framework message
|
|
307
|
+
* params out of `data` so a translating surface can render a
|
|
308
|
+
* parameterised diagnostic rather than a template with its placeholders
|
|
309
|
+
* left standing. Adopters whose validator
|
|
279
310
|
* doesn't decorate diagnostics with `element` still get a valid
|
|
280
311
|
* `TransferDiagnostic` — the field falls back to `''`.
|
|
281
312
|
*
|
|
@@ -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":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAEJ,KAAK,MAAM,EACX,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAY,KAAK,OAAO,EAAE,aAAa,EAAyC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxI,OAAO,EAAE,UAAU,EAAsB,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEjF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9C;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,aAAa;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB,CAAC,WAAW;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,GAAG,UAAU,CAAC,EAAE,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,eAAe,CAAC,WAAW,SAAS,kBAAkB,GAAG,kBAAkB;IACzF,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC;IAC5E,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACrG,6BAA6B,CAAC,IAAI,SAAS,OAAO,EAC/C,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,qBAAqB,CAAC,GAChE,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAClD,oBAAoB,CAAC,UAAU,EAAE,qBAAqB,GAAG,WAAW,CAAC;CACvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,sBAAsB,CAKhC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC9C,WAAW,SAAS,kBAAkB,GAAG,kBAAkB;IA2BxD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B;IAzB3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBASvC,QAAQ,EAAE,2BAA2B,EACxD,OAAO,GAAE,cAAmB;IAM/B;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAItD;;;;;;;;;OASG;IACH,UAAU,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,GAAE,YAAqB,GAAG,eAAe,CAAC,CAAC,EAAE,YAAY,CAAC;IASpG;;;;;;;OAOG;IACH,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,aAAa;IAI9E;;;;;OAKG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoBnF;;;;;;;;OAQG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,MAAM,EAAE;IAM/E;;;;;;OAMG;IACH,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAI1F;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAI3F;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI9G;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,kBAAkB,CAAC,IAAI,SAAS,OAAO,EACpC,eAAe,EAAE,eAAe,GAChC,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC;IAerE;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,wBAAwB,CAAC,IAAI,SAAS,OAAO,EACpD,MAAM,EAAE,sBAAsB,CAAC,WAAW,CAAC,EAC3C,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,GACzC,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC;IASrE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,6BAA6B,CAAC,IAAI,SAAS,OAAO,EAC/C,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,qBAAqB,CAAC,GAChE,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC;IAKrE;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,oBAAoB,CAAC,UAAU,EAAE,qBAAqB,GAAG,WAAW;IA0BpE;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO;CAY5E"}
|
|
@@ -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
|
/**
|
|
@@ -52,7 +53,7 @@ import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-protocol';
|
|
|
52
53
|
* - {@link toTransferDiagnostic} — project a {@link TransferLspDiagnostic}
|
|
53
54
|
* (the framework validator's output) to {@link TDiagnostic}.
|
|
54
55
|
*/
|
|
55
|
-
export class
|
|
56
|
+
export class DefaultTransferEncoder {
|
|
56
57
|
services;
|
|
57
58
|
tracer;
|
|
58
59
|
/**
|
|
@@ -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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"}
|