@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,215 @@
|
|
|
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 {
|
|
11
|
+
type AstNode,
|
|
12
|
+
type AstReflection,
|
|
13
|
+
AstUtils,
|
|
14
|
+
CstUtils,
|
|
15
|
+
GrammarAST,
|
|
16
|
+
interruptAndCheck,
|
|
17
|
+
type LangiumDocument,
|
|
18
|
+
type ReferenceInfo
|
|
19
|
+
} from '@hydranium/langium';
|
|
20
|
+
import { AbstractSemanticTokenProvider, type SemanticTokenAcceptor } from '@hydranium/langium/lsp';
|
|
21
|
+
import { type CancellationToken, SemanticTokenModifiers, SemanticTokenTypes } from 'vscode-languageserver';
|
|
22
|
+
import { type NameProvider } from '../langium/naming/name-provider.js';
|
|
23
|
+
import { type ServerLanguageServices } from '../langium/language-module.js';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* What a node or reference should be coloured as. The bare string form is the
|
|
27
|
+
* common case (`SemanticTokenTypes.class`); the object form is for the
|
|
28
|
+
* minority that also need modifiers, or that need to suppress the
|
|
29
|
+
* declaration modifier this provider adds by default (pass `modifier: []`).
|
|
30
|
+
*/
|
|
31
|
+
export type SemanticTokenKind = string | { readonly type: string; readonly modifier?: string | string[] };
|
|
32
|
+
|
|
33
|
+
/** Normalise both {@link SemanticTokenKind} forms to the acceptor's shape. */
|
|
34
|
+
function toAcceptorFields(kind: SemanticTokenKind, fallbackModifier?: string): { type: string; modifier?: string | string[] } {
|
|
35
|
+
if (typeof kind === 'string') {
|
|
36
|
+
return fallbackModifier === undefined ? { type: kind } : { type: kind, modifier: fallbackModifier };
|
|
37
|
+
}
|
|
38
|
+
return kind.modifier === undefined && fallbackModifier !== undefined ? { type: kind.type, modifier: fallbackModifier } : { ...kind };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Behaviour switches for {@link AbstractHydraniumSemanticTokenProvider}. */
|
|
42
|
+
export interface HydraniumSemanticTokenProviderOptions {
|
|
43
|
+
/**
|
|
44
|
+
* Also emit a `keyword` token for every keyword leaf of the CST.
|
|
45
|
+
*
|
|
46
|
+
* OFF by default, and the default is not timidity: semantic tokens OVERRIDE
|
|
47
|
+
* a client-side TextMate grammar, and such a grammar classifies keywords
|
|
48
|
+
* with far finer scopes (`keyword.control`, `storage.type`,
|
|
49
|
+
* `keyword.operator`) than the one flat `keyword` a legend can carry — so
|
|
50
|
+
* turning this on in a host that ships a grammar makes its editor *less*
|
|
51
|
+
* coloured, not more. It exists for the host that ships NO client-side
|
|
52
|
+
* grammar at all (a plain-Monaco page, a minimal web client), where the
|
|
53
|
+
* server's tokens are the only source of colour and keywords otherwise
|
|
54
|
+
* render in the editor's default foreground.
|
|
55
|
+
*/
|
|
56
|
+
readonly highlightKeywords?: boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Semantic-token provider that derives highlighting from ONE adopter-supplied
|
|
61
|
+
* map of AST type → token kind, instead of a hand-written walk.
|
|
62
|
+
*
|
|
63
|
+
* **What it replaces.** Langium's {@link AbstractSemanticTokenProvider} hands
|
|
64
|
+
* you every node and asks you to emit tokens for it, so a grammar-specific
|
|
65
|
+
* provider becomes a chain of typeguards, each repeating two mechanical
|
|
66
|
+
* steps: emit the declaration name with `property: 'name'`, then emit one
|
|
67
|
+
* acceptor call per cross-reference property, remembering `index` for the
|
|
68
|
+
* multi-valued ones. Both steps are derivable, and getting the second one
|
|
69
|
+
* wrong is silent — a forgotten reference property simply renders uncoloured.
|
|
70
|
+
*
|
|
71
|
+
* **How the derivation works.**
|
|
72
|
+
* - The declaration name's PROPERTY comes from {@link NameProvider.getNameProperty},
|
|
73
|
+
* so an `id`-keyed grammar works without the provider hardcoding `'name'`.
|
|
74
|
+
* - Cross-references are discovered with Langium's `streamReferences`, which
|
|
75
|
+
* yields every reference on the node with its property and index already
|
|
76
|
+
* filled in — so multi-valued references cannot be missed or mis-indexed.
|
|
77
|
+
* - A reference's kind is resolved from the reference's DECLARED target type
|
|
78
|
+
* (`AstReflection.getReferenceType`), NOT from `ref.ref.$type`. That is
|
|
79
|
+
* deliberate: the declared type is available whether or not the reference
|
|
80
|
+
* resolves, so a broken or half-typed document keeps its colouring instead
|
|
81
|
+
* of flickering as links come and go.
|
|
82
|
+
*
|
|
83
|
+
* The net effect is that {@link getTokenKind} — a `$type` string in, a token
|
|
84
|
+
* kind out — is usually the only member an adopter writes.
|
|
85
|
+
*
|
|
86
|
+
* Anything the map cannot express stays overridable: {@link getDeclarationKind}
|
|
87
|
+
* and {@link getReferenceKind} for per-node or per-property decisions,
|
|
88
|
+
* {@link highlightElement} for tokens that are neither a declaration nor a
|
|
89
|
+
* cross-reference (a sub-range, a single keyword of one rule). Returning
|
|
90
|
+
* `'prune'` from an override still skips the subtree, as upstream. Colouring
|
|
91
|
+
* EVERY keyword is not one of those cases — that is
|
|
92
|
+
* {@link HydraniumSemanticTokenProviderOptions.highlightKeywords}, which walks
|
|
93
|
+
* the CST once instead.
|
|
94
|
+
*/
|
|
95
|
+
export abstract class AbstractHydraniumSemanticTokenProvider extends AbstractSemanticTokenProvider {
|
|
96
|
+
protected readonly nameProvider: NameProvider;
|
|
97
|
+
protected readonly reflection: AstReflection;
|
|
98
|
+
protected readonly options: HydraniumSemanticTokenProviderOptions;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Modifier added to every declaration token. `declaration` is what themes
|
|
102
|
+
* key on to render a definition differently from a use; override to
|
|
103
|
+
* `undefined` to add none.
|
|
104
|
+
*/
|
|
105
|
+
protected readonly declarationModifier: string | undefined = SemanticTokenModifiers.declaration;
|
|
106
|
+
|
|
107
|
+
constructor(services: ServerLanguageServices, options: HydraniumSemanticTokenProviderOptions = {}) {
|
|
108
|
+
super(services);
|
|
109
|
+
this.nameProvider = services.references.NameProvider;
|
|
110
|
+
this.reflection = services.shared.AstReflection;
|
|
111
|
+
this.options = options;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* The AST pass, then — when asked for — one CST pass over the keywords.
|
|
116
|
+
*
|
|
117
|
+
* **The keyword pass belongs here and not in {@link highlightElement}**,
|
|
118
|
+
* which is called once per AST node: a node reaching its own keyword leaves
|
|
119
|
+
* has to descend its CST subtree, and every node repeating that visits each
|
|
120
|
+
* leaf once per ancestor, so the AST-hosted version is O(leaves × depth)
|
|
121
|
+
* against this one's O(leaves). It also cannot be written correctly with a
|
|
122
|
+
* `prune`, because a keyword leaf's nearest AST node is not always the one
|
|
123
|
+
* whose rule contributed it.
|
|
124
|
+
*
|
|
125
|
+
* Emitting out of positional order is safe: `SemanticTokensBuilder` sorts
|
|
126
|
+
* before it encodes the deltas, so the two passes need not interleave. The
|
|
127
|
+
* range form of the request needs no accommodation either — the acceptor
|
|
128
|
+
* drops anything outside `currentRange` on its own.
|
|
129
|
+
*/
|
|
130
|
+
protected override async computeHighlighting(
|
|
131
|
+
document: LangiumDocument,
|
|
132
|
+
acceptor: SemanticTokenAcceptor,
|
|
133
|
+
cancelToken: CancellationToken
|
|
134
|
+
): Promise<void> {
|
|
135
|
+
await super.computeHighlighting(document, acceptor, cancelToken);
|
|
136
|
+
if (this.options.highlightKeywords !== true) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const root = document.parseResult.value.$cstNode;
|
|
140
|
+
if (root === undefined) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
for (const cst of CstUtils.streamCst(root)) {
|
|
144
|
+
await interruptAndCheck(cancelToken);
|
|
145
|
+
// The grammar source is the whole filter. A keyword is always a leaf,
|
|
146
|
+
// and the hidden leaves a comment or a run of whitespace contributes
|
|
147
|
+
// are sourced from a terminal rule rather than a `Keyword` — so
|
|
148
|
+
// neither a composite-node check nor a hidden-token check adds
|
|
149
|
+
// anything here.
|
|
150
|
+
if (GrammarAST.isKeyword(cst.grammarSource)) {
|
|
151
|
+
acceptor({ cst, type: SemanticTokenTypes.keyword });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
protected override highlightElement(node: AstNode, acceptor: SemanticTokenAcceptor): void | undefined | 'prune' {
|
|
157
|
+
this.highlightDeclaration(node, acceptor);
|
|
158
|
+
this.highlightReferences(node, acceptor);
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Colour the node's own name, at whichever property the NameProvider reads it from. */
|
|
163
|
+
protected highlightDeclaration(node: AstNode, acceptor: SemanticTokenAcceptor): void {
|
|
164
|
+
const kind = this.getDeclarationKind(node);
|
|
165
|
+
if (kind === undefined) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
const property = this.getNameProperty(node);
|
|
169
|
+
if (property === undefined) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
acceptor({ node, property, ...toAcceptorFields(kind, this.declarationModifier) });
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Colour every cross-reference the node carries, including multi-valued ones. */
|
|
176
|
+
protected highlightReferences(node: AstNode, acceptor: SemanticTokenAcceptor): void {
|
|
177
|
+
for (const info of AstUtils.streamReferences(node)) {
|
|
178
|
+
const kind = this.getReferenceKind(info);
|
|
179
|
+
if (kind === undefined) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
acceptor({ node: info.container, property: info.property, index: info.index, ...toAcceptorFields(kind) });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* The adopter's map: an AST `$type` in, the token kind its declarations and
|
|
188
|
+
* the references pointing at it should render as. `undefined` leaves the
|
|
189
|
+
* type uncoloured.
|
|
190
|
+
*
|
|
191
|
+
* What uncoloured means depends on the host, and this map cannot see which:
|
|
192
|
+
* a host shipping a TextMate grammar keeps that grammar's colour, a host
|
|
193
|
+
* shipping none renders the default foreground. So `undefined` says only
|
|
194
|
+
* "not a name worth a kind of its own" — never "someone else will colour
|
|
195
|
+
* it". Keywords in particular are not left to this map at all; they are
|
|
196
|
+
* {@link HydraniumSemanticTokenProviderOptions.highlightKeywords}, because
|
|
197
|
+
* they have no AST type to key on.
|
|
198
|
+
*/
|
|
199
|
+
protected abstract getTokenKind(type: string): SemanticTokenKind | undefined;
|
|
200
|
+
|
|
201
|
+
/** Kind for `node`'s own declaration. Defaults to {@link getTokenKind} on its `$type`. */
|
|
202
|
+
protected getDeclarationKind(node: AstNode): SemanticTokenKind | undefined {
|
|
203
|
+
return this.getTokenKind(node.$type);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Kind for a cross-reference. Defaults to {@link getTokenKind} on the reference's DECLARED target type. */
|
|
207
|
+
protected getReferenceKind(info: ReferenceInfo): SemanticTokenKind | undefined {
|
|
208
|
+
return this.getTokenKind(this.reflection.getReferenceType(info));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/** Property holding `node`'s name. Defaults to the language's {@link NameProvider}. */
|
|
212
|
+
protected getNameProperty(node: AstNode): string | undefined {
|
|
213
|
+
return this.nameProvider.getNameProperty(node);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
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 Module } from '@hydranium/langium';
|
|
11
|
+
import { type PartialLangiumSharedServices } from '@hydranium/langium/lsp';
|
|
12
|
+
import { LspLogger } from '../langium/diagnostics/lsp-logger.js';
|
|
13
|
+
import { type ServerModuleContext, type ServerSharedServices } from '../langium/module.js';
|
|
14
|
+
import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-handler.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Shared-tier slots contributed by the LSP-textual protocol head. Bound by
|
|
18
|
+
* {@link createLspServerSharedModule}; consumer modules layered after it can
|
|
19
|
+
* override any slot.
|
|
20
|
+
*
|
|
21
|
+
* - {@link LspLogger} replaces the shared tier's `NoopLogger` on the `Logger` slot,
|
|
22
|
+
* so a head composing this module actually emits. It routes through the LSP
|
|
23
|
+
* `window/logMessage` channel once a `Connection` is bound and to `stderr`
|
|
24
|
+
* before that (or in a headless head that never binds one), and its
|
|
25
|
+
* constructor is what applies the `HYDRANIUM_LOG_LEVEL` / `HYDRANIUM_LOG_FILE`
|
|
26
|
+
* env baselines — so binding it here is also what makes `hydranium-cli
|
|
27
|
+
* --log-level` reach the spawned server. Adopters wanting a different sink
|
|
28
|
+
* (an output channel, a structured logger) override the slot after this
|
|
29
|
+
* module.
|
|
30
|
+
*
|
|
31
|
+
* - {@link HydraniumDocumentUpdateHandler} wraps `didChangeWatchedFiles` to
|
|
32
|
+
* suppress echo events for the server's own writes via the shared
|
|
33
|
+
* `SelfSaveRegistry` slot, debounces `didChangeContent`, stamps build
|
|
34
|
+
* reasons through `markNextReason`, and dispatches a rebuild when the last
|
|
35
|
+
* client closes a document.
|
|
36
|
+
* Adopters with their own update-handler subclass should extend
|
|
37
|
+
* `HydraniumDocumentUpdateHandler` (not Langium's
|
|
38
|
+
* `DefaultDocumentUpdateHandler`) to preserve those behaviours.
|
|
39
|
+
*
|
|
40
|
+
* **Why this is a shared slot and not a per-language one.** Langium declares
|
|
41
|
+
* `DocumentUpdateHandler` in `LangiumSharedLSPServices` — there is exactly one
|
|
42
|
+
* per server, and `startLanguageServer` reads it off the shared tree. It is
|
|
43
|
+
* parameterised by the CLIENT PROTOCOL (which LSP notifications arrive), not
|
|
44
|
+
* by the grammar — the rule for which DI scope a service belongs to. Binding
|
|
45
|
+
* it per language is inert: nothing reads a per-language
|
|
46
|
+
* `lsp.DocumentUpdateHandler`, and under a multi-grammar composition a
|
|
47
|
+
* per-language binding would attach N listener sets to the one document store.
|
|
48
|
+
*/
|
|
49
|
+
export interface LspServerAddedSharedServices {
|
|
50
|
+
/* override */ Logger: LspLogger;
|
|
51
|
+
lsp: {
|
|
52
|
+
/* override */ DocumentUpdateHandler: HydraniumDocumentUpdateHandler;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Full shared-service surface visible to consumers that compose this head:
|
|
58
|
+
* `@hydranium/core`'s shared bindings plus the LSP-textual additions. Use as
|
|
59
|
+
* the `T` type parameter for the consumer's own
|
|
60
|
+
* `Module<LspServerSharedServices, ...>` if its overrides depend on any
|
|
61
|
+
* LSP-only shared slot.
|
|
62
|
+
*/
|
|
63
|
+
export type LspServerSharedServices = ServerSharedServices & LspServerAddedSharedServices;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The LSP-textual protocol head's default shared module. Composes on top of
|
|
67
|
+
* `createServerSharedModule` — as a later `inject(...)` argument, or as
|
|
68
|
+
* `sharedModules.extra` when composing through `createIntegrationServices`;
|
|
69
|
+
* the adopter's own shared module goes after it either way.
|
|
70
|
+
*
|
|
71
|
+
* `createServerSharedModule` MUST be merged before this one — the lsp-server
|
|
72
|
+
* head only contributes LSP-textual-specific slots and relies on
|
|
73
|
+
* `@hydranium/core`'s `SelfSaveRegistry` / `TextDocuments` / `DocumentBuilder`
|
|
74
|
+
* bindings being present.
|
|
75
|
+
*
|
|
76
|
+
* Returned as a function (not a constant) so head defaults can read from the
|
|
77
|
+
* construction context, mirroring `createLspServerLanguageModule`.
|
|
78
|
+
*/
|
|
79
|
+
export function createLspServerSharedModule(
|
|
80
|
+
_context: ServerModuleContext
|
|
81
|
+
): Module<LspServerSharedServices, PartialLangiumSharedServices & LspServerAddedSharedServices> {
|
|
82
|
+
return {
|
|
83
|
+
Logger: services => new LspLogger(services),
|
|
84
|
+
lsp: {
|
|
85
|
+
DocumentUpdateHandler: services => new HydraniumDocumentUpdateHandler(services)
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 {
|
|
11
|
+
startLanguageServer as startLangiumLanguageServer,
|
|
12
|
+
type LangiumSharedServices,
|
|
13
|
+
type ServiceRequirements
|
|
14
|
+
} from '@hydranium/langium/lsp';
|
|
15
|
+
import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-handler.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Fail the LSP head's start when its shared module was never composed.
|
|
19
|
+
*
|
|
20
|
+
* **The composition mistake this catches.** `lsp.DocumentUpdateHandler` is a
|
|
21
|
+
* SHARED slot, so the head binds it in `createLspServerSharedModule` — a
|
|
22
|
+
* separate module from `createLspServerLanguageModule`. An adopter who adds
|
|
23
|
+
* only the language module gets a server that boots, links and serves
|
|
24
|
+
* completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: echo
|
|
25
|
+
* suppression for the server's own writes, the `didChangeContent` debounce,
|
|
26
|
+
* `markNextReason` stamping and the last-client-close rebuild are all absent,
|
|
27
|
+
* with nothing in the log to say so.
|
|
28
|
+
*
|
|
29
|
+
* The type system does not catch it. `createIntegrationServices` returns
|
|
30
|
+
* `inject(...) as unknown as TShared`, so widening `TShared` with
|
|
31
|
+
* `LspServerAddedSharedServices` while omitting the module type-checks and
|
|
32
|
+
* leaves the slot holding Langium's default.
|
|
33
|
+
*
|
|
34
|
+
* Checked with `instanceof`, so an adopter subclass of
|
|
35
|
+
* {@link HydraniumDocumentUpdateHandler} — the documented way to extend the
|
|
36
|
+
* handler — passes.
|
|
37
|
+
*
|
|
38
|
+
* Skips silently when no connection is bound: that is a more fundamental
|
|
39
|
+
* misconfiguration, and Langium reports it immediately afterwards in its own
|
|
40
|
+
* vocabulary. Reporting it here as a missing module would misname it.
|
|
41
|
+
*/
|
|
42
|
+
export function assertLspHeadComposed(services: LangiumSharedServices): void {
|
|
43
|
+
if (!services.lsp?.Connection) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const handler = services.lsp.DocumentUpdateHandler;
|
|
47
|
+
if (!(handler instanceof HydraniumDocumentUpdateHandler)) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
'[hydranium] the LSP head is starting without its shared module: `lsp.DocumentUpdateHandler` holds ' +
|
|
50
|
+
`'${handler?.constructor?.name ?? 'nothing'}' rather than a HydraniumDocumentUpdateHandler. Echo suppression for ` +
|
|
51
|
+
"the server's own writes, the didChangeContent debounce, build-reason stamping and the last-client-close rebuild " +
|
|
52
|
+
'are all inert in that state. Add `createLspServerSharedModule(context)` to the shared tier — as ' +
|
|
53
|
+
'`sharedModules.extra` when composing through `createIntegrationServices`, or as an `inject(...)` argument ' +
|
|
54
|
+
'after `createServerSharedModule(context)`.'
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The framework's LSP server entry point: {@link assertLspHeadComposed}, then
|
|
61
|
+
* Langium's `startLanguageServer` unchanged. Signature-compatible with
|
|
62
|
+
* Langium's, so it is a drop-in for adopters importing from
|
|
63
|
+
* `@hydranium/core/lsp`.
|
|
64
|
+
*/
|
|
65
|
+
export function startLanguageServer(services: LangiumSharedServices, serviceRequirements: Partial<ServiceRequirements> = {}): void {
|
|
66
|
+
assertLspHeadComposed(services);
|
|
67
|
+
startLangiumLanguageServer(services, serviceRequirements);
|
|
68
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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 { AstUtils } from '@hydranium/langium';
|
|
11
|
+
import { type ServerSharedServicesMinimal } from '../langium/shared-services.js';
|
|
12
|
+
import { buildWorkspaceProgrammatically } from '../langium/workspace/initialize-workspace.js';
|
|
13
|
+
|
|
14
|
+
/** Options for {@link collectAstGroundTruth}. */
|
|
15
|
+
export interface AstGroundTruthOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Create the language's shared services in-process. This is the only
|
|
18
|
+
* language-specific input — a head passes its own `create<Lang>Services(fileSystem)`.
|
|
19
|
+
*/
|
|
20
|
+
createServices: () => { shared: ServerSharedServicesMinimal };
|
|
21
|
+
/** Workspace root (filesystem path or file URI) to build. */
|
|
22
|
+
workspace: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Live-model `$type` tally — the ground truth an offline heap snapshot is
|
|
27
|
+
* validated against (the analyzer's `--validate <gt.json>` input). The shape is
|
|
28
|
+
* deliberately the JSON contract the analyzer reads: a per-`$type` count plus the
|
|
29
|
+
* document and node totals used to assert the snapshot was captured on the same
|
|
30
|
+
* workspace.
|
|
31
|
+
*/
|
|
32
|
+
export interface AstGroundTruth {
|
|
33
|
+
/** Number of `LangiumDocument`s in the built workspace. */
|
|
34
|
+
documents: number;
|
|
35
|
+
/** Total AST nodes across all documents (root included). */
|
|
36
|
+
totalAstNodes: number;
|
|
37
|
+
/** Count of AST nodes per `$type`. */
|
|
38
|
+
byType: Record<string, number>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Headless live-model `$type` census — the browser-/socket-free counterpart to
|
|
43
|
+
* walking the AST in the running server. Boots a head's Langium services
|
|
44
|
+
* in-process via {@link AstGroundTruthOptions.createServices}, builds the
|
|
45
|
+
* workspace, then streams every AST node and tallies it by `$type`.
|
|
46
|
+
*
|
|
47
|
+
* The result is the ground truth the offline heap analyzer validates a snapshot's
|
|
48
|
+
* `$type` classification against (`hydranium-cli analyze-heap --validate`): the
|
|
49
|
+
* snapshot is captured on a workspace, this census is run on the *same* workspace,
|
|
50
|
+
* and matching counts confirm the classifier read the heap correctly. Pure
|
|
51
|
+
* framework code: the only language-specific input is the service factory.
|
|
52
|
+
*/
|
|
53
|
+
export async function collectAstGroundTruth(options: AstGroundTruthOptions): Promise<AstGroundTruth> {
|
|
54
|
+
const { shared } = options.createServices();
|
|
55
|
+
await buildWorkspaceProgrammatically(shared, options.workspace);
|
|
56
|
+
return tallyAstGroundTruth(shared);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Tally the `$type` census over an ALREADY-built services tree — the pure core of
|
|
61
|
+
* {@link collectAstGroundTruth}, split out so a harness that has already built the
|
|
62
|
+
* workspace (e.g. `measureModelMemory`) can fold the ground truth into its bundle
|
|
63
|
+
* without a second build.
|
|
64
|
+
*/
|
|
65
|
+
export function tallyAstGroundTruth(shared: ServerSharedServicesMinimal): AstGroundTruth {
|
|
66
|
+
const documents = shared.workspace.LangiumDocuments.all.toArray();
|
|
67
|
+
const byType: Record<string, number> = {};
|
|
68
|
+
let totalAstNodes = 0;
|
|
69
|
+
for (const document of documents) {
|
|
70
|
+
for (const node of AstUtils.streamAst(document.parseResult.value)) {
|
|
71
|
+
byType[node.$type] = (byType[node.$type] ?? 0) + 1;
|
|
72
|
+
totalAstNodes += 1;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { documents: documents.length, totalAstNodes, byType };
|
|
76
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/********************************************************************************
|
|
2
|
+
* Copyright (c) 2023-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 { monitorEventLoopDelay } from 'node:perf_hooks';
|
|
11
|
+
import { formatMemory } from '../langium/diagnostics/logger.js';
|
|
12
|
+
import { type ServerSharedServicesMinimal } from '../langium/shared-services.js';
|
|
13
|
+
import { formatServerState } from './server-state-snapshot.js';
|
|
14
|
+
|
|
15
|
+
export const DEFAULT_EVENT_LOOP_THRESHOLD_MS = 100;
|
|
16
|
+
export const DEFAULT_EVENT_LOOP_INTERVAL_MS = 1000;
|
|
17
|
+
export const DEFAULT_EVENT_LOOP_SNAPSHOT_ABOVE_MS = 500;
|
|
18
|
+
|
|
19
|
+
export interface EventLoopMonitorOptions {
|
|
20
|
+
/** Stalls >= this within the sample window log a warning. */
|
|
21
|
+
thresholdMs?: number;
|
|
22
|
+
/** Sample window in ms. */
|
|
23
|
+
intervalMs?: number;
|
|
24
|
+
/** Stalls >= this trigger {@link onStallSnapshot} in addition to the warning. */
|
|
25
|
+
snapshotAboveMs?: number;
|
|
26
|
+
/** Log-name label derived from `shared.Logger`. Default `'EventLoop'`. */
|
|
27
|
+
logName?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Fires after a stall >= {@link snapshotAboveMs}; the on-demand command rides
|
|
30
|
+
* the same path. Defaults to a full {@link formatServerState} — process /
|
|
31
|
+
* heap state **plus** per-document detail (`shared.workspace.LangiumDocuments`),
|
|
32
|
+
* logged under the `'Process'` component (matching the on-demand dump). Pass
|
|
33
|
+
* a custom callback to change it, or a no-op to suppress it.
|
|
34
|
+
*/
|
|
35
|
+
onStallSnapshot?: (maxMs: number) => void;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Logs a warning when the event loop is blocked longer than the threshold.
|
|
40
|
+
*
|
|
41
|
+
* Follows the framework `(services, options)` shape: derives its own
|
|
42
|
+
* `'EventLoop'` component logger from `shared.Logger`, and the default
|
|
43
|
+
* stall snapshot reaches `shared.workspace.LangiumDocuments` for per-document
|
|
44
|
+
* detail.
|
|
45
|
+
*/
|
|
46
|
+
export function startEventLoopMonitor(shared: ServerSharedServicesMinimal, options: EventLoopMonitorOptions = {}): () => void {
|
|
47
|
+
const logger = shared.Logger.for(options.logName ?? 'EventLoop');
|
|
48
|
+
const thresholdMs = options.thresholdMs ?? DEFAULT_EVENT_LOOP_THRESHOLD_MS;
|
|
49
|
+
const intervalMs = options.intervalMs ?? DEFAULT_EVENT_LOOP_INTERVAL_MS;
|
|
50
|
+
const snapshotAboveMs = options.snapshotAboveMs ?? DEFAULT_EVENT_LOOP_SNAPSHOT_ABOVE_MS;
|
|
51
|
+
const onStallSnapshot =
|
|
52
|
+
options.onStallSnapshot ??
|
|
53
|
+
((maxMs: number) =>
|
|
54
|
+
shared.Logger.for('Process').info(
|
|
55
|
+
formatServerState(shared.workspace.LangiumDocuments, `auto: event-loop stall ${Math.round(maxMs)}ms`)
|
|
56
|
+
));
|
|
57
|
+
const histogram = monitorEventLoopDelay({ resolution: 10 });
|
|
58
|
+
histogram.enable();
|
|
59
|
+
const interval = setInterval(() => {
|
|
60
|
+
const maxMs = histogram.max / 1e6;
|
|
61
|
+
if (maxMs >= thresholdMs) {
|
|
62
|
+
const p99Ms = histogram.percentile(99) / 1e6;
|
|
63
|
+
const meanMs = histogram.mean / 1e6;
|
|
64
|
+
// Always include heap/rss: stalls are the moment to correlate with memory pressure.
|
|
65
|
+
logger.warn(
|
|
66
|
+
`Event-loop stall up to ${Math.round(maxMs)}ms ` +
|
|
67
|
+
`in last ${intervalMs}ms ` +
|
|
68
|
+
`(p99 ${Math.round(p99Ms)}ms, ` +
|
|
69
|
+
`mean ${meanMs.toFixed(1)}ms, ` +
|
|
70
|
+
`${formatMemory()})`
|
|
71
|
+
);
|
|
72
|
+
if (maxMs >= snapshotAboveMs) {
|
|
73
|
+
// Defensive: a snapshot failure must not silence subsequent stall warnings.
|
|
74
|
+
try {
|
|
75
|
+
onStallSnapshot(maxMs);
|
|
76
|
+
} catch (error) {
|
|
77
|
+
logger.warn(`Stall snapshot failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
histogram.reset();
|
|
82
|
+
}, intervalMs);
|
|
83
|
+
// Do not keep the process alive solely for the monitor.
|
|
84
|
+
interval.unref?.();
|
|
85
|
+
return () => {
|
|
86
|
+
clearInterval(interval);
|
|
87
|
+
histogram.disable();
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
// Server-only entry (`@hydranium/core/node`). Everything reachable from here may
|
|
11
|
+
// pull `node:*`; the portable `.` barrel must NOT. Anything exported here is
|
|
12
|
+
// "server-only" by contract — adopters building for the browser import `.` only.
|
|
13
|
+
//
|
|
14
|
+
// Node hosts get the log file-tee for free: importing this entry installs the
|
|
15
|
+
// `node:fs`-backed sink (see `installNodeLogFileSink`) at module load, before
|
|
16
|
+
// the first logger is constructed. The function is re-exported for explicit
|
|
17
|
+
// control / tests.
|
|
18
|
+
// Node hosts also get workspace-write-lock reentrancy detection for free, by the
|
|
19
|
+
// same mechanism and for the same reason: the check needs `node:async_hooks`, so
|
|
20
|
+
// the neutral tree can only declare the seam.
|
|
21
|
+
import { installNodeLogFileSink } from './log-file-sink.js';
|
|
22
|
+
import { installNodeWriteLockScope } from './write-lock-scope-node.js';
|
|
23
|
+
|
|
24
|
+
export * from './node-file-system-provider.js';
|
|
25
|
+
export * from './log-file-sink.js';
|
|
26
|
+
export * from './write-lock-scope-node.js';
|
|
27
|
+
export * from './log-preamble-node.js';
|
|
28
|
+
export * from './server-diagnostics.js';
|
|
29
|
+
|
|
30
|
+
// Node-only headless tools, diagnostics and launchers — pure `node:*` modules
|
|
31
|
+
// that physically live under `src/node/` (the server-only tree). The real-path
|
|
32
|
+
// document-identity policy is deliberately NOT among them: the `realpath`
|
|
33
|
+
// syscall is delegated to the Node `FileSystemProvider`, which leaves
|
|
34
|
+
// `RealpathDocumentUriPolicy` browser-neutral, so it ships from the portable
|
|
35
|
+
// entry alongside the default policy.
|
|
36
|
+
export * from './ast-ground-truth.js';
|
|
37
|
+
export * from './event-loop-monitor.js';
|
|
38
|
+
export * from './latency-from-env.js';
|
|
39
|
+
export * from './measure-memory.js';
|
|
40
|
+
export * from './memory-monitor.js';
|
|
41
|
+
export * from './lint-grammar.js';
|
|
42
|
+
export * from './process-memory.js';
|
|
43
|
+
export * from './profile-capture.js';
|
|
44
|
+
export * from './profile-digest.js';
|
|
45
|
+
export * from './profiling-run.js';
|
|
46
|
+
export * from './reflect-grammar.js';
|
|
47
|
+
export * from './server-state-snapshot.js';
|
|
48
|
+
export * from './socket-launcher.js';
|
|
49
|
+
export * from './stdio-launcher.js';
|
|
50
|
+
export * from './validate-workspace.js';
|
|
51
|
+
|
|
52
|
+
installNodeLogFileSink();
|
|
53
|
+
installNodeWriteLockScope();
|
|
@@ -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
|
+
import { type Clock, LatencyCollector } from '@hydranium/protocol';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Env flag that installs the per-method latency seam. Its presence (any
|
|
14
|
+
* non-empty value) is the switch; unset means {@link latencyFromEnv} returns
|
|
15
|
+
* `undefined` and the head never wires the collector — so the RPC binder, the
|
|
16
|
+
* data-server and the LSP decorator all stay on their zero-cost paths.
|
|
17
|
+
*
|
|
18
|
+
* The {@link LatencyCollector} keeps every sample for exact percentiles, sized
|
|
19
|
+
* for a bounded diagnostics window rather than always-on production telemetry;
|
|
20
|
+
* gating it behind an explicit flag keeps a long-lived head from accumulating
|
|
21
|
+
* samples it will never read. Mirrors `HYDRANIUM_PROFILE_E2E`.
|
|
22
|
+
*/
|
|
23
|
+
export const DEFAULT_LATENCY_ENV = 'HYDRANIUM_LATENCY';
|
|
24
|
+
|
|
25
|
+
/** True when the latency env flag is set to a non-empty value. */
|
|
26
|
+
export function isLatencyEnabled(): boolean {
|
|
27
|
+
return !!process.env[DEFAULT_LATENCY_ENV];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A {@link LatencyCollector} when {@link DEFAULT_LATENCY_ENV} is set, otherwise
|
|
32
|
+
* `undefined`. Heads pass the result straight to `instrumentLspConnection`, the
|
|
33
|
+
* `DataServer` `latency` option and the RPC binder; all three treat `undefined`
|
|
34
|
+
* as "seam off", so this single factory is the one place a head decides whether
|
|
35
|
+
* timing runs. `clock` is forwarded to the collector so tests stay deterministic.
|
|
36
|
+
*/
|
|
37
|
+
export function latencyFromEnv(clock?: Clock): LatencyCollector | undefined {
|
|
38
|
+
return isLatencyEnabled() ? new LatencyCollector(clock) : undefined;
|
|
39
|
+
}
|