@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,57 @@
|
|
|
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
|
+
import { type TransferElement } from '@hydranium/protocol';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Applies `rewrite` to the ONE populated semantic slot of a wrapper-shaped
|
|
14
|
+
* transfer root, reassembling the wrapper around the result.
|
|
15
|
+
*
|
|
16
|
+
* The transfer-side counterpart to `NameBasedKeyProvider.isSemanticRoot`'s
|
|
17
|
+
* "wrapper grammars with an unnamed root node" case: the document root is a
|
|
18
|
+
* discriminating wrapper carrying one populated slot per semantic type
|
|
19
|
+
* (`{ entity }` or `{ mapping }` or `{ diagram }`, never two), and an
|
|
20
|
+
* `UpdateRewrite` is handed that wrapper while the fields it cares about
|
|
21
|
+
* live one level down.
|
|
22
|
+
*
|
|
23
|
+
* `semanticKeys` is supplied rather than inferred: which slots a wrapper may
|
|
24
|
+
* carry is grammar knowledge, and sniffing "the single object-valued property"
|
|
25
|
+
* would silently pick up any object-valued metadata a root grows later.
|
|
26
|
+
*
|
|
27
|
+
* **Identity is the no-op signal, and it is load-bearing.** When no slot is
|
|
28
|
+
* populated, or `rewrite` hands back the same reference it was given, the
|
|
29
|
+
* ARGUMENT is returned — not a copy. An `UpdateRewrite` chain folds every
|
|
30
|
+
* rewrite over the model, so a rewrite that does not apply must be free; a
|
|
31
|
+
* defensive copy here would make every unrelated write allocate a fresh root per
|
|
32
|
+
* registered rewrite. Callers that compare with `===` to detect "nothing
|
|
33
|
+
* happened" depend on this too.
|
|
34
|
+
*
|
|
35
|
+
* Rewrites of an unwrapped grammar — where the named root element IS the
|
|
36
|
+
* semantic root — do not need this helper: their model is already the node.
|
|
37
|
+
*/
|
|
38
|
+
export function rewriteSemanticRoot<TTransfer extends TransferElement>(
|
|
39
|
+
model: TTransfer,
|
|
40
|
+
semanticKeys: readonly string[],
|
|
41
|
+
rewrite: (semanticRoot: Record<string, unknown>, key: string) => Record<string, unknown>
|
|
42
|
+
): TTransfer {
|
|
43
|
+
const record = model as unknown as Record<string, unknown>;
|
|
44
|
+
const semanticKey = semanticKeys.find(key => record[key]);
|
|
45
|
+
if (!semanticKey) {
|
|
46
|
+
return model;
|
|
47
|
+
}
|
|
48
|
+
const semanticRoot = record[semanticKey] as Record<string, unknown> | undefined;
|
|
49
|
+
if (!semanticRoot) {
|
|
50
|
+
return model;
|
|
51
|
+
}
|
|
52
|
+
const rewritten = rewrite(semanticRoot, semanticKey);
|
|
53
|
+
if (rewritten === semanticRoot) {
|
|
54
|
+
return model;
|
|
55
|
+
}
|
|
56
|
+
return { ...record, [semanticKey]: rewritten } as unknown as TTransfer;
|
|
57
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
import { type Disposable } from 'vscode-languageserver';
|
|
11
|
+
import { type AstNode } from '@hydranium/langium';
|
|
12
|
+
import { type TransferElement } from '@hydranium/protocol';
|
|
13
|
+
import { type UpdateRewrite } from './update-rewrite.js';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Registry handed to an {@link UpdateRewriteContribution}. Implemented by the
|
|
17
|
+
* update-rewrite service; a contribution receives it and registers one or many
|
|
18
|
+
* rewrites. Doubles as the low-level imperative API for the rare
|
|
19
|
+
* runtime-dynamic registration case.
|
|
20
|
+
*
|
|
21
|
+
* Generic over `<TTransfer, TAst>` for the same reason {@link UpdateRewrite} and
|
|
22
|
+
* `UpdateRewriteService` are: an adopter that narrows to its own root types gets
|
|
23
|
+
* a `rewrite` callback whose `model` and `previous` are already its types, so a
|
|
24
|
+
* registration needs no cast at all. Both default to the structural bases, so
|
|
25
|
+
* every existing call site keeps compiling unchanged.
|
|
26
|
+
*/
|
|
27
|
+
export interface UpdateRewriteRegistry<TTransfer extends TransferElement = TransferElement, TAst extends AstNode = AstNode> {
|
|
28
|
+
register(rewrite: UpdateRewrite<TTransfer, TAst>): Disposable;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Declarative registration of update rewrites. Bound under the module's
|
|
33
|
+
* `updateRewrite.rewrites` contribution group (a
|
|
34
|
+
* `Record<string, UpdateRewriteContribution>`); the update-rewrite service
|
|
35
|
+
* reads its own group at construction and calls this method, handing itself in
|
|
36
|
+
* as the registry.
|
|
37
|
+
*
|
|
38
|
+
* The domain-qualified method name lets a single cross-cutting class implement
|
|
39
|
+
* several contribution interfaces (e.g. also `IntegrityRuleContribution`)
|
|
40
|
+
* without method collision — bind it once and reference it from each group.
|
|
41
|
+
*/
|
|
42
|
+
export interface UpdateRewriteContribution<TTransfer extends TransferElement = TransferElement, TAst extends AstNode = AstNode> {
|
|
43
|
+
registerUpdateRewrites(registry: UpdateRewriteRegistry<TTransfer, TAst>): void;
|
|
44
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
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
|
+
import { isPromiseLike, type TransferElement, type Tracer } from '@hydranium/protocol';
|
|
11
|
+
import { type AstNode, interruptAndCheck } from '@hydranium/langium';
|
|
12
|
+
import { type CancellationToken, type Disposable } from 'vscode-languageserver';
|
|
13
|
+
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
14
|
+
import { type ServerLanguageServices } from '../language-module.js';
|
|
15
|
+
import { Registry } from '../../util/registry.js';
|
|
16
|
+
import { type UpdateRewriteRegistry } from './update-rewrite-contribution.js';
|
|
17
|
+
import { type UpdateRewrite } from './update-rewrite.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Public contract for the per-language update-rewrite runner. Extends the
|
|
21
|
+
* {@link UpdateRewriteRegistry} (the imperative `register` surface
|
|
22
|
+
* contributions use) with the {@link apply} entry point
|
|
23
|
+
* `ModelService.rewriteModel` calls on the structured write path, before
|
|
24
|
+
* serialisation.
|
|
25
|
+
*
|
|
26
|
+
* Adopter overrides go through {@link DefaultUpdateRewriteService}; the
|
|
27
|
+
* interface keeps the public API stable while internals (the registry) stay
|
|
28
|
+
* `protected` on the default class.
|
|
29
|
+
*
|
|
30
|
+
* Generic over `<TTransfer, TAst>` so each consumer plugs in their own transfer
|
|
31
|
+
* and AST root types; both default to the structural bases.
|
|
32
|
+
*/
|
|
33
|
+
export interface UpdateRewriteService<
|
|
34
|
+
TTransfer extends TransferElement = TransferElement,
|
|
35
|
+
TAst extends AstNode = AstNode
|
|
36
|
+
> extends UpdateRewriteRegistry<TTransfer, TAst> {
|
|
37
|
+
/** Remove a rewrite by id. Returns `true` if a rewrite was removed. */
|
|
38
|
+
unregister(id: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Run every registered rewrite in priority order, threading the model
|
|
41
|
+
* through each, and return the rewritten transfer model. Always async (the
|
|
42
|
+
* method is called once per `update`, not per node), but a synchronous
|
|
43
|
+
* rewrite never adds a microtask — see {@link DefaultUpdateRewriteService.apply}.
|
|
44
|
+
*
|
|
45
|
+
* `cancelToken` is honoured between rewrites — material when a rewrite is
|
|
46
|
+
* async (an external lookup); a preempted update aborts the chain before the
|
|
47
|
+
* next rewrite rather than running it to completion against a doomed build.
|
|
48
|
+
*/
|
|
49
|
+
apply(model: TTransfer, previous: TAst | undefined, cancelToken?: CancellationToken): Promise<TTransfer>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Construction options for {@link DefaultUpdateRewriteService}. All fields
|
|
54
|
+
* optional — the defaults reproduce the framework's behaviour exactly.
|
|
55
|
+
*/
|
|
56
|
+
export type UpdateRewriteServiceOptions = LogNameOptions;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Default {@link UpdateRewriteService} implementation. A pure ordered registry
|
|
60
|
+
* of transfer-model transforms; the framework ships **zero** members (an empty
|
|
61
|
+
* chain is a no-op). Adopters declare rewrites via
|
|
62
|
+
* `UpdateRewriteContribution`s under the `updateRewrite.rewrites` group,
|
|
63
|
+
* or register imperatively.
|
|
64
|
+
*
|
|
65
|
+
* **Per-language service.** Bound in the per-language module and resolved by
|
|
66
|
+
* `ModelService` via `ServiceRegistry.getServices(uri)`, so multi-grammar
|
|
67
|
+
* workspaces route each write to the right rewrite set.
|
|
68
|
+
*
|
|
69
|
+
* The framework provides no comparison helper and no previous-state accessor —
|
|
70
|
+
* a diff-based rewrite owns its own representation reconciliation (see
|
|
71
|
+
* {@link UpdateRewrite}).
|
|
72
|
+
*/
|
|
73
|
+
export class DefaultUpdateRewriteService<
|
|
74
|
+
TTransfer extends TransferElement = TransferElement,
|
|
75
|
+
TAst extends AstNode = AstNode
|
|
76
|
+
> implements UpdateRewriteService<TTransfer, TAst> {
|
|
77
|
+
/** Registry of rewrites, keyed by id, iterated in priority order. */
|
|
78
|
+
protected readonly rewrites = new Registry<UpdateRewrite<TTransfer, TAst>>();
|
|
79
|
+
protected readonly tracer: Tracer;
|
|
80
|
+
|
|
81
|
+
constructor(
|
|
82
|
+
protected readonly services: ServerLanguageServices,
|
|
83
|
+
options: UpdateRewriteServiceOptions = {}
|
|
84
|
+
) {
|
|
85
|
+
this.tracer = services.shared.Tracer.for(options.logName ?? 'UpdateRewrite').trace('instantiated');
|
|
86
|
+
|
|
87
|
+
// Read the language's UpdateRewriteContribution group and let each
|
|
88
|
+
// contribution register one or many rewrites through this service.
|
|
89
|
+
// Optional chaining tolerates incomplete test stubs; production wiring
|
|
90
|
+
// always provides the slot via `createServerLanguageModule`.
|
|
91
|
+
const contributions = services.updateRewrite?.rewrites ?? {};
|
|
92
|
+
for (const contribution of Object.values(contributions)) {
|
|
93
|
+
contribution.registerUpdateRewrites(this);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
register(rewrite: UpdateRewrite<TTransfer, TAst>): Disposable {
|
|
98
|
+
return this.rewrites.register(rewrite);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
unregister(id: string): boolean {
|
|
102
|
+
return this.rewrites.unregister(id);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Fold the model through every rewrite in priority order. Mirrors the
|
|
107
|
+
* `DefaultIntegrityService.enforceIntegrity` pattern: the method is
|
|
108
|
+
* `async` (one tick per `update`, which is a per-operation call, not a
|
|
109
|
+
* per-node hot loop), and the per-rewrite {@link isPromiseLike} check skips
|
|
110
|
+
* the `await` for synchronous rewrites — the common case — so a sync chain
|
|
111
|
+
* adds no extra microtask beyond the single tick `async` already costs.
|
|
112
|
+
*
|
|
113
|
+
* `cancelToken` is checked before each rewrite (coarser than within a
|
|
114
|
+
* rewrite, finer than per-chain) so a preempted async chain interrupts
|
|
115
|
+
* cleanly — `interruptAndCheck` throws `OperationCancelled`, which aborts the
|
|
116
|
+
* `update` before any text is applied.
|
|
117
|
+
*/
|
|
118
|
+
async apply(model: TTransfer, previous: TAst | undefined, cancelToken?: CancellationToken): Promise<TTransfer> {
|
|
119
|
+
let current = model;
|
|
120
|
+
for (const rewrite of this.rewrites.all()) {
|
|
121
|
+
if (cancelToken !== undefined) {
|
|
122
|
+
await interruptAndCheck(cancelToken);
|
|
123
|
+
}
|
|
124
|
+
const result = rewrite.rewrite(current, previous);
|
|
125
|
+
current = (isPromiseLike(result) ? await result : result) as TTransfer;
|
|
126
|
+
}
|
|
127
|
+
return current;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2026 CrossBreeze, EclipseSource and others.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made available under the
|
|
5
|
+
* terms of the MIT License which is available in the project root.
|
|
6
|
+
*
|
|
7
|
+
* SPDX-License-Identifier: MIT
|
|
8
|
+
********************************************************************************/
|
|
9
|
+
|
|
10
|
+
import { type MaybePromise, type TransferElement } from '@hydranium/protocol';
|
|
11
|
+
import { type AstNode } from '@hydranium/langium';
|
|
12
|
+
import { type RegistryItem } from '../../util/registry.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* A single transform applied to the incoming transfer model on the structured
|
|
16
|
+
* (object) write path of `ModelService.update` / `ModelService.save`, before
|
|
17
|
+
* serialisation. The RPC-update-stage sibling of `IntegrityRule` /
|
|
18
|
+
* `AstExtension` / `ValidationCheck` — same id-keyed,
|
|
19
|
+
* priority-ordered registry shape, but it runs on the transfer model rather
|
|
20
|
+
* than the built AST, and only on structured writes (never the LSP text path).
|
|
21
|
+
*
|
|
22
|
+
* **Two representations.** The contract is deliberately asymmetric — `model`
|
|
23
|
+
* and `previous` are NOT the same shape, and the types say so:
|
|
24
|
+
*
|
|
25
|
+
* - `model` (and the return) is a **transfer model**: cross-references are
|
|
26
|
+
* flattened to `$refText` strings, derived `_*` properties are folded in as
|
|
27
|
+
* *enumerable* fields, and there are no `$container` back-pointers. It is the
|
|
28
|
+
* plain JSON that arrived over RPC from the form / diagram.
|
|
29
|
+
* - `previous` is a live **AST root** (`document.parseResult.value`): real
|
|
30
|
+
* `Reference` objects, `$container`, and `_*` attached *non-enumerably* by the
|
|
31
|
+
* AST-extension service. It is `undefined` for a not-yet-built document.
|
|
32
|
+
*
|
|
33
|
+
* A rewrite that needs to diff against the previous state owns the
|
|
34
|
+
* representation reconciliation itself (text-vs-`Reference`, enumerable-vs-not).
|
|
35
|
+
* The framework provides no comparison helper — comparison is grammar-specific
|
|
36
|
+
* policy.
|
|
37
|
+
*
|
|
38
|
+
* **Ordering** is by {@link RegistryItem.priority} ascending, ties broken by
|
|
39
|
+
* registration order — so a normalisation pass (low priority) reliably runs
|
|
40
|
+
* before a diff-based reconciliation (higher priority).
|
|
41
|
+
*
|
|
42
|
+
* **Sync fast path.** `rewrite` may return a promise (mirrors
|
|
43
|
+
* `IntegrityRule.enforce`) so an adopter rewrite that consults an external
|
|
44
|
+
* system isn't forced sync; the service keeps purely-sync rewrites — the common
|
|
45
|
+
* case — off the microtask queue.
|
|
46
|
+
*
|
|
47
|
+
* Generic over `<TTransfer, TAst>` so each adopter narrows to its own transfer
|
|
48
|
+
* and AST root types; both default to the structural bases.
|
|
49
|
+
*/
|
|
50
|
+
export interface UpdateRewrite<TTransfer extends TransferElement = TransferElement, TAst extends AstNode = AstNode> extends RegistryItem {
|
|
51
|
+
/**
|
|
52
|
+
* Rewrite the incoming transfer model. Return the input unchanged when the
|
|
53
|
+
* rewrite does not apply (the common no-op case).
|
|
54
|
+
*
|
|
55
|
+
* `previous` is the AST as it stood before this update — read-only; never
|
|
56
|
+
* mutate it. It is `undefined` for a brand-new document, which a diff-based
|
|
57
|
+
* rewrite should treat as "every field is new" (the maximal change case).
|
|
58
|
+
*/
|
|
59
|
+
rewrite(model: TTransfer, previous: TAst | undefined): MaybePromise<TTransfer>;
|
|
60
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
import { type LogThreshold, type MaybeObservableValue, ObservableValue, type Tracer, TransferDiagnostic } from '@hydranium/protocol';
|
|
11
|
+
import {
|
|
12
|
+
type AstNode,
|
|
13
|
+
type AstNodeLocator,
|
|
14
|
+
DefaultDocumentValidator,
|
|
15
|
+
type DiagnosticInfo,
|
|
16
|
+
type LangiumDocument,
|
|
17
|
+
type LangiumCoreServices,
|
|
18
|
+
type ValidateSingleNodeOptions,
|
|
19
|
+
type ValidationOptions,
|
|
20
|
+
type ValidationSeverity
|
|
21
|
+
} from '@hydranium/langium';
|
|
22
|
+
import type { CancellationToken } from 'vscode-languageserver-protocol';
|
|
23
|
+
import type { Diagnostic } from 'vscode-languageserver-types';
|
|
24
|
+
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
25
|
+
import { isSyntheticNode } from '../workspace/synthetic.js';
|
|
26
|
+
import { isVirtualUri } from '../workspace/virtual-document.js';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Diagnostic shape produced by {@link HydraniumDocumentValidator}: an LSP
|
|
30
|
+
* {@link Diagnostic} extended with the protocol-level `element` path and
|
|
31
|
+
* optional `property` name from {@link TransferDiagnostic}.
|
|
32
|
+
*/
|
|
33
|
+
export interface TransferLspDiagnostic extends Diagnostic {
|
|
34
|
+
element: string;
|
|
35
|
+
property?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface DocumentValidatorOptions extends LogNameOptions {
|
|
39
|
+
/**
|
|
40
|
+
* Level at which the `validateDocument` timing line is emitted, or `'off'`
|
|
41
|
+
* to disable the timing wrap entirely. Default: `'debug'`. Read per call, so
|
|
42
|
+
* it accepts a {@link MaybeObservableValue} — pass a constant or bind it to a
|
|
43
|
+
* user setting (via the `Settings` namespace) to retune live.
|
|
44
|
+
*/
|
|
45
|
+
readonly logLevel?: MaybeObservableValue<LogThreshold>;
|
|
46
|
+
/**
|
|
47
|
+
* Suppress the timing line for validation runs shorter than this. Default:
|
|
48
|
+
* `20`ms. Read per call; accepts a {@link MaybeObservableValue}.
|
|
49
|
+
*/
|
|
50
|
+
readonly logAfterMs?: MaybeObservableValue<number>;
|
|
51
|
+
/**
|
|
52
|
+
* Validate documents under the virtual URI scheme (see `isVirtualUri`).
|
|
53
|
+
* Default `false`: virtual documents (stdlib / library / built-in content)
|
|
54
|
+
* are skipped, because a virtual URI cannot be opened, so a diagnostic on it
|
|
55
|
+
* is un-actionable, and shipped library content is presumed correct. Set
|
|
56
|
+
* `true` to validate built-in definitions. Read per call, so it accepts a
|
|
57
|
+
* {@link MaybeObservableValue} — bind it to a user setting to toggle live.
|
|
58
|
+
*/
|
|
59
|
+
readonly validateVirtualDocuments?: MaybeObservableValue<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Validate nodes marked synthetic via `markSynthetic` (see `isSyntheticNode`).
|
|
62
|
+
* Default `false`: synthetic nodes (stdlib content, projection mirrors) are
|
|
63
|
+
* skipped, so a mirror never double-reports an error owned by its real
|
|
64
|
+
* declaration. Set `true` to validate them normally. Read per call, so it
|
|
65
|
+
* accepts a {@link MaybeObservableValue}.
|
|
66
|
+
*/
|
|
67
|
+
readonly validateSyntheticNodes?: MaybeObservableValue<boolean>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Default validator behaviour for `@hydranium/core` consumers:
|
|
72
|
+
*
|
|
73
|
+
* - **Skip-validation hook** via the virtual {@link shouldSkipValidation}
|
|
74
|
+
* predicate, which adopters override to compose additional skip reasons.
|
|
75
|
+
* - **Diagnostic mapping** to {@link TransferDiagnostic}-shaped
|
|
76
|
+
* {@link TransferLspDiagnostic}: every emitted diagnostic carries the AST
|
|
77
|
+
* node's path (built via Langium's `AstNodeLocator`) plus the optional
|
|
78
|
+
* offending property name.
|
|
79
|
+
* - **Optional timing wrap** on `validateDocument`, on by default.
|
|
80
|
+
*/
|
|
81
|
+
export class HydraniumDocumentValidator extends DefaultDocumentValidator {
|
|
82
|
+
protected readonly tracer: Tracer;
|
|
83
|
+
protected readonly astNodeLocator: AstNodeLocator;
|
|
84
|
+
protected readonly logLevel: ObservableValue<LogThreshold>;
|
|
85
|
+
protected readonly logAfterMs: ObservableValue<number>;
|
|
86
|
+
protected readonly validateVirtualDocuments: ObservableValue<boolean>;
|
|
87
|
+
protected readonly validateSyntheticNodes: ObservableValue<boolean>;
|
|
88
|
+
|
|
89
|
+
constructor(services: LangiumCoreServices & { shared: { Tracer: Tracer } }, options: DocumentValidatorOptions = {}) {
|
|
90
|
+
super(services);
|
|
91
|
+
this.tracer = services.shared.Tracer.for(options.logName ?? 'DocumentValidator').trace('instantiated');
|
|
92
|
+
this.astNodeLocator = services.workspace.AstNodeLocator;
|
|
93
|
+
this.logLevel = ObservableValue.from(options.logLevel ?? 'debug');
|
|
94
|
+
this.logAfterMs = ObservableValue.from(options.logAfterMs ?? 20);
|
|
95
|
+
this.validateVirtualDocuments = ObservableValue.from(options.validateVirtualDocuments ?? false);
|
|
96
|
+
this.validateSyntheticNodes = ObservableValue.from(options.validateSyntheticNodes ?? false);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
override validateDocument(
|
|
100
|
+
document: LangiumDocument,
|
|
101
|
+
options?: ValidationOptions,
|
|
102
|
+
cancelToken?: CancellationToken
|
|
103
|
+
): Promise<Diagnostic[]> {
|
|
104
|
+
// Skip whole virtual documents (stdlib / library / built-in) unless opted
|
|
105
|
+
// in — a virtual URI cannot be opened, so diagnostics on it are
|
|
106
|
+
// un-actionable. Decided per document (not per node) so the walk is
|
|
107
|
+
// avoided entirely; the per-node `$synthetic` skip is separate.
|
|
108
|
+
if (isVirtualUri(document.uri) && !this.validateVirtualDocuments.value) {
|
|
109
|
+
this.tracer.withUri(document.uri.toString()).debug('skipping validation (virtual document)');
|
|
110
|
+
return Promise.resolve([]);
|
|
111
|
+
}
|
|
112
|
+
const level = this.logLevel.value;
|
|
113
|
+
if (level === 'off') {
|
|
114
|
+
return super.validateDocument(document, options, cancelToken);
|
|
115
|
+
}
|
|
116
|
+
// `level` is narrowed to `LogLevel` past the early-return.
|
|
117
|
+
return this.tracer
|
|
118
|
+
.withUri(document.uri.toString())
|
|
119
|
+
.time('validateDocument', () => super.validateDocument(document, options, cancelToken), level, {
|
|
120
|
+
logAfterMs: this.logAfterMs.value
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Skip validation for a node **and its children** when
|
|
126
|
+
* {@link shouldSkipValidation} returns true.
|
|
127
|
+
*/
|
|
128
|
+
protected override validateSingleNodeOptions(node: AstNode, options: ValidationOptions): ValidateSingleNodeOptions {
|
|
129
|
+
if (this.shouldSkipValidation(node)) {
|
|
130
|
+
return { validateNode: false, validateChildren: false };
|
|
131
|
+
}
|
|
132
|
+
return super.validateSingleNodeOptions(node, options);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* True when validation should skip `node` and its children. Default: the
|
|
137
|
+
* node is marked synthetic ({@link isSyntheticNode}) and
|
|
138
|
+
* {@link DocumentValidatorOptions.validateSyntheticNodes} has not opted back
|
|
139
|
+
* in — so the option and the predicate are one decision, not two. Adopters
|
|
140
|
+
* override to compose additional skip reasons with
|
|
141
|
+
* `super.shouldSkipValidation(node) || ...`.
|
|
142
|
+
*/
|
|
143
|
+
protected shouldSkipValidation(node: AstNode): boolean {
|
|
144
|
+
return !this.validateSyntheticNodes.value && isSyntheticNode(node);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
protected override toDiagnostic<N extends AstNode>(
|
|
148
|
+
severity: ValidationSeverity,
|
|
149
|
+
message: string,
|
|
150
|
+
info: DiagnosticInfo<N, string>
|
|
151
|
+
): TransferLspDiagnostic {
|
|
152
|
+
const base = super.toDiagnostic(severity, message, info);
|
|
153
|
+
const node = info.node;
|
|
154
|
+
if (!node) {
|
|
155
|
+
this.tracer.warn('Cannot create diagnostic element path: DiagnosticInfo has no node.');
|
|
156
|
+
return { ...base, property: info.property, element: '' };
|
|
157
|
+
}
|
|
158
|
+
const elementPath = this.buildElementPath(node, info);
|
|
159
|
+
return { ...base, property: info.property, element: elementPath };
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Construct the `element` path for a diagnostic. Falls back through:
|
|
164
|
+
* - the node's own AST path, then
|
|
165
|
+
* - the parent's AST path (for nodes Langium can't locate directly, e.g.
|
|
166
|
+
* references or transient nodes).
|
|
167
|
+
*
|
|
168
|
+
* When the path doesn't include the array index (some reference-array
|
|
169
|
+
* cases) but `info.index` is provided, the index is appended explicitly
|
|
170
|
+
* — keeping element paths stable and consistent with how the client
|
|
171
|
+
* expects collection-item paths to be formed.
|
|
172
|
+
*/
|
|
173
|
+
protected buildElementPath<N extends AstNode>(node: N, info: DiagnosticInfo<N, string>): string {
|
|
174
|
+
const directPath = this.astNodeLocator.getAstNodePath(node);
|
|
175
|
+
const containerPath = directPath ? undefined : this.astNodeLocator.getAstNodePath(node.$container ?? ({ $type: 'Dummy' } as AstNode));
|
|
176
|
+
const nodePath = directPath || containerPath;
|
|
177
|
+
if (!nodePath) {
|
|
178
|
+
this.tracer.warn('Cannot create diagnostic element path: Unable to determine AST node path.');
|
|
179
|
+
return '';
|
|
180
|
+
}
|
|
181
|
+
if (info.index === undefined || nodePath.endsWith(`${TransferDiagnostic.ELEMENT_INDEX_SEPARATOR}${info.index}`)) {
|
|
182
|
+
return nodePath;
|
|
183
|
+
}
|
|
184
|
+
return info.property
|
|
185
|
+
? `${nodePath}${TransferDiagnostic.ELEMENT_SEGMENT_SEPARATOR}${info.property}${TransferDiagnostic.ELEMENT_INDEX_SEPARATOR}${info.index}`
|
|
186
|
+
: `${nodePath}${TransferDiagnostic.ELEMENT_INDEX_SEPARATOR}${info.index}`;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
export * from './document-validator.js';
|
|
11
|
+
export * from './validation-contribution.js';
|
|
12
|
+
export * from './validation-contribution-collector.js';
|
|
@@ -0,0 +1,61 @@
|
|
|
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
|
+
import { type Tracer } from '@hydranium/protocol';
|
|
11
|
+
import { type ValidationCategory, type ValidationChecks, type ValidationRegistry } from '@hydranium/langium';
|
|
12
|
+
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
13
|
+
import { type ServerLanguageServices } from '../language-module.js';
|
|
14
|
+
import { type ValidationCheckRegistry } from './validation-contribution.js';
|
|
15
|
+
|
|
16
|
+
export type ValidationContributionCollectorOptions = LogNameOptions;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Per-language eager collector that wires `ValidationCheckContribution`s
|
|
20
|
+
* declared under `services.validation.checks` into Langium's native
|
|
21
|
+
* `ValidationRegistry`.
|
|
22
|
+
*
|
|
23
|
+
* Acts as the validation-side analog of the build-side
|
|
24
|
+
* `BuildPipelineIntegration` routing: at construction time it iterates the
|
|
25
|
+
* language's `validation.checks` contribution group, hands each contribution a
|
|
26
|
+
* thin {@link ValidationCheckRegistry} adapter, and the contribution registers
|
|
27
|
+
* its checks through it.
|
|
28
|
+
*
|
|
29
|
+
* Constructed on first per-language services access (typically forced by
|
|
30
|
+
* `BuildPipelineIntegration` touching the language services tree at the first
|
|
31
|
+
* build event); subsequent touches return the cached singleton from Langium's
|
|
32
|
+
* DI proxy. That is what gets the checks into the registry before Langium
|
|
33
|
+
* reaches the `Validated` phase — nothing else constructs this service.
|
|
34
|
+
*/
|
|
35
|
+
export class ValidationContributionCollector {
|
|
36
|
+
protected readonly tracer: Tracer;
|
|
37
|
+
|
|
38
|
+
constructor(services: ServerLanguageServices, options: ValidationContributionCollectorOptions = {}) {
|
|
39
|
+
this.tracer = services.shared.Tracer.for(options.logName ?? 'ValidationContributions').trace('instantiated');
|
|
40
|
+
const registry = createValidationCheckRegistry(services.validation.ValidationRegistry);
|
|
41
|
+
// Optional chaining tolerates incomplete test stubs; production
|
|
42
|
+
// wiring always provides the slot via `createServerLanguageModule`.
|
|
43
|
+
const contributions = services.validation?.checks ?? {};
|
|
44
|
+
for (const contribution of Object.values(contributions)) {
|
|
45
|
+
contribution.registerValidationChecks(registry);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Build a {@link ValidationCheckRegistry} adapter over Langium's
|
|
52
|
+
* `ValidationRegistry.register` — a pass-through, so `thisObj` and `category`
|
|
53
|
+
* must be forwarded rather than dropped.
|
|
54
|
+
*/
|
|
55
|
+
function createValidationCheckRegistry(langiumRegistry: ValidationRegistry): ValidationCheckRegistry {
|
|
56
|
+
return {
|
|
57
|
+
register<T>(checks: ValidationChecks<T>, thisObj?: ThisParameterType<unknown>, category?: ValidationCategory): void {
|
|
58
|
+
langiumRegistry.register(checks, thisObj, category);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
import { type ValidationCategory, type ValidationChecks } from '@hydranium/langium';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Registry handed to a {@link ValidationCheckContribution}. A thin wrapper over
|
|
14
|
+
* Langium's `ValidationRegistry.register` — the same type-keyed,
|
|
15
|
+
* category-scheduled check map underneath, so two contributions registering a
|
|
16
|
+
* check for the same node type both run (the registry stores checks in a
|
|
17
|
+
* `MultiMap`, which appends).
|
|
18
|
+
*
|
|
19
|
+
* `thisObj` mirrors Langium's signature: when a contribution passes check
|
|
20
|
+
* methods that read `this`, hand the contribution instance here so the binding
|
|
21
|
+
* is preserved.
|
|
22
|
+
*/
|
|
23
|
+
export interface ValidationCheckRegistry {
|
|
24
|
+
register<T>(checks: ValidationChecks<T>, thisObj?: ThisParameterType<unknown>, category?: ValidationCategory): void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Declarative registration of validation checks. Bound under the module's
|
|
29
|
+
* `validation.checks` contribution group; a framework collector reads the group
|
|
30
|
+
* and calls this method, handing in a {@link ValidationCheckRegistry} that
|
|
31
|
+
* forwards to Langium's `ValidationRegistry`.
|
|
32
|
+
*
|
|
33
|
+
* The domain-qualified method name lets a single cross-cutting class implement
|
|
34
|
+
* several contribution interfaces without method collision.
|
|
35
|
+
*/
|
|
36
|
+
export interface ValidationCheckContribution {
|
|
37
|
+
registerValidationChecks(registry: ValidationCheckRegistry): void;
|
|
38
|
+
}
|