@hydranium/core 1.0.0-next.37 → 1.0.0-next.371
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 +340 -39
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +550 -81
- 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 +184 -13
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +336 -16
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +22 -3
- package/lib/langium/project/project-change-event.d.ts.map +1 -1
- package/lib/langium/project/project-manager.d.ts +28 -2
- package/lib/langium/project/project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.d.ts +7 -1
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js +12 -0
- 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 +105 -21
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +186 -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 +110 -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.d.ts.map +1 -1
- package/lib/testing/stub-project-manager.js +10 -0
- 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 +679 -83
- 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 +409 -20
- package/src/langium/project/project-change-event.ts +25 -3
- package/src/langium/project/project-manager.ts +31 -2
- package/src/langium/project/single-project-manager.ts +16 -1
- 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 +214 -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 +155 -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-project-manager.ts +10 -0
- 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,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,
|
|
@@ -45,8 +45,11 @@ export const CST_RESIDENCY_PASS_PRIORITY = 1_000_000;
|
|
|
45
45
|
* "off" toggle.
|
|
46
46
|
* - `{ kind: 'shed-closed-when-idle', idleMs }`: shed a closed document's CST
|
|
47
47
|
* once it has been idle (not in any build) for `idleMs`, keeping the AST
|
|
48
|
-
* resident. Open documents are always kept.
|
|
49
|
-
* 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.
|
|
50
53
|
*/
|
|
51
54
|
export type CstResidencyStrategy = { readonly kind: 'always-keep' } | { readonly kind: 'shed-closed-when-idle'; readonly idleMs: number };
|
|
52
55
|
|
|
@@ -185,12 +188,16 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
185
188
|
}
|
|
186
189
|
|
|
187
190
|
/**
|
|
188
|
-
*
|
|
189
|
-
*
|
|
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
|
|
190
195
|
* the idle window of the documents in its batch; when a closed, sheddable
|
|
191
196
|
* document's window elapses, every AST node's `$cstNode` and every reference's
|
|
192
|
-
* `$refNode` are nulled, and the CST
|
|
193
|
-
*
|
|
197
|
+
* `$refNode` are nulled, and the CST becomes unreachable with the `Range`s
|
|
198
|
+
* and `Position`s only it holds. The reference index's segments, and a
|
|
199
|
+
* description's segments once read, share the CST's `Range` objects, so
|
|
200
|
+
* those stay.
|
|
194
201
|
*
|
|
195
202
|
* **Terminology.** *Residency* is the state axis (is the CST in memory? —
|
|
196
203
|
* `resident` vs `shed`); *shed* is both the act and the policy vocabulary (drop
|
|
@@ -231,10 +238,6 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
231
238
|
* `NameProvider.getNameNode` chokepoint, the comment provider, and
|
|
232
239
|
* `HydraniumLangiumDocuments.getOrCreateDocument`.
|
|
233
240
|
*/
|
|
234
|
-
/**
|
|
235
|
-
* Keeps a document's CST available to the readers that need one, shedding it
|
|
236
|
-
* for documents that have gone idle and re-grafting on demand.
|
|
237
|
-
*/
|
|
238
241
|
export interface CstResidencyService {
|
|
239
242
|
/**
|
|
240
243
|
* Ensure `document` has a CST, re-parsing its retained text if it was shed.
|
|
@@ -246,7 +249,8 @@ export interface CstResidencyService {
|
|
|
246
249
|
/**
|
|
247
250
|
* Node-level convenience over {@link rehydrate}, cheap enough for an
|
|
248
251
|
* unconditional call: a node whose `$cstNode` is already set returns
|
|
249
|
-
* without resolving its document
|
|
252
|
+
* without resolving its document, and a node outside any document, such as
|
|
253
|
+
* a detached synthetic node, has nothing to restore and returns too.
|
|
250
254
|
*/
|
|
251
255
|
rehydrateNode(node: AstNode): void;
|
|
252
256
|
}
|
|
@@ -281,7 +285,7 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
281
285
|
this.langiumDocs = services.workspace.LangiumDocuments;
|
|
282
286
|
services.workspace.BuildPhasePassService.register({
|
|
283
287
|
id: 'framework:cst-residency:shed',
|
|
284
|
-
|
|
288
|
+
phase: DocumentState.Validated,
|
|
285
289
|
priority: options.priority ?? CST_RESIDENCY_PASS_PRIORITY,
|
|
286
290
|
run: documents => this.onBuild(documents)
|
|
287
291
|
});
|
|
@@ -315,7 +319,10 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
315
319
|
if (node.$cstNode !== undefined) {
|
|
316
320
|
return;
|
|
317
321
|
}
|
|
318
|
-
|
|
322
|
+
const document = AstUtils.findRootNode(node).$document;
|
|
323
|
+
if (document) {
|
|
324
|
+
this.rehydrate(document);
|
|
325
|
+
}
|
|
319
326
|
}
|
|
320
327
|
|
|
321
328
|
/**
|
|
@@ -407,6 +414,15 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
407
414
|
if (root === undefined || root.$cstNode === undefined) {
|
|
408
415
|
return 0;
|
|
409
416
|
}
|
|
417
|
+
// Readers of the parsed text, the `'text-diagnostics'` fingerprint among
|
|
418
|
+
// them, otherwise see none once the CST is gone. Recorded in the ledger
|
|
419
|
+
// directly: no root is produced, and reconciling it with the store would
|
|
420
|
+
// step a closed document's sequence for a root behind its text.
|
|
421
|
+
const ledger = this.services.workspace.ModelLedger;
|
|
422
|
+
const version = ledger.versionOf(root);
|
|
423
|
+
if (version !== UNRECORDED_VERSION) {
|
|
424
|
+
ledger.record(root, version, ledger.textOf(root));
|
|
425
|
+
}
|
|
410
426
|
let cleared = 0;
|
|
411
427
|
for (const node of AstUtils.streamAst(root)) {
|
|
412
428
|
if (node.$cstNode) {
|
|
@@ -8,7 +8,15 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
10
|
import { type Tracer } from '@hydranium/protocol';
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
type AstNode,
|
|
13
|
+
AstUtils,
|
|
14
|
+
CstUtils,
|
|
15
|
+
DefaultAstNodeDescriptionProvider,
|
|
16
|
+
type DocumentSegment,
|
|
17
|
+
type LangiumDocument,
|
|
18
|
+
type URI
|
|
19
|
+
} from '@hydranium/langium';
|
|
12
20
|
import type { LogNameOptions } from '../diagnostics/logger.js';
|
|
13
21
|
import type { HydraniumLanguageServices } from '../language-module.js';
|
|
14
22
|
import { type DescriptionTier, type TieredAstNodeDescription } from './scoped-ast-node-description.js';
|
|
@@ -32,9 +40,11 @@ import { type DescriptionTier, type TieredAstNodeDescription } from './scoped-as
|
|
|
32
40
|
*/
|
|
33
41
|
export class HydraniumAstNodeDescriptionProvider extends DefaultAstNodeDescriptionProvider {
|
|
34
42
|
protected readonly tracer: Tracer;
|
|
43
|
+
protected readonly services: HydraniumLanguageServices;
|
|
35
44
|
|
|
36
45
|
constructor(services: HydraniumLanguageServices, options: LogNameOptions = {}) {
|
|
37
46
|
super(services);
|
|
47
|
+
this.services = services;
|
|
38
48
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'AstNodeDescriptionProvider').trace('instantiated');
|
|
39
49
|
}
|
|
40
50
|
|
|
@@ -44,12 +54,11 @@ export class HydraniumAstNodeDescriptionProvider extends DefaultAstNodeDescripti
|
|
|
44
54
|
* filter pipeline. Callers that need a different tier must use
|
|
45
55
|
* {@link createProject}, {@link createPublic}, or {@link createUniversal}.
|
|
46
56
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* correct tier — so there is no create-then-overwrite cost.
|
|
57
|
+
* Langium's own `createDescription` is not called: every factory builds
|
|
58
|
+
* through {@link createTiered}.
|
|
50
59
|
*/
|
|
51
|
-
override createDescription(node: AstNode, name: string, document
|
|
52
|
-
return this.
|
|
60
|
+
override createDescription(node: AstNode, name: string | undefined, document?: LangiumDocument): TieredAstNodeDescription {
|
|
61
|
+
return this.createTiered(node, name, document, 'local');
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
/**
|
|
@@ -62,7 +71,7 @@ export class HydraniumAstNodeDescriptionProvider extends DefaultAstNodeDescripti
|
|
|
62
71
|
* never sees them, so a project tag would be unused.
|
|
63
72
|
*/
|
|
64
73
|
createLocal(options: { readonly node: AstNode; readonly name: string; readonly document: LangiumDocument }): TieredAstNodeDescription {
|
|
65
|
-
return this.
|
|
74
|
+
return this.createTiered(options.node, options.name, options.document, 'local');
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
/**
|
|
@@ -84,7 +93,7 @@ export class HydraniumAstNodeDescriptionProvider extends DefaultAstNodeDescripti
|
|
|
84
93
|
readonly document: LangiumDocument;
|
|
85
94
|
readonly projectId: string;
|
|
86
95
|
}): TieredAstNodeDescription {
|
|
87
|
-
return this.
|
|
96
|
+
return this.createTiered(options.node, options.name, options.document, 'project', options.projectId);
|
|
88
97
|
}
|
|
89
98
|
|
|
90
99
|
/**
|
|
@@ -108,7 +117,7 @@ export class HydraniumAstNodeDescriptionProvider extends DefaultAstNodeDescripti
|
|
|
108
117
|
readonly document: LangiumDocument;
|
|
109
118
|
readonly projectId: string;
|
|
110
119
|
}): TieredAstNodeDescription {
|
|
111
|
-
return this.
|
|
120
|
+
return this.createTiered(options.node, options.name, options.document, 'public', options.projectId);
|
|
112
121
|
}
|
|
113
122
|
|
|
114
123
|
/**
|
|
@@ -126,16 +135,102 @@ export class HydraniumAstNodeDescriptionProvider extends DefaultAstNodeDescripti
|
|
|
126
135
|
readonly name: string;
|
|
127
136
|
readonly document: LangiumDocument;
|
|
128
137
|
}): TieredAstNodeDescription {
|
|
129
|
-
return this.
|
|
138
|
+
return this.createTiered(options.node, options.name, options.document, 'universal');
|
|
130
139
|
}
|
|
131
140
|
|
|
132
141
|
/**
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* just-constructed and not aliased elsewhere.
|
|
142
|
+
* Resolve the fields of the description every factory returns and build it
|
|
143
|
+
* through {@link newDescription}. Mirrors Langium's `createDescription`:
|
|
144
|
+
* the name defaults to the name provider's, and a node without one throws.
|
|
137
145
|
*/
|
|
138
|
-
protected
|
|
139
|
-
|
|
146
|
+
protected createTiered(
|
|
147
|
+
node: AstNode,
|
|
148
|
+
name: string | undefined,
|
|
149
|
+
document: LangiumDocument | undefined,
|
|
150
|
+
tier: DescriptionTier,
|
|
151
|
+
projectId?: string
|
|
152
|
+
): TieredAstNodeDescription {
|
|
153
|
+
const path = this.astNodeLocator.getAstNodePath(node);
|
|
154
|
+
const resolvedName = name ?? this.nameProvider.getName(node);
|
|
155
|
+
if (!resolvedName) {
|
|
156
|
+
throw new Error(`Node at path ${path} has no name.`);
|
|
157
|
+
}
|
|
158
|
+
const documentUri = (document ?? AstUtils.getDocument(node)).uri;
|
|
159
|
+
return this.newDescription(node, resolvedName, documentUri, path, tier, projectId);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Construct the description from resolved fields; override to build a subclass of {@link DefaultTieredAstNodeDescription}. */
|
|
163
|
+
protected newDescription(
|
|
164
|
+
node: AstNode,
|
|
165
|
+
name: string,
|
|
166
|
+
documentUri: URI,
|
|
167
|
+
path: string,
|
|
168
|
+
tier: DescriptionTier,
|
|
169
|
+
projectId: string | undefined
|
|
170
|
+
): TieredAstNodeDescription {
|
|
171
|
+
return new DefaultTieredAstNodeDescription(this, node, name, documentUri, path, tier, projectId);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* The segment of `node`'s name, or of the whole node when the name
|
|
176
|
+
* provider finds no name node, restoring a shed CST first: a name provider
|
|
177
|
+
* need not restore it, and an absent segment is not computed again.
|
|
178
|
+
*/
|
|
179
|
+
nameSegmentOf(node: AstNode): DocumentSegment | undefined {
|
|
180
|
+
this.services.shared.workspace.CstResidencyService.rehydrateNode(node);
|
|
181
|
+
return CstUtils.toDocumentSegment(this.nameProvider.getNameNode(node) ?? node.$cstNode);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** The segment of the whole node, restoring a shed CST first. */
|
|
185
|
+
selectionSegmentOf(node: AstNode): DocumentSegment | undefined {
|
|
186
|
+
this.services.shared.workspace.CstResidencyService.rehydrateNode(node);
|
|
187
|
+
return CstUtils.toDocumentSegment(node.$cstNode);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* The description {@link HydraniumAstNodeDescriptionProvider} builds. Every
|
|
193
|
+
* field is set in the constructor, so all descriptions share one V8 hidden
|
|
194
|
+
* class; Langium's object literal with a `nameSegment` accessor is kept in
|
|
195
|
+
* dictionary mode and carries two closures, several times the bytes.
|
|
196
|
+
*
|
|
197
|
+
* `nameSegment` and `selectionSegment` are prototype getters, not own
|
|
198
|
+
* properties: a spread, `Object.keys`, a JSON round trip or `structuredClone`
|
|
199
|
+
* of a description drops them. Each is computed on its first read, from the
|
|
200
|
+
* node the description was built for, restoring a shed CST first; an eager
|
|
201
|
+
* `selectionSegment` would keep a segment per description that nothing reads.
|
|
202
|
+
*/
|
|
203
|
+
export class DefaultTieredAstNodeDescription implements TieredAstNodeDescription {
|
|
204
|
+
readonly type: string;
|
|
205
|
+
// `null` records a segment computed while the node had no CST. It is
|
|
206
|
+
// recomputed only once the node has one again: retrying without one would
|
|
207
|
+
// attempt a restore, a re-parse, on every read.
|
|
208
|
+
protected nameSegmentCache: DocumentSegment | null | undefined;
|
|
209
|
+
protected selectionSegmentCache: DocumentSegment | null | undefined;
|
|
210
|
+
|
|
211
|
+
constructor(
|
|
212
|
+
protected readonly provider: HydraniumAstNodeDescriptionProvider,
|
|
213
|
+
readonly node: AstNode,
|
|
214
|
+
readonly name: string,
|
|
215
|
+
readonly documentUri: URI,
|
|
216
|
+
readonly path: string,
|
|
217
|
+
readonly tier: DescriptionTier,
|
|
218
|
+
readonly projectId: string | undefined
|
|
219
|
+
) {
|
|
220
|
+
this.type = node.$type;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
get nameSegment(): DocumentSegment | undefined {
|
|
224
|
+
if (this.nameSegmentCache === undefined || (this.nameSegmentCache === null && this.node.$cstNode !== undefined)) {
|
|
225
|
+
this.nameSegmentCache = this.provider.nameSegmentOf(this.node) ?? null;
|
|
226
|
+
}
|
|
227
|
+
return this.nameSegmentCache ?? undefined;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
get selectionSegment(): DocumentSegment | undefined {
|
|
231
|
+
if (this.selectionSegmentCache === undefined || (this.selectionSegmentCache === null && this.node.$cstNode !== undefined)) {
|
|
232
|
+
this.selectionSegmentCache = this.provider.selectionSegmentOf(this.node) ?? null;
|
|
233
|
+
}
|
|
234
|
+
return this.selectionSegmentCache ?? undefined;
|
|
140
235
|
}
|
|
141
236
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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 { AstNode, LocalSymbols } from '@hydranium/langium';
|
|
11
|
+
|
|
12
|
+
/** The local symbols each build computed, by the root it computed them for. */
|
|
13
|
+
export const builtLocalSymbols = new WeakMap<AstNode, LocalSymbols>();
|
|
@@ -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
|
}
|