@hydranium/core 1.0.0-next.10
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/LICENSE +21 -0
- package/README.md +100 -0
- package/lib/documents/ast-document-manager.d.ts +243 -0
- package/lib/documents/ast-document-manager.d.ts.map +1 -0
- package/lib/documents/ast-document-manager.js +302 -0
- package/lib/documents/ast-document-manager.js.map +1 -0
- package/lib/documents/client-ids.d.ts +30 -0
- package/lib/documents/client-ids.d.ts.map +1 -0
- package/lib/documents/client-ids.js +30 -0
- package/lib/documents/client-ids.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +490 -0
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -0
- package/lib/documents/hydranium-text-documents.js +893 -0
- package/lib/documents/hydranium-text-documents.js.map +1 -0
- package/lib/documents/index.d.ts +14 -0
- package/lib/documents/index.d.ts.map +1 -0
- package/lib/documents/index.js +14 -0
- package/lib/documents/index.js.map +1 -0
- package/lib/documents/language-client-text-shadow.d.ts +101 -0
- package/lib/documents/language-client-text-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-text-shadow.js +156 -0
- package/lib/documents/language-client-text-shadow.js.map +1 -0
- package/lib/documents/self-save-registry.d.ts +55 -0
- package/lib/documents/self-save-registry.d.ts.map +1 -0
- package/lib/documents/self-save-registry.js +68 -0
- package/lib/documents/self-save-registry.js.map +1 -0
- package/lib/index.d.ts +38 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +39 -0
- package/lib/index.js.map +1 -0
- package/lib/langium/ast-extension/ast-extension-contribution.d.ts +33 -0
- package/lib/langium/ast-extension/ast-extension-contribution.d.ts.map +1 -0
- package/lib/langium/ast-extension/ast-extension-contribution.js +10 -0
- package/lib/langium/ast-extension/ast-extension-contribution.js.map +1 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts +212 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -0
- package/lib/langium/ast-extension/ast-extension-service.js +181 -0
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -0
- package/lib/langium/ast-extension/ast-node-builder.d.ts +90 -0
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -0
- package/lib/langium/ast-extension/ast-node-builder.js +61 -0
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -0
- package/lib/langium/ast-extension/index.d.ts +12 -0
- package/lib/langium/ast-extension/index.d.ts.map +1 -0
- package/lib/langium/ast-extension/index.js +12 -0
- package/lib/langium/ast-extension/index.js.map +1 -0
- package/lib/langium/bootstrap.d.ts +224 -0
- package/lib/langium/bootstrap.d.ts.map +1 -0
- package/lib/langium/bootstrap.js +512 -0
- package/lib/langium/bootstrap.js.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +77 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.js +102 -0
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +106 -0
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -0
- package/lib/langium/build-phase-pass/build-phase-pass.js +43 -0
- package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -0
- package/lib/langium/build-phase-pass/index.d.ts +11 -0
- package/lib/langium/build-phase-pass/index.d.ts.map +1 -0
- package/lib/langium/build-phase-pass/index.js +11 -0
- package/lib/langium/build-phase-pass/index.js.map +1 -0
- package/lib/langium/config/index.d.ts +10 -0
- package/lib/langium/config/index.d.ts.map +1 -0
- package/lib/langium/config/index.js +10 -0
- package/lib/langium/config/index.js.map +1 -0
- package/lib/langium/config/settings.d.ts +173 -0
- package/lib/langium/config/settings.d.ts.map +1 -0
- package/lib/langium/config/settings.js +196 -0
- package/lib/langium/config/settings.js.map +1 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +109 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.js +153 -0
- package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -0
- package/lib/langium/diagnostics/index.d.ts +14 -0
- package/lib/langium/diagnostics/index.d.ts.map +1 -0
- package/lib/langium/diagnostics/index.js +19 -0
- package/lib/langium/diagnostics/index.js.map +1 -0
- package/lib/langium/diagnostics/log-file-token.d.ts +16 -0
- package/lib/langium/diagnostics/log-file-token.d.ts.map +1 -0
- package/lib/langium/diagnostics/log-file-token.js +25 -0
- package/lib/langium/diagnostics/log-file-token.js.map +1 -0
- package/lib/langium/diagnostics/log-preamble.d.ts +42 -0
- package/lib/langium/diagnostics/log-preamble.d.ts.map +1 -0
- package/lib/langium/diagnostics/log-preamble.js +57 -0
- package/lib/langium/diagnostics/log-preamble.js.map +1 -0
- package/lib/langium/diagnostics/logger.d.ts +104 -0
- package/lib/langium/diagnostics/logger.d.ts.map +1 -0
- package/lib/langium/diagnostics/logger.js +178 -0
- package/lib/langium/diagnostics/logger.js.map +1 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts +76 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -0
- package/lib/langium/diagnostics/lsp-logger.js +223 -0
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -0
- package/lib/langium/diagnostics/server-tracer.d.ts +27 -0
- package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -0
- package/lib/langium/diagnostics/server-tracer.js +66 -0
- package/lib/langium/diagnostics/server-tracer.js.map +1 -0
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +88 -0
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -0
- package/lib/langium/document-builder/build-pipeline-integration.js +151 -0
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -0
- package/lib/langium/document-builder/document-builder.d.ts +405 -0
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -0
- package/lib/langium/document-builder/document-builder.js +729 -0
- package/lib/langium/document-builder/document-builder.js.map +1 -0
- package/lib/langium/document-builder/index.d.ts +12 -0
- package/lib/langium/document-builder/index.d.ts.map +1 -0
- package/lib/langium/document-builder/index.js +12 -0
- package/lib/langium/document-builder/index.js.map +1 -0
- package/lib/langium/document-builder/labeled-phase-listener.d.ts +21 -0
- package/lib/langium/document-builder/labeled-phase-listener.d.ts.map +1 -0
- package/lib/langium/document-builder/labeled-phase-listener.js +15 -0
- package/lib/langium/document-builder/labeled-phase-listener.js.map +1 -0
- package/lib/langium/documentation/comment-provider.d.ts +31 -0
- package/lib/langium/documentation/comment-provider.d.ts.map +1 -0
- package/lib/langium/documentation/comment-provider.js +36 -0
- package/lib/langium/documentation/comment-provider.js.map +1 -0
- package/lib/langium/documentation/index.d.ts +10 -0
- package/lib/langium/documentation/index.d.ts.map +1 -0
- package/lib/langium/documentation/index.js +10 -0
- package/lib/langium/documentation/index.js.map +1 -0
- package/lib/langium/integration-services.d.ts +200 -0
- package/lib/langium/integration-services.d.ts.map +1 -0
- package/lib/langium/integration-services.js +65 -0
- package/lib/langium/integration-services.js.map +1 -0
- package/lib/langium/integrity/index.d.ts +12 -0
- package/lib/langium/integrity/index.d.ts.map +1 -0
- package/lib/langium/integrity/index.js +12 -0
- package/lib/langium/integrity/index.js.map +1 -0
- package/lib/langium/integrity/integrity-contribution.d.ts +42 -0
- package/lib/langium/integrity/integrity-contribution.d.ts.map +1 -0
- package/lib/langium/integrity/integrity-contribution.js +10 -0
- package/lib/langium/integrity/integrity-contribution.js.map +1 -0
- package/lib/langium/integrity/integrity-rule.d.ts +82 -0
- package/lib/langium/integrity/integrity-rule.d.ts.map +1 -0
- package/lib/langium/integrity/integrity-rule.js +52 -0
- package/lib/langium/integrity/integrity-rule.js.map +1 -0
- package/lib/langium/integrity/integrity-service.d.ts +221 -0
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -0
- package/lib/langium/integrity/integrity-service.js +328 -0
- package/lib/langium/integrity/integrity-service.js.map +1 -0
- package/lib/langium/keys/default-element-key-provider.d.ts +19 -0
- package/lib/langium/keys/default-element-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/default-element-key-provider.js +18 -0
- package/lib/langium/keys/default-element-key-provider.js.map +1 -0
- package/lib/langium/keys/element-key-provider.d.ts +106 -0
- package/lib/langium/keys/element-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/element-key-provider.js +25 -0
- package/lib/langium/keys/element-key-provider.js.map +1 -0
- package/lib/langium/keys/index.d.ts +13 -0
- package/lib/langium/keys/index.d.ts.map +1 -0
- package/lib/langium/keys/index.js +13 -0
- package/lib/langium/keys/index.js.map +1 -0
- package/lib/langium/keys/name-based-key-provider.d.ts +99 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/name-based-key-provider.js +134 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -0
- package/lib/langium/keys/positional-key-provider.d.ts +41 -0
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -0
- package/lib/langium/keys/positional-key-provider.js +48 -0
- package/lib/langium/keys/positional-key-provider.js.map +1 -0
- package/lib/langium/labeling/index.d.ts +10 -0
- package/lib/langium/labeling/index.d.ts.map +1 -0
- package/lib/langium/labeling/index.js +10 -0
- package/lib/langium/labeling/index.js.map +1 -0
- package/lib/langium/labeling/label-provider.d.ts +79 -0
- package/lib/langium/labeling/label-provider.d.ts.map +1 -0
- package/lib/langium/labeling/label-provider.js +44 -0
- package/lib/langium/labeling/label-provider.js.map +1 -0
- package/lib/langium/language-module.d.ts +281 -0
- package/lib/langium/language-module.d.ts.map +1 -0
- package/lib/langium/language-module.js +103 -0
- package/lib/langium/language-module.js.map +1 -0
- package/lib/langium/language-types.d.ts +85 -0
- package/lib/langium/language-types.d.ts.map +1 -0
- package/lib/langium/language-types.js +173 -0
- package/lib/langium/language-types.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +10 -0
- package/lib/langium/model-service/index.d.ts.map +1 -0
- package/lib/langium/model-service/index.js +10 -0
- package/lib/langium/model-service/index.js.map +1 -0
- package/lib/langium/model-service/model-service.d.ts +598 -0
- package/lib/langium/model-service/model-service.d.ts.map +1 -0
- package/lib/langium/model-service/model-service.js +889 -0
- package/lib/langium/model-service/model-service.js.map +1 -0
- package/lib/langium/module.d.ts +308 -0
- package/lib/langium/module.d.ts.map +1 -0
- package/lib/langium/module.js +165 -0
- package/lib/langium/module.js.map +1 -0
- package/lib/langium/naming/index.d.ts +11 -0
- package/lib/langium/naming/index.d.ts.map +1 -0
- package/lib/langium/naming/index.js +11 -0
- package/lib/langium/naming/index.js.map +1 -0
- package/lib/langium/naming/name-provider.d.ts +360 -0
- package/lib/langium/naming/name-provider.d.ts.map +1 -0
- package/lib/langium/naming/name-provider.js +240 -0
- package/lib/langium/naming/name-provider.js.map +1 -0
- package/lib/langium/naming/name-separator-validation.d.ts +47 -0
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -0
- package/lib/langium/naming/name-separator-validation.js +61 -0
- package/lib/langium/naming/name-separator-validation.js.map +1 -0
- package/lib/langium/project/abstract-project-manager.d.ts +242 -0
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -0
- package/lib/langium/project/abstract-project-manager.js +545 -0
- package/lib/langium/project/abstract-project-manager.js.map +1 -0
- package/lib/langium/project/index.d.ts +13 -0
- package/lib/langium/project/index.d.ts.map +1 -0
- package/lib/langium/project/index.js +13 -0
- package/lib/langium/project/index.js.map +1 -0
- package/lib/langium/project/project-change-event.d.ts +64 -0
- package/lib/langium/project/project-change-event.d.ts.map +1 -0
- package/lib/langium/project/project-change-event.js +10 -0
- package/lib/langium/project/project-change-event.js.map +1 -0
- package/lib/langium/project/project-manager.d.ts +196 -0
- package/lib/langium/project/project-manager.d.ts.map +1 -0
- package/lib/langium/project/project-manager.js +10 -0
- package/lib/langium/project/project-manager.js.map +1 -0
- package/lib/langium/project/single-project-manager.d.ts +69 -0
- package/lib/langium/project/single-project-manager.d.ts.map +1 -0
- package/lib/langium/project/single-project-manager.js +104 -0
- package/lib/langium/project/single-project-manager.js.map +1 -0
- package/lib/langium/residency/cst-residency-service.d.ts +214 -0
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -0
- package/lib/langium/residency/cst-residency-service.js +349 -0
- package/lib/langium/residency/cst-residency-service.js.map +1 -0
- package/lib/langium/residency/index.d.ts +10 -0
- package/lib/langium/residency/index.d.ts.map +1 -0
- package/lib/langium/residency/index.js +10 -0
- package/lib/langium/residency/index.js.map +1 -0
- package/lib/langium/scope/ast-node-description-provider.d.ts +122 -0
- package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -0
- package/lib/langium/scope/ast-node-description-provider.js +115 -0
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts +163 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.js +220 -0
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-provider.d.ts +411 -0
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -0
- package/lib/langium/scope/hydranium-scope-provider.js +543 -0
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -0
- package/lib/langium/scope/index.d.ts +18 -0
- package/lib/langium/scope/index.d.ts.map +1 -0
- package/lib/langium/scope/index.js +18 -0
- package/lib/langium/scope/index.js.map +1 -0
- package/lib/langium/scope/reference-builder.d.ts +125 -0
- package/lib/langium/scope/reference-builder.d.ts.map +1 -0
- package/lib/langium/scope/reference-builder.js +115 -0
- package/lib/langium/scope/reference-builder.js.map +1 -0
- package/lib/langium/scope/reference-candidate-provider.d.ts +228 -0
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -0
- package/lib/langium/scope/reference-candidate-provider.js +185 -0
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -0
- package/lib/langium/scope/scope-extension-contribution.d.ts +32 -0
- package/lib/langium/scope/scope-extension-contribution.d.ts.map +1 -0
- package/lib/langium/scope/scope-extension-contribution.js +10 -0
- package/lib/langium/scope/scope-extension-contribution.js.map +1 -0
- package/lib/langium/scope/scope-extension-service.d.ts +149 -0
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -0
- package/lib/langium/scope/scope-extension-service.js +94 -0
- package/lib/langium/scope/scope-extension-service.js.map +1 -0
- package/lib/langium/scope/scoped-ast-node-description.d.ts +160 -0
- package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -0
- package/lib/langium/scope/scoped-ast-node-description.js +98 -0
- package/lib/langium/scope/scoped-ast-node-description.js.map +1 -0
- package/lib/langium/scope/tier-specificity.d.ts +47 -0
- package/lib/langium/scope/tier-specificity.d.ts.map +1 -0
- package/lib/langium/scope/tier-specificity.js +83 -0
- package/lib/langium/scope/tier-specificity.js.map +1 -0
- package/lib/langium/serialization/abstract-serializer.d.ts +316 -0
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -0
- package/lib/langium/serialization/abstract-serializer.js +351 -0
- package/lib/langium/serialization/abstract-serializer.js.map +1 -0
- package/lib/langium/serialization/index.d.ts +14 -0
- package/lib/langium/serialization/index.d.ts.map +1 -0
- package/lib/langium/serialization/index.js +14 -0
- package/lib/langium/serialization/index.js.map +1 -0
- package/lib/langium/serialization/json-serializer.d.ts +106 -0
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -0
- package/lib/langium/serialization/json-serializer.js +198 -0
- package/lib/langium/serialization/json-serializer.js.map +1 -0
- package/lib/langium/serialization/serialization-util.d.ts +29 -0
- package/lib/langium/serialization/serialization-util.d.ts.map +1 -0
- package/lib/langium/serialization/serialization-util.js +37 -0
- package/lib/langium/serialization/serialization-util.js.map +1 -0
- package/lib/langium/serialization/serializer.d.ts +66 -0
- package/lib/langium/serialization/serializer.d.ts.map +1 -0
- package/lib/langium/serialization/serializer.js +10 -0
- package/lib/langium/serialization/serializer.js.map +1 -0
- package/lib/langium/serialization/yaml-serializer.d.ts +166 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -0
- package/lib/langium/serialization/yaml-serializer.js +228 -0
- package/lib/langium/serialization/yaml-serializer.js.map +1 -0
- package/lib/langium/service-registry.d.ts +220 -0
- package/lib/langium/service-registry.d.ts.map +1 -0
- package/lib/langium/service-registry.js +258 -0
- package/lib/langium/service-registry.js.map +1 -0
- package/lib/langium/shared-services.d.ts +98 -0
- package/lib/langium/shared-services.d.ts.map +1 -0
- package/lib/langium/shared-services.js +30 -0
- package/lib/langium/shared-services.js.map +1 -0
- package/lib/langium/transfer/index.d.ts +10 -0
- package/lib/langium/transfer/index.d.ts.map +1 -0
- package/lib/langium/transfer/index.js +10 -0
- package/lib/langium/transfer/index.js.map +1 -0
- package/lib/langium/transfer/transfer-encoder.d.ts +294 -0
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -0
- package/lib/langium/transfer/transfer-encoder.js +328 -0
- package/lib/langium/transfer/transfer-encoder.js.map +1 -0
- package/lib/langium/update-rewrite/index.d.ts +14 -0
- package/lib/langium/update-rewrite/index.d.ts.map +1 -0
- package/lib/langium/update-rewrite/index.js +14 -0
- package/lib/langium/update-rewrite/index.js.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts +52 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.js +83 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.js.map +1 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.d.ts +37 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.d.ts.map +1 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.js +51 -0
- package/lib/langium/update-rewrite/semantic-root-rewrite.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.d.ts +42 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.d.ts.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.js +10 -0
- package/lib/langium/update-rewrite/update-rewrite-contribution.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts +89 -0
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite-service.js +75 -0
- package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite.d.ts +59 -0
- package/lib/langium/update-rewrite/update-rewrite.d.ts.map +1 -0
- package/lib/langium/update-rewrite/update-rewrite.js +10 -0
- package/lib/langium/update-rewrite/update-rewrite.js.map +1 -0
- package/lib/langium/validation/document-validator.d.ts +106 -0
- package/lib/langium/validation/document-validator.d.ts.map +1 -0
- package/lib/langium/validation/document-validator.js +118 -0
- package/lib/langium/validation/document-validator.js.map +1 -0
- package/lib/langium/validation/index.d.ts +12 -0
- package/lib/langium/validation/index.d.ts.map +1 -0
- package/lib/langium/validation/index.js +12 -0
- package/lib/langium/validation/index.js.map +1 -0
- package/lib/langium/validation/validation-contribution-collector.d.ts +34 -0
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -0
- package/lib/langium/validation/validation-contribution-collector.js +51 -0
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -0
- package/lib/langium/validation/validation-contribution.d.ts +36 -0
- package/lib/langium/validation/validation-contribution.d.ts.map +1 -0
- package/lib/langium/validation/validation-contribution.js +10 -0
- package/lib/langium/validation/validation-contribution.js.map +1 -0
- package/lib/langium/workspace/additional-document-contribution.d.ts +68 -0
- package/lib/langium/workspace/additional-document-contribution.d.ts.map +1 -0
- package/lib/langium/workspace/additional-document-contribution.js +23 -0
- package/lib/langium/workspace/additional-document-contribution.js.map +1 -0
- package/lib/langium/workspace/document-uri-policy.d.ts +151 -0
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -0
- package/lib/langium/workspace/document-uri-policy.js +121 -0
- package/lib/langium/workspace/document-uri-policy.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +30 -0
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -0
- package/lib/langium/workspace/file-system-provider.js +41 -0
- package/lib/langium/workspace/file-system-provider.js.map +1 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +45 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js +64 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +31 -0
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-lock.js +33 -0
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +232 -0
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -0
- package/lib/langium/workspace/hydranium-workspace-manager.js +368 -0
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -0
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +127 -0
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -0
- package/lib/langium/workspace/in-memory-file-system-provider.js +195 -0
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -0
- package/lib/langium/workspace/index-manager.d.ts +142 -0
- package/lib/langium/workspace/index-manager.d.ts.map +1 -0
- package/lib/langium/workspace/index-manager.js +245 -0
- package/lib/langium/workspace/index-manager.js.map +1 -0
- package/lib/langium/workspace/index.d.ts +23 -0
- package/lib/langium/workspace/index.d.ts.map +1 -0
- package/lib/langium/workspace/index.js +23 -0
- package/lib/langium/workspace/index.js.map +1 -0
- package/lib/langium/workspace/initialize-workspace.d.ts +63 -0
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -0
- package/lib/langium/workspace/initialize-workspace.js +88 -0
- package/lib/langium/workspace/initialize-workspace.js.map +1 -0
- package/lib/langium/workspace/langium-documents.d.ts +47 -0
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -0
- package/lib/langium/workspace/langium-documents.js +85 -0
- package/lib/langium/workspace/langium-documents.js.map +1 -0
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +207 -0
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -0
- package/lib/langium/workspace/persistent-file-system-provider.js +208 -0
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -0
- package/lib/langium/workspace/synthetic.d.ts +38 -0
- package/lib/langium/workspace/synthetic.d.ts.map +1 -0
- package/lib/langium/workspace/synthetic.js +58 -0
- package/lib/langium/workspace/synthetic.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +78 -0
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -0
- package/lib/langium/workspace/virtual-document.js +89 -0
- package/lib/langium/workspace/virtual-document.js.map +1 -0
- package/lib/langium/workspace/write-lock-scope.d.ts +69 -0
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -0
- package/lib/langium/workspace/write-lock-scope.js +54 -0
- package/lib/langium/workspace/write-lock-scope.js.map +1 -0
- package/lib/launcher/index.d.ts +10 -0
- package/lib/launcher/index.d.ts.map +1 -0
- package/lib/launcher/index.js +12 -0
- package/lib/launcher/index.js.map +1 -0
- package/lib/launcher/integrated-server.d.ts +28 -0
- package/lib/launcher/integrated-server.d.ts.map +1 -0
- package/lib/launcher/integrated-server.js +10 -0
- package/lib/launcher/integrated-server.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +89 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.js +123 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +204 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.js +288 -0
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -0
- package/lib/lsp/index.d.ts +23 -0
- package/lib/lsp/index.d.ts.map +1 -0
- package/lib/lsp/index.js +23 -0
- package/lib/lsp/index.js.map +1 -0
- package/lib/lsp/instrument-connection.d.ts +36 -0
- package/lib/lsp/instrument-connection.d.ts.map +1 -0
- package/lib/lsp/instrument-connection.js +62 -0
- package/lib/lsp/instrument-connection.js.map +1 -0
- package/lib/lsp/language-module.d.ts +53 -0
- package/lib/lsp/language-module.d.ts.map +1 -0
- package/lib/lsp/language-module.js +28 -0
- package/lib/lsp/language-module.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +131 -0
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -0
- package/lib/lsp/semantic-token-provider.js +148 -0
- package/lib/lsp/semantic-token-provider.js.map +1 -0
- package/lib/lsp/shared-module.d.ts +76 -0
- package/lib/lsp/shared-module.d.ts.map +1 -0
- package/lib/lsp/shared-module.js +33 -0
- package/lib/lsp/shared-module.js.map +1 -0
- package/lib/lsp/start-language-server.d.ts +43 -0
- package/lib/lsp/start-language-server.d.ts.map +1 -0
- package/lib/lsp/start-language-server.js +60 -0
- package/lib/lsp/start-language-server.js.map +1 -0
- package/lib/node/ast-ground-truth.d.ts +57 -0
- package/lib/node/ast-ground-truth.d.ts.map +1 -0
- package/lib/node/ast-ground-truth.js +46 -0
- package/lib/node/ast-ground-truth.js.map +1 -0
- package/lib/node/event-loop-monitor.d.ts +40 -0
- package/lib/node/event-loop-monitor.d.ts.map +1 -0
- package/lib/node/event-loop-monitor.js +62 -0
- package/lib/node/event-loop-monitor.js.map +1 -0
- package/lib/node/index.d.ts +29 -0
- package/lib/node/index.d.ts.map +1 -0
- package/lib/node/index.js +50 -0
- package/lib/node/index.js.map +1 -0
- package/lib/node/latency-from-env.d.ts +32 -0
- package/lib/node/latency-from-env.d.ts.map +1 -0
- package/lib/node/latency-from-env.js +36 -0
- package/lib/node/latency-from-env.js.map +1 -0
- package/lib/node/lint-grammar.d.ts +87 -0
- package/lib/node/lint-grammar.d.ts.map +1 -0
- package/lib/node/lint-grammar.js +124 -0
- package/lib/node/lint-grammar.js.map +1 -0
- package/lib/node/log-file-sink.d.ts +22 -0
- package/lib/node/log-file-sink.d.ts.map +1 -0
- package/lib/node/log-file-sink.js +43 -0
- package/lib/node/log-file-sink.js.map +1 -0
- package/lib/node/log-preamble-node.d.ts +28 -0
- package/lib/node/log-preamble-node.d.ts.map +1 -0
- package/lib/node/log-preamble-node.js +55 -0
- package/lib/node/log-preamble-node.js.map +1 -0
- package/lib/node/measure-memory.d.ts +86 -0
- package/lib/node/measure-memory.d.ts.map +1 -0
- package/lib/node/measure-memory.js +128 -0
- package/lib/node/measure-memory.js.map +1 -0
- package/lib/node/memory-monitor.d.ts +42 -0
- package/lib/node/memory-monitor.d.ts.map +1 -0
- package/lib/node/memory-monitor.js +83 -0
- package/lib/node/memory-monitor.js.map +1 -0
- package/lib/node/node-file-system-provider.d.ts +112 -0
- package/lib/node/node-file-system-provider.d.ts.map +1 -0
- package/lib/node/node-file-system-provider.js +230 -0
- package/lib/node/node-file-system-provider.js.map +1 -0
- package/lib/node/process-memory.d.ts +66 -0
- package/lib/node/process-memory.d.ts.map +1 -0
- package/lib/node/process-memory.js +252 -0
- package/lib/node/process-memory.js.map +1 -0
- package/lib/node/profile-capture.d.ts +118 -0
- package/lib/node/profile-capture.d.ts.map +1 -0
- package/lib/node/profile-capture.js +315 -0
- package/lib/node/profile-capture.js.map +1 -0
- package/lib/node/profile-digest.d.ts +49 -0
- package/lib/node/profile-digest.d.ts.map +1 -0
- package/lib/node/profile-digest.js +74 -0
- package/lib/node/profile-digest.js.map +1 -0
- package/lib/node/profiling-run.d.ts +80 -0
- package/lib/node/profiling-run.d.ts.map +1 -0
- package/lib/node/profiling-run.js +183 -0
- package/lib/node/profiling-run.js.map +1 -0
- package/lib/node/reflect-grammar.d.ts +109 -0
- package/lib/node/reflect-grammar.d.ts.map +1 -0
- package/lib/node/reflect-grammar.js +96 -0
- package/lib/node/reflect-grammar.js.map +1 -0
- package/lib/node/server-diagnostics.d.ts +43 -0
- package/lib/node/server-diagnostics.d.ts.map +1 -0
- package/lib/node/server-diagnostics.js +46 -0
- package/lib/node/server-diagnostics.js.map +1 -0
- package/lib/node/server-state-snapshot.d.ts +48 -0
- package/lib/node/server-state-snapshot.d.ts.map +1 -0
- package/lib/node/server-state-snapshot.js +139 -0
- package/lib/node/server-state-snapshot.js.map +1 -0
- package/lib/node/socket-launcher.d.ts +106 -0
- package/lib/node/socket-launcher.d.ts.map +1 -0
- package/lib/node/socket-launcher.js +138 -0
- package/lib/node/socket-launcher.js.map +1 -0
- package/lib/node/stdio-launcher.d.ts +88 -0
- package/lib/node/stdio-launcher.d.ts.map +1 -0
- package/lib/node/stdio-launcher.js +83 -0
- package/lib/node/stdio-launcher.js.map +1 -0
- package/lib/node/validate-workspace.d.ts +80 -0
- package/lib/node/validate-workspace.d.ts.map +1 -0
- package/lib/node/validate-workspace.js +72 -0
- package/lib/node/validate-workspace.js.map +1 -0
- package/lib/node/write-lock-scope-node.d.ts +27 -0
- package/lib/node/write-lock-scope-node.d.ts.map +1 -0
- package/lib/node/write-lock-scope-node.js +38 -0
- package/lib/node/write-lock-scope-node.js.map +1 -0
- package/lib/testing/ast-snapshot.d.ts +38 -0
- package/lib/testing/ast-snapshot.d.ts.map +1 -0
- package/lib/testing/ast-snapshot.js +78 -0
- package/lib/testing/ast-snapshot.js.map +1 -0
- package/lib/testing/document-uri-policy-conformance.d.ts +65 -0
- package/lib/testing/document-uri-policy-conformance.d.ts.map +1 -0
- package/lib/testing/document-uri-policy-conformance.js +69 -0
- package/lib/testing/document-uri-policy-conformance.js.map +1 -0
- package/lib/testing/fake-description.d.ts +35 -0
- package/lib/testing/fake-description.d.ts.map +1 -0
- package/lib/testing/fake-description.js +38 -0
- package/lib/testing/fake-description.js.map +1 -0
- package/lib/testing/fake-document.d.ts +71 -0
- package/lib/testing/fake-document.d.ts.map +1 -0
- package/lib/testing/fake-document.js +85 -0
- package/lib/testing/fake-document.js.map +1 -0
- package/lib/testing/fake-reflection.d.ts +29 -0
- package/lib/testing/fake-reflection.d.ts.map +1 -0
- package/lib/testing/fake-reflection.js +30 -0
- package/lib/testing/fake-reflection.js.map +1 -0
- package/lib/testing/index.d.ts +44 -0
- package/lib/testing/index.d.ts.map +1 -0
- package/lib/testing/index.js +44 -0
- package/lib/testing/index.js.map +1 -0
- package/lib/testing/langium-test-helpers.d.ts +26 -0
- package/lib/testing/langium-test-helpers.d.ts.map +1 -0
- package/lib/testing/langium-test-helpers.js +26 -0
- package/lib/testing/langium-test-helpers.js.map +1 -0
- package/lib/testing/make-noop-language-services.d.ts +39 -0
- package/lib/testing/make-noop-language-services.d.ts.map +1 -0
- package/lib/testing/make-noop-language-services.js +30 -0
- package/lib/testing/make-noop-language-services.js.map +1 -0
- package/lib/testing/make-noop-shared-services.d.ts +61 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -0
- package/lib/testing/make-noop-shared-services.js +49 -0
- package/lib/testing/make-noop-shared-services.js.map +1 -0
- package/lib/testing/make-test-services.d.ts +217 -0
- package/lib/testing/make-test-services.d.ts.map +1 -0
- package/lib/testing/make-test-services.js +128 -0
- package/lib/testing/make-test-services.js.map +1 -0
- package/lib/testing/make-test-tracer.d.ts +67 -0
- package/lib/testing/make-test-tracer.d.ts.map +1 -0
- package/lib/testing/make-test-tracer.js +68 -0
- package/lib/testing/make-test-tracer.js.map +1 -0
- package/lib/testing/node/generated-workspace.d.ts +95 -0
- package/lib/testing/node/generated-workspace.d.ts.map +1 -0
- package/lib/testing/node/generated-workspace.js +134 -0
- package/lib/testing/node/generated-workspace.js.map +1 -0
- package/lib/testing/node/golden-corpus.d.ts +50 -0
- package/lib/testing/node/golden-corpus.d.ts.map +1 -0
- package/lib/testing/node/golden-corpus.js +80 -0
- package/lib/testing/node/golden-corpus.js.map +1 -0
- package/lib/testing/node/index.d.ts +28 -0
- package/lib/testing/node/index.d.ts.map +1 -0
- package/lib/testing/node/index.js +28 -0
- package/lib/testing/node/index.js.map +1 -0
- package/lib/testing/node/lsp-harness.d.ts +139 -0
- package/lib/testing/node/lsp-harness.d.ts.map +1 -0
- package/lib/testing/node/lsp-harness.js +119 -0
- package/lib/testing/node/lsp-harness.js.map +1 -0
- package/lib/testing/node/lsp-server-connection.d.ts +232 -0
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -0
- package/lib/testing/node/lsp-server-connection.js +304 -0
- package/lib/testing/node/lsp-server-connection.js.map +1 -0
- package/lib/testing/node/scratch-workspace.d.ts +60 -0
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -0
- package/lib/testing/node/scratch-workspace.js +87 -0
- package/lib/testing/node/scratch-workspace.js.map +1 -0
- package/lib/testing/node/spawned-server.d.ts +170 -0
- package/lib/testing/node/spawned-server.d.ts.map +1 -0
- package/lib/testing/node/spawned-server.js +265 -0
- package/lib/testing/node/spawned-server.js.map +1 -0
- package/lib/testing/parse-semantic-root.d.ts +83 -0
- package/lib/testing/parse-semantic-root.d.ts.map +1 -0
- package/lib/testing/parse-semantic-root.js +119 -0
- package/lib/testing/parse-semantic-root.js.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.d.ts +80 -0
- package/lib/testing/playwright/browser-capture-bridge.d.ts.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.js +161 -0
- package/lib/testing/playwright/browser-capture-bridge.js.map +1 -0
- package/lib/testing/playwright/e2e-profiling.d.ts +132 -0
- package/lib/testing/playwright/e2e-profiling.d.ts.map +1 -0
- package/lib/testing/playwright/e2e-profiling.js +270 -0
- package/lib/testing/playwright/e2e-profiling.js.map +1 -0
- package/lib/testing/playwright/index.d.ts +13 -0
- package/lib/testing/playwright/index.d.ts.map +1 -0
- package/lib/testing/playwright/index.js +16 -0
- package/lib/testing/playwright/index.js.map +1 -0
- package/lib/testing/playwright/server-log-capture.d.ts +230 -0
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-capture.js +336 -0
- package/lib/testing/playwright/server-log-capture.js.map +1 -0
- package/lib/testing/playwright/server-log-fixture.d.ts +36 -0
- package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-fixture.js +38 -0
- package/lib/testing/playwright/server-log-fixture.js.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts +22 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.js +26 -0
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -0
- package/lib/testing/run-update-pipeline.d.ts +99 -0
- package/lib/testing/run-update-pipeline.d.ts.map +1 -0
- package/lib/testing/run-update-pipeline.js +24 -0
- package/lib/testing/run-update-pipeline.js.map +1 -0
- package/lib/testing/stub-ast-document-manager.d.ts +82 -0
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -0
- package/lib/testing/stub-ast-document-manager.js +125 -0
- package/lib/testing/stub-ast-document-manager.js.map +1 -0
- package/lib/testing/stub-document-builder.d.ts +99 -0
- package/lib/testing/stub-document-builder.d.ts.map +1 -0
- package/lib/testing/stub-document-builder.js +142 -0
- package/lib/testing/stub-document-builder.js.map +1 -0
- package/lib/testing/stub-hydranium-text-documents.d.ts +125 -0
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -0
- package/lib/testing/stub-hydranium-text-documents.js +164 -0
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -0
- package/lib/testing/stub-index-manager.d.ts +40 -0
- package/lib/testing/stub-index-manager.d.ts.map +1 -0
- package/lib/testing/stub-index-manager.js +38 -0
- package/lib/testing/stub-index-manager.js.map +1 -0
- package/lib/testing/stub-langium-documents.d.ts +53 -0
- package/lib/testing/stub-langium-documents.d.ts.map +1 -0
- package/lib/testing/stub-langium-documents.js +62 -0
- package/lib/testing/stub-langium-documents.js.map +1 -0
- package/lib/testing/stub-model-service.d.ts +31 -0
- package/lib/testing/stub-model-service.d.ts.map +1 -0
- package/lib/testing/stub-model-service.js +45 -0
- package/lib/testing/stub-model-service.js.map +1 -0
- package/lib/testing/stub-project-manager.d.ts +43 -0
- package/lib/testing/stub-project-manager.d.ts.map +1 -0
- package/lib/testing/stub-project-manager.js +125 -0
- package/lib/testing/stub-project-manager.js.map +1 -0
- package/lib/testing/stub-self-save-registry.d.ts +31 -0
- package/lib/testing/stub-self-save-registry.d.ts.map +1 -0
- package/lib/testing/stub-self-save-registry.js +23 -0
- package/lib/testing/stub-self-save-registry.js.map +1 -0
- package/lib/testing/stub-service-registry.d.ts +95 -0
- package/lib/testing/stub-service-registry.d.ts.map +1 -0
- package/lib/testing/stub-service-registry.js +108 -0
- package/lib/testing/stub-service-registry.js.map +1 -0
- package/lib/testing/stub-writable-file-system.d.ts +42 -0
- package/lib/testing/stub-writable-file-system.d.ts.map +1 -0
- package/lib/testing/stub-writable-file-system.js +26 -0
- package/lib/testing/stub-writable-file-system.js.map +1 -0
- package/lib/util/connection-liveness.d.ts +25 -0
- package/lib/util/connection-liveness.d.ts.map +1 -0
- package/lib/util/connection-liveness.js +46 -0
- package/lib/util/connection-liveness.js.map +1 -0
- package/lib/util/environment.d.ts +53 -0
- package/lib/util/environment.d.ts.map +1 -0
- package/lib/util/environment.js +78 -0
- package/lib/util/environment.js.map +1 -0
- package/lib/util/index.d.ts +13 -0
- package/lib/util/index.d.ts.map +1 -0
- package/lib/util/index.js +18 -0
- package/lib/util/index.js.map +1 -0
- package/lib/util/registry.d.ts +88 -0
- package/lib/util/registry.d.ts.map +1 -0
- package/lib/util/registry.js +105 -0
- package/lib/util/registry.js.map +1 -0
- package/package.json +134 -0
- package/src/documents/ast-document-manager.ts +455 -0
- package/src/documents/client-ids.ts +33 -0
- package/src/documents/hydranium-text-documents.ts +1142 -0
- package/src/documents/index.ts +14 -0
- package/src/documents/language-client-text-shadow.ts +175 -0
- package/src/documents/self-save-registry.ts +81 -0
- package/src/index.ts +39 -0
- package/src/langium/ast-extension/ast-extension-contribution.ts +35 -0
- package/src/langium/ast-extension/ast-extension-service.ts +311 -0
- package/src/langium/ast-extension/ast-node-builder.ts +125 -0
- package/src/langium/ast-extension/index.ts +12 -0
- package/src/langium/bootstrap.ts +600 -0
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +141 -0
- package/src/langium/build-phase-pass/build-phase-pass.ts +123 -0
- package/src/langium/build-phase-pass/index.ts +11 -0
- package/src/langium/config/index.ts +10 -0
- package/src/langium/config/settings.ts +353 -0
- package/src/langium/diagnostics/hydranium-langium-profiler.ts +187 -0
- package/src/langium/diagnostics/index.ts +19 -0
- package/src/langium/diagnostics/log-file-token.ts +26 -0
- package/src/langium/diagnostics/log-preamble.ts +87 -0
- package/src/langium/diagnostics/logger.ts +246 -0
- package/src/langium/diagnostics/lsp-logger.ts +277 -0
- package/src/langium/diagnostics/server-tracer.ts +73 -0
- package/src/langium/document-builder/build-pipeline-integration.ts +193 -0
- package/src/langium/document-builder/document-builder.ts +839 -0
- package/src/langium/document-builder/index.ts +12 -0
- package/src/langium/document-builder/labeled-phase-listener.ts +26 -0
- package/src/langium/documentation/comment-provider.ts +37 -0
- package/src/langium/documentation/index.ts +10 -0
- package/src/langium/integration-services.ts +281 -0
- package/src/langium/integrity/index.ts +12 -0
- package/src/langium/integrity/integrity-contribution.ts +44 -0
- package/src/langium/integrity/integrity-rule.ts +100 -0
- package/src/langium/integrity/integrity-service.ts +423 -0
- package/src/langium/keys/default-element-key-provider.ts +20 -0
- package/src/langium/keys/element-key-provider.ts +114 -0
- package/src/langium/keys/index.ts +13 -0
- package/src/langium/keys/name-based-key-provider.ts +146 -0
- package/src/langium/keys/positional-key-provider.ts +57 -0
- package/src/langium/labeling/index.ts +10 -0
- package/src/langium/labeling/label-provider.ts +110 -0
- package/src/langium/language-module.ts +367 -0
- package/src/langium/language-types.ts +214 -0
- package/src/langium/model-service/index.ts +10 -0
- package/src/langium/model-service/model-service.ts +1051 -0
- package/src/langium/module.ts +446 -0
- package/src/langium/naming/index.ts +11 -0
- package/src/langium/naming/name-provider.ts +533 -0
- package/src/langium/naming/name-separator-validation.ts +73 -0
- package/src/langium/project/abstract-project-manager.ts +630 -0
- package/src/langium/project/index.ts +13 -0
- package/src/langium/project/project-change-event.ts +66 -0
- package/src/langium/project/project-manager.ts +221 -0
- package/src/langium/project/single-project-manager.ts +126 -0
- package/src/langium/residency/cst-residency-service.ts +412 -0
- package/src/langium/residency/index.ts +10 -0
- package/src/langium/scope/ast-node-description-provider.ts +141 -0
- package/src/langium/scope/hydranium-scope-computation.ts +246 -0
- package/src/langium/scope/hydranium-scope-provider.ts +659 -0
- package/src/langium/scope/index.ts +18 -0
- package/src/langium/scope/reference-builder.ts +194 -0
- package/src/langium/scope/reference-candidate-provider.ts +314 -0
- package/src/langium/scope/scope-extension-contribution.ts +34 -0
- package/src/langium/scope/scope-extension-service.ts +207 -0
- package/src/langium/scope/scoped-ast-node-description.ts +174 -0
- package/src/langium/scope/tier-specificity.ts +89 -0
- package/src/langium/serialization/abstract-serializer.ts +474 -0
- package/src/langium/serialization/index.ts +14 -0
- package/src/langium/serialization/json-serializer.ts +264 -0
- package/src/langium/serialization/serialization-util.ts +40 -0
- package/src/langium/serialization/serializer.ts +68 -0
- package/src/langium/serialization/yaml-serializer.ts +348 -0
- package/src/langium/service-registry.ts +323 -0
- package/src/langium/shared-services.ts +107 -0
- package/src/langium/transfer/index.ts +10 -0
- package/src/langium/transfer/transfer-encoder.ts +434 -0
- package/src/langium/update-rewrite/index.ts +14 -0
- package/src/langium/update-rewrite/normalize-empty-strings.ts +86 -0
- package/src/langium/update-rewrite/semantic-root-rewrite.ts +57 -0
- package/src/langium/update-rewrite/update-rewrite-contribution.ts +44 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +129 -0
- package/src/langium/update-rewrite/update-rewrite.ts +60 -0
- package/src/langium/validation/document-validator.ts +188 -0
- package/src/langium/validation/index.ts +12 -0
- package/src/langium/validation/validation-contribution-collector.ts +61 -0
- package/src/langium/validation/validation-contribution.ts +38 -0
- package/src/langium/workspace/additional-document-contribution.ts +80 -0
- package/src/langium/workspace/document-uri-policy.ts +187 -0
- package/src/langium/workspace/file-system-provider.ts +52 -0
- package/src/langium/workspace/hydranium-langium-document-factory.ts +78 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +35 -0
- package/src/langium/workspace/hydranium-workspace-manager.ts +412 -0
- package/src/langium/workspace/in-memory-file-system-provider.ts +241 -0
- package/src/langium/workspace/index-manager.ts +266 -0
- package/src/langium/workspace/index.ts +23 -0
- package/src/langium/workspace/initialize-workspace.ts +102 -0
- package/src/langium/workspace/langium-documents.ts +94 -0
- package/src/langium/workspace/persistent-file-system-provider.ts +287 -0
- package/src/langium/workspace/synthetic.ts +63 -0
- package/src/langium/workspace/virtual-document.ts +94 -0
- package/src/langium/workspace/write-lock-scope.ts +88 -0
- package/src/launcher/index.ts +12 -0
- package/src/launcher/integrated-server.ts +28 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +132 -0
- package/src/lsp/hydranium-document-update-handler.ts +345 -0
- package/src/lsp/index.ts +24 -0
- package/src/lsp/instrument-connection.ts +66 -0
- package/src/lsp/language-module.ts +64 -0
- package/src/lsp/semantic-token-provider.ts +215 -0
- package/src/lsp/shared-module.ts +88 -0
- package/src/lsp/start-language-server.ts +68 -0
- package/src/node/ast-ground-truth.ts +76 -0
- package/src/node/event-loop-monitor.ts +89 -0
- package/src/node/index.ts +53 -0
- package/src/node/latency-from-env.ts +39 -0
- package/src/node/lint-grammar.ts +189 -0
- package/src/node/log-file-sink.ts +43 -0
- package/src/node/log-preamble-node.ts +63 -0
- package/src/node/measure-memory.ts +196 -0
- package/src/node/memory-monitor.ts +103 -0
- package/src/node/node-file-system-provider.ts +252 -0
- package/src/node/process-memory.ts +299 -0
- package/src/node/profile-capture.ts +377 -0
- package/src/node/profile-digest.ts +112 -0
- package/src/node/profiling-run.ts +236 -0
- package/src/node/reflect-grammar.ts +182 -0
- package/src/node/server-diagnostics.ts +63 -0
- package/src/node/server-state-snapshot.ts +192 -0
- package/src/node/socket-launcher.ts +210 -0
- package/src/node/stdio-launcher.ts +150 -0
- package/src/node/validate-workspace.ts +133 -0
- package/src/node/write-lock-scope-node.ts +41 -0
- package/src/testing/ast-snapshot.ts +88 -0
- package/src/testing/document-uri-policy-conformance.ts +104 -0
- package/src/testing/fake-description.ts +52 -0
- package/src/testing/fake-document.ts +120 -0
- package/src/testing/fake-reflection.ts +39 -0
- package/src/testing/index.ts +45 -0
- package/src/testing/langium-test-helpers.ts +26 -0
- package/src/testing/make-noop-language-services.ts +47 -0
- package/src/testing/make-noop-shared-services.ts +78 -0
- package/src/testing/make-test-services.ts +356 -0
- package/src/testing/make-test-tracer.ts +92 -0
- package/src/testing/node/generated-workspace.ts +222 -0
- package/src/testing/node/golden-corpus.ts +114 -0
- package/src/testing/node/index.ts +29 -0
- package/src/testing/node/lsp-harness.ts +230 -0
- package/src/testing/node/lsp-server-connection.ts +575 -0
- package/src/testing/node/scratch-workspace.ts +137 -0
- package/src/testing/node/spawned-server.ts +447 -0
- package/src/testing/parse-semantic-root.ts +150 -0
- package/src/testing/playwright/browser-capture-bridge.ts +258 -0
- package/src/testing/playwright/e2e-profiling.ts +362 -0
- package/src/testing/playwright/index.ts +16 -0
- package/src/testing/playwright/server-log-capture.ts +433 -0
- package/src/testing/playwright/server-log-fixture.ts +57 -0
- package/src/testing/playwright/server-log-rename-reporter.ts +29 -0
- package/src/testing/run-update-pipeline.ts +113 -0
- package/src/testing/stub-ast-document-manager.ts +224 -0
- package/src/testing/stub-document-builder.ts +242 -0
- package/src/testing/stub-hydranium-text-documents.ts +270 -0
- package/src/testing/stub-index-manager.ts +79 -0
- package/src/testing/stub-langium-documents.ts +104 -0
- package/src/testing/stub-model-service.ts +72 -0
- package/src/testing/stub-project-manager.ts +161 -0
- package/src/testing/stub-self-save-registry.ts +43 -0
- package/src/testing/stub-service-registry.ts +192 -0
- package/src/testing/stub-writable-file-system.ts +58 -0
- package/src/util/connection-liveness.ts +47 -0
- package/src/util/environment.ts +88 -0
- package/src/util/index.ts +18 -0
- package/src/util/registry.ts +129 -0
|
@@ -0,0 +1,232 @@
|
|
|
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
|
+
import { type Harness } from '@hydranium/protocol/testing';
|
|
10
|
+
import { type Connection } from 'vscode-languageserver/node';
|
|
11
|
+
import { type ApplyWorkspaceEditParams, type ApplyWorkspaceEditResult, type CompletionList, type Diagnostic, type Hover, type InitializeParams, type InitializeResult, type Position, type ProtocolConnection, type PublishDiagnosticsParams, type SemanticTokens } from 'vscode-languageserver-protocol/node';
|
|
12
|
+
/**
|
|
13
|
+
* Options for {@link LspServerConnection.nextDiagnostics}, and for the
|
|
14
|
+
* subprocess tier's identically-shaped method — one type, so the in-process and
|
|
15
|
+
* spawned harnesses cannot drift into two spellings of the same discipline.
|
|
16
|
+
*/
|
|
17
|
+
export interface NextDiagnosticsOptions {
|
|
18
|
+
/**
|
|
19
|
+
* Index into {@link LspServerConnection.diagnostics} to search from,
|
|
20
|
+
* inclusive. Read `diagnostics.length` BEFORE the triggering action and pass
|
|
21
|
+
* it here: an already-captured publish at or after that point resolves
|
|
22
|
+
* immediately, so the wait no longer has to be armed before the action and
|
|
23
|
+
* cannot be answered by a publish that predates it. Omitted ⇒ only publishes
|
|
24
|
+
* arriving after the call are considered.
|
|
25
|
+
*/
|
|
26
|
+
readonly fromIndex?: number;
|
|
27
|
+
/** Reject after this long. Defaults to the harness's own publish timeout, which differs by tier. */
|
|
28
|
+
readonly timeoutMs?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* One captured server→client `workspace/applyEdit`, with the two fields an
|
|
32
|
+
* edit-egress assertion actually reads lifted out of the `WorkspaceEdit`.
|
|
33
|
+
*
|
|
34
|
+
* Both are DERIVED, so a test asserts on them instead of re-walking a
|
|
35
|
+
* `documentChanges`-or-`changes` union whose shape the framework's egress may
|
|
36
|
+
* choose freely (a full-range replace and a minimal diff produce different
|
|
37
|
+
* edit lists for the same push). {@link params} stays available for the cases
|
|
38
|
+
* that need the version, the label or the file-operation kinds.
|
|
39
|
+
*/
|
|
40
|
+
export interface AppliedEdit {
|
|
41
|
+
/** The request as it arrived, unmodified. */
|
|
42
|
+
readonly params: ApplyWorkspaceEditParams;
|
|
43
|
+
/**
|
|
44
|
+
* Every URI the edit addresses, `documentChanges` first then `changes` keys.
|
|
45
|
+
* A rename contributes both its old and its new URI. This is what
|
|
46
|
+
* {@link LspServerConnection.nextAppliedEdit} matches against, and asserting
|
|
47
|
+
* on it is how a test pins WHICH URI the egress chose — the question a
|
|
48
|
+
* symlinked or renamed document makes non-trivial.
|
|
49
|
+
*/
|
|
50
|
+
readonly uris: readonly string[];
|
|
51
|
+
/**
|
|
52
|
+
* Every text edit's `newText`, concatenated in edit order. A minimal diff
|
|
53
|
+
* therefore yields only the changed fragments, NOT the resulting document —
|
|
54
|
+
* so assert `toContain` on a fragment the push must carry rather than
|
|
55
|
+
* equality against a whole file. Snippet edits contribute nothing, having no
|
|
56
|
+
* `newText`.
|
|
57
|
+
*/
|
|
58
|
+
readonly text: string;
|
|
59
|
+
}
|
|
60
|
+
/** Options for {@link LspServerConnection.nextAppliedEdit}. */
|
|
61
|
+
export interface NextAppliedEditOptions {
|
|
62
|
+
/**
|
|
63
|
+
* Index into {@link LspServerConnection.appliedEdits} to search from,
|
|
64
|
+
* inclusive — the same contract as {@link NextDiagnosticsOptions.fromIndex},
|
|
65
|
+
* and needed for the same reason: one write can fan out to several pushes.
|
|
66
|
+
*/
|
|
67
|
+
readonly fromIndex?: number;
|
|
68
|
+
/** Reject after this long. Defaults to the in-process publish timeout. */
|
|
69
|
+
readonly timeoutMs?: number;
|
|
70
|
+
/**
|
|
71
|
+
* Additional predicate the edit must satisfy. The framework coalesces
|
|
72
|
+
* pushes per URI and skips ones that diff to nothing, so a URI match alone
|
|
73
|
+
* can resolve on a sync that carries none of the text under test; narrow
|
|
74
|
+
* with e.g. `edit => edit.text.includes('…')`.
|
|
75
|
+
*/
|
|
76
|
+
readonly match?: (edit: AppliedEdit) => boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* The in-process LSP transport seam — a real `Connection` over the in-memory
|
|
80
|
+
* {@link makeDuplexStreamPair}, plus the client side, the diagnostics capture,
|
|
81
|
+
* and the typed request facades — with NO services attached. It is the lower
|
|
82
|
+
* half of `makeLspHarness`, factored out so a caller can OWN the services
|
|
83
|
+
* tree: build the tree around {@link serverConnection} (`createXxxServices({
|
|
84
|
+
* connection })`) and attach the LSP head (`startLanguageServer(shared)`),
|
|
85
|
+
* exactly as a real server entrypoint does. That inversion — the connection is
|
|
86
|
+
* an input to the one tree, every head attaches to `shared` — is what lets
|
|
87
|
+
* multiple protocol heads share a single tree.
|
|
88
|
+
*
|
|
89
|
+
* `serverConnection` is the **seam handed to the caller** (it builds services
|
|
90
|
+
* onto it); `client` is the raw client seam + escape hatch for unwrapped
|
|
91
|
+
* requests; `diagnostics` is the append-only capture of every
|
|
92
|
+
* `publishDiagnostics` notification in arrival order; the lifecycle/sync/feature
|
|
93
|
+
* members are thin facades over `client` reusing `vscode-languageserver-protocol`
|
|
94
|
+
* types. Satisfies the uniform {@link Harness} contract.
|
|
95
|
+
*/
|
|
96
|
+
export interface LspServerConnection extends Harness {
|
|
97
|
+
/**
|
|
98
|
+
* Seam: the server-side `Connection`, NOT yet attached to a server. The caller
|
|
99
|
+
* composes the services tree onto it (`createXxxServices({ connection })`) and
|
|
100
|
+
* calls `startLanguageServer(services.shared)`, which wires the LSP handlers
|
|
101
|
+
* and calls `connection.listen()`.
|
|
102
|
+
*/
|
|
103
|
+
readonly serverConnection: Connection;
|
|
104
|
+
/** Seam: the raw client connection over the in-memory wire; escape hatch for unwrapped requests. */
|
|
105
|
+
readonly client: ProtocolConnection;
|
|
106
|
+
/**
|
|
107
|
+
* Capture: every `publishDiagnostics` notification, in arrival order;
|
|
108
|
+
* append-only, never cleared. Stays live for the connection's whole lifetime,
|
|
109
|
+
* including while {@link nextDiagnostics} waits are armed.
|
|
110
|
+
*
|
|
111
|
+
* The right tool for a fan-out: record `diagnostics.length` before acting,
|
|
112
|
+
* then read the tail. Note the workspace init does NOT validate, so this is
|
|
113
|
+
* empty after `initialize` — a baseline has to be provoked by an edit or an
|
|
114
|
+
* explicit validating read.
|
|
115
|
+
*/
|
|
116
|
+
readonly diagnostics: ReadonlyArray<PublishDiagnosticsParams>;
|
|
117
|
+
/**
|
|
118
|
+
* Capture: every server→client `workspace/applyEdit`, in arrival order;
|
|
119
|
+
* append-only, never cleared. The sibling of {@link diagnostics} for the
|
|
120
|
+
* EGRESS direction — `applyEditToLanguageClient` is a framework path that
|
|
121
|
+
* every adopter whose non-LSP client edits an open file goes through, and
|
|
122
|
+
* without this capture the request is unobservable and unanswered.
|
|
123
|
+
*
|
|
124
|
+
* Read as a fan-out, exactly like `diagnostics`: record `appliedEdits.length`
|
|
125
|
+
* before acting, then read the tail. One write can produce several pushes
|
|
126
|
+
* (one per language-client URI a document is open under) and their order is
|
|
127
|
+
* not the caller's to control.
|
|
128
|
+
*
|
|
129
|
+
* **The wire is answered `{ applied: true }` by default**, which is what a
|
|
130
|
+
* real language client does; {@link setApplyEditHandler} changes that, and
|
|
131
|
+
* without a handler registered at all the server's request would fail as an
|
|
132
|
+
* unhandled method.
|
|
133
|
+
*/
|
|
134
|
+
readonly appliedEdits: ReadonlyArray<AppliedEdit>;
|
|
135
|
+
/**
|
|
136
|
+
* Drive the real LSP `initialize` → `initialized` handshake and return the
|
|
137
|
+
* `InitializeResult`. Defaults to no workspace folders (no async
|
|
138
|
+
* discovery/build, nothing racy to await); pass `workspaceFolders` for the
|
|
139
|
+
* fully faithful path. Required before any other request.
|
|
140
|
+
*/
|
|
141
|
+
initialize(params?: Partial<InitializeParams>): Promise<InitializeResult>;
|
|
142
|
+
/**
|
|
143
|
+
* Drive the graceful `shutdown` request and await its response. The `exit`
|
|
144
|
+
* notification is intentionally NOT sent in-process: there is no server
|
|
145
|
+
* process to terminate, and `dispose()` owns teardown.
|
|
146
|
+
*/
|
|
147
|
+
shutdown(): Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* Send `textDocument/didOpen` for `uri` with full `text`. `languageId` is
|
|
150
|
+
* required — an empty/unregistered id yields a document the server never
|
|
151
|
+
* associates with a language (silent no-diagnostics). `version` defaults to 1.
|
|
152
|
+
*/
|
|
153
|
+
openDocument(uri: string, text: string, languageId: string, version?: number): void;
|
|
154
|
+
/** Send `textDocument/didChange` for `uri` as a single full-text replacement at `version`. */
|
|
155
|
+
changeDocument(uri: string, text: string, version: number): void;
|
|
156
|
+
/**
|
|
157
|
+
* Request completion at `position`, normalized to a `CompletionList`
|
|
158
|
+
* (`CompletionItem[]`/`null` collapse to one). `item.textEdit` keeps its
|
|
159
|
+
* `InsertReplaceEdit | TextEdit` union.
|
|
160
|
+
*/
|
|
161
|
+
completion(uri: string, position: Position): Promise<CompletionList>;
|
|
162
|
+
/** Request hover at `position`. */
|
|
163
|
+
hover(uri: string, position: Position): Promise<Hover | null>;
|
|
164
|
+
/** Request full-document semantic tokens for `uri`. */
|
|
165
|
+
semanticTokens(uri: string): Promise<SemanticTokens | null>;
|
|
166
|
+
/**
|
|
167
|
+
* Resolve with the diagnostics of the next `publishDiagnostics` matching
|
|
168
|
+
* `uri`. Reject on timeout so a missing publish fails fast instead of hanging.
|
|
169
|
+
* Register the returned promise BEFORE the triggering `openDocument`/
|
|
170
|
+
* `changeDocument`.
|
|
171
|
+
*
|
|
172
|
+
* Composes freely with {@link diagnostics} and with other waiters — all of
|
|
173
|
+
* them are served from one subscription, so arming a wait does not switch the
|
|
174
|
+
* capture off.
|
|
175
|
+
*
|
|
176
|
+
* **Pass `{ fromIndex }` when a single action fans out to SEVERAL
|
|
177
|
+
* documents**, as a cross-document rebuild does: without it this method
|
|
178
|
+
* answers "the next publish for one URI", which is the wrong question when
|
|
179
|
+
* the order of a cascade's publishes is not under the test's control, and it
|
|
180
|
+
* also has to be armed before the action. Record `diagnostics.length` first
|
|
181
|
+
* and hand it over; {@link diagnostics} remains available for a test that
|
|
182
|
+
* wants the whole tail rather than one URI's entry in it.
|
|
183
|
+
*/
|
|
184
|
+
nextDiagnostics(uri: string, timeoutMsOrOptions?: number | NextDiagnosticsOptions): Promise<Diagnostic[]>;
|
|
185
|
+
/**
|
|
186
|
+
* Resolve with the next captured `workspace/applyEdit` that addresses `uri`
|
|
187
|
+
* (and satisfies {@link NextAppliedEditOptions.match}, when given). Reject on
|
|
188
|
+
* timeout so a missing push fails fast instead of hanging.
|
|
189
|
+
*
|
|
190
|
+
* The egress mirror of {@link nextDiagnostics}, with the same
|
|
191
|
+
* `fromIndex` discipline and the same composition guarantee: every waiter is
|
|
192
|
+
* served from one request handler, so arming a wait does not switch the
|
|
193
|
+
* {@link appliedEdits} capture off.
|
|
194
|
+
*
|
|
195
|
+
* **An egress push is asynchronous well past the call that triggers it** —
|
|
196
|
+
* the framework coalesces per URI and drives the sync from a build-phase
|
|
197
|
+
* settle, so a `ModelService.update` resolves long before the push is sent.
|
|
198
|
+
* Record `appliedEdits.length`, drive the edit, then await this; reading the
|
|
199
|
+
* capture on the line after the write proves nothing.
|
|
200
|
+
*/
|
|
201
|
+
nextAppliedEdit(uri: string, timeoutMsOrOptions?: number | NextAppliedEditOptions): Promise<AppliedEdit>;
|
|
202
|
+
/**
|
|
203
|
+
* Decide what the client answers `workspace/applyEdit` with, so a test can
|
|
204
|
+
* drive the framework's rejection path — `applied: false` invalidates the
|
|
205
|
+
* text shadow and makes the retry a full-range replace, which is otherwise
|
|
206
|
+
* unreachable over a real wire. The capture is unaffected: the edit is
|
|
207
|
+
* recorded before the handler runs.
|
|
208
|
+
*
|
|
209
|
+
* Throwing from the handler surfaces to the server as an RPC failure, which
|
|
210
|
+
* is the other branch (`applyEditToLanguageClient` invalidates and rethrows).
|
|
211
|
+
*/
|
|
212
|
+
setApplyEditHandler(handler: (params: ApplyWorkspaceEditParams) => ApplyWorkspaceEditResult): void;
|
|
213
|
+
/**
|
|
214
|
+
* Release every resource: the diagnostics and applyEdit subscriptions, the
|
|
215
|
+
* client + server connections, the underlying stream pair. Idempotent. Does
|
|
216
|
+
* NOT send `shutdown`/`exit` — that is the explicit {@link shutdown} method.
|
|
217
|
+
*/
|
|
218
|
+
dispose(): void;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Build the in-process LSP transport seam (server `Connection` + client + wire +
|
|
222
|
+
* diagnostics capture + typed facades) WITHOUT attaching a server. The caller
|
|
223
|
+
* composes a services tree onto {@link LspServerConnection.serverConnection} and
|
|
224
|
+
* calls `startLanguageServer`, then drives requests through the facades.
|
|
225
|
+
*
|
|
226
|
+
* `makeLspHarness` is the all-in-one convenience built on this primitive
|
|
227
|
+
* (it owns the `createServices` callback + `startLanguageServer` + `buildWorkspace`);
|
|
228
|
+
* use this primitive directly when the CALLER must own the tree — e.g. to attach
|
|
229
|
+
* additional protocol heads (data-server, GLSP) onto the same `shared` services.
|
|
230
|
+
*/
|
|
231
|
+
export declare function makeLspServerConnection(): LspServerConnection;
|
|
232
|
+
//# sourceMappingURL=lsp-server-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-server-connection.d.ts","sourceRoot":"","sources":["../../../src/testing/node/lsp-server-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,304 @@
|
|
|
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
|
+
import { makeDuplexStreamPair } from '@hydranium/protocol/testing/node';
|
|
10
|
+
import { StreamMessageReader, StreamMessageWriter } from 'vscode-jsonrpc/node';
|
|
11
|
+
import { ProposedFeatures } from 'vscode-languageserver/node';
|
|
12
|
+
// The node `createConnection` from `vscode-languageserver/node` is built for a
|
|
13
|
+
// standalone server PROCESS: it wires `process.exit()` onto the input stream's
|
|
14
|
+
// `end`/`close` events, onto the `exit` notification (via its watchDog), and onto
|
|
15
|
+
// a parent-pid liveness timer, and it calls `endProtocolConnection()` (a write)
|
|
16
|
+
// on stream close. In-process every one of those is fatal — destroying the
|
|
17
|
+
// streams at teardown trips the `close` handler, which writes into the destroyed
|
|
18
|
+
// stream (an uncatchable synchronous `ERR_STREAM_DESTROYED`) and/or exits the host
|
|
19
|
+
// test runner. The lower-level common `createConnection(connectionFactory,
|
|
20
|
+
// watchDog, features)` form does none of that: it lets us inject a no-op-`exit`
|
|
21
|
+
// WatchDog and build the connection over the in-memory streams, so teardown is the
|
|
22
|
+
// primitive's responsibility alone.
|
|
23
|
+
// (Both live on the package root, which re-exports the common server module —
|
|
24
|
+
// the `lib/common/server.js` deep path is unreachable under the exports-only
|
|
25
|
+
// package map the LSP 3.18 libs ship.)
|
|
26
|
+
import { createConnection } from 'vscode-languageserver';
|
|
27
|
+
import { ApplyWorkspaceEditRequest, CompletionRequest, DidChangeTextDocumentNotification, DidOpenTextDocumentNotification, HoverRequest, InitializeRequest, InitializedNotification, PublishDiagnosticsNotification, SemanticTokensRequest, ShutdownRequest, createProtocolConnection } from 'vscode-languageserver-protocol/node';
|
|
28
|
+
/**
|
|
29
|
+
* Default wait for {@link LspServerConnection.nextDiagnostics}. Deliberately
|
|
30
|
+
* much shorter than the subprocess smoke's: in-process there is no spawn and no
|
|
31
|
+
* I/O, so a missing publish indicates a real wiring fault rather than slow
|
|
32
|
+
* startup, and the wait only has to clear an in-memory build while still failing
|
|
33
|
+
* fast instead of hanging the suite.
|
|
34
|
+
*/
|
|
35
|
+
const DEFAULT_DIAGNOSTICS_TIMEOUT_MS = 5_000;
|
|
36
|
+
/** Default `version` assigned to {@link LspServerConnection.openDocument} when none is supplied. */
|
|
37
|
+
const INITIAL_DOCUMENT_VERSION = 1;
|
|
38
|
+
/** Every URI a {@link WorkspaceEdit} addresses, in `documentChanges` then `changes` order. */
|
|
39
|
+
function editedUris(edit) {
|
|
40
|
+
const uris = [];
|
|
41
|
+
for (const change of edit.documentChanges ?? []) {
|
|
42
|
+
if ('textDocument' in change) {
|
|
43
|
+
uris.push(change.textDocument.uri);
|
|
44
|
+
}
|
|
45
|
+
else if ('oldUri' in change) {
|
|
46
|
+
uris.push(change.oldUri, change.newUri);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
uris.push(change.uri);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
uris.push(...Object.keys(edit.changes ?? {}));
|
|
53
|
+
return uris;
|
|
54
|
+
}
|
|
55
|
+
/** Every text edit's `newText` in a {@link WorkspaceEdit}, concatenated in edit order. */
|
|
56
|
+
function insertedText(edit) {
|
|
57
|
+
const parts = [];
|
|
58
|
+
for (const change of edit.documentChanges ?? []) {
|
|
59
|
+
if ('edits' in change) {
|
|
60
|
+
for (const textEdit of change.edits) {
|
|
61
|
+
if ('newText' in textEdit) {
|
|
62
|
+
parts.push(textEdit.newText);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
for (const textEdits of Object.values(edit.changes ?? {})) {
|
|
68
|
+
for (const textEdit of textEdits) {
|
|
69
|
+
parts.push(textEdit.newText);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return parts.join('');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Build the in-process LSP transport seam (server `Connection` + client + wire +
|
|
76
|
+
* diagnostics capture + typed facades) WITHOUT attaching a server. The caller
|
|
77
|
+
* composes a services tree onto {@link LspServerConnection.serverConnection} and
|
|
78
|
+
* calls `startLanguageServer`, then drives requests through the facades.
|
|
79
|
+
*
|
|
80
|
+
* `makeLspHarness` is the all-in-one convenience built on this primitive
|
|
81
|
+
* (it owns the `createServices` callback + `startLanguageServer` + `buildWorkspace`);
|
|
82
|
+
* use this primitive directly when the CALLER must own the tree — e.g. to attach
|
|
83
|
+
* additional protocol heads (data-server, GLSP) onto the same `shared` services.
|
|
84
|
+
*/
|
|
85
|
+
export function makeLspServerConnection() {
|
|
86
|
+
const pair = makeDuplexStreamPair();
|
|
87
|
+
// No-op watchDog: in-process, no LSP lifecycle event (parent-pid liveness, the
|
|
88
|
+
// `exit` notification, …) may exit the host test runner — `dispose()` owns
|
|
89
|
+
// teardown. See the import note on why the node `createConnection` is unusable.
|
|
90
|
+
const watchDog = {
|
|
91
|
+
shutdownReceived: false,
|
|
92
|
+
initialize: () => undefined,
|
|
93
|
+
exit: () => undefined
|
|
94
|
+
};
|
|
95
|
+
// Server side reads what the client wrote (clientToServer) and writes what the
|
|
96
|
+
// client reads (serverToClient), over a ProtocolConnection on the in-memory pair.
|
|
97
|
+
const serverConnection = createConnection(logger => createProtocolConnection(new StreamMessageReader(pair.clientToServer), new StreamMessageWriter(pair.serverToClient), logger), watchDog, ProposedFeatures.all);
|
|
98
|
+
// Client side mirrors the directions: reads serverToClient, writes clientToServer.
|
|
99
|
+
const client = createProtocolConnection(new StreamMessageReader(pair.serverToClient), new StreamMessageWriter(pair.clientToServer));
|
|
100
|
+
client.listen();
|
|
101
|
+
const diagnostics = [];
|
|
102
|
+
/**
|
|
103
|
+
* Waiters armed by {@link LspServerConnection.nextDiagnostics}, fanned out to
|
|
104
|
+
* from the ONE handler below.
|
|
105
|
+
*
|
|
106
|
+
* **There must be exactly one `onNotification` per method.** `vscode-jsonrpc`
|
|
107
|
+
* keeps a single handler per notification type, so a second registration
|
|
108
|
+
* silently DISPLACES the first — and disposing that second one then leaves no
|
|
109
|
+
* handler at all. Giving the capture and the per-URI waiters separate
|
|
110
|
+
* subscriptions therefore makes arming a wait switch the always-on capture
|
|
111
|
+
* off, and `diagnostics` reads empty in any suite that also awaits a publish
|
|
112
|
+
* — which is every suite that drives an edit.
|
|
113
|
+
*/
|
|
114
|
+
const diagnosticsWaiters = [];
|
|
115
|
+
const diagnosticsSubscription = client.onNotification(PublishDiagnosticsNotification.type, params => {
|
|
116
|
+
diagnostics.push(params);
|
|
117
|
+
// Iterate a copy: a resolving waiter removes itself from the live array.
|
|
118
|
+
for (const waiter of [...diagnosticsWaiters]) {
|
|
119
|
+
if (waiter(params)) {
|
|
120
|
+
const at = diagnosticsWaiters.indexOf(waiter);
|
|
121
|
+
if (at >= 0) {
|
|
122
|
+
diagnosticsWaiters.splice(at, 1);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
const appliedEdits = [];
|
|
128
|
+
/**
|
|
129
|
+
* Waiters armed by {@link LspServerConnection.nextAppliedEdit}, fanned out to
|
|
130
|
+
* from the ONE handler below — `vscode-jsonrpc` keeps a single handler per
|
|
131
|
+
* REQUEST type just as it does per notification type, so a second
|
|
132
|
+
* `onRequest` would displace this one and leave the server's `applyEdit`
|
|
133
|
+
* unanswered.
|
|
134
|
+
*/
|
|
135
|
+
const appliedEditWaiters = [];
|
|
136
|
+
let applyEditHandler = () => ({ applied: true });
|
|
137
|
+
const appliedEditSubscription = client.onRequest(ApplyWorkspaceEditRequest.type, (params) => {
|
|
138
|
+
const edit = { params, uris: editedUris(params.edit), text: insertedText(params.edit) };
|
|
139
|
+
// Record BEFORE the handler runs, so a handler that rejects the edit or
|
|
140
|
+
// throws still leaves the push observable — the send is what the egress
|
|
141
|
+
// assertion is about.
|
|
142
|
+
appliedEdits.push(edit);
|
|
143
|
+
for (const waiter of [...appliedEditWaiters]) {
|
|
144
|
+
if (waiter(edit)) {
|
|
145
|
+
const at = appliedEditWaiters.indexOf(waiter);
|
|
146
|
+
if (at >= 0) {
|
|
147
|
+
appliedEditWaiters.splice(at, 1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return applyEditHandler(params);
|
|
152
|
+
});
|
|
153
|
+
let disposed = false;
|
|
154
|
+
return {
|
|
155
|
+
serverConnection,
|
|
156
|
+
client,
|
|
157
|
+
diagnostics,
|
|
158
|
+
appliedEdits,
|
|
159
|
+
async initialize(params) {
|
|
160
|
+
const initializeParams = {
|
|
161
|
+
processId: process.pid,
|
|
162
|
+
rootUri: null,
|
|
163
|
+
workspaceFolders: null,
|
|
164
|
+
capabilities: {},
|
|
165
|
+
...params
|
|
166
|
+
};
|
|
167
|
+
const result = await client.sendRequest(InitializeRequest.type, initializeParams);
|
|
168
|
+
// Await the notification send so its write fully drains before
|
|
169
|
+
// `initialize()` resolves. `sendNotification` is fire-and-forget at the
|
|
170
|
+
// protocol level but returns a Promise that settles when the bytes hit
|
|
171
|
+
// the stream; without the await, a test that disposes shortly after
|
|
172
|
+
// `initialize()` (with no intervening awaited request) would destroy the
|
|
173
|
+
// streams mid-write — a write-after-destroy rejection.
|
|
174
|
+
await client.sendNotification(InitializedNotification.type, {});
|
|
175
|
+
return result;
|
|
176
|
+
},
|
|
177
|
+
async shutdown() {
|
|
178
|
+
// No `exit` NOTIFICATION: in-process its only effect would be the no-op
|
|
179
|
+
// watchDog, and being fire-and-forget it would still be draining when
|
|
180
|
+
// `dispose()` destroys the streams — racing teardown into a
|
|
181
|
+
// write-after-destroy. The subprocess smoke covers the real
|
|
182
|
+
// `exit`/process-exit path.
|
|
183
|
+
await client.sendRequest(ShutdownRequest.type, undefined);
|
|
184
|
+
},
|
|
185
|
+
openDocument(uri, text, languageId, version) {
|
|
186
|
+
client.sendNotification(DidOpenTextDocumentNotification.type, {
|
|
187
|
+
textDocument: {
|
|
188
|
+
uri,
|
|
189
|
+
languageId,
|
|
190
|
+
version: version ?? INITIAL_DOCUMENT_VERSION,
|
|
191
|
+
text
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
},
|
|
195
|
+
changeDocument(uri, text, version) {
|
|
196
|
+
client.sendNotification(DidChangeTextDocumentNotification.type, {
|
|
197
|
+
textDocument: { uri, version },
|
|
198
|
+
contentChanges: [{ text }]
|
|
199
|
+
});
|
|
200
|
+
},
|
|
201
|
+
async completion(uri, position) {
|
|
202
|
+
const response = await client.sendRequest(CompletionRequest.type, {
|
|
203
|
+
textDocument: { uri },
|
|
204
|
+
position
|
|
205
|
+
});
|
|
206
|
+
if (response === null) {
|
|
207
|
+
return { isIncomplete: false, items: [] };
|
|
208
|
+
}
|
|
209
|
+
if (Array.isArray(response)) {
|
|
210
|
+
return { isIncomplete: false, items: response };
|
|
211
|
+
}
|
|
212
|
+
return response;
|
|
213
|
+
},
|
|
214
|
+
hover(uri, position) {
|
|
215
|
+
return client.sendRequest(HoverRequest.type, { textDocument: { uri }, position });
|
|
216
|
+
},
|
|
217
|
+
semanticTokens(uri) {
|
|
218
|
+
return client.sendRequest(SemanticTokensRequest.type, { textDocument: { uri } });
|
|
219
|
+
},
|
|
220
|
+
nextDiagnostics(uri, timeoutMsOrOptions) {
|
|
221
|
+
const options = typeof timeoutMsOrOptions === 'number' ? { timeoutMs: timeoutMsOrOptions } : (timeoutMsOrOptions ?? {});
|
|
222
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_DIAGNOSTICS_TIMEOUT_MS;
|
|
223
|
+
const { fromIndex } = options;
|
|
224
|
+
if (fromIndex !== undefined) {
|
|
225
|
+
// Replay from the capture first: the publish this call is asking
|
|
226
|
+
// about may already have arrived, and a waiter can only ever see
|
|
227
|
+
// publishes that come later.
|
|
228
|
+
const captured = diagnostics.slice(Math.max(0, fromIndex)).find(params => params.uri === uri);
|
|
229
|
+
if (captured) {
|
|
230
|
+
return Promise.resolve(captured.diagnostics);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// A waiter on the ONE subscription above, never a second
|
|
234
|
+
// `onNotification` — see `diagnosticsWaiters` for why that matters.
|
|
235
|
+
// Without `fromIndex`, already-captured publishes are NOT replayed.
|
|
236
|
+
return new Promise((resolve, reject) => {
|
|
237
|
+
const waiter = (params) => {
|
|
238
|
+
if (params.uri !== uri) {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
clearTimeout(timer);
|
|
242
|
+
resolve(params.diagnostics);
|
|
243
|
+
return true;
|
|
244
|
+
};
|
|
245
|
+
const timer = setTimeout(() => {
|
|
246
|
+
const at = diagnosticsWaiters.indexOf(waiter);
|
|
247
|
+
if (at >= 0) {
|
|
248
|
+
diagnosticsWaiters.splice(at, 1);
|
|
249
|
+
}
|
|
250
|
+
reject(new Error(`Timed out waiting for diagnostics for ${uri}`));
|
|
251
|
+
}, timeoutMs);
|
|
252
|
+
diagnosticsWaiters.push(waiter);
|
|
253
|
+
});
|
|
254
|
+
},
|
|
255
|
+
nextAppliedEdit(uri, timeoutMsOrOptions) {
|
|
256
|
+
const options = typeof timeoutMsOrOptions === 'number' ? { timeoutMs: timeoutMsOrOptions } : (timeoutMsOrOptions ?? {});
|
|
257
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_DIAGNOSTICS_TIMEOUT_MS;
|
|
258
|
+
const { fromIndex, match } = options;
|
|
259
|
+
const matches = (edit) => edit.uris.includes(uri) && (match?.(edit) ?? true);
|
|
260
|
+
if (fromIndex !== undefined) {
|
|
261
|
+
// Replay from the capture first, for the same reason
|
|
262
|
+
// `nextDiagnostics` does: the push may already have arrived, and a
|
|
263
|
+
// waiter only ever sees later ones.
|
|
264
|
+
const captured = appliedEdits.slice(Math.max(0, fromIndex)).find(matches);
|
|
265
|
+
if (captured) {
|
|
266
|
+
return Promise.resolve(captured);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return new Promise((resolve, reject) => {
|
|
270
|
+
const waiter = (edit) => {
|
|
271
|
+
if (!matches(edit)) {
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
clearTimeout(timer);
|
|
275
|
+
resolve(edit);
|
|
276
|
+
return true;
|
|
277
|
+
};
|
|
278
|
+
const timer = setTimeout(() => {
|
|
279
|
+
const at = appliedEditWaiters.indexOf(waiter);
|
|
280
|
+
if (at >= 0) {
|
|
281
|
+
appliedEditWaiters.splice(at, 1);
|
|
282
|
+
}
|
|
283
|
+
reject(new Error(`Timed out waiting for a workspace/applyEdit addressing ${uri}`));
|
|
284
|
+
}, timeoutMs);
|
|
285
|
+
appliedEditWaiters.push(waiter);
|
|
286
|
+
});
|
|
287
|
+
},
|
|
288
|
+
setApplyEditHandler(handler) {
|
|
289
|
+
applyEditHandler = handler;
|
|
290
|
+
},
|
|
291
|
+
dispose() {
|
|
292
|
+
if (disposed) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
disposed = true;
|
|
296
|
+
appliedEditSubscription.dispose();
|
|
297
|
+
diagnosticsSubscription.dispose();
|
|
298
|
+
client.dispose();
|
|
299
|
+
serverConnection.dispose();
|
|
300
|
+
pair.dispose();
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=lsp-server-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-server-connection.js","sourceRoot":"","sources":["../../../src/testing/node/lsp-server-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
/** Options for {@link makeScratchWorkspace}. */
|
|
10
|
+
export interface ScratchWorkspaceOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Directory to copy in as the starting content, recursively. Omit for an
|
|
13
|
+
* empty workspace.
|
|
14
|
+
*/
|
|
15
|
+
readonly seed?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Prefix for the temp directory name, so a leaked directory is traceable to
|
|
18
|
+
* the suite that made it. Defaults to `hydranium-scratch-`.
|
|
19
|
+
*/
|
|
20
|
+
readonly prefix?: string;
|
|
21
|
+
}
|
|
22
|
+
/** A temp directory with a cleanup hook. */
|
|
23
|
+
export interface ScratchWorkspace {
|
|
24
|
+
/** Absolute path of the workspace root. */
|
|
25
|
+
readonly root: string;
|
|
26
|
+
/**
|
|
27
|
+
* Write a file under {@link root}, creating parent directories. Returns the
|
|
28
|
+
* absolute path, so a caller can hand it straight to a URI.
|
|
29
|
+
*/
|
|
30
|
+
write(relativePath: string, content: string): string;
|
|
31
|
+
/** Absolute path of `relativePath` under {@link root}, without writing. */
|
|
32
|
+
resolve(relativePath: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* `file:` URI string of `relativePath` under {@link root}, or of the root
|
|
35
|
+
* itself when called with no argument. This is what the wire carries, so it
|
|
36
|
+
* is what a test hands to `initialize`, `openModelDocument` or any request
|
|
37
|
+
* keyed by URI.
|
|
38
|
+
*
|
|
39
|
+
* **Exists so `` `file://${workspace.root}` `` cannot be hand-rolled**, which
|
|
40
|
+
* is not a style preference. {@link root} comes from `mkdtempSync` and is
|
|
41
|
+
* therefore OS-NATIVE: on Windows the template form yields
|
|
42
|
+
* `file://C:\dir\…`, where the drive letter parses as the authority and the
|
|
43
|
+
* backslashes are not separators, so every URI comparison in the suite fails
|
|
44
|
+
* against the `file:///c:/dir/…` the server produces. `URI.file` applies
|
|
45
|
+
* the drive-letter lowercasing, the third slash and the percent-encoding that
|
|
46
|
+
* makes the two agree.
|
|
47
|
+
*/
|
|
48
|
+
uri(relativePath?: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Remove the directory. Idempotent, and safe to call from an `afterEach`
|
|
51
|
+
* that may run after a failed `beforeEach`.
|
|
52
|
+
*/
|
|
53
|
+
dispose(): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a throwaway workspace directory. The caller owns teardown — pair the
|
|
57
|
+
* returned {@link ScratchWorkspace.dispose} with an `afterEach`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function makeScratchWorkspace(options?: ScratchWorkspaceOptions): ScratchWorkspace;
|
|
60
|
+
//# sourceMappingURL=scratch-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-workspace.d.ts","sourceRoot":"","sources":["../../../src/testing/node/scratch-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAgDlF,gDAAgD;AAChD,MAAM,WAAW,uBAAuB;IACrC;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACrD,2EAA2E;IAC3E,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,uBAA4B,GAAG,gBAAgB,CA6B5F"}
|