@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,134 @@
|
|
|
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
|
+
* Scaffolding for a generated on-disk corpus: the seeded PRNG, the
|
|
11
|
+
* overwrite permit, the newline normalisation and the per-extension tally.
|
|
12
|
+
* The caller supplies only the content.
|
|
13
|
+
*
|
|
14
|
+
* # Why the corpus is generated rather than committed
|
|
15
|
+
*
|
|
16
|
+
* A volume fixture is what a profiling run, a `watch` claim and any
|
|
17
|
+
* incremental-rebuild claim measure against, and it is several hundred files.
|
|
18
|
+
* Committing a deterministic generator and gitignoring its output keeps the
|
|
19
|
+
* artefact reproducible by any contributor at a fixed seed without the
|
|
20
|
+
* repository carrying the files.
|
|
21
|
+
*
|
|
22
|
+
* # Determinism is the whole contract, and it is fragile
|
|
23
|
+
*
|
|
24
|
+
* A performance figure is only readable beside another figure taken over the
|
|
25
|
+
* same input, so "same parameters, same bytes" is not a nicety. Three things
|
|
26
|
+
* break it and all three are handled here rather than left to each generator:
|
|
27
|
+
* `Math.random` (hence {@link GeneratedWorkspaceWriter.random}, a seeded
|
|
28
|
+
* mulberry32), a timestamp anywhere in the output (hence nothing written here
|
|
29
|
+
* records one), and platform line endings (hence
|
|
30
|
+
* {@link GeneratedWorkspaceWriter.write} normalising to LF).
|
|
31
|
+
*
|
|
32
|
+
* The draw order is the caller's responsibility, and it is the one that catches
|
|
33
|
+
* people out: the PRNG is a single stream, so a generator that reorders its
|
|
34
|
+
* emission — or draws conditionally on something it did not draw before —
|
|
35
|
+
* produces a different corpus at the same seed.
|
|
36
|
+
*
|
|
37
|
+
* # Size is a parameter because the signal is a CURVE
|
|
38
|
+
*
|
|
39
|
+
* An O(n²) regression in discovery, indexing, scope or linking is invisible in
|
|
40
|
+
* a single measurement: it shows up as the large/small ratio outrunning the
|
|
41
|
+
* file-count ratio. That is why this is a callable module rather than only a
|
|
42
|
+
* script — a bench runs it in-process at two sizes instead of shelling out —
|
|
43
|
+
* and why a generator built on it should take its sizes as options rather than
|
|
44
|
+
* fixing one N.
|
|
45
|
+
*
|
|
46
|
+
* # The marker is a permit, not a label
|
|
47
|
+
*
|
|
48
|
+
* Generating wipes the target directory, the caller names that directory, and
|
|
49
|
+
* the default is typically inside the repository. So the wipe needs
|
|
50
|
+
* authorisation: an absent directory, an empty one, or one already carrying the
|
|
51
|
+
* marker file. Anything else throws rather than deleting a tree this generator
|
|
52
|
+
* did not write.
|
|
53
|
+
*/
|
|
54
|
+
import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
|
|
55
|
+
import * as path from 'node:path';
|
|
56
|
+
/** Default name of the file that records — and authorises — a generated corpus. */
|
|
57
|
+
export const GENERATED_WORKSPACE_MARKER = '.hydranium-generated-workspace';
|
|
58
|
+
/**
|
|
59
|
+
* A deterministic 32-bit PRNG (mulberry32). Deliberately not `Math.random`: a
|
|
60
|
+
* corpus that varies per run cannot carry a comparable measurement.
|
|
61
|
+
*/
|
|
62
|
+
function makeRandom(seed) {
|
|
63
|
+
let state = seed >>> 0;
|
|
64
|
+
return () => {
|
|
65
|
+
state = (state + 0x6d2b79f5) >>> 0;
|
|
66
|
+
let mixed = state;
|
|
67
|
+
mixed = Math.imul(mixed ^ (mixed >>> 15), mixed | 1);
|
|
68
|
+
mixed ^= mixed + Math.imul(mixed ^ (mixed >>> 7), mixed | 61);
|
|
69
|
+
return ((mixed ^ (mixed >>> 14)) >>> 0) / 4294967296;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Prepare `root` for a fresh corpus, or throw naming the marker that would
|
|
74
|
+
* have authorised the wipe.
|
|
75
|
+
*/
|
|
76
|
+
function prepareRoot(root, marker) {
|
|
77
|
+
if (existsSync(root)) {
|
|
78
|
+
const entries = readdirSync(root);
|
|
79
|
+
if (entries.length > 0 && !entries.includes(marker)) {
|
|
80
|
+
throw new Error(`Refusing to overwrite ${root}: it is not empty and carries no ${marker} marker. ` +
|
|
81
|
+
'Point the output at a fresh directory, or delete this one yourself.');
|
|
82
|
+
}
|
|
83
|
+
rmSync(root, { recursive: true, force: true });
|
|
84
|
+
}
|
|
85
|
+
mkdirSync(root, { recursive: true });
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate a corpus under `options.root` and return what was written.
|
|
89
|
+
*
|
|
90
|
+
* The marker is written BEFORE `emit` runs, so an emission that throws
|
|
91
|
+
* half-way leaves a directory the next run is still permitted to wipe. Writing
|
|
92
|
+
* it afterwards would strand a partial corpus that has to be deleted by hand,
|
|
93
|
+
* and it buys nothing: the marker only ever lands in a directory this function
|
|
94
|
+
* has just created or been authorised to clear.
|
|
95
|
+
*/
|
|
96
|
+
export function makeGeneratedWorkspace(options) {
|
|
97
|
+
const root = path.resolve(options.root);
|
|
98
|
+
const marker = options.marker ?? GENERATED_WORKSPACE_MARKER;
|
|
99
|
+
const seed = options.seed ?? 0;
|
|
100
|
+
if (!Number.isInteger(seed)) {
|
|
101
|
+
throw new Error(`seed must be an integer, got ${String(seed)}`);
|
|
102
|
+
}
|
|
103
|
+
prepareRoot(root, marker);
|
|
104
|
+
const random = makeRandom(seed);
|
|
105
|
+
const files = {};
|
|
106
|
+
let total = 0;
|
|
107
|
+
const writeFile = (target, content) => {
|
|
108
|
+
mkdirSync(path.dirname(target), { recursive: true });
|
|
109
|
+
writeFileSync(target, content.replace(/\r\n/g, '\n'), 'utf8');
|
|
110
|
+
};
|
|
111
|
+
// Nothing here records a timestamp, which is the other half of the
|
|
112
|
+
// byte-reproducibility property the seeded stream gives.
|
|
113
|
+
writeFile(path.join(root, marker), `${JSON.stringify({ generator: options.generator, seed, ...options.parameters }, undefined, 2)}\n`);
|
|
114
|
+
options.emit({
|
|
115
|
+
root,
|
|
116
|
+
random,
|
|
117
|
+
randomInt: (minimum, maximum) => minimum + Math.floor(random() * (maximum - minimum + 1)),
|
|
118
|
+
write(relativePath, content) {
|
|
119
|
+
const target = path.join(root, relativePath);
|
|
120
|
+
writeFile(target, content);
|
|
121
|
+
const extension = path.extname(relativePath);
|
|
122
|
+
files[extension] = (files[extension] ?? 0) + 1;
|
|
123
|
+
total += 1;
|
|
124
|
+
return target;
|
|
125
|
+
},
|
|
126
|
+
directory(relativePath) {
|
|
127
|
+
const target = path.join(root, relativePath);
|
|
128
|
+
mkdirSync(target, { recursive: true });
|
|
129
|
+
return target;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return { root, seed, marker, files, total };
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=generated-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated-workspace.js","sourceRoot":"","sources":["../../../src/testing/node/generated-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpF,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,mFAAmF;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AA+E3E;;;GAGG;AACH,SAAS,UAAU,CAAC,IAAY;IAC7B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC;IACvB,OAAO,GAAG,EAAE;QACT,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACrD,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IACxD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,MAAc;IAC9C,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACZ,yBAAyB,IAAI,oCAAoC,MAAM,WAAW;gBAC/E,qEAAqE,CAC1E,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAkC;IACtE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,0BAA0B,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE1B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,OAAe,EAAQ,EAAE;QACzD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,mEAAmE;IACnE,yDAAyD;IACzD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvI,OAAO,CAAC,IAAI,CAAC;QACV,IAAI;QACJ,MAAM;QACN,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;QACzF,KAAK,CAAC,YAAY,EAAE,OAAO;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC7C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC7C,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,MAAM,CAAC;QACjB,CAAC;QACD,SAAS,CAAC,YAAY;YACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC7C,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC;QACjB,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
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
|
+
/** One committed golden fixture: a source file whose serialized form is under test. */
|
|
10
|
+
export interface GoldenFixture {
|
|
11
|
+
/** File name with the matched extension stripped — the `$name` for `it.each`/`describe.each`. */
|
|
12
|
+
readonly name: string;
|
|
13
|
+
/** Full file name including extension. */
|
|
14
|
+
readonly fileName: string;
|
|
15
|
+
/** Absolute path to the fixture on disk. */
|
|
16
|
+
readonly path: string;
|
|
17
|
+
/** Verbatim file contents (UTF-8), including any trailing newline. */
|
|
18
|
+
readonly text: string;
|
|
19
|
+
}
|
|
20
|
+
export interface MakeGoldenCorpusOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Only include files ending with this extension, leading dot included. Omit
|
|
23
|
+
* to include every regular file in the directory. The extension is stripped
|
|
24
|
+
* from {@link GoldenFixture.name}.
|
|
25
|
+
*/
|
|
26
|
+
readonly extension?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Fewest fixtures the corpus must yield; below it {@link makeGoldenCorpus}
|
|
29
|
+
* throws. Default `1`.
|
|
30
|
+
*
|
|
31
|
+
* `describe.each([])` registers zero tests and reports a green suite, so an
|
|
32
|
+
* empty corpus passes as coverage — the throw is what makes it observable.
|
|
33
|
+
* `0` opts out, for a caller that treats an empty directory as valid.
|
|
34
|
+
*/
|
|
35
|
+
readonly minimum?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read a directory of committed golden fixtures into a deterministic,
|
|
39
|
+
* name-sorted list a runner can drive with `it.each`/`describe.each`. See the
|
|
40
|
+
* module comment for the golden-file mechanism this implements. The corpus is
|
|
41
|
+
* discovered here; the grammar-specific `parse`/`serialize` the byte-stability
|
|
42
|
+
* assertion needs are supplied adopter-side.
|
|
43
|
+
*
|
|
44
|
+
* Reads synchronously so the corpus is available at test-collection time
|
|
45
|
+
* (when `it.each` expands). Sub-directories are ignored — a flat corpus keeps
|
|
46
|
+
* the `$name` labels unambiguous. Throws below
|
|
47
|
+
* {@link MakeGoldenCorpusOptions.minimum}.
|
|
48
|
+
*/
|
|
49
|
+
export declare function makeGoldenCorpus(directory: string, options?: MakeGoldenCorpusOptions): GoldenFixture[];
|
|
50
|
+
//# sourceMappingURL=golden-corpus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"golden-corpus.d.ts","sourceRoot":"","sources":["../../../src/testing/node/golden-corpus.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAyClF,uFAAuF;AACvF,MAAM,WAAW,aAAa;IAC3B,iGAAiG;IACjG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACrC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,aAAa,EAAE,CAuB1G"}
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
* Golden-file testing for grammar serializers.
|
|
11
|
+
*
|
|
12
|
+
* # The idea
|
|
13
|
+
*
|
|
14
|
+
* A *golden file* holds the exact expected output of some process, committed
|
|
15
|
+
* to the repo as the source of truth. The test runs the process and compares
|
|
16
|
+
* its output against the golden byte-for-byte; a mismatch fails and shows a
|
|
17
|
+
* readable diff. A *golden corpus* is just a directory of such files — one
|
|
18
|
+
* per case — spanning the matrix of inputs worth pinning.
|
|
19
|
+
*
|
|
20
|
+
* Here the process under test is a grammar serializer (AST → source text).
|
|
21
|
+
* Each golden is a source file written in the serializer's canonical output
|
|
22
|
+
* format; the corpus test parses it, re-serializes, and asserts the result
|
|
23
|
+
* reproduces the file exactly. So any change to the serializer's *formatting*
|
|
24
|
+
* — an indent width, a clause order, a stray trailing space — stops
|
|
25
|
+
* reproducing the goldens and surfaces as a concrete, reviewable diff instead
|
|
26
|
+
* of a silent behavioural drift.
|
|
27
|
+
*
|
|
28
|
+
* # Why files, not runner snapshots
|
|
29
|
+
*
|
|
30
|
+
* The artifact under test IS an output *format*, so it belongs in a real,
|
|
31
|
+
* diffable, hand-authored file. A runner's `.snap` snapshot is runner-
|
|
32
|
+
* specific, and its `-u` "update" flag rubber-stamps whatever the code now
|
|
33
|
+
* emits — exactly the regression a golden test exists to catch. A committed
|
|
34
|
+
* golden makes an update a deliberate edit that a reviewer sees.
|
|
35
|
+
*
|
|
36
|
+
* # Division of labour
|
|
37
|
+
*
|
|
38
|
+
* This module is the framework-side *mechanism* — discover + read files —
|
|
39
|
+
* and is grammar-agnostic. The *content* (the goldens themselves and the
|
|
40
|
+
* parse/serialize wiring) is adopter-side, because a serializer's output is
|
|
41
|
+
* always specific to its grammar. Pair {@link makeGoldenCorpus} with
|
|
42
|
+
* `makeAstSnapshot` for the structural round-trip half of the corpus.
|
|
43
|
+
*/
|
|
44
|
+
import { readFileSync, readdirSync } from 'node:fs';
|
|
45
|
+
import { basename, join } from 'node:path';
|
|
46
|
+
/**
|
|
47
|
+
* Read a directory of committed golden fixtures into a deterministic,
|
|
48
|
+
* name-sorted list a runner can drive with `it.each`/`describe.each`. See the
|
|
49
|
+
* module comment for the golden-file mechanism this implements. The corpus is
|
|
50
|
+
* discovered here; the grammar-specific `parse`/`serialize` the byte-stability
|
|
51
|
+
* assertion needs are supplied adopter-side.
|
|
52
|
+
*
|
|
53
|
+
* Reads synchronously so the corpus is available at test-collection time
|
|
54
|
+
* (when `it.each` expands). Sub-directories are ignored — a flat corpus keeps
|
|
55
|
+
* the `$name` labels unambiguous. Throws below
|
|
56
|
+
* {@link MakeGoldenCorpusOptions.minimum}.
|
|
57
|
+
*/
|
|
58
|
+
export function makeGoldenCorpus(directory, options = {}) {
|
|
59
|
+
const { extension, minimum = 1 } = options;
|
|
60
|
+
const fixtures = readdirSync(directory, { withFileTypes: true })
|
|
61
|
+
.filter(entry => entry.isFile())
|
|
62
|
+
.filter(entry => extension === undefined || entry.name.endsWith(extension))
|
|
63
|
+
.map(entry => {
|
|
64
|
+
const path = join(directory, entry.name);
|
|
65
|
+
return {
|
|
66
|
+
name: extension === undefined ? entry.name : basename(entry.name, extension),
|
|
67
|
+
fileName: entry.name,
|
|
68
|
+
path,
|
|
69
|
+
text: readFileSync(path, 'utf8')
|
|
70
|
+
};
|
|
71
|
+
})
|
|
72
|
+
.sort((left, right) => (left.fileName < right.fileName ? -1 : left.fileName > right.fileName ? 1 : 0));
|
|
73
|
+
if (fixtures.length < minimum) {
|
|
74
|
+
const filter = extension === undefined ? 'no extension filter' : `extension '${extension}'`;
|
|
75
|
+
throw new Error(`golden corpus at ${directory} yielded ${fixtures.length} fixture(s) with ${filter}, expected at least ${minimum}. ` +
|
|
76
|
+
'An empty corpus makes `describe.each` register zero tests, so the suite would pass without asserting anything.');
|
|
77
|
+
}
|
|
78
|
+
return fixtures;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=golden-corpus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"golden-corpus.js","sourceRoot":"","sources":["../../../src/testing/node/golden-corpus.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgC3C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,UAAmC,EAAE;IACtF,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAC5D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SAC1E,GAAG,CAAC,KAAK,CAAC,EAAE;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO;YACJ,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;YAC5E,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,IAAI;YACJ,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;SAClC,CAAC;IACL,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,IAAI,QAAQ,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,SAAS,GAAG,CAAC;QAC5F,MAAM,IAAI,KAAK,CACZ,oBAAoB,SAAS,YAAY,QAAQ,CAAC,MAAM,oBAAoB,MAAM,uBAAuB,OAAO,IAAI;YACjH,gHAAgH,CACrH,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
* `@hydranium/core/testing/node` — the test support that needs a Node runtime:
|
|
11
|
+
* the scratch-workspace, golden-corpus and generated-workspace fixtures (all
|
|
12
|
+
* three reach the real filesystem), the in-process LSP transport
|
|
13
|
+
* (`vscode-jsonrpc/node` stream readers), the all-in-one LSP harness (a
|
|
14
|
+
* `vscode-languageserver/node` `Connection`), and the subprocess tier, which
|
|
15
|
+
* spawns a built entry as a child process.
|
|
16
|
+
*
|
|
17
|
+
* Separate from `./testing` so that barrel stays browser-neutral and can be
|
|
18
|
+
* gated as such. Each module here names a capability a browser genuinely lacks,
|
|
19
|
+
* so this is a real split rather than a packaging preference — the same
|
|
20
|
+
* distinction the package surface draws between `.` and `./node`.
|
|
21
|
+
*/
|
|
22
|
+
export * from './generated-workspace.js';
|
|
23
|
+
export * from './golden-corpus.js';
|
|
24
|
+
export * from './lsp-harness.js';
|
|
25
|
+
export * from './lsp-server-connection.js';
|
|
26
|
+
export * from './scratch-workspace.js';
|
|
27
|
+
export * from './spawned-server.js';
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;GAYG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
* `@hydranium/core/testing/node` — the test support that needs a Node runtime:
|
|
11
|
+
* the scratch-workspace, golden-corpus and generated-workspace fixtures (all
|
|
12
|
+
* three reach the real filesystem), the in-process LSP transport
|
|
13
|
+
* (`vscode-jsonrpc/node` stream readers), the all-in-one LSP harness (a
|
|
14
|
+
* `vscode-languageserver/node` `Connection`), and the subprocess tier, which
|
|
15
|
+
* spawns a built entry as a child process.
|
|
16
|
+
*
|
|
17
|
+
* Separate from `./testing` so that barrel stays browser-neutral and can be
|
|
18
|
+
* gated as such. Each module here names a capability a browser genuinely lacks,
|
|
19
|
+
* so this is a real split rather than a packaging preference — the same
|
|
20
|
+
* distinction the package surface draws between `.` and `./node`.
|
|
21
|
+
*/
|
|
22
|
+
export * from './generated-workspace.js';
|
|
23
|
+
export * from './golden-corpus.js';
|
|
24
|
+
export * from './lsp-harness.js';
|
|
25
|
+
export * from './lsp-server-connection.js';
|
|
26
|
+
export * from './scratch-workspace.js';
|
|
27
|
+
export * from './spawned-server.js';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/node/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;GAYG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
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 { LangiumSharedServices } from '@hydranium/langium/lsp';
|
|
10
|
+
import type { Connection } from 'vscode-languageserver/node';
|
|
11
|
+
import { type WorkspaceFolderInput } from '../../langium/workspace/initialize-workspace.js';
|
|
12
|
+
import type { ServerSharedServicesMinimal } from '../../langium/shared-services.js';
|
|
13
|
+
import { type LspServerConnection } from './lsp-server-connection.js';
|
|
14
|
+
/**
|
|
15
|
+
* The composed shared-services tree the `MakeLspHarnessOptions.createServices`
|
|
16
|
+
* callback must return. It is both a framework {@link ServerSharedServicesMinimal}
|
|
17
|
+
* (so the harness can drive {@link buildWorkspaceProgrammatically}) and a Langium
|
|
18
|
+
* {@link LangiumSharedServices} (so the harness can hand it to
|
|
19
|
+
* {@link startLanguageServer}, which wires the LSP handlers onto the connection).
|
|
20
|
+
* Every real adopter tree (`createXxxServices(...).shared`) satisfies both.
|
|
21
|
+
*/
|
|
22
|
+
export type LspHarnessSharedServices = ServerSharedServicesMinimal & LangiumSharedServices;
|
|
23
|
+
/**
|
|
24
|
+
* Configuration for {@link makeLspHarness}, in two forms.
|
|
25
|
+
*
|
|
26
|
+
* SINGLE-HEAD (`createServices`) — the all-in-one convenience: the harness OWNS
|
|
27
|
+
* the transport and tree creation. It builds the in-process connection and hands
|
|
28
|
+
* it to the adopter factory, which composes the shared services around it, e.g.
|
|
29
|
+
* `connection => createMyLangServices({ connection }).shared`. The callback owns the
|
|
30
|
+
* filesystem choice (EmptyFileSystem for didOpen-only tests, NodeFileSystem for
|
|
31
|
+
* fixture-backed workspace tests) and any adopter modules.
|
|
32
|
+
*
|
|
33
|
+
* MULTI-HEAD (`connection` + `services`) — the symmetric "take the tree" form,
|
|
34
|
+
* matching the data-server and GLSP harnesses, which attach to a caller-built
|
|
35
|
+
* tree. Because Langium binds the connection INTO the tree at
|
|
36
|
+
* `createXxxServices({ connection })`, the caller makes the wire first
|
|
37
|
+
* ({@link makeLspServerConnection}), builds the ONE shared tree around its
|
|
38
|
+
* `serverConnection`, then hands BOTH the wire and `.shared` to the harness — so
|
|
39
|
+
* the SAME tree feeds the LSP head here and the other heads elsewhere. The
|
|
40
|
+
* harness still attaches the LSP head ({@link startLanguageServer}) and owns the
|
|
41
|
+
* wire's teardown via {@link LspHarness.dispose}.
|
|
42
|
+
*/
|
|
43
|
+
export type MakeLspHarnessOptions = LspHarnessCreateServicesOptions | LspHarnessAttachOptions;
|
|
44
|
+
/** SINGLE-HEAD form — the harness builds the transport and the tree. */
|
|
45
|
+
export interface LspHarnessCreateServicesOptions {
|
|
46
|
+
/**
|
|
47
|
+
* Compose the shared services against the supplied server {@link Connection}
|
|
48
|
+
* (the server side of the in-process stream pair). Invoked once,
|
|
49
|
+
* synchronously, before {@link startLanguageServer} wires the LSP handlers.
|
|
50
|
+
*/
|
|
51
|
+
createServices: (connection: Connection) => LspHarnessSharedServices;
|
|
52
|
+
}
|
|
53
|
+
/** MULTI-HEAD form — the caller owns the transport and the tree; the harness attaches. */
|
|
54
|
+
export interface LspHarnessAttachOptions {
|
|
55
|
+
/**
|
|
56
|
+
* The in-process LSP transport the caller built ({@link makeLspServerConnection})
|
|
57
|
+
* and composed the tree around. The harness drives its facades and owns its
|
|
58
|
+
* teardown.
|
|
59
|
+
*/
|
|
60
|
+
connection: LspServerConnection;
|
|
61
|
+
/**
|
|
62
|
+
* The composed shared services (`createXxxServices({ connection }).shared`)
|
|
63
|
+
* built around `connection.serverConnection`. The harness attaches the LSP head
|
|
64
|
+
* to it via {@link startLanguageServer}.
|
|
65
|
+
*/
|
|
66
|
+
services: LspHarnessSharedServices;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Wiring bundle returned by {@link makeLspHarness} — the in-process replacement
|
|
70
|
+
* for the subprocess stdio smoke. It is the {@link LspServerConnection} transport
|
|
71
|
+
* seam (real `Connection` over the in-memory wire, the diagnostics and
|
|
72
|
+
* applyEdit captures, typed
|
|
73
|
+
* `completion`/`hover`/`semanticTokens`/`nextDiagnostics`/`nextAppliedEdit`
|
|
74
|
+
* facades, lifecycle `initialize`/`shutdown`, document-sync
|
|
75
|
+
* `openDocument`/`changeDocument`, idempotent `dispose`) PLUS the two members the
|
|
76
|
+
* all-in-one harness owns that the bare transport does not:
|
|
77
|
+
*
|
|
78
|
+
* - `services` — the **subject**, the composed shared-services tree the harness
|
|
79
|
+
* stood the LSP server up on (the harness created it via `createServices` and
|
|
80
|
+
* attached the server via `startLanguageServer`);
|
|
81
|
+
* - `buildWorkspace` — the deterministic project-state seed.
|
|
82
|
+
*
|
|
83
|
+
* The transport's own `serverConnection` is intentionally NOT surfaced here. In
|
|
84
|
+
* the single-head form the harness owns the connection, so a caller never needs
|
|
85
|
+
* it; in the multi-head attach form the caller already holds the
|
|
86
|
+
* {@link LspServerConnection} it passed in (and built the tree around its
|
|
87
|
+
* `serverConnection`), so it never needs the harness to re-surface it.
|
|
88
|
+
*/
|
|
89
|
+
export type LspHarness = Omit<LspServerConnection, 'serverConnection'> & {
|
|
90
|
+
/** Subject: the composed shared services running the in-process LSP server. */
|
|
91
|
+
readonly services: ServerSharedServicesMinimal;
|
|
92
|
+
/**
|
|
93
|
+
* Deterministic project-state seed: awaits
|
|
94
|
+
* {@link buildWorkspaceProgrammatically} (discovery + build every document to
|
|
95
|
+
* `Validated`, awaited to settle).
|
|
96
|
+
*
|
|
97
|
+
* STANDALONE — it performs its own workspace init, so do NOT also call
|
|
98
|
+
* {@link LspServerConnection.initialize} on the same harness. Per LSP,
|
|
99
|
+
* `initialize` is once-only ("may only be sent once"); a second workspace init
|
|
100
|
+
* cancels the first build. Building also publishes diagnostics over the
|
|
101
|
+
* connection asynchronously, so a `dispose()` racing those is a known
|
|
102
|
+
* limitation of this state-only path.
|
|
103
|
+
*
|
|
104
|
+
* **A test that needs BOTH project state AND live wire requests should call
|
|
105
|
+
* `initialize({ workspaceFolders })` instead of this** — that settles the
|
|
106
|
+
* workspace before resolving, so it is a single init with nothing racy left
|
|
107
|
+
* to await. Combining the two is the failure mode worth naming, because it is
|
|
108
|
+
* silent: the second init cancels the first and diagnostics are then never
|
|
109
|
+
* published for ANY document, so every wire assertion times out pointing at
|
|
110
|
+
* the transport rather than at the cause.
|
|
111
|
+
*/
|
|
112
|
+
buildWorkspace(folders: WorkspaceFolderInput | ReadonlyArray<WorkspaceFolderInput>): Promise<void>;
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* Wire a real Langium LSP server through its real `Connection` and the LSP
|
|
116
|
+
* wire **in-process** — no subprocess, no built binary. The in-process
|
|
117
|
+
* replacement for the subprocess stdio smoke: same real connection +
|
|
118
|
+
* lifecycle, built on the {@link makeLspServerConnection} transport primitive
|
|
119
|
+
* and on {@link buildWorkspaceProgrammatically} for the deterministic workspace
|
|
120
|
+
* seed.
|
|
121
|
+
*
|
|
122
|
+
* Two forms (see {@link MakeLspHarnessOptions}). SINGLE-HEAD (`createServices`):
|
|
123
|
+
* the all-in-one convenience — the harness builds the transport, calls
|
|
124
|
+
* `createServices` with its server connection, and attaches the LSP head.
|
|
125
|
+
* MULTI-HEAD (`connection` + `services`): the symmetric "take the tree" form —
|
|
126
|
+
* the caller built the wire ({@link makeLspServerConnection}) and the ONE shared
|
|
127
|
+
* tree around it, and the harness attaches the LSP head to that `services` while
|
|
128
|
+
* the data-server / GLSP heads attach to the same tree.
|
|
129
|
+
*
|
|
130
|
+
* This does NOT test provider *logic* — `langium/test` (`expectCompletion`,
|
|
131
|
+
* `expectHover`, `validationHelper`, …, re-exported from
|
|
132
|
+
* `@hydranium/core/testing`) already covers that by calling providers directly.
|
|
133
|
+
* The harness owns the wire + lifecycle layer the provider-direct helpers skip:
|
|
134
|
+
* `initialize`/`initialized`, the `didOpen`/`didChange` → `DocumentBuilder` →
|
|
135
|
+
* `publishDiagnostics` round-trip over the wire, JSON-RPC serialization, and
|
|
136
|
+
* `shutdown`/`exit`.
|
|
137
|
+
*/
|
|
138
|
+
export declare function makeLspHarness(options: MakeLspHarnessOptions): LspHarness;
|
|
139
|
+
//# sourceMappingURL=lsp-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-harness.d.ts","sourceRoot":"","sources":["../../../src/testing/node/lsp-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,EAAkC,KAAK,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAC5H,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAE/F;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG,2BAA2B,GAAG,qBAAqB,CAAC;AAE3F;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,qBAAqB,GAAG,+BAA+B,GAAG,uBAAuB,CAAC;AAE9F,wEAAwE;AACxE,MAAM,WAAW,+BAA+B;IAC7C;;;;OAIG;IACH,cAAc,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,wBAAwB,CAAC;CACvE;AAED,0FAA0F;AAC1F,MAAM,WAAW,uBAAuB;IACrC;;;;OAIG;IACH,UAAU,EAAE,mBAAmB,CAAC;IAChC;;;;OAIG;IACH,QAAQ,EAAE,wBAAwB,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,GAAG;IACtE,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrG,CAAC;AA8BF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,UAAU,CAuDzE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
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 { IntegrityService } from '../../langium/integrity/index.js';
|
|
10
|
+
import { startLanguageServer } from '../../lsp/index.js';
|
|
11
|
+
import { buildWorkspaceProgrammatically } from '../../langium/workspace/initialize-workspace.js';
|
|
12
|
+
import { makeLspServerConnection } from './lsp-server-connection.js';
|
|
13
|
+
/**
|
|
14
|
+
* Await the workspace init that an `initialize({ workspaceFolders })` kicked
|
|
15
|
+
* off, so the caller can use the workspace on return.
|
|
16
|
+
*
|
|
17
|
+
* This is the gate the transport's own `initialize` cannot provide: it holds
|
|
18
|
+
* only the connection, while settling needs the services tree. Without it
|
|
19
|
+
* **`initialize({ workspaceFolders })` returns with ZERO documents
|
|
20
|
+
* registered**, because the `initialized` notification is fire-and-forget and
|
|
21
|
+
* discovery has not run yet.
|
|
22
|
+
*
|
|
23
|
+
* **The landmark is {@link IntegrityService.SettledState}, NOT
|
|
24
|
+
* `DocumentState.Validated`.** The init build links and indexes but does not
|
|
25
|
+
* validate — which is precisely why {@link buildWorkspaceProgrammatically}
|
|
26
|
+
* exists and appends its own `{ validation: true }` pass. Waiting on `Validated`
|
|
27
|
+
* hangs forever against a workspace nobody asked to validate. Linking, not
|
|
28
|
+
* validation, is what "the workspace is usable" means.
|
|
29
|
+
*
|
|
30
|
+
* One await, deliberately. Queueing a no-op `WorkspaceLock.read` first does NOT
|
|
31
|
+
* drain the init write — measured, and the read resolves immediately with no
|
|
32
|
+
* documents registered, because the write is not yet enqueued when
|
|
33
|
+
* `initialize()` returns. `waitUntil` does all the work, registering a
|
|
34
|
+
* build-phase listener that a later build satisfies. An empty workspace folder
|
|
35
|
+
* resolves rather than hanging.
|
|
36
|
+
*/
|
|
37
|
+
async function settleInitializedWorkspace(services) {
|
|
38
|
+
await services.workspace.DocumentBuilder.waitUntil(IntegrityService.SettledState);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Wire a real Langium LSP server through its real `Connection` and the LSP
|
|
42
|
+
* wire **in-process** — no subprocess, no built binary. The in-process
|
|
43
|
+
* replacement for the subprocess stdio smoke: same real connection +
|
|
44
|
+
* lifecycle, built on the {@link makeLspServerConnection} transport primitive
|
|
45
|
+
* and on {@link buildWorkspaceProgrammatically} for the deterministic workspace
|
|
46
|
+
* seed.
|
|
47
|
+
*
|
|
48
|
+
* Two forms (see {@link MakeLspHarnessOptions}). SINGLE-HEAD (`createServices`):
|
|
49
|
+
* the all-in-one convenience — the harness builds the transport, calls
|
|
50
|
+
* `createServices` with its server connection, and attaches the LSP head.
|
|
51
|
+
* MULTI-HEAD (`connection` + `services`): the symmetric "take the tree" form —
|
|
52
|
+
* the caller built the wire ({@link makeLspServerConnection}) and the ONE shared
|
|
53
|
+
* tree around it, and the harness attaches the LSP head to that `services` while
|
|
54
|
+
* the data-server / GLSP heads attach to the same tree.
|
|
55
|
+
*
|
|
56
|
+
* This does NOT test provider *logic* — `langium/test` (`expectCompletion`,
|
|
57
|
+
* `expectHover`, `validationHelper`, …, re-exported from
|
|
58
|
+
* `@hydranium/core/testing`) already covers that by calling providers directly.
|
|
59
|
+
* The harness owns the wire + lifecycle layer the provider-direct helpers skip:
|
|
60
|
+
* `initialize`/`initialized`, the `didOpen`/`didChange` → `DocumentBuilder` →
|
|
61
|
+
* `publishDiagnostics` round-trip over the wire, JSON-RPC serialization, and
|
|
62
|
+
* `shutdown`/`exit`.
|
|
63
|
+
*/
|
|
64
|
+
export function makeLspHarness(options) {
|
|
65
|
+
// Attach form: the caller owns the transport + tree. Convenience form: the
|
|
66
|
+
// harness builds the transport and the adopter factory composes the tree.
|
|
67
|
+
const transport = 'connection' in options ? options.connection : makeLspServerConnection();
|
|
68
|
+
const services = 'connection' in options ? options.services : options.createServices(transport.serverConnection);
|
|
69
|
+
// Wires the LSP handlers onto the transport's server connection and calls
|
|
70
|
+
// `connection.listen()`.
|
|
71
|
+
startLanguageServer(services);
|
|
72
|
+
return {
|
|
73
|
+
services,
|
|
74
|
+
client: transport.client,
|
|
75
|
+
diagnostics: transport.diagnostics,
|
|
76
|
+
/**
|
|
77
|
+
* The transport handshake, plus the workspace settle the transport cannot
|
|
78
|
+
* do on its own — see {@link settleInitializedWorkspace}. Only when
|
|
79
|
+
* `workspaceFolders` are actually supplied: the no-folders default has no
|
|
80
|
+
* discovery to wait for.
|
|
81
|
+
*
|
|
82
|
+
* With this, `initialize({ workspaceFolders })` is the single call a test
|
|
83
|
+
* needing BOTH project state and live wire requests should make — the path
|
|
84
|
+
* {@link LspHarness.buildWorkspace} points at. Do NOT combine the two:
|
|
85
|
+
* they are separate workspace inits, the second cancels the first, and the
|
|
86
|
+
* observable result is that diagnostics are never published at all — for
|
|
87
|
+
* any document, so every assertion times out accusing the transport.
|
|
88
|
+
*
|
|
89
|
+
* **What the settle is and is not needed for, measured rather than
|
|
90
|
+
* assumed.** It matters for a test that INSPECTS STATE after initialize:
|
|
91
|
+
* without it there are zero documents registered on return. It is NOT
|
|
92
|
+
* needed by a test that awaits a wire round-trip first — such a suite
|
|
93
|
+
* passes with the settle removed, because awaiting `nextDiagnostics`
|
|
94
|
+
* incidentally gives discovery time to finish. So this closes a footgun
|
|
95
|
+
* rather than fixing a failing test; do not expect removing it to turn
|
|
96
|
+
* anything red.
|
|
97
|
+
*/
|
|
98
|
+
initialize: async (params) => {
|
|
99
|
+
const result = await transport.initialize(params);
|
|
100
|
+
if (params?.workspaceFolders && params.workspaceFolders.length > 0) {
|
|
101
|
+
await settleInitializedWorkspace(services);
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
},
|
|
105
|
+
shutdown: transport.shutdown,
|
|
106
|
+
openDocument: transport.openDocument,
|
|
107
|
+
changeDocument: transport.changeDocument,
|
|
108
|
+
completion: transport.completion,
|
|
109
|
+
hover: transport.hover,
|
|
110
|
+
semanticTokens: transport.semanticTokens,
|
|
111
|
+
nextDiagnostics: transport.nextDiagnostics,
|
|
112
|
+
appliedEdits: transport.appliedEdits,
|
|
113
|
+
nextAppliedEdit: transport.nextAppliedEdit,
|
|
114
|
+
setApplyEditHandler: transport.setApplyEditHandler,
|
|
115
|
+
buildWorkspace: folders => buildWorkspaceProgrammatically(services, folders),
|
|
116
|
+
dispose: transport.dispose
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=lsp-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-harness.js","sourceRoot":"","sources":["../../../src/testing/node/lsp-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAIlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,8BAA8B,EAA6B,MAAM,iDAAiD,CAAC;AAE5H,OAAO,EAAE,uBAAuB,EAA4B,MAAM,4BAA4B,CAAC;AA2G/F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,KAAK,UAAU,0BAA0B,CAAC,QAAkC;IACzE,MAAM,QAAQ,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC1D,2EAA2E;IAC3E,0EAA0E;IAC1E,MAAM,SAAS,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC;IAC3F,MAAM,QAAQ,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACjH,0EAA0E;IAC1E,yBAAyB;IACzB,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAE9B,OAAO;QACJ,QAAQ;QACR,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC;;;;;;;;;;;;;;;;;;;;;WAqBG;QACH,UAAU,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;YACxB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,MAAM,EAAE,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClE,MAAM,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,MAAM,CAAC;QACjB,CAAC;QACD,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,UAAU,EAAE,SAAS,CAAC,UAAU;QAChC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,mBAAmB,EAAE,SAAS,CAAC,mBAAmB;QAClD,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,8BAA8B,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC5E,OAAO,EAAE,SAAS,CAAC,OAAO;KAC5B,CAAC;AACL,CAAC"}
|