@hydranium/core 1.0.0-next.39 → 1.0.0-next.391
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 -128
- 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 +40 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +453 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +918 -504
- 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 +153 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +186 -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 +390 -40
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +635 -102
- 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 +20 -23
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +22 -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 +217 -29
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +588 -84
- 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 +405 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +479 -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 +441 -323
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +602 -407
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +96 -37
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +41 -29
- 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 +92 -52
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +154 -58
- 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 +1165 -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 +78 -4
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +188 -5
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +50 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +73 -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 +3 -0
- package/lib/langium/workspace/index.d.ts.map +1 -1
- package/lib/langium/workspace/index.js +3 -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/syntax-errors.d.ts +23 -0
- package/lib/langium/workspace/syntax-errors.d.ts.map +1 -0
- package/lib/langium/workspace/syntax-errors.js +29 -0
- package/lib/langium/workspace/syntax-errors.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 +3 -2
- 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.d.ts +6 -5
- package/lib/node/server-state-snapshot.d.ts.map +1 -1
- package/lib/node/server-state-snapshot.js +20 -17
- 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 +4 -1
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +4 -1
- 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 +2 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +12 -6
- package/lib/testing/node/scratch-workspace.js.map +1 -1
- package/lib/testing/node/settle-server.d.ts +33 -0
- package/lib/testing/node/settle-server.d.ts.map +1 -0
- package/lib/testing/node/settle-server.js +84 -0
- package/lib/testing/node/settle-server.js.map +1 -0
- 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/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 +25 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +91 -2
- 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 -250
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +26 -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 +77 -0
- package/src/documents/hydranium-text-documents.ts +1044 -615
- 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 +304 -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 +773 -106
- package/src/langium/integration-services.ts +20 -23
- package/src/langium/integrity/integrity-rule.ts +22 -8
- package/src/langium/integrity/integrity-service.ts +656 -90
- 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 +769 -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 +885 -532
- package/src/langium/module.ts +141 -65
- 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 +210 -87
- 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 +1410 -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 +239 -4
- package/src/langium/workspace/hydranium-workspace-lock.ts +101 -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 +3 -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/syntax-errors.ts +34 -0
- package/src/langium/workspace/virtual-document.ts +106 -25
- package/src/langium/workspace/write-lock-scope.ts +27 -12
- package/src/launcher/integrated-server.ts +3 -1
- package/src/locale/server-locale.ts +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 +3 -4
- 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 +28 -20
- 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 +4 -1
- 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 +12 -6
- package/src/testing/node/settle-server.ts +89 -0
- package/src/testing/node/spawned-server.ts +57 -3
- 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 +128 -15
- 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 -124
- package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
- package/lib/documents/language-client-text-shadow.js +0 -190
- 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 -211
- package/src/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -7,17 +7,23 @@
|
|
|
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
|
+
type AstReflection,
|
|
13
14
|
AstUtils,
|
|
14
15
|
DocumentState,
|
|
16
|
+
isAstNode,
|
|
17
|
+
isMultiReference,
|
|
18
|
+
isReference,
|
|
19
|
+
type ReferenceInfo,
|
|
15
20
|
type LangiumDocument,
|
|
16
21
|
type LangiumDocumentFactory,
|
|
17
22
|
type LangiumDocuments,
|
|
18
23
|
URI
|
|
19
24
|
} from '@hydranium/langium';
|
|
20
25
|
import { type HydraniumTextDocuments } from '../../documents/hydranium-text-documents.js';
|
|
26
|
+
import { type ModelLedger } from '../../documents/model-ledger.js';
|
|
21
27
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
22
28
|
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
23
29
|
|
|
@@ -45,8 +51,12 @@ export const CST_RESIDENCY_PASS_PRIORITY = 1_000_000;
|
|
|
45
51
|
* "off" toggle.
|
|
46
52
|
* - `{ kind: 'shed-closed-when-idle', idleMs }`: shed a closed document's CST
|
|
47
53
|
* once it has been idle (not in any build) for `idleMs`, keeping the AST
|
|
48
|
-
* resident. Open documents are always kept.
|
|
49
|
-
* document
|
|
54
|
+
* resident. Open documents are always kept. The timer starts when a build
|
|
55
|
+
* includes the document, so `idleMs: 0` sheds a closed document on the tick
|
|
56
|
+
* after each such build. A shed document that re-enters a build has its CST
|
|
57
|
+
* grafted back, which parses its text, so a window shorter than the gap
|
|
58
|
+
* between a document's builds parses a closed document on every build it
|
|
59
|
+
* rides in.
|
|
50
60
|
*/
|
|
51
61
|
export type CstResidencyStrategy = { readonly kind: 'always-keep' } | { readonly kind: 'shed-closed-when-idle'; readonly idleMs: number };
|
|
52
62
|
|
|
@@ -69,35 +79,34 @@ export interface CstResidencyOptions extends LogNameOptions {
|
|
|
69
79
|
}
|
|
70
80
|
|
|
71
81
|
/**
|
|
72
|
-
* The build state a shed document
|
|
73
|
-
* and rebuilds its CST — and every
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
82
|
+
* The build state a shed document is reset to when the identity-preserving graft
|
|
83
|
+
* fails, so the next build re-parses it and rebuilds its CST — and every
|
|
84
|
+
* `reference.$refNode` — before it is relinked or re-indexed. It is
|
|
85
|
+
* `DocumentState.Changed` by necessity: the only state below `Parsed`, hence
|
|
86
|
+
* the only one that forces a re-parse rather than an in-place relink. Exposed
|
|
87
|
+
* as a named landmark of the residency feature (cf.
|
|
88
|
+
* `IntegrityService.SettledState`) so the document builder references the
|
|
89
|
+
* feature's declared recovery contract instead of a bare enum value.
|
|
79
90
|
*/
|
|
80
91
|
export const CST_REHYDRATION_RESET_STATE: DocumentState = DocumentState.Changed;
|
|
81
92
|
|
|
82
93
|
/**
|
|
83
|
-
* Whether `document`
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* seam
|
|
94
|
+
* Whether `document` has a resident AST without a CST, and `ledger` holds the
|
|
95
|
+
* text to graft one from. That text is the one a residency policy recorded when
|
|
96
|
+
* it shed the CST, or the serialized text of a `fromModel` document. A
|
|
97
|
+
* not-yet-parsed document has no CST to graft, and nor has a `fromModel`
|
|
98
|
+
* document without a serializer. The single definition of "shed", shared by the
|
|
99
|
+
* document builder's rehydrate-on-re-entry seam and the server-state snapshot
|
|
100
|
+
* so the two cannot drift.
|
|
89
101
|
*/
|
|
90
|
-
export function isCstShed(document: LangiumDocument): boolean {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
document.parseResult?.value !== undefined &&
|
|
94
|
-
document.parseResult.value.$cstNode === undefined
|
|
95
|
-
);
|
|
102
|
+
export function isCstShed(document: LangiumDocument, ledger: ModelLedger): boolean {
|
|
103
|
+
const root = document.parseResult?.value;
|
|
104
|
+
return document.state >= DocumentState.Parsed && root !== undefined && root.$cstNode === undefined && ledger.textOf(root) !== undefined;
|
|
96
105
|
}
|
|
97
106
|
|
|
98
107
|
/**
|
|
99
|
-
* Reattach a CST to a shed document **on demand**, without a rebuild
|
|
100
|
-
* read
|
|
108
|
+
* Reattach a CST to a shed document **on demand**, without a rebuild. Both the
|
|
109
|
+
* read side and the build-side rehydrate-on-re-entry seam use it. Re-parses
|
|
101
110
|
* the document's retained text into a throwaway document, then **grafts** the
|
|
102
111
|
* fresh CST onto the already-built, resident AST nodes — preserving AST node
|
|
103
112
|
* identity, so every cross-reference *into* this document (resolved to a resident
|
|
@@ -124,10 +133,12 @@ export function isCstShed(document: LangiumDocument): boolean {
|
|
|
124
133
|
* `reference.$refNode` is restored the same way (paired over
|
|
125
134
|
* {@link AstUtils.streamReferences}).
|
|
126
135
|
*
|
|
127
|
-
* **Safe degrade.** If the re-parse diverges
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
136
|
+
* **Safe degrade.** If the re-parse diverges from the resident AST (a
|
|
137
|
+
* different node count, or a different type, container slot, reference slots
|
|
138
|
+
* or grammar value on any node — should not happen for unchanged text, but a
|
|
139
|
+
* guard against an AST changed in place) the graft is abandoned before any
|
|
140
|
+
* write and the document stays shed. A read-side caller degrades as it did
|
|
141
|
+
* before (no wrong attachment), and the build re-parses.
|
|
131
142
|
*
|
|
132
143
|
* **Module-private mechanism.** The public entry points are
|
|
133
144
|
* {@link CstResidencyService.rehydrateNode} / {@link CstResidencyService.rehydrate},
|
|
@@ -139,7 +150,7 @@ export function isCstShed(document: LangiumDocument): boolean {
|
|
|
139
150
|
* @returns `true` if the document now has a resident CST (already-resident is a
|
|
140
151
|
* no-op `true`); `false` if the text is unrecoverable or the re-parse diverged.
|
|
141
152
|
*/
|
|
142
|
-
function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory): boolean {
|
|
153
|
+
function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory, reflection: AstReflection): boolean {
|
|
143
154
|
const root = document.parseResult?.value;
|
|
144
155
|
if (root === undefined) {
|
|
145
156
|
return false;
|
|
@@ -155,9 +166,31 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
155
166
|
const fresh = factory.fromString(text, document.uri);
|
|
156
167
|
const existingNodes = [...AstUtils.streamAst(root)];
|
|
157
168
|
const freshNodes = [...AstUtils.streamAst(fresh.parseResult.value)];
|
|
158
|
-
|
|
169
|
+
// Pre-order follows property order, so a property re-added in place would
|
|
170
|
+
// pair siblings of one type crosswise. Their container slots tell them
|
|
171
|
+
// apart, and their grammar values tell apart siblings that traded slots too.
|
|
172
|
+
const pairsDiffer = (node: AstNode, freshNode: AstNode): boolean =>
|
|
173
|
+
node.$type !== freshNode.$type ||
|
|
174
|
+
node.$containerProperty !== freshNode.$containerProperty ||
|
|
175
|
+
node.$containerIndex !== freshNode.$containerIndex ||
|
|
176
|
+
Object.keys(reflection.getTypeMetaData(node.$type).properties).some(
|
|
177
|
+
property => !sameGrammarValue(Reflect.get(node, property), Reflect.get(freshNode, property))
|
|
178
|
+
);
|
|
179
|
+
if (existingNodes.length !== freshNodes.length || existingNodes.some((node, index) => pairsDiffer(node, freshNodes[index]))) {
|
|
159
180
|
return false; // structural divergence — stay shed rather than mis-attach
|
|
160
181
|
}
|
|
182
|
+
// `streamReferences` yields a node's *own* cross-references only (not its
|
|
183
|
+
// descendants'), in property enumeration order, which a property re-added
|
|
184
|
+
// in place changes. So each pair must hold one property and array index.
|
|
185
|
+
// Checked before any write, so a divergence leaves the document shed rather
|
|
186
|
+
// than half grafted.
|
|
187
|
+
const residentRefs = existingNodes.map(node => [...AstUtils.streamReferences(node)]);
|
|
188
|
+
const freshRefs = freshNodes.map(node => [...AstUtils.streamReferences(node)]);
|
|
189
|
+
const refsDiffer = (refs: ReferenceInfo[], fresh: ReferenceInfo[]): boolean =>
|
|
190
|
+
refs.length !== fresh.length || refs.some((ref, index) => ref.property !== fresh[index].property || ref.index !== fresh[index].index);
|
|
191
|
+
if (residentRefs.some((refs, index) => refsDiffer(refs, freshRefs[index]))) {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
161
194
|
for (let index = 0; index < existingNodes.length; index++) {
|
|
162
195
|
const residentNode = existingNodes[index];
|
|
163
196
|
const freshNode = freshNodes[index];
|
|
@@ -169,28 +202,53 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
169
202
|
// at the resident node so CST→AST navigation reaches the linked AST.
|
|
170
203
|
asMutable(freshCst).astNode = residentNode;
|
|
171
204
|
}
|
|
172
|
-
// Restore each reference's `$refNode` from the fresh parse.
|
|
173
|
-
//
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const freshRefs = [...AstUtils.streamReferences(freshNode)];
|
|
178
|
-
if (residentRefs.length === freshRefs.length) {
|
|
179
|
-
for (let refIndex = 0; refIndex < residentRefs.length; refIndex++) {
|
|
180
|
-
asMutable(residentRefs[refIndex].reference).$refNode = freshRefs[refIndex].reference.$refNode;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
205
|
+
// Restore each reference's `$refNode` from the fresh parse. The resolved
|
|
206
|
+
// `.ref` link is untouched (still resident).
|
|
207
|
+
residentRefs[index].forEach((resident, refIndex) => {
|
|
208
|
+
asMutable(resident.reference).$refNode = freshRefs[index][refIndex].reference.$refNode;
|
|
209
|
+
});
|
|
183
210
|
}
|
|
184
211
|
return true;
|
|
185
212
|
}
|
|
186
213
|
|
|
187
214
|
/**
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
215
|
+
* Whether two values of one grammar property match. Child nodes are paired on
|
|
216
|
+
* their own, so a reference counts by its text. A converter's `Date` counts by
|
|
217
|
+
* its time, and any other object as equal, since its equality is unknown.
|
|
218
|
+
*/
|
|
219
|
+
function sameGrammarValue(value: unknown, freshValue: unknown): boolean {
|
|
220
|
+
if (Array.isArray(value)) {
|
|
221
|
+
return (
|
|
222
|
+
Array.isArray(freshValue) &&
|
|
223
|
+
value.length === freshValue.length &&
|
|
224
|
+
value.every((item, index) => sameGrammarValue(item, freshValue[index]))
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
if (isReference(value) || isMultiReference(value)) {
|
|
228
|
+
return (isReference(freshValue) || isMultiReference(freshValue)) && value.$refText === freshValue.$refText;
|
|
229
|
+
}
|
|
230
|
+
if (isAstNode(value)) {
|
|
231
|
+
return isAstNode(freshValue);
|
|
232
|
+
}
|
|
233
|
+
if (value instanceof Date) {
|
|
234
|
+
return freshValue instanceof Date && value.getTime() === freshValue.getTime();
|
|
235
|
+
}
|
|
236
|
+
if (typeof value === 'object' && value !== null) {
|
|
237
|
+
return typeof freshValue === 'object' && freshValue !== null;
|
|
238
|
+
}
|
|
239
|
+
return Object.is(value, freshValue);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Keeps a document's CST available to the readers that need one, shedding it
|
|
244
|
+
* for documents that have gone idle and re-grafting on demand.
|
|
245
|
+
*
|
|
246
|
+
* Each build refreshes the idle window of the documents in its batch. When a
|
|
247
|
+
* closed, sheddable document's window elapses, every AST node's `$cstNode` and
|
|
248
|
+
* every reference's `$refNode` are nulled, and the CST becomes unreachable with
|
|
249
|
+
* the `Range`s and `Position`s only it holds. The reference index's segments, and a
|
|
250
|
+
* description's segments once read, share the CST's `Range` objects, so
|
|
251
|
+
* those stay.
|
|
194
252
|
*
|
|
195
253
|
* **Terminology.** *Residency* is the state axis (is the CST in memory? —
|
|
196
254
|
* `resident` vs `shed`); *shed* is both the act and the policy vocabulary (drop
|
|
@@ -200,21 +258,25 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
200
258
|
* retained source text and graft it back, identity-preserving — deliberately not
|
|
201
259
|
* "reload", which would suggest bytes coming back unchanged).
|
|
202
260
|
*
|
|
203
|
-
* **Re-entry is safe.** A shed document that later re-enters a build
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
261
|
+
* **Re-entry is safe.** A shed document that later re-enters a build has its
|
|
262
|
+
* CST and every `$refNode` grafted back first ("rehydrate-on-re-entry"),
|
|
263
|
+
* keeping its AST nodes so dependents outside the build stay linked to them.
|
|
264
|
+
* `HydraniumDocumentBuilder.rehydrateShedDocuments` grafts a document that is
|
|
265
|
+
* relinked or re-validated, before the build's phases, and
|
|
266
|
+
* `HydraniumLangiumDocumentFactory.update` one reset to `Changed` whose text
|
|
267
|
+
* has not changed. An edited document is re-parsed, and so is one whose graft
|
|
268
|
+
* is refused or diverges, and a build after it relinks its dependents. That
|
|
207
269
|
* matters because Langium derives the reference index — and thus
|
|
208
|
-
* `IndexManager.isAffected` and the `segment` used by rename /
|
|
209
|
-
* from `$refNode
|
|
210
|
-
* document's cross-references and
|
|
270
|
+
* `IndexManager.isAffected` and the `segment` used by rename /
|
|
271
|
+
* find-references — from `$refNode`. Without rehydration a re-index would
|
|
272
|
+
* silently drop the document's cross-references, and it would no longer be
|
|
273
|
+
* relinked when its targets change.
|
|
211
274
|
*
|
|
212
275
|
* Constructed with `(services, options)` and self-registers a `Validated`
|
|
213
|
-
* `BuildPhasePass`, which
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* slot with a shedding strategy.
|
|
276
|
+
* `BuildPhasePass`, which is why the framework constructs it eagerly — the pass
|
|
277
|
+
* must be registered before the first build. Shedding itself is opt-in: the
|
|
278
|
+
* bound default strategy is `always-keep`, so the pass runs and sheds nothing
|
|
279
|
+
* until an adopter rebinds the slot with a shedding strategy.
|
|
218
280
|
*
|
|
219
281
|
* **Read-side navigation under a shedding strategy.** Read-only LSP requests do
|
|
220
282
|
* not run a build, so they do not trigger the build-side rehydrate. Features that
|
|
@@ -231,22 +293,21 @@ function rehydrateCst(document: LangiumDocument, factory: LangiumDocumentFactory
|
|
|
231
293
|
* `NameProvider.getNameNode` chokepoint, the comment provider, and
|
|
232
294
|
* `HydraniumLangiumDocuments.getOrCreateDocument`.
|
|
233
295
|
*/
|
|
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
296
|
export interface CstResidencyService {
|
|
239
297
|
/**
|
|
240
|
-
* Ensure `document` has a CST, re-parsing its retained text if it was shed
|
|
241
|
-
*
|
|
242
|
-
* a hot path and safe to
|
|
298
|
+
* Ensure `document` has a CST, re-parsing its retained text if it was shed
|
|
299
|
+
* and that text is the one its AST was parsed from. A resident document is
|
|
300
|
+
* left exactly as it is, so this is safe to call on a hot path and safe to
|
|
301
|
+
* call twice. A document whose graft diverged is not attempted again on the
|
|
302
|
+
* same text.
|
|
243
303
|
*/
|
|
244
304
|
rehydrate(document: LangiumDocument): void;
|
|
245
305
|
|
|
246
306
|
/**
|
|
247
307
|
* Node-level convenience over {@link rehydrate}, cheap enough for an
|
|
248
308
|
* unconditional call: a node whose `$cstNode` is already set returns
|
|
249
|
-
* without resolving its document
|
|
309
|
+
* without resolving its document, and a node outside any document, such as
|
|
310
|
+
* a detached synthetic node, has nothing to restore and returns too.
|
|
250
311
|
*/
|
|
251
312
|
rehydrateNode(node: AstNode): void;
|
|
252
313
|
}
|
|
@@ -267,6 +328,14 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
267
328
|
* cycles, and all cancelled by {@link dispose}.
|
|
268
329
|
*/
|
|
269
330
|
protected readonly idleTimers = new Map<string, Debouncer>();
|
|
331
|
+
/**
|
|
332
|
+
* The text each document's graft diverged on. Until its text changes, the
|
|
333
|
+
* document is not shed again: an AST the build keeps mutating away from its
|
|
334
|
+
* text would otherwise cost a graft, a re-parse and a build on every
|
|
335
|
+
* re-entry. Keyed by document, because the re-parse after a divergence
|
|
336
|
+
* replaces the root.
|
|
337
|
+
*/
|
|
338
|
+
protected readonly diverged = new WeakMap<LangiumDocument, string>();
|
|
270
339
|
protected shedTotal = 0;
|
|
271
340
|
|
|
272
341
|
constructor(
|
|
@@ -281,7 +350,7 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
281
350
|
this.langiumDocs = services.workspace.LangiumDocuments;
|
|
282
351
|
services.workspace.BuildPhasePassService.register({
|
|
283
352
|
id: 'framework:cst-residency:shed',
|
|
284
|
-
|
|
353
|
+
phase: DocumentState.Validated,
|
|
285
354
|
priority: options.priority ?? CST_RESIDENCY_PASS_PRIORITY,
|
|
286
355
|
run: documents => this.onBuild(documents)
|
|
287
356
|
});
|
|
@@ -289,8 +358,8 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
289
358
|
|
|
290
359
|
/**
|
|
291
360
|
* Restore `document`'s shed CST on demand — the ergonomic entry point over
|
|
292
|
-
* {@link rehydrateCst} (resolves the document factory itself).
|
|
293
|
-
*
|
|
361
|
+
* {@link rehydrateCst} (resolves the document factory itself). A no-op when
|
|
362
|
+
* the CST is resident, so read-side seams call it unconditionally.
|
|
294
363
|
*
|
|
295
364
|
* **Residency note (deliberate).** Rehydration does NOT count as a "use" for
|
|
296
365
|
* the `shed-closed-when-idle` idle timer (which is refreshed only by build
|
|
@@ -302,20 +371,39 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
302
371
|
* method is where that hook goes.
|
|
303
372
|
*/
|
|
304
373
|
rehydrate(document: LangiumDocument): void {
|
|
305
|
-
|
|
374
|
+
const root = document.parseResult?.value;
|
|
375
|
+
// A graft from other text would attach its CST to nodes it does not
|
|
376
|
+
// describe. `shed` records the text the AST was parsed from.
|
|
377
|
+
// A diverged graft diverges again on the same text, so it is not parsed twice.
|
|
378
|
+
const parsedFrom = root === undefined ? undefined : this.services.workspace.ModelLedger.textOf(root);
|
|
379
|
+
if (
|
|
380
|
+
root === undefined ||
|
|
381
|
+
root.$cstNode !== undefined ||
|
|
382
|
+
parsedFrom === undefined ||
|
|
383
|
+
parsedFrom !== document.textDocument?.getText() ||
|
|
384
|
+
this.hasDiverged(document)
|
|
385
|
+
) {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
if (!rehydrateCst(document, this.services.workspace.LangiumDocumentFactory, this.services.AstReflection)) {
|
|
389
|
+
this.diverged.set(document, parsedFrom);
|
|
390
|
+
}
|
|
306
391
|
}
|
|
307
392
|
|
|
308
393
|
/**
|
|
309
394
|
* Node-level convenience over {@link rehydrate}: a resident node (its
|
|
310
395
|
* `$cstNode` is set — true for every node of a non-shed document) returns
|
|
311
|
-
*
|
|
396
|
+
* without even resolving the document, so hot read paths
|
|
312
397
|
* (`getNameNode`, comment lookup) call this unconditionally.
|
|
313
398
|
*/
|
|
314
399
|
rehydrateNode(node: AstNode): void {
|
|
315
400
|
if (node.$cstNode !== undefined) {
|
|
316
401
|
return;
|
|
317
402
|
}
|
|
318
|
-
|
|
403
|
+
const document = AstUtils.findRootNode(node).$document;
|
|
404
|
+
if (document) {
|
|
405
|
+
this.rehydrate(document);
|
|
406
|
+
}
|
|
319
407
|
}
|
|
320
408
|
|
|
321
409
|
/**
|
|
@@ -333,13 +421,10 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
333
421
|
}
|
|
334
422
|
for (const document of documents) {
|
|
335
423
|
const uri = document.uri.toString();
|
|
336
|
-
if (this.textDocuments.isOpenInAnyClient(uri)) {
|
|
424
|
+
if (this.textDocuments.isOpenInAnyClient(uri) || !this.canShed(document) || !this.isSheddable(document)) {
|
|
337
425
|
this.idleTimers.get(uri)?.cancel();
|
|
338
426
|
continue;
|
|
339
427
|
}
|
|
340
|
-
if (!this.isSheddable(document)) {
|
|
341
|
-
continue;
|
|
342
|
-
}
|
|
343
428
|
this.idleTimerFor(uri).schedule();
|
|
344
429
|
}
|
|
345
430
|
}
|
|
@@ -364,14 +449,17 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
364
449
|
* Idle-timer fire: shed the document's CST if it is still closed and resident.
|
|
365
450
|
* Re-checks open-state (a reopen within the window cancels the timer, but guard
|
|
366
451
|
* anyway) and resolves the current document by URI (it may have been deleted,
|
|
367
|
-
* or its object replaced by a rebuild).
|
|
452
|
+
* or its object replaced by a rebuild). Re-checks {@link canShed} and
|
|
453
|
+
* {@link isSheddable} too. The timer was armed by an earlier build, and the
|
|
454
|
+
* document may since be mid-rebuild or have gained an unresolved reference
|
|
455
|
+
* in a cancelled build.
|
|
368
456
|
*/
|
|
369
457
|
protected onIdle(uri: string): void {
|
|
370
458
|
if (this.textDocuments.isOpenInAnyClient(uri)) {
|
|
371
459
|
return;
|
|
372
460
|
}
|
|
373
461
|
const document = this.langiumDocs.getDocument(URI.parse(uri));
|
|
374
|
-
if (document === undefined) {
|
|
462
|
+
if (document === undefined || !this.canShed(document) || !this.isSheddable(document)) {
|
|
375
463
|
return;
|
|
376
464
|
}
|
|
377
465
|
this.shedTotal += this.shed(document);
|
|
@@ -385,28 +473,63 @@ export class DefaultCstResidencyService implements CstResidencyService {
|
|
|
385
473
|
this.idleTimers.clear();
|
|
386
474
|
}
|
|
387
475
|
|
|
476
|
+
/** Whether `document`'s graft diverged on the text its root was parsed from. */
|
|
477
|
+
protected hasDiverged(document: LangiumDocument): boolean {
|
|
478
|
+
const text = this.diverged.get(document);
|
|
479
|
+
return text !== undefined && text === this.services.workspace.ModelLedger.textOf(document.parseResult.value);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Whether `document` can be shed without losing its AST identity or its
|
|
484
|
+
* references. Only a `Validated` document qualifies: the idle timer can fire
|
|
485
|
+
* while a build waits between documents, and a build that indexes a
|
|
486
|
+
* document's references without their CST drops them from the reference
|
|
487
|
+
* index. Its root needs a recorded version, since without one the ledger
|
|
488
|
+
* keeps no text to graft the CST back from, and `shed` refuses it for a
|
|
489
|
+
* caller that skips this check. A document whose graft diverged on its
|
|
490
|
+
* current text would cost a parse on every re-entry. Checked before
|
|
491
|
+
* {@link isSheddable}, so an override of that policy keeps these guards.
|
|
492
|
+
*/
|
|
493
|
+
protected canShed(document: LangiumDocument): boolean {
|
|
494
|
+
return (
|
|
495
|
+
document.state === DocumentState.Validated &&
|
|
496
|
+
!this.hasDiverged(document) &&
|
|
497
|
+
this.services.workspace.ModelLedger.versionOf(document.parseResult.value) !== UNRECORDED_VERSION
|
|
498
|
+
);
|
|
499
|
+
}
|
|
500
|
+
|
|
388
501
|
/**
|
|
389
502
|
* Whether a closed document may have its CST shed. Only documents whose text
|
|
390
|
-
* a re-parse
|
|
391
|
-
*
|
|
392
|
-
* documents — e.g. built-in definitions
|
|
393
|
-
*
|
|
394
|
-
*
|
|
503
|
+
* a re-parse can recover are sheddable, because a re-entry whose graft
|
|
504
|
+
* diverges re-parses from disk. The default admits `file`-scheme documents
|
|
505
|
+
* and excludes synthetic / in-memory documents — e.g. built-in definitions
|
|
506
|
+
* registered under a custom URI scheme — for which that re-parse would
|
|
507
|
+
* `readFile` a non-existent path. A document with an unresolved
|
|
508
|
+
* reference stays resident too: Langium relinks it on every update, so a shed
|
|
509
|
+
* would only buy a re-graft each time. Adopters override to refine.
|
|
395
510
|
*/
|
|
396
511
|
protected isSheddable(document: LangiumDocument): boolean {
|
|
397
|
-
return document.uri.scheme === 'file';
|
|
512
|
+
return document.uri.scheme === 'file' && !document.references.some(reference => reference.error !== undefined);
|
|
398
513
|
}
|
|
399
514
|
|
|
400
515
|
/**
|
|
401
516
|
* Shed one document's CST: null every AST node's `$cstNode` and every
|
|
402
517
|
* reference's `$refNode`. Returns the number of `$cstNode`s cleared (0 if the
|
|
403
|
-
* document is unparsed or
|
|
518
|
+
* document is unparsed, already shed, or has no recorded version).
|
|
404
519
|
*/
|
|
405
520
|
protected shed(document: LangiumDocument): number {
|
|
406
521
|
const root = document.parseResult?.value;
|
|
407
|
-
|
|
522
|
+
const ledger = this.services.workspace.ModelLedger;
|
|
523
|
+
// Without a version the ledger keeps no text, and without the text no
|
|
524
|
+
// build can graft the CST back or tell the document is shed.
|
|
525
|
+
if (root === undefined || root.$cstNode === undefined || ledger.versionOf(root) === UNRECORDED_VERSION) {
|
|
408
526
|
return 0;
|
|
409
527
|
}
|
|
528
|
+
// Readers of the parsed text, the `'text-diagnostics'` fingerprint among
|
|
529
|
+
// them, otherwise see none once the CST is gone. Recorded in the ledger
|
|
530
|
+
// directly: no root is produced, and reconciling it with the store would
|
|
531
|
+
// step a closed document's sequence for a root behind its text.
|
|
532
|
+
ledger.record(root, ledger.versionOf(root), ledger.textOf(root));
|
|
410
533
|
let cleared = 0;
|
|
411
534
|
for (const node of AstUtils.streamAst(root)) {
|
|
412
535
|
if (node.$cstNode) {
|