@hydranium/core 1.0.0-next.35 → 1.0.0-next.350
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
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { type Tracer, type ReferenceContext, type ReferenceRequest, type ReferenceSource, type SyntheticSource } from '@hydranium/protocol';
|
|
10
|
-
import { type AstNode, type AstNodeDescription, type AstNodeLocator, DefaultScopeProvider, type ReferenceInfo, type Scope, type ScopeOptions, type URI, WorkspaceCache } from '@hydranium/langium';
|
|
10
|
+
import { type AstNode, type AstNodeDescription, type AstNodeLocator, DefaultScopeProvider, type LocalSymbols, type ReferenceInfo, type Scope, type ScopeOptions, type URI, WorkspaceCache } from '@hydranium/langium';
|
|
11
11
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
12
12
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
13
13
|
import { type NameProvider } from '../naming/name-provider.js';
|
|
14
14
|
import { type HydraniumDocumentRegistry } from '../workspace/langium-documents.js';
|
|
15
|
-
import { type ScopeExtensionService } from './scope-extension-service.js';
|
|
15
|
+
import { type ScopeExtensionDescriptions, type ScopeExtensionService } from './scope-extension-service.js';
|
|
16
|
+
import { type TieredAstNodeDescription } from './scoped-ast-node-description.js';
|
|
16
17
|
/**
|
|
17
18
|
* Construction-time options for {@link HydraniumScopeProvider}. Extends
|
|
18
19
|
* {@link LogNameOptions} so the standard `logName?` field
|
|
@@ -64,7 +65,7 @@ export interface ScopeContext {
|
|
|
64
65
|
/**
|
|
65
66
|
* Per-language scope provider that owns the full scope chain in ONE
|
|
66
67
|
* class. Bridges the protocol-layer {@link ReferenceContext} to
|
|
67
|
-
* Langium's {@link ReferenceInfo}, layers
|
|
68
|
+
* Langium's {@link ReferenceInfo}, layers scope-extension
|
|
68
69
|
* contributions ({@link ScopeExtensionService}) at their declared tier,
|
|
69
70
|
* and composes the cached project-tier chain (own-project → dependency
|
|
70
71
|
* → universal) on top of Langium's unfiltered global index.
|
|
@@ -72,16 +73,16 @@ export interface ScopeContext {
|
|
|
72
73
|
* ## Scope chain (high → low, inner shadows outer)
|
|
73
74
|
*
|
|
74
75
|
* ```
|
|
75
|
-
* document-local (Langium precomputed) [
|
|
76
|
-
* extension:local [layerLocalExtension, per
|
|
76
|
+
* document-local (Langium precomputed) [getScope, CACHED per build in localScope]
|
|
77
|
+
* extension:local [layerLocalExtension, CACHED per descriptions]
|
|
77
78
|
* own-project → dependency → universal-index [createGlobalScope default, CACHED per ${project}::${refType}]
|
|
78
|
-
* extension:universal [layerUniversalExtension, per
|
|
79
|
+
* extension:universal [layerUniversalExtension, CACHED per descriptions, outermost]
|
|
79
80
|
* ```
|
|
80
81
|
*
|
|
81
|
-
* Implementation:
|
|
82
|
-
* whatever `getGlobalScope` returns. The framework owns
|
|
83
|
-
* and uses it to assemble everything *below* document-local,
|
|
84
|
-
* adopter-overridable {@link createGlobalScope} in the middle.
|
|
82
|
+
* Implementation: {@link getScope} layers document-local on top of
|
|
83
|
+
* whatever `getGlobalScope` returns, as Langium's does. The framework owns
|
|
84
|
+
* `getGlobalScope` and uses it to assemble everything *below* document-local,
|
|
85
|
+
* with the adopter-overridable {@link createGlobalScope} in the middle.
|
|
85
86
|
*
|
|
86
87
|
* ## Adopter override surface
|
|
87
88
|
*
|
|
@@ -101,7 +102,8 @@ export interface ScopeContext {
|
|
|
101
102
|
* - **{@link createScopeForNodes}** — inherited from Langium and re-keyed by
|
|
102
103
|
* the framework to bare own-names, so it is the helper a `getScope`
|
|
103
104
|
* override uses to resolve a dotted member reference against a container
|
|
104
|
-
* the reference chain cannot reach.
|
|
105
|
+
* the reference chain cannot reach. Override {@link createNodeScope} to
|
|
106
|
+
* change the scope it builds.
|
|
105
107
|
*
|
|
106
108
|
* **Do NOT override `getGlobalScope` itself** — that is the framework's
|
|
107
109
|
* extension-assembly seam. Overriding it would hide the scope-extension
|
|
@@ -131,6 +133,24 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
131
133
|
* the workspace-global `DocumentBuilder.onUpdate`.
|
|
132
134
|
*/
|
|
133
135
|
protected readonly scopeCache: WorkspaceCache<string, Scope>;
|
|
136
|
+
/**
|
|
137
|
+
* Each container's local scope per reference type, keyed by the local
|
|
138
|
+
* symbols it was built from. A build replaces a document's local symbols
|
|
139
|
+
* when it recomputes them, so a rebuilt document never reads a stale entry.
|
|
140
|
+
*/
|
|
141
|
+
protected readonly localScopes: WeakMap<LocalSymbols, Map<AstNode, Map<string, Scope>>>;
|
|
142
|
+
/**
|
|
143
|
+
* {@link createScopeForNodes}' scope per list of nodes, keyed by the local
|
|
144
|
+
* symbols of the document the nodes belong to, which a rebuild of that
|
|
145
|
+
* document replaces.
|
|
146
|
+
*/
|
|
147
|
+
protected readonly nodeScopes: WeakMap<LocalSymbols, WeakMap<readonly AstNode[], Scope>>;
|
|
148
|
+
/**
|
|
149
|
+
* The scope of each scope extension's descriptions of one tier, keyed by
|
|
150
|
+
* the array: an extension with a cache key answers every reference of that
|
|
151
|
+
* key with the same one.
|
|
152
|
+
*/
|
|
153
|
+
protected readonly extensionScopes: WeakMap<readonly TieredAstNodeDescription[], Scope>;
|
|
134
154
|
protected readonly tracer: Tracer;
|
|
135
155
|
/**
|
|
136
156
|
* Narrows the inherited Langium {@link NameProvider} field to the framework's
|
|
@@ -140,14 +160,47 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
140
160
|
*/
|
|
141
161
|
protected readonly nameProvider: NameProvider;
|
|
142
162
|
constructor(services: HydraniumLanguageServices, options?: HydraniumScopeProviderOptions);
|
|
163
|
+
/**
|
|
164
|
+
* Drop every cached scope — the framework's project-tier chain and the
|
|
165
|
+
* inherited global scope it is filtered from.
|
|
166
|
+
*
|
|
167
|
+
* **Called from outside the class**, by the build pipeline once the batch is
|
|
168
|
+
* re-indexed. The caches' own eviction does not cover this:
|
|
169
|
+
* `DocumentBuilder.onUpdate` fires after the build has taken every changed
|
|
170
|
+
* document's symbols out of the index and before it puts them back, so a
|
|
171
|
+
* scope built in that gap denies those symbols exist and every document the
|
|
172
|
+
* same build links afterwards resolves against it.
|
|
173
|
+
*
|
|
174
|
+
* Both go together because the second is derived from the first: clearing
|
|
175
|
+
* only {@link scopeCache} refills it from a stale `globalScopeCache`, and
|
|
176
|
+
* clearing only `globalScopeCache` leaves the filtered copy standing.
|
|
177
|
+
*/
|
|
178
|
+
clearScopeCaches(): void;
|
|
179
|
+
/**
|
|
180
|
+
* Langium's, with each container's local scope built once per build through
|
|
181
|
+
* {@link localScope} rather than once per reference. Linking a document then
|
|
182
|
+
* costs its references plus its declarations, not their product.
|
|
183
|
+
*/
|
|
184
|
+
getScope(context: ReferenceInfo): Scope;
|
|
185
|
+
/**
|
|
186
|
+
* The symbols `container` declares that a `referenceType` reference can
|
|
187
|
+
* reach, through {@link createScope}, built once per `localSymbols`.
|
|
188
|
+
*/
|
|
189
|
+
protected localScope(localSymbols: LocalSymbols, container: AstNode, referenceType: string): Scope;
|
|
190
|
+
/**
|
|
191
|
+
* Keyed by name, where Langium's walks every element on each lookup. Every
|
|
192
|
+
* description of a name is kept and the first answers, as in Langium's;
|
|
193
|
+
* `getAllElements` lists them in order, but with a description following
|
|
194
|
+
* the first of its name.
|
|
195
|
+
*/
|
|
196
|
+
protected createScope(elements: Iterable<AstNodeDescription>, outerScope?: Scope, options?: ScopeOptions): Scope;
|
|
143
197
|
/**
|
|
144
198
|
* Framework-owned assembly seam. **Adopters do NOT override this** —
|
|
145
199
|
* override {@link createGlobalScope} instead. This method layers the
|
|
146
200
|
* scope-extension tiers around the adopter-overridable global scope.
|
|
147
201
|
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* class.
|
|
202
|
+
* {@link getScope} then layers document-local on top of this result,
|
|
203
|
+
* yielding the full chain documented on the class.
|
|
151
204
|
*/
|
|
152
205
|
protected getGlobalScope(referenceType: string, context: ReferenceInfo): Scope;
|
|
153
206
|
/**
|
|
@@ -177,18 +230,28 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
177
230
|
*/
|
|
178
231
|
protected createGlobalScope(referenceType: string, context: ReferenceInfo): Scope;
|
|
179
232
|
/**
|
|
180
|
-
* Layer scope
|
|
181
|
-
*
|
|
182
|
-
*
|
|
233
|
+
* Layer each scope extension's `local`-tier descriptions on top of `inner`,
|
|
234
|
+
* an earlier extension's above a later one's, through {@link extensionScope}.
|
|
235
|
+
* Returns `inner` unchanged when there are none.
|
|
236
|
+
*/
|
|
237
|
+
protected layerLocalExtension(extensions: readonly ScopeExtensionDescriptions[], inner: Scope, _referenceType: string, _context: ReferenceInfo): Scope;
|
|
238
|
+
/**
|
|
239
|
+
* Layer each scope extension's `universal`-tier descriptions below `inner`,
|
|
240
|
+
* which shadows them, an earlier extension's above a later one's, through
|
|
241
|
+
* {@link extensionScope}. Returns `inner` unchanged when there are none.
|
|
183
242
|
*/
|
|
184
|
-
protected
|
|
243
|
+
protected layerUniversalExtension(extensions: readonly ScopeExtensionDescriptions[], inner: Scope, _referenceType: string, _context: ReferenceInfo): Scope;
|
|
185
244
|
/**
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
* `inner` unchanged when no extension contributes for the reference
|
|
189
|
-
* type.
|
|
245
|
+
* Chain the scope of each non-empty array above `outer`, an earlier array's
|
|
246
|
+
* above a later one's; `undefined` when there is neither.
|
|
190
247
|
*/
|
|
191
|
-
protected
|
|
248
|
+
protected chainExtensionScopes(tiers: ReadonlyArray<readonly TieredAstNodeDescription[]>, outer?: Scope): Scope | undefined;
|
|
249
|
+
/**
|
|
250
|
+
* The scope of one extension's descriptions of one tier, through
|
|
251
|
+
* {@link createScope}, built once per array and shared by every reference
|
|
252
|
+
* it answers, so an override of `createScope` sees no reference context.
|
|
253
|
+
*/
|
|
254
|
+
protected extensionScope(descriptions: readonly TieredAstNodeDescription[]): Scope;
|
|
192
255
|
/**
|
|
193
256
|
* Project-tier scope filter. Given a source URI and a global scope,
|
|
194
257
|
* returns the subset of descriptions whose owning project is visible
|
|
@@ -215,7 +278,7 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
215
278
|
* closure).
|
|
216
279
|
*
|
|
217
280
|
* Contrast {@link getGlobalScope}, which applies the framework's
|
|
218
|
-
* tier filter to this set, and
|
|
281
|
+
* tier filter to this set, and {@link getScope}, which
|
|
219
282
|
* additionally merges in the local scope.
|
|
220
283
|
*/
|
|
221
284
|
protected getAllElementsGlobalScope(referenceType: string, context: ReferenceInfo): Scope;
|
|
@@ -240,7 +303,7 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
240
303
|
* Includes own-project `'public'`-tier descriptions when
|
|
241
304
|
* {@link HydraniumScopeProviderOptions.includeOwnProjectPublic} is set
|
|
242
305
|
* (routed to the own-project bucket by {@link bucketFor}). Returns a
|
|
243
|
-
* {@link
|
|
306
|
+
* {@link MultiMapScope} (not {@link MapScope}) so same-name siblings are
|
|
244
307
|
* preserved rather than collapsed.
|
|
245
308
|
*/
|
|
246
309
|
protected createOwnProjectScope(context: ScopeContext): Scope;
|
|
@@ -256,10 +319,10 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
256
319
|
*/
|
|
257
320
|
protected createUniversalScope(context: ScopeContext): Scope;
|
|
258
321
|
/**
|
|
259
|
-
* Chain three tier sub-scopes inner-first
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
322
|
+
* Chain three tier sub-scopes inner-first through {@link FallbackScope},
|
|
323
|
+
* which consults an outer tier only when the inner one has no match, so a
|
|
324
|
+
* more specific tier shadows a less specific one of the same name, and each
|
|
325
|
+
* tier keeps its own lookup.
|
|
263
326
|
*/
|
|
264
327
|
protected chainScopes(ownScope: Scope, dependencyScope: Scope, universalScope: Scope): Scope;
|
|
265
328
|
/**
|
|
@@ -291,9 +354,29 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
291
354
|
*/
|
|
292
355
|
protected getProjectIdForDescription(description: AstNodeDescription): string | undefined;
|
|
293
356
|
/**
|
|
357
|
+
* Langium's, with the scope cached: a member scope is asked for once per
|
|
358
|
+
* reference, and building it each time makes linking cost references times
|
|
359
|
+
* members.
|
|
360
|
+
*
|
|
361
|
+
* - Cached: the scope for a list of a built document's nodes, passed with
|
|
362
|
+
* no `outerScope` or `options`, built once through {@link createNodeScope}.
|
|
363
|
+
* - Dropped: when that document's local symbols are replaced; a build that
|
|
364
|
+
* leaves its nodes in place keeps it.
|
|
365
|
+
* - Any other list gets a scope per call.
|
|
366
|
+
*
|
|
367
|
+
* Override {@link createNodeScope} to change the scope; an override of this
|
|
368
|
+
* method keeps the cache only by calling `super`. The list must hold nodes
|
|
369
|
+
* of one document, which it is keyed by; a list changed in place between
|
|
370
|
+
* builds is answered as it was.
|
|
371
|
+
*/
|
|
372
|
+
protected createScopeForNodes(elements: Iterable<AstNode>, outerScope?: Scope, options?: ScopeOptions): Scope;
|
|
373
|
+
/**
|
|
374
|
+
* The scope {@link createScopeForNodes} answers with, keyed by name.
|
|
375
|
+
*
|
|
294
376
|
* Keys the scope by {@link NameProvider.getOwnName} instead of Langium's
|
|
295
|
-
* `getName`. Same correction
|
|
296
|
-
* makes to the
|
|
377
|
+
* `getName`. Same correction
|
|
378
|
+
* `HydraniumScopeComputation.addLocalSymbolByOwnName` makes to the
|
|
379
|
+
* local-symbols pass, for the same reason: `getName` defaults
|
|
297
380
|
* to the project-qualified form here, so the base would key a member scope
|
|
298
381
|
* by the fully qualified `Container.member` while the reference text after
|
|
299
382
|
* the dot is the bare `member` — and nothing reports the mismatch, because
|
|
@@ -303,7 +386,7 @@ export declare class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
303
386
|
* reference to a member the container does not have must fail rather than
|
|
304
387
|
* fall through to a same-named member on an unrelated type.
|
|
305
388
|
*/
|
|
306
|
-
protected
|
|
389
|
+
protected createNodeScope(elements: Iterable<AstNode>, outerScope?: Scope, options?: ScopeOptions): Scope;
|
|
307
390
|
/**
|
|
308
391
|
* Convert a protocol-layer {@link ReferenceContext} into a Langium
|
|
309
392
|
* {@link ReferenceInfo} the rest of the scope/linking machinery accepts.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-scope-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EAKtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACJ,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"hydranium-scope-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/hydranium-scope-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { isDocumentSource, isElementSource, isReferenceContext, isSyntheticSource } from '@hydranium/protocol';
|
|
10
|
-
import { AstUtils, DefaultScopeProvider, MapScope,
|
|
10
|
+
import { AstUtils, DefaultScopeProvider, MapScope, MultiMapScope, UriUtils, WorkspaceCache, stream } from '@hydranium/langium';
|
|
11
11
|
import { buildAstNode } from '../ast-extension/ast-node-builder.js';
|
|
12
|
+
import { FallbackScope } from './fallback-scope.js';
|
|
12
13
|
import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
13
14
|
/**
|
|
14
15
|
* Per-language scope provider that owns the full scope chain in ONE
|
|
15
16
|
* class. Bridges the protocol-layer {@link ReferenceContext} to
|
|
16
|
-
* Langium's {@link ReferenceInfo}, layers
|
|
17
|
+
* Langium's {@link ReferenceInfo}, layers scope-extension
|
|
17
18
|
* contributions ({@link ScopeExtensionService}) at their declared tier,
|
|
18
19
|
* and composes the cached project-tier chain (own-project → dependency
|
|
19
20
|
* → universal) on top of Langium's unfiltered global index.
|
|
@@ -21,16 +22,16 @@ import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
|
21
22
|
* ## Scope chain (high → low, inner shadows outer)
|
|
22
23
|
*
|
|
23
24
|
* ```
|
|
24
|
-
* document-local (Langium precomputed) [
|
|
25
|
-
* extension:local [layerLocalExtension, per
|
|
25
|
+
* document-local (Langium precomputed) [getScope, CACHED per build in localScope]
|
|
26
|
+
* extension:local [layerLocalExtension, CACHED per descriptions]
|
|
26
27
|
* own-project → dependency → universal-index [createGlobalScope default, CACHED per ${project}::${refType}]
|
|
27
|
-
* extension:universal [layerUniversalExtension, per
|
|
28
|
+
* extension:universal [layerUniversalExtension, CACHED per descriptions, outermost]
|
|
28
29
|
* ```
|
|
29
30
|
*
|
|
30
|
-
* Implementation:
|
|
31
|
-
* whatever `getGlobalScope` returns. The framework owns
|
|
32
|
-
* and uses it to assemble everything *below* document-local,
|
|
33
|
-
* adopter-overridable {@link createGlobalScope} in the middle.
|
|
31
|
+
* Implementation: {@link getScope} layers document-local on top of
|
|
32
|
+
* whatever `getGlobalScope` returns, as Langium's does. The framework owns
|
|
33
|
+
* `getGlobalScope` and uses it to assemble everything *below* document-local,
|
|
34
|
+
* with the adopter-overridable {@link createGlobalScope} in the middle.
|
|
34
35
|
*
|
|
35
36
|
* ## Adopter override surface
|
|
36
37
|
*
|
|
@@ -50,7 +51,8 @@ import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
|
50
51
|
* - **{@link createScopeForNodes}** — inherited from Langium and re-keyed by
|
|
51
52
|
* the framework to bare own-names, so it is the helper a `getScope`
|
|
52
53
|
* override uses to resolve a dotted member reference against a container
|
|
53
|
-
* the reference chain cannot reach.
|
|
54
|
+
* the reference chain cannot reach. Override {@link createNodeScope} to
|
|
55
|
+
* change the scope it builds.
|
|
54
56
|
*
|
|
55
57
|
* **Do NOT override `getGlobalScope` itself** — that is the framework's
|
|
56
58
|
* extension-assembly seam. Overriding it would hide the scope-extension
|
|
@@ -80,6 +82,24 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
80
82
|
* the workspace-global `DocumentBuilder.onUpdate`.
|
|
81
83
|
*/
|
|
82
84
|
scopeCache;
|
|
85
|
+
/**
|
|
86
|
+
* Each container's local scope per reference type, keyed by the local
|
|
87
|
+
* symbols it was built from. A build replaces a document's local symbols
|
|
88
|
+
* when it recomputes them, so a rebuilt document never reads a stale entry.
|
|
89
|
+
*/
|
|
90
|
+
localScopes = new WeakMap();
|
|
91
|
+
/**
|
|
92
|
+
* {@link createScopeForNodes}' scope per list of nodes, keyed by the local
|
|
93
|
+
* symbols of the document the nodes belong to, which a rebuild of that
|
|
94
|
+
* document replaces.
|
|
95
|
+
*/
|
|
96
|
+
nodeScopes = new WeakMap();
|
|
97
|
+
/**
|
|
98
|
+
* The scope of each scope extension's descriptions of one tier, keyed by
|
|
99
|
+
* the array: an extension with a cache key answers every reference of that
|
|
100
|
+
* key with the same one.
|
|
101
|
+
*/
|
|
102
|
+
extensionScopes = new WeakMap();
|
|
83
103
|
tracer;
|
|
84
104
|
constructor(services, options = {}) {
|
|
85
105
|
super(services);
|
|
@@ -91,19 +111,93 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
91
111
|
this.scopeCache = new WorkspaceCache(services.shared);
|
|
92
112
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'ScopeProvider').trace('instantiated');
|
|
93
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Drop every cached scope — the framework's project-tier chain and the
|
|
116
|
+
* inherited global scope it is filtered from.
|
|
117
|
+
*
|
|
118
|
+
* **Called from outside the class**, by the build pipeline once the batch is
|
|
119
|
+
* re-indexed. The caches' own eviction does not cover this:
|
|
120
|
+
* `DocumentBuilder.onUpdate` fires after the build has taken every changed
|
|
121
|
+
* document's symbols out of the index and before it puts them back, so a
|
|
122
|
+
* scope built in that gap denies those symbols exist and every document the
|
|
123
|
+
* same build links afterwards resolves against it.
|
|
124
|
+
*
|
|
125
|
+
* Both go together because the second is derived from the first: clearing
|
|
126
|
+
* only {@link scopeCache} refills it from a stale `globalScopeCache`, and
|
|
127
|
+
* clearing only `globalScopeCache` leaves the filtered copy standing.
|
|
128
|
+
*/
|
|
129
|
+
clearScopeCaches() {
|
|
130
|
+
this.scopeCache.clear();
|
|
131
|
+
this.globalScopeCache.clear();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Langium's, with each container's local scope built once per build through
|
|
135
|
+
* {@link localScope} rather than once per reference. Linking a document then
|
|
136
|
+
* costs its references plus its declarations, not their product.
|
|
137
|
+
*/
|
|
138
|
+
getScope(context) {
|
|
139
|
+
const referenceType = this.reflection.getReferenceType(context);
|
|
140
|
+
const localSymbols = AstUtils.getDocument(context.container).localSymbols;
|
|
141
|
+
let result = this.getGlobalScope(referenceType, context);
|
|
142
|
+
if (localSymbols === undefined) {
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
const containers = [];
|
|
146
|
+
for (let container = context.container; container; container = container.$container) {
|
|
147
|
+
if (localSymbols.has(container)) {
|
|
148
|
+
containers.push(container);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Outermost first, so the innermost container's symbols shadow the rest.
|
|
152
|
+
for (let i = containers.length - 1; i >= 0; i--) {
|
|
153
|
+
result = new FallbackScope(this.localScope(localSymbols, containers[i], referenceType), result);
|
|
154
|
+
}
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* The symbols `container` declares that a `referenceType` reference can
|
|
159
|
+
* reach, through {@link createScope}, built once per `localSymbols`.
|
|
160
|
+
*/
|
|
161
|
+
localScope(localSymbols, container, referenceType) {
|
|
162
|
+
let byContainer = this.localScopes.get(localSymbols);
|
|
163
|
+
if (byContainer === undefined) {
|
|
164
|
+
byContainer = new Map();
|
|
165
|
+
this.localScopes.set(localSymbols, byContainer);
|
|
166
|
+
}
|
|
167
|
+
let byType = byContainer.get(container);
|
|
168
|
+
if (byType === undefined) {
|
|
169
|
+
byType = new Map();
|
|
170
|
+
byContainer.set(container, byType);
|
|
171
|
+
}
|
|
172
|
+
let scope = byType.get(referenceType);
|
|
173
|
+
if (scope === undefined) {
|
|
174
|
+
scope = this.createScope(localSymbols.getStream(container).filter(description => this.reflection.isSubtype(description.type, referenceType)));
|
|
175
|
+
byType.set(referenceType, scope);
|
|
176
|
+
}
|
|
177
|
+
return scope;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Keyed by name, where Langium's walks every element on each lookup. Every
|
|
181
|
+
* description of a name is kept and the first answers, as in Langium's;
|
|
182
|
+
* `getAllElements` lists them in order, but with a description following
|
|
183
|
+
* the first of its name.
|
|
184
|
+
*/
|
|
185
|
+
createScope(elements, outerScope, options) {
|
|
186
|
+
return new MultiMapScope(elements, outerScope, options);
|
|
187
|
+
}
|
|
94
188
|
/**
|
|
95
189
|
* Framework-owned assembly seam. **Adopters do NOT override this** —
|
|
96
190
|
* override {@link createGlobalScope} instead. This method layers the
|
|
97
191
|
* scope-extension tiers around the adopter-overridable global scope.
|
|
98
192
|
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* class.
|
|
193
|
+
* {@link getScope} then layers document-local on top of this result,
|
|
194
|
+
* yielding the full chain documented on the class.
|
|
102
195
|
*/
|
|
103
196
|
getGlobalScope(referenceType, context) {
|
|
104
197
|
const projectChain = this.createGlobalScope(referenceType, context);
|
|
105
|
-
const
|
|
106
|
-
|
|
198
|
+
const extensions = this.scopeExtensionService.getDescriptions(referenceType, context.container);
|
|
199
|
+
const withUniversal = this.layerUniversalExtension(extensions, projectChain, referenceType, context);
|
|
200
|
+
return this.layerLocalExtension(extensions, withUniversal, referenceType, context);
|
|
107
201
|
}
|
|
108
202
|
/**
|
|
109
203
|
* The SINGLE adopter-overridable level of the project/global scope.
|
|
@@ -136,21 +230,48 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
136
230
|
return this.getProjectScope(sourceUri, langiumGlobal, referenceType);
|
|
137
231
|
}
|
|
138
232
|
/**
|
|
139
|
-
* Layer scope
|
|
140
|
-
*
|
|
141
|
-
*
|
|
233
|
+
* Layer each scope extension's `local`-tier descriptions on top of `inner`,
|
|
234
|
+
* an earlier extension's above a later one's, through {@link extensionScope}.
|
|
235
|
+
* Returns `inner` unchanged when there are none.
|
|
236
|
+
*/
|
|
237
|
+
layerLocalExtension(extensions, inner, _referenceType, _context) {
|
|
238
|
+
return (this.chainExtensionScopes(extensions.map(extension => extension.local), inner) ?? inner);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Layer each scope extension's `universal`-tier descriptions below `inner`,
|
|
242
|
+
* which shadows them, an earlier extension's above a later one's, through
|
|
243
|
+
* {@link extensionScope}. Returns `inner` unchanged when there are none.
|
|
142
244
|
*/
|
|
143
|
-
|
|
144
|
-
|
|
245
|
+
layerUniversalExtension(extensions, inner, _referenceType, _context) {
|
|
246
|
+
const below = this.chainExtensionScopes(extensions.map(extension => extension.universal));
|
|
247
|
+
return below ? new FallbackScope(inner, below) : inner;
|
|
145
248
|
}
|
|
146
249
|
/**
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* `inner` unchanged when no extension contributes for the reference
|
|
150
|
-
* type.
|
|
250
|
+
* Chain the scope of each non-empty array above `outer`, an earlier array's
|
|
251
|
+
* above a later one's; `undefined` when there is neither.
|
|
151
252
|
*/
|
|
152
|
-
|
|
153
|
-
|
|
253
|
+
chainExtensionScopes(tiers, outer) {
|
|
254
|
+
let result = outer;
|
|
255
|
+
for (let i = tiers.length - 1; i >= 0; i--) {
|
|
256
|
+
if (tiers[i].length > 0) {
|
|
257
|
+
const scope = this.extensionScope(tiers[i]);
|
|
258
|
+
result = result ? new FallbackScope(scope, result) : scope;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* The scope of one extension's descriptions of one tier, through
|
|
265
|
+
* {@link createScope}, built once per array and shared by every reference
|
|
266
|
+
* it answers, so an override of `createScope` sees no reference context.
|
|
267
|
+
*/
|
|
268
|
+
extensionScope(descriptions) {
|
|
269
|
+
let scope = this.extensionScopes.get(descriptions);
|
|
270
|
+
if (scope === undefined) {
|
|
271
|
+
scope = this.createScope(descriptions);
|
|
272
|
+
this.extensionScopes.set(descriptions, scope);
|
|
273
|
+
}
|
|
274
|
+
return scope;
|
|
154
275
|
}
|
|
155
276
|
/**
|
|
156
277
|
* Project-tier scope filter. Given a source URI and a global scope,
|
|
@@ -189,7 +310,7 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
189
310
|
* closure).
|
|
190
311
|
*
|
|
191
312
|
* Contrast {@link getGlobalScope}, which applies the framework's
|
|
192
|
-
* tier filter to this set, and
|
|
313
|
+
* tier filter to this set, and {@link getScope}, which
|
|
193
314
|
* additionally merges in the local scope.
|
|
194
315
|
*/
|
|
195
316
|
getAllElementsGlobalScope(referenceType, context) {
|
|
@@ -244,11 +365,11 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
244
365
|
* Includes own-project `'public'`-tier descriptions when
|
|
245
366
|
* {@link HydraniumScopeProviderOptions.includeOwnProjectPublic} is set
|
|
246
367
|
* (routed to the own-project bucket by {@link bucketFor}). Returns a
|
|
247
|
-
* {@link
|
|
368
|
+
* {@link MultiMapScope} (not {@link MapScope}) so same-name siblings are
|
|
248
369
|
* preserved rather than collapsed.
|
|
249
370
|
*/
|
|
250
371
|
createOwnProjectScope(context) {
|
|
251
|
-
return new
|
|
372
|
+
return new MultiMapScope(context.ownProjectEntries);
|
|
252
373
|
}
|
|
253
374
|
/**
|
|
254
375
|
* Dependency-projects sub-scope — `'public'`-tier descriptions whose
|
|
@@ -256,7 +377,7 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
256
377
|
* (own-project canonical filter applied by {@link bucketFor}).
|
|
257
378
|
*/
|
|
258
379
|
createDependencyScope(context) {
|
|
259
|
-
return new
|
|
380
|
+
return new MultiMapScope(context.dependencyEntries);
|
|
260
381
|
}
|
|
261
382
|
/**
|
|
262
383
|
* Universal sub-scope — descriptions with no project association,
|
|
@@ -266,13 +387,13 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
266
387
|
return new MapScope(context.universalEntries);
|
|
267
388
|
}
|
|
268
389
|
/**
|
|
269
|
-
* Chain three tier sub-scopes inner-first
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
*
|
|
390
|
+
* Chain three tier sub-scopes inner-first through {@link FallbackScope},
|
|
391
|
+
* which consults an outer tier only when the inner one has no match, so a
|
|
392
|
+
* more specific tier shadows a less specific one of the same name, and each
|
|
393
|
+
* tier keeps its own lookup.
|
|
273
394
|
*/
|
|
274
395
|
chainScopes(ownScope, dependencyScope, universalScope) {
|
|
275
|
-
return new
|
|
396
|
+
return new FallbackScope(ownScope, new FallbackScope(dependencyScope, universalScope));
|
|
276
397
|
}
|
|
277
398
|
/**
|
|
278
399
|
* Classify a description into one of three sub-scope buckets, or
|
|
@@ -332,9 +453,50 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
332
453
|
return this.services.shared.workspace.ProjectManager.getProject(description.documentUri)?.id;
|
|
333
454
|
}
|
|
334
455
|
/**
|
|
456
|
+
* Langium's, with the scope cached: a member scope is asked for once per
|
|
457
|
+
* reference, and building it each time makes linking cost references times
|
|
458
|
+
* members.
|
|
459
|
+
*
|
|
460
|
+
* - Cached: the scope for a list of a built document's nodes, passed with
|
|
461
|
+
* no `outerScope` or `options`, built once through {@link createNodeScope}.
|
|
462
|
+
* - Dropped: when that document's local symbols are replaced; a build that
|
|
463
|
+
* leaves its nodes in place keeps it.
|
|
464
|
+
* - Any other list gets a scope per call.
|
|
465
|
+
*
|
|
466
|
+
* Override {@link createNodeScope} to change the scope; an override of this
|
|
467
|
+
* method keeps the cache only by calling `super`. The list must hold nodes
|
|
468
|
+
* of one document, which it is keyed by; a list changed in place between
|
|
469
|
+
* builds is answered as it was.
|
|
470
|
+
*/
|
|
471
|
+
createScopeForNodes(elements, outerScope, options) {
|
|
472
|
+
if (!Array.isArray(elements) || elements.length === 0 || outerScope !== undefined || options !== undefined) {
|
|
473
|
+
return this.createNodeScope(elements, outerScope, options);
|
|
474
|
+
}
|
|
475
|
+
const nodes = elements;
|
|
476
|
+
const root = AstUtils.findRootNode(nodes[0]);
|
|
477
|
+
const localSymbols = root.$document?.parseResult.value === root ? root.$document.localSymbols : undefined;
|
|
478
|
+
if (localSymbols === undefined) {
|
|
479
|
+
return this.createNodeScope(nodes);
|
|
480
|
+
}
|
|
481
|
+
let byList = this.nodeScopes.get(localSymbols);
|
|
482
|
+
if (byList === undefined) {
|
|
483
|
+
byList = new WeakMap();
|
|
484
|
+
this.nodeScopes.set(localSymbols, byList);
|
|
485
|
+
}
|
|
486
|
+
let scope = byList.get(nodes);
|
|
487
|
+
if (scope === undefined) {
|
|
488
|
+
scope = this.createNodeScope(nodes);
|
|
489
|
+
byList.set(nodes, scope);
|
|
490
|
+
}
|
|
491
|
+
return scope;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* The scope {@link createScopeForNodes} answers with, keyed by name.
|
|
495
|
+
*
|
|
335
496
|
* Keys the scope by {@link NameProvider.getOwnName} instead of Langium's
|
|
336
|
-
* `getName`. Same correction
|
|
337
|
-
* makes to the
|
|
497
|
+
* `getName`. Same correction
|
|
498
|
+
* `HydraniumScopeComputation.addLocalSymbolByOwnName` makes to the
|
|
499
|
+
* local-symbols pass, for the same reason: `getName` defaults
|
|
338
500
|
* to the project-qualified form here, so the base would key a member scope
|
|
339
501
|
* by the fully qualified `Container.member` while the reference text after
|
|
340
502
|
* the dot is the bare `member` — and nothing reports the mismatch, because
|
|
@@ -344,7 +506,7 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
344
506
|
* reference to a member the container does not have must fail rather than
|
|
345
507
|
* fall through to a same-named member on an unrelated type.
|
|
346
508
|
*/
|
|
347
|
-
|
|
509
|
+
createNodeScope(elements, outerScope, options) {
|
|
348
510
|
const descriptions = stream(elements)
|
|
349
511
|
.map(node => {
|
|
350
512
|
const name = this.nameProvider.getOwnName(node);
|
|
@@ -353,7 +515,7 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
353
515
|
return name ? this.descriptions.createDescription(node, name, AstUtils.getDocument(node)) : undefined;
|
|
354
516
|
})
|
|
355
517
|
.nonNullable();
|
|
356
|
-
return new
|
|
518
|
+
return new MultiMapScope(descriptions, outerScope, options);
|
|
357
519
|
}
|
|
358
520
|
/**
|
|
359
521
|
* Convert a protocol-layer {@link ReferenceContext} into a Langium
|