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