@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,630 @@
|
|
|
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 { Deferred, type Project, type Tracer, UNQUALIFIED_PROJECT_REFERENCE } from '@hydranium/protocol';
|
|
11
|
+
import {
|
|
12
|
+
type AstNode,
|
|
13
|
+
AstUtils,
|
|
14
|
+
type DocumentBuilder,
|
|
15
|
+
type FileSystemProvider,
|
|
16
|
+
type LangiumDocument,
|
|
17
|
+
type LangiumDocuments,
|
|
18
|
+
type URI,
|
|
19
|
+
UriUtils
|
|
20
|
+
} from '@hydranium/langium';
|
|
21
|
+
import { Disposable } from 'vscode-languageserver';
|
|
22
|
+
import type { WorkspaceFolder } from 'vscode-languageserver-types';
|
|
23
|
+
import type { LogNameOptions } from '../diagnostics/logger.js';
|
|
24
|
+
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
25
|
+
import { isVirtualUri } from '../workspace/virtual-document.js';
|
|
26
|
+
import type { ProjectChangeEvent, ProjectChangeListener } from './project-change-event.js';
|
|
27
|
+
import type { ProjectManager } from './project-manager.js';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Abstract base for project-aware {@link ProjectManager} implementations.
|
|
31
|
+
* Implements the machinery: registry, auto-subscription to
|
|
32
|
+
* `DocumentBuilder.onUpdate`, event channel, cascade computation, and
|
|
33
|
+
* change-emission.
|
|
34
|
+
*
|
|
35
|
+
* Consumers extend this and override only the hooks specific to their
|
|
36
|
+
* project model. For the no-project case, bind `SingleProjectManager`
|
|
37
|
+
* instead — it implements {@link ProjectManager} directly with a single
|
|
38
|
+
* synthetic project that owns every URI.
|
|
39
|
+
*
|
|
40
|
+
* ## Required overrides
|
|
41
|
+
*
|
|
42
|
+
* - {@link isProjectDescriptor} — abstract; predicate identifying the
|
|
43
|
+
* consumer's descriptor files.
|
|
44
|
+
* - {@link parseProjectDescriptor} — abstract; converts a parsed
|
|
45
|
+
* descriptor document into a {@link Project}.
|
|
46
|
+
*
|
|
47
|
+
* ## Optional overrides
|
|
48
|
+
*
|
|
49
|
+
* - {@link findDescriptorUris} — default walks the workspace folders
|
|
50
|
+
* recursively. Override to use a manifest index, glob pattern, or
|
|
51
|
+
* explicit listing.
|
|
52
|
+
* - {@link shouldEnterDirectory} — default skips hidden directories,
|
|
53
|
+
* `node_modules`, and `out`. Override to customise exclusion rules
|
|
54
|
+
* without re-implementing the walk.
|
|
55
|
+
* - {@link getAffectedProjects} — default walks {@link Project.dependencies}
|
|
56
|
+
* transitively in reverse (projects whose dep closure touches a changed
|
|
57
|
+
* project also rebuild). Override for a different rebuild policy.
|
|
58
|
+
* - {@link getVisibleProjects} — default walks {@link Project.dependencies}
|
|
59
|
+
* transitively. Override for a different visibility model.
|
|
60
|
+
* - {@link computeProject} — default uses closest-ancestor-descriptor-folder
|
|
61
|
+
* membership. Override for a different membership model; overriding
|
|
62
|
+
* {@link getProject} instead loses the memoization it wraps.
|
|
63
|
+
*/
|
|
64
|
+
export abstract class AbstractProjectManager<TProject extends Project = Project> implements ProjectManager<TProject> {
|
|
65
|
+
/** Project id → {@link Project}. */
|
|
66
|
+
protected readonly projects = new Map<string, TProject>();
|
|
67
|
+
|
|
68
|
+
/** Descriptor URI (`uri.toString()`) → project id. Drives {@link getProject} membership lookups. */
|
|
69
|
+
protected readonly projectByDescriptor = new Map<string, string>();
|
|
70
|
+
|
|
71
|
+
/** Descriptor URI → owning folder URI (cached for efficient closest-ancestor lookups). */
|
|
72
|
+
protected readonly descriptorDirectories = new Map<string, URI>();
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Memoized {@link getProject} results, keyed by URI string (`undefined` = no owning project,
|
|
76
|
+
* distinguished from a cache miss by {@link Map.has}). Membership resolution is a hot path —
|
|
77
|
+
* called per description / node / reference during a build — but the descriptor set only
|
|
78
|
+
* changes on a project rebuild, so the result is stable between rebuilds. Cleared by
|
|
79
|
+
* {@link invalidateMembershipCache} wherever the descriptor maps mutate.
|
|
80
|
+
*/
|
|
81
|
+
protected readonly membershipCache = new Map<string, TProject | undefined>();
|
|
82
|
+
|
|
83
|
+
protected readonly listeners: ProjectChangeListener<TProject>[] = [];
|
|
84
|
+
protected readonly readyDeferred = new Deferred<void>();
|
|
85
|
+
protected discoveryRan = false;
|
|
86
|
+
|
|
87
|
+
protected readonly fileSystemProvider: FileSystemProvider;
|
|
88
|
+
protected readonly langiumDocuments: LangiumDocuments;
|
|
89
|
+
protected readonly documentBuilder: DocumentBuilder;
|
|
90
|
+
protected readonly tracer: Tracer;
|
|
91
|
+
|
|
92
|
+
constructor(
|
|
93
|
+
protected readonly services: ServerSharedServicesMinimal,
|
|
94
|
+
options: LogNameOptions = {}
|
|
95
|
+
) {
|
|
96
|
+
this.fileSystemProvider = services.workspace.FileSystemProvider;
|
|
97
|
+
this.langiumDocuments = services.workspace.LangiumDocuments;
|
|
98
|
+
this.documentBuilder = services.workspace.DocumentBuilder;
|
|
99
|
+
this.tracer = services.Tracer.for(options.logName ?? this.constructor.name).trace('instantiated');
|
|
100
|
+
this.documentBuilder.onUpdate((changed, deleted) => this.onBuildUpdate(changed, deleted));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
get ready(): Promise<void> {
|
|
104
|
+
return this.readyDeferred.promise;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
onProjectsChanged(listener: ProjectChangeListener<TProject>): Disposable {
|
|
108
|
+
this.listeners.push(listener);
|
|
109
|
+
return Disposable.create(() => {
|
|
110
|
+
const idx = this.listeners.indexOf(listener);
|
|
111
|
+
if (idx >= 0) {
|
|
112
|
+
this.listeners.splice(idx, 1);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ============================================================
|
|
118
|
+
// Virtual hooks
|
|
119
|
+
// ============================================================
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Predicate: is the given URI a project descriptor file? **Abstract** —
|
|
123
|
+
* concrete subclasses must implement, paired with their
|
|
124
|
+
* {@link parseProjectDescriptor} override. The predicate gates both
|
|
125
|
+
* initial discovery ({@link walkForDescriptors}) and incremental
|
|
126
|
+
* tracking ({@link onBuildUpdate}); a default of `false` would
|
|
127
|
+
* silently leave the manager idle even after the parser is wired,
|
|
128
|
+
* so the predicate is required at the class level.
|
|
129
|
+
*
|
|
130
|
+
* Implementations are typically schema-driven — filename pattern,
|
|
131
|
+
* extension, or location. Avoid registry lookups: new descriptors
|
|
132
|
+
* appearing at runtime would not yet be in the registry.
|
|
133
|
+
*/
|
|
134
|
+
abstract isProjectDescriptor(uri: URI | string): boolean;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Whether `uri` should be tracked as a project descriptor. Enforces the
|
|
138
|
+
* framework invariant that a **virtual document** (no backing file, a
|
|
139
|
+
* `virtual:` URI) can never be a descriptor — a contributed stdlib / library
|
|
140
|
+
* document whose URI happens to match a broad adopter
|
|
141
|
+
* {@link isProjectDescriptor} predicate must not spawn a phantom
|
|
142
|
+
* project — then defers to the adopter predicate. Every descriptor gate
|
|
143
|
+
* (initial walk + incremental {@link onBuildUpdate}) routes through here, so
|
|
144
|
+
* the invariant holds for all adopters without each having to guard it.
|
|
145
|
+
*/
|
|
146
|
+
protected isDescriptorUri(uri: URI | string): boolean {
|
|
147
|
+
return !isVirtualUri(uri) && this.isProjectDescriptor(uri);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Default implementation: `true` iff the owning project's
|
|
152
|
+
* {@link Project.referenceName} equals {@link UNQUALIFIED_PROJECT_REFERENCE},
|
|
153
|
+
* or `uri` is not owned by any project. Subclasses with cheaper
|
|
154
|
+
* lookups override.
|
|
155
|
+
*/
|
|
156
|
+
isUnqualifiedProjectReference(uri: URI | string): boolean {
|
|
157
|
+
const project = this.getProject(uri);
|
|
158
|
+
return project === undefined || project.referenceName === UNQUALIFIED_PROJECT_REFERENCE;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Adopter-facing concept name used in the change-log lines this manager
|
|
163
|
+
* emits ({@link logProjectChange}). Default `'project'`; adopters override
|
|
164
|
+
* to their own domain term.
|
|
165
|
+
*/
|
|
166
|
+
protected conceptName(): string {
|
|
167
|
+
return 'project';
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Emit an `Add/Update` / `Remove` change-log line for a project. `uri` is the
|
|
172
|
+
* descriptor file; its workspace-relative path is shown via the
|
|
173
|
+
* `HydraniumWorkspaceManager` the framework binds. `info`-level, so it
|
|
174
|
+
* is suppressed when the log threshold is above `info`.
|
|
175
|
+
*/
|
|
176
|
+
protected logProjectChange(action: 'Add/Update' | 'Remove', id: string, uri: URI): void {
|
|
177
|
+
const location = this.services.workspace.WorkspaceManager.wsRelativePath(uri);
|
|
178
|
+
this.tracer.info(`${action} ${this.conceptName()} "${id}" from ${location}`);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Default implementation: returns `true` while the registry holds at
|
|
183
|
+
* most one project. Conservative — flips to `false` as soon as a
|
|
184
|
+
* second project is registered, even if all documents still belong
|
|
185
|
+
* to the first. Subclasses with a richer notion of "meaningful
|
|
186
|
+
* project boundary" override.
|
|
187
|
+
*/
|
|
188
|
+
isSingleProject(): boolean {
|
|
189
|
+
return this.getProjects().length <= 1;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Convert a parsed descriptor document into a {@link Project}, or
|
|
194
|
+
* return `undefined` if the descriptor is malformed / incomplete.
|
|
195
|
+
* Called from {@link loadDescriptor} during discovery and updates.
|
|
196
|
+
*
|
|
197
|
+
* Adopters populate {@link Project.referenceName} explicitly — empty
|
|
198
|
+
* sentinel ({@link UNQUALIFIED_PROJECT_REFERENCE}) for projects that
|
|
199
|
+
* do not qualify their names, or a sanitised / version-stripped form
|
|
200
|
+
* for adopters with a custom reference scheme.
|
|
201
|
+
*/
|
|
202
|
+
protected abstract parseProjectDescriptor(uri: URI, document: LangiumDocument): Promise<TProject | undefined>;
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Locate descriptor URIs across the given workspace folders. Default
|
|
206
|
+
* walks recursively via {@link fileSystemProvider}, respecting
|
|
207
|
+
* {@link shouldEnterDirectory} for folder exclusions. Override to use
|
|
208
|
+
* a manifest index, glob, or explicit listing.
|
|
209
|
+
*/
|
|
210
|
+
protected async findDescriptorUris(folders: readonly WorkspaceFolder[]): Promise<URI[]> {
|
|
211
|
+
const result: URI[] = [];
|
|
212
|
+
for (const folder of folders) {
|
|
213
|
+
await this.walkForDescriptors(UriUtils.toUri(folder.uri), result);
|
|
214
|
+
}
|
|
215
|
+
return result;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Recursive helper for the default {@link findDescriptorUris}. Override
|
|
220
|
+
* to customise traversal *behaviour*; override {@link shouldEnterDirectory}
|
|
221
|
+
* if only the directory-exclusion rule needs to change.
|
|
222
|
+
*/
|
|
223
|
+
protected async walkForDescriptors(folder: URI, accumulator: URI[]): Promise<void> {
|
|
224
|
+
let entries;
|
|
225
|
+
try {
|
|
226
|
+
entries = await this.fileSystemProvider.readDirectory(folder);
|
|
227
|
+
} catch (error) {
|
|
228
|
+
this.tracer.warn(`Failed to read directory ${folder.toString()}: ${error}`);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
for (const entry of entries) {
|
|
232
|
+
const name = UriUtils.basename(entry.uri);
|
|
233
|
+
if (entry.isDirectory) {
|
|
234
|
+
if (this.shouldEnterDirectory(entry.uri, name)) {
|
|
235
|
+
await this.walkForDescriptors(entry.uri, accumulator);
|
|
236
|
+
}
|
|
237
|
+
} else if (entry.isFile && this.isDescriptorUri(entry.uri)) {
|
|
238
|
+
accumulator.push(entry.uri);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Predicate controlling whether the default descriptor walk descends
|
|
245
|
+
* into a sub-directory. Default skips hidden directories
|
|
246
|
+
* (`name.startsWith('.')`), `node_modules`, and `out` — the common
|
|
247
|
+
* "ignore build outputs and tooling" rules. Override to tighten or
|
|
248
|
+
* loosen the set without re-implementing the recursion.
|
|
249
|
+
*/
|
|
250
|
+
protected shouldEnterDirectory(_uri: URI, name: string): boolean {
|
|
251
|
+
if (name.startsWith('.')) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
return name !== 'node_modules' && name !== 'out';
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Compute the set of projects whose member documents need to rebuild
|
|
259
|
+
* given the directly changed projects. Default walks the dependency
|
|
260
|
+
* graph in reverse — any project whose declared {@link Project.dependencies}
|
|
261
|
+
* include a changed id transitively also rebuilds (cycle-safe).
|
|
262
|
+
*
|
|
263
|
+
* Override for a different rebuild policy (no transitivity, custom
|
|
264
|
+
* reachability, etc.).
|
|
265
|
+
*/
|
|
266
|
+
protected getAffectedProjects(directlyChanged: readonly string[]): readonly string[] {
|
|
267
|
+
const result = new Set(directlyChanged);
|
|
268
|
+
let grew = true;
|
|
269
|
+
while (grew) {
|
|
270
|
+
grew = false;
|
|
271
|
+
for (const project of this.projects.values()) {
|
|
272
|
+
if (result.has(project.id)) {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
if (project.dependencies?.some(dep => result.has(dep))) {
|
|
276
|
+
result.add(project.id);
|
|
277
|
+
grew = true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return [...result];
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Whether replacing `previous` with `updated` — the same project re-parsed
|
|
286
|
+
* (both carry the same {@link Project.id}) — forces the project's member
|
|
287
|
+
* documents, and via {@link getAffectedProjects} its dependents, to
|
|
288
|
+
* rebuild. Consulted only on the same-id update path; an id change is
|
|
289
|
+
* handled as remove-old + add-new and always rebuilds.
|
|
290
|
+
*
|
|
291
|
+
* The default compares the fields the framework itself reads when building
|
|
292
|
+
* or linking members: {@link Project.referenceName} (the prefix
|
|
293
|
+
* cross-project qualified names resolve against) and
|
|
294
|
+
* {@link Project.dependencies} (the visibility closure). It intentionally
|
|
295
|
+
* ignores {@link Project.version} — the framework never reads it (it is
|
|
296
|
+
* pass-through client metadata), so a version-only change still emits an
|
|
297
|
+
* `updated` event but rebuilds nothing.
|
|
298
|
+
*
|
|
299
|
+
* Override to widen the comparison with adopter descriptor fields that a
|
|
300
|
+
* member build observes, combining with `super.requiresMemberRebuild(...)`.
|
|
301
|
+
*/
|
|
302
|
+
protected requiresMemberRebuild(previous: TProject, updated: TProject): boolean {
|
|
303
|
+
return previous.referenceName !== updated.referenceName || !sameDependencies(previous, updated);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Default: transitive closure of {@link Project.dependencies} including
|
|
308
|
+
* the source project itself. Override for a different visibility model.
|
|
309
|
+
*/
|
|
310
|
+
getVisibleProjects(projectId: string): readonly string[] {
|
|
311
|
+
if (!this.projects.has(projectId)) {
|
|
312
|
+
return [];
|
|
313
|
+
}
|
|
314
|
+
const visited = new Set<string>();
|
|
315
|
+
const ordered: string[] = [];
|
|
316
|
+
this.collectVisibleProjects(projectId, visited, ordered);
|
|
317
|
+
return ordered;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
isVisible(sourceProjectId: string, targetProjectId: string, selfVisible = false): boolean {
|
|
321
|
+
const visible = this.getVisibleProjects(sourceProjectId);
|
|
322
|
+
if (visible.length === 0) {
|
|
323
|
+
return false;
|
|
324
|
+
}
|
|
325
|
+
if (sourceProjectId === targetProjectId) {
|
|
326
|
+
return selfVisible;
|
|
327
|
+
}
|
|
328
|
+
return visible.includes(targetProjectId);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
protected collectVisibleProjects(projectId: string, visited: Set<string>, ordered: string[]): void {
|
|
332
|
+
if (visited.has(projectId)) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
visited.add(projectId);
|
|
336
|
+
const project = this.projects.get(projectId);
|
|
337
|
+
if (!project) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
ordered.push(projectId);
|
|
341
|
+
if (project.dependencies) {
|
|
342
|
+
for (const dep of project.dependencies) {
|
|
343
|
+
this.collectVisibleProjects(dep, visited, ordered);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// ============================================================
|
|
349
|
+
// Discovery
|
|
350
|
+
// ============================================================
|
|
351
|
+
|
|
352
|
+
async discoverProjects(folders: readonly WorkspaceFolder[]): Promise<void> {
|
|
353
|
+
if (this.discoveryRan) {
|
|
354
|
+
this.tracer.warn('discoverProjects called more than once — ignoring subsequent call.');
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
this.discoveryRan = true;
|
|
358
|
+
const descriptorUris = await this.findDescriptorUris(folders);
|
|
359
|
+
const added: string[] = [];
|
|
360
|
+
for (const uri of descriptorUris) {
|
|
361
|
+
const project = await this.loadDescriptor(uri);
|
|
362
|
+
if (project) {
|
|
363
|
+
added.push(project.id);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
this.readyDeferred.resolve();
|
|
367
|
+
if (added.length > 0) {
|
|
368
|
+
this.emit({ added, updated: [], removed: [], affectedDocuments: [] });
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* Parse a single descriptor URI and register the resulting project.
|
|
374
|
+
* Returns the parsed project, or `undefined` if parsing failed (errors
|
|
375
|
+
* are logged, not thrown — the rest of discovery / update continues).
|
|
376
|
+
*/
|
|
377
|
+
protected async loadDescriptor(uri: URI): Promise<TProject | undefined> {
|
|
378
|
+
try {
|
|
379
|
+
const document = await this.langiumDocuments.getOrCreateDocument(uri);
|
|
380
|
+
const project = await this.parseProjectDescriptor(uri, document);
|
|
381
|
+
if (project) {
|
|
382
|
+
this.projects.set(project.id, project);
|
|
383
|
+
this.projectByDescriptor.set(uri.toString(), project.id);
|
|
384
|
+
this.descriptorDirectories.set(uri.toString(), UriUtils.dirname(uri));
|
|
385
|
+
this.invalidateMembershipCache();
|
|
386
|
+
this.logProjectChange('Add/Update', project.id, uri);
|
|
387
|
+
}
|
|
388
|
+
return project;
|
|
389
|
+
} catch (error) {
|
|
390
|
+
this.tracer.error(`Failed to parse ${this.conceptName()} descriptor at ${uri.toString()}: ${error}`);
|
|
391
|
+
return undefined;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// ============================================================
|
|
396
|
+
// Incremental update
|
|
397
|
+
// ============================================================
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Handle a `DocumentBuilder.onUpdate` event. Filters for descriptor
|
|
401
|
+
* URIs, diffs the registry, and emits {@link ProjectChangeEvent} with
|
|
402
|
+
* the registry diff plus the affected documents that need rebuilding.
|
|
403
|
+
*
|
|
404
|
+
* Descriptor URIs that triggered the cycle are excluded from
|
|
405
|
+
* {@link ProjectChangeEvent.affectedDocuments} — re-adding them would
|
|
406
|
+
* loop.
|
|
407
|
+
*/
|
|
408
|
+
protected async onBuildUpdate(changed: readonly URI[], deleted: readonly URI[]): Promise<void> {
|
|
409
|
+
const changedDescriptors = changed.filter(uri => this.isDescriptorUri(uri));
|
|
410
|
+
const deletedDescriptors = deleted.filter(uri => this.isDescriptorUri(uri));
|
|
411
|
+
if (changedDescriptors.length === 0 && deletedDescriptors.length === 0) {
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
// Descriptor removals below mutate the maps `computeProject` reads; drop the
|
|
415
|
+
// memoized results now (adds also re-clear via `loadDescriptor`), so the
|
|
416
|
+
// `getProject` calls in `collectAffectedDocuments` see the post-change state.
|
|
417
|
+
this.invalidateMembershipCache();
|
|
418
|
+
// Note: we intentionally do NOT await `ready` here. In the production
|
|
419
|
+
// flow `discoverProjects` completes (resolving `ready`) inside
|
|
420
|
+
// `HydraniumWorkspaceManager.performStartup` before `documentBuilder.build`
|
|
421
|
+
// runs, so the registry is already populated by the time `onUpdate`
|
|
422
|
+
// fires. Awaiting would deadlock test scenarios that exercise
|
|
423
|
+
// `parseDocument` directly without going through workspace startup.
|
|
424
|
+
|
|
425
|
+
const added: string[] = [];
|
|
426
|
+
const updated: string[] = [];
|
|
427
|
+
const removed: Array<{ id: string; snapshot: TProject }> = [];
|
|
428
|
+
// Ids whose member documents must rebuild. Added and removed projects
|
|
429
|
+
// always qualify; an updated project only when a member-observable field
|
|
430
|
+
// changed (see requiresMemberRebuild) — a metadata-only change still
|
|
431
|
+
// emits an `updated` event but drives no member rebuild.
|
|
432
|
+
const rebuildIds: string[] = [];
|
|
433
|
+
|
|
434
|
+
for (const uri of changedDescriptors) {
|
|
435
|
+
const uriStr = uri.toString();
|
|
436
|
+
const previousProjectId = this.projectByDescriptor.get(uriStr);
|
|
437
|
+
const previousProject = previousProjectId ? this.projects.get(previousProjectId) : undefined;
|
|
438
|
+
const newProject = await this.loadDescriptor(uri);
|
|
439
|
+
if (newProject) {
|
|
440
|
+
if (!previousProjectId) {
|
|
441
|
+
added.push(newProject.id);
|
|
442
|
+
rebuildIds.push(newProject.id);
|
|
443
|
+
} else if (previousProjectId !== newProject.id) {
|
|
444
|
+
// Descriptor file now describes a different project id — treat
|
|
445
|
+
// as remove-old + add-new so dependents on the old id can react.
|
|
446
|
+
this.projects.delete(previousProjectId);
|
|
447
|
+
if (previousProject) {
|
|
448
|
+
removed.push({ id: previousProjectId, snapshot: previousProject });
|
|
449
|
+
this.logProjectChange('Remove', previousProjectId, uri);
|
|
450
|
+
}
|
|
451
|
+
added.push(newProject.id);
|
|
452
|
+
rebuildIds.push(newProject.id);
|
|
453
|
+
} else {
|
|
454
|
+
updated.push(newProject.id);
|
|
455
|
+
if (!previousProject || this.requiresMemberRebuild(previousProject, newProject)) {
|
|
456
|
+
rebuildIds.push(newProject.id);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
} else if (previousProjectId) {
|
|
460
|
+
// Descriptor parsed before but now invalid — drop it.
|
|
461
|
+
this.projects.delete(previousProjectId);
|
|
462
|
+
this.projectByDescriptor.delete(uriStr);
|
|
463
|
+
this.descriptorDirectories.delete(uriStr);
|
|
464
|
+
if (previousProject) {
|
|
465
|
+
removed.push({ id: previousProjectId, snapshot: previousProject });
|
|
466
|
+
this.logProjectChange('Remove', previousProjectId, uri);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
for (const uri of deletedDescriptors) {
|
|
472
|
+
const uriStr = uri.toString();
|
|
473
|
+
const projectId = this.projectByDescriptor.get(uriStr);
|
|
474
|
+
if (projectId) {
|
|
475
|
+
const snapshot = this.projects.get(projectId);
|
|
476
|
+
this.projects.delete(projectId);
|
|
477
|
+
this.projectByDescriptor.delete(uriStr);
|
|
478
|
+
this.descriptorDirectories.delete(uriStr);
|
|
479
|
+
if (snapshot) {
|
|
480
|
+
removed.push({ id: projectId, snapshot });
|
|
481
|
+
this.logProjectChange('Remove', projectId, uri);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (added.length === 0 && updated.length === 0 && removed.length === 0) {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
const removedIds = removed.map(entry => entry.id);
|
|
491
|
+
const affectedProjectIds = new Set(this.getAffectedProjects([...rebuildIds, ...removedIds]));
|
|
492
|
+
const excluded = new Set<string>();
|
|
493
|
+
for (const uri of changedDescriptors) {
|
|
494
|
+
excluded.add(uri.toString());
|
|
495
|
+
}
|
|
496
|
+
for (const uri of deletedDescriptors) {
|
|
497
|
+
excluded.add(uri.toString());
|
|
498
|
+
}
|
|
499
|
+
const affectedDocuments = this.collectAffectedDocuments(affectedProjectIds, excluded);
|
|
500
|
+
|
|
501
|
+
this.emit({ added, updated, removed, affectedDocuments });
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/** Iterate the document set once, collecting URIs whose owning project is in the affected set. */
|
|
505
|
+
protected collectAffectedDocuments(affectedProjectIds: ReadonlySet<string>, excludedUris: ReadonlySet<string>): URI[] {
|
|
506
|
+
const result: URI[] = [];
|
|
507
|
+
for (const document of this.langiumDocuments.all) {
|
|
508
|
+
const uriStr = document.uri.toString();
|
|
509
|
+
if (excludedUris.has(uriStr)) {
|
|
510
|
+
continue;
|
|
511
|
+
}
|
|
512
|
+
const owning = this.getProject(document.uri);
|
|
513
|
+
if (owning && affectedProjectIds.has(owning.id)) {
|
|
514
|
+
result.push(document.uri);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
return result;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// ============================================================
|
|
521
|
+
// Queries
|
|
522
|
+
// ============================================================
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* The project owning the given URI, memoized per URI (see {@link membershipCache}).
|
|
526
|
+
* The membership computation lives in {@link computeProject} — override THAT, not
|
|
527
|
+
* this, so a subclass's custom model inherits the memoization + invalidation.
|
|
528
|
+
*/
|
|
529
|
+
getProject(uri: URI | string): TProject | undefined {
|
|
530
|
+
const target = UriUtils.toUri(uri);
|
|
531
|
+
const targetStr = target.toString();
|
|
532
|
+
if (this.membershipCache.has(targetStr)) {
|
|
533
|
+
return this.membershipCache.get(targetStr);
|
|
534
|
+
}
|
|
535
|
+
const result = this.computeProject(target);
|
|
536
|
+
this.membershipCache.set(targetStr, result);
|
|
537
|
+
return result;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Compute the project owning {@link target} — default: the project whose descriptor
|
|
542
|
+
* directory is the closest ancestor. Subclasses override for a different membership
|
|
543
|
+
* model; the result is memoized by {@link getProject}.
|
|
544
|
+
*
|
|
545
|
+
* The lookup is O(N) in the number of registered projects per call, but memoization
|
|
546
|
+
* collapses the repeated per-description / per-node calls to one per URI per rebuild.
|
|
547
|
+
* Subclasses that additionally need O(1) per unique URI can maintain a reverse index.
|
|
548
|
+
*/
|
|
549
|
+
protected computeProject(target: URI): TProject | undefined {
|
|
550
|
+
// Direct hit on a descriptor URI is the owning project itself.
|
|
551
|
+
const directProjectId = this.projectByDescriptor.get(target.toString());
|
|
552
|
+
if (directProjectId) {
|
|
553
|
+
return this.projects.get(directProjectId);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// Otherwise, find the closest-ancestor descriptor directory.
|
|
557
|
+
let bestDescriptorUri: string | undefined;
|
|
558
|
+
let bestLength = -1;
|
|
559
|
+
for (const [descriptorUri, directory] of this.descriptorDirectories) {
|
|
560
|
+
if (UriUtils.isAncestorOrEqual(directory, target) && directory.fsPath.length > bestLength) {
|
|
561
|
+
bestDescriptorUri = descriptorUri;
|
|
562
|
+
bestLength = directory.fsPath.length;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
if (!bestDescriptorUri) {
|
|
566
|
+
return undefined;
|
|
567
|
+
}
|
|
568
|
+
const projectId = this.projectByDescriptor.get(bestDescriptorUri);
|
|
569
|
+
return projectId ? this.projects.get(projectId) : undefined;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/** Drop all memoized membership results. Called wherever the descriptor maps mutate. */
|
|
573
|
+
protected invalidateMembershipCache(): void {
|
|
574
|
+
this.membershipCache.clear();
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
getProjectForNode(node: AstNode): TProject | undefined {
|
|
578
|
+
const uri = AstUtils.findRootNode(node).$document?.uri;
|
|
579
|
+
return uri ? this.getProject(uri) : undefined;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
getProjectById(id: string): TProject | undefined {
|
|
583
|
+
return this.projects.get(id);
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
getProjects(): readonly TProject[] {
|
|
587
|
+
return Array.from(this.projects.values());
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
getProjectUris(projectId: string): readonly URI[] {
|
|
591
|
+
if (!this.projects.has(projectId)) {
|
|
592
|
+
return [];
|
|
593
|
+
}
|
|
594
|
+
const result: URI[] = [];
|
|
595
|
+
for (const document of this.langiumDocuments.all) {
|
|
596
|
+
if (this.getProject(document.uri)?.id === projectId) {
|
|
597
|
+
result.push(document.uri);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
return result;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
// ============================================================
|
|
604
|
+
// Event emission
|
|
605
|
+
// ============================================================
|
|
606
|
+
|
|
607
|
+
protected emit(event: ProjectChangeEvent<TProject>): void {
|
|
608
|
+
// Copy the listener list so a listener registering or disposing
|
|
609
|
+
// during iteration doesn't mutate the array we're walking.
|
|
610
|
+
const snapshot = this.listeners.slice();
|
|
611
|
+
for (const listener of snapshot) {
|
|
612
|
+
try {
|
|
613
|
+
listener(event);
|
|
614
|
+
} catch (error) {
|
|
615
|
+
this.tracer.error(`Project change listener failed: ${error}`);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/** Order-independent equality of two projects' dependency id sets. */
|
|
622
|
+
function sameDependencies(a: Project, b: Project): boolean {
|
|
623
|
+
const previous = a.dependencies ?? [];
|
|
624
|
+
const next = b.dependencies ?? [];
|
|
625
|
+
if (previous.length !== next.length) {
|
|
626
|
+
return false;
|
|
627
|
+
}
|
|
628
|
+
const nextSet = new Set(next);
|
|
629
|
+
return previous.every(dep => nextSet.has(dep));
|
|
630
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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 './abstract-project-manager.js';
|
|
11
|
+
export * from './project-change-event.js';
|
|
12
|
+
export * from './project-manager.js';
|
|
13
|
+
export * from './single-project-manager.js';
|