@hydranium/core 1.0.0-next.18 → 1.0.0-next.181
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/README.md +5 -1
- package/lib/documents/ast-document-manager.d.ts +190 -30
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +236 -40
- 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/client-session-errors.d.ts +15 -0
- package/lib/documents/client-session-errors.d.ts.map +1 -0
- package/lib/documents/client-session-errors.js +15 -0
- package/lib/documents/client-session-errors.js.map +1 -0
- package/lib/documents/client-session-registry.d.ts +138 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +187 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- package/lib/documents/file-system-task-queue.d.ts +49 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +34 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +447 -82
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +780 -160
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +3 -0
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +3 -0
- package/lib/documents/index.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 +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.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/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.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/config/settings.js.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.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/diagnostics/server-tracer.d.ts.map +1 -1
- package/lib/langium/diagnostics/server-tracer.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
- 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 +368 -21
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +641 -47
- 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/documentation/comment-provider.d.ts.map +1 -1
- package/lib/langium/documentation/comment-provider.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-rule.d.ts +13 -5
- package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-rule.js.map +1 -1
- package/lib/langium/integrity/integrity-service.d.ts +58 -13
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +213 -29
- 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/keys/positional-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/positional-key-provider.js.map +1 -1
- package/lib/langium/labeling/label-provider.d.ts.map +1 -1
- package/lib/langium/labeling/label-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +27 -2
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +16 -2
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +307 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +395 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +1 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +1 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-service.d.ts +276 -226
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +251 -375
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +144 -35
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +46 -35
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +25 -4
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +2 -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/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +9 -2
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +2 -2
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +31 -11
- 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/ast-node-description-provider.d.ts.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +48 -13
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +56 -20
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/scope/reference-builder.d.ts.map +1 -1
- package/lib/langium/scope/reference-builder.js.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +11 -20
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +12 -21
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/serialization/json-serializer.d.ts +1 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +15 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +16 -0
- package/lib/langium/service-registry.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 +60 -17
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +38 -16
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +423 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +906 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +43 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +48 -0
- package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
- package/lib/langium/trivia/index.d.ts +14 -0
- package/lib/langium/trivia/index.d.ts.map +1 -0
- package/lib/langium/trivia/index.js +14 -0
- package/lib/langium/trivia/index.js.map +1 -0
- package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
- package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-contribution.js +10 -0
- package/lib/langium/trivia/trivia-contribution.js.map +1 -0
- package/lib/langium/trivia/trivia-preserver.d.ts +50 -0
- package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-preserver.js +10 -0
- package/lib/langium/trivia/trivia-preserver.js.map +1 -0
- package/lib/langium/trivia/trivia-service.d.ts +70 -0
- package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-service.js +56 -0
- package/lib/langium/trivia/trivia-service.js.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/validation/document-validator.d.ts +294 -10
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +448 -5
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +17 -12
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +10 -9
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-not-found.d.ts +17 -0
- package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
- package/lib/langium/workspace/file-not-found.js +20 -0
- package/lib/langium/workspace/file-not-found.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +84 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +93 -14
- package/lib/langium/workspace/file-system-provider.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-lock.d.ts +43 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +81 -8
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +128 -10
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +25 -2
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +41 -15
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/index-manager.d.ts.map +1 -1
- package/lib/langium/workspace/index-manager.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +31 -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 +91 -29
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +0 -7
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +0 -7
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/virtual-document.d.ts +48 -15
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +78 -18
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +20 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +12 -4
- package/lib/langium/workspace/write-lock-scope.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/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +90 -79
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +152 -99
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +3 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +3 -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/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- 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 +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/event-loop-monitor.js.map +1 -1
- package/lib/node/heap-ceiling.d.ts +61 -0
- package/lib/node/heap-ceiling.d.ts.map +1 -0
- package/lib/node/heap-ceiling.js +72 -0
- package/lib/node/heap-ceiling.js.map +1 -0
- package/lib/node/index.d.ts +1 -0
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -0
- package/lib/node/index.js.map +1 -1
- package/lib/node/latency-from-env.d.ts +1 -1
- package/lib/node/latency-from-env.js +1 -1
- package/lib/node/lint-grammar.js.map +1 -1
- package/lib/node/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +1 -0
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +39 -4
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +109 -49
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/process-memory.js.map +1 -1
- package/lib/node/profile-capture.d.ts +8 -2
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js.map +1 -1
- package/lib/node/profile-digest.js.map +1 -1
- package/lib/node/profiling-run.d.ts +2 -2
- package/lib/node/profiling-run.d.ts.map +1 -1
- 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/node/socket-launcher.d.ts +16 -1
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +4 -3
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/stdio-launcher.d.ts +1 -1
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +1 -1
- package/lib/node/stdio-launcher.js.map +1 -1
- package/lib/testing/document-uri-policy-conformance.js.map +1 -1
- package/lib/testing/fake-description.js.map +1 -1
- package/lib/testing/fake-document.d.ts +16 -4
- 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/index.d.ts.map +1 -1
- package/lib/testing/index.js +1 -0
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/langium-test-helpers.d.ts.map +1 -1
- package/lib/testing/langium-test-helpers.js +1 -0
- package/lib/testing/langium-test-helpers.js.map +1 -1
- package/lib/testing/make-noop-language-services.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 +62 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +30 -9
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/make-test-tracer.js.map +1 -1
- package/lib/testing/node/golden-corpus.js.map +1 -1
- package/lib/testing/node/index.d.ts +1 -0
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +1 -0
- package/lib/testing/node/index.js.map +1 -1
- package/lib/testing/node/lsp-harness.d.ts.map +1 -1
- package/lib/testing/node/lsp-harness.js +2 -0
- package/lib/testing/node/lsp-harness.js.map +1 -1
- package/lib/testing/node/lsp-server-connection.d.ts +11 -3
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +42 -9
- package/lib/testing/node/lsp-server-connection.js.map +1 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +10 -5
- package/lib/testing/node/scratch-workspace.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/node/unhandled-rejections.d.ts +20 -0
- package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
- package/lib/testing/node/unhandled-rejections.js +32 -0
- package/lib/testing/node/unhandled-rejections.js.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
- package/lib/testing/playwright/e2e-profiling.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/run-update-pipeline.d.ts +4 -4
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +10 -9
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +17 -9
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +26 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +57 -4
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +22 -7
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +92 -15
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
- package/lib/testing/stub-index-manager.js.map +1 -1
- package/lib/testing/stub-langium-documents.d.ts +3 -2
- package/lib/testing/stub-langium-documents.d.ts.map +1 -1
- package/lib/testing/stub-langium-documents.js.map +1 -1
- package/lib/testing/stub-model-service.d.ts +7 -6
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +4 -4
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/testing/stub-project-manager.js.map +1 -1
- package/lib/testing/stub-service-registry.js.map +1 -1
- package/lib/util/connection-liveness.d.ts +7 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +35 -14
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +35 -26
- package/src/documents/ast-document-manager.ts +349 -65
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +24 -0
- package/src/documents/client-session-registry.ts +240 -0
- package/src/documents/file-system-task-queue.ts +68 -0
- package/src/documents/hydranium-text-documents.ts +973 -202
- package/src/documents/index.ts +3 -0
- package/src/documents/language-client-text-shadow.ts +59 -11
- package/src/documents/self-save-registry.ts +52 -13
- package/src/index.ts +6 -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 +50 -5
- package/src/langium/document-builder/build-session.ts +87 -0
- package/src/langium/document-builder/document-builder.ts +724 -46
- package/src/langium/document-builder/index.ts +1 -0
- package/src/langium/integration-services.ts +67 -6
- package/src/langium/integrity/integrity-rule.ts +13 -5
- package/src/langium/integrity/integrity-service.ts +229 -30
- 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/language-module.ts +42 -4
- package/src/langium/model-service/client-session.ts +606 -0
- package/src/langium/model-service/index.ts +1 -0
- package/src/langium/model-service/model-service.ts +418 -399
- package/src/langium/module.ts +193 -64
- package/src/langium/naming/name-provider.ts +27 -5
- package/src/langium/naming/name-separator-validation.ts +34 -5
- package/src/langium/project/abstract-project-manager.ts +9 -1
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +36 -14
- package/src/langium/scope/hydranium-scope-provider.ts +60 -22
- package/src/langium/serialization/abstract-serializer.ts +13 -32
- package/src/langium/service-registry.ts +19 -2
- package/src/langium/shared-services.ts +19 -2
- package/src/langium/transfer/transfer-encoder.ts +85 -24
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +55 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +54 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +537 -11
- package/src/langium/workspace/document-uri-policy.ts +17 -12
- package/src/langium/workspace/file-not-found.ts +23 -0
- package/src/langium/workspace/file-system-provider.ts +153 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +34 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +153 -13
- package/src/langium/workspace/in-memory-file-system-provider.ts +47 -16
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +113 -33
- package/src/langium/workspace/persistent-file-system-provider.ts +0 -7
- package/src/langium/workspace/virtual-document.ts +96 -19
- package/src/langium/workspace/write-lock-scope.ts +24 -11
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
- package/src/lsp/connection-features.ts +67 -0
- package/src/lsp/diagnostics-connection.ts +56 -0
- package/src/lsp/hydranium-document-update-handler.ts +182 -106
- package/src/lsp/index.ts +3 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +78 -0
- package/src/messages/index.ts +36 -0
- package/src/messages/renderer.ts +212 -0
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -0
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/measure-memory.ts +1 -0
- package/src/node/node-file-system-provider.ts +122 -51
- package/src/node/profile-capture.ts +8 -2
- package/src/node/profiling-run.ts +3 -3
- package/src/node/rename-over-open-readers.ts +78 -0
- package/src/node/socket-launcher.ts +19 -4
- package/src/node/stdio-launcher.ts +1 -2
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/index.ts +1 -0
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +106 -30
- package/src/testing/node/index.ts +1 -0
- package/src/testing/node/lsp-harness.ts +2 -0
- package/src/testing/node/lsp-server-connection.ts +61 -11
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +35 -1
- package/src/testing/node/unhandled-rejections.ts +31 -0
- 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/run-update-pipeline.ts +4 -4
- package/src/testing/stub-ast-document-manager.ts +28 -21
- package/src/testing/stub-document-builder.ts +83 -17
- package/src/testing/stub-hydranium-text-documents.ts +127 -22
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +9 -8
- package/src/util/connection-liveness.ts +37 -14
- package/src/util/environment.ts +9 -1
- 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
|
@@ -24,7 +24,6 @@ import {
|
|
|
24
24
|
type AstNodeLocator,
|
|
25
25
|
AstUtils,
|
|
26
26
|
DefaultScopeProvider,
|
|
27
|
-
type LangiumDocuments,
|
|
28
27
|
MapScope,
|
|
29
28
|
type ReferenceInfo,
|
|
30
29
|
type Scope,
|
|
@@ -35,9 +34,11 @@ import {
|
|
|
35
34
|
WorkspaceCache,
|
|
36
35
|
stream
|
|
37
36
|
} from '@hydranium/langium';
|
|
37
|
+
import { buildAstNode } from '../ast-extension/ast-node-builder.js';
|
|
38
38
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
39
39
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
40
40
|
import { type NameProvider } from '../naming/name-provider.js';
|
|
41
|
+
import { type HydraniumDocumentRegistry } from '../workspace/langium-documents.js';
|
|
41
42
|
import { type ScopeExtensionService } from './scope-extension-service.js';
|
|
42
43
|
import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
43
44
|
|
|
@@ -143,7 +144,7 @@ export interface ScopeContext {
|
|
|
143
144
|
* `reference-candidate-provider.ts` module.
|
|
144
145
|
*/
|
|
145
146
|
export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
146
|
-
protected readonly langiumDocuments:
|
|
147
|
+
protected readonly langiumDocuments: HydraniumDocumentRegistry;
|
|
147
148
|
protected readonly astNodeLocator: AstNodeLocator;
|
|
148
149
|
protected readonly scopeExtensionService: ScopeExtensionService;
|
|
149
150
|
protected readonly options: HydraniumScopeProviderOptions;
|
|
@@ -182,6 +183,26 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
182
183
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'ScopeProvider').trace('instantiated');
|
|
183
184
|
}
|
|
184
185
|
|
|
186
|
+
/**
|
|
187
|
+
* Drop every cached scope — the framework's project-tier chain and the
|
|
188
|
+
* inherited global scope it is filtered from.
|
|
189
|
+
*
|
|
190
|
+
* **Called from outside the class**, by the build pipeline once the batch is
|
|
191
|
+
* re-indexed. The caches' own eviction does not cover this:
|
|
192
|
+
* `DocumentBuilder.onUpdate` fires after the build has taken every changed
|
|
193
|
+
* document's symbols out of the index and before it puts them back, so a
|
|
194
|
+
* scope built in that gap denies those symbols exist and every document the
|
|
195
|
+
* same build links afterwards resolves against it.
|
|
196
|
+
*
|
|
197
|
+
* Both go together because the second is derived from the first: clearing
|
|
198
|
+
* only {@link scopeCache} refills it from a stale `globalScopeCache`, and
|
|
199
|
+
* clearing only `globalScopeCache` leaves the filtered copy standing.
|
|
200
|
+
*/
|
|
201
|
+
clearScopeCaches(): void {
|
|
202
|
+
this.scopeCache.clear();
|
|
203
|
+
this.globalScopeCache.clear();
|
|
204
|
+
}
|
|
205
|
+
|
|
185
206
|
/**
|
|
186
207
|
* Framework-owned assembly seam. **Adopters do NOT override this** —
|
|
187
208
|
* override {@link createGlobalScope} instead. This method layers the
|
|
@@ -469,12 +490,13 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
469
490
|
* Convert a protocol-layer {@link ReferenceContext} into a Langium
|
|
470
491
|
* {@link ReferenceInfo} the rest of the scope/linking machinery accepts.
|
|
471
492
|
*
|
|
472
|
-
* Walks `syntheticPath` by FABRICATING a
|
|
473
|
-
*
|
|
474
|
-
*
|
|
475
|
-
*
|
|
476
|
-
*
|
|
477
|
-
* the
|
|
493
|
+
* Walks `syntheticPath` by FABRICATING a stub per step, so a scope can be
|
|
494
|
+
* queried for an element that does not exist yet — which is what synthetic
|
|
495
|
+
* paths are for. A stub carries the grammar's declared defaults and nothing
|
|
496
|
+
* else, so its containment lists are present but EMPTY: a caller that needs
|
|
497
|
+
* to read a populated collection off the leaf wants
|
|
498
|
+
* {@link resolveReferenceSource} instead, which walks the same path into the
|
|
499
|
+
* real tree.
|
|
478
500
|
*
|
|
479
501
|
* Throws if the context references an unresolvable source; callers
|
|
480
502
|
* that prefer a soft failure should catch and fall back to
|
|
@@ -486,16 +508,15 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
486
508
|
throw new Error('Invalid reference source');
|
|
487
509
|
}
|
|
488
510
|
for (const step of ctx.syntheticPath ?? []) {
|
|
489
|
-
container = {
|
|
511
|
+
container = buildAstNode(this.services.shared.AstReflection, step.type, {
|
|
490
512
|
$container: container,
|
|
491
513
|
$containerProperty: step.containerProperty,
|
|
492
514
|
// Part of Langium's own container contract, so a stub that omits it
|
|
493
515
|
// is an under-specified node: anything reading position off the
|
|
494
516
|
// chain (a key provider, an adopter scope extension) sees
|
|
495
517
|
// `undefined` where the caller named a slot.
|
|
496
|
-
$containerIndex: step.index
|
|
497
|
-
|
|
498
|
-
};
|
|
518
|
+
$containerIndex: step.index
|
|
519
|
+
});
|
|
499
520
|
}
|
|
500
521
|
return {
|
|
501
522
|
reference: { $refText: '', ref: undefined },
|
|
@@ -586,18 +607,35 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
586
607
|
}
|
|
587
608
|
|
|
588
609
|
/**
|
|
589
|
-
* Build a transient AST-node stub for a {@link SyntheticSource} request
|
|
590
|
-
*
|
|
591
|
-
*
|
|
592
|
-
*
|
|
593
|
-
*
|
|
610
|
+
* Build a transient AST-node stub for a {@link SyntheticSource} request: a
|
|
611
|
+
* node of the requested type, contained by the document at `source.uri`.
|
|
612
|
+
*
|
|
613
|
+
* **The container is materialised when no document is loaded there**, which
|
|
614
|
+
* is the case the source type exists for — a `SyntheticSource` names a node
|
|
615
|
+
* that does not exist yet, and the create-element flow asks at the FOLDER
|
|
616
|
+
* the file is about to be written into. Abstaining there would answer an
|
|
617
|
+
* empty candidate list, which a client cannot tell from "nothing matches".
|
|
618
|
+
*
|
|
619
|
+
* The stand-in parses under THIS provider's grammar, because a folder URI
|
|
620
|
+
* carries no extension for the routing ladder to end on and this provider is
|
|
621
|
+
* bound per grammar. Reaching for `createEmptyDocument(uri)` without the id
|
|
622
|
+
* instead fails inside the parse, on an empty extension rather than on the
|
|
623
|
+
* URI.
|
|
624
|
+
*
|
|
625
|
+
* The materialised document is unregistered and transient; see
|
|
626
|
+
* `createEmptyDocument`. Overriding is still open to a consumer whose
|
|
627
|
+
* "container" is an inner element rather than the parse root, or one that
|
|
628
|
+
* deliberately declines to answer for an absent document.
|
|
629
|
+
*
|
|
630
|
+
* The stub carries the grammar's declared defaults, so an extension reading a
|
|
631
|
+
* containment list off it sees an empty array rather than `undefined`.
|
|
594
632
|
*/
|
|
595
633
|
protected resolveSyntheticSource(source: SyntheticSource): AstNode | undefined {
|
|
596
|
-
const
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
return
|
|
634
|
+
const uri = UriUtils.toUri(source.uri);
|
|
635
|
+
const document =
|
|
636
|
+
this.langiumDocuments.getDocument(uri) ??
|
|
637
|
+
this.langiumDocuments.createEmptyDocument(uri, this.services.LanguageMetaData.languageId);
|
|
638
|
+
return buildAstNode(this.services.shared.AstReflection, source.type, { $container: document.parseResult.value });
|
|
601
639
|
}
|
|
602
640
|
|
|
603
641
|
/**
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { type MaybePromise, type Tracer, type TransferElement } from '@hydranium/protocol';
|
|
11
11
|
import { type AstNode, type AstReflection, type GenericAstNode, isAstNode } from '@hydranium/langium';
|
|
12
12
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
13
13
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
@@ -66,16 +66,6 @@ export interface AbstractSerializerOptions extends LogNameOptions {
|
|
|
66
66
|
* the extra property carries a value.
|
|
67
67
|
*/
|
|
68
68
|
readonly referenceWrapperTypes?: ReadonlyMap<string, string>;
|
|
69
|
-
/**
|
|
70
|
-
* Whether {@link AbstractSerializer.serializeAst} trims trailing whitespace
|
|
71
|
-
* from the final output (leading whitespace is always trimmed). Defaults to
|
|
72
|
-
* `true` — the conventional "no trailing blank lines" document shape. Set to
|
|
73
|
-
* `false` for grammars whose values may legitimately END the document with
|
|
74
|
-
* blank lines that must survive a round-trip — e.g. a multi-line block-scalar
|
|
75
|
-
* property (see `YamlSerializerOptions.blockScalarProperties`),
|
|
76
|
-
* where a trailing-trim would silently eat user-typed blank lines.
|
|
77
|
-
*/
|
|
78
|
-
readonly trimTrailingWhitespace?: boolean;
|
|
79
69
|
}
|
|
80
70
|
|
|
81
71
|
/**
|
|
@@ -139,29 +129,20 @@ export abstract class AbstractSerializer<
|
|
|
139
129
|
* Entry point for AST-shape inputs. Typically the grammar root, but any
|
|
140
130
|
* AST node works — the walker is recursive and shape-agnostic.
|
|
141
131
|
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
132
|
+
* **Emits the model and nothing else — do not trim here.** Trailing
|
|
133
|
+
* whitespace belongs to the author, and a write path holding the prior
|
|
134
|
+
* document restores it from there; trimming at this end deletes it before
|
|
135
|
+
* that restore sees it. A serializer has no prior document to consult, so it
|
|
136
|
+
* cannot tell a deliberate blank line from an accidental one.
|
|
137
|
+
*
|
|
138
|
+
* **Nothing trims what a subclass emits**, at either end. Emitting leading
|
|
139
|
+
* whitespace therefore puts it in the file, where no write path removes it.
|
|
140
|
+
*
|
|
141
|
+
* Returns whatever `serializeNode` returns, so a fully sync subclass keeps a
|
|
142
|
+
* bare `string` with no promise allocation.
|
|
146
143
|
*/
|
|
147
144
|
serializeAst(model: TAst): MaybePromise<string> {
|
|
148
|
-
|
|
149
|
-
if (isPromiseLike(result)) {
|
|
150
|
-
return result.then(text => this.trimSerialized(text));
|
|
151
|
-
}
|
|
152
|
-
return this.trimSerialized(result);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Trim the final serialized output. Leading whitespace is always removed;
|
|
157
|
-
* trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
|
|
158
|
-
* is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
|
|
159
|
-
*/
|
|
160
|
-
protected trimSerialized(text: string | undefined): string {
|
|
161
|
-
if (text === undefined) {
|
|
162
|
-
return '';
|
|
163
|
-
}
|
|
164
|
-
return this.options.trimTrailingWhitespace === false ? text.trimStart() : text.trim();
|
|
145
|
+
return this.serializeNode(model, 0);
|
|
165
146
|
}
|
|
166
147
|
|
|
167
148
|
/**
|
|
@@ -209,6 +209,19 @@ export class ExtendedServiceRegistry<
|
|
|
209
209
|
return super.getServices(arg);
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Every registered language's services, typed as `TServices` like the
|
|
214
|
+
* lookups here rather than as Langium's base shape, so a sweep of the whole
|
|
215
|
+
* set reaches what a URI or a typed handle would have given it.
|
|
216
|
+
*
|
|
217
|
+
* The cast is sound because {@link register} is the only way a language
|
|
218
|
+
* enters and takes `TServices`; the inherited accessor is typed to Langium's
|
|
219
|
+
* base, which is the only reason one is needed.
|
|
220
|
+
*/
|
|
221
|
+
override get all(): readonly TServices[] {
|
|
222
|
+
return super.all as readonly TServices[];
|
|
223
|
+
}
|
|
224
|
+
|
|
212
225
|
/**
|
|
213
226
|
* Lookup by anything that identifies a document — an AST node (routed by
|
|
214
227
|
* the document it lives in), a `URI`, or a URI string. `undefined` when the
|
|
@@ -255,9 +268,13 @@ export class ExtendedServiceRegistry<
|
|
|
255
268
|
* inherited Langium semantics, which throws on miss). Used for
|
|
256
269
|
* dynamically-routed lookups where the language id comes from
|
|
257
270
|
* external input.
|
|
271
|
+
*
|
|
272
|
+
* The cast is sound because {@link register} is the only way a language
|
|
273
|
+
* enters and takes `TServices`; `languageIdMap` is inherited and typed to
|
|
274
|
+
* Langium's base, which is the only reason one is needed.
|
|
258
275
|
*/
|
|
259
|
-
getServicesById(languageId: string):
|
|
260
|
-
return this.languageIdMap.get(languageId);
|
|
276
|
+
getServicesById(languageId: string): TServices | undefined {
|
|
277
|
+
return this.languageIdMap.get(languageId) as TServices | undefined;
|
|
261
278
|
}
|
|
262
279
|
|
|
263
280
|
/**
|
|
@@ -9,8 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
import type { Clock, Logger, Project, Tracer } from '@hydranium/protocol';
|
|
11
11
|
import type { LangiumSharedCoreServices } from '@hydranium/langium';
|
|
12
|
+
import type { ServerLocale } from '../locale/server-locale.js';
|
|
13
|
+
import type { MessageRenderer } from '../messages/renderer.js';
|
|
12
14
|
import type { SelfSaveRegistry } from '../documents/self-save-registry.js';
|
|
13
15
|
import type { WritableFileSystemProvider } from '../documents/ast-document-manager.js';
|
|
16
|
+
import type { HydraniumDocumentRegistry } from './workspace/langium-documents.js';
|
|
14
17
|
import type { BuildPhasePassService } from './build-phase-pass/build-phase-pass-service.js';
|
|
15
18
|
import type { CstResidencyService } from './residency/cst-residency-service.js';
|
|
16
19
|
import type { BuildPipelineIntegration } from './document-builder/build-pipeline-integration.js';
|
|
@@ -27,8 +30,9 @@ import type { AdditionalDocumentContribution } from './workspace/additional-docu
|
|
|
27
30
|
* framework additions that other framework services consume: the dedicated
|
|
28
31
|
* {@link Clock}, {@link Logger} and {@link Tracer} top-level slots (injectable
|
|
29
32
|
* time source, emission-only logger, and the measure-and-emit tracer composed
|
|
30
|
-
* from the other two), the {@link AdditionalDocumentContribution} group,
|
|
31
|
-
* {@link
|
|
33
|
+
* from the other two), the {@link AdditionalDocumentContribution} group, the
|
|
34
|
+
* {@link MessageRenderer} and the {@link ServerLocale} it renders in,
|
|
35
|
+
* an {@link ExtendedServiceRegistry}, and on `workspace` a writable file-system
|
|
32
36
|
* provider plus {@link HydraniumWorkspaceManager}, {@link ProjectManager},
|
|
33
37
|
* {@link SelfSaveRegistry}, {@link BuildPipelineIntegration},
|
|
34
38
|
* {@link BuildPhasePassService}, {@link CstResidencyService} and
|
|
@@ -57,6 +61,14 @@ export interface ServerSharedServicesMinimal<TProject extends Project = Project>
|
|
|
57
61
|
* adopters deep-merge contributions that seed built-in / stdlib documents.
|
|
58
62
|
*/
|
|
59
63
|
additionalDocuments: Record<string, AdditionalDocumentContribution>;
|
|
64
|
+
/**
|
|
65
|
+
* Renders each user-facing message once, before the server sends it. On the
|
|
66
|
+
* shared tier with no workspace dependency, because all three heads'
|
|
67
|
+
* messages pass through it.
|
|
68
|
+
*/
|
|
69
|
+
MessageRenderer: MessageRenderer;
|
|
70
|
+
/** The locale an init handed the server, for whoever renders in it. */
|
|
71
|
+
ServerLocale: ServerLocale;
|
|
60
72
|
/**
|
|
61
73
|
* Narrows Langium's base `ServiceRegistry` slot to the framework impl the
|
|
62
74
|
* framework always binds, so the abstaining lookups — `getServicesFor`
|
|
@@ -75,6 +87,11 @@ export interface ServerSharedServicesMinimal<TProject extends Project = Project>
|
|
|
75
87
|
// framework always binds, so `wsRelativePath` and the folder-walk are
|
|
76
88
|
// reachable from the minimal surface without a cast.
|
|
77
89
|
WorkspaceManager: HydraniumWorkspaceManager;
|
|
90
|
+
// Same, for the registry: the framework always binds
|
|
91
|
+
// `HydraniumLangiumDocuments`, and `createEmptyDocument` is reachable
|
|
92
|
+
// only through this narrowing — a scope provider querying a URI before
|
|
93
|
+
// the file exists is the caller that needs it.
|
|
94
|
+
/* override */ LangiumDocuments: HydraniumDocumentRegistry;
|
|
78
95
|
ProjectManager: ProjectManager<TProject>;
|
|
79
96
|
SelfSaveRegistry: SelfSaveRegistry;
|
|
80
97
|
BuildPipelineIntegration: BuildPipelineIntegration;
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
|
+
hasMessageIdentity,
|
|
11
12
|
type Tracer,
|
|
12
13
|
type TransferDiagnostic,
|
|
13
14
|
type TransferElement,
|
|
14
|
-
|
|
15
|
+
TransferDocument,
|
|
15
16
|
type TransferTypeFor
|
|
16
17
|
} from '@hydranium/protocol';
|
|
17
18
|
import { AstUtils, type AstNode, DocumentCache, DocumentState, isAstNode, isReference, type LangiumDocument } from '@hydranium/langium';
|
|
@@ -19,7 +20,7 @@ import { Diagnostic, DiagnosticSeverity } from 'vscode-languageserver-protocol';
|
|
|
19
20
|
import { type AstDocument } from '../../documents/ast-document-manager.js';
|
|
20
21
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
21
22
|
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
22
|
-
import { type
|
|
23
|
+
import { type AstDiagnostic } from '../validation/document-validator.js';
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* Which set of properties {@link TransferEncoder.toTransfer} emits.
|
|
@@ -28,11 +29,13 @@ import { type TransferLspDiagnostic } from '../validation/document-validator.js'
|
|
|
28
29
|
* including AST-extension-derived computed scalars and synthetic child
|
|
29
30
|
* mirrors. This is the wire shape clients consume, and the default.
|
|
30
31
|
* - `'grammar'` — only the grammar-declared properties, per
|
|
31
|
-
* `AstReflection.getTypeMetaData($type).properties
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
32
|
+
* `AstReflection.getTypeMetaData($type).properties`, each carrying the
|
|
33
|
+
* node's own authored value. Excludes every computed / synthetic property
|
|
34
|
+
* by construction (no naming convention, no registration) and bypasses the
|
|
35
|
+
* `resolvePropertyValue` substitution hook, so neither a computed KEY nor a
|
|
36
|
+
* computed VALUE can reach this shape. Yields the authored state a
|
|
37
|
+
* serializer round-trips — a diffable, acyclic baseline for field-level
|
|
38
|
+
* recording / forward-write reconcile.
|
|
36
39
|
*/
|
|
37
40
|
export type TransferMode = 'full' | 'grammar';
|
|
38
41
|
|
|
@@ -79,6 +82,37 @@ export interface TransferEnvelopeSource<TDiagnostic> {
|
|
|
79
82
|
readonly diagnostics: readonly (TDiagnostic | Diagnostic)[];
|
|
80
83
|
}
|
|
81
84
|
|
|
85
|
+
/**
|
|
86
|
+
* The AST→transfer contract a DI slot holds, implemented by
|
|
87
|
+
* {@link DefaultTransferEncoder}.
|
|
88
|
+
*
|
|
89
|
+
* **This is an interface and not the class, and that is load-bearing.** A class
|
|
90
|
+
* in a slot drags its `protected` members into every assignability check, which
|
|
91
|
+
* TypeScript compares NOMINALLY — so the slot type could not be satisfied by a
|
|
92
|
+
* subclass declared against a second physical copy of this package, and an
|
|
93
|
+
* adopter narrowing the slot had to intersect with the framework's declaration
|
|
94
|
+
* rather than replace it, leaving method resolution dependent on declaration
|
|
95
|
+
* order. An interface has no protected members and is compared structurally, so
|
|
96
|
+
* neither applies.
|
|
97
|
+
*
|
|
98
|
+
* **The transfer returns are the structural base ({@link TransferElement}), not
|
|
99
|
+
* the per-grammar overlay.** The overlay cannot parameterise this contract:
|
|
100
|
+
* `TransferTypeFor` reaches `keyof TTransferMap`, which makes that parameter
|
|
101
|
+
* measured-INVARIANT, and invariant parameters relate only when their arguments
|
|
102
|
+
* are mutually assignable — so a map-parameterised contract admits no adopter
|
|
103
|
+
* instantiation at all. Heads read this contract and do not know adopter maps;
|
|
104
|
+
* an adopter recovers the precise type by declaring its own slot, which it can
|
|
105
|
+
* now do by replacement.
|
|
106
|
+
*/
|
|
107
|
+
export interface TransferEncoder<TDiagnostic extends TransferDiagnostic = TransferDiagnostic> {
|
|
108
|
+
toTransfer<T extends AstNode>(ast: T, mode?: TransferMode): TransferElement;
|
|
109
|
+
toTransferDocument(langiumDocument: LangiumDocument): TransferDocument<TransferElement, TDiagnostic>;
|
|
110
|
+
astDocumentToTransferDocument<TAst extends AstNode>(
|
|
111
|
+
document: AstDocument<TAst, AstDiagnostic>
|
|
112
|
+
): TransferDocument<TransferElement, TDiagnostic>;
|
|
113
|
+
toTransferDiagnostic(diagnostic: AstDiagnostic): TDiagnostic;
|
|
114
|
+
}
|
|
115
|
+
|
|
82
116
|
/**
|
|
83
117
|
* One-directional structural mapper from a Langium AST into the wire
|
|
84
118
|
* transfer-model shape ({@link TransferElement}-based JSON).
|
|
@@ -112,7 +146,8 @@ export interface TransferEnvelopeSource<TDiagnostic> {
|
|
|
112
146
|
* - {@link propertyKeys} — which property names the walk visits.
|
|
113
147
|
* - {@link shouldEmitProperty} — per-key filter on top of the default
|
|
114
148
|
* `$`-internals strip.
|
|
115
|
-
* - {@link resolvePropertyValue} — value substitution per property
|
|
149
|
+
* - {@link resolvePropertyValue} — value substitution per property, `'full'`
|
|
150
|
+
* mode only (see there for why `'grammar'` bypasses it).
|
|
116
151
|
* - {@link finalizeTransferNode} — post-decoration per encoded node.
|
|
117
152
|
* - {@link toTransferValue} — recursion seam per property value. Override
|
|
118
153
|
* to special-case reference encoding or to drop specific value shapes.
|
|
@@ -120,10 +155,10 @@ export interface TransferEnvelopeSource<TDiagnostic> {
|
|
|
120
155
|
* - {@link toTransferDocument} — bundle root + diagnostics into the wire
|
|
121
156
|
* {@link TransferDocument} envelope. Override to filter / merge
|
|
122
157
|
* diagnostics from auxiliary sources or to project a synthesised root.
|
|
123
|
-
* - {@link toTransferDiagnostic} — project a {@link
|
|
158
|
+
* - {@link toTransferDiagnostic} — project a {@link AstDiagnostic}
|
|
124
159
|
* (the framework validator's output) to {@link TDiagnostic}.
|
|
125
160
|
*/
|
|
126
|
-
export class
|
|
161
|
+
export class DefaultTransferEncoder<
|
|
127
162
|
// The map is intentionally unconstrained — adopters supply typed
|
|
128
163
|
// overlays whose specific-key shapes don't structurally satisfy a
|
|
129
164
|
// `Record<string, TransferElement>` index signature. `TransferTypeFor`
|
|
@@ -226,7 +261,14 @@ export class TransferEncoder<
|
|
|
226
261
|
if (!this.shouldEmitProperty(ast, key, context)) {
|
|
227
262
|
continue;
|
|
228
263
|
}
|
|
229
|
-
|
|
264
|
+
// `'grammar'` reads the authored value straight off the node rather than
|
|
265
|
+
// through `resolvePropertyValue`. The mode promises a shape the serializer
|
|
266
|
+
// round-trips, and a value-substitution hook cannot honour that: what it
|
|
267
|
+
// returns is by construction not what the document declared. Scoping the
|
|
268
|
+
// hook to `'full'` is what makes that guarantee structural instead of a
|
|
269
|
+
// rule every override has to remember.
|
|
270
|
+
const value =
|
|
271
|
+
context.mode === 'grammar' ? (ast as unknown as Record<string, unknown>)[key] : this.resolvePropertyValue(ast, key, context);
|
|
230
272
|
// `'grammar'` lists every declared property, including those absent on
|
|
231
273
|
// this node; skip the absent ones. (`'full'` enumerates only own
|
|
232
274
|
// properties, so absent properties never surface there.) Part of the
|
|
@@ -267,8 +309,17 @@ export class TransferEncoder<
|
|
|
267
309
|
}
|
|
268
310
|
|
|
269
311
|
/**
|
|
270
|
-
* Which value the walk emits under `key
|
|
271
|
-
*
|
|
312
|
+
* Which value the walk emits under `key`, in `'full'` mode ONLY. Default:
|
|
313
|
+
* the node's own value.
|
|
314
|
+
*
|
|
315
|
+
* Override to substitute a derived value under a grammar property name — an
|
|
316
|
+
* inheritance-resolved field, a preference-dependent label. `'grammar'`
|
|
317
|
+
* bypasses this hook and reads the node directly: that mode's contract is
|
|
318
|
+
* the authored state a serializer round-trips, and a substituted value is by
|
|
319
|
+
* construction not the one the document declared. An override that applied
|
|
320
|
+
* in both modes would leave the grammar shape carrying derived values under
|
|
321
|
+
* declared property names — diffable and acyclic still, but no longer
|
|
322
|
+
* authored, which is the property every consumer of that mode relies on.
|
|
272
323
|
*/
|
|
273
324
|
protected resolvePropertyValue(ast: AstNode, key: string, _context: EncodeContext): unknown {
|
|
274
325
|
return (ast as unknown as Record<string, unknown>)[key];
|
|
@@ -340,12 +391,12 @@ export class TransferEncoder<
|
|
|
340
391
|
source: TransferEnvelopeSource<TDiagnostic>,
|
|
341
392
|
root: TransferTypeFor<TAst, TTransferMap>
|
|
342
393
|
): TransferDocument<TransferTypeFor<TAst, TTransferMap>, TDiagnostic> {
|
|
343
|
-
return
|
|
344
|
-
|
|
345
|
-
|
|
394
|
+
return TransferDocument.create(
|
|
395
|
+
source.uri,
|
|
396
|
+
source.version,
|
|
346
397
|
root,
|
|
347
|
-
|
|
348
|
-
|
|
398
|
+
source.diagnostics.map(diagnostic => this.toTransferDiagnostic(diagnostic as AstDiagnostic))
|
|
399
|
+
);
|
|
349
400
|
}
|
|
350
401
|
|
|
351
402
|
/**
|
|
@@ -359,7 +410,7 @@ export class TransferEncoder<
|
|
|
359
410
|
* second `LangiumDocuments.getDocument` lookup.
|
|
360
411
|
*
|
|
361
412
|
* The `diagnostic` projection assumes the snapshot's diagnostics carry
|
|
362
|
-
* the `
|
|
413
|
+
* the `AstDiagnostic` shape ({@link Diagnostic} plus the
|
|
363
414
|
* framework validator's `element` / `property` decoration). Snapshots
|
|
364
415
|
* built from raw Langium diagnostics structurally satisfy this — the
|
|
365
416
|
* extra fields are optional in the projection.
|
|
@@ -370,7 +421,7 @@ export class TransferEncoder<
|
|
|
370
421
|
* assembly seam rather than duplicating it.
|
|
371
422
|
*/
|
|
372
423
|
astDocumentToTransferDocument<TAst extends AstNode>(
|
|
373
|
-
document: AstDocument<TAst,
|
|
424
|
+
document: AstDocument<TAst, AstDiagnostic>
|
|
374
425
|
): TransferDocument<TransferTypeFor<TAst, TTransferMap>, TDiagnostic> {
|
|
375
426
|
const root = this.encodeNode(document.root, this.createEncodeContext('full', document.uri)) as TransferTypeFor<TAst, TTransferMap>;
|
|
376
427
|
return this.assembleTransferDocument<TAst>(document, root);
|
|
@@ -378,7 +429,7 @@ export class TransferEncoder<
|
|
|
378
429
|
|
|
379
430
|
/**
|
|
380
431
|
* Project an LSP-shaped diagnostic (typically a
|
|
381
|
-
* {@link
|
|
432
|
+
* {@link AstDiagnostic} produced by
|
|
382
433
|
* `HydraniumDocumentValidator` — adds `element` + optional `property`
|
|
383
434
|
* to the standard {@link Diagnostic} shape) to the wire-diagnostic
|
|
384
435
|
* shape.
|
|
@@ -387,15 +438,24 @@ export class TransferEncoder<
|
|
|
387
438
|
* LSP severity enum to the wire string union, discriminates the
|
|
388
439
|
* diagnostic type from Langium's `data.code` (`'lexing-error'` /
|
|
389
440
|
* `'parsing-error'` else `'validation-error'`), passes through
|
|
390
|
-
* message / element / property / code
|
|
441
|
+
* message / element / property / code, and lifts the framework message
|
|
442
|
+
* params out of `data` so a translating surface can render a
|
|
443
|
+
* parameterised diagnostic rather than a template with its placeholders
|
|
444
|
+
* left standing. Adopters whose validator
|
|
391
445
|
* doesn't decorate diagnostics with `element` still get a valid
|
|
392
446
|
* `TransferDiagnostic` — the field falls back to `''`.
|
|
393
447
|
*
|
|
394
448
|
* Override only if the wire-diagnostic shape needs fields beyond
|
|
395
449
|
* what {@link TransferDiagnostic} carries.
|
|
396
450
|
*/
|
|
397
|
-
toTransferDiagnostic(diagnostic:
|
|
451
|
+
toTransferDiagnostic(diagnostic: AstDiagnostic): TDiagnostic {
|
|
398
452
|
const langiumCode = (diagnostic.data as { code?: string } | undefined)?.code;
|
|
453
|
+
// The same `data` the Langium code comes out of also carries the framework
|
|
454
|
+
// message identity, under its own key so the two conventions co-exist.
|
|
455
|
+
// Taking the params from there rather than from `code` is what lets a
|
|
456
|
+
// translating surface render a PARAMETERISED diagnostic: `code` survives on
|
|
457
|
+
// its own and yields a template with its placeholders left standing.
|
|
458
|
+
const identity = hasMessageIdentity(diagnostic.data) ? diagnostic.data.hydranium : undefined;
|
|
399
459
|
const result: TransferDiagnostic = {
|
|
400
460
|
type: langiumCode === 'lexing-error' ? 'lexing-error' : langiumCode === 'parsing-error' ? 'parsing-error' : 'validation-error',
|
|
401
461
|
element: diagnostic.element ?? '',
|
|
@@ -408,7 +468,8 @@ export class TransferEncoder<
|
|
|
408
468
|
: diagnostic.severity === DiagnosticSeverity.Warning
|
|
409
469
|
? 'warning'
|
|
410
470
|
: 'info',
|
|
411
|
-
code: typeof diagnostic.code === 'number' || typeof diagnostic.code === 'string' ? diagnostic.code : langiumCode
|
|
471
|
+
code: typeof diagnostic.code === 'number' || typeof diagnostic.code === 'string' ? diagnostic.code : langiumCode,
|
|
472
|
+
params: identity?.params
|
|
412
473
|
};
|
|
413
474
|
return result as TDiagnostic;
|
|
414
475
|
}
|