@hydranium/core 1.0.0-next.18 → 1.0.0-next.180
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 +190 -30
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +236 -40
- 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 +187 -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 +447 -82
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +780 -160
- 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-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +60 -22
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +16 -9
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
- package/lib/langium/config/configuration-provider.d.ts +81 -0
- package/lib/langium/config/configuration-provider.d.ts.map +1 -0
- package/lib/langium/config/configuration-provider.js +112 -0
- package/lib/langium/config/configuration-provider.js.map +1 -0
- package/lib/langium/config/index.d.ts +1 -0
- package/lib/langium/config/index.d.ts.map +1 -1
- package/lib/langium/config/index.js +1 -0
- package/lib/langium/config/index.js.map +1 -1
- package/lib/langium/config/settings.js.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.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/diagnostics/server-tracer.d.ts.map +1 -1
- package/lib/langium/diagnostics/server-tracer.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +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 +368 -21
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +641 -47
- 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/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 +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 +58 -13
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +213 -29
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/positional-key-provider.js.map +1 -1
- package/lib/langium/labeling/label-provider.d.ts.map +1 -1
- package/lib/langium/labeling/label-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +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 +307 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +395 -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 +276 -226
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +251 -375
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +144 -35
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +46 -35
- 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/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +9 -2
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +2 -2
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +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/ast-node-description-provider.d.ts.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.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/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.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.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/serialization/json-serializer.d.ts +1 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-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/normalize-empty-strings.d.ts.map +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 +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/validation/validation-contribution-collector.d.ts.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +17 -12
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +10 -9
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-not-found.d.ts +17 -0
- package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
- package/lib/langium/workspace/file-not-found.js +20 -0
- package/lib/langium/workspace/file-not-found.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +84 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +93 -14
- 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-lock.d.ts +43 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +81 -8
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +128 -10
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +25 -2
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +41 -15
- 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/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 +91 -29
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +0 -7
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +0 -7
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/virtual-document.d.ts +48 -15
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +78 -18
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +20 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +12 -4
- package/lib/langium/workspace/write-lock-scope.js.map +1 -1
- package/lib/locale/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +90 -79
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +152 -99
- 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/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 -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/lint-grammar.js.map +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/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +39 -4
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +109 -49
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/process-memory.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/profile-digest.js.map +1 -1
- package/lib/node/profiling-run.d.ts +2 -2
- package/lib/node/profiling-run.d.ts.map +1 -1
- 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 +16 -1
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +4 -3
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/stdio-launcher.d.ts +1 -1
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +1 -1
- package/lib/node/stdio-launcher.js.map +1 -1
- package/lib/testing/document-uri-policy-conformance.js.map +1 -1
- package/lib/testing/fake-description.js.map +1 -1
- package/lib/testing/fake-document.d.ts +16 -4
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js +18 -3
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/index.d.ts.map +1 -1
- package/lib/testing/index.js +1 -0
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/langium-test-helpers.d.ts.map +1 -1
- package/lib/testing/langium-test-helpers.js +1 -0
- package/lib/testing/langium-test-helpers.js.map +1 -1
- package/lib/testing/make-noop-language-services.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +62 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +30 -9
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/make-test-tracer.js.map +1 -1
- package/lib/testing/node/golden-corpus.js.map +1 -1
- package/lib/testing/node/index.d.ts +1 -0
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +1 -0
- package/lib/testing/node/index.js.map +1 -1
- package/lib/testing/node/lsp-harness.d.ts.map +1 -1
- package/lib/testing/node/lsp-harness.js +2 -0
- package/lib/testing/node/lsp-harness.js.map +1 -1
- package/lib/testing/node/lsp-server-connection.d.ts +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/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 +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 +17 -9
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +26 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +57 -4
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +22 -7
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +92 -15
- 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 +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/testing/stub-project-manager.js.map +1 -1
- package/lib/testing/stub-service-registry.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/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +35 -26
- package/src/documents/ast-document-manager.ts +349 -65
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +24 -0
- package/src/documents/client-session-registry.ts +240 -0
- package/src/documents/file-system-task-queue.ts +68 -0
- package/src/documents/hydranium-text-documents.ts +973 -202
- 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 +724 -46
- 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 +229 -30
- 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 +606 -0
- package/src/langium/model-service/index.ts +1 -0
- package/src/langium/model-service/model-service.ts +418 -399
- package/src/langium/module.ts +193 -64
- package/src/langium/naming/name-provider.ts +27 -5
- package/src/langium/naming/name-separator-validation.ts +34 -5
- package/src/langium/project/abstract-project-manager.ts +9 -1
- package/src/langium/project/project-change-event.ts +2 -2
- 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 +17 -12
- package/src/langium/workspace/file-not-found.ts +23 -0
- package/src/langium/workspace/file-system-provider.ts +153 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +34 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +153 -13
- package/src/langium/workspace/in-memory-file-system-provider.ts +47 -16
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +113 -33
- package/src/langium/workspace/persistent-file-system-provider.ts +0 -7
- package/src/langium/workspace/virtual-document.ts +96 -19
- package/src/langium/workspace/write-lock-scope.ts +24 -11
- 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 +182 -106
- 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 +122 -51
- 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 +19 -4
- package/src/node/stdio-launcher.ts +1 -2
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/index.ts +1 -0
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +106 -30
- 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 +28 -21
- package/src/testing/stub-document-builder.ts +83 -17
- package/src/testing/stub-hydranium-text-documents.ts +127 -22
- 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/src/util/environment.ts +9 -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/src/lsp/instrument-connection.ts +0 -66
|
@@ -7,20 +7,21 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { type AstNode } from '@hydranium/langium';
|
|
10
|
+
import { type AstDiagnostic } from '../langium/validation/document-validator.js';
|
|
10
11
|
import { type AstDocumentManager, type AstDocumentUpdatedEvent, type WritableFileSystemProvider } from '../documents/ast-document-manager.js';
|
|
11
12
|
import type { StubHydraniumTextDocuments } from './stub-hydranium-text-documents.js';
|
|
12
13
|
import type { StubLangiumDocuments } from './stub-langium-documents.js';
|
|
13
14
|
/**
|
|
14
15
|
* Minimal stub of {@link AstDocumentManager} for use in test
|
|
15
|
-
* harnesses. Implements just the methods the
|
|
16
|
-
*
|
|
17
|
-
* `
|
|
18
|
-
* underlying stub text
|
|
16
|
+
* harnesses. Implements just the methods the model service and client
|
|
17
|
+
* sessions call (`open` / `close` / `update` / `save` / `isOpen` /
|
|
18
|
+
* `getDocument`);
|
|
19
|
+
* `onSave` / `onClientClosed` forward to the underlying stub text store,
|
|
20
|
+
* `onUpdate` is driven explicitly
|
|
19
21
|
* through {@link StubAstDocumentManager.emitUpdate} because the stub tree runs
|
|
20
22
|
* no build phases to emit from, and the remaining read helpers
|
|
21
|
-
* (`
|
|
22
|
-
*
|
|
23
|
-
* {@link AstDocumentManager}.
|
|
23
|
+
* (`getAuthor`) throw if invoked — tests that need them
|
|
24
|
+
* should wire a richer stub or use the real {@link AstDocumentManager}.
|
|
24
25
|
*
|
|
25
26
|
* Open state is tracked per URI as the set of holding client ids, so a
|
|
26
27
|
* document stays open until its last client closes. The stub forwards
|
|
@@ -36,7 +37,7 @@ import type { StubLangiumDocuments } from './stub-langium-documents.js';
|
|
|
36
37
|
* are still picked so signature drift on them produces a compile
|
|
37
38
|
* error rather than silent divergence.
|
|
38
39
|
*/
|
|
39
|
-
export interface StubAstDocumentManager<TAst extends AstNode, TDiagnostic =
|
|
40
|
+
export interface StubAstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic> extends Pick<AstDocumentManager<TAst, TDiagnostic>, 'open' | 'close' | 'isOpen' | 'update' | 'save' | 'onUpdate' | 'onSave' | 'onClientClosed' | 'getAuthor' | 'getDocument' | 'attributeUpdate'> {
|
|
40
41
|
readonly openClients: Map<string, Set<string>>;
|
|
41
42
|
/**
|
|
42
43
|
* Deliver an update event to every live {@link StubAstDocumentManager.onUpdate}
|
|
@@ -78,5 +79,5 @@ export interface StubAstDocumentManager<TAst extends AstNode, TDiagnostic = unkn
|
|
|
78
79
|
*/
|
|
79
80
|
updateSubscriptions(uri?: string): number;
|
|
80
81
|
}
|
|
81
|
-
export declare function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic =
|
|
82
|
+
export declare function makeStubAstDocumentManager<TAst extends AstNode, TDiagnostic extends AstDiagnostic = AstDiagnostic>(textDocuments: StubHydraniumTextDocuments, fileSystem: Pick<WritableFileSystemProvider, 'writeFile'>, documents?: StubLangiumDocuments<TAst, TDiagnostic>): StubAstDocumentManager<TAst, TDiagnostic>;
|
|
82
83
|
//# sourceMappingURL=stub-ast-document-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-ast-document-manager.d.ts","sourceRoot":"","sources":["../../src/testing/stub-ast-document-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAEJ,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,
|
|
1
|
+
{"version":3,"file":"stub-ast-document-manager.d.ts","sourceRoot":"","sources":["../../src/testing/stub-ast-document-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,OAAO,EAAkC,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAEJ,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAE5B,KAAK,0BAA0B,EACjC,MAAM,sCAAsC,CAAC;AAG9C,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,sBAAsB,CAAC,IAAI,SAAS,OAAO,EAAE,WAAW,SAAS,aAAa,GAAG,aAAa,CAAE,SAAQ,IAAI,CAC1H,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,EACnC,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,UAAU,GACV,QAAQ,GACR,gBAAgB,GAChB,WAAW,GACX,aAAa,GACb,iBAAiB,CACrB;IACE,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC;IAEnF;;;;;;OAMG;IACH,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AAED,wBAAgB,0BAA0B,CAAC,IAAI,SAAS,OAAO,EAAE,WAAW,SAAS,aAAa,GAAG,aAAa,EAC/G,aAAa,EAAE,0BAA0B,EACzC,UAAU,EAAE,IAAI,CAAC,0BAA0B,EAAE,WAAW,CAAC,EACzD,SAAS,CAAC,EAAE,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,GACnD,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,CAsH3C"}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { UriUtils } from '@hydranium/langium';
|
|
10
10
|
import { Disposable } from 'vscode-languageserver';
|
|
11
|
+
import { AstDocument } from '../documents/ast-document-manager.js';
|
|
12
|
+
import { UNKNOWN_CLIENT_ID } from '../documents/client-ids.js';
|
|
11
13
|
export function makeStubAstDocumentManager(textDocuments, fileSystem, documents) {
|
|
12
14
|
const openClients = new Map();
|
|
13
15
|
// Keyed by the URI as given, not canonicalized: the stub has no URI policy,
|
|
@@ -31,11 +33,15 @@ export function makeStubAstDocumentManager(textDocuments, fileSystem, documents)
|
|
|
31
33
|
clients.add(args.clientId);
|
|
32
34
|
openClients.set(args.uri, clients);
|
|
33
35
|
// The real `open` materialises the synced document (from the payload
|
|
34
|
-
// text or the filesystem)
|
|
35
|
-
//
|
|
36
|
+
// text or the filesystem), or attaches the client to the one that is
|
|
37
|
+
// there; mirror both so a subsequent `update` finds the document open
|
|
38
|
+
// for this client.
|
|
36
39
|
if (!textDocuments.get(args.uri)) {
|
|
37
40
|
textDocuments.seedOpen(args.uri, args.text ?? '', args.clientId);
|
|
38
41
|
}
|
|
42
|
+
else {
|
|
43
|
+
textDocuments.attachClient(args.uri, args.clientId);
|
|
44
|
+
}
|
|
39
45
|
return Disposable.create(() => close({ uri: args.uri, clientId: args.clientId }));
|
|
40
46
|
},
|
|
41
47
|
close,
|
|
@@ -93,7 +99,7 @@ export function makeStubAstDocumentManager(textDocuments, fileSystem, documents)
|
|
|
93
99
|
return;
|
|
94
100
|
}
|
|
95
101
|
listener({
|
|
96
|
-
document:
|
|
102
|
+
document: AstDocument.create(uri, textDocuments.version(uri), undefined),
|
|
97
103
|
sourceClientId: event.clientId
|
|
98
104
|
});
|
|
99
105
|
});
|
|
@@ -108,17 +114,19 @@ export function makeStubAstDocumentManager(textDocuments, fileSystem, documents)
|
|
|
108
114
|
getAuthor() {
|
|
109
115
|
return notSupported('getAuthor');
|
|
110
116
|
},
|
|
117
|
+
// Reports every event as a change by the version's author: the stub
|
|
118
|
+
// tree runs no builds, so there is no delivery to tell a rebuild by. A
|
|
119
|
+
// test of the rebuilt branch replaces this method or uses the real
|
|
120
|
+
// manager.
|
|
121
|
+
attributeUpdate(document) {
|
|
122
|
+
const author = textDocuments.getAuthor(document.textDocument.uri, document.textDocument.version) ?? UNKNOWN_CLIENT_ID;
|
|
123
|
+
return { reason: 'changed', sourceClientId: author, causedBy: author };
|
|
124
|
+
},
|
|
111
125
|
// Canonicalizing document gateway. The stub has no canonicalizer, so it looks
|
|
112
126
|
// the document up in the seeded `StubLangiumDocuments` by its given URI (tests
|
|
113
127
|
// that need real symlink canonicalization wire the real AstDocumentManager).
|
|
114
128
|
getDocument(uri) {
|
|
115
129
|
return documents?.getDocument(UriUtils.toUri(uri));
|
|
116
|
-
},
|
|
117
|
-
isDirectChange() {
|
|
118
|
-
return notSupported('isDirectChange');
|
|
119
|
-
},
|
|
120
|
-
async readFile(uri) {
|
|
121
|
-
return notSupported(`readFile(${uri})`);
|
|
122
130
|
}
|
|
123
131
|
};
|
|
124
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-ast-document-manager.js","sourceRoot":"","sources":["../../src/testing/stub-ast-document-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAsC,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"stub-ast-document-manager.js","sourceRoot":"","sources":["../../src/testing/stub-ast-document-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { type DocumentBuilder, type DocumentState, type LangiumDocument, type URI } from '@hydranium/langium';
|
|
9
|
+
import { type DocumentBuilder, type DocumentState, type LangiumDocument, type URI, type WorkspaceLock } from '@hydranium/langium';
|
|
10
10
|
import { type CancellationToken } from 'vscode-languageserver';
|
|
11
|
+
import { type HydraniumDocumentBuilder } from '../langium/document-builder/document-builder.js';
|
|
11
12
|
/** Recorded call to a stubbed {@link DocumentBuilder} method. */
|
|
12
13
|
export interface RecordedBuilderCall<TArgs extends unknown[]> {
|
|
13
14
|
readonly args: TArgs;
|
|
@@ -34,8 +35,7 @@ export interface StubWaitUntilGate {
|
|
|
34
35
|
}
|
|
35
36
|
/**
|
|
36
37
|
* Stub for Langium's {@link DocumentBuilder}. Implements the slice production
|
|
37
|
-
* code reads
|
|
38
|
-
* `onDocumentPhase` / `onUpdate`) plus test-only helpers:
|
|
38
|
+
* code reads on the framework's test paths, plus test-only helpers:
|
|
39
39
|
*
|
|
40
40
|
* - {@link firePhase} — synchronously dispatch the registered phase
|
|
41
41
|
* listener(s) for a document, simulating a build completing.
|
|
@@ -53,13 +53,14 @@ export interface StubWaitUntilGate {
|
|
|
53
53
|
* Picks the methods the framework reads from {@link DocumentBuilder} on
|
|
54
54
|
* the slot path — the compiler enforces those signatures stay aligned.
|
|
55
55
|
* `update`, `onDocumentPhase`, `onUpdate`, and `waitUntil` carry stubbed
|
|
56
|
-
* implementations
|
|
57
|
-
*
|
|
58
|
-
*
|
|
56
|
+
* implementations, and `scheduleUpdate` calls `update` in one lock write per
|
|
57
|
+
* call (see {@link makeStubDocumentBuilder}); `build`, `onBuildPhase`, and
|
|
58
|
+
* `resetToState` are implemented as loud-failing `notSupported` throwers
|
|
59
|
+
* so production code that goes through the cast at the bind site (i.e. accesses methods the
|
|
59
60
|
* stub claims but doesn't meaningfully implement) fails with a clear
|
|
60
61
|
* message instead of "undefined is not a function".
|
|
61
62
|
*/
|
|
62
|
-
export interface StubDocumentBuilder extends Pick<DocumentBuilder, 'update' | 'onDocumentPhase' | 'onUpdate' | 'build' | 'onBuildPhase' | 'resetToState'> {
|
|
63
|
+
export interface StubDocumentBuilder extends Pick<DocumentBuilder, 'update' | 'onDocumentPhase' | 'onUpdate' | 'build' | 'onBuildPhase' | 'resetToState' | 'updateBuildOptions'>, Pick<HydraniumDocumentBuilder, 'onDocumentPhaseDelivered' | 'scheduleUpdate'> {
|
|
63
64
|
/**
|
|
64
65
|
* Single-overload stub of {@link DocumentBuilder.waitUntil}. Real has
|
|
65
66
|
* two overloads (`(state, cancelToken?): Promise<void>` and
|
|
@@ -73,13 +74,22 @@ export interface StubDocumentBuilder extends Pick<DocumentBuilder, 'update' | 'o
|
|
|
73
74
|
readonly waitUntilCalls: ReadonlyArray<RecordedBuilderCall<[DocumentState, URI | undefined]>>;
|
|
74
75
|
/**
|
|
75
76
|
* Synchronously fire the phase listener(s) registered for `state` with
|
|
76
|
-
* `document
|
|
77
|
-
*
|
|
78
|
-
*
|
|
77
|
+
* `document`, then, unless `cancelToken` is cancelled, the
|
|
78
|
+
* `onDocumentPhaseDelivered` listeners. `cancelToken` defaults to a
|
|
79
|
+
* non-cancelled token; pass a cancelled token to simulate a build preempted
|
|
80
|
+
* by a concurrent write lock.
|
|
79
81
|
*/
|
|
80
82
|
firePhase(state: DocumentState, document: LangiumDocument, cancelToken?: CancellationToken): void;
|
|
81
83
|
/** Synchronously fire every registered `onUpdate` listener. */
|
|
82
84
|
fireOnUpdate(changed: URI[], deleted: URI[]): void;
|
|
85
|
+
/**
|
|
86
|
+
* Synchronously fire the BUILD-phase listener(s) for `state` with the whole
|
|
87
|
+
* batch. The per-build counterpart of {@link firePhase}: a subject that
|
|
88
|
+
* reports once per build rather than once per document subscribes here, and
|
|
89
|
+
* a stub that only fired {@link firePhase} would leave it silent while
|
|
90
|
+
* looking wired.
|
|
91
|
+
*/
|
|
92
|
+
fireBuildPhase(state: DocumentState, built: LangiumDocument[], cancelToken?: CancellationToken): void;
|
|
83
93
|
/**
|
|
84
94
|
* Hold the next {@link waitUntil} call. The returned handle releases it;
|
|
85
95
|
* the call's return value resolves on the next tick after `resolve` runs.
|
|
@@ -94,6 +104,11 @@ export interface StubDocumentBuilder extends Pick<DocumentBuilder, 'update' | 'o
|
|
|
94
104
|
* want to observe rebuilt state should `set` the new root on the document
|
|
95
105
|
* registry and then call `firePhase` to trigger the framework's post-build
|
|
96
106
|
* read path.
|
|
107
|
+
*
|
|
108
|
+
* `workspaceLock` is the lock `scheduleUpdate` writes under, without the real
|
|
109
|
+
* builder's sharing: pass the services tree's own, so a caller's lock ordering
|
|
110
|
+
* and reentrancy behave as against the real builder. Without one,
|
|
111
|
+
* `scheduleUpdate` records the update unlocked.
|
|
97
112
|
*/
|
|
98
|
-
export declare function makeStubDocumentBuilder(): StubDocumentBuilder;
|
|
113
|
+
export declare function makeStubDocumentBuilder(workspaceLock?: WorkspaceLock): StubDocumentBuilder;
|
|
99
114
|
//# sourceMappingURL=stub-document-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-document-builder.d.ts","sourceRoot":"","sources":["../../src/testing/stub-document-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"stub-document-builder.d.ts","sourceRoot":"","sources":["../../src/testing/stub-document-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,eAAe,EAGpB,KAAK,aAAa,EAElB,KAAK,eAAe,EACpB,KAAK,GAAG,EACR,KAAK,aAAa,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,iBAAiB,EAAc,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAEhG,iEAAiE;AACjE,MAAM,WAAW,mBAAmB,CAAC,KAAK,SAAS,OAAO,EAAE;IACzD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAC/B;;;;;;;OAOG;IACH,OAAO,IAAI,IAAI,CAAC;IAChB,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,mBACd,SACG,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,iBAAiB,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,GAAG,oBAAoB,CAAC,EACnI,IAAI,CAAC,wBAAwB,EAAE,0BAA0B,GAAG,gBAAgB,CAAC;IAChF;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACrE,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACzE,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC,aAAa,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9F;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClG,+DAA+D;IAC/D,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACnD;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACtG;;;OAGG;IACH,iBAAiB,IAAI,iBAAiB,CAAC;IACvC,2EAA2E;IAC3E,KAAK,IAAI,IAAI,CAAC;CAChB;AAqBD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,mBAAmB,CA+J1F"}
|
|
@@ -31,9 +31,16 @@ function reraise(result) {
|
|
|
31
31
|
* want to observe rebuilt state should `set` the new root on the document
|
|
32
32
|
* registry and then call `firePhase` to trigger the framework's post-build
|
|
33
33
|
* read path.
|
|
34
|
+
*
|
|
35
|
+
* `workspaceLock` is the lock `scheduleUpdate` writes under, without the real
|
|
36
|
+
* builder's sharing: pass the services tree's own, so a caller's lock ordering
|
|
37
|
+
* and reentrancy behave as against the real builder. Without one,
|
|
38
|
+
* `scheduleUpdate` records the update unlocked.
|
|
34
39
|
*/
|
|
35
|
-
export function makeStubDocumentBuilder() {
|
|
40
|
+
export function makeStubDocumentBuilder(workspaceLock) {
|
|
36
41
|
const phaseListeners = new Map();
|
|
42
|
+
const deliveredListeners = new Map();
|
|
43
|
+
const buildPhaseListeners = new Map();
|
|
37
44
|
const onUpdateListeners = [];
|
|
38
45
|
const gates = [];
|
|
39
46
|
const updateCalls = [];
|
|
@@ -42,6 +49,9 @@ export function makeStubDocumentBuilder() {
|
|
|
42
49
|
throw new Error(`StubDocumentBuilder.${method} is not implemented; wire a real DocumentBuilder if your test needs it.`);
|
|
43
50
|
};
|
|
44
51
|
const stub = {
|
|
52
|
+
// Langium's own default, so a session write waits for `Validated` here
|
|
53
|
+
// as it does against the real builder.
|
|
54
|
+
updateBuildOptions: { validation: { categories: ['built-in', 'fast'] } },
|
|
45
55
|
get updateCalls() {
|
|
46
56
|
return updateCalls;
|
|
47
57
|
},
|
|
@@ -51,6 +61,9 @@ export function makeStubDocumentBuilder() {
|
|
|
51
61
|
async update(changed, deleted) {
|
|
52
62
|
updateCalls.push({ args: [changed, deleted] });
|
|
53
63
|
},
|
|
64
|
+
scheduleUpdate(changed, deleted) {
|
|
65
|
+
return workspaceLock ? workspaceLock.write(() => stub.update(changed, deleted)) : stub.update(changed, deleted);
|
|
66
|
+
},
|
|
54
67
|
async waitUntil(state, uri) {
|
|
55
68
|
waitUntilCalls.push({ args: [state, uri] });
|
|
56
69
|
const gate = gates.shift();
|
|
@@ -86,15 +99,57 @@ export function makeStubDocumentBuilder() {
|
|
|
86
99
|
onCancellationRequested: () => Disposable.create(() => undefined)
|
|
87
100
|
};
|
|
88
101
|
const listeners = phaseListeners.get(state) ?? [];
|
|
102
|
+
const delivered = deliveredListeners.get(state) ?? [];
|
|
103
|
+
// Taken before the listeners, as the real builder does: one of them
|
|
104
|
+
// may stand in for a write that moves the version on. Read only when
|
|
105
|
+
// someone is told, since many fakes carry no text document.
|
|
106
|
+
const version = delivered.length > 0 ? document.textDocument.version : 0;
|
|
89
107
|
for (const listener of listeners) {
|
|
90
108
|
reraise(listener(document, token));
|
|
91
109
|
}
|
|
110
|
+
if (!token.isCancellationRequested) {
|
|
111
|
+
for (const listener of delivered) {
|
|
112
|
+
listener(document, version);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
onDocumentPhaseDelivered(state, listener) {
|
|
117
|
+
const list = deliveredListeners.get(state) ?? [];
|
|
118
|
+
list.push(listener);
|
|
119
|
+
deliveredListeners.set(state, list);
|
|
120
|
+
return Disposable.create(() => {
|
|
121
|
+
const idx = list.indexOf(listener);
|
|
122
|
+
if (idx >= 0) {
|
|
123
|
+
list.splice(idx, 1);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
92
126
|
},
|
|
93
127
|
fireOnUpdate(changed, deleted) {
|
|
94
128
|
for (const listener of onUpdateListeners.slice()) {
|
|
95
129
|
reraise(listener(changed, deleted));
|
|
96
130
|
}
|
|
97
131
|
},
|
|
132
|
+
onBuildPhase(state, listener) {
|
|
133
|
+
const list = buildPhaseListeners.get(state) ?? [];
|
|
134
|
+
list.push(listener);
|
|
135
|
+
buildPhaseListeners.set(state, list);
|
|
136
|
+
return Disposable.create(() => {
|
|
137
|
+
const idx = list.indexOf(listener);
|
|
138
|
+
if (idx >= 0) {
|
|
139
|
+
list.splice(idx, 1);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
},
|
|
143
|
+
fireBuildPhase(state, built, cancelToken) {
|
|
144
|
+
const token = cancelToken ??
|
|
145
|
+
{
|
|
146
|
+
isCancellationRequested: false,
|
|
147
|
+
onCancellationRequested: () => Disposable.create(() => undefined)
|
|
148
|
+
};
|
|
149
|
+
for (const listener of buildPhaseListeners.get(state) ?? []) {
|
|
150
|
+
reraise(listener(built, token));
|
|
151
|
+
}
|
|
152
|
+
},
|
|
98
153
|
gateNextWaitUntil() {
|
|
99
154
|
let release;
|
|
100
155
|
const entry = {
|
|
@@ -123,14 +178,12 @@ export function makeStubDocumentBuilder() {
|
|
|
123
178
|
build() {
|
|
124
179
|
return notSupported('build');
|
|
125
180
|
},
|
|
126
|
-
onBuildPhase() {
|
|
127
|
-
return notSupported('onBuildPhase');
|
|
128
|
-
},
|
|
129
181
|
resetToState() {
|
|
130
182
|
return notSupported('resetToState');
|
|
131
183
|
},
|
|
132
184
|
reset() {
|
|
133
185
|
phaseListeners.clear();
|
|
186
|
+
deliveredListeners.clear();
|
|
134
187
|
onUpdateListeners.length = 0;
|
|
135
188
|
gates.length = 0;
|
|
136
189
|
updateCalls.length = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-document-builder.js","sourceRoot":"","sources":["../../src/testing/stub-document-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;
|
|
1
|
+
{"version":3,"file":"stub-document-builder.js","sourceRoot":"","sources":["../../src/testing/stub-document-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,9 +22,14 @@ export interface StubTextDocumentEntry {
|
|
|
22
22
|
* reads from on test paths — the content channel
|
|
23
23
|
* (`notifyDidChangeTextDocument` / `applyContentChange` / `version` /
|
|
24
24
|
* `getAuthor`), the open-state probes (`isOpenInLanguageClient` /
|
|
25
|
-
* `isOpenInAnyClient` / `
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* `isOpenInAnyClient` / `isOpenInClient` / `isRevertPending` /
|
|
26
|
+
* `openDocuments`), the push channel
|
|
27
|
+
* to the language client (`applyEditToLanguageClient` / `stagePendingContent`),
|
|
28
|
+
* the save / close notifications, the dirty state (`isDirty` /
|
|
29
|
+
* `onDidChangeDirty` / `updateDiskBaseline`, against a baseline {@link seedOpen}
|
|
30
|
+
* sets and a save that carries its text moves), and the client-session table
|
|
31
|
+
* (`registerSession` / `closeSession` / `onDidCloseSession`), which is a real
|
|
32
|
+
* `ClientSessionRegistry` — plus test-only helpers:
|
|
28
33
|
*
|
|
29
34
|
* - {@link seedOpen} — pre-populate an open document without firing change
|
|
30
35
|
* events. Use to set up a baseline version before exercising an `update`.
|
|
@@ -53,7 +58,7 @@ export interface StubTextDocumentEntry {
|
|
|
53
58
|
* {@link applyContentChange} mirrors the real server-assigned write path:
|
|
54
59
|
* the version steps iff the text differs from the current content.
|
|
55
60
|
*/
|
|
56
|
-
export interface StubHydraniumTextDocuments extends Pick<HydraniumTextDocuments<TextDocument>, 'version' | 'notifyDidChangeTextDocument' | 'applyContentChange' | 'getAuthor' | 'isOpenInLanguageClient' | 'isOpenInAnyClient' | 'applyEditToLanguageClient' | 'stagePendingContent' | 'openDocuments'> {
|
|
61
|
+
export interface StubHydraniumTextDocuments extends Pick<HydraniumTextDocuments<TextDocument>, 'version' | 'notifyDidChangeTextDocument' | 'applyContentChange' | 'getAuthor' | 'isOpenInLanguageClient' | 'isOpenInAnyClient' | 'isRevertPending' | 'applyEditToLanguageClient' | 'stagePendingContent' | 'openDocuments' | 'isOpenInClient' | 'attachClient' | 'registerSession' | 'closeSession' | 'onDidCloseSession' | 'onDidCloseLastOpen' | 'isDirty' | 'onDidChangeDirty' | 'updateDiskBaseline'> {
|
|
57
62
|
/**
|
|
58
63
|
* Stub-tailored read accessor. Returns just the surface the framework's
|
|
59
64
|
* save path reads (`version` + `getText()`), rather than the real `get`'s
|
|
@@ -84,13 +89,23 @@ export interface StubHydraniumTextDocuments extends Pick<HydraniumTextDocuments<
|
|
|
84
89
|
}) => void): Disposable;
|
|
85
90
|
/** Real-shaped close subscription — listener gets {@link ClientTextDocumentChangeEvent}. */
|
|
86
91
|
onDidClose(listener: (event: ClientTextDocumentChangeEvent<TextDocument>) => void): Disposable;
|
|
87
|
-
/** Pre-populate an open document without firing change events. */
|
|
92
|
+
/** Pre-populate an open document without firing change events; `text` is also its disk baseline. */
|
|
88
93
|
seedOpen(uri: string, text: string, clientId: string): void;
|
|
89
94
|
/** Mark `uri` as open in the LSP textual language client (drives {@link isOpenInLanguageClient}). */
|
|
90
95
|
seedOpenInLanguageClient(uri: string): void;
|
|
91
|
-
/**
|
|
96
|
+
/**
|
|
97
|
+
* Synchronously deliver `onDidClose` to subscribers, then `onDidCloseLastOpen`
|
|
98
|
+
* when no client has `uri` open any more. The stub keeps no revert grace, so
|
|
99
|
+
* a last close is announced at once.
|
|
100
|
+
*/
|
|
92
101
|
fireClose(uri: string, clientId: string): void;
|
|
93
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Drop recorded state. Useful for `beforeEach` resets.
|
|
104
|
+
*
|
|
105
|
+
* Sessions end without announcing it, so a model service built on this
|
|
106
|
+
* stub still holds the handles it started before the reset. Build a fresh
|
|
107
|
+
* service after a reset rather than reusing one across it.
|
|
108
|
+
*/
|
|
94
109
|
reset(): void;
|
|
95
110
|
readonly changes: readonly StubTextDocumentEntry[];
|
|
96
111
|
readonly saves: readonly {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-hydranium-text-documents.d.ts","sourceRoot":"","sources":["../../src/testing/stub-hydranium-text-documents.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"stub-hydranium-text-documents.d.ts","sourceRoot":"","sources":["../../src/testing/stub-hydranium-text-documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { Disposable } from 'vscode-languageserver';
|
|
9
|
+
import { Disposable, Emitter } from 'vscode-languageserver';
|
|
10
10
|
import { LANGUAGE_CLIENT_ID } from '../documents/client-ids.js';
|
|
11
|
+
import { ClientSessionRegistry } from '../documents/client-session-registry.js';
|
|
11
12
|
/** Build a {@link StubHydraniumTextDocuments}. */
|
|
12
13
|
export function makeStubHydraniumTextDocuments() {
|
|
13
14
|
const docs = new Map();
|
|
@@ -19,7 +20,31 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
19
20
|
let applyEditHandler = () => ({ applied: true });
|
|
20
21
|
const saveListeners = [];
|
|
21
22
|
const closeListeners = [];
|
|
22
|
-
|
|
23
|
+
// The real registry, so the session table, the opens and the closing state
|
|
24
|
+
// behave as the store's do. The stub's plain-string keys
|
|
25
|
+
// stand in for canonical URIs (one stub-boundary cast, like `fireClose`).
|
|
26
|
+
const sessions = new ClientSessionRegistry();
|
|
27
|
+
const key = (uri) => uri;
|
|
28
|
+
const lastOpenClosed = new Emitter();
|
|
29
|
+
const baselines = new Map();
|
|
30
|
+
const dirty = new Set();
|
|
31
|
+
const dirtyChanged = new Emitter();
|
|
32
|
+
// As the real store: dirty while held with text other than the baseline,
|
|
33
|
+
// announced only when the answer changes.
|
|
34
|
+
const refreshDirty = (uri) => {
|
|
35
|
+
const held = docs.get(uri);
|
|
36
|
+
const now = held !== undefined && held.text !== baselines.get(uri);
|
|
37
|
+
if (now !== dirty.has(uri)) {
|
|
38
|
+
if (now) {
|
|
39
|
+
dirty.add(uri);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
dirty.delete(uri);
|
|
43
|
+
}
|
|
44
|
+
dirtyChanged.fire({ uri: key(uri), dirty: now });
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const stub = {
|
|
23
48
|
get changes() {
|
|
24
49
|
return changes;
|
|
25
50
|
},
|
|
@@ -52,6 +77,7 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
52
77
|
}
|
|
53
78
|
docs.set(event.textDocument.uri, next);
|
|
54
79
|
changes.push(next);
|
|
80
|
+
refreshDirty(event.textDocument.uri);
|
|
55
81
|
},
|
|
56
82
|
applyContentChange(uri, text, clientId) {
|
|
57
83
|
const existing = docs.get(uri);
|
|
@@ -65,9 +91,13 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
65
91
|
const next = changed ? { uri, version: existing.version + 1, text, clientId } : existing;
|
|
66
92
|
docs.set(uri, next);
|
|
67
93
|
changes.push({ uri, version: next.version, text, clientId });
|
|
94
|
+
refreshDirty(uri);
|
|
68
95
|
return next.version;
|
|
69
96
|
},
|
|
70
97
|
notifyDidSaveTextDocument(event, clientId) {
|
|
98
|
+
if (event.text !== undefined) {
|
|
99
|
+
stub.updateDiskBaseline(event.textDocument.uri, event.text);
|
|
100
|
+
}
|
|
71
101
|
saves.push({ uri: event.textDocument.uri, clientId });
|
|
72
102
|
for (const listener of saveListeners.slice()) {
|
|
73
103
|
listener({ document: { uri: event.textDocument.uri }, clientId });
|
|
@@ -100,21 +130,53 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
100
130
|
isOpenInAnyClient(uri) {
|
|
101
131
|
return docs.has(uri) || languageClientOpen.has(uri);
|
|
102
132
|
},
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
133
|
+
isOpenInClient(uri, clientId) {
|
|
134
|
+
return sessions.isOpenIn(key(uri), clientId);
|
|
135
|
+
},
|
|
136
|
+
isRevertPending(uri) {
|
|
137
|
+
return sessions.isRevertPending(key(uri));
|
|
138
|
+
},
|
|
139
|
+
attachClient(uri, clientId) {
|
|
140
|
+
return docs.has(uri) && sessions.addOpen(key(uri), clientId);
|
|
141
|
+
},
|
|
142
|
+
registerSession(clientId) {
|
|
143
|
+
sessions.register(clientId);
|
|
144
|
+
},
|
|
145
|
+
closeSession(clientId) {
|
|
146
|
+
if (!sessions.isRegistered(clientId)) {
|
|
147
|
+
return;
|
|
109
148
|
}
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
149
|
+
try {
|
|
150
|
+
for (const uri of sessions.beginClose(clientId)) {
|
|
151
|
+
stub.fireClose(uri, clientId);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
finally {
|
|
155
|
+
sessions.unregister(clientId);
|
|
114
156
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return
|
|
157
|
+
},
|
|
158
|
+
get onDidCloseSession() {
|
|
159
|
+
return sessions.onDidCloseSession;
|
|
160
|
+
},
|
|
161
|
+
get onDidCloseLastOpen() {
|
|
162
|
+
return lastOpenClosed.event;
|
|
163
|
+
},
|
|
164
|
+
isDirty(uri) {
|
|
165
|
+
return dirty.has(uri);
|
|
166
|
+
},
|
|
167
|
+
get onDidChangeDirty() {
|
|
168
|
+
return dirtyChanged.event;
|
|
169
|
+
},
|
|
170
|
+
updateDiskBaseline(uri, text) {
|
|
171
|
+
if (docs.has(uri)) {
|
|
172
|
+
baselines.set(uri, text);
|
|
173
|
+
refreshDirty(uri);
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
openDocuments() {
|
|
177
|
+
// From the registry that also answers `isOpenInClient`, which both
|
|
178
|
+
// seeding channels feed, so the two never disagree about an open.
|
|
179
|
+
return sessions.openDocuments();
|
|
118
180
|
},
|
|
119
181
|
setApplyEditHandler(handler) {
|
|
120
182
|
applyEditHandler = handler;
|
|
@@ -127,9 +189,12 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
127
189
|
staged.push({ uri, text });
|
|
128
190
|
},
|
|
129
191
|
seedOpen(uri, text, clientId) {
|
|
192
|
+
sessions.addOpen(key(uri), clientId);
|
|
130
193
|
docs.set(uri, { uri, version: 1, text, clientId });
|
|
194
|
+
baselines.set(uri, text);
|
|
131
195
|
},
|
|
132
196
|
seedOpenInLanguageClient(uri) {
|
|
197
|
+
sessions.addOpen(key(uri), LANGUAGE_CLIENT_ID);
|
|
133
198
|
languageClientOpen.add(uri);
|
|
134
199
|
},
|
|
135
200
|
fireClose(uri, clientId) {
|
|
@@ -139,7 +204,9 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
139
204
|
const holder = docs.get(uri);
|
|
140
205
|
if (holder && holder.clientId === clientId) {
|
|
141
206
|
docs.delete(uri);
|
|
207
|
+
refreshDirty(uri);
|
|
142
208
|
}
|
|
209
|
+
const removed = sessions.removeOpen(key(uri), clientId);
|
|
143
210
|
if (clientId === LANGUAGE_CLIENT_ID) {
|
|
144
211
|
languageClientOpen.delete(uri);
|
|
145
212
|
}
|
|
@@ -147,6 +214,9 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
147
214
|
for (const listener of closeListeners.slice()) {
|
|
148
215
|
listener(event);
|
|
149
216
|
}
|
|
217
|
+
if (removed && !sessions.isOpen(key(uri))) {
|
|
218
|
+
lastOpenClosed.fire({ uri: key(uri) });
|
|
219
|
+
}
|
|
150
220
|
},
|
|
151
221
|
reset() {
|
|
152
222
|
docs.clear();
|
|
@@ -155,10 +225,17 @@ export function makeStubHydraniumTextDocuments() {
|
|
|
155
225
|
languageClientOpen.clear();
|
|
156
226
|
appliedEdits.length = 0;
|
|
157
227
|
staged.length = 0;
|
|
228
|
+
baselines.clear();
|
|
229
|
+
dirty.clear();
|
|
158
230
|
saveListeners.length = 0;
|
|
159
231
|
closeListeners.length = 0;
|
|
160
232
|
applyEditHandler = () => ({ applied: true });
|
|
233
|
+
// Cleared in place rather than replaced: a model service built on the
|
|
234
|
+
// stub subscribed to `onDidCloseSession` once, and a new registry would
|
|
235
|
+
// leave that subscription on one nothing fires.
|
|
236
|
+
sessions.clear();
|
|
161
237
|
}
|
|
162
238
|
};
|
|
239
|
+
return stub;
|
|
163
240
|
}
|
|
164
241
|
//# sourceMappingURL=stub-hydranium-text-documents.js.map
|