@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,14 @@
|
|
|
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 './client-ids.js';
|
|
11
|
+
export * from './language-client-text-shadow.js';
|
|
12
|
+
export * from './hydranium-text-documents.js';
|
|
13
|
+
export * from './ast-document-manager.js';
|
|
14
|
+
export * from './self-save-registry.js';
|
|
@@ -0,0 +1,175 @@
|
|
|
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 { diffLines } from 'diff';
|
|
11
|
+
import { Range, type TextEdit, uinteger } from 'vscode-languageserver';
|
|
12
|
+
import { TextDocument } from 'vscode-languageserver-textdocument';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The minimum surface the shadow needs from a `HydraniumTextDocuments`:
|
|
16
|
+
* a `create` method that materialises a fresh text document via the
|
|
17
|
+
* configured `TextDocumentsConfiguration`. Declared as a narrow
|
|
18
|
+
* structural interface so the manager satisfies it without an explicit
|
|
19
|
+
* import (sidestepping the circular `HydraniumTextDocuments → shadow → manager`
|
|
20
|
+
* dependency) and so tests can stub it with a minimal object literal.
|
|
21
|
+
*/
|
|
22
|
+
export interface ShadowDocumentSource {
|
|
23
|
+
create(uri: string, languageId: string, version: number, content: string): TextDocument;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** The range every full-document replace emitted here carries. */
|
|
27
|
+
const FULL_RANGE = Range.create(0, 0, uinteger.MAX_VALUE, uinteger.MAX_VALUE);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Whether `edits` is the single full-document replace {@link LanguageClientTextShadow.computeEdits}
|
|
31
|
+
* emits when it has no usable baseline.
|
|
32
|
+
*
|
|
33
|
+
* The distinction matters at the `workspace/applyEdit` egress: a full replace is
|
|
34
|
+
* position-INDEPENDENT and therefore lands correctly on any client buffer, while
|
|
35
|
+
* a line-keyed diff only lands correctly on the exact text it was diffed
|
|
36
|
+
* against. Only the latter needs a client-version gate.
|
|
37
|
+
*/
|
|
38
|
+
export function isFullReplace(edits: readonly TextEdit[]): boolean {
|
|
39
|
+
if (edits.length !== 1) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const { start, end } = edits[0].range;
|
|
43
|
+
return start.line === FULL_RANGE.start.line && start.character === FULL_RANGE.start.character && end.line === FULL_RANGE.end.line;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Tracks the text content the language client (typically Monaco) is believed to
|
|
48
|
+
* currently hold so outgoing `workspace/applyEdit` requests can ship minimal
|
|
49
|
+
* diffs instead of full-document replaces.
|
|
50
|
+
*
|
|
51
|
+
* Why it matters: a full-range replace on a moderately-sized YAML or DSL source
|
|
52
|
+
* forces Monaco to re-tokenise the entire document (observed multi-second hangs
|
|
53
|
+
* on large diagrams), whereas line-level diffs usually reduce that to a handful
|
|
54
|
+
* of small edits.
|
|
55
|
+
*
|
|
56
|
+
* Update points the caller is responsible for:
|
|
57
|
+
* - {@link computeEdits} after each outgoing server→client sync (updates the shadow optimistically).
|
|
58
|
+
* - {@link set} when the server receives a `didChange` from the language client (the client now
|
|
59
|
+
* holds that text; we shouldn't resend it).
|
|
60
|
+
* - {@link invalidate} when the client rejects an edit (`applied=false`) or a doc is closed —
|
|
61
|
+
* the shadow is now stale and the next sync must fall back to a full replace.
|
|
62
|
+
*/
|
|
63
|
+
export class LanguageClientTextShadow {
|
|
64
|
+
protected shadow = new Map<string, string>();
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @param onFallback invoked when {@link computeEdits} falls back to a full-range replace due to
|
|
68
|
+
* apply-verify mismatch. Useful for logging regressions.
|
|
69
|
+
* @param documents the {@link ShadowDocumentSource} used to materialise the throwaway probe
|
|
70
|
+
* document in {@link computeEdits}. In production this is the owning
|
|
71
|
+
* `HydraniumTextDocuments` (whose `create` threads through its configured
|
|
72
|
+
* `TextDocumentsConfiguration`); tests pass a minimal stub. Routing
|
|
73
|
+
* through the manager rather than `TextDocument.create` directly avoids the
|
|
74
|
+
* `instanceof FullTextDocument` gate in the bare LSP `TextDocument.update`,
|
|
75
|
+
* keeping the verifier honest for adopters with a custom text-document type.
|
|
76
|
+
*/
|
|
77
|
+
constructor(
|
|
78
|
+
protected onFallback: (uri: string, reason: string) => void,
|
|
79
|
+
protected documents: ShadowDocumentSource
|
|
80
|
+
) {}
|
|
81
|
+
|
|
82
|
+
/** Record the text the language client is known to hold (e.g. after a `didChange` echo). */
|
|
83
|
+
set(uri: string, text: string): void {
|
|
84
|
+
this.shadow.set(uri, text);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The text the language client is believed to hold, or `undefined` when
|
|
89
|
+
* there is no baseline (first sync, or after an {@link invalidate}).
|
|
90
|
+
*
|
|
91
|
+
* Read at the `workspace/applyEdit` egress BEFORE {@link computeEdits},
|
|
92
|
+
* which overwrites it: a push's minimal edits are keyed to this text, so an
|
|
93
|
+
* echo of that push carries ranges addressing it and nothing else. Losing
|
|
94
|
+
* it is what makes an incremental echo unreconstructable, and applying such
|
|
95
|
+
* an echo to the already-advanced synced text duplicates every inserted
|
|
96
|
+
* line.
|
|
97
|
+
*/
|
|
98
|
+
get(uri: string): string | undefined {
|
|
99
|
+
return this.shadow.get(uri);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Forget the shadow for a URI; next {@link computeEdits} falls back to a full-document replace. */
|
|
103
|
+
invalidate(uri: string): void {
|
|
104
|
+
this.shadow.delete(uri);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Return the minimal LSP {@link TextEdit}s required to bring the language client's content from
|
|
109
|
+
* the tracked shadow to `newText`. Updates the shadow to `newText` so subsequent calls diff
|
|
110
|
+
* against it.
|
|
111
|
+
*
|
|
112
|
+
* - Empty array when the shadow already equals `newText` (caller should skip the RPC).
|
|
113
|
+
* - Full-range replace when there is no shadow (first sync or post-{@link invalidate}).
|
|
114
|
+
* - Line-level diff otherwise. Before returning, we locally reconstruct `newText` by applying
|
|
115
|
+
* the diff to `old`; if that doesn't match, we fall back to a full-range replace and notify
|
|
116
|
+
* the fallback callback. This catches any algorithmic regression in {@link diffToEdits}
|
|
117
|
+
* without risking client corruption.
|
|
118
|
+
*/
|
|
119
|
+
computeEdits(uri: string, newText: string): TextEdit[] {
|
|
120
|
+
const old = this.shadow.get(uri);
|
|
121
|
+
if (old === newText) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
this.shadow.set(uri, newText);
|
|
125
|
+
const fullReplace: TextEdit = { range: FULL_RANGE, newText };
|
|
126
|
+
if (old === undefined) {
|
|
127
|
+
return [fullReplace];
|
|
128
|
+
}
|
|
129
|
+
const edits = diffToEdits(old, newText);
|
|
130
|
+
const verifyDoc = this.documents.create(uri, 'plaintext', 0, old);
|
|
131
|
+
if (TextDocument.applyEdits(verifyDoc, edits) !== newText) {
|
|
132
|
+
this.onFallback(uri, 'apply-verify-mismatch');
|
|
133
|
+
return [fullReplace];
|
|
134
|
+
}
|
|
135
|
+
return edits;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Convert a {@link diffLines} result to a list of LSP {@link TextEdit}s keyed on line positions
|
|
141
|
+
* in the *old* text. Contiguous added/removed hunks are coalesced into a single replace so the
|
|
142
|
+
* client sees one edit per changed region.
|
|
143
|
+
*/
|
|
144
|
+
export function diffToEdits(oldText: string, newText: string): TextEdit[] {
|
|
145
|
+
const hunks = diffLines(oldText, newText);
|
|
146
|
+
const edits: TextEdit[] = [];
|
|
147
|
+
let oldLine = 0;
|
|
148
|
+
let i = 0;
|
|
149
|
+
while (i < hunks.length) {
|
|
150
|
+
const hunk = hunks[i];
|
|
151
|
+
if (!hunk.added && !hunk.removed) {
|
|
152
|
+
oldLine += hunk.count ?? 0;
|
|
153
|
+
i++;
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
// Coalesce a run of add/remove hunks into a single replace for this region.
|
|
157
|
+
let removedLines = 0;
|
|
158
|
+
let addedText = '';
|
|
159
|
+
while (i < hunks.length && (hunks[i].added || hunks[i].removed)) {
|
|
160
|
+
if (hunks[i].removed) {
|
|
161
|
+
removedLines += hunks[i].count ?? 0;
|
|
162
|
+
}
|
|
163
|
+
if (hunks[i].added) {
|
|
164
|
+
addedText += hunks[i].value;
|
|
165
|
+
}
|
|
166
|
+
i++;
|
|
167
|
+
}
|
|
168
|
+
edits.push({
|
|
169
|
+
range: Range.create(oldLine, 0, oldLine + removedLines, 0),
|
|
170
|
+
newText: addedText
|
|
171
|
+
});
|
|
172
|
+
oldLine += removedLines;
|
|
173
|
+
}
|
|
174
|
+
return edits;
|
|
175
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 Clock } from '@hydranium/protocol';
|
|
11
|
+
import { isCaseInsensitiveFileSystem } from '../util/environment.js';
|
|
12
|
+
import { type ServerSharedServicesMinimal } from '../langium/shared-services.js';
|
|
13
|
+
|
|
14
|
+
/** Default eligibility window for a self-save entry. */
|
|
15
|
+
const DEFAULT_TTL_MS = 30_000;
|
|
16
|
+
|
|
17
|
+
export interface SelfSaveRegistryOptions {
|
|
18
|
+
/** How long a self-save entry stays eligible to match a watcher event. Default {@link DEFAULT_TTL_MS}. */
|
|
19
|
+
ttlMs?: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Tracks `mtime` of files written by the server itself so the echo
|
|
24
|
+
* `didChangeWatchedFiles` event from the OS file watcher can be suppressed,
|
|
25
|
+
* avoiding redundant rebuilds after each save. Entries are matched by mtime
|
|
26
|
+
* (not by a time window) and expire after a TTL.
|
|
27
|
+
*/
|
|
28
|
+
export class SelfSaveRegistry {
|
|
29
|
+
protected readonly entries = new Map<string, { mtimeMs: number; registeredAt: number }>();
|
|
30
|
+
/**
|
|
31
|
+
* Read time through the shared {@link Clock} rather than `Date.now()`: the
|
|
32
|
+
* TTL gates whether an incoming watcher event still counts as a self-save
|
|
33
|
+
* echo, so tests advance a fake clock to exercise expiry without a real
|
|
34
|
+
* wait. Wall-clock `now()` is correct here — entries are compared against a
|
|
35
|
+
* file's `mtime`.
|
|
36
|
+
*/
|
|
37
|
+
protected readonly clock: Clock;
|
|
38
|
+
protected readonly ttlMs: number;
|
|
39
|
+
|
|
40
|
+
constructor(services: Pick<ServerSharedServicesMinimal, 'Clock'>, options: SelfSaveRegistryOptions = {}) {
|
|
41
|
+
this.clock = services.Clock;
|
|
42
|
+
this.ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Key a path the way the host filesystem compares it.
|
|
47
|
+
*
|
|
48
|
+
* Registering and matching happen on different paths for the same file: the
|
|
49
|
+
* write path comes from the server, the echo from the OS watcher, and on a
|
|
50
|
+
* case-insensitive filesystem those two can disagree in case for one file.
|
|
51
|
+
* A raw key then misses the suppression and the server's own write is
|
|
52
|
+
* rebuilt as a foreign change.
|
|
53
|
+
*
|
|
54
|
+
* Folded ONLY where the filesystem folds. On Linux two paths differing in
|
|
55
|
+
* case are two files, and collapsing them would suppress a real change to
|
|
56
|
+
* the other one — a correctness bug traded for an optimisation.
|
|
57
|
+
*/
|
|
58
|
+
protected key(fsPath: string): string {
|
|
59
|
+
return isCaseInsensitiveFileSystem() ? fsPath.toLowerCase() : fsPath;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Record a self-write. Key by `fsPath` (not URI string) to avoid URI-form mismatches. */
|
|
63
|
+
register(fsPath: string, mtimeMs: number): void {
|
|
64
|
+
this.entries.set(this.key(fsPath), { mtimeMs, registeredAt: this.clock.now() });
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** True if `mtimeMs` matches a recent self-write. Evicts stale entries. Not consumed on match. */
|
|
68
|
+
matches(fsPath: string, mtimeMs: number): boolean {
|
|
69
|
+
const key = this.key(fsPath);
|
|
70
|
+
const entry = this.entries.get(key);
|
|
71
|
+
if (!entry) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
if (this.clock.now() - entry.registeredAt > this.ttlMs) {
|
|
75
|
+
this.entries.delete(key);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
// Accept mtime equality (some filesystems have 1-second precision).
|
|
79
|
+
return entry.mtimeMs === mtimeMs;
|
|
80
|
+
}
|
|
81
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
// Public API barrel for the head-neutral `.` entry point.
|
|
11
|
+
export * from './langium/ast-extension/index.js';
|
|
12
|
+
export * from './langium/build-phase-pass/index.js';
|
|
13
|
+
export * from './langium/bootstrap.js';
|
|
14
|
+
export * from './langium/config/index.js';
|
|
15
|
+
export * from './langium/integration-services.js';
|
|
16
|
+
export * from './langium/diagnostics/index.js';
|
|
17
|
+
export * from './langium/document-builder/index.js';
|
|
18
|
+
export * from './langium/integrity/index.js';
|
|
19
|
+
export * from './langium/language-module.js';
|
|
20
|
+
export * from './langium/model-service/index.js';
|
|
21
|
+
export * from './langium/module.js';
|
|
22
|
+
export * from './langium/shared-services.js';
|
|
23
|
+
export * from './langium/keys/index.js';
|
|
24
|
+
export * from './langium/documentation/index.js';
|
|
25
|
+
export * from './langium/labeling/index.js';
|
|
26
|
+
export * from './langium/naming/index.js';
|
|
27
|
+
export * from './langium/project/index.js';
|
|
28
|
+
export * from './langium/residency/index.js';
|
|
29
|
+
export * from './langium/scope/index.js';
|
|
30
|
+
export * from './langium/serialization/index.js';
|
|
31
|
+
export * from './langium/transfer/index.js';
|
|
32
|
+
export * from './langium/update-rewrite/index.js';
|
|
33
|
+
export * from './langium/validation/index.js';
|
|
34
|
+
export * from './langium/workspace/index.js';
|
|
35
|
+
export * from './langium/service-registry.js';
|
|
36
|
+
export * from './langium/language-types.js';
|
|
37
|
+
export * from './launcher/index.js';
|
|
38
|
+
export * from './documents/index.js';
|
|
39
|
+
export * from './util/index.js';
|
|
@@ -0,0 +1,35 @@
|
|
|
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 AstNode } from '@hydranium/langium';
|
|
11
|
+
import { type Disposable } from 'vscode-languageserver';
|
|
12
|
+
import { type AstExtension } from './ast-extension-service.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Registry handed to an {@link AstExtensionContribution}. Implemented by the
|
|
16
|
+
* AST-extension service; a contribution receives it and registers one or many
|
|
17
|
+
* AST extensions (build-phase computed / synthetic properties). Doubles as
|
|
18
|
+
* the low-level imperative API.
|
|
19
|
+
*/
|
|
20
|
+
export interface AstExtensionRegistry {
|
|
21
|
+
register<T extends AstNode>(extension: AstExtension<T>): Disposable;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Declarative registration of AST extensions. Bound under the module's
|
|
26
|
+
* `ast.extensions` contribution group; the AST-extension service reads that
|
|
27
|
+
* group at construction and calls this method, handing itself in as the
|
|
28
|
+
* registry.
|
|
29
|
+
*
|
|
30
|
+
* The domain-qualified method name lets a single cross-cutting class implement
|
|
31
|
+
* several contribution interfaces without method collision.
|
|
32
|
+
*/
|
|
33
|
+
export interface AstExtensionContribution {
|
|
34
|
+
registerAstExtensions(registry: AstExtensionRegistry): void;
|
|
35
|
+
}
|
|
@@ -0,0 +1,311 @@
|
|
|
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 { Logger, type Mutable, type Tracer } from '@hydranium/protocol';
|
|
11
|
+
import { type AstNode, AstUtils, DocumentState, type LangiumDocument } from '@hydranium/langium';
|
|
12
|
+
import type { CancellationToken, Disposable } from 'vscode-languageserver';
|
|
13
|
+
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
14
|
+
import { type ServerLanguageServices } from '../language-module.js';
|
|
15
|
+
import { Registry, type RegistryItem } from '../../util/registry.js';
|
|
16
|
+
import { type AstExtensionRegistry } from './ast-extension-contribution.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A registration that derives data from an AST node and attaches it to the
|
|
20
|
+
* node at a declared document-build phase.
|
|
21
|
+
*
|
|
22
|
+
* **Storage:** plain assignment (`node._foo = value`) is correct for primitives,
|
|
23
|
+
* objects, and arrays of non-AstNode values — Langium's `streamContents` walks
|
|
24
|
+
* own *enumerable* properties whose values are AstNodes (or arrays of them) and
|
|
25
|
+
* skips everything else.
|
|
26
|
+
*
|
|
27
|
+
* **Synthetic children** (AstNode-shaped values that should *not* be walked as
|
|
28
|
+
* containment children) must be assigned via {@link setHiddenProperty} so they
|
|
29
|
+
* are stored as non-enumerable own properties. Otherwise symbol providers,
|
|
30
|
+
* folding, semantic tokens, and validators will treat them as real children.
|
|
31
|
+
*
|
|
32
|
+
* **Phase semantics:** {@link state} declares the single phase at which
|
|
33
|
+
* {@link compute} fires. The framework wires one `onDocumentPhase` listener per
|
|
34
|
+
* useful state unconditionally, rather than deriving the set from the states
|
|
35
|
+
* registrations declare — so a registration's state must be one of those, and
|
|
36
|
+
* adding one is a framework change, not a registration-time choice.
|
|
37
|
+
*
|
|
38
|
+
* **`.ref`-dependent derivations: declare `state: ComputedScopes`, not `Linked`.**
|
|
39
|
+
* Lazy reference resolution is available from `ComputedScopes` onward — the
|
|
40
|
+
* global scope is built by `IndexedContent` (which runs before
|
|
41
|
+
* `ComputedScopes`), so reading a reference's `.ref` inside a `ComputedScopes`
|
|
42
|
+
* callback triggers Langium's lazy lookup and returns the resolved target node.
|
|
43
|
+
*
|
|
44
|
+
* **DO NOT** stage a `state: ComputedScopes` placeholder hoping to refine it
|
|
45
|
+
* via a separate `state: Linked` registration when a downstream consumer
|
|
46
|
+
* (typically a `ScopeExtension.addDescriptions` firing during link)
|
|
47
|
+
* iterates the derived value to build a scope: `onDocumentPhase(Linked)` fires
|
|
48
|
+
* AFTER Langium's `Linker.link()` has already walked the document, by which
|
|
49
|
+
* time the linker has resolved references against the placeholder and cached
|
|
50
|
+
* them as `LinkingError`. Populate at `ComputedScopes` via lazy `.ref`
|
|
51
|
+
* resolution instead.
|
|
52
|
+
*
|
|
53
|
+
* **Description contribution.** This hook does not return descriptions — it
|
|
54
|
+
* mutates the node only. Per-reference-type description contribution lives on
|
|
55
|
+
* `ScopeExtension.addDescriptions` (the acceptor-style sibling).
|
|
56
|
+
*/
|
|
57
|
+
export interface AstExtension<T extends AstNode = AstNode> extends RegistryItem {
|
|
58
|
+
/** Type-guard predicate — `compute` runs only on nodes for which this returns `true`. */
|
|
59
|
+
nodeFilter: (node: AstNode) => node is T;
|
|
60
|
+
/**
|
|
61
|
+
* Per-document early-out. When set, the framework only invokes the
|
|
62
|
+
* registration's callback for documents the filter accepts. If every
|
|
63
|
+
* registration at a given state rejects the document, the framework skips
|
|
64
|
+
* the `streamAllContents` walk entirely — important for large workspaces
|
|
65
|
+
* where most documents carry none of the AST shapes a given extension
|
|
66
|
+
* targets.
|
|
67
|
+
*
|
|
68
|
+
* Default: no filter (registration applies to every document at its state).
|
|
69
|
+
*/
|
|
70
|
+
documentFilter?: (document: LangiumDocument) => boolean;
|
|
71
|
+
/**
|
|
72
|
+
* The single document-build state at which {@link compute} fires.
|
|
73
|
+
*
|
|
74
|
+
* Useful values:
|
|
75
|
+
* - `Parsed` — derivations from AST shape only, no `.ref` reads.
|
|
76
|
+
* - `ComputedScopes` — lazy `.ref` resolution available; the most common state.
|
|
77
|
+
* - `Linked` — derivations needing fully resolved cross-references.
|
|
78
|
+
* - `IndexedReferences` — cross-document reverse-lookup derivations.
|
|
79
|
+
* - `Validated` — derivations depending on diagnostics (rare).
|
|
80
|
+
*
|
|
81
|
+
* Any other state type-checks but never fires: the framework wires a
|
|
82
|
+
* listener only for the states above. `Changed` has no AST yet, and
|
|
83
|
+
* `IndexedContent` carries the same per-document information as `Parsed`,
|
|
84
|
+
* so neither is wired.
|
|
85
|
+
*/
|
|
86
|
+
state: DocumentState;
|
|
87
|
+
/**
|
|
88
|
+
* Mutate `node` for this registration at {@link state}. The framework hands
|
|
89
|
+
* `node` typed as {@link Mutable} so computed / synthetic property
|
|
90
|
+
* assignments (`node._foo = ...`) compile without per-callback
|
|
91
|
+
* `asMutable(...)` casts.
|
|
92
|
+
*
|
|
93
|
+
* Sync-only by Langium contract: `ScopeComputation.collectLocalSymbols`
|
|
94
|
+
* iterates without awaiting, and `onDocumentPhase(ComputedScopes)` fires
|
|
95
|
+
* right after — async work returned would resolve out of order vs the
|
|
96
|
+
* local-symbol table read. Adopters needing async derivation must build
|
|
97
|
+
* the data ahead of time and hand a sync callback.
|
|
98
|
+
*/
|
|
99
|
+
compute(node: Mutable<T>, document: LangiumDocument): void;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Public contract for the per-language AST-extension service. Extends the
|
|
104
|
+
* {@link AstExtensionRegistry} (the imperative `register` surface
|
|
105
|
+
* contributions use) with the dispatch entry points. Only
|
|
106
|
+
* {@link AstExtensionService.extendDocument} is called cross-class from
|
|
107
|
+
* `BuildPipelineIntegration`, as documents reach each wired phase;
|
|
108
|
+
* {@link AstExtensionService.extendNode} has no production caller.
|
|
109
|
+
*
|
|
110
|
+
* Adopter overrides go through {@link DefaultAstExtensionService}; the
|
|
111
|
+
* interface keeps the public API stable while internals (the bucket-
|
|
112
|
+
* by-state cache) stay `protected` on the default class.
|
|
113
|
+
*/
|
|
114
|
+
export interface AstExtensionService extends AstExtensionRegistry {
|
|
115
|
+
/**
|
|
116
|
+
* Run a single AST node through every registration declaring
|
|
117
|
+
* `phase` as its state. Honours `documentFilter` and `nodeFilter`.
|
|
118
|
+
* Primarily for tests that need to invoke an extension callback without
|
|
119
|
+
* driving Langium's full document-build pipeline.
|
|
120
|
+
*/
|
|
121
|
+
extendNode(node: AstNode, document: LangiumDocument, phase: DocumentState): void;
|
|
122
|
+
/**
|
|
123
|
+
* Re-run all `compute` callbacks declaring `phase` as their state against
|
|
124
|
+
* every node in the document. Single-pass. Called by
|
|
125
|
+
* `BuildPipelineIntegration` from an `onDocumentPhase` listener;
|
|
126
|
+
* not for general adopter use.
|
|
127
|
+
*/
|
|
128
|
+
extendDocument(document: LangiumDocument, phase: DocumentState, cancelToken?: CancellationToken): void;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Construction options for {@link DefaultAstExtensionService}. */
|
|
132
|
+
export type AstExtensionServiceOptions = LogNameOptions;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Default {@link AstExtensionService} implementation. Generic registry for
|
|
136
|
+
* build-phase AST-node enrichment: computed properties and synthetic
|
|
137
|
+
* children. The sibling scope-contribution concern (extra resolvable
|
|
138
|
+
* descriptions at query time) lives in `ScopeExtensionService`.
|
|
139
|
+
*
|
|
140
|
+
* Designed as a base class; consumers extend it and call `register` in
|
|
141
|
+
* their constructor.
|
|
142
|
+
*
|
|
143
|
+
* Build-phase invocation is driven by `BuildPipelineIntegration`,
|
|
144
|
+
* which calls {@link extendDocument} for the wired phases — this class
|
|
145
|
+
* owns the registry + per-node logic, not the listener lifecycle.
|
|
146
|
+
*
|
|
147
|
+
* **Performance:** `extendDocument` shares a single `streamAllContents` walk
|
|
148
|
+
* per document per wired phase; cost is O(registrations-for-state × nodes),
|
|
149
|
+
* and it early-outs when no registration targets the state or the document.
|
|
150
|
+
*/
|
|
151
|
+
export class DefaultAstExtensionService implements AstExtensionService {
|
|
152
|
+
protected readonly extensions = new Registry<AstExtension>();
|
|
153
|
+
/**
|
|
154
|
+
* Per-state bucket of registrations targeting each state. Rebuilt lazily
|
|
155
|
+
* on the first refresh after a registry mutation — staleness is detected
|
|
156
|
+
* via reference identity of the registry's cached array (see {@link Registry.all}).
|
|
157
|
+
*/
|
|
158
|
+
protected stateBuckets = new Map<DocumentState, readonly AstExtension[]>();
|
|
159
|
+
protected stateBucketsFor: readonly AstExtension[] | undefined;
|
|
160
|
+
|
|
161
|
+
protected readonly tracer: Tracer;
|
|
162
|
+
|
|
163
|
+
constructor(
|
|
164
|
+
protected readonly services: ServerLanguageServices,
|
|
165
|
+
options: AstExtensionServiceOptions = {}
|
|
166
|
+
) {
|
|
167
|
+
this.tracer = services.shared.Tracer.for(options.logName ?? 'AstExtension').trace('instantiated');
|
|
168
|
+
|
|
169
|
+
// Read the language's AstExtensionContribution group and let each
|
|
170
|
+
// contribution register one or many extensions through this service.
|
|
171
|
+
// Optional chaining tolerates incomplete test stubs; production
|
|
172
|
+
// wiring always provides the slot via `createServerLanguageModule`.
|
|
173
|
+
const contributions = services.ast?.extensions ?? {};
|
|
174
|
+
for (const contribution of Object.values(contributions)) {
|
|
175
|
+
contribution.registerAstExtensions(this);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Register a single AST extension. Doubles as the imperative low-level
|
|
181
|
+
* API and as the {@link AstExtensionRegistry} entry point that
|
|
182
|
+
* `AstExtensionContribution.registerAstExtensions` hands to
|
|
183
|
+
* contributions. Throws on duplicate id.
|
|
184
|
+
*
|
|
185
|
+
* Build-phase invocation is driven by `BuildPipelineIntegration`,
|
|
186
|
+
* which calls {@link extendDocument} for the wired phases.
|
|
187
|
+
*/
|
|
188
|
+
register<T extends AstNode>(extension: AstExtension<T>): Disposable {
|
|
189
|
+
// Cast: TypeScript can't see that `T extends AstNode` makes the extension
|
|
190
|
+
// assignable to the default-parameter form. The runtime contract is the same.
|
|
191
|
+
return this.extensions.register(extension as AstExtension);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Production code goes through {@link extendDocument} via the
|
|
196
|
+
* `onDocumentPhase(state)` listener wired by `BuildPipelineIntegration`.
|
|
197
|
+
*/
|
|
198
|
+
extendNode(node: AstNode, document: LangiumDocument, phase: DocumentState): void {
|
|
199
|
+
const bucket = this.getStateBucket(phase);
|
|
200
|
+
for (const extension of bucket) {
|
|
201
|
+
if (extension.documentFilter && !extension.documentFilter(document)) {
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
if (!extension.nodeFilter(node)) {
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
extension.compute(node as Mutable<AstNode>, document);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Skips the walk entirely when no registration applies to this document
|
|
213
|
+
* (either no registration declares `phase`, or every applicable
|
|
214
|
+
* registration's `documentFilter` rejects the document).
|
|
215
|
+
*
|
|
216
|
+
* `cancelToken` is checked at entry — `onDocumentPhase` is invoked once per
|
|
217
|
+
* document by Langium, so an entry-check skips the `streamAllContents`
|
|
218
|
+
* walk for any document arriving after the build is preempted. The
|
|
219
|
+
* per-registration / per-node loops stay sync (no inner `interruptAndCheck`)
|
|
220
|
+
* to avoid async coloring through the property-walk callbacks; the
|
|
221
|
+
* downstream throughput hit from running one extra document's walk is
|
|
222
|
+
* smaller than the microtask cost of yielding inside the walk.
|
|
223
|
+
*/
|
|
224
|
+
extendDocument(document: LangiumDocument, phase: DocumentState, cancelToken?: CancellationToken): void {
|
|
225
|
+
if (cancelToken?.isCancellationRequested) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const bucket = this.getStateBucket(phase);
|
|
229
|
+
if (bucket.length === 0) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
// Per-document filter: registrations without `documentFilter` always apply.
|
|
233
|
+
// If every registration rejects the document, skip the streamAllContents walk.
|
|
234
|
+
const applicable = bucket.filter(extension => !extension.documentFilter || extension.documentFilter(document));
|
|
235
|
+
if (applicable.length === 0) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
// Per-registration self-time profiling is opt-in: only open a session when
|
|
239
|
+
// the debug threshold is active, so the production path allocates nothing
|
|
240
|
+
// and the per-(node×registration) loop stays a single const-branch off
|
|
241
|
+
// `session`. `ProfileSession.scope` is NOT itself level-gated.
|
|
242
|
+
const session = Logger.isLevelEnabled('debug') ? this.tracer.profile(`ast-extension ${DocumentState[phase]}`) : undefined;
|
|
243
|
+
for (const node of AstUtils.streamAllContents(document.parseResult.value)) {
|
|
244
|
+
for (const extension of applicable) {
|
|
245
|
+
if (extension.nodeFilter(node)) {
|
|
246
|
+
// Scope per registration id so the session aggregates self-time by
|
|
247
|
+
// extension across every node; off the profiling path call directly.
|
|
248
|
+
if (session) {
|
|
249
|
+
session.scope(extension.id, () => extension.compute(node as Mutable<AstNode>, document));
|
|
250
|
+
} else {
|
|
251
|
+
extension.compute(node as Mutable<AstNode>, document);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// One line per registration (count + self-% + self-ms), sorted — only when profiling.
|
|
257
|
+
session?.report('debug');
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Bucket-by-state view of {@link extensions}, rebuilt lazily when the
|
|
262
|
+
* registry's cached `all()` reference changes. Replaces per-call allocation
|
|
263
|
+
* on the per-node hot path — for a workspace with many documents at the
|
|
264
|
+
* same state, the bucket is computed once and reused until the next
|
|
265
|
+
* register / unregister.
|
|
266
|
+
*/
|
|
267
|
+
protected getStateBucket(phase: DocumentState): readonly AstExtension[] {
|
|
268
|
+
const current = this.extensions.all();
|
|
269
|
+
if (this.stateBucketsFor !== current) {
|
|
270
|
+
const next = new Map<DocumentState, AstExtension[]>();
|
|
271
|
+
for (const extension of current) {
|
|
272
|
+
let bucket = next.get(extension.state);
|
|
273
|
+
if (!bucket) {
|
|
274
|
+
bucket = [];
|
|
275
|
+
next.set(extension.state, bucket);
|
|
276
|
+
}
|
|
277
|
+
bucket.push(extension);
|
|
278
|
+
}
|
|
279
|
+
this.stateBuckets = next;
|
|
280
|
+
this.stateBucketsFor = current;
|
|
281
|
+
}
|
|
282
|
+
return this.stateBuckets.get(phase) ?? EMPTY_STATE_BUCKET;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** Shared empty result so `getStateBucket` doesn't allocate per call on the cold path. */
|
|
287
|
+
const EMPTY_STATE_BUCKET: readonly AstExtension[] = Object.freeze([]);
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Assign a non-enumerable own property — for synthetic children that must NOT
|
|
291
|
+
* be walked by Langium's `streamContents`.
|
|
292
|
+
*
|
|
293
|
+
* Direct reads (`node._foo`) still work. In its default `full` transfer mode
|
|
294
|
+
* the encoder enumerates via `Object.getOwnPropertyNames`, so the property
|
|
295
|
+
* still crosses to the wire shape; `grammar` mode enumerates the reflection's
|
|
296
|
+
* declared-property allowlist instead and therefore drops it.
|
|
297
|
+
*
|
|
298
|
+
* Use when assigning AstNode-shaped values that should not appear as
|
|
299
|
+
* containment children to symbol providers, folding, semantic tokens, or
|
|
300
|
+
* validators. Plain non-AstNode values (strings, booleans, plain objects) can
|
|
301
|
+
* be assigned with `node._foo = value` directly — Langium's iteration only
|
|
302
|
+
* yields AstNode-shaped values, so non-AST data is naturally invisible.
|
|
303
|
+
*/
|
|
304
|
+
export function setHiddenProperty<V>(node: object, property: string, value: V): void {
|
|
305
|
+
Object.defineProperty(node, property, {
|
|
306
|
+
value,
|
|
307
|
+
writable: true,
|
|
308
|
+
configurable: true,
|
|
309
|
+
enumerable: false
|
|
310
|
+
});
|
|
311
|
+
}
|