@hydranium/core 1.0.0-next.28 → 1.0.0-next.281
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 +64 -82
- package/lib/documents/ast-document-manager.d.ts +252 -122
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +290 -130
- 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 +49 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +34 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +415 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +849 -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 +218 -0
- package/lib/documents/language-client-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-shadow.js +284 -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 +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts +3 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +60 -22
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts +49 -36
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +91 -45
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +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/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 +10 -3
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +12 -5
- package/lib/langium/diagnostics/logger.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +58 -17
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
- package/lib/langium/diagnostics/server-tracer.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +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 +309 -35
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +511 -75
- 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 +16 -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 +83 -27
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +273 -63
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/positional-key-provider.js.map +1 -1
- package/lib/langium/labeling/label-provider.d.ts.map +1 -1
- package/lib/langium/labeling/label-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +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 +372 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +446 -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 +440 -282
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +542 -446
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +158 -37
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -36
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +27 -6
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +4 -3
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -1
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +22 -0
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +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 +35 -12
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +23 -57
- 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 +61 -24
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +74 -35
- 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 +41 -37
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +57 -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 +4 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +4 -0
- 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 +23 -6
- 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 +84 -35
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +34 -23
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +423 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +906 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +43 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +48 -0
- package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
- package/lib/langium/trivia/index.d.ts +14 -0
- package/lib/langium/trivia/index.d.ts.map +1 -0
- package/lib/langium/trivia/index.js +14 -0
- package/lib/langium/trivia/index.js.map +1 -0
- package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
- package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-contribution.js +10 -0
- package/lib/langium/trivia/trivia-contribution.js.map +1 -0
- package/lib/langium/trivia/trivia-preserver.d.ts +50 -0
- package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-preserver.js +10 -0
- package/lib/langium/trivia/trivia-preserver.js.map +1 -0
- package/lib/langium/trivia/trivia-service.d.ts +70 -0
- package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-service.js +56 -0
- package/lib/langium/trivia/trivia-service.js.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts +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 +280 -9
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +453 -8
- 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 +15 -10
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +7 -5
- 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 +154 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +102 -13
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +56 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +79 -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 +109 -9
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +192 -12
- 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 +31 -2
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +13 -5
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +37 -4
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +49 -4
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +7 -9
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +14 -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 +49 -15
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +81 -18
- 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/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +106 -82
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +182 -102
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +3 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +3 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +18 -12
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +22 -13
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +4 -1
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +4 -1
- package/lib/messages/index.js.map +1 -1
- package/lib/messages/renderer.d.ts +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/event-loop-monitor.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 +1 -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-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 +60 -9
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +162 -52
- 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 +20 -4
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +8 -7
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/stdio-launcher.d.ts +10 -10
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +17 -9
- package/lib/node/stdio-launcher.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 +16 -4
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js +18 -3
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/index.d.ts +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 +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +72 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +42 -10
- 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 +115 -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 +12 -4
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +45 -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 +35 -8
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +39 -6
- 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 +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +6 -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 +19 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +61 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +29 -53
- package/src/documents/ast-document-manager.ts +463 -231
- 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 +68 -0
- package/src/documents/hydranium-text-documents.ts +968 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +452 -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 +8 -0
- package/src/langium/ast-extension/ast-extension-service.ts +3 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +95 -52
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +1 -1
- package/src/langium/build-phase-pass/build-phase-pass.ts +1 -1
- 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/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +12 -5
- package/src/langium/diagnostics/lsp-logger.ts +61 -16
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +616 -73
- package/src/langium/integration-services.ts +59 -28
- package/src/langium/integrity/integrity-rule.ts +16 -8
- package/src/langium/integrity/integrity-service.ts +296 -69
- package/src/langium/keys/containment.ts +87 -0
- package/src/langium/keys/index.ts +1 -0
- package/src/langium/keys/name-based-key-provider.ts +4 -0
- package/src/langium/language-module.ts +49 -8
- package/src/langium/model-service/client-session.ts +702 -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 +835 -475
- package/src/langium/module.ts +212 -67
- package/src/langium/naming/name-provider.ts +29 -7
- package/src/langium/naming/name-separator-validation.ts +25 -3
- 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 +50 -16
- 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 +89 -38
- 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 +74 -59
- 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 +4 -0
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +26 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +102 -45
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +55 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +54 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +528 -13
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +15 -10
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +234 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +117 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +221 -16
- 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 +43 -5
- package/src/langium/workspace/langium-documents.ts +63 -5
- package/src/langium/workspace/persistent-file-system-provider.ts +15 -14
- package/src/langium/workspace/self-save-registry.ts +118 -0
- package/src/langium/workspace/virtual-document.ts +100 -19
- package/src/langium/workspace/write-lock-scope.ts +27 -12
- package/src/launcher/integrated-server.ts +3 -1
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
- package/src/lsp/connection-features.ts +67 -0
- package/src/lsp/diagnostics-connection.ts +56 -0
- package/src/lsp/hydranium-document-update-handler.ts +227 -111
- package/src/lsp/index.ts +3 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +23 -15
- package/src/messages/index.ts +13 -1
- package/src/messages/renderer.ts +212 -0
- package/src/node/event-loop-monitor.ts +2 -1
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -1
- package/src/node/latency-from-env.ts +1 -1
- 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 +178 -56
- 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 +27 -11
- package/src/node/stdio-launcher.ts +22 -14
- package/src/testing/document-uri-policy-conformance.ts +1 -1
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/index.ts +2 -1
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +125 -31
- package/src/testing/make-test-tracer.ts +26 -0
- package/src/testing/node/applied-edit-capture.ts +139 -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 +74 -117
- 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 +63 -11
- 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 +12 -1
- package/src/testing/run-update-pipeline.ts +6 -5
- package/src/testing/stub-ast-document-manager.ts +47 -128
- package/src/testing/stub-document-builder.ts +133 -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 +67 -15
- package/src/util/environment.ts +9 -1
- 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,7 +7,7 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
|
-
import { asMutable, type Clock, Debouncer, Format, type Tracer } from '@hydranium/protocol';
|
|
10
|
+
import { asMutable, type Clock, Debouncer, Format, type Tracer, UNRECORDED_VERSION } from '@hydranium/protocol';
|
|
11
11
|
import {
|
|
12
12
|
type AstNode,
|
|
13
13
|
AstUtils,
|
|
@@ -24,9 +24,13 @@ import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
|
24
24
|
/**
|
|
25
25
|
* Default priority of the CST-residency pass. Deliberately very high so it runs
|
|
26
26
|
* *last* among `Validated` build-phase passes (the registry iterates priority
|
|
27
|
-
* ascending)
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* ascending).
|
|
28
|
+
*
|
|
29
|
+
* The ordering is defensive, not load-bearing: the pass only arms or cancels an
|
|
30
|
+
* idle timer, so every pass at `Validated` reads a resident CST whichever order
|
|
31
|
+
* they run in, and lowering it changes nothing observable while that holds. It
|
|
32
|
+
* becomes load-bearing the moment the shed stops being deferred — a pass that
|
|
33
|
+
* frees the CST synchronously has to run after every reader of it.
|
|
30
34
|
*/
|
|
31
35
|
export const CST_RESIDENCY_PASS_PRIORITY = 1_000_000;
|
|
32
36
|
|
|
@@ -41,8 +45,11 @@ export const CST_RESIDENCY_PASS_PRIORITY = 1_000_000;
|
|
|
41
45
|
* "off" toggle.
|
|
42
46
|
* - `{ kind: 'shed-closed-when-idle', idleMs }`: shed a closed document's CST
|
|
43
47
|
* once it has been idle (not in any build) for `idleMs`, keeping the AST
|
|
44
|
-
* resident. Open documents are always kept.
|
|
45
|
-
* document
|
|
48
|
+
* resident. Open documents are always kept. The timer starts when a build
|
|
49
|
+
* includes the document, so `idleMs: 0` sheds a closed document on the tick
|
|
50
|
+
* after each such build. A shed document that re-enters a build is re-parsed
|
|
51
|
+
* in full, so a window shorter than the gap between a document's builds
|
|
52
|
+
* re-parses a closed document on every build it rides in.
|
|
46
53
|
*/
|
|
47
54
|
export type CstResidencyStrategy = { readonly kind: 'always-keep' } | { readonly kind: 'shed-closed-when-idle'; readonly idleMs: number };
|
|
48
55
|
|
|
@@ -181,8 +188,10 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
181
188
|
}
|
|
182
189
|
|
|
183
190
|
/**
|
|
184
|
-
*
|
|
185
|
-
*
|
|
191
|
+
* Keeps a document's CST available to the readers that need one, shedding it
|
|
192
|
+
* for documents that have gone idle and re-grafting on demand.
|
|
193
|
+
*
|
|
194
|
+
* Each build refreshes
|
|
186
195
|
* the idle window of the documents in its batch; when a closed, sheddable
|
|
187
196
|
* document's window elapses, every AST node's `$cstNode` and every reference's
|
|
188
197
|
* `$refNode` are nulled, and the CST root, `Range`s and `Position`s become
|
|
@@ -227,7 +236,23 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
227
236
|
* `NameProvider.getNameNode` chokepoint, the comment provider, and
|
|
228
237
|
* `HydraniumLangiumDocuments.getOrCreateDocument`.
|
|
229
238
|
*/
|
|
230
|
-
export
|
|
239
|
+
export interface CstResidencyService {
|
|
240
|
+
/**
|
|
241
|
+
* Ensure `document` has a CST, re-parsing its retained text if it was shed.
|
|
242
|
+
* A resident document is left exactly as it is, so this is safe to call on
|
|
243
|
+
* a hot path and safe to call twice.
|
|
244
|
+
*/
|
|
245
|
+
rehydrate(document: LangiumDocument): void;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Node-level convenience over {@link rehydrate}, cheap enough for an
|
|
249
|
+
* unconditional call: a node whose `$cstNode` is already set returns
|
|
250
|
+
* without resolving its document.
|
|
251
|
+
*/
|
|
252
|
+
rehydrateNode(node: AstNode): void;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export class DefaultCstResidencyService implements CstResidencyService {
|
|
231
256
|
protected readonly strategy: CstResidencyStrategy;
|
|
232
257
|
/** Bytes-per-node for the optional reclaim estimate in traces; `0` disables it. */
|
|
233
258
|
protected readonly estimatedBytesPerShedNode: number;
|
|
@@ -277,8 +302,8 @@ export class CstResidencyService {
|
|
|
277
302
|
* until navigation latency on shed files is actually observed to hurt. This
|
|
278
303
|
* method is where that hook goes.
|
|
279
304
|
*/
|
|
280
|
-
rehydrate(document: LangiumDocument):
|
|
281
|
-
|
|
305
|
+
rehydrate(document: LangiumDocument): void {
|
|
306
|
+
rehydrateCst(document, this.services.workspace.LangiumDocumentFactory);
|
|
282
307
|
}
|
|
283
308
|
|
|
284
309
|
/**
|
|
@@ -287,11 +312,11 @@ export class CstResidencyService {
|
|
|
287
312
|
* `true` without even resolving the document, so hot read paths
|
|
288
313
|
* (`getNameNode`, comment lookup) call this unconditionally.
|
|
289
314
|
*/
|
|
290
|
-
rehydrateNode(node: AstNode):
|
|
315
|
+
rehydrateNode(node: AstNode): void {
|
|
291
316
|
if (node.$cstNode !== undefined) {
|
|
292
|
-
return
|
|
317
|
+
return;
|
|
293
318
|
}
|
|
294
|
-
|
|
319
|
+
this.rehydrate(AstUtils.getDocument(node));
|
|
295
320
|
}
|
|
296
321
|
|
|
297
322
|
/**
|
|
@@ -353,8 +378,8 @@ export class CstResidencyService {
|
|
|
353
378
|
this.shedTotal += this.shed(document);
|
|
354
379
|
}
|
|
355
380
|
|
|
356
|
-
/** Cancel
|
|
357
|
-
|
|
381
|
+
/** Cancel every armed shed, so a document that has gone idle keeps its CST. */
|
|
382
|
+
cancelPendingShed(): void {
|
|
358
383
|
for (const timer of this.idleTimers.values()) {
|
|
359
384
|
timer.dispose();
|
|
360
385
|
}
|
|
@@ -383,6 +408,15 @@ export class CstResidencyService {
|
|
|
383
408
|
if (root === undefined || root.$cstNode === undefined) {
|
|
384
409
|
return 0;
|
|
385
410
|
}
|
|
411
|
+
// Readers of the parsed text, the `'text-diagnostics'` fingerprint among
|
|
412
|
+
// them, otherwise see none once the CST is gone. Recorded in the ledger
|
|
413
|
+
// directly: no root is produced, and reconciling it with the store would
|
|
414
|
+
// step a closed document's sequence for a root behind its text.
|
|
415
|
+
const ledger = this.services.workspace.ModelLedger;
|
|
416
|
+
const version = ledger.versionOf(root);
|
|
417
|
+
if (version !== UNRECORDED_VERSION) {
|
|
418
|
+
ledger.record(root, version, ledger.textOf(root));
|
|
419
|
+
}
|
|
386
420
|
let cleared = 0;
|
|
387
421
|
for (const node of AstUtils.streamAst(root)) {
|
|
388
422
|
if (node.$cstNode) {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
|
|
10
|
+
import { type AstNodeDescription, type Scope, type Stream } from '@hydranium/langium';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A scope that answers from `primary`, and from `fallback` only for a name
|
|
14
|
+
* `primary` does not hold.
|
|
15
|
+
*
|
|
16
|
+
* Langium fixes a scope's outer scope when the scope is built, so a tier cannot
|
|
17
|
+
* be put below a scope that already exists, such as a cached one. Re-wrapping
|
|
18
|
+
* that scope's elements instead would turn its keyed lookup into a scan of
|
|
19
|
+
* every element; chaining keeps each scope's own lookup.
|
|
20
|
+
*/
|
|
21
|
+
export class FallbackScope implements Scope {
|
|
22
|
+
constructor(
|
|
23
|
+
protected readonly primary: Scope,
|
|
24
|
+
protected readonly fallback: Scope
|
|
25
|
+
) {}
|
|
26
|
+
|
|
27
|
+
getElement(name: string): AstNodeDescription | undefined {
|
|
28
|
+
return this.primary.getElement(name) ?? this.fallback.getElement(name);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
getElements(name: string): Stream<AstNodeDescription> {
|
|
32
|
+
return this.primary.getElements(name).concat(this.fallback.getElements(name));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getAllElements(): Stream<AstNodeDescription> {
|
|
36
|
+
return this.primary.getAllElements().concat(this.fallback.getAllElements());
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -10,15 +10,13 @@
|
|
|
10
10
|
import {
|
|
11
11
|
type AstNode,
|
|
12
12
|
type AstNodeDescription,
|
|
13
|
-
AstUtils,
|
|
14
13
|
DefaultScopeComputation,
|
|
15
|
-
interruptAndCheck,
|
|
16
14
|
type LangiumDocument,
|
|
17
15
|
type LocalSymbols,
|
|
18
|
-
MultiMap,
|
|
16
|
+
type MultiMap,
|
|
19
17
|
UriUtils
|
|
20
18
|
} from '@hydranium/langium';
|
|
21
|
-
import { Logger, type Tracer } from '@hydranium/protocol';
|
|
19
|
+
import { Logger, type ProfileSession, type Tracer } from '@hydranium/protocol';
|
|
22
20
|
import type { CancellationToken } from 'vscode-languageserver-protocol';
|
|
23
21
|
import type { LogNameOptions } from '../diagnostics/logger.js';
|
|
24
22
|
import type { HydraniumLanguageServices } from '../language-module.js';
|
|
@@ -35,8 +33,9 @@ import { type HydraniumAstNodeDescriptionProvider } from './ast-node-description
|
|
|
35
33
|
* `NameProvider.getName` defaults to the workspace-unique
|
|
36
34
|
* `getProjectQualifiedName`. Routing the local-symbols pass through
|
|
37
35
|
* `getName` would put qualified names in the per-document symbol map
|
|
38
|
-
* and break within-document bare-name references.
|
|
39
|
-
* bypasses the default and calls
|
|
36
|
+
* and break within-document bare-name references.
|
|
37
|
+
* {@link addLocalSymbolByOwnName} bypasses the default and calls
|
|
38
|
+
* {@link NameProvider.getOwnName}
|
|
40
39
|
* directly so local symbols stay keyed by bare names regardless of
|
|
41
40
|
* what `getName` returns.
|
|
42
41
|
*
|
|
@@ -55,11 +54,15 @@ import { type HydraniumAstNodeDescriptionProvider } from './ast-node-description
|
|
|
55
54
|
*
|
|
56
55
|
* Performance: piggybacks on the existing single AST walk Langium does
|
|
57
56
|
* for local-symbol collection — the AST-extension dispatch and the
|
|
58
|
-
* own-name read both happen in `
|
|
57
|
+
* own-name read both happen in `addLocalSymbolByOwnName`, no extra traversal.
|
|
59
58
|
* The exported-symbol pass reads both name tiers once per node, no
|
|
60
59
|
* duplicated walks.
|
|
61
60
|
*/
|
|
62
61
|
export class HydraniumScopeComputation extends DefaultScopeComputation {
|
|
62
|
+
/** The framework's name provider, which its language module binds to the slot. */
|
|
63
|
+
declare protected readonly nameProvider: NameProvider;
|
|
64
|
+
/** The framework's description provider, which its language module binds to the slot. */
|
|
65
|
+
declare protected readonly descriptions: HydraniumAstNodeDescriptionProvider;
|
|
63
66
|
protected readonly tracer: Tracer;
|
|
64
67
|
|
|
65
68
|
constructor(
|
|
@@ -70,38 +73,30 @@ export class HydraniumScopeComputation extends DefaultScopeComputation {
|
|
|
70
73
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'ScopeComputation').trace('instantiated');
|
|
71
74
|
}
|
|
72
75
|
|
|
76
|
+
/** The session {@link addLocalSymbol} records into while a `debug`-level walk runs. */
|
|
77
|
+
protected localSymbolsProfile: ProfileSession | undefined;
|
|
78
|
+
|
|
73
79
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* cost). At `debug` it reproduces the same walk under a `ProfileSession`
|
|
79
|
-
* so each `$type`'s contribution to the heaviest scope-computation pass is
|
|
80
|
-
* aggregated and reported line-based — the walk is gated rather than the
|
|
81
|
-
* per-node `scope`, since `ProfileSession.scope` is not itself level-gated.
|
|
82
|
-
*
|
|
83
|
-
* The instance carries no profiling state: the session is local to the call,
|
|
84
|
-
* which is safe because Langium's document builder runs `collectLocalSymbols`
|
|
85
|
-
* strictly one document at a time (`runCancelable`'s sequential `for…await`).
|
|
80
|
+
* Langium's local-symbol walk, with per-`$type` self-time profiling at
|
|
81
|
+
* `debug`. The walk is Langium's at every level: a copy run only at `debug`
|
|
82
|
+
* would drift from the one every other level runs. Overlapping builds share
|
|
83
|
+
* the session and blur each other's report.
|
|
86
84
|
*/
|
|
87
85
|
override async collectLocalSymbols(document: LangiumDocument, cancelToken?: CancellationToken): Promise<LocalSymbols> {
|
|
88
86
|
if (!Logger.isLevelEnabled('debug')) {
|
|
89
87
|
return super.collectLocalSymbols(document, cancelToken);
|
|
90
88
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
if (cancelToken) {
|
|
100
|
-
await interruptAndCheck(cancelToken);
|
|
89
|
+
const profile = this.tracer.profile(`scope-local ${UriUtils.basename(document.uri)}`);
|
|
90
|
+
this.localSymbolsProfile = profile;
|
|
91
|
+
let symbols: LocalSymbols;
|
|
92
|
+
try {
|
|
93
|
+
symbols = await super.collectLocalSymbols(document, cancelToken);
|
|
94
|
+
} finally {
|
|
95
|
+
if (this.localSymbolsProfile === profile) {
|
|
96
|
+
this.localSymbolsProfile = undefined;
|
|
101
97
|
}
|
|
102
|
-
session.scope(node.$type, () => this.addLocalSymbol(node, document, symbols));
|
|
103
98
|
}
|
|
104
|
-
|
|
99
|
+
profile.report('debug');
|
|
105
100
|
return symbols;
|
|
106
101
|
}
|
|
107
102
|
|
|
@@ -164,17 +159,15 @@ export class HydraniumScopeComputation extends DefaultScopeComputation {
|
|
|
164
159
|
* workspace-visible rather than being filtered out everywhere.
|
|
165
160
|
*/
|
|
166
161
|
protected exportProject(node: AstNode, exports: AstNodeDescription[], document: LangiumDocument): void {
|
|
167
|
-
const
|
|
168
|
-
const documentName = nameProvider.getDocumentQualifiedName(node);
|
|
162
|
+
const documentName = this.nameProvider.getDocumentQualifiedName(node);
|
|
169
163
|
if (!documentName) {
|
|
170
164
|
return;
|
|
171
165
|
}
|
|
172
166
|
const projectId = this.getProjectIdForDocument(document);
|
|
173
|
-
const descriptions = this.descriptions as HydraniumAstNodeDescriptionProvider;
|
|
174
167
|
exports.push(
|
|
175
168
|
projectId !== undefined
|
|
176
|
-
? descriptions.createProject({ node, name: documentName, document, projectId })
|
|
177
|
-
: descriptions.createUniversal({ node, name: documentName, document })
|
|
169
|
+
? this.descriptions.createProject({ node, name: documentName, document, projectId })
|
|
170
|
+
: this.descriptions.createUniversal({ node, name: documentName, document })
|
|
178
171
|
);
|
|
179
172
|
}
|
|
180
173
|
|
|
@@ -191,16 +184,14 @@ export class HydraniumScopeComputation extends DefaultScopeComputation {
|
|
|
191
184
|
* document-qualified name.
|
|
192
185
|
*/
|
|
193
186
|
protected exportPublic(node: AstNode, exports: AstNodeDescription[], document: LangiumDocument): void {
|
|
194
|
-
const nameProvider = this.nameProvider as NameProvider;
|
|
195
187
|
const projectId = this.getProjectIdForDocument(document);
|
|
196
188
|
if (projectId === undefined) {
|
|
197
189
|
return;
|
|
198
190
|
}
|
|
199
|
-
const documentName = nameProvider.getDocumentQualifiedName(node);
|
|
200
|
-
const projectName = nameProvider.getProjectQualifiedName(node);
|
|
191
|
+
const documentName = this.nameProvider.getDocumentQualifiedName(node);
|
|
192
|
+
const projectName = this.nameProvider.getProjectQualifiedName(node);
|
|
201
193
|
if (projectName && projectName !== documentName) {
|
|
202
|
-
|
|
203
|
-
exports.push(descriptions.createPublic({ node, name: projectName, document, projectId }));
|
|
194
|
+
exports.push(this.descriptions.createPublic({ node, name: projectName, document, projectId }));
|
|
204
195
|
}
|
|
205
196
|
}
|
|
206
197
|
|
|
@@ -218,6 +209,16 @@ export class HydraniumScopeComputation extends DefaultScopeComputation {
|
|
|
218
209
|
return this.services.shared.workspace.ProjectManager.getProject(document.uri)?.id;
|
|
219
210
|
}
|
|
220
211
|
|
|
212
|
+
/** {@link addLocalSymbolByOwnName}, timed per `$type` while {@link localSymbolsProfile} is set. */
|
|
213
|
+
protected override addLocalSymbol(node: AstNode, document: LangiumDocument, symbols: MultiMap<AstNode, AstNodeDescription>): void {
|
|
214
|
+
const profile = this.localSymbolsProfile;
|
|
215
|
+
if (profile) {
|
|
216
|
+
profile.scope(node.$type, () => this.addLocalSymbolByOwnName(node, document, symbols));
|
|
217
|
+
} else {
|
|
218
|
+
this.addLocalSymbolByOwnName(node, document, symbols);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
221
222
|
/**
|
|
222
223
|
* Bypasses Langium's `super.addLocalSymbol` (which would key the
|
|
223
224
|
* local-symbols map by `nameProvider.getName(node)`, qualified by
|
|
@@ -233,14 +234,14 @@ export class HydraniumScopeComputation extends DefaultScopeComputation {
|
|
|
233
234
|
* extension `compute` callbacks fire after this `addLocalSymbol` pass
|
|
234
235
|
* completes for the whole document.
|
|
235
236
|
*/
|
|
236
|
-
protected
|
|
237
|
+
protected addLocalSymbolByOwnName(node: AstNode, document: LangiumDocument, symbols: MultiMap<AstNode, AstNodeDescription>): void {
|
|
237
238
|
const container = node.$container;
|
|
238
239
|
if (!container) {
|
|
239
240
|
return;
|
|
240
241
|
}
|
|
241
|
-
const name =
|
|
242
|
+
const name = this.nameProvider.getOwnName(node);
|
|
242
243
|
if (name) {
|
|
243
|
-
symbols.add(container,
|
|
244
|
+
symbols.add(container, this.descriptions.createLocal({ node, name, document }));
|
|
244
245
|
}
|
|
245
246
|
}
|
|
246
247
|
}
|
|
@@ -24,7 +24,6 @@ import {
|
|
|
24
24
|
type AstNodeLocator,
|
|
25
25
|
AstUtils,
|
|
26
26
|
DefaultScopeProvider,
|
|
27
|
-
type LangiumDocuments,
|
|
28
27
|
MapScope,
|
|
29
28
|
type ReferenceInfo,
|
|
30
29
|
type Scope,
|
|
@@ -35,11 +34,14 @@ import {
|
|
|
35
34
|
WorkspaceCache,
|
|
36
35
|
stream
|
|
37
36
|
} from '@hydranium/langium';
|
|
37
|
+
import { buildAstNode } from '../ast-extension/ast-node-builder.js';
|
|
38
38
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
39
39
|
import { type HydraniumLanguageServices } from '../language-module.js';
|
|
40
40
|
import { type NameProvider } from '../naming/name-provider.js';
|
|
41
|
+
import { type HydraniumDocumentRegistry } from '../workspace/langium-documents.js';
|
|
42
|
+
import { FallbackScope } from './fallback-scope.js';
|
|
41
43
|
import { type ScopeExtensionService } from './scope-extension-service.js';
|
|
42
|
-
import { isTieredDescription } from './scoped-ast-node-description.js';
|
|
44
|
+
import { type TieredAstNodeDescription, isTieredDescription } from './scoped-ast-node-description.js';
|
|
43
45
|
|
|
44
46
|
/**
|
|
45
47
|
* Construction-time options for {@link HydraniumScopeProvider}. Extends
|
|
@@ -143,7 +145,7 @@ export interface ScopeContext {
|
|
|
143
145
|
* `reference-candidate-provider.ts` module.
|
|
144
146
|
*/
|
|
145
147
|
export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
146
|
-
protected readonly langiumDocuments:
|
|
148
|
+
protected readonly langiumDocuments: HydraniumDocumentRegistry;
|
|
147
149
|
protected readonly astNodeLocator: AstNodeLocator;
|
|
148
150
|
protected readonly scopeExtensionService: ScopeExtensionService;
|
|
149
151
|
protected readonly options: HydraniumScopeProviderOptions;
|
|
@@ -182,6 +184,26 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
182
184
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'ScopeProvider').trace('instantiated');
|
|
183
185
|
}
|
|
184
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Drop every cached scope — the framework's project-tier chain and the
|
|
189
|
+
* inherited global scope it is filtered from.
|
|
190
|
+
*
|
|
191
|
+
* **Called from outside the class**, by the build pipeline once the batch is
|
|
192
|
+
* re-indexed. The caches' own eviction does not cover this:
|
|
193
|
+
* `DocumentBuilder.onUpdate` fires after the build has taken every changed
|
|
194
|
+
* document's symbols out of the index and before it puts them back, so a
|
|
195
|
+
* scope built in that gap denies those symbols exist and every document the
|
|
196
|
+
* same build links afterwards resolves against it.
|
|
197
|
+
*
|
|
198
|
+
* Both go together because the second is derived from the first: clearing
|
|
199
|
+
* only {@link scopeCache} refills it from a stale `globalScopeCache`, and
|
|
200
|
+
* clearing only `globalScopeCache` leaves the filtered copy standing.
|
|
201
|
+
*/
|
|
202
|
+
clearScopeCaches(): void {
|
|
203
|
+
this.scopeCache.clear();
|
|
204
|
+
this.globalScopeCache.clear();
|
|
205
|
+
}
|
|
206
|
+
|
|
185
207
|
/**
|
|
186
208
|
* Framework-owned assembly seam. **Adopters do NOT override this** —
|
|
187
209
|
* override {@link createGlobalScope} instead. This method layers the
|
|
@@ -193,8 +215,9 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
193
215
|
*/
|
|
194
216
|
protected override getGlobalScope(referenceType: string, context: ReferenceInfo): Scope {
|
|
195
217
|
const projectChain = this.createGlobalScope(referenceType, context);
|
|
196
|
-
const
|
|
197
|
-
|
|
218
|
+
const extensions = this.scopeExtensionService.getDescriptions(referenceType, context.container);
|
|
219
|
+
const withUniversal = this.layerUniversalExtension(extensions.universal, projectChain, referenceType, context);
|
|
220
|
+
return this.layerLocalExtension(extensions.local, withUniversal, referenceType, context);
|
|
198
221
|
}
|
|
199
222
|
|
|
200
223
|
/**
|
|
@@ -229,22 +252,32 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
229
252
|
}
|
|
230
253
|
|
|
231
254
|
/**
|
|
232
|
-
* Layer scope
|
|
233
|
-
* Returns `inner` unchanged when
|
|
234
|
-
*
|
|
255
|
+
* Layer the scope extensions' `local`-tier `descriptions` on top of
|
|
256
|
+
* `inner`, through {@link createScope}. Returns `inner` unchanged when there
|
|
257
|
+
* are none.
|
|
235
258
|
*/
|
|
236
|
-
protected layerLocalExtension(
|
|
237
|
-
|
|
259
|
+
protected layerLocalExtension(
|
|
260
|
+
descriptions: readonly TieredAstNodeDescription[],
|
|
261
|
+
inner: Scope,
|
|
262
|
+
_referenceType: string,
|
|
263
|
+
_context: ReferenceInfo
|
|
264
|
+
): Scope {
|
|
265
|
+
return descriptions.length === 0 ? inner : this.createScope(descriptions, inner);
|
|
238
266
|
}
|
|
239
267
|
|
|
240
268
|
/**
|
|
241
|
-
* Layer scope
|
|
242
|
-
*
|
|
243
|
-
* `inner`
|
|
244
|
-
*
|
|
269
|
+
* Layer the scope extensions' `universal`-tier `descriptions` below
|
|
270
|
+
* `inner`, which shadows them, through {@link createScope} and a
|
|
271
|
+
* {@link FallbackScope}, so `inner` keeps its own lookup. Returns `inner`
|
|
272
|
+
* unchanged when there are none.
|
|
245
273
|
*/
|
|
246
|
-
protected layerUniversalExtension(
|
|
247
|
-
|
|
274
|
+
protected layerUniversalExtension(
|
|
275
|
+
descriptions: readonly TieredAstNodeDescription[],
|
|
276
|
+
inner: Scope,
|
|
277
|
+
_referenceType: string,
|
|
278
|
+
_context: ReferenceInfo
|
|
279
|
+
): Scope {
|
|
280
|
+
return descriptions.length === 0 ? inner : new FallbackScope(inner, this.createScope(descriptions));
|
|
248
281
|
}
|
|
249
282
|
|
|
250
283
|
/**
|
|
@@ -442,8 +475,9 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
442
475
|
|
|
443
476
|
/**
|
|
444
477
|
* Keys the scope by {@link NameProvider.getOwnName} instead of Langium's
|
|
445
|
-
* `getName`. Same correction
|
|
446
|
-
* makes to the
|
|
478
|
+
* `getName`. Same correction
|
|
479
|
+
* `HydraniumScopeComputation.addLocalSymbolByOwnName` makes to the
|
|
480
|
+
* local-symbols pass, for the same reason: `getName` defaults
|
|
447
481
|
* to the project-qualified form here, so the base would key a member scope
|
|
448
482
|
* by the fully qualified `Container.member` while the reference text after
|
|
449
483
|
* the dot is the bare `member` — and nothing reports the mismatch, because
|
|
@@ -469,12 +503,13 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
469
503
|
* Convert a protocol-layer {@link ReferenceContext} into a Langium
|
|
470
504
|
* {@link ReferenceInfo} the rest of the scope/linking machinery accepts.
|
|
471
505
|
*
|
|
472
|
-
* Walks `syntheticPath` by FABRICATING a
|
|
473
|
-
*
|
|
474
|
-
*
|
|
475
|
-
*
|
|
476
|
-
*
|
|
477
|
-
* the
|
|
506
|
+
* Walks `syntheticPath` by FABRICATING a stub per step, so a scope can be
|
|
507
|
+
* queried for an element that does not exist yet — which is what synthetic
|
|
508
|
+
* paths are for. A stub carries the grammar's declared defaults and nothing
|
|
509
|
+
* else, so its containment lists are present but EMPTY: a caller that needs
|
|
510
|
+
* to read a populated collection off the leaf wants
|
|
511
|
+
* {@link resolveReferenceSource} instead, which walks the same path into the
|
|
512
|
+
* real tree.
|
|
478
513
|
*
|
|
479
514
|
* Throws if the context references an unresolvable source; callers
|
|
480
515
|
* that prefer a soft failure should catch and fall back to
|
|
@@ -486,16 +521,15 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
486
521
|
throw new Error('Invalid reference source');
|
|
487
522
|
}
|
|
488
523
|
for (const step of ctx.syntheticPath ?? []) {
|
|
489
|
-
container = {
|
|
524
|
+
container = buildAstNode(this.services.shared.AstReflection, step.type, {
|
|
490
525
|
$container: container,
|
|
491
526
|
$containerProperty: step.containerProperty,
|
|
492
527
|
// Part of Langium's own container contract, so a stub that omits it
|
|
493
528
|
// is an under-specified node: anything reading position off the
|
|
494
529
|
// chain (a key provider, an adopter scope extension) sees
|
|
495
530
|
// `undefined` where the caller named a slot.
|
|
496
|
-
$containerIndex: step.index
|
|
497
|
-
|
|
498
|
-
};
|
|
531
|
+
$containerIndex: step.index
|
|
532
|
+
});
|
|
499
533
|
}
|
|
500
534
|
return {
|
|
501
535
|
reference: { $refText: '', ref: undefined },
|
|
@@ -586,18 +620,35 @@ export class HydraniumScopeProvider extends DefaultScopeProvider {
|
|
|
586
620
|
}
|
|
587
621
|
|
|
588
622
|
/**
|
|
589
|
-
* Build a transient AST-node stub for a {@link SyntheticSource} request
|
|
590
|
-
*
|
|
591
|
-
*
|
|
592
|
-
*
|
|
593
|
-
*
|
|
623
|
+
* Build a transient AST-node stub for a {@link SyntheticSource} request: a
|
|
624
|
+
* node of the requested type, contained by the document at `source.uri`.
|
|
625
|
+
*
|
|
626
|
+
* **The container is materialised when no document is loaded there**, which
|
|
627
|
+
* is the case the source type exists for — a `SyntheticSource` names a node
|
|
628
|
+
* that does not exist yet, and the create-element flow asks at the FOLDER
|
|
629
|
+
* the file is about to be written into. Abstaining there would answer an
|
|
630
|
+
* empty candidate list, which a client cannot tell from "nothing matches".
|
|
631
|
+
*
|
|
632
|
+
* The stand-in parses under THIS provider's grammar, because a folder URI
|
|
633
|
+
* carries no extension for the routing ladder to end on and this provider is
|
|
634
|
+
* bound per grammar. Reaching for `createEmptyDocument(uri)` without the id
|
|
635
|
+
* instead fails inside the parse, on an empty extension rather than on the
|
|
636
|
+
* URI.
|
|
637
|
+
*
|
|
638
|
+
* The materialised document is unregistered and transient; see
|
|
639
|
+
* `createEmptyDocument`. Overriding is still open to a consumer whose
|
|
640
|
+
* "container" is an inner element rather than the parse root, or one that
|
|
641
|
+
* deliberately declines to answer for an absent document.
|
|
642
|
+
*
|
|
643
|
+
* The stub carries the grammar's declared defaults, so an extension reading a
|
|
644
|
+
* containment list off it sees an empty array rather than `undefined`.
|
|
594
645
|
*/
|
|
595
646
|
protected resolveSyntheticSource(source: SyntheticSource): AstNode | undefined {
|
|
596
|
-
const
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
return
|
|
647
|
+
const uri = UriUtils.toUri(source.uri);
|
|
648
|
+
const document =
|
|
649
|
+
this.langiumDocuments.getDocument(uri) ??
|
|
650
|
+
this.langiumDocuments.createEmptyDocument(uri, this.services.LanguageMetaData.languageId);
|
|
651
|
+
return buildAstNode(this.services.shared.AstReflection, source.type, { $container: document.parseResult.value });
|
|
601
652
|
}
|
|
602
653
|
|
|
603
654
|
/**
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
10
|
export * from './ast-node-description-provider.js';
|
|
11
|
+
export * from './fallback-scope.js';
|
|
11
12
|
export * from './reference-builder.js';
|
|
12
13
|
export * from './reference-candidate-provider.js';
|
|
13
14
|
export * from './hydranium-scope-computation.js';
|
|
@@ -102,9 +102,9 @@ export interface ResolvedCandidate {
|
|
|
102
102
|
export interface ReferenceCandidateProvider {
|
|
103
103
|
/**
|
|
104
104
|
* UI-facing entry point: returns the candidate scope's elements as
|
|
105
|
-
* {@link ReferenceCandidate}s.
|
|
105
|
+
* {@link ReferenceCandidate}s. Accepts what {@link getCandidateScope} does.
|
|
106
106
|
*/
|
|
107
|
-
find(ctx: ReferenceContext): ReferenceCandidate[];
|
|
107
|
+
find(ctx: ReferenceContext | ReferenceInfo): ReferenceCandidate[];
|
|
108
108
|
|
|
109
109
|
/**
|
|
110
110
|
* Build a ranked + deduped scope for candidate selection at the
|
|
@@ -195,14 +195,15 @@ export class DefaultReferenceCandidateProvider implements ReferenceCandidateProv
|
|
|
195
195
|
* and never matches: a self-reference filter silently stops excluding, and
|
|
196
196
|
* the element offers itself as its own target.
|
|
197
197
|
*
|
|
198
|
-
* The mirror of `
|
|
199
|
-
* reasoning: an unroutable target has no better answer than the
|
|
198
|
+
* The mirror of `DefaultReferenceBuilder.nameProviderFor`, and the same
|
|
199
|
+
* fallback reasoning: an unroutable target has no better answer than the
|
|
200
|
+
* source's.
|
|
200
201
|
*/
|
|
201
202
|
protected nameProviderFor(target: AstNode): NameProvider {
|
|
202
203
|
return this.services.shared.ServiceRegistry?.getServicesFor(target)?.references.NameProvider ?? this.nameProvider;
|
|
203
204
|
}
|
|
204
205
|
|
|
205
|
-
find(ctx: ReferenceContext): ReferenceCandidate[] {
|
|
206
|
+
find(ctx: ReferenceContext | ReferenceInfo): ReferenceCandidate[] {
|
|
206
207
|
const scope = this.getCandidateScope(ctx);
|
|
207
208
|
return scope.elementScope
|
|
208
209
|
.getAllElements()
|