@hydranium/core 1.0.0-next.12 → 1.0.0-next.123
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 +5 -1
- package/lib/documents/ast-document-manager.d.ts +92 -19
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +107 -26
- 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 +138 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +184 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- package/lib/documents/file-system-task-queue.d.ts +49 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +34 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +324 -57
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +590 -114
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +3 -0
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +3 -0
- package/lib/documents/index.js.map +1 -1
- package/lib/documents/language-client-text-shadow.d.ts +41 -9
- package/lib/documents/language-client-text-shadow.d.ts.map +1 -1
- package/lib/documents/language-client-text-shadow.js +56 -11
- package/lib/documents/language-client-text-shadow.js.map +1 -1
- package/lib/documents/self-save-registry.d.ts +37 -6
- package/lib/documents/self-save-registry.d.ts.map +1 -1
- package/lib/documents/self-save-registry.js +28 -15
- package/lib/documents/self-save-registry.js.map +1 -1
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +60 -22
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +16 -9
- package/lib/langium/bootstrap.js.map +1 -1
- 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/diagnostics/lsp-logger.d.ts +17 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +40 -6
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +93 -0
- package/lib/langium/document-builder/build-session.d.ts.map +1 -0
- package/lib/langium/document-builder/build-session.js +72 -0
- package/lib/langium/document-builder/build-session.js.map +1 -0
- package/lib/langium/document-builder/document-builder.d.ts +165 -9
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +313 -13
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/document-builder/index.d.ts +1 -0
- package/lib/langium/document-builder/index.d.ts.map +1 -1
- package/lib/langium/document-builder/index.js +1 -0
- package/lib/langium/document-builder/index.js.map +1 -1
- package/lib/langium/integration-services.d.ts +45 -1
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +10 -5
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +13 -5
- 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 +54 -6
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +192 -17
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +27 -2
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +16 -2
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +299 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +379 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +1 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +1 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-service.d.ts +224 -160
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +191 -288
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +95 -16
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +30 -12
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +25 -4
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +2 -1
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -0
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +30 -1
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +31 -11
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +13 -56
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +48 -13
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +56 -20
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +11 -20
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +12 -21
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +15 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +16 -0
- package/lib/langium/service-registry.js.map +1 -1
- package/lib/langium/shared-services.d.ts +15 -2
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/transfer/transfer-encoder.d.ts +60 -17
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +38 -16
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +423 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +906 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +43 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +48 -0
- package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
- package/lib/langium/trivia/index.d.ts +14 -0
- package/lib/langium/trivia/index.d.ts.map +1 -0
- package/lib/langium/trivia/index.js +14 -0
- package/lib/langium/trivia/index.js.map +1 -0
- package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
- package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-contribution.js +10 -0
- package/lib/langium/trivia/trivia-contribution.js.map +1 -0
- package/lib/langium/trivia/trivia-preserver.d.ts +50 -0
- package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-preserver.js +10 -0
- package/lib/langium/trivia/trivia-preserver.js.map +1 -0
- package/lib/langium/trivia/trivia-service.d.ts +70 -0
- package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-service.js +56 -0
- package/lib/langium/trivia/trivia-service.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/validation/document-validator.d.ts +294 -10
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +448 -5
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +3 -4
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +3 -4
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-system-provider.d.ts +9 -1
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +40 -7
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +25 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +25 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +21 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +28 -0
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +23 -0
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +55 -9
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +31 -2
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +13 -5
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +79 -17
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +83 -28
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/virtual-document.d.ts +18 -3
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +19 -2
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +1 -1
- package/lib/langium/workspace/write-lock-scope.js +1 -1
- package/lib/locale/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +70 -62
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +123 -75
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +3 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +3 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +54 -0
- package/lib/messages/carriers.d.ts.map +1 -0
- package/lib/messages/carriers.js +62 -0
- package/lib/messages/carriers.js.map +1 -0
- package/lib/messages/index.d.ts +25 -0
- package/lib/messages/index.d.ts.map +1 -0
- package/lib/messages/index.js +25 -0
- package/lib/messages/index.js.map +1 -0
- package/lib/messages/renderer.d.ts +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/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 -0
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -0
- 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/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +1 -0
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +35 -1
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +140 -45
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +8 -2
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js.map +1 -1
- package/lib/node/profiling-run.d.ts +2 -2
- package/lib/node/profiling-run.js +1 -1
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +52 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +66 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/socket-launcher.d.ts +15 -0
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +3 -2
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/testing/fake-document.d.ts +16 -4
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js +18 -3
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +61 -13
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +25 -5
- package/lib/testing/make-test-services.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 +11 -3
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +42 -9
- 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 +14 -0
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +33 -1
- 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/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 +14 -4
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +21 -4
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +4 -4
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +10 -9
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +8 -9
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +8 -0
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +22 -3
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +19 -6
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +53 -15
- package/lib/testing/stub-hydranium-text-documents.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 +7 -6
- 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/util/connection-liveness.d.ts +7 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +35 -14
- package/lib/util/connection-liveness.js.map +1 -1
- package/package.json +17 -8
- package/src/documents/ast-document-manager.ts +188 -45
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +22 -0
- package/src/documents/client-session-registry.ts +237 -0
- package/src/documents/file-system-task-queue.ts +68 -0
- package/src/documents/hydranium-text-documents.ts +724 -142
- package/src/documents/index.ts +3 -0
- package/src/documents/language-client-text-shadow.ts +59 -11
- package/src/documents/self-save-registry.ts +52 -13
- package/src/index.ts +6 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +16 -9
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/lsp-logger.ts +41 -6
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +87 -0
- package/src/langium/document-builder/document-builder.ts +355 -13
- package/src/langium/document-builder/index.ts +1 -0
- package/src/langium/integration-services.ts +67 -6
- package/src/langium/integrity/integrity-rule.ts +13 -5
- package/src/langium/integrity/integrity-service.ts +201 -17
- package/src/langium/keys/containment.ts +87 -0
- package/src/langium/keys/index.ts +1 -0
- package/src/langium/keys/name-based-key-provider.ts +4 -0
- package/src/langium/language-module.ts +42 -4
- package/src/langium/model-service/client-session.ts +581 -0
- package/src/langium/model-service/index.ts +1 -0
- package/src/langium/model-service/model-service.ts +332 -274
- package/src/langium/module.ts +119 -22
- package/src/langium/naming/name-provider.ts +27 -5
- package/src/langium/naming/name-separator-validation.ts +34 -5
- package/src/langium/residency/cst-residency-service.ts +36 -14
- package/src/langium/scope/hydranium-scope-provider.ts +60 -22
- package/src/langium/serialization/abstract-serializer.ts +13 -32
- package/src/langium/service-registry.ts +19 -2
- package/src/langium/shared-services.ts +19 -2
- package/src/langium/transfer/transfer-encoder.ts +85 -24
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +55 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +54 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +537 -11
- package/src/langium/workspace/document-uri-policy.ts +3 -4
- package/src/langium/workspace/file-system-provider.ts +48 -8
- package/src/langium/workspace/hydranium-langium-document-factory.ts +34 -0
- package/src/langium/workspace/hydranium-workspace-manager.ts +30 -1
- package/src/langium/workspace/in-memory-file-system-provider.ts +62 -10
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +106 -33
- package/src/langium/workspace/virtual-document.ts +21 -3
- package/src/langium/workspace/write-lock-scope.ts +1 -1
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
- package/src/lsp/connection-features.ts +67 -0
- package/src/lsp/diagnostics-connection.ts +56 -0
- package/src/lsp/hydranium-document-update-handler.ts +152 -79
- package/src/lsp/index.ts +3 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +78 -0
- package/src/messages/index.ts +36 -0
- package/src/messages/renderer.ts +212 -0
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -0
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/measure-memory.ts +1 -0
- package/src/node/node-file-system-provider.ts +154 -47
- package/src/node/profile-capture.ts +8 -2
- package/src/node/profiling-run.ts +3 -3
- package/src/node/rename-over-open-readers.ts +78 -0
- package/src/node/socket-launcher.ts +18 -2
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +99 -24
- 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 +61 -11
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +35 -1
- package/src/testing/node/unhandled-rejections.ts +31 -0
- 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 +24 -5
- package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
- package/src/testing/run-update-pipeline.ts +4 -4
- package/src/testing/stub-ast-document-manager.ts +18 -31
- package/src/testing/stub-document-builder.ts +32 -3
- package/src/testing/stub-hydranium-text-documents.ts +78 -21
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +9 -8
- package/src/util/connection-liveness.ts +37 -14
- 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/src/lsp/instrument-connection.ts +0 -66
|
@@ -8,11 +8,13 @@
|
|
|
8
8
|
* SPDX-License-Identifier: MIT
|
|
9
9
|
********************************************************************************/
|
|
10
10
|
import { NormalizedTextDocuments } from '@hydranium/langium/lsp';
|
|
11
|
+
import { URI } from '@hydranium/langium';
|
|
11
12
|
import { type ServerSharedServices } from '../langium/module.js';
|
|
12
|
-
import { type ApplyWorkspaceEditResult, type CancellationToken, type Connection, type DidChangeTextDocumentParams, type DidCloseTextDocumentParams, type DidOpenTextDocumentParams, type DidSaveTextDocumentParams, type Disposable,
|
|
13
|
+
import { type ApplyWorkspaceEditResult, type CancellationToken, type Connection, type DidChangeTextDocumentParams, type DidCloseTextDocumentParams, type DidOpenTextDocumentParams, type DidSaveTextDocumentParams, type Disposable, Emitter, type Event, type HandlerResult, type RequestHandler, type TextDocumentChangeEvent, type TextDocumentWillSaveEvent, type TextDocumentsConfiguration, type TextEdit, type WillSaveTextDocumentParams } from 'vscode-languageserver';
|
|
13
14
|
import { type DocumentUri, TextDocument, type TextDocumentContentChangeEvent } from 'vscode-languageserver-textdocument';
|
|
14
|
-
import { type CanonicalUri, type LanguageClientUri, type Tracer } from '@hydranium/protocol';
|
|
15
|
+
import { type CanonicalUri, type LanguageClientUri, type Stopwatch, type Tracer } from '@hydranium/protocol';
|
|
15
16
|
import { type LogNameOptions } from '../langium/diagnostics/logger.js';
|
|
17
|
+
import { type ClientSessionClosedEvent, ClientSessionRegistry, type SessionEndCause } from './client-session-registry.js';
|
|
16
18
|
import { LanguageClientTextShadow } from './language-client-text-shadow.js';
|
|
17
19
|
export interface ClientTextDocumentChangeEvent<T> extends TextDocumentChangeEvent<T> {
|
|
18
20
|
clientId: string;
|
|
@@ -28,6 +30,30 @@ export interface HydraniumTextDocumentsOptions<T extends TextDocument = TextDocu
|
|
|
28
30
|
* Adopters with a custom text-document type (rare) pass their factory.
|
|
29
31
|
*/
|
|
30
32
|
readonly configuration?: TextDocumentsConfiguration<T>;
|
|
33
|
+
/**
|
|
34
|
+
* How long a document whose last open closed because its client's
|
|
35
|
+
* connection was lost keeps its text before it reverts to disk. An open by
|
|
36
|
+
* a client lost from the document, within this time of its own loss,
|
|
37
|
+
* cancels the revert, so a client that registers again under its id after
|
|
38
|
+
* a dropped connection finds its unsaved edits. Any other open releases the
|
|
39
|
+
* document first and then opens it as a first open does, from the text the
|
|
40
|
+
* opener supplies (an editor's own) or else from the file. Meanwhile the
|
|
41
|
+
* document counts as open for the integrity service, which therefore writes
|
|
42
|
+
* none of its unsaved text to disk. A close the client makes itself, or
|
|
43
|
+
* ending its session, reverts at once whatever this is.
|
|
44
|
+
*
|
|
45
|
+
* Defaults to 10 s. `0` reverts such a document at once as well, released
|
|
46
|
+
* in the close itself rather than on a timer.
|
|
47
|
+
*/
|
|
48
|
+
readonly revertGraceMs?: number;
|
|
49
|
+
}
|
|
50
|
+
/** Delivered by {@link HydraniumTextDocuments.onDidSaveInLanguageClient}. */
|
|
51
|
+
export interface LanguageClientSavedEvent {
|
|
52
|
+
readonly uri: string;
|
|
53
|
+
}
|
|
54
|
+
/** Delivered by {@link HydraniumTextDocuments.onDidCloseLastOpen}. */
|
|
55
|
+
export interface LastOpenClosedEvent {
|
|
56
|
+
readonly uri: CanonicalUri;
|
|
31
57
|
}
|
|
32
58
|
/**
|
|
33
59
|
* All per-URI client-facing tracking the manager keys by normalized URI,
|
|
@@ -42,10 +68,13 @@ export interface HydraniumTextDocumentsOptions<T extends TextDocument = TextDocu
|
|
|
42
68
|
* separately-tested diff/apply-verify abstraction that owns its own baseline
|
|
43
69
|
* text; folding its storage here would couple a clean utility to this record
|
|
44
70
|
* for no real gain.
|
|
71
|
+
*
|
|
72
|
+
* Returned by the `protected` {@link HydraniumTextDocuments.trackingFor}, so an
|
|
73
|
+
* override has to name it. Restating the shape structurally instead compiles
|
|
74
|
+
* until a field is added here, and then fails at the adopter rather than at the
|
|
75
|
+
* change that caused it.
|
|
45
76
|
*/
|
|
46
|
-
interface
|
|
47
|
-
/** Client ids currently holding this document open (multi-client membership). */
|
|
48
|
-
readonly clients: Set<string>;
|
|
77
|
+
export interface DocumentTrackingRecord {
|
|
49
78
|
/** Author of each version, sparse-indexed by the SHARED (server-assigned) version number. */
|
|
50
79
|
readonly versionAuthors: string[];
|
|
51
80
|
/**
|
|
@@ -68,6 +97,22 @@ interface DocumentTracking {
|
|
|
68
97
|
* record on last close.
|
|
69
98
|
*/
|
|
70
99
|
languageClientUris?: Set<LanguageClientUri>;
|
|
100
|
+
/**
|
|
101
|
+
* The clients whose close of this document was caused by a lost connection
|
|
102
|
+
* and that have not opened it again, each with a stopwatch started at its
|
|
103
|
+
* loss on the store's `Clock`. While the document waits out the revert grace, only an
|
|
104
|
+
* open by one of them within its own
|
|
105
|
+
* {@link HydraniumTextDocumentsOptions.revertGraceMs} of that loss cancels
|
|
106
|
+
* the revert. Every such client counts, not only the last to close: one
|
|
107
|
+
* connection's sessions all end lost together, and any of them may reopen
|
|
108
|
+
* first. Without the time limit, a client that returns late inherits the
|
|
109
|
+
* unsaved text of a holder lost after it. A stopwatch rather than a `now()`
|
|
110
|
+
* reading, because a wall-clock step would otherwise expire a claim early or
|
|
111
|
+
* revive one past its grace, against a grace timer that the step leaves
|
|
112
|
+
* alone. An entry past its grace counts as any other client's and is pruned
|
|
113
|
+
* at the next open of the document.
|
|
114
|
+
*/
|
|
115
|
+
lostClients?: Map<string, Stopwatch>;
|
|
71
116
|
}
|
|
72
117
|
/**
|
|
73
118
|
* A document held open by at least one client, with the client ids holding it —
|
|
@@ -79,13 +124,33 @@ export interface OpenDocument {
|
|
|
79
124
|
/** Client ids currently holding the document open (never empty). */
|
|
80
125
|
readonly clients: readonly string[];
|
|
81
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* What {@link HydraniumTextDocuments.commitRepair} did with an integrity repair.
|
|
129
|
+
*
|
|
130
|
+
* Three outcomes rather than a document-or-nothing, because the two ways of
|
|
131
|
+
* getting nothing call for opposite responses: `not-open` means there is no
|
|
132
|
+
* store document to correct and the caller carries on with the one it holds,
|
|
133
|
+
* while `stale` means there IS one and it has moved past the text the repair
|
|
134
|
+
* was computed against — so carrying on would persist a correction over an edit
|
|
135
|
+
* that superseded it. Collapsing them lets the second read as permission to
|
|
136
|
+
* proceed, which is the failure this shape exists to make unrepresentable.
|
|
137
|
+
*/
|
|
138
|
+
export type RepairCommit<T extends TextDocument> = {
|
|
139
|
+
readonly status: 'committed';
|
|
140
|
+
readonly document: T;
|
|
141
|
+
} | {
|
|
142
|
+
readonly status: 'stale';
|
|
143
|
+
} | {
|
|
144
|
+
readonly status: 'not-open';
|
|
145
|
+
};
|
|
82
146
|
/**
|
|
83
147
|
* Where a URI's shared version sequence left off — written once at last-client
|
|
84
148
|
* close, consulted at the next open so the sequence CONTINUES instead of
|
|
85
149
|
* restarting at whatever version id the reopening client declares. One entry
|
|
86
|
-
* of {@link HydraniumTextDocuments.__versionSequences}
|
|
150
|
+
* of {@link HydraniumTextDocuments.__versionSequences} — a `protected` field, so
|
|
151
|
+
* a subclass reading the map has to name what it holds.
|
|
87
152
|
*/
|
|
88
|
-
interface VersionSequence {
|
|
153
|
+
export interface VersionSequence {
|
|
89
154
|
/** The shared version at last-client close. */
|
|
90
155
|
readonly version: number;
|
|
91
156
|
/** {@link contentHash} of the synced text at last-client close. */
|
|
@@ -94,19 +159,20 @@ interface VersionSequence {
|
|
|
94
159
|
/**
|
|
95
160
|
* One text pushed to the LSP textual language client by
|
|
96
161
|
* {@link HydraniumTextDocuments.applyEditToLanguageClient} whose echo has not
|
|
97
|
-
* come back yet. One entry of {@link HydraniumTextDocuments.__pendingPushes}
|
|
162
|
+
* come back yet. One entry of {@link HydraniumTextDocuments.__pendingPushes} —
|
|
163
|
+
* a `protected` field, so a subclass reading the queue has to name what it holds.
|
|
98
164
|
*/
|
|
99
|
-
interface
|
|
165
|
+
export interface PendingLanguageClientPush {
|
|
100
166
|
/**
|
|
101
|
-
* The text the client held BEFORE this push
|
|
102
|
-
*
|
|
103
|
-
*
|
|
167
|
+
* The text the client held BEFORE this push, and therefore the text its
|
|
168
|
+
* echo addresses with its ranges. Wider than the baseline the push's edits
|
|
169
|
+
* were diffed against: a full replace is sent with no diff baseline and
|
|
170
|
+
* still lands on a buffer the echo is keyed to.
|
|
104
171
|
*
|
|
105
|
-
* `undefined` when
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* application is position-independent.
|
|
172
|
+
* `undefined` only when that buffer is unknown — the client never declared
|
|
173
|
+
* one, or a rejection invalidated what was tracked. The echo is then
|
|
174
|
+
* reconstructed against the synced text, which is sound only for a
|
|
175
|
+
* position-independent (full-text) change.
|
|
110
176
|
*/
|
|
111
177
|
readonly before: string | undefined;
|
|
112
178
|
/** {@link contentHash} of the text this push moves the client to. */
|
|
@@ -114,36 +180,50 @@ interface PendingPush {
|
|
|
114
180
|
}
|
|
115
181
|
/**
|
|
116
182
|
* What an incoming language-client change turns out to be once reconstructed
|
|
117
|
-
* against the
|
|
118
|
-
* {@link HydraniumTextDocuments.classifyLanguageClientChange}.
|
|
183
|
+
* against the buffer its ranges address — the return of
|
|
184
|
+
* {@link HydraniumTextDocuments.classifyLanguageClientChange}. That method is
|
|
185
|
+
* `protected`, so an override has to name every arm it can return.
|
|
119
186
|
*/
|
|
120
|
-
type LanguageClientChangeOrigin =
|
|
187
|
+
export type LanguageClientChangeOrigin =
|
|
121
188
|
/** The client is reporting a text we pushed it. The synced document is already there. */
|
|
122
189
|
{
|
|
123
190
|
readonly kind: 'echo';
|
|
124
191
|
}
|
|
125
192
|
/**
|
|
126
|
-
* The client's buffer
|
|
127
|
-
* a
|
|
128
|
-
* reconstructed text is what it now holds, and is authoritative.
|
|
193
|
+
* The client's buffer holds a text we did not push it — a keystroke that
|
|
194
|
+
* raced a push, or an edit to a buffer the store has already been written
|
|
195
|
+
* past. The reconstructed text is what it now holds, and is authoritative.
|
|
129
196
|
*/
|
|
130
197
|
| {
|
|
131
198
|
readonly kind: 'divergent';
|
|
132
199
|
readonly text: string;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The change carries ranges and no known text addresses them, so no
|
|
203
|
+
* reconstruction is offered. Adopting one anyway splices the document and
|
|
204
|
+
* stores an edit nobody made; dropping costs at most the one keystroke the
|
|
205
|
+
* client still holds and the next push contradicts.
|
|
206
|
+
*/
|
|
207
|
+
| {
|
|
208
|
+
readonly kind: 'unreconstructable';
|
|
133
209
|
};
|
|
134
210
|
/**
|
|
135
211
|
* Multi-client text-document tracking on top of Langium's `NormalizedTextDocuments`.
|
|
136
212
|
*
|
|
137
213
|
* Adds the framework features used by the integrity, model-server, and GLSP layers:
|
|
138
|
-
* - Per-document client membership (multiple clients can attach to the same
|
|
214
|
+
* - Per-document client membership (multiple clients can attach to the same
|
|
215
|
+
* URI) and the client-session table, both kept by {@link __sessions}.
|
|
139
216
|
* - A SERVER-OWNED shared version sequence: per-URI, monotonic across
|
|
140
217
|
* close/reopen cycles, advancing exactly when the synced content changes.
|
|
141
218
|
* Client-declared version ids (Monaco's buffer numbering) feed only a
|
|
142
219
|
* per-client staleness guard and never leak into the shared sequence —
|
|
143
220
|
* the two are different things (an editor's edit-operation counter vs the
|
|
144
221
|
* document's content-revision number), and splicing them lets versions drift
|
|
145
|
-
* silently past
|
|
222
|
+
* silently past based-on gate holders.
|
|
146
223
|
* - Version-author history so each edit is attributable to its originating client.
|
|
224
|
+
* - The revert to disk once no client has a document open, for every head
|
|
225
|
+
* ({@link revertToDisk}), deferred by
|
|
226
|
+
* {@link HydraniumTextDocumentsOptions.revertGraceMs} after a lost connection.
|
|
147
227
|
* - Pending-content staging used by the integrity service to thread corrections
|
|
148
228
|
* through `workspace/applyEdit` cycles for currently-closed documents.
|
|
149
229
|
* - `didOpen` notifications arriving over the LSP connection wait on the
|
|
@@ -154,22 +234,26 @@ type LanguageClientChangeOrigin =
|
|
|
154
234
|
export declare class HydraniumTextDocuments<T extends TextDocument = TextDocument> extends NormalizedTextDocuments<T> {
|
|
155
235
|
protected services: ServerSharedServices;
|
|
156
236
|
/**
|
|
157
|
-
* Per-URI client-facing tracking ({@link
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
|
|
162
|
-
|
|
237
|
+
* Per-URI client-facing tracking ({@link DocumentTrackingRecord}), keyed by
|
|
238
|
+
* canonical URI. One record per URI, so dropping it clears every axis at
|
|
239
|
+
* once. Which client has the document open is kept apart, in
|
|
240
|
+
* {@link __sessions}.
|
|
241
|
+
*/
|
|
242
|
+
protected __documents: Map<CanonicalUri, DocumentTrackingRecord>;
|
|
243
|
+
/**
|
|
244
|
+
* Which client has which document open, and which client ids are registered
|
|
245
|
+
* sessions. Every open-state predicate on this class reads it, so an open
|
|
246
|
+
* recorded anywhere else is invisible to the last-close transition.
|
|
163
247
|
*/
|
|
164
|
-
protected
|
|
248
|
+
protected readonly __sessions: ClientSessionRegistry;
|
|
165
249
|
/**
|
|
166
250
|
* Per-URI shared-version continuity across close/reopen cycles
|
|
167
251
|
* ({@link VersionSequence}), written at last-client close and consulted by
|
|
168
|
-
* the next first-client open. DELIBERATELY outside {@link
|
|
252
|
+
* the next first-client open. DELIBERATELY outside {@link DocumentTrackingRecord}:
|
|
169
253
|
* that record is deleted on last close, while the version sequence must
|
|
170
254
|
* survive it — the shared version is a server-owned, monotonic,
|
|
171
255
|
* advances-iff-content-changes counter that never resets while the server
|
|
172
|
-
* lives. That invariant is what makes an optimistic
|
|
256
|
+
* lives. That invariant is what makes an optimistic based-on gate
|
|
173
257
|
* sound: "version unchanged ⇔ content unchanged", with no false conflicts
|
|
174
258
|
* from close/reopen version resets and no false passes from a reopened
|
|
175
259
|
* sequence coincidentally landing on a stale writer's number.
|
|
@@ -181,7 +265,7 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
181
265
|
/**
|
|
182
266
|
* Texts pushed to the LSP textual language client via
|
|
183
267
|
* {@link applyEditToLanguageClient} whose echoes have not come back yet
|
|
184
|
-
* ({@link
|
|
268
|
+
* ({@link PendingLanguageClientPush}), keyed like the shadow by language-client URI.
|
|
185
269
|
* Outbound pushes and inbound echoes are uncorrelated on the wire; this
|
|
186
270
|
* FIFO is the explicit correlation, and it is what
|
|
187
271
|
* {@link classifyLanguageClientChange} reconstructs against.
|
|
@@ -203,7 +287,7 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
203
287
|
* a pathological echo that never arrives; the memory cost until then is
|
|
204
288
|
* one pre-push text per in-flight push, for milliseconds.
|
|
205
289
|
*/
|
|
206
|
-
protected readonly __pendingPushes: Map<LanguageClientUri,
|
|
290
|
+
protected readonly __pendingPushes: Map<LanguageClientUri, PendingLanguageClientPush[]>;
|
|
207
291
|
/**
|
|
208
292
|
* Tracked text content per URI for the LSP textual language client (Monaco / VS Code).
|
|
209
293
|
* Owned here so {@link applyEditToLanguageClient} can compute minimal `workspace/applyEdit`
|
|
@@ -226,6 +310,10 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
226
310
|
protected readonly __shadow: LanguageClientTextShadow;
|
|
227
311
|
protected readonly tracer: Tracer;
|
|
228
312
|
protected readonly configuration: TextDocumentsConfiguration<T>;
|
|
313
|
+
/** See {@link HydraniumTextDocumentsOptions.revertGraceMs}. */
|
|
314
|
+
protected readonly revertGraceMs: number;
|
|
315
|
+
protected readonly lastOpenClosedEmitter: Emitter<LastOpenClosedEvent>;
|
|
316
|
+
protected readonly languageClientSavedEmitter: Emitter<LanguageClientSavedEvent>;
|
|
229
317
|
constructor(services: ServerSharedServices, options?: HydraniumTextDocumentsOptions<T>);
|
|
230
318
|
create(uri: string, languageId: string, version: number, content: string): T;
|
|
231
319
|
update(document: T, changes: TextDocumentContentChangeEvent[], version: number): T;
|
|
@@ -254,17 +342,98 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
254
342
|
* A content-identical write still fires the change event (rebuild): the
|
|
255
343
|
* authored write's server-side rebuild is correctness-bearing, it just
|
|
256
344
|
* mints no new version — nothing observable changed, so watchers'
|
|
257
|
-
*
|
|
345
|
+
* based-on versions stay valid.
|
|
258
346
|
*
|
|
259
347
|
* Returns the resulting shared version. Throws when the document is not
|
|
260
348
|
* open — callers (`AstDocumentManager.update`) open first.
|
|
261
349
|
*/
|
|
262
350
|
applyContentChange(uri: DocumentUri, text: string, clientId: string): number;
|
|
263
|
-
|
|
351
|
+
/**
|
|
352
|
+
* Close `clientId`'s open of the document. When it was the last open, the
|
|
353
|
+
* document is released and reverts to disk, at once or, for a `'lost'`
|
|
354
|
+
* close, after {@link HydraniumTextDocumentsOptions.revertGraceMs}.
|
|
355
|
+
*/
|
|
356
|
+
notifyDidCloseTextDocument(event: DidCloseTextDocumentParams, clientId?: string, cause?: SessionEndCause): void;
|
|
357
|
+
/**
|
|
358
|
+
* Keep the document, text and all, for the revert grace, then release it.
|
|
359
|
+
* The document stays in the store meanwhile, so a lost client that opens it
|
|
360
|
+
* again within its own grace attaches to it and finds its unsaved text
|
|
361
|
+
* rather than reading disk; see {@link resolvePendingRevert} for any other
|
|
362
|
+
* open.
|
|
363
|
+
*/
|
|
364
|
+
protected deferRelease(uri: CanonicalUri): void;
|
|
365
|
+
/**
|
|
366
|
+
* Resolve the pending revert of `uri` for an open by `clientId`. An open by a
|
|
367
|
+
* client lost from the document within its grace cancels the revert, and
|
|
368
|
+
* the client finds its unsaved text. Any other open releases the document
|
|
369
|
+
* first, so it opens as a first open does: cancelling for every open hands
|
|
370
|
+
* a lost client's unsaved text to whoever opens next, a reloaded page or an
|
|
371
|
+
* editor, with nothing marking it unsaved.
|
|
372
|
+
*/
|
|
373
|
+
protected resolvePendingRevert(uri: CanonicalUri, clientId: string): void;
|
|
374
|
+
/** Drop the entries of {@link DocumentTrackingRecord.lostClients} whose grace has run out. */
|
|
375
|
+
protected pruneLostClients(record: DocumentTrackingRecord): void;
|
|
376
|
+
/**
|
|
377
|
+
* Drop the document no client has open any more, then announce it on
|
|
378
|
+
* {@link onDidCloseLastOpen}, which is what reverts it to disk.
|
|
379
|
+
*/
|
|
380
|
+
protected releaseDocument(uri: CanonicalUri): void;
|
|
381
|
+
/**
|
|
382
|
+
* Rebuild a released document from disk, so the build stops carrying the
|
|
383
|
+
* unsaved text of its last client.
|
|
384
|
+
*
|
|
385
|
+
* Only a `file:` document reverts. A document of another scheme may have
|
|
386
|
+
* been loaded by the adopter into the workspace index, and a rebuild would
|
|
387
|
+
* drop it and break every reference to it.
|
|
388
|
+
*
|
|
389
|
+
* The file's existence is read in its disk queue, so the rebuild follows
|
|
390
|
+
* any save still queued rather than reverting past it. A document with no
|
|
391
|
+
* file behind it — created and never saved, or deleted meanwhile — is
|
|
392
|
+
* removed from the workspace instead: there is no disk text to revert to,
|
|
393
|
+
* and one whose file goes after that read is removed when its rebuild
|
|
394
|
+
* finds none.
|
|
395
|
+
*
|
|
396
|
+
* Whether to revert at all is decided inside the write lock, as its holder:
|
|
397
|
+
* decided before waiting for the lock, a client that opens or re-creates the
|
|
398
|
+
* document meanwhile has its text rebuilt over from disk, or removed. A
|
|
399
|
+
* document some client has open again, or that waits out a new grace, is
|
|
400
|
+
* left to that client.
|
|
401
|
+
*/
|
|
402
|
+
protected revertToDisk(uri: CanonicalUri): Promise<void>;
|
|
264
403
|
notifyWillSaveTextDocument(event: WillSaveTextDocumentParams): void;
|
|
265
404
|
notifyWillSaveTextDocumentWaitUntil(event: WillSaveTextDocumentParams, token: CancellationToken): HandlerResult<TextEdit[], void>;
|
|
405
|
+
/**
|
|
406
|
+
* Handle a save the language client reports: fire
|
|
407
|
+
* {@link onDidSaveInLanguageClient}, then announce it on {@link onDidSave}
|
|
408
|
+
* only once the file read back from disk holds the store's current text.
|
|
409
|
+
*/
|
|
410
|
+
protected notifyLanguageClientSave(event: DidSaveTextDocumentParams): Promise<void>;
|
|
266
411
|
notifyDidSaveTextDocument(event: DidSaveTextDocumentParams, clientId?: string): void;
|
|
412
|
+
/** Fire {@link onDidSave} for `document`, which need not be synced any more. */
|
|
413
|
+
protected announceSave(document: T, clientId: string): void;
|
|
267
414
|
notifyDidOpenTextDocument(event: DidOpenTextDocumentParams, clientId?: string): void;
|
|
415
|
+
/**
|
|
416
|
+
* Record `clientId` as an additional holder of a document another client
|
|
417
|
+
* already has open.
|
|
418
|
+
*
|
|
419
|
+
* Unlike the attach branch of {@link notifyDidOpenTextDocument} this does
|
|
420
|
+
* not refresh. That branch re-renders an attaching TEXTUAL view; a client
|
|
421
|
+
* reaching a document through a non-textual route has nothing to re-render,
|
|
422
|
+
* and refreshing per attach turns each into a Langium rebuild and dependent
|
|
423
|
+
* relink cascade.
|
|
424
|
+
*
|
|
425
|
+
* The staleness guard baselines at the SYNCED version, not a declared buffer
|
|
426
|
+
* version, because a client arriving this way holds no buffer of its own.
|
|
427
|
+
* Unifying the two routes therefore rebaselines a textual client's guard to a
|
|
428
|
+
* version it never declared.
|
|
429
|
+
*
|
|
430
|
+
* Returns whether a hold was added — `false` when `uri` is not open,
|
|
431
|
+
* `clientId` already holds it, or the document was waiting out the revert
|
|
432
|
+
* grace for other clients and was released instead (see
|
|
433
|
+
* {@link resolvePendingRevert}); the caller then opens it anew.
|
|
434
|
+
*/
|
|
435
|
+
attachClient(uri: DocumentUri, clientId: string): boolean;
|
|
436
|
+
protected logClientJoined(uri: DocumentUri, clientId: string, version: number, existingClients: readonly string[]): void;
|
|
268
437
|
refreshContent(uri: DocumentUri, clientId: string): void;
|
|
269
438
|
/**
|
|
270
439
|
* The canonical key a document is stored under — the single point this store
|
|
@@ -273,7 +442,7 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
273
442
|
* two URIs for one physical file (a symlink path and its real path) into a
|
|
274
443
|
* single registration — dedup at the editor layer, not just in
|
|
275
444
|
* `LangiumDocuments`. The URI the client opened under is preserved separately
|
|
276
|
-
* for egress addressing (see {@link
|
|
445
|
+
* for egress addressing (see {@link DocumentTrackingRecord.languageClientUris}). The
|
|
277
446
|
* policy is always bound (the framework defaults it to
|
|
278
447
|
* `DefaultDocumentUriPolicy`, where canonical ≡ syntactic normalize).
|
|
279
448
|
*/
|
|
@@ -288,7 +457,7 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
288
457
|
*/
|
|
289
458
|
protected toLanguageClientUri(uri: string): LanguageClientUri;
|
|
290
459
|
/** Get-or-create the per-URI tracking record. `uri` must already be a {@link documentKey}. */
|
|
291
|
-
protected trackingFor(uri: CanonicalUri):
|
|
460
|
+
protected trackingFor(uri: CanonicalUri): DocumentTrackingRecord;
|
|
292
461
|
setAuthor(uri: DocumentUri, version: number, author: string): void;
|
|
293
462
|
/**
|
|
294
463
|
* Resolve the synced `TextDocument` for `uri`. The store keys documents by
|
|
@@ -313,7 +482,7 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
313
482
|
* `0` for a URI this store has never seen. The shared sequence is
|
|
314
483
|
* server-owned and monotonic across close/reopen cycles, and advances
|
|
315
484
|
* exactly when the synced content changes — which is what makes it a sound
|
|
316
|
-
* optimistic-concurrency token (
|
|
485
|
+
* optimistic-concurrency token (based-on gates): version unchanged ⇔
|
|
317
486
|
* content unchanged.
|
|
318
487
|
*/
|
|
319
488
|
version(uri: DocumentUri): number;
|
|
@@ -334,14 +503,44 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
334
503
|
* workspace-wide builds from hashing every untouched document).
|
|
335
504
|
*/
|
|
336
505
|
reconcileExternalContent(uri: DocumentUri, text: string): number | undefined;
|
|
506
|
+
/**
|
|
507
|
+
* Commit an integrity repair into the OPEN document for `uri`, returning the
|
|
508
|
+
* document that now holds it, or `undefined` when there was nothing here to
|
|
509
|
+
* commit into.
|
|
510
|
+
*
|
|
511
|
+
* The one thing this exists to do is address the store BY URI. A repair
|
|
512
|
+
* reaches the resync as a text-document object, and that object is the
|
|
513
|
+
* store's own only on the LSP path; a document built for an already-open URI
|
|
514
|
+
* through `LangiumDocumentFactory.fromString` carries its own, so writing the
|
|
515
|
+
* repair into it corrects a copy the store does not know about and the editor
|
|
516
|
+
* never sees.
|
|
517
|
+
*
|
|
518
|
+
* `parsedFrom` is the text the repaired AST was parsed from, and a mismatch
|
|
519
|
+
* against the current content REFUSES the commit: the store has moved on,
|
|
520
|
+
* which means an editor change landed after that parse, and committing would
|
|
521
|
+
* overwrite a newer edit with a repair computed against text the user has
|
|
522
|
+
* already replaced. The build that change provokes recomputes the repair.
|
|
523
|
+
*
|
|
524
|
+
* Deliberately NOT compared by version. A separately created document seeds
|
|
525
|
+
* its own numbering, so requiring the two to agree would refuse every commit
|
|
526
|
+
* on the path this exists for. Content is the thing both sides can be held to.
|
|
527
|
+
*
|
|
528
|
+
* A changed text is a new version authored by {@link INTEGRITY_CLIENT_ID}.
|
|
529
|
+
* Kept at the old version, the repair is invisible to every reader keyed on
|
|
530
|
+
* versions: a write based on the unrepaired version passes the based-on gate
|
|
531
|
+
* and replaces the repair, and an echo filter credits the repair to the
|
|
532
|
+
* client whose edit it corrected. No change event is fired: the repair
|
|
533
|
+
* rides the build already under way, and an event would re-enter it.
|
|
534
|
+
*/
|
|
535
|
+
commitRepair(uri: DocumentUri, parsedFrom: string, repaired: string): RepairCommit<T>;
|
|
337
536
|
getAuthor(uri: DocumentUri, version?: number): string | undefined;
|
|
338
537
|
isOpen(uri: DocumentUri): boolean;
|
|
339
538
|
/**
|
|
340
539
|
* True iff any client still holds `uri` open. Distinct from {@link isOpen},
|
|
341
540
|
* which reads `__syncedDocuments` — that map is cleared only AFTER the
|
|
342
541
|
* `onDidClose` event fires for the last client, so `isOpen` returns `true`
|
|
343
|
-
* during the close event itself. `isOpenInAnyClient` reads the
|
|
344
|
-
*
|
|
542
|
+
* during the close event itself. `isOpenInAnyClient` reads the open table
|
|
543
|
+
* ({@link __sessions}), which is updated BEFORE the fire, so an `onDidClose`
|
|
345
544
|
* subscriber that finds this `false` knows the last client just closed and a
|
|
346
545
|
* disk re-read / rebuild can proceed.
|
|
347
546
|
*/
|
|
@@ -351,8 +550,8 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
351
550
|
isOnlyOpenInClient(uri: DocumentUri, client: string): boolean;
|
|
352
551
|
/**
|
|
353
552
|
* Every document currently held open by at least one client, with the client
|
|
354
|
-
* ids holding it. Reads the same
|
|
355
|
-
*
|
|
553
|
+
* ids holding it. Reads the same open table as {@link isOpenInAnyClient}, so
|
|
554
|
+
* it reflects a last-client close immediately.
|
|
356
555
|
*
|
|
357
556
|
* Diagnostics-oriented — the server-state snapshot lists these so an operator
|
|
358
557
|
* can see WHY a document is pinned: a document that lingers here after its
|
|
@@ -360,19 +559,83 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
360
559
|
* under a shedding policy, explains why its CST is never shed).
|
|
361
560
|
*/
|
|
362
561
|
openDocuments(): OpenDocument[];
|
|
562
|
+
/** Fires once a client session has ended, after every document it had open was closed. */
|
|
563
|
+
get onDidCloseSession(): Event<ClientSessionClosedEvent>;
|
|
564
|
+
/**
|
|
565
|
+
* Fires once a document no client has open is released: at its last close,
|
|
566
|
+
* or, for a lost client's last close, when its revert grace runs out,
|
|
567
|
+
* another client opens it, or it is deleted. The document then reverts to
|
|
568
|
+
* disk.
|
|
569
|
+
*/
|
|
570
|
+
get onDidCloseLastOpen(): Event<LastOpenClosedEvent>;
|
|
571
|
+
/**
|
|
572
|
+
* Fires for every save the language client reports of a document it has
|
|
573
|
+
* open: the editor has written the file. {@link onDidSave} follows only
|
|
574
|
+
* when the file holds the store's text.
|
|
575
|
+
*/
|
|
576
|
+
get onDidSaveInLanguageClient(): Event<LanguageClientSavedEvent>;
|
|
577
|
+
/**
|
|
578
|
+
* Whether `uri` is waiting out the revert grace: its last open closed with a
|
|
579
|
+
* lost connection, and it still holds its unsaved text. Such a document is
|
|
580
|
+
* open for no client, yet not closed either, so a caller that would persist
|
|
581
|
+
* a closed document's text to disk treats it as open.
|
|
582
|
+
*/
|
|
583
|
+
isRevertPending(uri: DocumentUri): boolean;
|
|
584
|
+
/**
|
|
585
|
+
* Start a client session under `clientId`. Throws `DuplicateClientIdError`
|
|
586
|
+
* where {@link ClientSessionRegistry.register} refuses the id.
|
|
587
|
+
*/
|
|
588
|
+
registerSession(clientId: string): void;
|
|
589
|
+
/**
|
|
590
|
+
* End the client session `clientId`: close every document it has open, then
|
|
591
|
+
* free the id. Immediate — each close runs the ordinary close path before
|
|
592
|
+
* this returns, with `cause` as its cause. A no-op for an id that is not a
|
|
593
|
+
* registered session.
|
|
594
|
+
*/
|
|
595
|
+
closeSession(clientId: string, cause?: SessionEndCause): void;
|
|
596
|
+
/**
|
|
597
|
+
* The file behind `uri` was deleted: close every open of it except the
|
|
598
|
+
* language client's.
|
|
599
|
+
*
|
|
600
|
+
* The editor's open is left alone because the editor owns it: it keeps the
|
|
601
|
+
* buffer of a deleted file and goes on sending changes for it, and a store
|
|
602
|
+
* that had closed the document would drop every one of them until the editor
|
|
603
|
+
* reopened.
|
|
604
|
+
*/
|
|
605
|
+
notifyDocumentDeleted(uri: DocumentUri): void;
|
|
606
|
+
/**
|
|
607
|
+
* Remove the document for `uri`, closing every open of it first — the
|
|
608
|
+
* editor's included, since the document it would keep editing is gone.
|
|
609
|
+
*
|
|
610
|
+
* The base removes the synced document without consulting the open table,
|
|
611
|
+
* which leaves every open recorded against a document that no longer exists:
|
|
612
|
+
* the store then answers that the URI is open, and the next open attaches to
|
|
613
|
+
* nothing.
|
|
614
|
+
*/
|
|
615
|
+
delete(uri: string | URI | T): void;
|
|
616
|
+
/**
|
|
617
|
+
* A client id as log lines print it. An id containing `#` is cut eight
|
|
618
|
+
* characters after its last `#`, which leaves a minted `label#uuid` as the
|
|
619
|
+
* label and enough of the UUID to tell sessions apart; an id without `#`
|
|
620
|
+
* prints whole. The full id goes out at trace level wherever a session
|
|
621
|
+
* starts or ends.
|
|
622
|
+
*/
|
|
623
|
+
protected formatClientId(clientId: string): string;
|
|
363
624
|
/**
|
|
364
|
-
* Stages integrity-updated content for a
|
|
625
|
+
* Stages integrity-updated content for a document no client holds.
|
|
365
626
|
*
|
|
366
627
|
* When `workspace/applyEdit` targets a closed file, the client opens it from
|
|
367
628
|
* disk (stale) and sends `didOpen` before applying the edit. This staged
|
|
368
629
|
* content is consumed by {@link notifyDidOpenTextDocument} to replace the
|
|
369
630
|
* stale disk text, preventing a brief revert of the integrity update.
|
|
370
631
|
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
*
|
|
374
|
-
*
|
|
375
|
-
*
|
|
632
|
+
* Only a FIRST open consumes it, so stage only for a URI no client holds
|
|
633
|
+
* ({@link isOpenInAnyClient} is `false`). A URI held only through another
|
|
634
|
+
* head is not closed: an editor attaching to it joins the existing entry and
|
|
635
|
+
* never reads the stage, and the last close discards the stage with the
|
|
636
|
+
* tracking record. An entry lingers only if `workspace/applyEdit` fails and
|
|
637
|
+
* the file is never opened — the memory cost is one serialised string per
|
|
638
|
+
* URI.
|
|
376
639
|
*/
|
|
377
640
|
stagePendingContent(uri: DocumentUri, text: string): void;
|
|
378
641
|
/**
|
|
@@ -436,12 +699,17 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
436
699
|
protected recordPendingPush(targetUri: LanguageClientUri, before: string | undefined, newText: string): void;
|
|
437
700
|
/**
|
|
438
701
|
* Decide what an incoming language-client change actually is, by
|
|
439
|
-
* reconstructing the client's resulting buffer against the
|
|
440
|
-
* in flight for
|
|
702
|
+
* reconstructing the client's resulting buffer against the text its ranges
|
|
703
|
+
* address — the pre-push buffer of the OLDEST push still in flight for
|
|
704
|
+
* `clientFacing`, else whatever that client is believed to hold.
|
|
441
705
|
*
|
|
442
|
-
* `undefined` when
|
|
443
|
-
*
|
|
444
|
-
*
|
|
706
|
+
* `undefined` when the client's ranges address the synced text itself —
|
|
707
|
+
* nothing in flight, and no evidence the client holds anything else. That
|
|
708
|
+
* is the ordinary path, and the caller then applies the ranges directly.
|
|
709
|
+
* The two texts part company without a push in flight whenever a client
|
|
710
|
+
* attaches to a document another client has already written: it opened
|
|
711
|
+
* from disk, so applying its ranges to the synced text splices lines they
|
|
712
|
+
* never addressed.
|
|
445
713
|
*
|
|
446
714
|
* **Why the oldest, and why reconstruct at all.** The client applies our
|
|
447
715
|
* pushes in order and echoes each against the buffer it held before that
|
|
@@ -486,5 +754,4 @@ export declare class HydraniumTextDocuments<T extends TextDocument = TextDocumen
|
|
|
486
754
|
dispose(): void;
|
|
487
755
|
};
|
|
488
756
|
}
|
|
489
|
-
export {};
|
|
490
757
|
//# sourceMappingURL=hydranium-text-documents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-text-documents.d.ts","sourceRoot":"","sources":["../../src/documents/hydranium-text-documents.ts"],"names":[],"mappings":"AAAA;;;;;;;;kFAQkF;AAalF,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"hydranium-text-documents.d.ts","sourceRoot":"","sources":["../../src/documents/hydranium-text-documents.ts"],"names":[],"mappings":"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"}
|