@hydranium/core 1.0.0-next.35 → 1.0.0-next.351
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 +78 -82
- package/lib/browser/host-heads-in-worker.d.ts +77 -0
- package/lib/browser/host-heads-in-worker.d.ts.map +1 -0
- package/lib/browser/host-heads-in-worker.js +169 -0
- package/lib/browser/host-heads-in-worker.js.map +1 -0
- package/lib/browser/index.d.ts +12 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +17 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/indexeddb-file-system-store.d.ts +82 -0
- package/lib/browser/indexeddb-file-system-store.d.ts.map +1 -0
- package/lib/browser/indexeddb-file-system-store.js +181 -0
- package/lib/browser/indexeddb-file-system-store.js.map +1 -0
- package/lib/browser/start-language-server-in-worker.d.ts +32 -0
- package/lib/browser/start-language-server-in-worker.d.ts.map +1 -0
- package/lib/browser/start-language-server-in-worker.js +40 -0
- package/lib/browser/start-language-server-in-worker.js.map +1 -0
- package/lib/documents/ast-document-manager.d.ts +266 -124
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +293 -132
- 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 +146 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +207 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- package/lib/documents/dirty-state-tracker.d.ts +101 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +85 -0
- package/lib/documents/dirty-state-tracker.js.map +1 -0
- package/lib/documents/document-release-handler.d.ts +204 -0
- package/lib/documents/document-release-handler.d.ts.map +1 -0
- package/lib/documents/document-release-handler.js +317 -0
- package/lib/documents/document-release-handler.js.map +1 -0
- package/lib/documents/document-release-scheduler.d.ts +67 -0
- package/lib/documents/document-release-scheduler.d.ts.map +1 -0
- package/lib/documents/document-release-scheduler.js +80 -0
- package/lib/documents/document-release-scheduler.js.map +1 -0
- package/lib/documents/file-system-task-queue.d.ts +52 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +37 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +445 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +903 -483
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +10 -2
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +10 -2
- package/lib/documents/index.js.map +1 -1
- package/lib/documents/language-client-shadow.d.ts +234 -0
- package/lib/documents/language-client-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-shadow.js +306 -0
- package/lib/documents/language-client-shadow.js.map +1 -0
- package/lib/documents/model-ledger.d.ts +47 -0
- package/lib/documents/model-ledger.d.ts.map +1 -0
- package/lib/documents/model-ledger.js +30 -0
- package/lib/documents/model-ledger.js.map +1 -0
- package/lib/documents/text-ledger.d.ts +64 -0
- package/lib/documents/text-ledger.d.ts.map +1 -0
- package/lib/documents/text-ledger.js +63 -0
- package/lib/documents/text-ledger.js.map +1 -0
- package/lib/documents/version-sync-service.d.ts +138 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +173 -0
- package/lib/documents/version-sync-service.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts +42 -31
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.js +45 -19
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +12 -7
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +25 -9
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts +49 -36
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +83 -44
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +9 -9
- 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 +25 -16
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +20 -8
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.js +20 -0
- package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -1
- package/lib/langium/composite-ast-reflection.d.ts +46 -0
- package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
- package/lib/langium/composite-ast-reflection.js +97 -0
- package/lib/langium/composite-ast-reflection.js.map +1 -0
- 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/console-tee.d.ts +27 -0
- package/lib/langium/diagnostics/console-tee.d.ts.map +1 -0
- package/lib/langium/diagnostics/console-tee.js +142 -0
- package/lib/langium/diagnostics/console-tee.js.map +1 -0
- package/lib/langium/diagnostics/format-log-arg.d.ts +18 -0
- package/lib/langium/diagnostics/format-log-arg.d.ts.map +1 -0
- package/lib/langium/diagnostics/format-log-arg.js +36 -0
- package/lib/langium/diagnostics/format-log-arg.js.map +1 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
- package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
- package/lib/langium/diagnostics/log-preamble.js +1 -1
- package/lib/langium/diagnostics/log-preamble.js.map +1 -1
- package/lib/langium/diagnostics/logger.d.ts +25 -6
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +49 -17
- package/lib/langium/diagnostics/logger.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +25 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +81 -45
- 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 +28 -30
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +6 -5
- package/lib/langium/document-builder/build-session.d.ts.map +1 -1
- package/lib/langium/document-builder/build-session.js +5 -5
- package/lib/langium/document-builder/build-session.js.map +1 -1
- package/lib/langium/document-builder/document-builder.d.ts +310 -41
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +490 -79
- package/lib/langium/document-builder/document-builder.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 +40 -24
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +7 -4
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +17 -8
- 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 +95 -27
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +303 -63
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- 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 +30 -5
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +18 -4
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +383 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +455 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +2 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +2 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-events.d.ts +66 -0
- package/lib/langium/model-service/model-events.d.ts.map +1 -0
- package/lib/langium/model-service/model-events.js +10 -0
- package/lib/langium/model-service/model-events.js.map +1 -0
- package/lib/langium/model-service/model-service.d.ts +456 -300
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +571 -466
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +141 -40
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -40
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +32 -7
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +10 -4
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +13 -6
- 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 +38 -14
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +24 -58
- 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/fallback-scope.d.ts +27 -0
- package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
- package/lib/langium/scope/fallback-scope.js +35 -0
- package/lib/langium/scope/fallback-scope.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js +38 -39
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +115 -32
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +201 -39
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/scope/index.d.ts +1 -0
- package/lib/langium/scope/index.d.ts.map +1 -1
- package/lib/langium/scope/index.js +1 -0
- package/lib/langium/scope/index.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 +6 -5
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js +3 -2
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts +69 -37
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +102 -29
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
- package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.js +1 -3
- package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +54 -30
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/serialization/json-serializer.d.ts +8 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js +13 -3
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/serializer.d.ts +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts +12 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +24 -4
- package/lib/langium/serialization/yaml-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +29 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +37 -0
- package/lib/langium/service-registry.js.map +1 -1
- package/lib/langium/shared-services.d.ts +13 -7
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/single-langium-copy.d.ts +22 -0
- package/lib/langium/single-langium-copy.d.ts.map +1 -0
- package/lib/langium/single-langium-copy.js +36 -0
- package/lib/langium/single-langium-copy.js.map +1 -0
- package/lib/langium/transfer/transfer-encoder.d.ts +86 -37
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +36 -25
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +543 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +1164 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +62 -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 +52 -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 +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 +168 -23
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +264 -26
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.js +1 -1
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +22 -13
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-not-found.d.ts +23 -0
- package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
- package/lib/langium/workspace/file-not-found.js +31 -0
- package/lib/langium/workspace/file-not-found.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +167 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +115 -13
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +31 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +54 -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 +103 -21
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +184 -31
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
- 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/index.d.ts +1 -0
- package/lib/langium/workspace/index.d.ts.map +1 -1
- package/lib/langium/workspace/index.js +1 -0
- package/lib/langium/workspace/index.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +40 -3
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +68 -3
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +7 -0
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +18 -1
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/self-save-registry.d.ts +84 -0
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +33 -22
- package/lib/langium/workspace/self-save-registry.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +55 -21
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +87 -24
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +15 -5
- package/lib/langium/workspace/write-lock-scope.js.map +1 -1
- package/lib/launcher/integrated-server.d.ts +3 -1
- package/lib/launcher/integrated-server.d.ts.map +1 -1
- package/lib/locale/server-locale.d.ts +19 -5
- package/lib/locale/server-locale.d.ts.map +1 -1
- package/lib/locale/server-locale.js +1 -1
- package/lib/locale/server-locale.js.map +1 -1
- 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/edit-requests-guard.d.ts +31 -0
- package/lib/lsp/edit-requests-guard.d.ts.map +1 -0
- package/lib/lsp/edit-requests-guard.js +125 -0
- package/lib/lsp/edit-requests-guard.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +126 -82
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +235 -102
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +6 -2
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +6 -2
- 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/save-text-document.d.ts +31 -0
- package/lib/lsp/save-text-document.d.ts.map +1 -0
- package/lib/lsp/save-text-document.js +52 -0
- package/lib/lsp/save-text-document.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +58 -2
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +98 -9
- 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 +12 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +21 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +4 -6
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +4 -6
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +2 -2
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +2 -2
- package/lib/messages/index.js.map +1 -1
- package/lib/messages/renderer.d.ts +32 -7
- package/lib/messages/renderer.d.ts.map +1 -1
- package/lib/messages/renderer.js +7 -1
- package/lib/messages/renderer.js.map +1 -1
- package/lib/node/event-loop-monitor.d.ts.map +1 -1
- package/lib/node/event-loop-monitor.js +2 -1
- 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 -1
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +5 -1
- 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/log-file-sink.d.ts +3 -2
- package/lib/node/log-file-sink.d.ts.map +1 -1
- package/lib/node/log-file-sink.js +6 -2
- package/lib/node/log-file-sink.js.map +1 -1
- package/lib/node/log-preamble-node.d.ts +5 -3
- package/lib/node/log-preamble-node.d.ts.map +1 -1
- package/lib/node/log-preamble-node.js +13 -10
- package/lib/node/log-preamble-node.js.map +1 -1
- package/lib/node/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +5 -4
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.d.ts +2 -2
- package/lib/node/memory-monitor.d.ts.map +1 -1
- package/lib/node/memory-monitor.js +9 -10
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +67 -9
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +198 -53
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +12 -4
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js +8 -6
- 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 +13 -3
- package/lib/node/profiling-run.d.ts.map +1 -1
- package/lib/node/profiling-run.js +17 -8
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +61 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +80 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/server-diagnostics.js +1 -1
- package/lib/node/server-diagnostics.js.map +1 -1
- package/lib/node/server-state-snapshot.js +4 -4
- package/lib/node/server-state-snapshot.js.map +1 -1
- package/lib/node/socket-launcher.d.ts +43 -7
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +42 -7
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/startup-cpu-profile.d.ts +29 -0
- package/lib/node/startup-cpu-profile.d.ts.map +1 -0
- package/lib/node/startup-cpu-profile.js +91 -0
- package/lib/node/startup-cpu-profile.js.map +1 -0
- package/lib/node/stdio-launcher.d.ts +13 -13
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +21 -11
- package/lib/node/stdio-launcher.js.map +1 -1
- package/lib/node/validate-workspace.d.ts +1 -1
- package/lib/node/validate-workspace.d.ts.map +1 -1
- package/lib/node/validate-workspace.js +5 -1
- package/lib/node/validate-workspace.js.map +1 -1
- package/lib/testing/document-uri-policy-conformance.js +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 +2 -1
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/index.d.ts.map +1 -1
- package/lib/testing/index.js +2 -1
- 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 +4 -4
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +4 -4
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +51 -20
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +29 -13
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/make-test-tracer.d.ts +12 -0
- package/lib/testing/make-test-tracer.d.ts.map +1 -1
- package/lib/testing/make-test-tracer.js +13 -0
- package/lib/testing/make-test-tracer.js.map +1 -1
- package/lib/testing/node/applied-edit-capture.d.ts +29 -0
- package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
- package/lib/testing/node/applied-edit-capture.js +117 -0
- package/lib/testing/node/applied-edit-capture.js.map +1 -0
- 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 +21 -6
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +49 -106
- 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 +30 -1
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +39 -2
- 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 +46 -16
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +111 -40
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
- package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-fixture.js +25 -6
- package/lib/testing/playwright/server-log-fixture.js.map +1 -1
- package/lib/testing/playwright/server-log-region.d.ts +15 -0
- package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-region.js +30 -0
- package/lib/testing/playwright/server-log-region.js.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +8 -5
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/run-update-pipeline.js.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +11 -52
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +31 -62
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +33 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +103 -5
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +132 -16
- 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 +9 -8
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +6 -6
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/testing/stub-project-manager.js.map +1 -1
- package/lib/testing/stub-self-save-registry.d.ts +1 -1
- package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
- package/lib/testing/stub-service-registry.d.ts +1 -1
- package/lib/testing/stub-service-registry.js.map +1 -1
- package/lib/testing/stub-writable-file-system.d.ts +1 -1
- package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
- package/lib/testing/stub-writable-file-system.js +2 -1
- package/lib/testing/stub-writable-file-system.js.map +1 -1
- package/lib/util/connection-liveness.d.ts +22 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +74 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts +7 -0
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js +15 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +41 -60
- package/src/browser/host-heads-in-worker.ts +218 -0
- package/src/browser/index.ts +17 -0
- package/src/browser/indexeddb-file-system-store.ts +192 -0
- package/src/browser/start-language-server-in-worker.ts +56 -0
- package/src/documents/ast-document-manager.ts +479 -233
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +24 -0
- package/src/documents/client-session-registry.ts +262 -0
- package/src/documents/dirty-state-tracker.ts +167 -0
- package/src/documents/document-release-handler.ts +404 -0
- package/src/documents/document-release-scheduler.ts +121 -0
- package/src/documents/file-system-task-queue.ts +74 -0
- package/src/documents/hydranium-text-documents.ts +1029 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +501 -0
- package/src/documents/model-ledger.ts +66 -0
- package/src/documents/text-ledger.ts +112 -0
- package/src/documents/version-sync-service.ts +275 -0
- package/src/index.ts +7 -0
- package/src/langium/ast-extension/ast-extension-service.ts +77 -41
- package/src/langium/ast-extension/ast-node-builder.ts +35 -13
- package/src/langium/bootstrap.ts +87 -51
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
- package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
- package/src/langium/composite-ast-reflection.ts +112 -0
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/console-tee.ts +151 -0
- package/src/langium/diagnostics/format-log-arg.ts +36 -0
- package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +51 -17
- package/src/langium/diagnostics/lsp-logger.ts +83 -44
- package/src/langium/document-builder/build-pipeline-integration.ts +46 -32
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +615 -79
- package/src/langium/integration-services.ts +59 -28
- package/src/langium/integrity/integrity-rule.ts +17 -8
- package/src/langium/integrity/integrity-service.ts +332 -69
- package/src/langium/language-module.ts +49 -8
- package/src/langium/model-service/client-session.ts +726 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +80 -0
- package/src/langium/model-service/model-service.ts +878 -494
- package/src/langium/module.ts +195 -72
- package/src/langium/naming/name-provider.ts +34 -8
- package/src/langium/project/abstract-project-manager.ts +13 -5
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +54 -19
- package/src/langium/scope/fallback-scope.ts +38 -0
- package/src/langium/scope/hydranium-scope-computation.ts +45 -44
- package/src/langium/scope/hydranium-scope-provider.ts +228 -41
- package/src/langium/scope/index.ts +1 -0
- package/src/langium/scope/reference-candidate-provider.ts +6 -5
- package/src/langium/scope/scope-extension-service.ts +148 -56
- package/src/langium/scope/scoped-ast-node-description.ts +1 -3
- package/src/langium/serialization/abstract-serializer.ts +57 -41
- package/src/langium/serialization/json-serializer.ts +14 -3
- package/src/langium/serialization/serializer.ts +1 -1
- package/src/langium/serialization/yaml-serializer.ts +26 -4
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +16 -7
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +104 -47
- package/src/langium/trivia/comment-preserver.ts +1409 -0
- package/src/langium/trivia/document-ending-preserver.ts +71 -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 +56 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +312 -31
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +32 -18
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +258 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +83 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +212 -35
- package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +96 -4
- package/src/langium/workspace/langium-documents.ts +19 -1
- package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
- package/src/langium/workspace/self-save-registry.ts +118 -0
- package/src/langium/workspace/virtual-document.ts +106 -25
- package/src/langium/workspace/write-lock-scope.ts +27 -12
- package/src/launcher/integrated-server.ts +3 -1
- package/src/locale/server-locale.ts +20 -5
- 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/edit-requests-guard.ts +152 -0
- package/src/lsp/hydranium-document-update-handler.ts +285 -111
- package/src/lsp/index.ts +6 -2
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/save-text-document.ts +63 -0
- package/src/lsp/semantic-token-provider.ts +146 -8
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +21 -7
- package/src/messages/carriers.ts +4 -6
- package/src/messages/index.ts +11 -2
- package/src/messages/renderer.ts +34 -6
- package/src/node/event-loop-monitor.ts +2 -1
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +5 -1
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/log-file-sink.ts +6 -2
- package/src/node/log-preamble-node.ts +20 -10
- package/src/node/measure-memory.ts +5 -4
- package/src/node/memory-monitor.ts +10 -10
- package/src/node/node-file-system-provider.ts +214 -57
- package/src/node/profile-capture.ts +16 -15
- package/src/node/profiling-run.ts +30 -8
- package/src/node/rename-over-open-readers.ts +94 -0
- package/src/node/server-diagnostics.ts +1 -1
- package/src/node/server-state-snapshot.ts +5 -5
- package/src/node/socket-launcher.ts +78 -14
- package/src/node/startup-cpu-profile.ts +94 -0
- package/src/node/stdio-launcher.ts +29 -19
- package/src/node/validate-workspace.ts +8 -2
- package/src/testing/document-uri-policy-conformance.ts +1 -1
- package/src/testing/fake-document.ts +2 -1
- package/src/testing/index.ts +2 -1
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +6 -6
- package/src/testing/make-test-services.ts +93 -41
- package/src/testing/make-test-tracer.ts +26 -0
- package/src/testing/node/applied-edit-capture.ts +141 -0
- 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 +83 -119
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +57 -3
- package/src/testing/node/unhandled-rejections.ts +31 -0
- package/src/testing/parse-semantic-root.ts +1 -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 +137 -47
- package/src/testing/playwright/server-log-fixture.ts +46 -6
- package/src/testing/playwright/server-log-region.ts +32 -0
- package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
- package/src/testing/run-update-pipeline.ts +8 -5
- package/src/testing/stub-ast-document-manager.ts +47 -128
- package/src/testing/stub-document-builder.ts +138 -18
- package/src/testing/stub-hydranium-text-documents.ts +184 -27
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +11 -10
- package/src/testing/stub-self-save-registry.ts +1 -1
- package/src/testing/stub-service-registry.ts +1 -1
- package/src/testing/stub-writable-file-system.ts +3 -2
- package/src/util/connection-liveness.ts +80 -15
- package/src/util/environment.ts +24 -2
- package/lib/documents/language-client-text-shadow.d.ts +0 -101
- package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
- package/lib/documents/language-client-text-shadow.js +0 -156
- package/lib/documents/language-client-text-shadow.js.map +0 -1
- package/lib/documents/self-save-registry.d.ts +0 -55
- package/lib/documents/self-save-registry.d.ts.map +0 -1
- package/lib/documents/self-save-registry.js.map +0 -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/lib/node/process-memory.d.ts +0 -66
- package/lib/node/process-memory.d.ts.map +0 -1
- package/lib/node/process-memory.js +0 -252
- package/lib/node/process-memory.js.map +0 -1
- package/src/documents/language-client-text-shadow.ts +0 -175
- package/src/documents/self-save-registry.ts +0 -81
- package/src/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
10
|
import type { AstNode, AstReflection } from '@hydranium/langium';
|
|
11
|
+
import type { ConcreteTypeName, SingleTypeName } from '@hydranium/protocol';
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Shape of the per-type constants Langium emits alongside each
|
|
@@ -55,14 +56,18 @@ export type AstNodeInit<T extends AstNode> = Omit<T, keyof AstNode | ArrayKeys<T
|
|
|
55
56
|
* the AST interface from a constant's `$type` literal alone, so call sites do
|
|
56
57
|
* not have to write the type name twice.
|
|
57
58
|
*
|
|
59
|
+
* The constant must name one type its own `$type` lists: a union's or an
|
|
60
|
+
* abstract type's constant, or one typed by a union of type names, would let
|
|
61
|
+
* an incomplete node through.
|
|
62
|
+
*
|
|
58
63
|
* @param typeConstant the per-type constant Langium emits (drives `$type`).
|
|
59
64
|
* @param init typed fields — TS enforces mandatory non-array fields here.
|
|
60
65
|
* @param extras explicitly-unchecked escape hatch for properties not declared
|
|
61
66
|
* on the AST interface. Use sparingly; lives in a separate
|
|
62
67
|
* argument so typos can't silently pass into the typed slot.
|
|
63
68
|
*/
|
|
64
|
-
export type AstNodeBuilder<TMap> = <TType extends
|
|
65
|
-
typeConstant: AstTypeConstant<TType>,
|
|
69
|
+
export type AstNodeBuilder<TMap> = <TType extends ConcreteTypeName<TMap>>(
|
|
70
|
+
typeConstant: AstTypeConstant<TType> & SingleTypeName<TType>,
|
|
66
71
|
init: AstNodeInit<Extract<TMap[TType], AstNode>>,
|
|
67
72
|
extras?: Record<string, unknown>
|
|
68
73
|
) => Extract<TMap[TType], AstNode>;
|
|
@@ -94,18 +99,21 @@ export type AstNodeBuilder<TMap> = <TType extends string & keyof TMap>(
|
|
|
94
99
|
* rather than a way to drop fields from the typed call site.
|
|
95
100
|
*/
|
|
96
101
|
export function makeAstNodeBuilder<TMap>(reflection: AstReflection): AstNodeBuilder<TMap> {
|
|
97
|
-
return function astNode<TType extends
|
|
98
|
-
typeConstant: AstTypeConstant<TType>,
|
|
102
|
+
return function astNode<TType extends ConcreteTypeName<TMap>>(
|
|
103
|
+
typeConstant: AstTypeConstant<TType> & SingleTypeName<TType>,
|
|
99
104
|
init: AstNodeInit<Extract<TMap[TType], AstNode>>,
|
|
100
105
|
extras?: Record<string, unknown>
|
|
101
106
|
): Extract<TMap[TType], AstNode> {
|
|
102
107
|
const result = withTypeDefaults(reflection, typeConstant.$type);
|
|
103
|
-
|
|
108
|
+
assignOverDefaults(result, init);
|
|
104
109
|
if (extras) {
|
|
105
110
|
// Extras win over init: this is the explicit escape hatch, so when a
|
|
106
111
|
// call site uses it, treat that as deliberate override intent.
|
|
107
|
-
|
|
112
|
+
assignOverDefaults(result, extras);
|
|
108
113
|
}
|
|
114
|
+
// Last, so neither can rebind it: `AstNodeInit` keeps out only a `$type`
|
|
115
|
+
// written in the call, and a spread of another node carries its own.
|
|
116
|
+
result.$type = typeConstant.$type;
|
|
109
117
|
return result as unknown as Extract<TMap[TType], AstNode>;
|
|
110
118
|
};
|
|
111
119
|
}
|
|
@@ -127,12 +135,12 @@ export function makeAstNodeBuilder<TMap>(reflection: AstReflection): AstNodeBuil
|
|
|
127
135
|
* permissive lookup into a throw at a call site that can only guess.
|
|
128
136
|
*
|
|
129
137
|
* **The `type` argument is authoritative: `init` cannot rebind `$type`.** The
|
|
130
|
-
* typed builder
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
138
|
+
* typed builder holds the same rule, since its init type keeps out only a
|
|
139
|
+
* `$type` written in the call. The case that needs the guarantee is RETYPING:
|
|
140
|
+
* a caller spreading an existing node to produce one of a different type
|
|
141
|
+
* (`{ ...source }`) carries the SOURCE's `$type` in, which would silently win
|
|
142
|
+
* over the type actually requested and hand back a node of the wrong type with
|
|
143
|
+
* no error anywhere.
|
|
136
144
|
*/
|
|
137
145
|
export function buildAstNode<TAst extends AstNode = AstNode>(
|
|
138
146
|
reflection: AstReflection,
|
|
@@ -141,7 +149,7 @@ export function buildAstNode<TAst extends AstNode = AstNode>(
|
|
|
141
149
|
): TAst {
|
|
142
150
|
const result = withTypeDefaults(reflection, type);
|
|
143
151
|
if (init) {
|
|
144
|
-
|
|
152
|
+
assignOverDefaults(result, init);
|
|
145
153
|
result.$type = type;
|
|
146
154
|
}
|
|
147
155
|
return result as unknown as TAst;
|
|
@@ -167,3 +175,17 @@ function withTypeDefaults(reflection: AstReflection, type: string): Record<strin
|
|
|
167
175
|
}
|
|
168
176
|
return result;
|
|
169
177
|
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* `Object.assign`, except that an `undefined` does not replace a value already
|
|
181
|
+
* there: an optional field the caller names as `undefined` keeps its grammar
|
|
182
|
+
* default, where a plain assign would leave a node typed complete without it.
|
|
183
|
+
* Any other `undefined` is written, so the key stays present.
|
|
184
|
+
*/
|
|
185
|
+
function assignOverDefaults(target: Record<string, unknown>, source: object): void {
|
|
186
|
+
for (const [key, value] of Object.entries(source)) {
|
|
187
|
+
if (value !== undefined || !Object.hasOwn(target, key)) {
|
|
188
|
+
target[key] = value;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
package/src/langium/bootstrap.ts
CHANGED
|
@@ -10,17 +10,20 @@
|
|
|
10
10
|
import { type Logger } from '@hydranium/protocol';
|
|
11
11
|
import { type LangiumSharedCoreServices } from '@hydranium/langium';
|
|
12
12
|
import { type LangiumServices, type LangiumSharedServices } from '@hydranium/langium/lsp';
|
|
13
|
-
import type {
|
|
13
|
+
import type { ServerSharedServices } from './module.js';
|
|
14
14
|
import { collectProducibleTypes } from './language-types.js';
|
|
15
|
-
import {
|
|
15
|
+
import { assertSingleLangiumCopy } from './single-langium-copy.js';
|
|
16
|
+
import { DefaultAstDocumentManager } from '../documents/ast-document-manager.js';
|
|
16
17
|
import { HydraniumTextDocuments } from '../documents/hydranium-text-documents.js';
|
|
17
|
-
import {
|
|
18
|
+
import { DefaultBuildPipelineIntegration } from './document-builder/build-pipeline-integration.js';
|
|
18
19
|
import { HydraniumDocumentBuilder } from './document-builder/document-builder.js';
|
|
19
|
-
import {
|
|
20
|
+
import { DefaultModelService } from './model-service/model-service.js';
|
|
20
21
|
import { HydraniumScopeComputation } from './scope/hydranium-scope-computation.js';
|
|
21
22
|
import { HydraniumScopeProvider } from './scope/hydranium-scope-provider.js';
|
|
22
23
|
import { processEnv } from '../util/environment.js';
|
|
23
|
-
import {
|
|
24
|
+
import { DefaultTransferEncoder } from './transfer/transfer-encoder.js';
|
|
25
|
+
import { HydraniumLangiumDocumentFactory } from './workspace/hydranium-langium-document-factory.js';
|
|
26
|
+
import { HydraniumLangiumDocuments } from './workspace/langium-documents.js';
|
|
24
27
|
import { HydraniumWorkspaceManager } from './workspace/hydranium-workspace-manager.js';
|
|
25
28
|
|
|
26
29
|
/**
|
|
@@ -191,6 +194,20 @@ interface StrictSlot {
|
|
|
191
194
|
|
|
192
195
|
const STRICT_SHARED_SLOTS: readonly StrictSlot[] = [
|
|
193
196
|
{ side: 'shared', path: 'workspace.TextDocuments', base: HydraniumTextDocuments, get: s => nested(s, 'workspace', 'TextDocuments') },
|
|
197
|
+
// Every root it builds records no version, so every write gated on one conflicts.
|
|
198
|
+
{
|
|
199
|
+
side: 'shared',
|
|
200
|
+
path: 'workspace.LangiumDocumentFactory',
|
|
201
|
+
base: HydraniumLangiumDocumentFactory,
|
|
202
|
+
get: s => nested(s, 'workspace', 'LangiumDocumentFactory')
|
|
203
|
+
},
|
|
204
|
+
// It reports no registered root, so none is reconciled with the text store or announced.
|
|
205
|
+
{
|
|
206
|
+
side: 'shared',
|
|
207
|
+
path: 'workspace.LangiumDocuments',
|
|
208
|
+
base: HydraniumLangiumDocuments,
|
|
209
|
+
get: s => nested(s, 'workspace', 'LangiumDocuments')
|
|
210
|
+
},
|
|
194
211
|
{
|
|
195
212
|
side: 'shared',
|
|
196
213
|
path: 'workspace.WorkspaceManager',
|
|
@@ -206,17 +223,17 @@ const STRICT_SHARED_SLOTS: readonly StrictSlot[] = [
|
|
|
206
223
|
{
|
|
207
224
|
side: 'shared',
|
|
208
225
|
path: 'workspace.AstDocumentManager',
|
|
209
|
-
base:
|
|
226
|
+
base: DefaultAstDocumentManager,
|
|
210
227
|
get: s => nested(s, 'workspace', 'AstDocumentManager')
|
|
211
228
|
},
|
|
212
229
|
{
|
|
213
230
|
side: 'shared',
|
|
214
231
|
path: 'workspace.BuildPipelineIntegration',
|
|
215
|
-
base:
|
|
232
|
+
base: DefaultBuildPipelineIntegration,
|
|
216
233
|
get: s => nested(s, 'workspace', 'BuildPipelineIntegration')
|
|
217
234
|
},
|
|
218
|
-
{ side: 'shared', path: 'model.TransferEncoder', base:
|
|
219
|
-
{ side: 'shared', path: 'model.ModelService', base:
|
|
235
|
+
{ side: 'shared', path: 'model.TransferEncoder', base: DefaultTransferEncoder, get: s => nested(s, 'model', 'TransferEncoder') },
|
|
236
|
+
{ side: 'shared', path: 'model.ModelService', base: DefaultModelService, get: s => nested(s, 'model', 'ModelService') }
|
|
220
237
|
];
|
|
221
238
|
|
|
222
239
|
const STRICT_LANGUAGE_SLOTS: readonly StrictSlot[] = [
|
|
@@ -294,31 +311,40 @@ export function warnOnUnexpectedBindings(shared: LangiumSharedServices, language
|
|
|
294
311
|
* dispatch every build-phase pass and drive AST enrichment, and
|
|
295
312
|
* registers the framework integrity passes itself. The per-language
|
|
296
313
|
* feature services it routes to (`ast.AstExtensionService` +
|
|
297
|
-
* `integrity.IntegrityService
|
|
298
|
-
* read by the scope provider) hold the registries and the logic but own
|
|
314
|
+
* `integrity.IntegrityService`) hold the registries and the logic but own
|
|
299
315
|
* no listeners, so they need not be eager: each language's services
|
|
300
|
-
* construct lazily when the orchestrator
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
*
|
|
306
|
-
*
|
|
316
|
+
* construct lazily when the orchestrator first reaches them, and their
|
|
317
|
+
* constructors register that language's rules / extensions just-in-time.
|
|
318
|
+
* `references.ScopeExtensionService`, read by the scope provider, does
|
|
319
|
+
* subscribe to the builder, but only to report its own calls, so
|
|
320
|
+
* constructing it at its first call misses none.
|
|
321
|
+
* - **`profilers.LangiumProfiler`** — subscribes to
|
|
322
|
+
* `documentBuilder.onBuildEnded` to flush the aggregated
|
|
323
|
+
* parse/link/validate profile once per build. No production cost (the
|
|
324
|
+
* profiler is trace-gated), but the listener must be attached before the
|
|
325
|
+
* first build ends.
|
|
307
326
|
* - **`workspace.CstResidencyService`** — self-registers a `Validated`
|
|
308
327
|
* BuildPhasePass that sheds the CST of closed documents. The framework
|
|
309
328
|
* default strategy is `always-keep`, so the pass runs but sheds nothing
|
|
310
329
|
* until an adopter configures a shedding strategy.
|
|
330
|
+
* - **`workspace.AstDocumentManager`** — subscribes to the build pipeline
|
|
331
|
+
* and the text store to track opens, deletions and each build's causes.
|
|
332
|
+
* - **`model.ModelService`** — subscribes to the settled document phase to
|
|
333
|
+
* bring the language client up to date. A tree without an LSP `initialize`,
|
|
334
|
+
* such as a headless init, may not resolve it before the first build.
|
|
311
335
|
*
|
|
312
336
|
* Consumers with no additional eager targets can omit the third argument
|
|
313
337
|
* to {@link bootstrapLangium} — the parameter default is this exact set.
|
|
314
338
|
* Adopters needing extra eager targets spread this constant into their own
|
|
315
339
|
* array and append their accessors.
|
|
316
340
|
*/
|
|
317
|
-
export const DEFAULT_EAGER_SERVICES: ReadonlyArray<(services:
|
|
341
|
+
export const DEFAULT_EAGER_SERVICES: ReadonlyArray<(services: ServerSharedServices) => unknown> = [
|
|
318
342
|
services => services.workspace.ProjectManager,
|
|
319
343
|
services => services.workspace.BuildPipelineIntegration,
|
|
320
344
|
services => services.profilers.LangiumProfiler,
|
|
321
|
-
services => services.workspace.CstResidencyService
|
|
345
|
+
services => services.workspace.CstResidencyService,
|
|
346
|
+
services => services.workspace.AstDocumentManager,
|
|
347
|
+
services => services.model.ModelService
|
|
322
348
|
];
|
|
323
349
|
|
|
324
350
|
/**
|
|
@@ -336,36 +362,39 @@ export const DEFAULT_EAGER_SERVICES: ReadonlyArray<(services: ServerSharedServic
|
|
|
336
362
|
* discarded.
|
|
337
363
|
*
|
|
338
364
|
* Bootstrap responsibilities, in order:
|
|
339
|
-
* 1.
|
|
365
|
+
* 1. {@link assertSingleLangiumCopy} — fail fast when the shared
|
|
366
|
+
* `AstReflection` is built on a second copy of `langium`, before any
|
|
367
|
+
* later check can fail first and name the wrong cause.
|
|
368
|
+
* 2. Hand the shared services to `shared.ServiceRegistry` if it accepts
|
|
340
369
|
* them after construction, so Langium's declared-languageId lookup
|
|
341
370
|
* rung works however the adopter's registry binding was built.
|
|
342
|
-
*
|
|
371
|
+
* 3. {@link assertDistinctFileRouting} — before registration, because
|
|
343
372
|
* `register` resolves a routing collision by last-wins and afterwards
|
|
344
373
|
* the evidence is gone.
|
|
345
|
-
*
|
|
374
|
+
* 4. Register `language` against `shared.ServiceRegistry`, the
|
|
346
375
|
* required final step of any Langium DI bootstrap. Done before slot
|
|
347
376
|
* validation so subclassed registries (typed-accessor extensions)
|
|
348
377
|
* populate any side state before validation walks construct services
|
|
349
378
|
* that read from the registry.
|
|
350
|
-
*
|
|
379
|
+
* 5. {@link assertCoreSlotsBound} — fail fast if the consumer's
|
|
351
380
|
* `inject(...)` composition is missing a `@hydranium/core` module. May
|
|
352
381
|
* trigger lazy service construction as side effect of walking the
|
|
353
382
|
* slots; that construction expects a populated `ServiceRegistry`,
|
|
354
383
|
* hence the order.
|
|
355
|
-
*
|
|
384
|
+
* 6. {@link warnOnUnexpectedBindings} — opt-in (gated by
|
|
356
385
|
* {@link STRICT_BINDINGS_ENV}); warns when a framework slot is bound
|
|
357
386
|
* to a non-subclass of its framework base. No-op unless the env is set.
|
|
358
|
-
*
|
|
387
|
+
* 7. {@link assertReflectionCoversLanguages} — catch a clobbered shared
|
|
359
388
|
* `AstReflection` before it starts silently answering `isSubtype`
|
|
360
389
|
* false for a registered language's types. Skipped here, since a lone
|
|
361
390
|
* language has no sibling that could clobber it.
|
|
362
|
-
*
|
|
391
|
+
* 8. Invoke eager-construction accessors in array order.
|
|
363
392
|
*
|
|
364
393
|
* Multi-grammar adopters use {@link bootstrapLangiumLanguages}, which
|
|
365
394
|
* registers every language before validating slots or constructing the
|
|
366
395
|
* eager set.
|
|
367
396
|
*/
|
|
368
|
-
export function bootstrapLangium<TShared extends LangiumSharedServices &
|
|
397
|
+
export function bootstrapLangium<TShared extends LangiumSharedServices & ServerSharedServices, TLang extends LangiumServices>(
|
|
369
398
|
shared: TShared,
|
|
370
399
|
language: TLang,
|
|
371
400
|
eagerlyConstructedServices: ReadonlyArray<(services: TShared) => unknown> = DEFAULT_EAGER_SERVICES
|
|
@@ -384,32 +413,32 @@ export function bootstrapLangium<TShared extends LangiumSharedServices & ServerS
|
|
|
384
413
|
* ORDER across languages is what makes this a distinct function rather
|
|
385
414
|
* than a loop the caller could write:
|
|
386
415
|
*
|
|
387
|
-
* 1.
|
|
388
|
-
*
|
|
416
|
+
* 1. {@link assertSingleLangiumCopy} runs **once**, before anything else,
|
|
417
|
+
* since every language shares the one `AstReflection`.
|
|
418
|
+
* 2. **Every** language is registered against `shared.ServiceRegistry`
|
|
419
|
+
* next. Slot validation and eager construction both build services
|
|
389
420
|
* that read the registry — a per-language
|
|
390
421
|
* register-then-validate-then-eager loop would run them while later
|
|
391
422
|
* languages were still missing, so a shared service that walks
|
|
392
423
|
* `ServiceRegistry.all` (or resolves by extension) would see a
|
|
393
424
|
* half-populated registry and cache the wrong answer.
|
|
394
|
-
*
|
|
425
|
+
* 3. `assertCoreSlotsBound` / `warnOnUnexpectedBindings` per language —
|
|
395
426
|
* each language composes its own module chain, so each is checked.
|
|
396
|
-
*
|
|
397
|
-
*
|
|
398
|
-
*
|
|
399
|
-
*
|
|
400
|
-
* routes per document URI to
|
|
401
|
-
* `AstExtensionService`, so it
|
|
402
|
-
* them. Running the set per language
|
|
403
|
-
* `documentBuilder` listeners N times and enforce each
|
|
427
|
+
* 4. {@link assertReflectionCoversLanguages} runs **once**, on the one
|
|
428
|
+
* shared `AstReflection`.
|
|
429
|
+
* 5. Eager accessors run **once**, after all registrations. They take
|
|
430
|
+
* the shared tier, and the framework's eager set is shared-tier only —
|
|
431
|
+
* `BuildPipelineIntegration` in particular routes per document URI to
|
|
432
|
+
* each language's `IntegrityService` / `AstExtensionService`, so it
|
|
433
|
+
* must be constructed knowing all of them. Running the set per language
|
|
434
|
+
* would attach its `documentBuilder` listeners N times and enforce each
|
|
435
|
+
* phase N times.
|
|
404
436
|
*
|
|
405
437
|
* Throws when `languages` is empty: a shared tier with no registered
|
|
406
438
|
* language never validates its slots, which silently defers a
|
|
407
439
|
* composition error to the first build.
|
|
408
440
|
*/
|
|
409
|
-
export function bootstrapLangiumLanguages<
|
|
410
|
-
TShared extends LangiumSharedServices & ServerSharedServicesMinimal,
|
|
411
|
-
TLang extends LangiumServices
|
|
412
|
-
>(
|
|
441
|
+
export function bootstrapLangiumLanguages<TShared extends LangiumSharedServices & ServerSharedServices, TLang extends LangiumServices>(
|
|
413
442
|
shared: TShared,
|
|
414
443
|
languages: ReadonlyArray<TLang>,
|
|
415
444
|
eagerlyConstructedServices: ReadonlyArray<(services: TShared) => unknown> = DEFAULT_EAGER_SERVICES
|
|
@@ -421,6 +450,11 @@ export function bootstrapLangiumLanguages<
|
|
|
421
450
|
'`inject(...)` composition.'
|
|
422
451
|
);
|
|
423
452
|
}
|
|
453
|
+
// First, because a second copy of `langium` can make a later check fail
|
|
454
|
+
// first and name the wrong cause.
|
|
455
|
+
if (shared.AstReflection) {
|
|
456
|
+
assertSingleLangiumCopy(shared.AstReflection);
|
|
457
|
+
}
|
|
424
458
|
// Back-fill the shared services onto a registry that was constructed
|
|
425
459
|
// without them, so Langium's declared-languageId lookup rung works no
|
|
426
460
|
// matter how the adopter's `ServiceRegistry` binding built it. An adopter
|
|
@@ -528,11 +562,11 @@ export function assertDistinctFileRouting(languages: ReadonlyArray<LangiumServic
|
|
|
528
562
|
*
|
|
529
563
|
* The check is per language, on the types its grammar can produce, and costs
|
|
530
564
|
* one grammar walk per language at boot; a single-language composition, which
|
|
531
|
-
* nothing can clobber, is skipped entirely. It cannot repair the situation
|
|
532
|
-
* reflection
|
|
533
|
-
*
|
|
534
|
-
*
|
|
535
|
-
*
|
|
565
|
+
* nothing can clobber, is skipped entirely. It cannot repair the situation, since
|
|
566
|
+
* the losing reflection is already gone; the point is to turn a silent runtime
|
|
567
|
+
* misbehaviour into a boot failure that names the language and the mistake. The
|
|
568
|
+
* repair is the adopter's: bind a `CompositeAstReflection` over every package's
|
|
569
|
+
* generated reflection, or generate all grammars in one `langium-cli` run.
|
|
536
570
|
*
|
|
537
571
|
* **Two severities, because a clobber is not always total.** Throwing only when
|
|
538
572
|
* NONE of a language's types are known misses the realistic case: two grammars
|
|
@@ -574,8 +608,9 @@ export function assertReflectionCoversLanguages(shared: LangiumSharedServices, l
|
|
|
574
608
|
`[hydranium] the shared AstReflection knows NONE of the ${produced.size} types the language ` +
|
|
575
609
|
`'${languageId}' can produce (e.g. ${missing.slice(0, 3).join(', ')}). ` +
|
|
576
610
|
'AstReflection is a single shared slot, so composing two independently generated language ' +
|
|
577
|
-
|
|
578
|
-
'
|
|
611
|
+
"packages leaves only the last one bound. Bind a CompositeAstReflection over every package's " +
|
|
612
|
+
'generated reflection, or generate all grammars in ONE langium-cli run (one langium-config with ' +
|
|
613
|
+
'several entry grammars) so a single combined reflection covers them all.'
|
|
579
614
|
);
|
|
580
615
|
}
|
|
581
616
|
}
|
|
@@ -597,7 +632,8 @@ function warnPartialReflectionCoverage(
|
|
|
597
632
|
'For those types `isSubtype` answers false and `getTypeMetaData` is empty, so `IndexManager.allElements` ' +
|
|
598
633
|
'finds nothing, reference routing misses, and the encoder emits nothing. Most likely two independently ' +
|
|
599
634
|
'generated language packages each bound the single shared AstReflection slot and the last one won — ' +
|
|
600
|
-
|
|
635
|
+
"bind a CompositeAstReflection over every package's generated reflection, or generate all grammars in " +
|
|
636
|
+
'ONE langium-cli run so a single combined reflection covers them. If instead ' +
|
|
601
637
|
'these are rules your generator legitimately folded away, this warning is expected.';
|
|
602
638
|
if (logger) {
|
|
603
639
|
logger.warn(message);
|
|
@@ -13,7 +13,7 @@ import { type CancellationToken, type Disposable } from 'vscode-languageserver';
|
|
|
13
13
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
14
14
|
import { type ServerSharedServices } from '../module.js';
|
|
15
15
|
import { Registry } from '../../util/registry.js';
|
|
16
|
-
import { type BuildPhasePass, type BuildPhasePassRegistry } from './build-phase-pass.js';
|
|
16
|
+
import { type BuildPhasePass, type BuildPhasePassRegistry, BuildPassPhase } from './build-phase-pass.js';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Public contract for the shared build-phase-pass runner. Extends the
|
|
@@ -27,11 +27,11 @@ import { type BuildPhasePass, type BuildPhasePassRegistry } from './build-phase-
|
|
|
27
27
|
* per-language work (integrity) fans out by language *inside* its pass. This
|
|
28
28
|
* also keeps one priority space per phase across framework and adopter passes,
|
|
29
29
|
* which is the point — `runPasses` orders the framework's integrity and
|
|
30
|
-
*
|
|
30
|
+
* CST-residency passes against adopter passes deterministically.
|
|
31
31
|
*/
|
|
32
32
|
export interface BuildPhasePassService extends BuildPhasePassRegistry {
|
|
33
33
|
/**
|
|
34
|
-
* Run every pass declaring `phase
|
|
34
|
+
* Run every pass declaring `phase`, in priority order,
|
|
35
35
|
* sequentially — each pass is awaited before the next begins. The cancel
|
|
36
36
|
* token is checked before each pass so a preempted build stops cleanly.
|
|
37
37
|
* No-ops when no pass targets the phase. Called by
|
|
@@ -52,8 +52,8 @@ export type BuildPhasePassServiceOptions = LogNameOptions;
|
|
|
52
52
|
* `BuildPipelineIntegration`,
|
|
53
53
|
* which calls {@link runPasses} from its `onBuildPhase` listeners.
|
|
54
54
|
*
|
|
55
|
-
* **Performance:** {@link runPasses} shares the bucket-by-
|
|
56
|
-
* with the AST-extension service — the per-
|
|
55
|
+
* **Performance:** {@link runPasses} shares the bucket-by-phase cache pattern
|
|
56
|
+
* with the AST-extension service — the per-phase pass list is rebuilt lazily
|
|
57
57
|
* only after a register / unregister, so steady-state dispatch allocates
|
|
58
58
|
* nothing and early-outs when no pass targets the phase.
|
|
59
59
|
*
|
|
@@ -64,9 +64,9 @@ export type BuildPhasePassServiceOptions = LogNameOptions;
|
|
|
64
64
|
*/
|
|
65
65
|
export class DefaultBuildPhasePassService implements BuildPhasePassService {
|
|
66
66
|
protected readonly passes = new Registry<BuildPhasePass>();
|
|
67
|
-
/** Per-
|
|
68
|
-
protected
|
|
69
|
-
protected
|
|
67
|
+
/** Per-phase bucket of passes targeting each phase, rebuilt lazily on the first run after a registry mutation. */
|
|
68
|
+
protected phaseBuckets = new Map<DocumentState, readonly BuildPhasePass[]>();
|
|
69
|
+
protected phaseBucketsFor: readonly BuildPhasePass[] | undefined;
|
|
70
70
|
|
|
71
71
|
protected readonly tracer: Tracer;
|
|
72
72
|
|
|
@@ -84,11 +84,21 @@ export class DefaultBuildPhasePassService implements BuildPhasePassService {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
register(pass: BuildPhasePass): Disposable {
|
|
87
|
+
// A phase outside the wired set type-checks only past a cast, and a pass
|
|
88
|
+
// there is accepted and never fires.
|
|
89
|
+
if (!BuildPassPhase.all().includes(pass.phase)) {
|
|
90
|
+
throw new Error(
|
|
91
|
+
`Build-phase pass '${pass.id}' registered at phase ${DocumentState[pass.phase]} would never fire. ` +
|
|
92
|
+
`Allowed phases are ${BuildPassPhase.all()
|
|
93
|
+
.map(phase => DocumentState[phase])
|
|
94
|
+
.join(', ')}.`
|
|
95
|
+
);
|
|
96
|
+
}
|
|
87
97
|
return this.passes.register(pass);
|
|
88
98
|
}
|
|
89
99
|
|
|
90
100
|
async runPasses(documents: readonly LangiumDocument[], phase: DocumentState, cancelToken: CancellationToken): Promise<void> {
|
|
91
|
-
const bucket = this.
|
|
101
|
+
const bucket = this.getPhaseBucket(phase);
|
|
92
102
|
if (bucket.length === 0) {
|
|
93
103
|
return;
|
|
94
104
|
}
|
|
@@ -114,28 +124,28 @@ export class DefaultBuildPhasePassService implements BuildPhasePassService {
|
|
|
114
124
|
}
|
|
115
125
|
|
|
116
126
|
/**
|
|
117
|
-
* Bucket-by-
|
|
127
|
+
* Bucket-by-phase view of {@link passes}, rebuilt lazily when the registry's
|
|
118
128
|
* cached `all()` reference changes. Each bucket preserves the registry's
|
|
119
129
|
* priority order (`Registry.all()` is already priority-sorted).
|
|
120
130
|
*/
|
|
121
|
-
protected
|
|
131
|
+
protected getPhaseBucket(phase: DocumentState): readonly BuildPhasePass[] {
|
|
122
132
|
const current = this.passes.all();
|
|
123
|
-
if (this.
|
|
133
|
+
if (this.phaseBucketsFor !== current) {
|
|
124
134
|
const next = new Map<DocumentState, BuildPhasePass[]>();
|
|
125
135
|
for (const pass of current) {
|
|
126
|
-
let bucket = next.get(pass.
|
|
136
|
+
let bucket = next.get(pass.phase);
|
|
127
137
|
if (!bucket) {
|
|
128
138
|
bucket = [];
|
|
129
|
-
next.set(pass.
|
|
139
|
+
next.set(pass.phase, bucket);
|
|
130
140
|
}
|
|
131
141
|
bucket.push(pass);
|
|
132
142
|
}
|
|
133
|
-
this.
|
|
134
|
-
this.
|
|
143
|
+
this.phaseBuckets = next;
|
|
144
|
+
this.phaseBucketsFor = current;
|
|
135
145
|
}
|
|
136
|
-
return this.
|
|
146
|
+
return this.phaseBuckets.get(phase) ?? EMPTY_PHASE_BUCKET;
|
|
137
147
|
}
|
|
138
148
|
}
|
|
139
149
|
|
|
140
|
-
/** Shared empty result so `
|
|
141
|
-
const
|
|
150
|
+
/** Shared empty result so `getPhaseBucket` doesn't allocate per call on the cold path. */
|
|
151
|
+
const EMPTY_PHASE_BUCKET: readonly BuildPhasePass[] = Object.freeze([]);
|
|
@@ -7,10 +7,43 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { DocumentState, type LangiumCoreServices, type LangiumDocument, type URI } from '@hydranium/langium';
|
|
11
11
|
import { type CancellationToken, type Disposable } from 'vscode-languageserver';
|
|
12
12
|
import { type RegistryItem } from '../../util/registry.js';
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* The build phases a {@link BuildPhasePass} may fire at: every phase after
|
|
16
|
+
* `Changed`, which has no AST yet. `IndexedContent` is one, unlike for an
|
|
17
|
+
* `AstExtension`: per document it carries nothing `Parsed` does, but per
|
|
18
|
+
* batch it is the only phase meaning the global index is whole again, which
|
|
19
|
+
* batch work keyed on a complete index has nowhere else to run.
|
|
20
|
+
*/
|
|
21
|
+
export type BuildPassPhase =
|
|
22
|
+
| DocumentState.Parsed
|
|
23
|
+
| DocumentState.IndexedContent
|
|
24
|
+
| DocumentState.ComputedScopes
|
|
25
|
+
| DocumentState.Linked
|
|
26
|
+
| DocumentState.IndexedReferences
|
|
27
|
+
| DocumentState.Validated;
|
|
28
|
+
|
|
29
|
+
export namespace BuildPassPhase {
|
|
30
|
+
/**
|
|
31
|
+
* Every {@link BuildPassPhase}, in build order. `BuildPipelineIntegration`
|
|
32
|
+
* wires one `onBuildPhase` listener per entry and `register` refuses a phase
|
|
33
|
+
* outside it, so the two cannot drift apart. A fresh array each call.
|
|
34
|
+
*/
|
|
35
|
+
export function all(): readonly BuildPassPhase[] {
|
|
36
|
+
return [
|
|
37
|
+
DocumentState.Parsed,
|
|
38
|
+
DocumentState.IndexedContent,
|
|
39
|
+
DocumentState.ComputedScopes,
|
|
40
|
+
DocumentState.Linked,
|
|
41
|
+
DocumentState.IndexedReferences,
|
|
42
|
+
DocumentState.Validated
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
14
47
|
/**
|
|
15
48
|
* A unit of whole-batch work run once per build when the batch reaches a
|
|
16
49
|
* declared build phase, ordered by {@link RegistryItem.priority}.
|
|
@@ -46,12 +79,8 @@ import { type RegistryItem } from '../../util/registry.js';
|
|
|
46
79
|
* rather than running the remaining passes against a doomed build.
|
|
47
80
|
*/
|
|
48
81
|
export interface BuildPhasePass extends RegistryItem {
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
* wires a listener for the same phase set as AST extension; a pass declaring
|
|
52
|
-
* any other state type-checks but never fires.
|
|
53
|
-
*/
|
|
54
|
-
state: DocumentState;
|
|
82
|
+
/** The single build phase whose `onBuildPhase` fires this pass. */
|
|
83
|
+
phase: BuildPassPhase;
|
|
55
84
|
/**
|
|
56
85
|
* Run this pass against the whole built batch. May mutate and reparse
|
|
57
86
|
* documents — the framework's integrity pass does — or derive cross-document
|
|
@@ -102,7 +131,7 @@ export function groupDocumentsByLanguage<TLanguage extends LangiumCoreServices>(
|
|
|
102
131
|
* Registry handed to a {@link BuildPhasePassContribution}. Implemented by the
|
|
103
132
|
* `BuildPhasePassService`; doubles
|
|
104
133
|
* as the low-level imperative API the framework uses to self-register its own
|
|
105
|
-
* passes (integrity,
|
|
134
|
+
* passes (integrity, CST residency).
|
|
106
135
|
*/
|
|
107
136
|
export interface BuildPhasePassRegistry {
|
|
108
137
|
register(pass: BuildPhasePass): Disposable;
|