@hydranium/core 1.0.0-next.28 → 1.0.0-next.280
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -82
- package/lib/documents/ast-document-manager.d.ts +252 -122
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +290 -130
- package/lib/documents/ast-document-manager.js.map +1 -1
- package/lib/documents/client-ids.d.ts +5 -19
- package/lib/documents/client-ids.d.ts.map +1 -1
- package/lib/documents/client-ids.js +5 -19
- package/lib/documents/client-ids.js.map +1 -1
- package/lib/documents/client-session-errors.d.ts +15 -0
- package/lib/documents/client-session-errors.d.ts.map +1 -0
- package/lib/documents/client-session-errors.js +15 -0
- package/lib/documents/client-session-errors.js.map +1 -0
- package/lib/documents/client-session-registry.d.ts +146 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +207 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- package/lib/documents/dirty-state-tracker.d.ts +101 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +85 -0
- package/lib/documents/dirty-state-tracker.js.map +1 -0
- package/lib/documents/document-release-handler.d.ts +204 -0
- package/lib/documents/document-release-handler.d.ts.map +1 -0
- package/lib/documents/document-release-handler.js +317 -0
- package/lib/documents/document-release-handler.js.map +1 -0
- package/lib/documents/document-release-scheduler.d.ts +67 -0
- package/lib/documents/document-release-scheduler.d.ts.map +1 -0
- package/lib/documents/document-release-scheduler.js +80 -0
- package/lib/documents/document-release-scheduler.js.map +1 -0
- package/lib/documents/file-system-task-queue.d.ts +49 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +34 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +415 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +849 -483
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +10 -2
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +10 -2
- package/lib/documents/index.js.map +1 -1
- package/lib/documents/language-client-shadow.d.ts +218 -0
- package/lib/documents/language-client-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-shadow.js +284 -0
- package/lib/documents/language-client-shadow.js.map +1 -0
- package/lib/documents/model-ledger.d.ts +47 -0
- package/lib/documents/model-ledger.d.ts.map +1 -0
- package/lib/documents/model-ledger.js +30 -0
- package/lib/documents/model-ledger.js.map +1 -0
- package/lib/documents/text-ledger.d.ts +64 -0
- package/lib/documents/text-ledger.d.ts.map +1 -0
- package/lib/documents/text-ledger.js +63 -0
- package/lib/documents/text-ledger.js.map +1 -0
- package/lib/documents/version-sync-service.d.ts +138 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +173 -0
- package/lib/documents/version-sync-service.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts +3 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +60 -22
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts +49 -36
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +91 -45
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +1 -1
- package/lib/langium/composite-ast-reflection.d.ts +46 -0
- package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
- package/lib/langium/composite-ast-reflection.js +97 -0
- package/lib/langium/composite-ast-reflection.js.map +1 -0
- package/lib/langium/config/configuration-provider.d.ts +81 -0
- package/lib/langium/config/configuration-provider.d.ts.map +1 -0
- package/lib/langium/config/configuration-provider.js +112 -0
- package/lib/langium/config/configuration-provider.js.map +1 -0
- package/lib/langium/config/index.d.ts +1 -0
- package/lib/langium/config/index.d.ts.map +1 -1
- package/lib/langium/config/index.js +1 -0
- package/lib/langium/config/index.js.map +1 -1
- package/lib/langium/config/settings.js.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
- package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
- package/lib/langium/diagnostics/log-preamble.js +1 -1
- package/lib/langium/diagnostics/log-preamble.js.map +1 -1
- package/lib/langium/diagnostics/logger.d.ts +10 -3
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +12 -5
- package/lib/langium/diagnostics/logger.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +58 -17
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
- package/lib/langium/diagnostics/server-tracer.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +6 -5
- package/lib/langium/document-builder/build-session.d.ts.map +1 -1
- package/lib/langium/document-builder/build-session.js +5 -5
- package/lib/langium/document-builder/build-session.js.map +1 -1
- package/lib/langium/document-builder/document-builder.d.ts +309 -35
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +511 -75
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
- package/lib/langium/documentation/comment-provider.js.map +1 -1
- package/lib/langium/integration-services.d.ts +40 -24
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +7 -4
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +16 -8
- package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-rule.js.map +1 -1
- package/lib/langium/integrity/integrity-service.d.ts +83 -27
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +273 -63
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/positional-key-provider.js.map +1 -1
- package/lib/langium/labeling/label-provider.d.ts.map +1 -1
- package/lib/langium/labeling/label-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +30 -5
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +18 -4
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +372 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +446 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +2 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +2 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-events.d.ts +66 -0
- package/lib/langium/model-service/model-events.d.ts.map +1 -0
- package/lib/langium/model-service/model-events.js +10 -0
- package/lib/langium/model-service/model-events.js.map +1 -0
- package/lib/langium/model-service/model-service.d.ts +440 -282
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +542 -446
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +158 -37
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -36
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +27 -6
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +4 -3
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -1
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +22 -0
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +13 -6
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +2 -2
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +35 -12
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +23 -57
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
- package/lib/langium/scope/fallback-scope.d.ts +27 -0
- package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
- package/lib/langium/scope/fallback-scope.js +35 -0
- package/lib/langium/scope/fallback-scope.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js +38 -39
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +61 -24
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +74 -35
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/scope/index.d.ts +1 -0
- package/lib/langium/scope/index.d.ts.map +1 -1
- package/lib/langium/scope/index.js +1 -0
- package/lib/langium/scope/index.js.map +1 -1
- package/lib/langium/scope/reference-builder.d.ts.map +1 -1
- package/lib/langium/scope/reference-builder.js.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js +3 -2
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts +41 -37
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +57 -29
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
- package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.js +1 -3
- package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +54 -30
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/serialization/json-serializer.d.ts +8 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js +13 -3
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/serializer.d.ts +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts +4 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +4 -0
- package/lib/langium/serialization/yaml-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +29 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +37 -0
- package/lib/langium/service-registry.js.map +1 -1
- package/lib/langium/shared-services.d.ts +23 -6
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/single-langium-copy.d.ts +22 -0
- package/lib/langium/single-langium-copy.d.ts.map +1 -0
- package/lib/langium/single-langium-copy.js +36 -0
- package/lib/langium/single-langium-copy.js.map +1 -0
- package/lib/langium/transfer/transfer-encoder.d.ts +84 -35
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +34 -23
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +423 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +906 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +43 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +48 -0
- package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
- package/lib/langium/trivia/index.d.ts +14 -0
- package/lib/langium/trivia/index.d.ts.map +1 -0
- package/lib/langium/trivia/index.js +14 -0
- package/lib/langium/trivia/index.js.map +1 -0
- package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
- package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-contribution.js +10 -0
- package/lib/langium/trivia/trivia-contribution.js.map +1 -0
- package/lib/langium/trivia/trivia-preserver.d.ts +50 -0
- package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-preserver.js +10 -0
- package/lib/langium/trivia/trivia-preserver.js.map +1 -0
- package/lib/langium/trivia/trivia-service.d.ts +70 -0
- package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-service.js +56 -0
- package/lib/langium/trivia/trivia-service.js.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/validation/document-validator.d.ts +280 -9
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +453 -8
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.js +1 -1
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +15 -10
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +7 -5
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-not-found.d.ts +23 -0
- package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
- package/lib/langium/workspace/file-not-found.js +31 -0
- package/lib/langium/workspace/file-not-found.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +154 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +102 -13
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +56 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +79 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +109 -9
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +192 -12
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/index-manager.d.ts.map +1 -1
- package/lib/langium/workspace/index-manager.js.map +1 -1
- package/lib/langium/workspace/index.d.ts +1 -0
- package/lib/langium/workspace/index.d.ts.map +1 -1
- package/lib/langium/workspace/index.js +1 -0
- package/lib/langium/workspace/index.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +31 -2
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +13 -5
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +37 -4
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +49 -4
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +7 -9
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +14 -13
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/self-save-registry.d.ts +84 -0
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +33 -22
- package/lib/langium/workspace/self-save-registry.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +49 -15
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +81 -18
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +15 -5
- package/lib/langium/workspace/write-lock-scope.js.map +1 -1
- package/lib/launcher/integrated-server.d.ts +3 -1
- package/lib/launcher/integrated-server.d.ts.map +1 -1
- package/lib/locale/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +106 -82
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +182 -102
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +3 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +3 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +18 -12
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +22 -13
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +4 -1
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +4 -1
- package/lib/messages/index.js.map +1 -1
- package/lib/messages/renderer.d.ts +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/event-loop-monitor.d.ts.map +1 -1
- package/lib/node/event-loop-monitor.js +2 -1
- package/lib/node/event-loop-monitor.js.map +1 -1
- package/lib/node/heap-ceiling.d.ts +61 -0
- package/lib/node/heap-ceiling.d.ts.map +1 -0
- package/lib/node/heap-ceiling.js +72 -0
- package/lib/node/heap-ceiling.js.map +1 -0
- package/lib/node/index.d.ts +1 -1
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -1
- package/lib/node/index.js.map +1 -1
- package/lib/node/latency-from-env.d.ts +1 -1
- package/lib/node/latency-from-env.js +1 -1
- package/lib/node/lint-grammar.js.map +1 -1
- package/lib/node/log-preamble-node.d.ts +5 -3
- package/lib/node/log-preamble-node.d.ts.map +1 -1
- package/lib/node/log-preamble-node.js +13 -10
- package/lib/node/log-preamble-node.js.map +1 -1
- package/lib/node/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +5 -4
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.d.ts +2 -2
- package/lib/node/memory-monitor.d.ts.map +1 -1
- package/lib/node/memory-monitor.js +9 -10
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +60 -9
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +162 -52
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +12 -4
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js +8 -6
- package/lib/node/profile-capture.js.map +1 -1
- package/lib/node/profile-digest.js.map +1 -1
- package/lib/node/profiling-run.d.ts +13 -3
- package/lib/node/profiling-run.d.ts.map +1 -1
- package/lib/node/profiling-run.js +17 -8
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +61 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +80 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/server-diagnostics.js +1 -1
- package/lib/node/server-diagnostics.js.map +1 -1
- package/lib/node/server-state-snapshot.js +4 -4
- package/lib/node/server-state-snapshot.js.map +1 -1
- package/lib/node/socket-launcher.d.ts +20 -4
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +8 -7
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/stdio-launcher.d.ts +10 -10
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +17 -9
- package/lib/node/stdio-launcher.js.map +1 -1
- package/lib/testing/document-uri-policy-conformance.js +1 -1
- package/lib/testing/document-uri-policy-conformance.js.map +1 -1
- package/lib/testing/fake-description.js.map +1 -1
- package/lib/testing/fake-document.d.ts +16 -4
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js +18 -3
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/index.d.ts.map +1 -1
- package/lib/testing/index.js +2 -1
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/langium-test-helpers.d.ts.map +1 -1
- package/lib/testing/langium-test-helpers.js +1 -0
- package/lib/testing/langium-test-helpers.js.map +1 -1
- package/lib/testing/make-noop-language-services.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +72 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +42 -10
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/make-test-tracer.d.ts +12 -0
- package/lib/testing/make-test-tracer.d.ts.map +1 -1
- package/lib/testing/make-test-tracer.js +13 -0
- package/lib/testing/make-test-tracer.js.map +1 -1
- package/lib/testing/node/applied-edit-capture.d.ts +29 -0
- package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
- package/lib/testing/node/applied-edit-capture.js +115 -0
- package/lib/testing/node/applied-edit-capture.js.map +1 -0
- package/lib/testing/node/golden-corpus.js.map +1 -1
- package/lib/testing/node/index.d.ts +1 -0
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +1 -0
- package/lib/testing/node/index.js.map +1 -1
- package/lib/testing/node/lsp-harness.d.ts.map +1 -1
- package/lib/testing/node/lsp-harness.js +2 -0
- package/lib/testing/node/lsp-harness.js.map +1 -1
- package/lib/testing/node/lsp-server-connection.d.ts +12 -4
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +45 -106
- package/lib/testing/node/lsp-server-connection.js.map +1 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +10 -5
- package/lib/testing/node/scratch-workspace.js.map +1 -1
- package/lib/testing/node/spawned-server.d.ts +30 -1
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +39 -2
- package/lib/testing/node/spawned-server.js.map +1 -1
- package/lib/testing/node/unhandled-rejections.d.ts +20 -0
- package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
- package/lib/testing/node/unhandled-rejections.js +32 -0
- package/lib/testing/node/unhandled-rejections.js.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
- package/lib/testing/playwright/e2e-profiling.js.map +1 -1
- package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
- package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
- package/lib/testing/playwright/flaky-network-proxy.js +164 -0
- package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
- package/lib/testing/playwright/index.d.ts +1 -0
- package/lib/testing/playwright/index.d.ts.map +1 -1
- package/lib/testing/playwright/index.js +1 -0
- package/lib/testing/playwright/index.js.map +1 -1
- package/lib/testing/playwright/server-log-capture.d.ts +35 -8
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +39 -6
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
- package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-fixture.js +25 -6
- package/lib/testing/playwright/server-log-fixture.js.map +1 -1
- package/lib/testing/playwright/server-log-region.d.ts +15 -0
- package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-region.js +30 -0
- package/lib/testing/playwright/server-log-region.js.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +6 -5
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/run-update-pipeline.js.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +11 -52
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +31 -62
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +33 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +103 -5
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +132 -16
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
- package/lib/testing/stub-index-manager.js.map +1 -1
- package/lib/testing/stub-langium-documents.d.ts +3 -2
- package/lib/testing/stub-langium-documents.d.ts.map +1 -1
- package/lib/testing/stub-langium-documents.js.map +1 -1
- package/lib/testing/stub-model-service.d.ts +9 -8
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +6 -6
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/testing/stub-project-manager.js.map +1 -1
- package/lib/testing/stub-self-save-registry.d.ts +1 -1
- package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
- package/lib/testing/stub-service-registry.d.ts +1 -1
- package/lib/testing/stub-service-registry.js.map +1 -1
- package/lib/testing/stub-writable-file-system.d.ts +1 -1
- package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
- package/lib/testing/stub-writable-file-system.js +2 -1
- package/lib/testing/stub-writable-file-system.js.map +1 -1
- package/lib/util/connection-liveness.d.ts +19 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +61 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +29 -53
- package/src/documents/ast-document-manager.ts +463 -231
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +24 -0
- package/src/documents/client-session-registry.ts +262 -0
- package/src/documents/dirty-state-tracker.ts +167 -0
- package/src/documents/document-release-handler.ts +404 -0
- package/src/documents/document-release-scheduler.ts +121 -0
- package/src/documents/file-system-task-queue.ts +68 -0
- package/src/documents/hydranium-text-documents.ts +968 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +452 -0
- package/src/documents/model-ledger.ts +66 -0
- package/src/documents/text-ledger.ts +112 -0
- package/src/documents/version-sync-service.ts +275 -0
- package/src/index.ts +8 -0
- package/src/langium/ast-extension/ast-extension-service.ts +3 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +95 -52
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +1 -1
- package/src/langium/build-phase-pass/build-phase-pass.ts +1 -1
- package/src/langium/composite-ast-reflection.ts +112 -0
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +12 -5
- package/src/langium/diagnostics/lsp-logger.ts +61 -16
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +616 -73
- package/src/langium/integration-services.ts +59 -28
- package/src/langium/integrity/integrity-rule.ts +16 -8
- package/src/langium/integrity/integrity-service.ts +296 -69
- package/src/langium/keys/containment.ts +87 -0
- package/src/langium/keys/index.ts +1 -0
- package/src/langium/keys/name-based-key-provider.ts +4 -0
- package/src/langium/language-module.ts +49 -8
- package/src/langium/model-service/client-session.ts +702 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +80 -0
- package/src/langium/model-service/model-service.ts +835 -475
- package/src/langium/module.ts +212 -67
- package/src/langium/naming/name-provider.ts +29 -7
- package/src/langium/naming/name-separator-validation.ts +25 -3
- package/src/langium/project/abstract-project-manager.ts +13 -5
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +50 -16
- package/src/langium/scope/fallback-scope.ts +38 -0
- package/src/langium/scope/hydranium-scope-computation.ts +45 -44
- package/src/langium/scope/hydranium-scope-provider.ts +89 -38
- package/src/langium/scope/index.ts +1 -0
- package/src/langium/scope/reference-candidate-provider.ts +6 -5
- package/src/langium/scope/scope-extension-service.ts +74 -59
- package/src/langium/scope/scoped-ast-node-description.ts +1 -3
- package/src/langium/serialization/abstract-serializer.ts +57 -41
- package/src/langium/serialization/json-serializer.ts +14 -3
- package/src/langium/serialization/serializer.ts +1 -1
- package/src/langium/serialization/yaml-serializer.ts +4 -0
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +26 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +102 -45
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +55 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +54 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +528 -13
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +15 -10
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +234 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +117 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +221 -16
- package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +63 -5
- package/src/langium/workspace/persistent-file-system-provider.ts +15 -14
- package/src/langium/workspace/self-save-registry.ts +118 -0
- package/src/langium/workspace/virtual-document.ts +100 -19
- package/src/langium/workspace/write-lock-scope.ts +27 -12
- package/src/launcher/integrated-server.ts +3 -1
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
- package/src/lsp/connection-features.ts +67 -0
- package/src/lsp/diagnostics-connection.ts +56 -0
- package/src/lsp/hydranium-document-update-handler.ts +227 -111
- package/src/lsp/index.ts +3 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +23 -15
- package/src/messages/index.ts +13 -1
- package/src/messages/renderer.ts +212 -0
- package/src/node/event-loop-monitor.ts +2 -1
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -1
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/log-preamble-node.ts +20 -10
- package/src/node/measure-memory.ts +5 -4
- package/src/node/memory-monitor.ts +10 -10
- package/src/node/node-file-system-provider.ts +178 -56
- package/src/node/profile-capture.ts +16 -15
- package/src/node/profiling-run.ts +30 -8
- package/src/node/rename-over-open-readers.ts +94 -0
- package/src/node/server-diagnostics.ts +1 -1
- package/src/node/server-state-snapshot.ts +5 -5
- package/src/node/socket-launcher.ts +27 -11
- package/src/node/stdio-launcher.ts +22 -14
- package/src/testing/document-uri-policy-conformance.ts +1 -1
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/index.ts +2 -1
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +125 -31
- package/src/testing/make-test-tracer.ts +26 -0
- package/src/testing/node/applied-edit-capture.ts +139 -0
- package/src/testing/node/index.ts +1 -0
- package/src/testing/node/lsp-harness.ts +2 -0
- package/src/testing/node/lsp-server-connection.ts +74 -117
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +57 -3
- package/src/testing/node/unhandled-rejections.ts +31 -0
- package/src/testing/parse-semantic-root.ts +1 -1
- package/src/testing/playwright/flaky-network-proxy.ts +240 -0
- package/src/testing/playwright/index.ts +1 -0
- package/src/testing/playwright/server-log-capture.ts +63 -11
- package/src/testing/playwright/server-log-fixture.ts +46 -6
- package/src/testing/playwright/server-log-region.ts +32 -0
- package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
- package/src/testing/run-update-pipeline.ts +6 -5
- package/src/testing/stub-ast-document-manager.ts +47 -128
- package/src/testing/stub-document-builder.ts +133 -18
- package/src/testing/stub-hydranium-text-documents.ts +184 -27
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +11 -10
- package/src/testing/stub-self-save-registry.ts +1 -1
- package/src/testing/stub-service-registry.ts +1 -1
- package/src/testing/stub-writable-file-system.ts +3 -2
- package/src/util/connection-liveness.ts +67 -15
- package/src/util/environment.ts +9 -1
- package/lib/documents/language-client-text-shadow.d.ts +0 -101
- package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
- package/lib/documents/language-client-text-shadow.js +0 -156
- package/lib/documents/language-client-text-shadow.js.map +0 -1
- package/lib/documents/self-save-registry.d.ts +0 -55
- package/lib/documents/self-save-registry.d.ts.map +0 -1
- package/lib/documents/self-save-registry.js.map +0 -1
- package/lib/lsp/instrument-connection.d.ts +0 -36
- package/lib/lsp/instrument-connection.d.ts.map +0 -1
- package/lib/lsp/instrument-connection.js +0 -62
- package/lib/lsp/instrument-connection.js.map +0 -1
- package/lib/node/process-memory.d.ts +0 -66
- package/lib/node/process-memory.d.ts.map +0 -1
- package/lib/node/process-memory.js +0 -252
- package/lib/node/process-memory.js.map +0 -1
- package/src/documents/language-client-text-shadow.ts +0 -175
- package/src/documents/self-save-registry.ts +0 -81
- package/src/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -8,17 +8,17 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
|
|
10
10
|
import { type Harness } from '@hydranium/protocol/testing';
|
|
11
|
-
import {
|
|
11
|
+
import { PassThrough, type TransformCallback } from 'node:stream';
|
|
12
12
|
import { StreamMessageReader, StreamMessageWriter } from 'vscode-jsonrpc/node';
|
|
13
13
|
import { type Connection, ProposedFeatures } from 'vscode-languageserver/node';
|
|
14
|
+
import { withHydraniumLspFeatures } from '../../lsp/connection-features.js';
|
|
15
|
+
import { captureAppliedEdits } from './applied-edit-capture.js';
|
|
14
16
|
// The node `createConnection` from `vscode-languageserver/node` is built for a
|
|
15
17
|
// standalone server PROCESS: it wires `process.exit()` onto the input stream's
|
|
16
18
|
// `end`/`close` events, onto the `exit` notification (via its watchDog), and onto
|
|
17
|
-
// a parent-pid liveness timer
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
// stream (an uncatchable synchronous `ERR_STREAM_DESTROYED`) and/or exits the host
|
|
21
|
-
// test runner. The lower-level common `createConnection(connectionFactory,
|
|
19
|
+
// a parent-pid liveness timer. In-process every one of those is fatal —
|
|
20
|
+
// destroying the streams at teardown trips the `close` handler, which exits the
|
|
21
|
+
// host test runner. The lower-level common `createConnection(connectionFactory,
|
|
22
22
|
// watchDog, features)` form does none of that: it lets us inject a no-op-`exit`
|
|
23
23
|
// WatchDog and build the connection over the in-memory streams, so teardown is the
|
|
24
24
|
// primitive's responsibility alone.
|
|
@@ -27,9 +27,9 @@ import { type Connection, ProposedFeatures } from 'vscode-languageserver/node';
|
|
|
27
27
|
// package map the LSP 3.18 libs ship.)
|
|
28
28
|
import { createConnection, type WatchDog } from 'vscode-languageserver';
|
|
29
29
|
import {
|
|
30
|
-
ApplyWorkspaceEditRequest,
|
|
31
30
|
CompletionRequest,
|
|
32
31
|
DidChangeTextDocumentNotification,
|
|
32
|
+
DidCloseTextDocumentNotification,
|
|
33
33
|
DidOpenTextDocumentNotification,
|
|
34
34
|
HoverRequest,
|
|
35
35
|
InitializeRequest,
|
|
@@ -48,8 +48,7 @@ import {
|
|
|
48
48
|
type Position,
|
|
49
49
|
type ProtocolConnection,
|
|
50
50
|
type PublishDiagnosticsParams,
|
|
51
|
-
type SemanticTokens
|
|
52
|
-
type WorkspaceEdit
|
|
51
|
+
type SemanticTokens
|
|
53
52
|
} from 'vscode-languageserver-protocol/node';
|
|
54
53
|
|
|
55
54
|
/**
|
|
@@ -122,7 +121,7 @@ export interface NextAppliedEditOptions {
|
|
|
122
121
|
* and needed for the same reason: one write can fan out to several pushes.
|
|
123
122
|
*/
|
|
124
123
|
readonly fromIndex?: number;
|
|
125
|
-
/** Reject after this long. Defaults to the
|
|
124
|
+
/** Reject after this long. Defaults to the harness's own timeout, which differs by tier. */
|
|
126
125
|
readonly timeoutMs?: number;
|
|
127
126
|
/**
|
|
128
127
|
* Additional predicate the edit must satisfy. The framework coalesces
|
|
@@ -133,45 +132,9 @@ export interface NextAppliedEditOptions {
|
|
|
133
132
|
readonly match?: (edit: AppliedEdit) => boolean;
|
|
134
133
|
}
|
|
135
134
|
|
|
136
|
-
/** Every URI a {@link WorkspaceEdit} addresses, in `documentChanges` then `changes` order. */
|
|
137
|
-
function editedUris(edit: WorkspaceEdit): string[] {
|
|
138
|
-
const uris: string[] = [];
|
|
139
|
-
for (const change of edit.documentChanges ?? []) {
|
|
140
|
-
if ('textDocument' in change) {
|
|
141
|
-
uris.push(change.textDocument.uri);
|
|
142
|
-
} else if ('oldUri' in change) {
|
|
143
|
-
uris.push(change.oldUri, change.newUri);
|
|
144
|
-
} else {
|
|
145
|
-
uris.push(change.uri);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
uris.push(...Object.keys(edit.changes ?? {}));
|
|
149
|
-
return uris;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/** Every text edit's `newText` in a {@link WorkspaceEdit}, concatenated in edit order. */
|
|
153
|
-
function insertedText(edit: WorkspaceEdit): string {
|
|
154
|
-
const parts: string[] = [];
|
|
155
|
-
for (const change of edit.documentChanges ?? []) {
|
|
156
|
-
if ('edits' in change) {
|
|
157
|
-
for (const textEdit of change.edits) {
|
|
158
|
-
if ('newText' in textEdit) {
|
|
159
|
-
parts.push(textEdit.newText);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
for (const textEdits of Object.values(edit.changes ?? {})) {
|
|
165
|
-
for (const textEdit of textEdits) {
|
|
166
|
-
parts.push(textEdit.newText);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return parts.join('');
|
|
170
|
-
}
|
|
171
|
-
|
|
172
135
|
/**
|
|
173
|
-
* The in-process LSP transport seam — a real `Connection` over
|
|
174
|
-
*
|
|
136
|
+
* The in-process LSP transport seam — a real `Connection` over a crossed pair
|
|
137
|
+
* of in-memory streams, plus the client side, the diagnostics capture,
|
|
175
138
|
* and the typed request facades — with NO services attached. It is the lower
|
|
176
139
|
* half of `makeLspHarness`, factored out so a caller can OWN the services
|
|
177
140
|
* tree: build the tree around {@link serverConnection} (`createXxxServices({
|
|
@@ -226,6 +189,12 @@ export interface LspServerConnection extends Harness {
|
|
|
226
189
|
* unhandled method.
|
|
227
190
|
*/
|
|
228
191
|
readonly appliedEdits: ReadonlyArray<AppliedEdit>;
|
|
192
|
+
/** Bytes written in each direction of the in-process JSON-RPC wire. */
|
|
193
|
+
readonly wireBytes: () => {
|
|
194
|
+
readonly clientToServer: number;
|
|
195
|
+
readonly serverToClient: number;
|
|
196
|
+
readonly total: number;
|
|
197
|
+
};
|
|
229
198
|
|
|
230
199
|
/**
|
|
231
200
|
* Drive the real LSP `initialize` → `initialized` handshake and return the
|
|
@@ -247,6 +216,8 @@ export interface LspServerConnection extends Harness {
|
|
|
247
216
|
* associates with a language (silent no-diagnostics). `version` defaults to 1.
|
|
248
217
|
*/
|
|
249
218
|
openDocument(uri: string, text: string, languageId: string, version?: number): void;
|
|
219
|
+
/** Send `textDocument/didClose` for a document opened through this harness. */
|
|
220
|
+
closeDocument(uri: string): Promise<void>;
|
|
250
221
|
/** Send `textDocument/didChange` for `uri` as a single full-text replacement at `version`. */
|
|
251
222
|
changeDocument(uri: string, text: string, version: number): void;
|
|
252
223
|
|
|
@@ -293,7 +264,7 @@ export interface LspServerConnection extends Harness {
|
|
|
293
264
|
*
|
|
294
265
|
* **An egress push is asynchronous well past the call that triggers it** —
|
|
295
266
|
* the framework coalesces per URI and drives the sync from a build-phase
|
|
296
|
-
* settle, so a `
|
|
267
|
+
* settle, so a session's `update` resolves long before the push is sent.
|
|
297
268
|
* Record `appliedEdits.length`, drive the edit, then await this; reading the
|
|
298
269
|
* capture on the line after the write proves nothing.
|
|
299
270
|
*/
|
|
@@ -319,6 +290,39 @@ export interface LspServerConnection extends Harness {
|
|
|
319
290
|
dispose(): void;
|
|
320
291
|
}
|
|
321
292
|
|
|
293
|
+
/**
|
|
294
|
+
* A `PassThrough` that counts the bytes written through it. Counting here
|
|
295
|
+
* rather than in a `'data'` listener is what keeps the wire buffering: a
|
|
296
|
+
* listener switches the stream to flowing mode, and a message written before
|
|
297
|
+
* the server calls `listen()` is then delivered to the counter alone and lost.
|
|
298
|
+
*/
|
|
299
|
+
class CountingPassThrough extends PassThrough {
|
|
300
|
+
bytes = 0;
|
|
301
|
+
|
|
302
|
+
override _transform(chunk: Buffer, _encoding: BufferEncoding, callback: TransformCallback): void {
|
|
303
|
+
this.bytes += chunk.length;
|
|
304
|
+
callback(null, chunk);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/** A crossed pair of {@link CountingPassThrough}s, disposed as one. */
|
|
309
|
+
function makeCountingStreamPair(): {
|
|
310
|
+
readonly clientToServer: CountingPassThrough;
|
|
311
|
+
readonly serverToClient: CountingPassThrough;
|
|
312
|
+
dispose(): void;
|
|
313
|
+
} {
|
|
314
|
+
const clientToServer = new CountingPassThrough();
|
|
315
|
+
const serverToClient = new CountingPassThrough();
|
|
316
|
+
return {
|
|
317
|
+
clientToServer,
|
|
318
|
+
serverToClient,
|
|
319
|
+
dispose(): void {
|
|
320
|
+
clientToServer.destroy();
|
|
321
|
+
serverToClient.destroy();
|
|
322
|
+
}
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
|
|
322
326
|
/**
|
|
323
327
|
* Build the in-process LSP transport seam (server `Connection` + client + wire +
|
|
324
328
|
* diagnostics capture + typed facades) WITHOUT attaching a server. The caller
|
|
@@ -331,7 +335,7 @@ export interface LspServerConnection extends Harness {
|
|
|
331
335
|
* additional protocol heads (data-server, GLSP) onto the same `shared` services.
|
|
332
336
|
*/
|
|
333
337
|
export function makeLspServerConnection(): LspServerConnection {
|
|
334
|
-
const pair =
|
|
338
|
+
const pair = makeCountingStreamPair();
|
|
335
339
|
|
|
336
340
|
// No-op watchDog: in-process, no LSP lifecycle event (parent-pid liveness, the
|
|
337
341
|
// `exit` notification, …) may exit the host test runner — `dispose()` owns
|
|
@@ -347,11 +351,15 @@ export function makeLspServerConnection(): LspServerConnection {
|
|
|
347
351
|
logger =>
|
|
348
352
|
createProtocolConnection(new StreamMessageReader(pair.clientToServer), new StreamMessageWriter(pair.serverToClient), logger),
|
|
349
353
|
watchDog,
|
|
350
|
-
ProposedFeatures.all
|
|
354
|
+
withHydraniumLspFeatures(ProposedFeatures.all)
|
|
351
355
|
);
|
|
352
356
|
|
|
353
357
|
// Client side mirrors the directions: reads serverToClient, writes clientToServer.
|
|
354
|
-
const client = createProtocolConnection(
|
|
358
|
+
const client = createProtocolConnection(
|
|
359
|
+
new StreamMessageReader(pair.serverToClient),
|
|
360
|
+
new StreamMessageWriter(pair.clientToServer),
|
|
361
|
+
console
|
|
362
|
+
);
|
|
355
363
|
client.listen();
|
|
356
364
|
|
|
357
365
|
const diagnostics: PublishDiagnosticsParams[] = [];
|
|
@@ -381,32 +389,7 @@ export function makeLspServerConnection(): LspServerConnection {
|
|
|
381
389
|
}
|
|
382
390
|
});
|
|
383
391
|
|
|
384
|
-
const
|
|
385
|
-
/**
|
|
386
|
-
* Waiters armed by {@link LspServerConnection.nextAppliedEdit}, fanned out to
|
|
387
|
-
* from the ONE handler below — `vscode-jsonrpc` keeps a single handler per
|
|
388
|
-
* REQUEST type just as it does per notification type, so a second
|
|
389
|
-
* `onRequest` would displace this one and leave the server's `applyEdit`
|
|
390
|
-
* unanswered.
|
|
391
|
-
*/
|
|
392
|
-
const appliedEditWaiters: Array<(edit: AppliedEdit) => boolean> = [];
|
|
393
|
-
let applyEditHandler: (params: ApplyWorkspaceEditParams) => ApplyWorkspaceEditResult = () => ({ applied: true });
|
|
394
|
-
const appliedEditSubscription = client.onRequest(ApplyWorkspaceEditRequest.type, (params: ApplyWorkspaceEditParams) => {
|
|
395
|
-
const edit: AppliedEdit = { params, uris: editedUris(params.edit), text: insertedText(params.edit) };
|
|
396
|
-
// Record BEFORE the handler runs, so a handler that rejects the edit or
|
|
397
|
-
// throws still leaves the push observable — the send is what the egress
|
|
398
|
-
// assertion is about.
|
|
399
|
-
appliedEdits.push(edit);
|
|
400
|
-
for (const waiter of [...appliedEditWaiters]) {
|
|
401
|
-
if (waiter(edit)) {
|
|
402
|
-
const at = appliedEditWaiters.indexOf(waiter);
|
|
403
|
-
if (at >= 0) {
|
|
404
|
-
appliedEditWaiters.splice(at, 1);
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
return applyEditHandler(params);
|
|
409
|
-
});
|
|
392
|
+
const appliedEditCapture = captureAppliedEdits(client, DEFAULT_DIAGNOSTICS_TIMEOUT_MS);
|
|
410
393
|
|
|
411
394
|
let disposed = false;
|
|
412
395
|
|
|
@@ -414,7 +397,12 @@ export function makeLspServerConnection(): LspServerConnection {
|
|
|
414
397
|
serverConnection,
|
|
415
398
|
client,
|
|
416
399
|
diagnostics,
|
|
417
|
-
appliedEdits,
|
|
400
|
+
appliedEdits: appliedEditCapture.appliedEdits,
|
|
401
|
+
wireBytes: () => ({
|
|
402
|
+
clientToServer: pair.clientToServer.bytes,
|
|
403
|
+
serverToClient: pair.serverToClient.bytes,
|
|
404
|
+
total: pair.clientToServer.bytes + pair.serverToClient.bytes
|
|
405
|
+
}),
|
|
418
406
|
|
|
419
407
|
async initialize(params?: Partial<InitializeParams>): Promise<InitializeResult> {
|
|
420
408
|
const initializeParams: InitializeParams = {
|
|
@@ -455,6 +443,10 @@ export function makeLspServerConnection(): LspServerConnection {
|
|
|
455
443
|
});
|
|
456
444
|
},
|
|
457
445
|
|
|
446
|
+
async closeDocument(uri: string): Promise<void> {
|
|
447
|
+
await client.sendNotification(DidCloseTextDocumentNotification.type, { textDocument: { uri } });
|
|
448
|
+
},
|
|
449
|
+
|
|
458
450
|
changeDocument(uri: string, text: string, version: number): void {
|
|
459
451
|
client.sendNotification(DidChangeTextDocumentNotification.type, {
|
|
460
452
|
textDocument: { uri, version },
|
|
@@ -521,51 +513,16 @@ export function makeLspServerConnection(): LspServerConnection {
|
|
|
521
513
|
});
|
|
522
514
|
},
|
|
523
515
|
|
|
524
|
-
nextAppliedEdit
|
|
525
|
-
const options: NextAppliedEditOptions =
|
|
526
|
-
typeof timeoutMsOrOptions === 'number' ? { timeoutMs: timeoutMsOrOptions } : (timeoutMsOrOptions ?? {});
|
|
527
|
-
const timeoutMs = options.timeoutMs ?? DEFAULT_DIAGNOSTICS_TIMEOUT_MS;
|
|
528
|
-
const { fromIndex, match } = options;
|
|
529
|
-
const matches = (edit: AppliedEdit): boolean => edit.uris.includes(uri) && (match?.(edit) ?? true);
|
|
530
|
-
if (fromIndex !== undefined) {
|
|
531
|
-
// Replay from the capture first, for the same reason
|
|
532
|
-
// `nextDiagnostics` does: the push may already have arrived, and a
|
|
533
|
-
// waiter only ever sees later ones.
|
|
534
|
-
const captured = appliedEdits.slice(Math.max(0, fromIndex)).find(matches);
|
|
535
|
-
if (captured) {
|
|
536
|
-
return Promise.resolve(captured);
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
return new Promise<AppliedEdit>((resolve, reject) => {
|
|
540
|
-
const waiter = (edit: AppliedEdit): boolean => {
|
|
541
|
-
if (!matches(edit)) {
|
|
542
|
-
return false;
|
|
543
|
-
}
|
|
544
|
-
clearTimeout(timer);
|
|
545
|
-
resolve(edit);
|
|
546
|
-
return true;
|
|
547
|
-
};
|
|
548
|
-
const timer = setTimeout(() => {
|
|
549
|
-
const at = appliedEditWaiters.indexOf(waiter);
|
|
550
|
-
if (at >= 0) {
|
|
551
|
-
appliedEditWaiters.splice(at, 1);
|
|
552
|
-
}
|
|
553
|
-
reject(new Error(`Timed out waiting for a workspace/applyEdit addressing ${uri}`));
|
|
554
|
-
}, timeoutMs);
|
|
555
|
-
appliedEditWaiters.push(waiter);
|
|
556
|
-
});
|
|
557
|
-
},
|
|
516
|
+
nextAppliedEdit: appliedEditCapture.nextAppliedEdit,
|
|
558
517
|
|
|
559
|
-
setApplyEditHandler
|
|
560
|
-
applyEditHandler = handler;
|
|
561
|
-
},
|
|
518
|
+
setApplyEditHandler: appliedEditCapture.setApplyEditHandler,
|
|
562
519
|
|
|
563
520
|
dispose(): void {
|
|
564
521
|
if (disposed) {
|
|
565
522
|
return;
|
|
566
523
|
}
|
|
567
524
|
disposed = true;
|
|
568
|
-
|
|
525
|
+
appliedEditCapture.dispose();
|
|
569
526
|
diagnosticsSubscription.dispose();
|
|
570
527
|
client.dispose();
|
|
571
528
|
serverConnection.dispose();
|
|
@@ -14,15 +14,15 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Any test that drives a **write path** needs one, and the reason is not
|
|
16
16
|
* obvious enough to rediscover per suite. The writes themselves are usually
|
|
17
|
-
* in-memory — `
|
|
17
|
+
* in-memory — a session's `update` goes to the multi-client text store, and
|
|
18
18
|
* only `save` reaches disk — but a rebuild also runs the integrity rules, and
|
|
19
19
|
* their default `'silent'` sync mode persists repairs through
|
|
20
20
|
* `WritableFileSystemProvider.writeFile`. So a write-path test pointed at a
|
|
21
21
|
* committed sample workspace can **rewrite the sample files**, after which
|
|
22
22
|
* every later run asserts against already-repaired input: a suite that passes
|
|
23
23
|
* while testing nothing. The same applies to a fixture built in place, which
|
|
24
|
-
* additionally
|
|
25
|
-
* through
|
|
24
|
+
* additionally comes back in the serializer's layout, because the write-back
|
|
25
|
+
* goes through it.
|
|
26
26
|
*
|
|
27
27
|
* The second reason is cleanup. Hand-rolled `mkdtempSync` without a matching
|
|
28
28
|
* `rmSync` leaks a directory per test run into the OS temp dir, which nobody
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
*/
|
|
50
50
|
|
|
51
51
|
import { URI } from '@hydranium/langium';
|
|
52
|
-
import { cpSync, mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
52
|
+
import { cpSync, mkdirSync, mkdtempSync, realpathSync, rmSync, writeFileSync } from 'node:fs';
|
|
53
53
|
import { tmpdir } from 'node:os';
|
|
54
54
|
import * as path from 'node:path';
|
|
55
55
|
|
|
@@ -106,7 +106,12 @@ export interface ScratchWorkspace {
|
|
|
106
106
|
* returned {@link ScratchWorkspace.dispose} with an `afterEach`.
|
|
107
107
|
*/
|
|
108
108
|
export function makeScratchWorkspace(options: ScratchWorkspaceOptions = {}): ScratchWorkspace {
|
|
109
|
-
|
|
109
|
+
// RESOLVED, because `tmpdir()` can itself be a symlink — on macOS it answers
|
|
110
|
+
// `/tmp`, which links to `/private/tmp`. A root the server canonicalises to a
|
|
111
|
+
// different path than the one it was handed registers documents under one
|
|
112
|
+
// spelling and reads them under the other, failing initialization with an
|
|
113
|
+
// ENOENT that names neither the link nor this call.
|
|
114
|
+
const root = realpathSync(mkdtempSync(path.join(tmpdir(), options.prefix ?? 'hydranium-scratch-')));
|
|
110
115
|
if (options.seed) {
|
|
111
116
|
cpSync(options.seed, root, { recursive: true });
|
|
112
117
|
}
|
|
@@ -61,7 +61,8 @@ import {
|
|
|
61
61
|
type ProtocolConnection,
|
|
62
62
|
type PublishDiagnosticsParams
|
|
63
63
|
} from 'vscode-languageserver-protocol/node';
|
|
64
|
-
import {
|
|
64
|
+
import { captureAppliedEdits } from './applied-edit-capture.js';
|
|
65
|
+
import { type AppliedEdit, type NextAppliedEditOptions, type NextDiagnosticsOptions } from './lsp-server-connection.js';
|
|
65
66
|
|
|
66
67
|
/**
|
|
67
68
|
* Default bound on the `initialize` handshake, and the reason there is one at
|
|
@@ -195,6 +196,21 @@ export interface SpawnedServer extends Harness {
|
|
|
195
196
|
* whenever one action fans out.
|
|
196
197
|
*/
|
|
197
198
|
nextDiagnostics(uri: string, timeoutMsOrOptions?: number | NextDiagnosticsOptions): Promise<Diagnostic[]>;
|
|
199
|
+
/**
|
|
200
|
+
* Every `workspace/applyEdit` the child sent, in arrival order; append-only,
|
|
201
|
+
* each answered `{ applied: true }` as a real language client does.
|
|
202
|
+
*
|
|
203
|
+
* A Hydranium server mirrors an edit only for a document this connection has
|
|
204
|
+
* opened, so a write to one never sent `didOpen` here produces no entry. A
|
|
205
|
+
* second `applyEdit` handler registered on {@link connection} displaces this
|
|
206
|
+
* capture.
|
|
207
|
+
*/
|
|
208
|
+
readonly appliedEdits: ReadonlyArray<AppliedEdit>;
|
|
209
|
+
/**
|
|
210
|
+
* Resolve with the next captured `workspace/applyEdit` addressing `uri`,
|
|
211
|
+
* with the same `fromIndex` and `match` contract as the in-process tier's.
|
|
212
|
+
*/
|
|
213
|
+
nextAppliedEdit(uri: string, timeoutMsOrOptions?: number | NextAppliedEditOptions): Promise<AppliedEdit>;
|
|
198
214
|
/**
|
|
199
215
|
* Graceful `shutdown` / `exit`, each bounded, then `SIGKILL`. Resolves with
|
|
200
216
|
* the child's exit code — `null` when a signal ended it, which is itself the
|
|
@@ -203,6 +219,37 @@ export interface SpawnedServer extends Harness {
|
|
|
203
219
|
dispose(): Promise<number | null>;
|
|
204
220
|
}
|
|
205
221
|
|
|
222
|
+
/**
|
|
223
|
+
* Every server started and not yet disposed, so {@link disposeSpawnedServers}
|
|
224
|
+
* can reach one a test forgot.
|
|
225
|
+
*
|
|
226
|
+
* Holds the server — and through it the `ChildProcess` — rather than a pid. A
|
|
227
|
+
* pid identifies a process only while that process is alive: once it exits the
|
|
228
|
+
* OS may reissue the number, and Windows does so within seconds. A teardown
|
|
229
|
+
* that signalled a recorded pid would therefore reach whatever holds it now,
|
|
230
|
+
* which on a concurrent build is another task's compiler or test runner.
|
|
231
|
+
*/
|
|
232
|
+
const liveServers = new Set<SpawnedServer>();
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Terminate every server this module started that has not been disposed, and
|
|
236
|
+
* forget them.
|
|
237
|
+
*
|
|
238
|
+
* Safe to call when none are outstanding, and safe to call twice. Nothing here
|
|
239
|
+
* can reach a process this module did not spawn, because every kill goes
|
|
240
|
+
* through the `ChildProcess` handle libuv holds and libuv will not signal a
|
|
241
|
+
* child it has already reaped.
|
|
242
|
+
*
|
|
243
|
+
* A suite that disposes each server as it finishes needs this only as a net; a
|
|
244
|
+
* suite that does not needs it, because an orphan holding a port or a pipe
|
|
245
|
+
* makes the NEXT run's verdict meaningless.
|
|
246
|
+
*/
|
|
247
|
+
export async function disposeSpawnedServers(): Promise<void> {
|
|
248
|
+
const outstanding = [...liveServers];
|
|
249
|
+
liveServers.clear();
|
|
250
|
+
await Promise.all(outstanding.map(server => server.dispose()));
|
|
251
|
+
}
|
|
252
|
+
|
|
206
253
|
/** The captured streams, quoted into a boot-failure message. */
|
|
207
254
|
function bootDiagnosis(stdoutPrefix: string, stderr: string): string {
|
|
208
255
|
return (
|
|
@@ -253,7 +300,7 @@ export async function startSpawnedServer(options: SpawnedServerOptions): Promise
|
|
|
253
300
|
}
|
|
254
301
|
});
|
|
255
302
|
|
|
256
|
-
const connection = createProtocolConnection(child.stdout, child.stdin);
|
|
303
|
+
const connection = createProtocolConnection(child.stdout, child.stdin, console);
|
|
257
304
|
const diagnostics: PublishDiagnosticsParams[] = [];
|
|
258
305
|
/**
|
|
259
306
|
* Waiters armed by {@link SpawnedServer.nextDiagnostics}, fanned out to from
|
|
@@ -272,6 +319,7 @@ export async function startSpawnedServer(options: SpawnedServerOptions): Promise
|
|
|
272
319
|
connection.onNotification(LogMessageNotification.type, params => {
|
|
273
320
|
logMessages.push(params);
|
|
274
321
|
});
|
|
322
|
+
const appliedEditCapture = captureAppliedEdits(connection, RESPONSE_TIMEOUT_MS);
|
|
275
323
|
connection.listen();
|
|
276
324
|
|
|
277
325
|
const killTimeoutMs = options.killTimeoutMs ?? DEFAULT_KILL_TIMEOUT_MS;
|
|
@@ -390,7 +438,7 @@ export async function startSpawnedServer(options: SpawnedServerOptions): Promise
|
|
|
390
438
|
return exitCode;
|
|
391
439
|
}
|
|
392
440
|
|
|
393
|
-
|
|
441
|
+
const server: SpawnedServer = {
|
|
394
442
|
connection,
|
|
395
443
|
pid: child.pid,
|
|
396
444
|
initializeResult,
|
|
@@ -439,9 +487,15 @@ export async function startSpawnedServer(options: SpawnedServerOptions): Promise
|
|
|
439
487
|
waiters.add(notify);
|
|
440
488
|
});
|
|
441
489
|
},
|
|
490
|
+
appliedEdits: appliedEditCapture.appliedEdits,
|
|
491
|
+
nextAppliedEdit: appliedEditCapture.nextAppliedEdit,
|
|
442
492
|
dispose(): Promise<number | null> {
|
|
493
|
+
appliedEditCapture.dispose();
|
|
494
|
+
liveServers.delete(server);
|
|
443
495
|
disposal ??= terminate();
|
|
444
496
|
return disposal;
|
|
445
497
|
}
|
|
446
498
|
};
|
|
499
|
+
liveServers.add(server);
|
|
500
|
+
return server;
|
|
447
501
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Run a Node-only assertion while collecting process-level unhandled rejection
|
|
12
|
+
* events. The callback owns the event-loop drain and can therefore choose the
|
|
13
|
+
* right observation window for the operation under test.
|
|
14
|
+
*
|
|
15
|
+
* Inside the window a rejection reaches only the array: while any listener is
|
|
16
|
+
* registered, Node hands none to its default handler and Vitest reports none as
|
|
17
|
+
* an error. A callback that never asserts on the array therefore hides every
|
|
18
|
+
* rejection it provokes.
|
|
19
|
+
*/
|
|
20
|
+
export async function captureUnhandledRejections<T>(callback: (rejections: unknown[]) => Promise<T>): Promise<T> {
|
|
21
|
+
const rejections: unknown[] = [];
|
|
22
|
+
const listener = (reason: unknown): void => {
|
|
23
|
+
rejections.push(reason);
|
|
24
|
+
};
|
|
25
|
+
process.on('unhandledRejection', listener);
|
|
26
|
+
try {
|
|
27
|
+
return await callback(rejections);
|
|
28
|
+
} finally {
|
|
29
|
+
process.off('unhandledRejection', listener);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
|
|
56
56
|
import { type AstNode, AstUtils, type LangiumCoreServices, URI } from '@hydranium/langium';
|
|
57
57
|
import { type ParseHelperOptions, parseHelper } from '@hydranium/langium/test';
|
|
58
|
-
import type { WritableFileSystemProvider } from '../
|
|
58
|
+
import type { WritableFileSystemProvider } from '../langium/workspace/file-system-provider.js';
|
|
59
59
|
|
|
60
60
|
/** The one field this module reads off a lexer or parser error. */
|
|
61
61
|
interface ParseErrorMessage {
|