@hydranium/core 1.0.0-next.28 → 1.0.0-next.281
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/README.md +64 -82
- package/lib/documents/ast-document-manager.d.ts +252 -122
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +290 -130
- package/lib/documents/ast-document-manager.js.map +1 -1
- package/lib/documents/client-ids.d.ts +5 -19
- package/lib/documents/client-ids.d.ts.map +1 -1
- package/lib/documents/client-ids.js +5 -19
- package/lib/documents/client-ids.js.map +1 -1
- package/lib/documents/client-session-errors.d.ts +15 -0
- package/lib/documents/client-session-errors.d.ts.map +1 -0
- package/lib/documents/client-session-errors.js +15 -0
- package/lib/documents/client-session-errors.js.map +1 -0
- package/lib/documents/client-session-registry.d.ts +146 -0
- package/lib/documents/client-session-registry.d.ts.map +1 -0
- package/lib/documents/client-session-registry.js +207 -0
- package/lib/documents/client-session-registry.js.map +1 -0
- package/lib/documents/dirty-state-tracker.d.ts +101 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +85 -0
- package/lib/documents/dirty-state-tracker.js.map +1 -0
- package/lib/documents/document-release-handler.d.ts +204 -0
- package/lib/documents/document-release-handler.d.ts.map +1 -0
- package/lib/documents/document-release-handler.js +317 -0
- package/lib/documents/document-release-handler.js.map +1 -0
- package/lib/documents/document-release-scheduler.d.ts +67 -0
- package/lib/documents/document-release-scheduler.d.ts.map +1 -0
- package/lib/documents/document-release-scheduler.js +80 -0
- package/lib/documents/document-release-scheduler.js.map +1 -0
- package/lib/documents/file-system-task-queue.d.ts +49 -0
- package/lib/documents/file-system-task-queue.d.ts.map +1 -0
- package/lib/documents/file-system-task-queue.js +34 -0
- package/lib/documents/file-system-task-queue.js.map +1 -0
- package/lib/documents/hydranium-text-documents.d.ts +415 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +849 -483
- package/lib/documents/hydranium-text-documents.js.map +1 -1
- package/lib/documents/index.d.ts +10 -2
- package/lib/documents/index.d.ts.map +1 -1
- package/lib/documents/index.js +10 -2
- package/lib/documents/index.js.map +1 -1
- package/lib/documents/language-client-shadow.d.ts +218 -0
- package/lib/documents/language-client-shadow.d.ts.map +1 -0
- package/lib/documents/language-client-shadow.js +284 -0
- package/lib/documents/language-client-shadow.js.map +1 -0
- package/lib/documents/model-ledger.d.ts +47 -0
- package/lib/documents/model-ledger.d.ts.map +1 -0
- package/lib/documents/model-ledger.js +30 -0
- package/lib/documents/model-ledger.js.map +1 -0
- package/lib/documents/text-ledger.d.ts +64 -0
- package/lib/documents/text-ledger.d.ts.map +1 -0
- package/lib/documents/text-ledger.js +63 -0
- package/lib/documents/text-ledger.js.map +1 -0
- package/lib/documents/version-sync-service.d.ts +138 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +173 -0
- package/lib/documents/version-sync-service.js.map +1 -0
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +8 -0
- package/lib/index.js.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.d.ts +3 -0
- package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.d.ts +32 -9
- package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
- package/lib/langium/ast-extension/ast-node-builder.js +60 -22
- package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
- package/lib/langium/bootstrap.d.ts +49 -36
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +91 -45
- package/lib/langium/bootstrap.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
- package/lib/langium/build-phase-pass/build-phase-pass.d.ts +1 -1
- package/lib/langium/composite-ast-reflection.d.ts +46 -0
- package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
- package/lib/langium/composite-ast-reflection.js +97 -0
- package/lib/langium/composite-ast-reflection.js.map +1 -0
- package/lib/langium/config/configuration-provider.d.ts +81 -0
- package/lib/langium/config/configuration-provider.d.ts.map +1 -0
- package/lib/langium/config/configuration-provider.js +112 -0
- package/lib/langium/config/configuration-provider.js.map +1 -0
- package/lib/langium/config/index.d.ts +1 -0
- package/lib/langium/config/index.d.ts.map +1 -1
- package/lib/langium/config/index.js +1 -0
- package/lib/langium/config/index.js.map +1 -1
- package/lib/langium/config/settings.js.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
- package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
- package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
- package/lib/langium/diagnostics/log-preamble.js +1 -1
- package/lib/langium/diagnostics/log-preamble.js.map +1 -1
- package/lib/langium/diagnostics/logger.d.ts +10 -3
- package/lib/langium/diagnostics/logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/logger.js +12 -5
- package/lib/langium/diagnostics/logger.js.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
- package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
- package/lib/langium/diagnostics/lsp-logger.js +58 -17
- package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
- package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
- package/lib/langium/diagnostics/server-tracer.js.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
- package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
- package/lib/langium/document-builder/build-pipeline-integration.js +32 -5
- package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
- package/lib/langium/document-builder/build-session.d.ts +6 -5
- package/lib/langium/document-builder/build-session.d.ts.map +1 -1
- package/lib/langium/document-builder/build-session.js +5 -5
- package/lib/langium/document-builder/build-session.js.map +1 -1
- package/lib/langium/document-builder/document-builder.d.ts +309 -35
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +511 -75
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
- package/lib/langium/documentation/comment-provider.js.map +1 -1
- package/lib/langium/integration-services.d.ts +40 -24
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +7 -4
- package/lib/langium/integration-services.js.map +1 -1
- package/lib/langium/integrity/integrity-rule.d.ts +16 -8
- package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-rule.js.map +1 -1
- package/lib/langium/integrity/integrity-service.d.ts +83 -27
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +273 -63
- package/lib/langium/integrity/integrity-service.js.map +1 -1
- package/lib/langium/keys/containment.d.ts +64 -0
- package/lib/langium/keys/containment.d.ts.map +1 -0
- package/lib/langium/keys/containment.js +53 -0
- package/lib/langium/keys/containment.js.map +1 -0
- package/lib/langium/keys/index.d.ts +1 -0
- package/lib/langium/keys/index.d.ts.map +1 -1
- package/lib/langium/keys/index.js +1 -0
- package/lib/langium/keys/index.js.map +1 -1
- package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
- package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/name-based-key-provider.js +4 -0
- package/lib/langium/keys/name-based-key-provider.js.map +1 -1
- package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
- package/lib/langium/keys/positional-key-provider.js.map +1 -1
- package/lib/langium/labeling/label-provider.d.ts.map +1 -1
- package/lib/langium/labeling/label-provider.js.map +1 -1
- package/lib/langium/language-module.d.ts +30 -5
- package/lib/langium/language-module.d.ts.map +1 -1
- package/lib/langium/language-module.js +18 -4
- package/lib/langium/language-module.js.map +1 -1
- package/lib/langium/model-service/client-session.d.ts +372 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +446 -0
- package/lib/langium/model-service/client-session.js.map +1 -0
- package/lib/langium/model-service/index.d.ts +2 -0
- package/lib/langium/model-service/index.d.ts.map +1 -1
- package/lib/langium/model-service/index.js +2 -0
- package/lib/langium/model-service/index.js.map +1 -1
- package/lib/langium/model-service/model-events.d.ts +66 -0
- package/lib/langium/model-service/model-events.d.ts.map +1 -0
- package/lib/langium/model-service/model-events.js +10 -0
- package/lib/langium/model-service/model-events.js.map +1 -0
- package/lib/langium/model-service/model-service.d.ts +440 -282
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +542 -446
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +158 -37
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -36
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +27 -6
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +4 -3
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -1
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +22 -0
- package/lib/langium/naming/name-separator-validation.js.map +1 -1
- package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
- package/lib/langium/project/abstract-project-manager.js +13 -6
- package/lib/langium/project/abstract-project-manager.js.map +1 -1
- package/lib/langium/project/project-change-event.d.ts +2 -2
- package/lib/langium/project/single-project-manager.d.ts.map +1 -1
- package/lib/langium/project/single-project-manager.js.map +1 -1
- package/lib/langium/residency/cst-residency-service.d.ts +35 -12
- package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
- package/lib/langium/residency/cst-residency-service.js +23 -57
- package/lib/langium/residency/cst-residency-service.js.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
- package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
- package/lib/langium/scope/fallback-scope.d.ts +27 -0
- package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
- package/lib/langium/scope/fallback-scope.js +35 -0
- package/lib/langium/scope/fallback-scope.js.map +1 -0
- package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
- package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js +38 -39
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +61 -24
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +74 -35
- package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
- package/lib/langium/scope/index.d.ts +1 -0
- package/lib/langium/scope/index.d.ts.map +1 -1
- package/lib/langium/scope/index.js +1 -0
- package/lib/langium/scope/index.js.map +1 -1
- package/lib/langium/scope/reference-builder.d.ts.map +1 -1
- package/lib/langium/scope/reference-builder.js.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
- package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js +3 -2
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts +41 -37
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js +57 -29
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
- package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
- package/lib/langium/scope/scoped-ast-node-description.js +1 -3
- package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +54 -30
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/serialization/json-serializer.d.ts +8 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js +13 -3
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/serializer.d.ts +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts +4 -0
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/yaml-serializer.js +4 -0
- package/lib/langium/serialization/yaml-serializer.js.map +1 -1
- package/lib/langium/service-registry.d.ts +29 -1
- package/lib/langium/service-registry.d.ts.map +1 -1
- package/lib/langium/service-registry.js +37 -0
- package/lib/langium/service-registry.js.map +1 -1
- package/lib/langium/shared-services.d.ts +23 -6
- package/lib/langium/shared-services.d.ts.map +1 -1
- package/lib/langium/shared-services.js.map +1 -1
- package/lib/langium/single-langium-copy.d.ts +22 -0
- package/lib/langium/single-langium-copy.d.ts.map +1 -0
- package/lib/langium/single-langium-copy.js +36 -0
- package/lib/langium/single-langium-copy.js.map +1 -0
- package/lib/langium/transfer/transfer-encoder.d.ts +84 -35
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +34 -23
- package/lib/langium/transfer/transfer-encoder.js.map +1 -1
- package/lib/langium/trivia/comment-preserver.d.ts +423 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/comment-preserver.js +906 -0
- package/lib/langium/trivia/comment-preserver.js.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts +43 -0
- package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/document-ending-preserver.js +48 -0
- package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
- package/lib/langium/trivia/index.d.ts +14 -0
- package/lib/langium/trivia/index.d.ts.map +1 -0
- package/lib/langium/trivia/index.js +14 -0
- package/lib/langium/trivia/index.js.map +1 -0
- package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
- package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-contribution.js +10 -0
- package/lib/langium/trivia/trivia-contribution.js.map +1 -0
- package/lib/langium/trivia/trivia-preserver.d.ts +50 -0
- package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-preserver.js +10 -0
- package/lib/langium/trivia/trivia-preserver.js.map +1 -0
- package/lib/langium/trivia/trivia-service.d.ts +70 -0
- package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
- package/lib/langium/trivia/trivia-service.js +56 -0
- package/lib/langium/trivia/trivia-service.js.map +1 -0
- package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
- package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
- package/lib/langium/validation/document-validator.d.ts +280 -9
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +453 -8
- package/lib/langium/validation/document-validator.js.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
- package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
- package/lib/langium/validation/validation-contribution-collector.js +1 -1
- package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
- package/lib/langium/workspace/document-uri-policy.d.ts +15 -10
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +7 -5
- package/lib/langium/workspace/document-uri-policy.js.map +1 -1
- package/lib/langium/workspace/file-not-found.d.ts +23 -0
- package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
- package/lib/langium/workspace/file-not-found.js +31 -0
- package/lib/langium/workspace/file-not-found.js.map +1 -0
- package/lib/langium/workspace/file-system-provider.d.ts +154 -8
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +102 -13
- package/lib/langium/workspace/file-system-provider.js.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +56 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-langium-document-factory.js +79 -0
- package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
- package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
- package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts +109 -9
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +192 -12
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
- package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/index-manager.d.ts.map +1 -1
- package/lib/langium/workspace/index-manager.js.map +1 -1
- package/lib/langium/workspace/index.d.ts +1 -0
- package/lib/langium/workspace/index.d.ts.map +1 -1
- package/lib/langium/workspace/index.js +1 -0
- package/lib/langium/workspace/index.js.map +1 -1
- package/lib/langium/workspace/initialize-workspace.d.ts +31 -2
- package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
- package/lib/langium/workspace/initialize-workspace.js +13 -5
- package/lib/langium/workspace/initialize-workspace.js.map +1 -1
- package/lib/langium/workspace/langium-documents.d.ts +37 -4
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +49 -4
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +7 -9
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +14 -13
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/langium/workspace/self-save-registry.d.ts +84 -0
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +33 -22
- package/lib/langium/workspace/self-save-registry.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +49 -15
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +81 -18
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +15 -5
- package/lib/langium/workspace/write-lock-scope.js.map +1 -1
- package/lib/launcher/integrated-server.d.ts +3 -1
- package/lib/launcher/integrated-server.d.ts.map +1 -1
- package/lib/locale/index.d.ts +10 -0
- package/lib/locale/index.d.ts.map +1 -0
- package/lib/locale/index.js +10 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/server-locale.d.ts +73 -0
- package/lib/locale/server-locale.d.ts.map +1 -0
- package/lib/locale/server-locale.js +61 -0
- package/lib/locale/server-locale.js.map +1 -0
- package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
- package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
- package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
- package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
- package/lib/lsp/connection-features.d.ts +23 -0
- package/lib/lsp/connection-features.d.ts.map +1 -0
- package/lib/lsp/connection-features.js +60 -0
- package/lib/lsp/connection-features.js.map +1 -0
- package/lib/lsp/diagnostics-connection.d.ts +27 -0
- package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
- package/lib/lsp/diagnostics-connection.js +53 -0
- package/lib/lsp/diagnostics-connection.js.map +1 -0
- package/lib/lsp/hydranium-document-update-handler.d.ts +106 -82
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +182 -102
- package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
- package/lib/lsp/index.d.ts +3 -1
- package/lib/lsp/index.d.ts.map +1 -1
- package/lib/lsp/index.js +3 -1
- package/lib/lsp/index.js.map +1 -1
- package/lib/lsp/lsp-latency.d.ts +39 -0
- package/lib/lsp/lsp-latency.d.ts.map +1 -0
- package/lib/lsp/lsp-latency.js +58 -0
- package/lib/lsp/lsp-latency.js.map +1 -0
- package/lib/lsp/semantic-token-provider.d.ts +34 -1
- package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
- package/lib/lsp/semantic-token-provider.js +55 -8
- package/lib/lsp/semantic-token-provider.js.map +1 -1
- package/lib/lsp/shared-module.d.ts +4 -8
- package/lib/lsp/shared-module.d.ts.map +1 -1
- package/lib/lsp/shared-module.js.map +1 -1
- package/lib/lsp/start-language-server.d.ts +8 -7
- package/lib/lsp/start-language-server.d.ts.map +1 -1
- package/lib/lsp/start-language-server.js +13 -7
- package/lib/lsp/start-language-server.js.map +1 -1
- package/lib/messages/carriers.d.ts +18 -12
- package/lib/messages/carriers.d.ts.map +1 -1
- package/lib/messages/carriers.js +22 -13
- package/lib/messages/carriers.js.map +1 -1
- package/lib/messages/index.d.ts +4 -1
- package/lib/messages/index.d.ts.map +1 -1
- package/lib/messages/index.js +4 -1
- package/lib/messages/index.js.map +1 -1
- package/lib/messages/renderer.d.ts +142 -0
- package/lib/messages/renderer.d.ts.map +1 -0
- package/lib/messages/renderer.js +165 -0
- package/lib/messages/renderer.js.map +1 -0
- package/lib/node/event-loop-monitor.d.ts.map +1 -1
- package/lib/node/event-loop-monitor.js +2 -1
- package/lib/node/event-loop-monitor.js.map +1 -1
- package/lib/node/heap-ceiling.d.ts +61 -0
- package/lib/node/heap-ceiling.d.ts.map +1 -0
- package/lib/node/heap-ceiling.js +72 -0
- package/lib/node/heap-ceiling.js.map +1 -0
- package/lib/node/index.d.ts +1 -1
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -1
- package/lib/node/index.js.map +1 -1
- package/lib/node/latency-from-env.d.ts +1 -1
- package/lib/node/latency-from-env.js +1 -1
- package/lib/node/lint-grammar.js.map +1 -1
- package/lib/node/log-preamble-node.d.ts +5 -3
- package/lib/node/log-preamble-node.d.ts.map +1 -1
- package/lib/node/log-preamble-node.js +13 -10
- package/lib/node/log-preamble-node.js.map +1 -1
- package/lib/node/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +5 -4
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.d.ts +2 -2
- package/lib/node/memory-monitor.d.ts.map +1 -1
- package/lib/node/memory-monitor.js +9 -10
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +60 -9
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +162 -52
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +12 -4
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js +8 -6
- package/lib/node/profile-capture.js.map +1 -1
- package/lib/node/profile-digest.js.map +1 -1
- package/lib/node/profiling-run.d.ts +13 -3
- package/lib/node/profiling-run.d.ts.map +1 -1
- package/lib/node/profiling-run.js +17 -8
- package/lib/node/profiling-run.js.map +1 -1
- package/lib/node/rename-over-open-readers.d.ts +61 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +80 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- package/lib/node/server-diagnostics.js +1 -1
- package/lib/node/server-diagnostics.js.map +1 -1
- package/lib/node/server-state-snapshot.js +4 -4
- package/lib/node/server-state-snapshot.js.map +1 -1
- package/lib/node/socket-launcher.d.ts +20 -4
- package/lib/node/socket-launcher.d.ts.map +1 -1
- package/lib/node/socket-launcher.js +8 -7
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/stdio-launcher.d.ts +10 -10
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +17 -9
- package/lib/node/stdio-launcher.js.map +1 -1
- package/lib/testing/document-uri-policy-conformance.js +1 -1
- package/lib/testing/document-uri-policy-conformance.js.map +1 -1
- package/lib/testing/fake-description.js.map +1 -1
- package/lib/testing/fake-document.d.ts +16 -4
- package/lib/testing/fake-document.d.ts.map +1 -1
- package/lib/testing/fake-document.js +18 -3
- package/lib/testing/fake-document.js.map +1 -1
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/index.d.ts.map +1 -1
- package/lib/testing/index.js +2 -1
- package/lib/testing/index.js.map +1 -1
- package/lib/testing/langium-test-helpers.d.ts.map +1 -1
- package/lib/testing/langium-test-helpers.js +1 -0
- package/lib/testing/langium-test-helpers.js.map +1 -1
- package/lib/testing/make-noop-language-services.js.map +1 -1
- package/lib/testing/make-noop-shared-services.d.ts +14 -0
- package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
- package/lib/testing/make-noop-shared-services.js +28 -2
- package/lib/testing/make-noop-shared-services.js.map +1 -1
- package/lib/testing/make-test-services.d.ts +72 -14
- package/lib/testing/make-test-services.d.ts.map +1 -1
- package/lib/testing/make-test-services.js +42 -10
- package/lib/testing/make-test-services.js.map +1 -1
- package/lib/testing/make-test-tracer.d.ts +12 -0
- package/lib/testing/make-test-tracer.d.ts.map +1 -1
- package/lib/testing/make-test-tracer.js +13 -0
- package/lib/testing/make-test-tracer.js.map +1 -1
- package/lib/testing/node/applied-edit-capture.d.ts +29 -0
- package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
- package/lib/testing/node/applied-edit-capture.js +115 -0
- package/lib/testing/node/applied-edit-capture.js.map +1 -0
- package/lib/testing/node/golden-corpus.js.map +1 -1
- package/lib/testing/node/index.d.ts +1 -0
- package/lib/testing/node/index.d.ts.map +1 -1
- package/lib/testing/node/index.js +1 -0
- package/lib/testing/node/index.js.map +1 -1
- package/lib/testing/node/lsp-harness.d.ts.map +1 -1
- package/lib/testing/node/lsp-harness.js +2 -0
- package/lib/testing/node/lsp-harness.js.map +1 -1
- package/lib/testing/node/lsp-server-connection.d.ts +12 -4
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +45 -106
- package/lib/testing/node/lsp-server-connection.js.map +1 -1
- package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
- package/lib/testing/node/scratch-workspace.js +10 -5
- package/lib/testing/node/scratch-workspace.js.map +1 -1
- package/lib/testing/node/spawned-server.d.ts +30 -1
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +39 -2
- package/lib/testing/node/spawned-server.js.map +1 -1
- package/lib/testing/node/unhandled-rejections.d.ts +20 -0
- package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
- package/lib/testing/node/unhandled-rejections.js +32 -0
- package/lib/testing/node/unhandled-rejections.js.map +1 -0
- package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
- package/lib/testing/playwright/e2e-profiling.js.map +1 -1
- package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
- package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
- package/lib/testing/playwright/flaky-network-proxy.js +164 -0
- package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
- package/lib/testing/playwright/index.d.ts +1 -0
- package/lib/testing/playwright/index.d.ts.map +1 -1
- package/lib/testing/playwright/index.js +1 -0
- package/lib/testing/playwright/index.js.map +1 -1
- package/lib/testing/playwright/server-log-capture.d.ts +35 -8
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +39 -6
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
- package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-fixture.js +25 -6
- package/lib/testing/playwright/server-log-fixture.js.map +1 -1
- package/lib/testing/playwright/server-log-region.d.ts +15 -0
- package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
- package/lib/testing/playwright/server-log-region.js +30 -0
- package/lib/testing/playwright/server-log-region.js.map +1 -0
- package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-rename-reporter.js +10 -1
- package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
- package/lib/testing/run-update-pipeline.d.ts +6 -5
- package/lib/testing/run-update-pipeline.d.ts.map +1 -1
- package/lib/testing/run-update-pipeline.js.map +1 -1
- package/lib/testing/stub-ast-document-manager.d.ts +11 -52
- package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
- package/lib/testing/stub-ast-document-manager.js +31 -62
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +33 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +103 -5
- package/lib/testing/stub-document-builder.js.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
- package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
- package/lib/testing/stub-hydranium-text-documents.js +132 -16
- package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
- package/lib/testing/stub-index-manager.js.map +1 -1
- package/lib/testing/stub-langium-documents.d.ts +3 -2
- package/lib/testing/stub-langium-documents.d.ts.map +1 -1
- package/lib/testing/stub-langium-documents.js.map +1 -1
- package/lib/testing/stub-model-service.d.ts +9 -8
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +6 -6
- package/lib/testing/stub-model-service.js.map +1 -1
- package/lib/testing/stub-project-manager.js.map +1 -1
- package/lib/testing/stub-self-save-registry.d.ts +1 -1
- package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
- package/lib/testing/stub-service-registry.d.ts +1 -1
- package/lib/testing/stub-service-registry.js.map +1 -1
- package/lib/testing/stub-writable-file-system.d.ts +1 -1
- package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
- package/lib/testing/stub-writable-file-system.js +2 -1
- package/lib/testing/stub-writable-file-system.js.map +1 -1
- package/lib/util/connection-liveness.d.ts +19 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +61 -15
- package/lib/util/connection-liveness.js.map +1 -1
- package/lib/util/environment.d.ts.map +1 -1
- package/lib/util/environment.js.map +1 -1
- package/lib/util/registry.d.ts.map +1 -1
- package/package.json +29 -53
- package/src/documents/ast-document-manager.ts +463 -231
- package/src/documents/client-ids.ts +5 -22
- package/src/documents/client-session-errors.ts +24 -0
- package/src/documents/client-session-registry.ts +262 -0
- package/src/documents/dirty-state-tracker.ts +167 -0
- package/src/documents/document-release-handler.ts +404 -0
- package/src/documents/document-release-scheduler.ts +121 -0
- package/src/documents/file-system-task-queue.ts +68 -0
- package/src/documents/hydranium-text-documents.ts +968 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +452 -0
- package/src/documents/model-ledger.ts +66 -0
- package/src/documents/text-ledger.ts +112 -0
- package/src/documents/version-sync-service.ts +275 -0
- package/src/index.ts +8 -0
- package/src/langium/ast-extension/ast-extension-service.ts +3 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +95 -52
- package/src/langium/build-phase-pass/build-phase-pass-service.ts +1 -1
- package/src/langium/build-phase-pass/build-phase-pass.ts +1 -1
- package/src/langium/composite-ast-reflection.ts +112 -0
- package/src/langium/config/configuration-provider.ts +119 -0
- package/src/langium/config/index.ts +1 -0
- package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
- package/src/langium/diagnostics/log-preamble.ts +1 -1
- package/src/langium/diagnostics/logger.ts +12 -5
- package/src/langium/diagnostics/lsp-logger.ts +61 -16
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +4 -3
- package/src/langium/document-builder/document-builder.ts +616 -73
- package/src/langium/integration-services.ts +59 -28
- package/src/langium/integrity/integrity-rule.ts +16 -8
- package/src/langium/integrity/integrity-service.ts +296 -69
- package/src/langium/keys/containment.ts +87 -0
- package/src/langium/keys/index.ts +1 -0
- package/src/langium/keys/name-based-key-provider.ts +4 -0
- package/src/langium/language-module.ts +49 -8
- package/src/langium/model-service/client-session.ts +702 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +80 -0
- package/src/langium/model-service/model-service.ts +835 -475
- package/src/langium/module.ts +212 -67
- package/src/langium/naming/name-provider.ts +29 -7
- package/src/langium/naming/name-separator-validation.ts +25 -3
- package/src/langium/project/abstract-project-manager.ts +13 -5
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +50 -16
- package/src/langium/scope/fallback-scope.ts +38 -0
- package/src/langium/scope/hydranium-scope-computation.ts +45 -44
- package/src/langium/scope/hydranium-scope-provider.ts +89 -38
- package/src/langium/scope/index.ts +1 -0
- package/src/langium/scope/reference-candidate-provider.ts +6 -5
- package/src/langium/scope/scope-extension-service.ts +74 -59
- package/src/langium/scope/scoped-ast-node-description.ts +1 -3
- package/src/langium/serialization/abstract-serializer.ts +57 -41
- package/src/langium/serialization/json-serializer.ts +14 -3
- package/src/langium/serialization/serializer.ts +1 -1
- package/src/langium/serialization/yaml-serializer.ts +4 -0
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +26 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +102 -45
- package/src/langium/trivia/comment-preserver.ts +1100 -0
- package/src/langium/trivia/document-ending-preserver.ts +55 -0
- package/src/langium/trivia/index.ts +14 -0
- package/src/langium/trivia/trivia-contribution.ts +39 -0
- package/src/langium/trivia/trivia-preserver.ts +54 -0
- package/src/langium/trivia/trivia-service.ts +99 -0
- package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
- package/src/langium/update-rewrite/update-rewrite.ts +1 -1
- package/src/langium/validation/document-validator.ts +528 -13
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +15 -10
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +234 -16
- package/src/langium/workspace/hydranium-langium-document-factory.ts +117 -0
- package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
- package/src/langium/workspace/hydranium-workspace-manager.ts +221 -16
- package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +63 -5
- package/src/langium/workspace/persistent-file-system-provider.ts +15 -14
- package/src/langium/workspace/self-save-registry.ts +118 -0
- package/src/langium/workspace/virtual-document.ts +100 -19
- package/src/langium/workspace/write-lock-scope.ts +27 -12
- package/src/launcher/integrated-server.ts +3 -1
- package/src/locale/index.ts +10 -0
- package/src/locale/server-locale.ts +86 -0
- package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
- package/src/lsp/connection-features.ts +67 -0
- package/src/lsp/diagnostics-connection.ts +56 -0
- package/src/lsp/hydranium-document-update-handler.ts +227 -111
- package/src/lsp/index.ts +3 -1
- package/src/lsp/lsp-latency.ts +62 -0
- package/src/lsp/semantic-token-provider.ts +74 -7
- package/src/lsp/shared-module.ts +4 -8
- package/src/lsp/start-language-server.ts +13 -7
- package/src/messages/carriers.ts +23 -15
- package/src/messages/index.ts +13 -1
- package/src/messages/renderer.ts +212 -0
- package/src/node/event-loop-monitor.ts +2 -1
- package/src/node/heap-ceiling.ts +108 -0
- package/src/node/index.ts +1 -1
- package/src/node/latency-from-env.ts +1 -1
- package/src/node/log-preamble-node.ts +20 -10
- package/src/node/measure-memory.ts +5 -4
- package/src/node/memory-monitor.ts +10 -10
- package/src/node/node-file-system-provider.ts +178 -56
- package/src/node/profile-capture.ts +16 -15
- package/src/node/profiling-run.ts +30 -8
- package/src/node/rename-over-open-readers.ts +94 -0
- package/src/node/server-diagnostics.ts +1 -1
- package/src/node/server-state-snapshot.ts +5 -5
- package/src/node/socket-launcher.ts +27 -11
- package/src/node/stdio-launcher.ts +22 -14
- package/src/testing/document-uri-policy-conformance.ts +1 -1
- package/src/testing/fake-document.ts +24 -5
- package/src/testing/index.ts +2 -1
- package/src/testing/langium-test-helpers.ts +1 -0
- package/src/testing/make-noop-shared-services.ts +50 -2
- package/src/testing/make-test-services.ts +125 -31
- package/src/testing/make-test-tracer.ts +26 -0
- package/src/testing/node/applied-edit-capture.ts +139 -0
- package/src/testing/node/index.ts +1 -0
- package/src/testing/node/lsp-harness.ts +2 -0
- package/src/testing/node/lsp-server-connection.ts +74 -117
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +57 -3
- package/src/testing/node/unhandled-rejections.ts +31 -0
- package/src/testing/parse-semantic-root.ts +1 -1
- package/src/testing/playwright/flaky-network-proxy.ts +240 -0
- package/src/testing/playwright/index.ts +1 -0
- package/src/testing/playwright/server-log-capture.ts +63 -11
- package/src/testing/playwright/server-log-fixture.ts +46 -6
- package/src/testing/playwright/server-log-region.ts +32 -0
- package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
- package/src/testing/run-update-pipeline.ts +6 -5
- package/src/testing/stub-ast-document-manager.ts +47 -128
- package/src/testing/stub-document-builder.ts +133 -18
- package/src/testing/stub-hydranium-text-documents.ts +184 -27
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +11 -10
- package/src/testing/stub-self-save-registry.ts +1 -1
- package/src/testing/stub-service-registry.ts +1 -1
- package/src/testing/stub-writable-file-system.ts +3 -2
- package/src/util/connection-liveness.ts +67 -15
- package/src/util/environment.ts +9 -1
- package/lib/documents/language-client-text-shadow.d.ts +0 -101
- package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
- package/lib/documents/language-client-text-shadow.js +0 -156
- package/lib/documents/language-client-text-shadow.js.map +0 -1
- package/lib/documents/self-save-registry.d.ts +0 -55
- package/lib/documents/self-save-registry.d.ts.map +0 -1
- package/lib/documents/self-save-registry.js.map +0 -1
- package/lib/lsp/instrument-connection.d.ts +0 -36
- package/lib/lsp/instrument-connection.d.ts.map +0 -1
- package/lib/lsp/instrument-connection.js +0 -62
- package/lib/lsp/instrument-connection.js.map +0 -1
- package/lib/node/process-memory.d.ts +0 -66
- package/lib/node/process-memory.d.ts.map +0 -1
- package/lib/node/process-memory.js +0 -252
- package/lib/node/process-memory.js.map +0 -1
- package/src/documents/language-client-text-shadow.ts +0 -175
- package/src/documents/self-save-registry.ts +0 -81
- package/src/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { type AstNode, type LangiumDocument
|
|
9
|
+
import { type AstNode, type LangiumDocument } from '@hydranium/langium';
|
|
10
10
|
import { type Disposable } from 'vscode-languageserver';
|
|
11
|
-
import { type Tracer } from '@hydranium/protocol';
|
|
11
|
+
import { type ProfileRecord, type ProfileSession, type Tracer } from '@hydranium/protocol';
|
|
12
12
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
13
13
|
import { type ServerLanguageServices } from '../language-module.js';
|
|
14
14
|
import { Registry, type RegistryItem } from '../../util/registry.js';
|
|
@@ -54,8 +54,7 @@ export interface ScopeDescriptionAcceptor {
|
|
|
54
54
|
* descriptions are constructed ahead of time, to avoid per-query
|
|
55
55
|
* allocation. The pushed description's `tier` must be `'local'` or
|
|
56
56
|
* `'universal'`; a description of any other tier is silently dropped,
|
|
57
|
-
* because
|
|
58
|
-
* the tier they were asked for.
|
|
57
|
+
* because {@link ScopeExtensionDescriptions} holds only those two.
|
|
59
58
|
*/
|
|
60
59
|
push(description: TieredAstNodeDescription): void;
|
|
61
60
|
}
|
|
@@ -78,34 +77,25 @@ export interface ScopeExtension extends RegistryItem {
|
|
|
78
77
|
*/
|
|
79
78
|
addDescriptions(context: AstNode, referenceType: string, document: LangiumDocument, accept: ScopeDescriptionAcceptor): void;
|
|
80
79
|
}
|
|
80
|
+
/** The scope-extension descriptions for one reference, split by tier. */
|
|
81
|
+
export interface ScopeExtensionDescriptions {
|
|
82
|
+
readonly local: readonly TieredAstNodeDescription[];
|
|
83
|
+
readonly universal: readonly TieredAstNodeDescription[];
|
|
84
|
+
}
|
|
81
85
|
/**
|
|
82
86
|
* Public contract for the per-language scope-extension service. Extends
|
|
83
87
|
* the {@link ScopeExtensionRegistry} (the imperative `register` surface
|
|
84
|
-
* contributions use) with the
|
|
85
|
-
*
|
|
86
|
-
* `layerUniversalExtension` helpers, which layer scope-extension
|
|
87
|
-
* contributions around the cached project chain.
|
|
88
|
-
*
|
|
89
|
-
* Adopter overrides go through {@link DefaultScopeExtensionService}; the
|
|
90
|
-
* interface keeps the public API stable while internals
|
|
91
|
-
* (`collectExtensionDescriptions` walk) stay `protected` on the default
|
|
92
|
-
* class.
|
|
88
|
+
* contributions use) with the query `HydraniumScopeProvider` builds its
|
|
89
|
+
* extension tiers from.
|
|
93
90
|
*/
|
|
94
91
|
export interface ScopeExtensionService extends ScopeExtensionRegistry {
|
|
95
92
|
/**
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
93
|
+
* Run every extension registered for `referenceType` once against
|
|
94
|
+
* `context`, and answer its descriptions by tier. A caller that needs
|
|
95
|
+
* both tiers takes them from one call: a call per tier runs every
|
|
96
|
+
* extension twice.
|
|
100
97
|
*/
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Layer this language's `universal`-tier scope-extension descriptions
|
|
104
|
-
* BELOW `outerScope` for the given reference type. Returns `outerScope`
|
|
105
|
-
* unchanged when no extension contributes a `universal`-tier
|
|
106
|
-
* description for the type.
|
|
107
|
-
*/
|
|
108
|
-
getUniversalExtensionScope(referenceType: string, context: AstNode, outerScope: Scope): Scope;
|
|
98
|
+
getDescriptions(referenceType: string, context: AstNode): ScopeExtensionDescriptions;
|
|
109
99
|
}
|
|
110
100
|
export type ScopeExtensionServiceOptions = LogNameOptions;
|
|
111
101
|
/**
|
|
@@ -117,14 +107,20 @@ export type ScopeExtensionServiceOptions = LogNameOptions;
|
|
|
117
107
|
* separate from the query-time scope-resolution concern (which only reads).
|
|
118
108
|
*
|
|
119
109
|
* Lives in the per-language `references` group alongside `ScopeProvider`,
|
|
120
|
-
* which consumes
|
|
121
|
-
* / {@link getUniversalExtensionScope}). Designed as a base class; adopters
|
|
110
|
+
* which consumes {@link getDescriptions}. Designed as a base class; adopters
|
|
122
111
|
* extend it and call `register` in their constructor.
|
|
112
|
+
*
|
|
113
|
+
* At `debug`, each extension's calls and self-time go into one profile
|
|
114
|
+
* session, reported when a build starts and when it ends. A report thus
|
|
115
|
+
* covers one build, validation included, or the calls made between two
|
|
116
|
+
* builds, such as a reference picker's.
|
|
123
117
|
*/
|
|
124
118
|
export declare class DefaultScopeExtensionService implements ScopeExtensionService {
|
|
125
119
|
protected readonly services: ServerLanguageServices;
|
|
126
120
|
protected readonly scopeExtensions: Registry<ScopeExtension>;
|
|
127
121
|
protected readonly tracer: Tracer;
|
|
122
|
+
/** Open from the first profiled call until {@link reportProfile}. */
|
|
123
|
+
protected profileSession?: ProfileSession;
|
|
128
124
|
constructor(services: ServerLanguageServices, options?: ScopeExtensionServiceOptions);
|
|
129
125
|
/**
|
|
130
126
|
* Register a single scope extension. Doubles as the imperative low-level
|
|
@@ -133,17 +129,25 @@ export declare class DefaultScopeExtensionService implements ScopeExtensionServi
|
|
|
133
129
|
* contributions. Throws on duplicate id.
|
|
134
130
|
*/
|
|
135
131
|
register(extension: ScopeExtension): Disposable;
|
|
136
|
-
getLocalExtensionScope(referenceType: string, context: AstNode, outerScope: Scope): Scope;
|
|
137
|
-
getUniversalExtensionScope(referenceType: string, context: AstNode, outerScope: Scope): Scope;
|
|
138
132
|
/**
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
133
|
+
* Holds the profile wrap, which an override would have to copy; to change
|
|
134
|
+
* which extensions run, override {@link extensionsFor}.
|
|
135
|
+
*/
|
|
136
|
+
getDescriptions(referenceType: string, context: AstNode): ScopeExtensionDescriptions;
|
|
137
|
+
/** The extensions that run for one reference: by default, those registered for `referenceType`. */
|
|
138
|
+
protected extensionsFor(referenceType: string, _context: AstNode): ScopeExtension[];
|
|
139
|
+
/**
|
|
140
|
+
* Report the profile session, if one is open, and start the next one fresh:
|
|
141
|
+
* one line per extension, its calls and self-time. Not a share of the
|
|
142
|
+
* session's time, which runs from the first call to the report and so takes
|
|
143
|
+
* in whatever happened between the calls.
|
|
144
|
+
*/
|
|
145
|
+
protected reportProfile(): void;
|
|
146
|
+
/**
|
|
147
|
+
* The log line of one extension's {@link reportProfile} entry. It names the
|
|
148
|
+
* language: each has its own session, and an extension id is unique only
|
|
149
|
+
* within its language.
|
|
146
150
|
*/
|
|
147
|
-
protected
|
|
151
|
+
protected formatProfileRecord(record: ProfileRecord): string;
|
|
148
152
|
}
|
|
149
153
|
//# sourceMappingURL=scope-extension-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-extension-service.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,OAAO,EAAY,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"scope-extension-service.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { AstUtils
|
|
9
|
+
import { AstUtils } from '@hydranium/langium';
|
|
10
|
+
import { Format, Logger } from '@hydranium/protocol';
|
|
10
11
|
import { Registry } from '../../util/registry.js';
|
|
11
12
|
/** Build a {@link ScopeDescriptionAcceptor} that synthesises typed descriptions via `descriptions` and accumulates them into `into`. */
|
|
12
13
|
function createScopeDescriptionAcceptor(into, descriptions) {
|
|
@@ -16,6 +17,7 @@ function createScopeDescriptionAcceptor(into, descriptions) {
|
|
|
16
17
|
push: description => into.push(description)
|
|
17
18
|
};
|
|
18
19
|
}
|
|
20
|
+
const NO_DESCRIPTIONS = { local: [], universal: [] };
|
|
19
21
|
/**
|
|
20
22
|
* Default {@link ScopeExtensionService} implementation. Per-language
|
|
21
23
|
* registry for dynamic scope contributions: extra resolvable descriptions
|
|
@@ -25,14 +27,20 @@ function createScopeDescriptionAcceptor(into, descriptions) {
|
|
|
25
27
|
* separate from the query-time scope-resolution concern (which only reads).
|
|
26
28
|
*
|
|
27
29
|
* Lives in the per-language `references` group alongside `ScopeProvider`,
|
|
28
|
-
* which consumes
|
|
29
|
-
* / {@link getUniversalExtensionScope}). Designed as a base class; adopters
|
|
30
|
+
* which consumes {@link getDescriptions}. Designed as a base class; adopters
|
|
30
31
|
* extend it and call `register` in their constructor.
|
|
32
|
+
*
|
|
33
|
+
* At `debug`, each extension's calls and self-time go into one profile
|
|
34
|
+
* session, reported when a build starts and when it ends. A report thus
|
|
35
|
+
* covers one build, validation included, or the calls made between two
|
|
36
|
+
* builds, such as a reference picker's.
|
|
31
37
|
*/
|
|
32
38
|
export class DefaultScopeExtensionService {
|
|
33
39
|
services;
|
|
34
40
|
scopeExtensions = new Registry();
|
|
35
41
|
tracer;
|
|
42
|
+
/** Open from the first profiled call until {@link reportProfile}. */
|
|
43
|
+
profileSession;
|
|
36
44
|
constructor(services, options = {}) {
|
|
37
45
|
this.services = services;
|
|
38
46
|
this.tracer = services.shared.Tracer.for(options.logName ?? 'ScopeExtension').trace('instantiated');
|
|
@@ -44,6 +52,10 @@ export class DefaultScopeExtensionService {
|
|
|
44
52
|
for (const contribution of Object.values(contributions)) {
|
|
45
53
|
contribution.registerScopeExtensions(this);
|
|
46
54
|
}
|
|
55
|
+
// Optional for the same reason: a stub tree may carry no builder.
|
|
56
|
+
const builder = services.shared.workspace.DocumentBuilder;
|
|
57
|
+
builder?.onUpdate(() => this.reportProfile());
|
|
58
|
+
builder?.onBuildEnded(() => this.reportProfile());
|
|
47
59
|
}
|
|
48
60
|
/**
|
|
49
61
|
* Register a single scope extension. Doubles as the imperative low-level
|
|
@@ -54,41 +66,57 @@ export class DefaultScopeExtensionService {
|
|
|
54
66
|
register(extension) {
|
|
55
67
|
return this.scopeExtensions.register(extension);
|
|
56
68
|
}
|
|
57
|
-
getLocalExtensionScope(referenceType, context, outerScope) {
|
|
58
|
-
const local = this.collectExtensionDescriptions(referenceType, context, 'local');
|
|
59
|
-
if (local.length === 0) {
|
|
60
|
-
return outerScope;
|
|
61
|
-
}
|
|
62
|
-
return new StreamScope(stream(local), outerScope);
|
|
63
|
-
}
|
|
64
|
-
getUniversalExtensionScope(referenceType, context, outerScope) {
|
|
65
|
-
const universal = this.collectExtensionDescriptions(referenceType, context, 'universal');
|
|
66
|
-
if (universal.length === 0) {
|
|
67
|
-
return outerScope;
|
|
68
|
-
}
|
|
69
|
-
return new StreamScope(outerScope.getAllElements(), new MapScope(universal));
|
|
70
|
-
}
|
|
71
69
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* `push`-ed descriptions of other tiers are silently dropped here —
|
|
75
|
-
* the per-tier query methods only return descriptions matching their
|
|
76
|
-
* tier. (`local` and `universal` are the only acceptor entry points;
|
|
77
|
-
* `push` is the escape hatch for pre-built descriptions and is the
|
|
78
|
-
* only path that could carry other tiers.)
|
|
70
|
+
* Holds the profile wrap, which an override would have to copy; to change
|
|
71
|
+
* which extensions run, override {@link extensionsFor}.
|
|
79
72
|
*/
|
|
80
|
-
|
|
81
|
-
const extensionsForType = this.
|
|
73
|
+
getDescriptions(referenceType, context) {
|
|
74
|
+
const extensionsForType = this.extensionsFor(referenceType, context);
|
|
82
75
|
if (extensionsForType.length === 0) {
|
|
83
|
-
return
|
|
76
|
+
return NO_DESCRIPTIONS;
|
|
84
77
|
}
|
|
85
78
|
const document = AstUtils.getDocument(context);
|
|
86
79
|
const collected = [];
|
|
87
80
|
const accept = createScopeDescriptionAcceptor(collected, this.services.workspace.AstNodeDescriptionProvider);
|
|
81
|
+
const session = Logger.isLevelEnabled('debug') ? (this.profileSession ??= this.tracer.profile('scope-extension')) : undefined;
|
|
88
82
|
for (const extension of extensionsForType) {
|
|
89
|
-
|
|
83
|
+
if (session) {
|
|
84
|
+
session.scope(extension.id, () => extension.addDescriptions(context, referenceType, document, accept));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
extension.addDescriptions(context, referenceType, document, accept);
|
|
88
|
+
}
|
|
90
89
|
}
|
|
91
|
-
return
|
|
90
|
+
return {
|
|
91
|
+
local: collected.filter(description => description.tier === 'local'),
|
|
92
|
+
universal: collected.filter(description => description.tier === 'universal')
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/** The extensions that run for one reference: by default, those registered for `referenceType`. */
|
|
96
|
+
extensionsFor(referenceType, _context) {
|
|
97
|
+
return this.scopeExtensions.all().filter(extension => extension.referenceTypes.includes(referenceType));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Report the profile session, if one is open, and start the next one fresh:
|
|
101
|
+
* one line per extension, its calls and self-time. Not a share of the
|
|
102
|
+
* session's time, which runs from the first call to the report and so takes
|
|
103
|
+
* in whatever happened between the calls.
|
|
104
|
+
*/
|
|
105
|
+
reportProfile() {
|
|
106
|
+
const session = this.profileSession;
|
|
107
|
+
this.profileSession = undefined;
|
|
108
|
+
for (const record of session?.records() ?? []) {
|
|
109
|
+
this.tracer.debug(this.formatProfileRecord(record));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The log line of one extension's {@link reportProfile} entry. It names the
|
|
114
|
+
* language: each has its own session, and an extension id is unique only
|
|
115
|
+
* within its language.
|
|
116
|
+
*/
|
|
117
|
+
formatProfileRecord(record) {
|
|
118
|
+
const language = this.services.LanguageMetaData.languageId;
|
|
119
|
+
return `[profile scope-extension ${language}] ${record.id} ×${record.count} ${Format.elapsed(record.selfMs)}`;
|
|
92
120
|
}
|
|
93
121
|
}
|
|
94
122
|
//# sourceMappingURL=scope-extension-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope-extension-service.js","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAgB,QAAQ,EAAwB,
|
|
1
|
+
{"version":3,"file":"scope-extension-service.js","sourceRoot":"","sources":["../../../src/langium/scope/scope-extension-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -144,9 +144,7 @@ export declare function isUniversalTier(description: AstNodeDescription): descri
|
|
|
144
144
|
* URI's project, the public-tier sibling belonging to that
|
|
145
145
|
* same project is redundant (the project-tier sibling under a shorter
|
|
146
146
|
* name is already in scope) and should be hidden from completion /
|
|
147
|
-
* linking.
|
|
148
|
-
* `HydraniumScopeProvider.bucketFor` uses this
|
|
149
|
-
* predicate to enforce the own-project canonical filter on the typed scope path.
|
|
147
|
+
* linking.
|
|
150
148
|
*
|
|
151
149
|
* `projectId` accepts `string | undefined` for adopter-call-site
|
|
152
150
|
* ergonomics: when the source has no resolvable project (standalone
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-ast-node-description.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/scoped-ast-node-description.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IACjE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,GAAG,WAAW,IAAI,wBAAwB,CAE5G;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,kBAAkB,GAAG,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAEjI;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC1B,WAAW,EAAE,kBAAkB,GAC/B,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEpG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CACzB,WAAW,EAAE,kBAAkB,GAC/B,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEnG;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,kBAAkB,GAAG,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAEzI;AAED
|
|
1
|
+
{"version":3,"file":"scoped-ast-node-description.d.ts","sourceRoot":"","sources":["../../../src/langium/scope/scoped-ast-node-description.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,WAAW,wBAAyB,SAAQ,kBAAkB;IACjE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,GAAG,WAAW,IAAI,wBAAwB,CAE5G;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,kBAAkB,GAAG,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAEjI;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC1B,WAAW,EAAE,kBAAkB,GAC/B,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEpG;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CACzB,WAAW,EAAE,kBAAkB,GAC/B,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEnG;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,kBAAkB,GAAG,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAEzI;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CACxB,WAAW,EAAE,kBAAkB,EAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,GAC7B,WAAW,IAAI,wBAAwB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEnG"}
|
|
@@ -83,9 +83,7 @@ export function isUniversalTier(description) {
|
|
|
83
83
|
* URI's project, the public-tier sibling belonging to that
|
|
84
84
|
* same project is redundant (the project-tier sibling under a shorter
|
|
85
85
|
* name is already in scope) and should be hidden from completion /
|
|
86
|
-
* linking.
|
|
87
|
-
* `HydraniumScopeProvider.bucketFor` uses this
|
|
88
|
-
* predicate to enforce the own-project canonical filter on the typed scope path.
|
|
86
|
+
* linking.
|
|
89
87
|
*
|
|
90
88
|
* `projectId` accepts `string | undefined` for adopter-call-site
|
|
91
89
|
* ergonomics: when the source has no resolvable project (standalone
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-ast-node-description.js","sourceRoot":"","sources":["../../../src/langium/scope/scoped-ast-node-description.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAkElF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAA+B;IAChE,OAAO,OAAQ,WAAwC,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAA+B;IACxD,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC1B,WAA+B;IAE/B,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC;AAC7E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CACzB,WAA+B;IAE/B,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC5E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,WAA+B;IAC5D,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC;AAC/E,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"scoped-ast-node-description.js","sourceRoot":"","sources":["../../../src/langium/scope/scoped-ast-node-description.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAkElF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAA+B;IAChE,OAAO,OAAQ,WAAwC,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,WAA+B;IACxD,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,CAAC;AAC3E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC1B,WAA+B;IAE/B,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC;AAC7E,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CACzB,WAA+B;IAE/B,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC5E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,WAA+B;IAC5D,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC;AAC/E,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW,CACxB,WAA+B,EAC/B,SAA6B;IAE7B,OAAO,SAAS,KAAK,SAAS,IAAI,YAAY,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,CAAC;AACtG,CAAC"}
|
|
@@ -54,16 +54,6 @@ export interface AbstractSerializerOptions extends LogNameOptions {
|
|
|
54
54
|
* the extra property carries a value.
|
|
55
55
|
*/
|
|
56
56
|
readonly referenceWrapperTypes?: ReadonlyMap<string, string>;
|
|
57
|
-
/**
|
|
58
|
-
* Whether {@link AbstractSerializer.serializeAst} trims trailing whitespace
|
|
59
|
-
* from the final output (leading whitespace is always trimmed). Defaults to
|
|
60
|
-
* `true` — the conventional "no trailing blank lines" document shape. Set to
|
|
61
|
-
* `false` for grammars whose values may legitimately END the document with
|
|
62
|
-
* blank lines that must survive a round-trip — e.g. a multi-line block-scalar
|
|
63
|
-
* property (see `YamlSerializerOptions.blockScalarProperties`),
|
|
64
|
-
* where a trailing-trim would silently eat user-typed blank lines.
|
|
65
|
-
*/
|
|
66
|
-
readonly trimTrailingWhitespace?: boolean;
|
|
67
57
|
}
|
|
68
58
|
/**
|
|
69
59
|
* Abstract base for hand-written grammar-aware AST → text serializers.
|
|
@@ -97,8 +87,11 @@ export interface AbstractSerializerOptions extends LogNameOptions {
|
|
|
97
87
|
* **Extension points** (override in a subclass):
|
|
98
88
|
* - {@link serializeReferenceText} — extract the textual form of a
|
|
99
89
|
* cross-reference; defaults to the value's `$refText`.
|
|
90
|
+
* - {@link formatString} — quote a string, as a primitive or a reference, for
|
|
91
|
+
* the grammar's string terminal; the one override for a grammar whose
|
|
92
|
+
* terminal or value converter differs from Langium's default.
|
|
100
93
|
* - {@link formatReferenceValue} — format a cross-reference value for emission;
|
|
101
|
-
* defaults to
|
|
94
|
+
* defaults to {@link formatString}.
|
|
102
95
|
* - {@link serializeCustomValue} — type-specific serialization for values
|
|
103
96
|
* that don't fit the generic paths. Runs after all reference detection, so
|
|
104
97
|
* references never reach this hook. Returns `undefined` to fall through to
|
|
@@ -110,6 +103,14 @@ export interface AbstractSerializerOptions extends LogNameOptions {
|
|
|
110
103
|
export declare abstract class AbstractSerializer<TAst extends AstNode = AstNode, TTransfer extends TransferElement = TransferElement> implements Serializer<TAst, TTransfer> {
|
|
111
104
|
protected readonly services: HydraniumLanguageServices;
|
|
112
105
|
protected readonly options: AbstractSerializerOptions;
|
|
106
|
+
/**
|
|
107
|
+
* The escapes {@link formatString} writes, read through the subclass, so a
|
|
108
|
+
* grammar adding one overrides this table alone. Langium's
|
|
109
|
+
* `ValueConverter.convertString` decodes the short escapes here and reads
|
|
110
|
+
* any other escaped character as itself, which is how `\\` and `\"` read
|
|
111
|
+
* back, and why a `\u` escape would read back as `u`.
|
|
112
|
+
*/
|
|
113
|
+
protected static readonly STRING_ESCAPES: ReadonlyMap<string, string>;
|
|
113
114
|
protected readonly reflection: AstReflection;
|
|
114
115
|
protected readonly tracer: Tracer;
|
|
115
116
|
constructor(services: HydraniumLanguageServices, options?: AbstractSerializerOptions);
|
|
@@ -117,18 +118,19 @@ export declare abstract class AbstractSerializer<TAst extends AstNode = AstNode,
|
|
|
117
118
|
* Entry point for AST-shape inputs. Typically the grammar root, but any
|
|
118
119
|
* AST node works — the walker is recursive and shape-agnostic.
|
|
119
120
|
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
121
|
+
* **Emits the model and nothing else — do not trim here.** Trailing
|
|
122
|
+
* whitespace belongs to the author, and a write path holding the prior
|
|
123
|
+
* document restores it from there; trimming at this end deletes it before
|
|
124
|
+
* that restore sees it. A serializer has no prior document to consult, so it
|
|
125
|
+
* cannot tell a deliberate blank line from an accidental one.
|
|
126
|
+
*
|
|
127
|
+
* **Nothing trims what a subclass emits**, at either end. Emitting leading
|
|
128
|
+
* whitespace therefore puts it in the file, where no write path removes it.
|
|
129
|
+
*
|
|
130
|
+
* Returns whatever `serializeNode` returns, so a fully sync subclass keeps a
|
|
131
|
+
* bare `string` with no promise allocation.
|
|
124
132
|
*/
|
|
125
133
|
serializeAst(model: TAst): MaybePromise<string>;
|
|
126
|
-
/**
|
|
127
|
-
* Trim the final serialized output. Leading whitespace is always removed;
|
|
128
|
-
* trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
|
|
129
|
-
* is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
|
|
130
|
-
*/
|
|
131
|
-
protected trimSerialized(text: string | undefined): string;
|
|
132
134
|
/**
|
|
133
135
|
* Entry point for transfer-model-shape inputs (cross-references as plain
|
|
134
136
|
* string ids rather than `Reference` objects).
|
|
@@ -280,9 +282,10 @@ export declare abstract class AbstractSerializer<TAst extends AstNode = AstNode,
|
|
|
280
282
|
*/
|
|
281
283
|
protected getOrderedPropertyNames(node: AstNode | Record<string, unknown>, type: string): readonly string[];
|
|
282
284
|
/**
|
|
283
|
-
* Format a cross-reference value for emission. Defaults to
|
|
284
|
-
* Override to apply language-specific reference
|
|
285
|
-
* id-reference formatter that mirrors the grammar's id
|
|
285
|
+
* Format a cross-reference value for emission. Defaults to
|
|
286
|
+
* {@link formatString}. Override to apply language-specific reference
|
|
287
|
+
* quoting — e.g. an id-reference formatter that mirrors the grammar's id
|
|
288
|
+
* convention.
|
|
286
289
|
*
|
|
287
290
|
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
288
291
|
* (remote schema lookup, external canonical-id resolution) can return a
|
|
@@ -290,15 +293,23 @@ export declare abstract class AbstractSerializer<TAst extends AstNode = AstNode,
|
|
|
290
293
|
*/
|
|
291
294
|
protected formatReferenceValue(value: string): MaybePromise<string>;
|
|
292
295
|
/**
|
|
293
|
-
* Format a primitive value (string, number, boolean) for emission.
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
+
* Format a primitive value (string, number, boolean) for emission. A string
|
|
297
|
+
* goes through {@link formatString}, any other value through
|
|
298
|
+
* `JSON.stringify`.
|
|
296
299
|
*
|
|
297
300
|
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
298
301
|
* (e.g. delegating to `prettier.format` for a specific value class) can
|
|
299
302
|
* return a `Promise<string>`.
|
|
300
303
|
*/
|
|
301
304
|
protected formatPrimitive(value: unknown): MaybePromise<string>;
|
|
305
|
+
/**
|
|
306
|
+
* Quote a string, as a primitive or a reference, for its reader: the
|
|
307
|
+
* grammar's string terminal and value converter. Defaults to the inverse of
|
|
308
|
+
* Langium's default `STRING` terminal and converter: double quotes, `\` and
|
|
309
|
+
* `"` escaped, the converter's short escapes, every other character as it
|
|
310
|
+
* is. A grammar with another terminal or converter overrides this.
|
|
311
|
+
*/
|
|
312
|
+
protected formatString(value: string): string;
|
|
302
313
|
/**
|
|
303
314
|
* Hook for type-specific serialization that doesn't fit the generic
|
|
304
315
|
* dispatch table. Runs after all reference detection (steps 2-4 of
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-serializer.d.ts","sourceRoot":"","sources":["../../../src/langium/serialization/abstract-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"abstract-serializer.d.ts","sourceRoot":"","sources":["../../../src/langium/serialization/abstract-serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { isPromiseLike } from '@hydranium/protocol';
|
|
10
9
|
import { isAstNode } from '@hydranium/langium';
|
|
11
10
|
import { isDefaultValue, isReferenceProperty } from './serialization-util.js';
|
|
12
11
|
function isRefTextObject(value) {
|
|
@@ -44,8 +43,11 @@ function isRefTextObject(value) {
|
|
|
44
43
|
* **Extension points** (override in a subclass):
|
|
45
44
|
* - {@link serializeReferenceText} — extract the textual form of a
|
|
46
45
|
* cross-reference; defaults to the value's `$refText`.
|
|
46
|
+
* - {@link formatString} — quote a string, as a primitive or a reference, for
|
|
47
|
+
* the grammar's string terminal; the one override for a grammar whose
|
|
48
|
+
* terminal or value converter differs from Langium's default.
|
|
47
49
|
* - {@link formatReferenceValue} — format a cross-reference value for emission;
|
|
48
|
-
* defaults to
|
|
50
|
+
* defaults to {@link formatString}.
|
|
49
51
|
* - {@link serializeCustomValue} — type-specific serialization for values
|
|
50
52
|
* that don't fit the generic paths. Runs after all reference detection, so
|
|
51
53
|
* references never reach this hook. Returns `undefined` to fall through to
|
|
@@ -57,6 +59,24 @@ function isRefTextObject(value) {
|
|
|
57
59
|
export class AbstractSerializer {
|
|
58
60
|
services;
|
|
59
61
|
options;
|
|
62
|
+
/**
|
|
63
|
+
* The escapes {@link formatString} writes, read through the subclass, so a
|
|
64
|
+
* grammar adding one overrides this table alone. Langium's
|
|
65
|
+
* `ValueConverter.convertString` decodes the short escapes here and reads
|
|
66
|
+
* any other escaped character as itself, which is how `\\` and `\"` read
|
|
67
|
+
* back, and why a `\u` escape would read back as `u`.
|
|
68
|
+
*/
|
|
69
|
+
static STRING_ESCAPES = new Map([
|
|
70
|
+
['\\', '\\\\'],
|
|
71
|
+
['"', '\\"'],
|
|
72
|
+
['\b', '\\b'],
|
|
73
|
+
['\f', '\\f'],
|
|
74
|
+
['\n', '\\n'],
|
|
75
|
+
['\r', '\\r'],
|
|
76
|
+
['\t', '\\t'],
|
|
77
|
+
['\v', '\\v'],
|
|
78
|
+
['\0', '\\0']
|
|
79
|
+
]);
|
|
60
80
|
reflection;
|
|
61
81
|
tracer;
|
|
62
82
|
constructor(services, options = {}) {
|
|
@@ -69,28 +89,20 @@ export class AbstractSerializer {
|
|
|
69
89
|
* Entry point for AST-shape inputs. Typically the grammar root, but any
|
|
70
90
|
* AST node works — the walker is recursive and shape-agnostic.
|
|
71
91
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
92
|
+
* **Emits the model and nothing else — do not trim here.** Trailing
|
|
93
|
+
* whitespace belongs to the author, and a write path holding the prior
|
|
94
|
+
* document restores it from there; trimming at this end deletes it before
|
|
95
|
+
* that restore sees it. A serializer has no prior document to consult, so it
|
|
96
|
+
* cannot tell a deliberate blank line from an accidental one.
|
|
97
|
+
*
|
|
98
|
+
* **Nothing trims what a subclass emits**, at either end. Emitting leading
|
|
99
|
+
* whitespace therefore puts it in the file, where no write path removes it.
|
|
100
|
+
*
|
|
101
|
+
* Returns whatever `serializeNode` returns, so a fully sync subclass keeps a
|
|
102
|
+
* bare `string` with no promise allocation.
|
|
76
103
|
*/
|
|
77
104
|
serializeAst(model) {
|
|
78
|
-
|
|
79
|
-
if (isPromiseLike(result)) {
|
|
80
|
-
return result.then(text => this.trimSerialized(text));
|
|
81
|
-
}
|
|
82
|
-
return this.trimSerialized(result);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Trim the final serialized output. Leading whitespace is always removed;
|
|
86
|
-
* trailing whitespace is removed unless {@link AbstractSerializerOptions.trimTrailingWhitespace}
|
|
87
|
-
* is `false` (which preserves document-ending blank lines, e.g. inside a block scalar).
|
|
88
|
-
*/
|
|
89
|
-
trimSerialized(text) {
|
|
90
|
-
if (text === undefined) {
|
|
91
|
-
return '';
|
|
92
|
-
}
|
|
93
|
-
return this.options.trimTrailingWhitespace === false ? text.trimStart() : text.trim();
|
|
105
|
+
return this.serializeNode(model, 0);
|
|
94
106
|
}
|
|
95
107
|
/**
|
|
96
108
|
* Entry point for transfer-model-shape inputs (cross-references as plain
|
|
@@ -309,28 +321,40 @@ export class AbstractSerializer {
|
|
|
309
321
|
return this.options.propertyOrder?.get(type) ?? Object.keys(node);
|
|
310
322
|
}
|
|
311
323
|
/**
|
|
312
|
-
* Format a cross-reference value for emission. Defaults to
|
|
313
|
-
* Override to apply language-specific reference
|
|
314
|
-
* id-reference formatter that mirrors the grammar's id
|
|
324
|
+
* Format a cross-reference value for emission. Defaults to
|
|
325
|
+
* {@link formatString}. Override to apply language-specific reference
|
|
326
|
+
* quoting — e.g. an id-reference formatter that mirrors the grammar's id
|
|
327
|
+
* convention.
|
|
315
328
|
*
|
|
316
329
|
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
317
330
|
* (remote schema lookup, external canonical-id resolution) can return a
|
|
318
331
|
* `Promise<string>`. Sync overrides remain valid.
|
|
319
332
|
*/
|
|
320
333
|
formatReferenceValue(value) {
|
|
321
|
-
return
|
|
334
|
+
return this.formatString(value);
|
|
322
335
|
}
|
|
323
336
|
/**
|
|
324
|
-
* Format a primitive value (string, number, boolean) for emission.
|
|
325
|
-
*
|
|
326
|
-
*
|
|
337
|
+
* Format a primitive value (string, number, boolean) for emission. A string
|
|
338
|
+
* goes through {@link formatString}, any other value through
|
|
339
|
+
* `JSON.stringify`.
|
|
327
340
|
*
|
|
328
341
|
* Returns {@link MaybePromise} so adopters with async formatting needs
|
|
329
342
|
* (e.g. delegating to `prettier.format` for a specific value class) can
|
|
330
343
|
* return a `Promise<string>`.
|
|
331
344
|
*/
|
|
332
345
|
formatPrimitive(value) {
|
|
333
|
-
return JSON.stringify(value);
|
|
346
|
+
return typeof value === 'string' ? this.formatString(value) : JSON.stringify(value);
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Quote a string, as a primitive or a reference, for its reader: the
|
|
350
|
+
* grammar's string terminal and value converter. Defaults to the inverse of
|
|
351
|
+
* Langium's default `STRING` terminal and converter: double quotes, `\` and
|
|
352
|
+
* `"` escaped, the converter's short escapes, every other character as it
|
|
353
|
+
* is. A grammar with another terminal or converter overrides this.
|
|
354
|
+
*/
|
|
355
|
+
formatString(value) {
|
|
356
|
+
const escapes = this.constructor.STRING_ESCAPES;
|
|
357
|
+
return `"${Array.from(value, char => escapes.get(char) ?? char).join('')}"`;
|
|
334
358
|
}
|
|
335
359
|
/**
|
|
336
360
|
* Hook for type-specific serialization that doesn't fit the generic
|