@hydranium/core 1.0.0-next.23 → 1.0.0-next.230
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 +21 -13
- package/lib/documents/ast-document-manager.d.ts +219 -122
- package/lib/documents/ast-document-manager.d.ts.map +1 -1
- package/lib/documents/ast-document-manager.js +241 -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 +79 -0
- package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
- package/lib/documents/dirty-state-tracker.js +69 -0
- package/lib/documents/dirty-state-tracker.js.map +1 -0
- package/lib/documents/document-release-handler.d.ts +179 -0
- package/lib/documents/document-release-handler.d.ts.map +1 -0
- package/lib/documents/document-release-handler.js +283 -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 +399 -282
- package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
- package/lib/documents/hydranium-text-documents.js +816 -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 +283 -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 +134 -0
- package/lib/documents/version-sync-service.d.ts.map +1 -0
- package/lib/documents/version-sync-service.js +171 -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.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 +23 -16
- package/lib/langium/bootstrap.d.ts.map +1 -1
- package/lib/langium/bootstrap.js +66 -28
- package/lib/langium/bootstrap.js.map +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/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.map +1 -1
- package/lib/langium/diagnostics/hydranium-langium-profiler.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 +57 -16
- 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 +93 -0
- package/lib/langium/document-builder/build-session.d.ts.map +1 -0
- package/lib/langium/document-builder/build-session.js +72 -0
- package/lib/langium/document-builder/build-session.js.map +1 -0
- package/lib/langium/document-builder/document-builder.d.ts +401 -29
- package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
- package/lib/langium/document-builder/document-builder.js +698 -61
- package/lib/langium/document-builder/document-builder.js.map +1 -1
- package/lib/langium/document-builder/index.d.ts +1 -0
- package/lib/langium/document-builder/index.d.ts.map +1 -1
- package/lib/langium/document-builder/index.js +1 -0
- package/lib/langium/document-builder/index.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 +61 -19
- package/lib/langium/integration-services.d.ts.map +1 -1
- package/lib/langium/integration-services.js +10 -5
- 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 +81 -24
- package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
- package/lib/langium/integrity/integrity-service.js +264 -57
- 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 +29 -4
- 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 +343 -0
- package/lib/langium/model-service/client-session.d.ts.map +1 -0
- package/lib/langium/model-service/client-session.js +411 -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 +61 -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 +432 -282
- package/lib/langium/model-service/model-service.d.ts.map +1 -1
- package/lib/langium/model-service/model-service.js +504 -438
- package/lib/langium/model-service/model-service.js.map +1 -1
- package/lib/langium/module.d.ts +157 -35
- package/lib/langium/module.d.ts.map +1 -1
- package/lib/langium/module.js +52 -35
- package/lib/langium/module.js.map +1 -1
- package/lib/langium/naming/name-provider.d.ts +25 -4
- package/lib/langium/naming/name-provider.d.ts.map +1 -1
- package/lib/langium/naming/name-provider.js +2 -1
- package/lib/langium/naming/name-provider.js.map +1 -1
- package/lib/langium/naming/name-separator-validation.d.ts +23 -0
- package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
- package/lib/langium/naming/name-separator-validation.js +30 -1
- 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 +9 -2
- 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 +31 -11
- 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/hydranium-scope-computation.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.d.ts +48 -13
- package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
- package/lib/langium/scope/hydranium-scope-provider.js +56 -20
- package/lib/langium/scope/hydranium-scope-provider.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.map +1 -1
- package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
- package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
- package/lib/langium/scope/scope-extension-service.js.map +1 -1
- package/lib/langium/serialization/abstract-serializer.d.ts +11 -20
- package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/abstract-serializer.js +12 -21
- package/lib/langium/serialization/abstract-serializer.js.map +1 -1
- package/lib/langium/serialization/json-serializer.d.ts +1 -1
- package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
- package/lib/langium/serialization/json-serializer.js.map +1 -1
- package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
- 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 +77 -26
- package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
- package/lib/langium/transfer/transfer-encoder.js +46 -24
- 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.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 +294 -10
- package/lib/langium/validation/document-validator.d.ts.map +1 -1
- package/lib/langium/validation/document-validator.js +448 -5
- 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 +18 -14
- package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
- package/lib/langium/workspace/document-uri-policy.js +10 -9
- 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 +135 -9
- package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/file-system-provider.js +93 -14
- 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 +82 -9
- package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
- package/lib/langium/workspace/hydranium-workspace-manager.js +128 -10
- package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -3
- package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/in-memory-file-system-provider.js +41 -15
- 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 +86 -17
- package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
- package/lib/langium/workspace/langium-documents.js +101 -29
- package/lib/langium/workspace/langium-documents.js.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.d.ts +1 -8
- package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
- package/lib/langium/workspace/persistent-file-system-provider.js +0 -7
- package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
- package/lib/{documents → langium/workspace}/self-save-registry.d.ts +38 -7
- package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
- package/lib/{documents → langium/workspace}/self-save-registry.js +29 -16
- package/lib/langium/workspace/self-save-registry.js.map +1 -0
- package/lib/langium/workspace/virtual-document.d.ts +48 -15
- package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
- package/lib/langium/workspace/virtual-document.js +78 -18
- package/lib/langium/workspace/virtual-document.js.map +1 -1
- package/lib/langium/workspace/write-lock-scope.d.ts +20 -10
- package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
- package/lib/langium/workspace/write-lock-scope.js +12 -4
- package/lib/langium/workspace/write-lock-scope.js.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 +92 -81
- package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
- package/lib/lsp/hydranium-document-update-handler.js +153 -99
- 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 +54 -0
- package/lib/messages/carriers.d.ts.map +1 -0
- package/lib/messages/carriers.js +62 -0
- package/lib/messages/carriers.js.map +1 -0
- package/lib/messages/index.d.ts +25 -0
- package/lib/messages/index.d.ts.map +1 -0
- package/lib/messages/index.js +25 -0
- package/lib/messages/index.js.map +1 -0
- 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.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/measure-memory.d.ts.map +1 -1
- package/lib/node/measure-memory.js +1 -0
- package/lib/node/measure-memory.js.map +1 -1
- package/lib/node/memory-monitor.js.map +1 -1
- package/lib/node/node-file-system-provider.d.ts +41 -6
- package/lib/node/node-file-system-provider.d.ts.map +1 -1
- package/lib/node/node-file-system-provider.js +109 -49
- package/lib/node/node-file-system-provider.js.map +1 -1
- package/lib/node/profile-capture.d.ts +8 -2
- package/lib/node/profile-capture.d.ts.map +1 -1
- package/lib/node/profile-capture.js +1 -1
- 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 +52 -0
- package/lib/node/rename-over-open-readers.d.ts.map +1 -0
- package/lib/node/rename-over-open-readers.js +66 -0
- package/lib/node/rename-over-open-readers.js.map +1 -0
- 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 +5 -4
- package/lib/node/socket-launcher.js.map +1 -1
- package/lib/node/stdio-launcher.d.ts +6 -5
- package/lib/node/stdio-launcher.d.ts.map +1 -1
- package/lib/node/stdio-launcher.js +2 -2
- package/lib/node/stdio-launcher.js.map +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/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 +11 -3
- package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
- package/lib/testing/node/lsp-server-connection.js +43 -10
- 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 +14 -0
- package/lib/testing/node/spawned-server.d.ts.map +1 -1
- package/lib/testing/node/spawned-server.js +34 -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 +24 -8
- package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
- package/lib/testing/playwright/server-log-capture.js +27 -6
- package/lib/testing/playwright/server-log-capture.js.map +1 -1
- 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 +4 -4
- package/lib/testing/run-update-pipeline.d.ts.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 +24 -65
- package/lib/testing/stub-ast-document-manager.js.map +1 -1
- package/lib/testing/stub-document-builder.d.ts +26 -11
- package/lib/testing/stub-document-builder.d.ts.map +1 -1
- package/lib/testing/stub-document-builder.js +78 -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 +115 -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 +7 -6
- package/lib/testing/stub-model-service.d.ts.map +1 -1
- package/lib/testing/stub-model-service.js +4 -4
- 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/util/connection-liveness.d.ts +7 -6
- package/lib/util/connection-liveness.d.ts.map +1 -1
- package/lib/util/connection-liveness.js +35 -14
- 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 +32 -48
- package/src/documents/ast-document-manager.ts +379 -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 +130 -0
- package/src/documents/document-release-handler.ts +365 -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 +931 -595
- package/src/documents/index.ts +10 -2
- package/src/documents/language-client-shadow.ts +451 -0
- package/src/documents/model-ledger.ts +66 -0
- package/src/documents/text-ledger.ts +112 -0
- package/src/documents/version-sync-service.ts +267 -0
- package/src/index.ts +8 -0
- package/src/langium/ast-extension/ast-node-builder.ts +66 -22
- package/src/langium/bootstrap.ts +66 -28
- 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/logger.ts +12 -5
- package/src/langium/diagnostics/lsp-logger.ts +59 -15
- package/src/langium/document-builder/build-pipeline-integration.ts +50 -5
- package/src/langium/document-builder/build-session.ts +87 -0
- package/src/langium/document-builder/document-builder.ts +825 -59
- package/src/langium/document-builder/index.ts +1 -0
- package/src/langium/integration-services.ts +83 -24
- package/src/langium/integrity/integrity-rule.ts +16 -8
- package/src/langium/integrity/integrity-service.ts +287 -62
- 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 +48 -7
- package/src/langium/model-service/client-session.ts +644 -0
- package/src/langium/model-service/index.ts +2 -0
- package/src/langium/model-service/model-events.ts +75 -0
- package/src/langium/model-service/model-service.ts +790 -468
- package/src/langium/module.ts +210 -64
- package/src/langium/naming/name-provider.ts +27 -5
- package/src/langium/naming/name-separator-validation.ts +34 -5
- package/src/langium/project/abstract-project-manager.ts +9 -1
- package/src/langium/project/project-change-event.ts +2 -2
- package/src/langium/residency/cst-residency-service.ts +46 -15
- package/src/langium/scope/hydranium-scope-provider.ts +60 -22
- package/src/langium/serialization/abstract-serializer.ts +13 -32
- package/src/langium/service-registry.ts +41 -2
- package/src/langium/shared-services.ts +27 -6
- package/src/langium/single-langium-copy.ts +42 -0
- package/src/langium/transfer/transfer-encoder.ts +104 -37
- 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.ts +1 -1
- package/src/langium/validation/document-validator.ts +537 -11
- package/src/langium/validation/validation-contribution-collector.ts +10 -1
- package/src/langium/workspace/document-uri-policy.ts +18 -14
- package/src/langium/workspace/file-not-found.ts +35 -0
- package/src/langium/workspace/file-system-provider.ts +205 -17
- 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 +154 -14
- package/src/langium/workspace/in-memory-file-system-provider.ts +48 -17
- package/src/langium/workspace/index.ts +1 -0
- package/src/langium/workspace/initialize-workspace.ts +43 -5
- package/src/langium/workspace/langium-documents.ts +124 -33
- package/src/langium/workspace/persistent-file-system-provider.ts +1 -8
- package/src/{documents → langium/workspace}/self-save-registry.ts +54 -15
- package/src/langium/workspace/virtual-document.ts +96 -19
- package/src/langium/workspace/write-lock-scope.ts +24 -11
- 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 +187 -108
- 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 +78 -0
- package/src/messages/index.ts +36 -0
- package/src/messages/renderer.ts +212 -0
- 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/measure-memory.ts +1 -0
- package/src/node/node-file-system-provider.ts +124 -53
- package/src/node/profile-capture.ts +9 -3
- package/src/node/profiling-run.ts +30 -8
- package/src/node/rename-over-open-readers.ts +78 -0
- package/src/node/socket-launcher.ts +24 -8
- package/src/node/stdio-launcher.ts +8 -7
- 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/index.ts +1 -0
- package/src/testing/node/lsp-harness.ts +2 -0
- package/src/testing/node/lsp-server-connection.ts +66 -12
- package/src/testing/node/scratch-workspace.ts +10 -5
- package/src/testing/node/spawned-server.ts +36 -2
- 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 +45 -11
- package/src/testing/playwright/server-log-rename-reporter.ts +12 -1
- package/src/testing/run-update-pipeline.ts +4 -4
- package/src/testing/stub-ast-document-manager.ts +36 -138
- package/src/testing/stub-document-builder.ts +102 -18
- package/src/testing/stub-hydranium-text-documents.ts +165 -27
- package/src/testing/stub-langium-documents.ts +3 -2
- package/src/testing/stub-model-service.ts +9 -8
- 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 +1 -1
- package/src/util/connection-liveness.ts +37 -14
- 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.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/lsp/instrument-connection.ts +0 -66
- package/src/node/process-memory.ts +0 -299
|
@@ -6,8 +6,25 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
+
import { type Clock, type Tracer } from '@hydranium/protocol';
|
|
9
10
|
import { DefaultWorkspaceLock, type MaybePromise } from '@hydranium/langium';
|
|
10
|
-
import { type CancellationToken } from 'vscode-languageserver-protocol';
|
|
11
|
+
import { type CancellationToken, type Disposable } from 'vscode-languageserver-protocol';
|
|
12
|
+
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
13
|
+
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
14
|
+
/** Constructor options for {@link HydraniumWorkspaceLock}. */
|
|
15
|
+
export interface HydraniumWorkspaceLockOptions extends LogNameOptions {
|
|
16
|
+
/**
|
|
17
|
+
* How long a write may keep running after a later write cancelled it before
|
|
18
|
+
* the lock logs an error. Every write and read waits behind it meanwhile, so
|
|
19
|
+
* one that never ends stops the server. Defaults to 10 s; `0` turns the
|
|
20
|
+
* check off.
|
|
21
|
+
*/
|
|
22
|
+
readonly stalledWriteWarnMs?: number;
|
|
23
|
+
}
|
|
24
|
+
/** The write action a {@link HydraniumWorkspaceLock} is running, with the timer its cancellation started. */
|
|
25
|
+
export interface RunningWrite {
|
|
26
|
+
stallTimer?: Disposable;
|
|
27
|
+
}
|
|
11
28
|
/**
|
|
12
29
|
* Langium's {@link DefaultWorkspaceLock} with the write action marked as a
|
|
13
30
|
* write-lock scope, so anything it reaches can be asked whether the lock is
|
|
@@ -26,6 +43,31 @@ import { type CancellationToken } from 'vscode-languageserver-protocol';
|
|
|
26
43
|
* would turn ordinary read-then-write sequences into false positives.
|
|
27
44
|
*/
|
|
28
45
|
export declare class HydraniumWorkspaceLock extends DefaultWorkspaceLock {
|
|
46
|
+
/** Backs {@link writeCancellations}. */
|
|
47
|
+
protected cancelledWriteCount: number;
|
|
48
|
+
protected readonly clock: Clock;
|
|
49
|
+
protected readonly tracer: Tracer;
|
|
50
|
+
protected readonly stalledWriteWarnMs: number;
|
|
51
|
+
protected runningWrite?: RunningWrite;
|
|
52
|
+
constructor(services: Pick<ServerSharedServicesMinimal, 'Clock' | 'Tracer'>, options?: HydraniumWorkspaceLockOptions);
|
|
53
|
+
/**
|
|
54
|
+
* How many calls have cancelled the lock's latest write: every `write`,
|
|
55
|
+
* which cancels the write before it, and every `cancelWrite`. A caller that
|
|
56
|
+
* reads this right after queuing a write, and reads the same number later,
|
|
57
|
+
* holds a write nothing has cancelled, whether it is still queued or
|
|
58
|
+
* already running. Its token answers that only once the write runs, since
|
|
59
|
+
* a queued write has not been handed it yet.
|
|
60
|
+
*/
|
|
61
|
+
get writeCancellations(): number;
|
|
29
62
|
write(action: (token: CancellationToken) => MaybePromise<void>): Promise<void>;
|
|
63
|
+
/** Run `action` as {@link runningWrite}, so a cancellation while it runs can time it. */
|
|
64
|
+
protected runWrite(action: (token: CancellationToken) => MaybePromise<void>, token: CancellationToken): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Counted here rather than in {@link write}, because Langium's `write` cancels
|
|
67
|
+
* through this method too. A write running when this is called has been
|
|
68
|
+
* cancelled, by this call or an earlier one, so its timer starts here.
|
|
69
|
+
*/
|
|
70
|
+
cancelWrite(): void;
|
|
71
|
+
protected reportStalledWrite(): void;
|
|
30
72
|
}
|
|
31
73
|
//# sourceMappingURL=hydranium-workspace-lock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-workspace-lock.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"hydranium-workspace-lock.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAGzE,8DAA8D;AAC9D,MAAM,WAAW,6BAA8B,SAAQ,cAAc;IAClE;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACvC;AAID,6GAA6G;AAC7G,MAAM,WAAW,YAAY;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAuB,SAAQ,oBAAoB;IAC7D,wCAAwC;IACxC,SAAS,CAAC,mBAAmB,SAAK;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAC9C,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IAEtC,YAAY,QAAQ,EAAE,IAAI,CAAC,2BAA2B,EAAE,OAAO,GAAG,QAAQ,CAAC,EAAE,OAAO,GAAE,6BAAkC,EAKvH;IAED;;;;;;;OAOG;IACH,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAEQ,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtF;IAED,yFAAyF;IACzF,UAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAW1H;IAED;;;;OAIG;IACM,WAAW,IAAI,IAAI,CAO3B;IAED,SAAS,CAAC,kBAAkB,IAAI,IAAI,CAOnC;CACH"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { DefaultWorkspaceLock } from '@hydranium/langium';
|
|
10
10
|
import { runInWriteLockScope } from './write-lock-scope.js';
|
|
11
|
+
const DEFAULT_STALLED_WRITE_WARN_MS = 10_000;
|
|
11
12
|
/**
|
|
12
13
|
* Langium's {@link DefaultWorkspaceLock} with the write action marked as a
|
|
13
14
|
* write-lock scope, so anything it reaches can be asked whether the lock is
|
|
@@ -26,8 +27,64 @@ import { runInWriteLockScope } from './write-lock-scope.js';
|
|
|
26
27
|
* would turn ordinary read-then-write sequences into false positives.
|
|
27
28
|
*/
|
|
28
29
|
export class HydraniumWorkspaceLock extends DefaultWorkspaceLock {
|
|
30
|
+
/** Backs {@link writeCancellations}. */
|
|
31
|
+
cancelledWriteCount = 0;
|
|
32
|
+
clock;
|
|
33
|
+
tracer;
|
|
34
|
+
stalledWriteWarnMs;
|
|
35
|
+
runningWrite;
|
|
36
|
+
constructor(services, options = {}) {
|
|
37
|
+
super();
|
|
38
|
+
this.clock = services.Clock;
|
|
39
|
+
this.tracer = services.Tracer.for(options.logName ?? 'WorkspaceLock');
|
|
40
|
+
this.stalledWriteWarnMs = options.stalledWriteWarnMs ?? DEFAULT_STALLED_WRITE_WARN_MS;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* How many calls have cancelled the lock's latest write: every `write`,
|
|
44
|
+
* which cancels the write before it, and every `cancelWrite`. A caller that
|
|
45
|
+
* reads this right after queuing a write, and reads the same number later,
|
|
46
|
+
* holds a write nothing has cancelled, whether it is still queued or
|
|
47
|
+
* already running. Its token answers that only once the write runs, since
|
|
48
|
+
* a queued write has not been handed it yet.
|
|
49
|
+
*/
|
|
50
|
+
get writeCancellations() {
|
|
51
|
+
return this.cancelledWriteCount;
|
|
52
|
+
}
|
|
29
53
|
write(action) {
|
|
30
|
-
return super.write(token => runInWriteLockScope(() => action
|
|
54
|
+
return super.write(token => runInWriteLockScope(() => this.runWrite(action, token)));
|
|
55
|
+
}
|
|
56
|
+
/** Run `action` as {@link runningWrite}, so a cancellation while it runs can time it. */
|
|
57
|
+
async runWrite(action, token) {
|
|
58
|
+
const running = {};
|
|
59
|
+
this.runningWrite = running;
|
|
60
|
+
try {
|
|
61
|
+
await action(token);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
running.stallTimer?.dispose();
|
|
65
|
+
if (this.runningWrite === running) {
|
|
66
|
+
this.runningWrite = undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Counted here rather than in {@link write}, because Langium's `write` cancels
|
|
72
|
+
* through this method too. A write running when this is called has been
|
|
73
|
+
* cancelled, by this call or an earlier one, so its timer starts here.
|
|
74
|
+
*/
|
|
75
|
+
cancelWrite() {
|
|
76
|
+
this.cancelledWriteCount++;
|
|
77
|
+
const running = this.runningWrite;
|
|
78
|
+
if (running && !running.stallTimer && this.stalledWriteWarnMs > 0) {
|
|
79
|
+
running.stallTimer = this.clock.setTimer(() => this.reportStalledWrite(), this.stalledWriteWarnMs);
|
|
80
|
+
}
|
|
81
|
+
super.cancelWrite();
|
|
82
|
+
}
|
|
83
|
+
reportStalledWrite() {
|
|
84
|
+
this.tracer.error(`A write is still running ${this.stalledWriteWarnMs} ms after it was cancelled, and every write and read waits behind it. ` +
|
|
85
|
+
'Likely causes: a model-service write or rebuild from inside a build in a host with no write-lock scope tracker, ' +
|
|
86
|
+
'which waits for the build it runs in, or a write action that ignores its cancellation token. ' +
|
|
87
|
+
'See https://github.com/eclipse-emfcloud/hydranium/issues/245.');
|
|
31
88
|
}
|
|
32
89
|
}
|
|
33
90
|
//# sourceMappingURL=hydranium-workspace-lock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-workspace-lock.js","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;
|
|
1
|
+
{"version":3,"file":"hydranium-workspace-lock.js","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAE,oBAAoB,EAAqB,MAAM,oBAAoB,CAAC;AAI7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAa5D,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAO7C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,sBAAuB,SAAQ,oBAAoB;IAC7D,wCAAwC;IAC9B,mBAAmB,GAAG,CAAC,CAAC;IACf,KAAK,CAAQ;IACb,MAAM,CAAS;IACf,kBAAkB,CAAS;IACpC,YAAY,CAAgB;IAEtC,YAAY,QAA+D,EAAE,OAAO,GAAkC,EAAE;QACrH,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC;QACtE,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,6BAA6B,CAAC;IACzF,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,kBAAkB;QACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACnC,CAAC;IAEQ,KAAK,CAAC,MAAwD;QACpE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,yFAAyF;IAC/E,KAAK,CAAC,QAAQ,CAAC,MAAwD,EAAE,KAAwB;QACxG,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAC5B,IAAI,CAAC;YACF,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;gBAAS,CAAC;YACR,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YACjC,CAAC;QACJ,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACM,WAAW;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;QAClC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACtG,CAAC;QACD,KAAK,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAES,kBAAkB;QACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CACd,4BAA4B,IAAI,CAAC,kBAAkB,wEAAwE;YACxH,kHAAkH;YAClH,+FAA+F;YAC/F,+DAA+D,CACpE,CAAC;IACL,CAAC;CACH"}
|
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { Deferred, type Logger, type Tracer } from '@hydranium/protocol';
|
|
10
|
-
import { DefaultWorkspaceManager, type LangiumDocument, type URI } from '@hydranium/langium';
|
|
11
|
-
import { type CancellationToken } from 'vscode-languageserver';
|
|
10
|
+
import { DefaultWorkspaceManager, type LangiumDocument, type Stream, type URI } from '@hydranium/langium';
|
|
11
|
+
import { type CancellationToken, type InitializeParams } from 'vscode-languageserver';
|
|
12
12
|
import type { WorkspaceFolder } from 'vscode-languageserver-types';
|
|
13
13
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
14
|
+
import type { ServerLocale } from '../../locale/server-locale.js';
|
|
14
15
|
import type { ProjectChangeEvent } from '../project/project-change-event.js';
|
|
15
16
|
import type { ProjectManager } from '../project/project-manager.js';
|
|
16
17
|
import type { ServerSharedServicesMinimal } from '../shared-services.js';
|
|
17
|
-
import type { WritableFileSystemProvider } from '
|
|
18
|
+
import type { WritableFileSystemProvider } from './file-system-provider.js';
|
|
18
19
|
import { type DocumentUriPolicy } from './document-uri-policy.js';
|
|
19
20
|
import { type AdditionalDocumentContribution } from './additional-document-contribution.js';
|
|
20
21
|
/**
|
|
@@ -53,6 +54,17 @@ export declare function handleProcessUnhandledRejection(reason: unknown, logger:
|
|
|
53
54
|
* Applies to every Langium-based server that experiences concurrent builds.
|
|
54
55
|
*/
|
|
55
56
|
export declare function installOperationCancelledSuppression(logger: Logger): void;
|
|
57
|
+
/** Options for {@link HydraniumWorkspaceManager}. */
|
|
58
|
+
export interface HydraniumWorkspaceManagerOptions extends LogNameOptions {
|
|
59
|
+
/**
|
|
60
|
+
* Whether startup warns about seeded documents the bound
|
|
61
|
+
* `FileSystemProvider` cannot serve (see
|
|
62
|
+
* {@link HydraniumWorkspaceManager.warnIfDocumentsUnserved}). Defaults to
|
|
63
|
+
* `true`; turn it off for a host that drops such documents at their last
|
|
64
|
+
* close on purpose.
|
|
65
|
+
*/
|
|
66
|
+
warnUnservedDocuments?: boolean;
|
|
67
|
+
}
|
|
56
68
|
/**
|
|
57
69
|
* Framework {@link DefaultWorkspaceManager} subclass that integrates the
|
|
58
70
|
* project tier with Langium's workspace startup.
|
|
@@ -85,8 +97,8 @@ export declare function installOperationCancelledSuppression(logger: Logger): vo
|
|
|
85
97
|
* URIs (its own members plus any transitive dependents per the
|
|
86
98
|
* `getAffectedProjects` hook). This manager re-runs
|
|
87
99
|
* `DocumentBuilder.resetToState(doc, DocumentState.Changed)` on each
|
|
88
|
-
* affected document so the
|
|
89
|
-
* visibility scope.
|
|
100
|
+
* affected document so the build of the update that changed the descriptor
|
|
101
|
+
* re-links them with the new visibility scope.
|
|
90
102
|
*
|
|
91
103
|
* Descriptor URIs that triggered the cycle are intentionally excluded
|
|
92
104
|
* from the affected set by `AbstractProjectManager.onBuildUpdate` —
|
|
@@ -114,11 +126,17 @@ export declare class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
114
126
|
*/
|
|
115
127
|
readonly workspaceInitialized: Promise<unknown>;
|
|
116
128
|
protected readonly uriPolicy: DocumentUriPolicy;
|
|
129
|
+
/** Handed the client's locale at init; read by whoever renders in it. */
|
|
130
|
+
protected readonly serverLocale: ServerLocale;
|
|
117
131
|
protected readonly writableFileSystemProvider: WritableFileSystemProvider;
|
|
118
132
|
protected readonly additionalDocuments: Record<string, AdditionalDocumentContribution>;
|
|
119
133
|
/** Registry consulted by {@link warnIfUnroutable} to check a seeded document routes. */
|
|
120
134
|
protected readonly languageRegistry: ServerSharedServicesMinimal['ServiceRegistry'];
|
|
121
|
-
|
|
135
|
+
/** Whether startup runs {@link warnIfDocumentsUnserved}. */
|
|
136
|
+
protected readonly warnUnservedDocuments: boolean;
|
|
137
|
+
/** URIs of the documents the running startup's file traversal loaded; see {@link loadWorkspaceDocuments}. */
|
|
138
|
+
protected readonly traversedUris: Set<string>;
|
|
139
|
+
constructor(services: ServerSharedServicesMinimal, options?: HydraniumWorkspaceManagerOptions);
|
|
122
140
|
/**
|
|
123
141
|
* Contribution form of Langium's `loadAdditionalDocuments`. Runs the base
|
|
124
142
|
* behaviour first (a no-op unless a further subclass adds documents), then
|
|
@@ -150,6 +168,40 @@ export declare class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
150
168
|
*/
|
|
151
169
|
protected warnIfUnroutable(document: LangiumDocument): void;
|
|
152
170
|
protected performStartup(folders: WorkspaceFolder[]): Promise<LangiumDocument[]>;
|
|
171
|
+
/**
|
|
172
|
+
* Record each document the file traversal loads, so startup can tell them
|
|
173
|
+
* from the documents `loadAdditionalDocuments` seeded, through the
|
|
174
|
+
* `additionalDocuments` group or an override of its own.
|
|
175
|
+
*
|
|
176
|
+
* The traversal found each of its documents through the provider, so asking
|
|
177
|
+
* it again whether they exist costs one call per workspace file and cannot
|
|
178
|
+
* come out false. Telling them apart by scheme does not work either: the
|
|
179
|
+
* registry's host answers every scheme no other provider claims, a seeded
|
|
180
|
+
* scheme nobody serves included. An override that loads documents without
|
|
181
|
+
* delegating here leaves them unrecorded, so startup asks the provider
|
|
182
|
+
* about each of them.
|
|
183
|
+
*/
|
|
184
|
+
protected loadWorkspaceDocuments(uris: Stream<URI>, collector: (document: LangiumDocument) => void): Promise<void>;
|
|
185
|
+
/**
|
|
186
|
+
* Warn once when the bound `FileSystemProvider` cannot serve a seeded
|
|
187
|
+
* document, naming each such document's scheme.
|
|
188
|
+
*
|
|
189
|
+
* The last close keeps a document only if the provider says it `exists`, so
|
|
190
|
+
* each such document leaves the workspace the first time an editor closes
|
|
191
|
+
* it, and whatever resolved against it breaks. The framework's registry
|
|
192
|
+
* serves `virtual:` through the `fileSystemProviders` group and every other
|
|
193
|
+
* scheme through its host, which knows nothing of a scheme an adopter
|
|
194
|
+
* invented for its seeded documents, and nothing else reports the loss. A
|
|
195
|
+
* provider that throws counts as not serving the document, since a startup
|
|
196
|
+
* that failed on a diagnostic would be worse than the loss.
|
|
197
|
+
*
|
|
198
|
+
* Runs over every document startup collected outside the file traversal,
|
|
199
|
+
* which is what `loadAdditionalDocuments` seeded, through the
|
|
200
|
+
* `additionalDocuments` group or an override of that method, once startup
|
|
201
|
+
* has added them to the workspace, unless `warnUnservedDocuments` is
|
|
202
|
+
* `false`.
|
|
203
|
+
*/
|
|
204
|
+
protected warnIfDocumentsUnserved(documents: readonly LangiumDocument[]): Promise<void>;
|
|
153
205
|
/**
|
|
154
206
|
* Add back the documents project discovery created that Langium's file
|
|
155
207
|
* traversal then filtered out.
|
|
@@ -199,6 +251,23 @@ export declare class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
199
251
|
* server's file name and the harness's correlation key agree.
|
|
200
252
|
*/
|
|
201
253
|
protected resolveWorkspaceLogTarget(folders: WorkspaceFolder[]): void;
|
|
254
|
+
/**
|
|
255
|
+
* Forward the locale the client declared, then Langium's own read of the
|
|
256
|
+
* params. `DefaultWorkspaceManager.initialize` reads `workspaceFolders`
|
|
257
|
+
* alone, so `params.locale` would otherwise be discarded — and this is the
|
|
258
|
+
* only place it arrives, which the headless init seams route through too.
|
|
259
|
+
*
|
|
260
|
+
* **The ABSENT case is reported from here rather than from `ServerLocale`,
|
|
261
|
+
* because this is the only end that can see it.** `accept` is not called
|
|
262
|
+
* when no locale was declared — nor should it be, since `''` is a claim
|
|
263
|
+
* about a language rather than the absence of one — so a log written there
|
|
264
|
+
* covers one of the two outcomes and leaves the other looking like a server
|
|
265
|
+
* that never reached init. Both lines are at `info` for the reason `accept`
|
|
266
|
+
* gives: the framework ships no catalogue, so an undeclared locale and an
|
|
267
|
+
* untranslated code produce the same English and the log is what separates
|
|
268
|
+
* them.
|
|
269
|
+
*/
|
|
270
|
+
initialize(params: InitializeParams): void;
|
|
202
271
|
/**
|
|
203
272
|
* Override of Langium's workspace setup to resolve / reject
|
|
204
273
|
* {@link workspaceInitializedDeferred} once setup completes. Adopters with
|
|
@@ -206,13 +275,17 @@ export declare class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
206
275
|
* and either delegate to `super.initializeWorkspace(...)` (preserving the
|
|
207
276
|
* default resolve) or call `this.workspaceInitializedDeferred.resolve(...)`
|
|
208
277
|
* themselves after the additional work finishes.
|
|
278
|
+
*
|
|
279
|
+
* A failed setup is logged here, since every framework waiter on
|
|
280
|
+
* {@link workspaceInitialized} discards the rejection; an override that
|
|
281
|
+
* rejects the deferred itself logs its own failure.
|
|
209
282
|
*/
|
|
210
283
|
initializeWorkspace(folders: WorkspaceFolder[], cancelToken?: CancellationToken): Promise<void>;
|
|
211
284
|
/**
|
|
212
285
|
* Default cascade-rebuild handler. Iterates {@link ProjectChangeEvent.affectedDocuments}
|
|
213
|
-
* and resets each to {@link DocumentState.Changed} so the
|
|
214
|
-
* re-runs the pipeline (parse → link → validate)
|
|
215
|
-
* visibility scope.
|
|
286
|
+
* and resets each to {@link DocumentState.Changed} so the build of the update
|
|
287
|
+
* that changed the descriptor re-runs the pipeline (parse → link → validate)
|
|
288
|
+
* under the new project visibility scope.
|
|
216
289
|
*
|
|
217
290
|
* Subclasses can override for additional behaviour (e.g. logging,
|
|
218
291
|
* telemetry, custom rebuild policies); call `super` to preserve the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-workspace-manager.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"hydranium-workspace-manager.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { Deferred } from '@hydranium/protocol';
|
|
10
|
-
import { DefaultWorkspaceManager, DocumentState, UriUtils } from '@hydranium/langium';
|
|
10
|
+
import { DefaultWorkspaceManager, DocumentState, isOperationCancelled, UriUtils } from '@hydranium/langium';
|
|
11
11
|
import { resolveLogFilePlaceholder, toLogFileWorkspaceToken } from '../diagnostics/logger.js';
|
|
12
12
|
import { findRealpathDivergence } from './document-uri-policy.js';
|
|
13
13
|
import { collectAdditionalDocuments } from './additional-document-contribution.js';
|
|
14
14
|
import { onProcessEvent } from '../../util/environment.js';
|
|
15
|
+
import { isConnectionGoneError } from '../../util/connection-liveness.js';
|
|
15
16
|
/**
|
|
16
17
|
* Module-level guard so repeated workspace-manager construction (e.g.
|
|
17
18
|
* test environments creating multiple instances across files) doesn't
|
|
@@ -112,8 +113,8 @@ export function installOperationCancelledSuppression(logger) {
|
|
|
112
113
|
* URIs (its own members plus any transitive dependents per the
|
|
113
114
|
* `getAffectedProjects` hook). This manager re-runs
|
|
114
115
|
* `DocumentBuilder.resetToState(doc, DocumentState.Changed)` on each
|
|
115
|
-
* affected document so the
|
|
116
|
-
* visibility scope.
|
|
116
|
+
* affected document so the build of the update that changed the descriptor
|
|
117
|
+
* re-links them with the new visibility scope.
|
|
117
118
|
*
|
|
118
119
|
* Descriptor URIs that triggered the cycle are intentionally excluded
|
|
119
120
|
* from the affected set by `AbstractProjectManager.onBuildUpdate` —
|
|
@@ -141,18 +142,26 @@ export class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
141
142
|
*/
|
|
142
143
|
workspaceInitialized = this.workspaceInitializedDeferred.promise;
|
|
143
144
|
uriPolicy;
|
|
145
|
+
/** Handed the client's locale at init; read by whoever renders in it. */
|
|
146
|
+
serverLocale;
|
|
144
147
|
writableFileSystemProvider;
|
|
145
148
|
additionalDocuments;
|
|
146
149
|
/** Registry consulted by {@link warnIfUnroutable} to check a seeded document routes. */
|
|
147
150
|
languageRegistry;
|
|
151
|
+
/** Whether startup runs {@link warnIfDocumentsUnserved}. */
|
|
152
|
+
warnUnservedDocuments;
|
|
153
|
+
/** URIs of the documents the running startup's file traversal loaded; see {@link loadWorkspaceDocuments}. */
|
|
154
|
+
traversedUris = new Set();
|
|
148
155
|
constructor(services, options = {}) {
|
|
149
156
|
super(services);
|
|
150
157
|
this.projectManager = services.workspace.ProjectManager;
|
|
151
158
|
this.projectManager.onProjectsChanged(event => this.onProjectsChanged(event));
|
|
152
159
|
this.uriPolicy = services.workspace.DocumentUriPolicy;
|
|
160
|
+
this.serverLocale = services.ServerLocale;
|
|
153
161
|
this.writableFileSystemProvider = services.workspace.FileSystemProvider;
|
|
154
162
|
this.additionalDocuments = services.additionalDocuments;
|
|
155
163
|
this.languageRegistry = services.ServiceRegistry;
|
|
164
|
+
this.warnUnservedDocuments = options.warnUnservedDocuments ?? true;
|
|
156
165
|
this.tracer = services.Tracer.for(options.logName ?? 'WorkspaceManager').trace('instantiated');
|
|
157
166
|
installOperationCancelledSuppression(this.tracer);
|
|
158
167
|
}
|
|
@@ -177,14 +186,14 @@ export class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
177
186
|
// seeded. `tags` is read at the done-emit, so the document count pushed
|
|
178
187
|
// inside the callback appears in the log line.
|
|
179
188
|
const tags = [`${contributions.length} contributions`];
|
|
180
|
-
|
|
189
|
+
const seeded = [];
|
|
181
190
|
await this.tracer.time('Load additional documents', async () => {
|
|
182
191
|
await collectAdditionalDocuments(this.additionalDocuments, folders, document => {
|
|
183
|
-
|
|
192
|
+
seeded.push(document);
|
|
184
193
|
this.warnIfUnroutable(document);
|
|
185
194
|
collector(document);
|
|
186
195
|
});
|
|
187
|
-
tags.push(`${
|
|
196
|
+
tags.push(`${seeded.length} documents`);
|
|
188
197
|
}, 'info', { logAfterMs: 0, tags });
|
|
189
198
|
}
|
|
190
199
|
/**
|
|
@@ -239,10 +248,83 @@ export class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
239
248
|
discovered.push(document);
|
|
240
249
|
}
|
|
241
250
|
}
|
|
242
|
-
|
|
251
|
+
this.traversedUris.clear();
|
|
252
|
+
let documents;
|
|
253
|
+
try {
|
|
254
|
+
documents = await super.performStartup(folders);
|
|
255
|
+
if (this.warnUnservedDocuments) {
|
|
256
|
+
await this.warnIfDocumentsUnserved(documents.filter(document => !this.traversedUris.has(document.uri.toString())));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
finally {
|
|
260
|
+
this.traversedUris.clear();
|
|
261
|
+
}
|
|
243
262
|
this.probePathDivergence(folders);
|
|
244
263
|
return this.withDiscoveredDescriptors(documents, discovered);
|
|
245
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Record each document the file traversal loads, so startup can tell them
|
|
267
|
+
* from the documents `loadAdditionalDocuments` seeded, through the
|
|
268
|
+
* `additionalDocuments` group or an override of its own.
|
|
269
|
+
*
|
|
270
|
+
* The traversal found each of its documents through the provider, so asking
|
|
271
|
+
* it again whether they exist costs one call per workspace file and cannot
|
|
272
|
+
* come out false. Telling them apart by scheme does not work either: the
|
|
273
|
+
* registry's host answers every scheme no other provider claims, a seeded
|
|
274
|
+
* scheme nobody serves included. An override that loads documents without
|
|
275
|
+
* delegating here leaves them unrecorded, so startup asks the provider
|
|
276
|
+
* about each of them.
|
|
277
|
+
*/
|
|
278
|
+
async loadWorkspaceDocuments(uris, collector) {
|
|
279
|
+
await super.loadWorkspaceDocuments(uris, document => {
|
|
280
|
+
this.traversedUris.add(document.uri.toString());
|
|
281
|
+
collector(document);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Warn once when the bound `FileSystemProvider` cannot serve a seeded
|
|
286
|
+
* document, naming each such document's scheme.
|
|
287
|
+
*
|
|
288
|
+
* The last close keeps a document only if the provider says it `exists`, so
|
|
289
|
+
* each such document leaves the workspace the first time an editor closes
|
|
290
|
+
* it, and whatever resolved against it breaks. The framework's registry
|
|
291
|
+
* serves `virtual:` through the `fileSystemProviders` group and every other
|
|
292
|
+
* scheme through its host, which knows nothing of a scheme an adopter
|
|
293
|
+
* invented for its seeded documents, and nothing else reports the loss. A
|
|
294
|
+
* provider that throws counts as not serving the document, since a startup
|
|
295
|
+
* that failed on a diagnostic would be worse than the loss.
|
|
296
|
+
*
|
|
297
|
+
* Runs over every document startup collected outside the file traversal,
|
|
298
|
+
* which is what `loadAdditionalDocuments` seeded, through the
|
|
299
|
+
* `additionalDocuments` group or an override of that method, once startup
|
|
300
|
+
* has added them to the workspace, unless `warnUnservedDocuments` is
|
|
301
|
+
* `false`.
|
|
302
|
+
*/
|
|
303
|
+
async warnIfDocumentsUnserved(documents) {
|
|
304
|
+
const unserved = [];
|
|
305
|
+
for (const document of documents) {
|
|
306
|
+
let served = false;
|
|
307
|
+
try {
|
|
308
|
+
served = await this.writableFileSystemProvider.exists(document.uri);
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
// Counted as unserved, below.
|
|
312
|
+
}
|
|
313
|
+
if (!served) {
|
|
314
|
+
unserved.push(document.uri);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
if (unserved.length === 0) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
const schemes = [...new Set(unserved.map(uri => uri.scheme))];
|
|
321
|
+
const named = unserved.slice(0, 3).map(uri => uri.toString());
|
|
322
|
+
this.tracer.warn(`${unserved.length} seeded document(s) under ${schemes.map(scheme => `${scheme}:`).join(', ')} cannot be served by the bound workspace.FileSystemProvider ` +
|
|
323
|
+
`(${named.join(', ')}${unserved.length > 3 ? ', …' : ''}), so each leaves the workspace at its ` +
|
|
324
|
+
`last close. Register a provider under the key ${schemes.map(scheme => `'${scheme}'`).join(', ')} in the shared ` +
|
|
325
|
+
'fileSystemProviders group, or serve the scheme from the host provider; set warnUnservedDocuments: false ' +
|
|
326
|
+
'to accept the loss.');
|
|
327
|
+
}
|
|
246
328
|
/**
|
|
247
329
|
* Add back the documents project discovery created that Langium's file
|
|
248
330
|
* traversal then filtered out.
|
|
@@ -325,6 +407,31 @@ export class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
325
407
|
resolveLogFilePlaceholder('workspace', toLogFileWorkspaceToken(first.uri));
|
|
326
408
|
}
|
|
327
409
|
}
|
|
410
|
+
/**
|
|
411
|
+
* Forward the locale the client declared, then Langium's own read of the
|
|
412
|
+
* params. `DefaultWorkspaceManager.initialize` reads `workspaceFolders`
|
|
413
|
+
* alone, so `params.locale` would otherwise be discarded — and this is the
|
|
414
|
+
* only place it arrives, which the headless init seams route through too.
|
|
415
|
+
*
|
|
416
|
+
* **The ABSENT case is reported from here rather than from `ServerLocale`,
|
|
417
|
+
* because this is the only end that can see it.** `accept` is not called
|
|
418
|
+
* when no locale was declared — nor should it be, since `''` is a claim
|
|
419
|
+
* about a language rather than the absence of one — so a log written there
|
|
420
|
+
* covers one of the two outcomes and leaves the other looking like a server
|
|
421
|
+
* that never reached init. Both lines are at `info` for the reason `accept`
|
|
422
|
+
* gives: the framework ships no catalogue, so an undeclared locale and an
|
|
423
|
+
* untranslated code produce the same English and the log is what separates
|
|
424
|
+
* them.
|
|
425
|
+
*/
|
|
426
|
+
initialize(params) {
|
|
427
|
+
if (params.locale) {
|
|
428
|
+
this.serverLocale.accept(params.locale);
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
this.tracer.info("no locale declared at init — rendering messages in the framework's English");
|
|
432
|
+
}
|
|
433
|
+
super.initialize(params);
|
|
434
|
+
}
|
|
328
435
|
/**
|
|
329
436
|
* Override of Langium's workspace setup to resolve / reject
|
|
330
437
|
* {@link workspaceInitializedDeferred} once setup completes. Adopters with
|
|
@@ -332,6 +439,10 @@ export class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
332
439
|
* and either delegate to `super.initializeWorkspace(...)` (preserving the
|
|
333
440
|
* default resolve) or call `this.workspaceInitializedDeferred.resolve(...)`
|
|
334
441
|
* themselves after the additional work finishes.
|
|
442
|
+
*
|
|
443
|
+
* A failed setup is logged here, since every framework waiter on
|
|
444
|
+
* {@link workspaceInitialized} discards the rejection; an override that
|
|
445
|
+
* rejects the deferred itself logs its own failure.
|
|
335
446
|
*/
|
|
336
447
|
async initializeWorkspace(folders, cancelToken) {
|
|
337
448
|
try {
|
|
@@ -339,15 +450,22 @@ export class HydraniumWorkspaceManager extends DefaultWorkspaceManager {
|
|
|
339
450
|
this.workspaceInitializedDeferred.resolve(undefined);
|
|
340
451
|
}
|
|
341
452
|
catch (error) {
|
|
453
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
454
|
+
if (isOperationCancelled(error) || isConnectionGoneError(error)) {
|
|
455
|
+
this.tracer.debug(`Initial workspace build did not complete: ${message}`);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
this.tracer.error(`Initial workspace build failed: ${message}`);
|
|
459
|
+
}
|
|
342
460
|
this.workspaceInitializedDeferred.reject(error);
|
|
343
461
|
throw error;
|
|
344
462
|
}
|
|
345
463
|
}
|
|
346
464
|
/**
|
|
347
465
|
* Default cascade-rebuild handler. Iterates {@link ProjectChangeEvent.affectedDocuments}
|
|
348
|
-
* and resets each to {@link DocumentState.Changed} so the
|
|
349
|
-
* re-runs the pipeline (parse → link → validate)
|
|
350
|
-
* visibility scope.
|
|
466
|
+
* and resets each to {@link DocumentState.Changed} so the build of the update
|
|
467
|
+
* that changed the descriptor re-runs the pipeline (parse → link → validate)
|
|
468
|
+
* under the new project visibility scope.
|
|
351
469
|
*
|
|
352
470
|
* Subclasses can override for additional behaviour (e.g. logging,
|
|
353
471
|
* telemetry, custom rebuild policies); call `super` to preserve the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydranium-workspace-manager.js","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,QAAQ,EAA4B,MAAM,qBAAqB,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"hydranium-workspace-manager.js","sourceRoot":"","sources":["../../../src/langium/workspace/hydranium-workspace-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,9 +8,32 @@
|
|
|
8
8
|
********************************************************************************/
|
|
9
9
|
import { type FileSystemNode, URI } from '@hydranium/langium';
|
|
10
10
|
import { type Tracer } from '@hydranium/protocol';
|
|
11
|
-
import { type WritableFileSystemProvider } from '
|
|
11
|
+
import { type WritableFileSystemProvider } from './file-system-provider.js';
|
|
12
12
|
import { type LogNameOptions } from '../diagnostics/logger.js';
|
|
13
13
|
import { type ServerSharedServicesMinimal } from '../shared-services.js';
|
|
14
|
+
/**
|
|
15
|
+
* A provider's spelling of "the document is not there", raised wherever a read
|
|
16
|
+
* finds no content — this filesystem, or a URI naming no location a disk-backed
|
|
17
|
+
* provider can reach. Distinct from `NO_LOADABLE_CONTENT`, which the URI policy
|
|
18
|
+
* raises when it can settle the question AHEAD of the read; a provider with no
|
|
19
|
+
* `realpath` cannot, so the miss surfaces here instead.
|
|
20
|
+
*/
|
|
21
|
+
export declare const NO_SUCH_FILE: import("@hydranium/protocol").MessageDefinition<"No such file: {uri}">;
|
|
22
|
+
/** The same for a node of any kind, so it also covers a directory. */
|
|
23
|
+
export declare const NO_SUCH_PATH: import("@hydranium/protocol").MessageDefinition<"No such file or directory: {uri}">;
|
|
24
|
+
/**
|
|
25
|
+
* A write addressed a URI the provider cannot reach on disk.
|
|
26
|
+
*
|
|
27
|
+
* Deliberately not a not-found code: {@link NO_SUCH_FILE} reports something
|
|
28
|
+
* missing, which a caller may reasonably answer by creating it — exactly the
|
|
29
|
+
* wrong reading here. The destination is not missing; the URI names no disk
|
|
30
|
+
* location at all, and no retry makes it one.
|
|
31
|
+
*
|
|
32
|
+
* Declared here rather than beside the Node provider that raises it, so the
|
|
33
|
+
* message catalog stays reachable from the portable `.` entry — the Node
|
|
34
|
+
* module pulls `node:fs` and is server-only.
|
|
35
|
+
*/
|
|
36
|
+
export declare const UNSUPPORTED_WRITE: import("@hydranium/protocol").MessageDefinition<"Cannot write {uri}: the scheme names no location on disk">;
|
|
14
37
|
/**
|
|
15
38
|
* File content keyed by path, for seeding an {@link InMemoryFileSystemProvider}.
|
|
16
39
|
*
|
|
@@ -118,8 +141,8 @@ export declare class InMemoryFileSystemProvider implements WritableFileSystemPro
|
|
|
118
141
|
* services context exactly where a Node host spreads `NodeFileSystem`.
|
|
119
142
|
*
|
|
120
143
|
* A host that needs to reach the provider afterwards — to seed or mutate it
|
|
121
|
-
* mid-test —
|
|
122
|
-
* slot owns construction.
|
|
144
|
+
* mid-test — narrows `shared.workspace.FileSystemProvider.host` to this
|
|
145
|
+
* class, since the slot owns construction.
|
|
123
146
|
*/
|
|
124
147
|
export declare function inMemoryFileSystem(options?: InMemoryFileSystemOptions): {
|
|
125
148
|
fileSystemProvider: (services: unknown) => WritableFileSystemProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory-file-system-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/in-memory-file-system-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,cAAc,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"in-memory-file-system-provider.d.ts","sourceRoot":"","sources":["../../../src/langium/workspace/in-memory-file-system-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,cAAc,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAuB,KAAK,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAG9F;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,wEAAsE,CAAC;AAEhG,sEAAsE;AACtE,eAAO,MAAM,YAAY,qFAAmF,CAAC;AAE7G;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,6GAG7B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,qFAAqF;AACrF,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC9D,wEAAwE;IACxE,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBAAa,0BAA2B,YAAW,0BAA0B;IAKvE,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B;IAJ3D,SAAS,CAAC,QAAQ,CAAC,KAAK,sBAA6B;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,YACsB,QAAQ,EAAE,2BAA2B,EACxD,OAAO,GAAE,yBAA8B,EASzC;IAED;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEvC;IAED,+DAA+D;IAC/D,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAEzB;IAEK,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;IAQK,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAExC;IAED,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAM7B;IAEK,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAE9C;IAED,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,UAAU,CAEnC;IAEK,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5C;IAED,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,CASjC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjC;IAED,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAG5B;IAED,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAEjD;IAED,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,EAAE,CAmB5C;IAED;;;;;;;;;OASG;IACH,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,CAE3C;IAED,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ3C;CACH;AAYD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG;IAC1E,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,0BAA0B,CAAC;CACxE,CAIA"}
|