@hydranium/core 1.0.0-next.31 → 1.0.0-next.313

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.
Files changed (769) hide show
  1. package/README.md +78 -82
  2. package/lib/browser/host-heads-in-worker.d.ts +77 -0
  3. package/lib/browser/host-heads-in-worker.d.ts.map +1 -0
  4. package/lib/browser/host-heads-in-worker.js +169 -0
  5. package/lib/browser/host-heads-in-worker.js.map +1 -0
  6. package/lib/browser/index.d.ts +12 -0
  7. package/lib/browser/index.d.ts.map +1 -0
  8. package/lib/browser/index.js +17 -0
  9. package/lib/browser/index.js.map +1 -0
  10. package/lib/browser/indexeddb-file-system-store.d.ts +82 -0
  11. package/lib/browser/indexeddb-file-system-store.d.ts.map +1 -0
  12. package/lib/browser/indexeddb-file-system-store.js +181 -0
  13. package/lib/browser/indexeddb-file-system-store.js.map +1 -0
  14. package/lib/browser/start-language-server-in-worker.d.ts +32 -0
  15. package/lib/browser/start-language-server-in-worker.d.ts.map +1 -0
  16. package/lib/browser/start-language-server-in-worker.js +40 -0
  17. package/lib/browser/start-language-server-in-worker.js.map +1 -0
  18. package/lib/documents/ast-document-manager.d.ts +256 -124
  19. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  20. package/lib/documents/ast-document-manager.js +293 -132
  21. package/lib/documents/ast-document-manager.js.map +1 -1
  22. package/lib/documents/client-ids.d.ts +5 -19
  23. package/lib/documents/client-ids.d.ts.map +1 -1
  24. package/lib/documents/client-ids.js +5 -19
  25. package/lib/documents/client-ids.js.map +1 -1
  26. package/lib/documents/client-session-errors.d.ts +15 -0
  27. package/lib/documents/client-session-errors.d.ts.map +1 -0
  28. package/lib/documents/client-session-errors.js +15 -0
  29. package/lib/documents/client-session-errors.js.map +1 -0
  30. package/lib/documents/client-session-registry.d.ts +146 -0
  31. package/lib/documents/client-session-registry.d.ts.map +1 -0
  32. package/lib/documents/client-session-registry.js +207 -0
  33. package/lib/documents/client-session-registry.js.map +1 -0
  34. package/lib/documents/dirty-state-tracker.d.ts +101 -0
  35. package/lib/documents/dirty-state-tracker.d.ts.map +1 -0
  36. package/lib/documents/dirty-state-tracker.js +85 -0
  37. package/lib/documents/dirty-state-tracker.js.map +1 -0
  38. package/lib/documents/document-release-handler.d.ts +204 -0
  39. package/lib/documents/document-release-handler.d.ts.map +1 -0
  40. package/lib/documents/document-release-handler.js +317 -0
  41. package/lib/documents/document-release-handler.js.map +1 -0
  42. package/lib/documents/document-release-scheduler.d.ts +67 -0
  43. package/lib/documents/document-release-scheduler.d.ts.map +1 -0
  44. package/lib/documents/document-release-scheduler.js +80 -0
  45. package/lib/documents/document-release-scheduler.js.map +1 -0
  46. package/lib/documents/file-system-task-queue.d.ts +52 -0
  47. package/lib/documents/file-system-task-queue.d.ts.map +1 -0
  48. package/lib/documents/file-system-task-queue.js +37 -0
  49. package/lib/documents/file-system-task-queue.js.map +1 -0
  50. package/lib/documents/hydranium-text-documents.d.ts +436 -282
  51. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  52. package/lib/documents/hydranium-text-documents.js +897 -483
  53. package/lib/documents/hydranium-text-documents.js.map +1 -1
  54. package/lib/documents/index.d.ts +10 -2
  55. package/lib/documents/index.d.ts.map +1 -1
  56. package/lib/documents/index.js +10 -2
  57. package/lib/documents/index.js.map +1 -1
  58. package/lib/documents/language-client-shadow.d.ts +234 -0
  59. package/lib/documents/language-client-shadow.d.ts.map +1 -0
  60. package/lib/documents/language-client-shadow.js +306 -0
  61. package/lib/documents/language-client-shadow.js.map +1 -0
  62. package/lib/documents/model-ledger.d.ts +47 -0
  63. package/lib/documents/model-ledger.d.ts.map +1 -0
  64. package/lib/documents/model-ledger.js +30 -0
  65. package/lib/documents/model-ledger.js.map +1 -0
  66. package/lib/documents/text-ledger.d.ts +64 -0
  67. package/lib/documents/text-ledger.d.ts.map +1 -0
  68. package/lib/documents/text-ledger.js +63 -0
  69. package/lib/documents/text-ledger.js.map +1 -0
  70. package/lib/documents/version-sync-service.d.ts +138 -0
  71. package/lib/documents/version-sync-service.d.ts.map +1 -0
  72. package/lib/documents/version-sync-service.js +173 -0
  73. package/lib/documents/version-sync-service.js.map +1 -0
  74. package/lib/index.d.ts +5 -0
  75. package/lib/index.d.ts.map +1 -1
  76. package/lib/index.js +8 -0
  77. package/lib/index.js.map +1 -1
  78. package/lib/langium/ast-extension/ast-extension-service.d.ts +42 -31
  79. package/lib/langium/ast-extension/ast-extension-service.d.ts.map +1 -1
  80. package/lib/langium/ast-extension/ast-extension-service.js +45 -19
  81. package/lib/langium/ast-extension/ast-extension-service.js.map +1 -1
  82. package/lib/langium/bootstrap.d.ts +49 -36
  83. package/lib/langium/bootstrap.d.ts.map +1 -1
  84. package/lib/langium/bootstrap.js +91 -45
  85. package/lib/langium/bootstrap.js.map +1 -1
  86. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +9 -9
  87. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
  88. package/lib/langium/build-phase-pass/build-phase-pass-service.js +25 -16
  89. package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
  90. package/lib/langium/build-phase-pass/build-phase-pass.d.ts +20 -8
  91. package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -1
  92. package/lib/langium/build-phase-pass/build-phase-pass.js +20 -0
  93. package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -1
  94. package/lib/langium/composite-ast-reflection.d.ts +46 -0
  95. package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
  96. package/lib/langium/composite-ast-reflection.js +97 -0
  97. package/lib/langium/composite-ast-reflection.js.map +1 -0
  98. package/lib/langium/config/configuration-provider.d.ts +81 -0
  99. package/lib/langium/config/configuration-provider.d.ts.map +1 -0
  100. package/lib/langium/config/configuration-provider.js +112 -0
  101. package/lib/langium/config/configuration-provider.js.map +1 -0
  102. package/lib/langium/config/index.d.ts +1 -0
  103. package/lib/langium/config/index.d.ts.map +1 -1
  104. package/lib/langium/config/index.js +1 -0
  105. package/lib/langium/config/index.js.map +1 -1
  106. package/lib/langium/config/settings.js.map +1 -1
  107. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
  108. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
  109. package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
  110. package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
  111. package/lib/langium/diagnostics/log-preamble.js +1 -1
  112. package/lib/langium/diagnostics/log-preamble.js.map +1 -1
  113. package/lib/langium/diagnostics/logger.d.ts +19 -4
  114. package/lib/langium/diagnostics/logger.d.ts.map +1 -1
  115. package/lib/langium/diagnostics/logger.js +36 -11
  116. package/lib/langium/diagnostics/logger.js.map +1 -1
  117. package/lib/langium/diagnostics/lsp-logger.d.ts +17 -0
  118. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
  119. package/lib/langium/diagnostics/lsp-logger.js +58 -17
  120. package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
  121. package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
  122. package/lib/langium/diagnostics/server-tracer.js.map +1 -1
  123. package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
  124. package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
  125. package/lib/langium/document-builder/build-pipeline-integration.js +28 -30
  126. package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
  127. package/lib/langium/document-builder/build-session.d.ts +6 -5
  128. package/lib/langium/document-builder/build-session.d.ts.map +1 -1
  129. package/lib/langium/document-builder/build-session.js +5 -5
  130. package/lib/langium/document-builder/build-session.js.map +1 -1
  131. package/lib/langium/document-builder/document-builder.d.ts +309 -35
  132. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  133. package/lib/langium/document-builder/document-builder.js +511 -75
  134. package/lib/langium/document-builder/document-builder.js.map +1 -1
  135. package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
  136. package/lib/langium/documentation/comment-provider.js.map +1 -1
  137. package/lib/langium/integration-services.d.ts +40 -24
  138. package/lib/langium/integration-services.d.ts.map +1 -1
  139. package/lib/langium/integration-services.js +7 -4
  140. package/lib/langium/integration-services.js.map +1 -1
  141. package/lib/langium/integrity/integrity-rule.d.ts +16 -8
  142. package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
  143. package/lib/langium/integrity/integrity-rule.js.map +1 -1
  144. package/lib/langium/integrity/integrity-service.d.ts +83 -27
  145. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  146. package/lib/langium/integrity/integrity-service.js +273 -63
  147. package/lib/langium/integrity/integrity-service.js.map +1 -1
  148. package/lib/langium/keys/containment.d.ts +64 -0
  149. package/lib/langium/keys/containment.d.ts.map +1 -0
  150. package/lib/langium/keys/containment.js +53 -0
  151. package/lib/langium/keys/containment.js.map +1 -0
  152. package/lib/langium/keys/index.d.ts +1 -0
  153. package/lib/langium/keys/index.d.ts.map +1 -1
  154. package/lib/langium/keys/index.js +1 -0
  155. package/lib/langium/keys/index.js.map +1 -1
  156. package/lib/langium/keys/name-based-key-provider.d.ts +4 -0
  157. package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
  158. package/lib/langium/keys/name-based-key-provider.js +4 -0
  159. package/lib/langium/keys/name-based-key-provider.js.map +1 -1
  160. package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
  161. package/lib/langium/keys/positional-key-provider.js.map +1 -1
  162. package/lib/langium/labeling/label-provider.d.ts.map +1 -1
  163. package/lib/langium/labeling/label-provider.js.map +1 -1
  164. package/lib/langium/language-module.d.ts +30 -5
  165. package/lib/langium/language-module.d.ts.map +1 -1
  166. package/lib/langium/language-module.js +18 -4
  167. package/lib/langium/language-module.js.map +1 -1
  168. package/lib/langium/model-service/client-session.d.ts +383 -0
  169. package/lib/langium/model-service/client-session.d.ts.map +1 -0
  170. package/lib/langium/model-service/client-session.js +455 -0
  171. package/lib/langium/model-service/client-session.js.map +1 -0
  172. package/lib/langium/model-service/index.d.ts +2 -0
  173. package/lib/langium/model-service/index.d.ts.map +1 -1
  174. package/lib/langium/model-service/index.js +2 -0
  175. package/lib/langium/model-service/index.js.map +1 -1
  176. package/lib/langium/model-service/model-events.d.ts +66 -0
  177. package/lib/langium/model-service/model-events.d.ts.map +1 -0
  178. package/lib/langium/model-service/model-events.js +10 -0
  179. package/lib/langium/model-service/model-events.js.map +1 -0
  180. package/lib/langium/model-service/model-service.d.ts +480 -289
  181. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  182. package/lib/langium/model-service/model-service.js +597 -456
  183. package/lib/langium/model-service/model-service.js.map +1 -1
  184. package/lib/langium/module.d.ts +158 -37
  185. package/lib/langium/module.d.ts.map +1 -1
  186. package/lib/langium/module.js +52 -36
  187. package/lib/langium/module.js.map +1 -1
  188. package/lib/langium/naming/name-provider.d.ts +42 -7
  189. package/lib/langium/naming/name-provider.d.ts.map +1 -1
  190. package/lib/langium/naming/name-provider.js +10 -4
  191. package/lib/langium/naming/name-provider.js.map +1 -1
  192. package/lib/langium/naming/name-separator-validation.d.ts +23 -1
  193. package/lib/langium/naming/name-separator-validation.d.ts.map +1 -1
  194. package/lib/langium/naming/name-separator-validation.js +22 -0
  195. package/lib/langium/naming/name-separator-validation.js.map +1 -1
  196. package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
  197. package/lib/langium/project/abstract-project-manager.js +13 -6
  198. package/lib/langium/project/abstract-project-manager.js.map +1 -1
  199. package/lib/langium/project/project-change-event.d.ts +2 -2
  200. package/lib/langium/project/single-project-manager.d.ts.map +1 -1
  201. package/lib/langium/project/single-project-manager.js.map +1 -1
  202. package/lib/langium/residency/cst-residency-service.d.ts +38 -14
  203. package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
  204. package/lib/langium/residency/cst-residency-service.js +24 -58
  205. package/lib/langium/residency/cst-residency-service.js.map +1 -1
  206. package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
  207. package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
  208. package/lib/langium/scope/fallback-scope.d.ts +27 -0
  209. package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
  210. package/lib/langium/scope/fallback-scope.js +35 -0
  211. package/lib/langium/scope/fallback-scope.js.map +1 -0
  212. package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
  213. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
  214. package/lib/langium/scope/hydranium-scope-computation.js +38 -39
  215. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
  216. package/lib/langium/scope/hydranium-scope-provider.d.ts +29 -11
  217. package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
  218. package/lib/langium/scope/hydranium-scope-provider.js +37 -15
  219. package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
  220. package/lib/langium/scope/index.d.ts +1 -0
  221. package/lib/langium/scope/index.d.ts.map +1 -1
  222. package/lib/langium/scope/index.js +1 -0
  223. package/lib/langium/scope/index.js.map +1 -1
  224. package/lib/langium/scope/reference-builder.d.ts.map +1 -1
  225. package/lib/langium/scope/reference-builder.js.map +1 -1
  226. package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
  227. package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
  228. package/lib/langium/scope/reference-candidate-provider.js +3 -2
  229. package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
  230. package/lib/langium/scope/scope-extension-service.d.ts +41 -37
  231. package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
  232. package/lib/langium/scope/scope-extension-service.js +57 -29
  233. package/lib/langium/scope/scope-extension-service.js.map +1 -1
  234. package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
  235. package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
  236. package/lib/langium/scope/scoped-ast-node-description.js +1 -3
  237. package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
  238. package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
  239. package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
  240. package/lib/langium/serialization/abstract-serializer.js +54 -30
  241. package/lib/langium/serialization/abstract-serializer.js.map +1 -1
  242. package/lib/langium/serialization/json-serializer.d.ts +8 -1
  243. package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
  244. package/lib/langium/serialization/json-serializer.js +13 -3
  245. package/lib/langium/serialization/json-serializer.js.map +1 -1
  246. package/lib/langium/serialization/serializer.d.ts +1 -1
  247. package/lib/langium/serialization/yaml-serializer.d.ts +4 -0
  248. package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
  249. package/lib/langium/serialization/yaml-serializer.js +4 -0
  250. package/lib/langium/serialization/yaml-serializer.js.map +1 -1
  251. package/lib/langium/service-registry.d.ts +29 -1
  252. package/lib/langium/service-registry.d.ts.map +1 -1
  253. package/lib/langium/service-registry.js +37 -0
  254. package/lib/langium/service-registry.js.map +1 -1
  255. package/lib/langium/shared-services.d.ts +23 -6
  256. package/lib/langium/shared-services.d.ts.map +1 -1
  257. package/lib/langium/shared-services.js.map +1 -1
  258. package/lib/langium/single-langium-copy.d.ts +22 -0
  259. package/lib/langium/single-langium-copy.d.ts.map +1 -0
  260. package/lib/langium/single-langium-copy.js +36 -0
  261. package/lib/langium/single-langium-copy.js.map +1 -0
  262. package/lib/langium/transfer/transfer-encoder.d.ts +84 -35
  263. package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
  264. package/lib/langium/transfer/transfer-encoder.js +34 -23
  265. package/lib/langium/transfer/transfer-encoder.js.map +1 -1
  266. package/lib/langium/trivia/comment-preserver.d.ts +423 -0
  267. package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
  268. package/lib/langium/trivia/comment-preserver.js +906 -0
  269. package/lib/langium/trivia/comment-preserver.js.map +1 -0
  270. package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
  271. package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
  272. package/lib/langium/trivia/document-ending-preserver.js +62 -0
  273. package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
  274. package/lib/langium/trivia/index.d.ts +14 -0
  275. package/lib/langium/trivia/index.d.ts.map +1 -0
  276. package/lib/langium/trivia/index.js +14 -0
  277. package/lib/langium/trivia/index.js.map +1 -0
  278. package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
  279. package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
  280. package/lib/langium/trivia/trivia-contribution.js +10 -0
  281. package/lib/langium/trivia/trivia-contribution.js.map +1 -0
  282. package/lib/langium/trivia/trivia-preserver.d.ts +52 -0
  283. package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
  284. package/lib/langium/trivia/trivia-preserver.js +10 -0
  285. package/lib/langium/trivia/trivia-preserver.js.map +1 -0
  286. package/lib/langium/trivia/trivia-service.d.ts +70 -0
  287. package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
  288. package/lib/langium/trivia/trivia-service.js +56 -0
  289. package/lib/langium/trivia/trivia-service.js.map +1 -0
  290. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
  291. package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
  292. package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
  293. package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
  294. package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
  295. package/lib/langium/validation/document-validator.d.ts +280 -9
  296. package/lib/langium/validation/document-validator.d.ts.map +1 -1
  297. package/lib/langium/validation/document-validator.js +453 -8
  298. package/lib/langium/validation/document-validator.js.map +1 -1
  299. package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
  300. package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
  301. package/lib/langium/validation/validation-contribution-collector.js +1 -1
  302. package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
  303. package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
  304. package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
  305. package/lib/langium/workspace/document-uri-policy.js +22 -13
  306. package/lib/langium/workspace/document-uri-policy.js.map +1 -1
  307. package/lib/langium/workspace/file-not-found.d.ts +23 -0
  308. package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
  309. package/lib/langium/workspace/file-not-found.js +31 -0
  310. package/lib/langium/workspace/file-not-found.js.map +1 -0
  311. package/lib/langium/workspace/file-system-provider.d.ts +167 -8
  312. package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
  313. package/lib/langium/workspace/file-system-provider.js +115 -13
  314. package/lib/langium/workspace/file-system-provider.js.map +1 -1
  315. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +31 -1
  316. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
  317. package/lib/langium/workspace/hydranium-langium-document-factory.js +54 -0
  318. package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
  319. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
  320. package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
  321. package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
  322. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
  323. package/lib/langium/workspace/hydranium-workspace-manager.d.ts +124 -22
  324. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
  325. package/lib/langium/workspace/hydranium-workspace-manager.js +212 -31
  326. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
  327. package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
  328. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
  329. package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
  330. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
  331. package/lib/langium/workspace/index-manager.d.ts.map +1 -1
  332. package/lib/langium/workspace/index-manager.js.map +1 -1
  333. package/lib/langium/workspace/index.d.ts +1 -0
  334. package/lib/langium/workspace/index.d.ts.map +1 -1
  335. package/lib/langium/workspace/index.js +1 -0
  336. package/lib/langium/workspace/index.js.map +1 -1
  337. package/lib/langium/workspace/initialize-workspace.d.ts +61 -4
  338. package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
  339. package/lib/langium/workspace/initialize-workspace.js +80 -7
  340. package/lib/langium/workspace/initialize-workspace.js.map +1 -1
  341. package/lib/langium/workspace/langium-documents.d.ts +7 -0
  342. package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
  343. package/lib/langium/workspace/langium-documents.js +18 -1
  344. package/lib/langium/workspace/langium-documents.js.map +1 -1
  345. package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
  346. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
  347. package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
  348. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
  349. package/lib/langium/workspace/self-save-registry.d.ts +84 -0
  350. package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
  351. package/lib/{documents → langium/workspace}/self-save-registry.js +33 -22
  352. package/lib/langium/workspace/self-save-registry.js.map +1 -0
  353. package/lib/langium/workspace/virtual-document.d.ts +55 -21
  354. package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
  355. package/lib/langium/workspace/virtual-document.js +87 -24
  356. package/lib/langium/workspace/virtual-document.js.map +1 -1
  357. package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
  358. package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
  359. package/lib/langium/workspace/write-lock-scope.js +15 -5
  360. package/lib/langium/workspace/write-lock-scope.js.map +1 -1
  361. package/lib/launcher/integrated-server.d.ts +3 -1
  362. package/lib/launcher/integrated-server.d.ts.map +1 -1
  363. package/lib/locale/index.d.ts +10 -0
  364. package/lib/locale/index.d.ts.map +1 -0
  365. package/lib/locale/index.js +10 -0
  366. package/lib/locale/index.js.map +1 -0
  367. package/lib/locale/server-locale.d.ts +73 -0
  368. package/lib/locale/server-locale.d.ts.map +1 -0
  369. package/lib/locale/server-locale.js +61 -0
  370. package/lib/locale/server-locale.js.map +1 -0
  371. package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
  372. package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
  373. package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
  374. package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
  375. package/lib/lsp/connection-features.d.ts +23 -0
  376. package/lib/lsp/connection-features.d.ts.map +1 -0
  377. package/lib/lsp/connection-features.js +60 -0
  378. package/lib/lsp/connection-features.js.map +1 -0
  379. package/lib/lsp/diagnostics-connection.d.ts +27 -0
  380. package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
  381. package/lib/lsp/diagnostics-connection.js +53 -0
  382. package/lib/lsp/diagnostics-connection.js.map +1 -0
  383. package/lib/lsp/hydranium-document-update-handler.d.ts +126 -82
  384. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  385. package/lib/lsp/hydranium-document-update-handler.js +235 -102
  386. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  387. package/lib/lsp/index.d.ts +4 -1
  388. package/lib/lsp/index.d.ts.map +1 -1
  389. package/lib/lsp/index.js +4 -1
  390. package/lib/lsp/index.js.map +1 -1
  391. package/lib/lsp/lsp-latency.d.ts +39 -0
  392. package/lib/lsp/lsp-latency.d.ts.map +1 -0
  393. package/lib/lsp/lsp-latency.js +58 -0
  394. package/lib/lsp/lsp-latency.js.map +1 -0
  395. package/lib/lsp/save-text-document.d.ts +31 -0
  396. package/lib/lsp/save-text-document.d.ts.map +1 -0
  397. package/lib/lsp/save-text-document.js +52 -0
  398. package/lib/lsp/save-text-document.js.map +1 -0
  399. package/lib/lsp/semantic-token-provider.d.ts +34 -1
  400. package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
  401. package/lib/lsp/semantic-token-provider.js +55 -8
  402. package/lib/lsp/semantic-token-provider.js.map +1 -1
  403. package/lib/lsp/shared-module.d.ts +4 -8
  404. package/lib/lsp/shared-module.d.ts.map +1 -1
  405. package/lib/lsp/shared-module.js.map +1 -1
  406. package/lib/lsp/start-language-server.d.ts +8 -7
  407. package/lib/lsp/start-language-server.d.ts.map +1 -1
  408. package/lib/lsp/start-language-server.js +13 -7
  409. package/lib/lsp/start-language-server.js.map +1 -1
  410. package/lib/messages/carriers.d.ts +18 -12
  411. package/lib/messages/carriers.d.ts.map +1 -1
  412. package/lib/messages/carriers.js +22 -13
  413. package/lib/messages/carriers.js.map +1 -1
  414. package/lib/messages/index.d.ts +4 -1
  415. package/lib/messages/index.d.ts.map +1 -1
  416. package/lib/messages/index.js +4 -1
  417. package/lib/messages/index.js.map +1 -1
  418. package/lib/messages/renderer.d.ts +142 -0
  419. package/lib/messages/renderer.d.ts.map +1 -0
  420. package/lib/messages/renderer.js +165 -0
  421. package/lib/messages/renderer.js.map +1 -0
  422. package/lib/node/event-loop-monitor.d.ts.map +1 -1
  423. package/lib/node/event-loop-monitor.js +2 -1
  424. package/lib/node/event-loop-monitor.js.map +1 -1
  425. package/lib/node/heap-ceiling.d.ts +61 -0
  426. package/lib/node/heap-ceiling.d.ts.map +1 -0
  427. package/lib/node/heap-ceiling.js +72 -0
  428. package/lib/node/heap-ceiling.js.map +1 -0
  429. package/lib/node/index.d.ts +1 -1
  430. package/lib/node/index.d.ts.map +1 -1
  431. package/lib/node/index.js +5 -1
  432. package/lib/node/index.js.map +1 -1
  433. package/lib/node/latency-from-env.d.ts +1 -1
  434. package/lib/node/latency-from-env.js +1 -1
  435. package/lib/node/lint-grammar.js.map +1 -1
  436. package/lib/node/log-preamble-node.d.ts +5 -3
  437. package/lib/node/log-preamble-node.d.ts.map +1 -1
  438. package/lib/node/log-preamble-node.js +13 -10
  439. package/lib/node/log-preamble-node.js.map +1 -1
  440. package/lib/node/measure-memory.d.ts.map +1 -1
  441. package/lib/node/measure-memory.js +5 -4
  442. package/lib/node/measure-memory.js.map +1 -1
  443. package/lib/node/memory-monitor.d.ts +2 -2
  444. package/lib/node/memory-monitor.d.ts.map +1 -1
  445. package/lib/node/memory-monitor.js +9 -10
  446. package/lib/node/memory-monitor.js.map +1 -1
  447. package/lib/node/node-file-system-provider.d.ts +67 -9
  448. package/lib/node/node-file-system-provider.d.ts.map +1 -1
  449. package/lib/node/node-file-system-provider.js +198 -53
  450. package/lib/node/node-file-system-provider.js.map +1 -1
  451. package/lib/node/profile-capture.d.ts +12 -4
  452. package/lib/node/profile-capture.d.ts.map +1 -1
  453. package/lib/node/profile-capture.js +8 -6
  454. package/lib/node/profile-capture.js.map +1 -1
  455. package/lib/node/profile-digest.js.map +1 -1
  456. package/lib/node/profiling-run.d.ts +13 -3
  457. package/lib/node/profiling-run.d.ts.map +1 -1
  458. package/lib/node/profiling-run.js +17 -8
  459. package/lib/node/profiling-run.js.map +1 -1
  460. package/lib/node/rename-over-open-readers.d.ts +61 -0
  461. package/lib/node/rename-over-open-readers.d.ts.map +1 -0
  462. package/lib/node/rename-over-open-readers.js +80 -0
  463. package/lib/node/rename-over-open-readers.js.map +1 -0
  464. package/lib/node/server-diagnostics.js +1 -1
  465. package/lib/node/server-diagnostics.js.map +1 -1
  466. package/lib/node/server-state-snapshot.js +4 -4
  467. package/lib/node/server-state-snapshot.js.map +1 -1
  468. package/lib/node/socket-launcher.d.ts +43 -7
  469. package/lib/node/socket-launcher.d.ts.map +1 -1
  470. package/lib/node/socket-launcher.js +42 -7
  471. package/lib/node/socket-launcher.js.map +1 -1
  472. package/lib/node/startup-cpu-profile.d.ts +29 -0
  473. package/lib/node/startup-cpu-profile.d.ts.map +1 -0
  474. package/lib/node/startup-cpu-profile.js +91 -0
  475. package/lib/node/startup-cpu-profile.js.map +1 -0
  476. package/lib/node/stdio-launcher.d.ts +13 -13
  477. package/lib/node/stdio-launcher.d.ts.map +1 -1
  478. package/lib/node/stdio-launcher.js +21 -11
  479. package/lib/node/stdio-launcher.js.map +1 -1
  480. package/lib/testing/document-uri-policy-conformance.js +1 -1
  481. package/lib/testing/document-uri-policy-conformance.js.map +1 -1
  482. package/lib/testing/fake-description.js.map +1 -1
  483. package/lib/testing/fake-document.d.ts +2 -1
  484. package/lib/testing/fake-document.d.ts.map +1 -1
  485. package/lib/testing/fake-document.js.map +1 -1
  486. package/lib/testing/index.d.ts +1 -1
  487. package/lib/testing/index.d.ts.map +1 -1
  488. package/lib/testing/index.js +2 -1
  489. package/lib/testing/index.js.map +1 -1
  490. package/lib/testing/langium-test-helpers.d.ts.map +1 -1
  491. package/lib/testing/langium-test-helpers.js +1 -0
  492. package/lib/testing/langium-test-helpers.js.map +1 -1
  493. package/lib/testing/make-noop-language-services.js.map +1 -1
  494. package/lib/testing/make-noop-shared-services.d.ts +14 -0
  495. package/lib/testing/make-noop-shared-services.d.ts.map +1 -1
  496. package/lib/testing/make-noop-shared-services.js +28 -2
  497. package/lib/testing/make-noop-shared-services.js.map +1 -1
  498. package/lib/testing/make-test-services.d.ts +72 -14
  499. package/lib/testing/make-test-services.d.ts.map +1 -1
  500. package/lib/testing/make-test-services.js +42 -10
  501. package/lib/testing/make-test-services.js.map +1 -1
  502. package/lib/testing/make-test-tracer.d.ts +12 -0
  503. package/lib/testing/make-test-tracer.d.ts.map +1 -1
  504. package/lib/testing/make-test-tracer.js +13 -0
  505. package/lib/testing/make-test-tracer.js.map +1 -1
  506. package/lib/testing/node/applied-edit-capture.d.ts +29 -0
  507. package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
  508. package/lib/testing/node/applied-edit-capture.js +117 -0
  509. package/lib/testing/node/applied-edit-capture.js.map +1 -0
  510. package/lib/testing/node/golden-corpus.js.map +1 -1
  511. package/lib/testing/node/index.d.ts +1 -0
  512. package/lib/testing/node/index.d.ts.map +1 -1
  513. package/lib/testing/node/index.js +1 -0
  514. package/lib/testing/node/index.js.map +1 -1
  515. package/lib/testing/node/lsp-harness.d.ts.map +1 -1
  516. package/lib/testing/node/lsp-harness.js +2 -0
  517. package/lib/testing/node/lsp-harness.js.map +1 -1
  518. package/lib/testing/node/lsp-server-connection.d.ts +21 -6
  519. package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
  520. package/lib/testing/node/lsp-server-connection.js +49 -106
  521. package/lib/testing/node/lsp-server-connection.js.map +1 -1
  522. package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
  523. package/lib/testing/node/scratch-workspace.js +10 -5
  524. package/lib/testing/node/scratch-workspace.js.map +1 -1
  525. package/lib/testing/node/spawned-server.d.ts +30 -1
  526. package/lib/testing/node/spawned-server.d.ts.map +1 -1
  527. package/lib/testing/node/spawned-server.js +39 -2
  528. package/lib/testing/node/spawned-server.js.map +1 -1
  529. package/lib/testing/node/unhandled-rejections.d.ts +20 -0
  530. package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
  531. package/lib/testing/node/unhandled-rejections.js +32 -0
  532. package/lib/testing/node/unhandled-rejections.js.map +1 -0
  533. package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
  534. package/lib/testing/playwright/e2e-profiling.js.map +1 -1
  535. package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
  536. package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
  537. package/lib/testing/playwright/flaky-network-proxy.js +164 -0
  538. package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
  539. package/lib/testing/playwright/index.d.ts +1 -0
  540. package/lib/testing/playwright/index.d.ts.map +1 -1
  541. package/lib/testing/playwright/index.js +1 -0
  542. package/lib/testing/playwright/index.js.map +1 -1
  543. package/lib/testing/playwright/server-log-capture.d.ts +46 -16
  544. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
  545. package/lib/testing/playwright/server-log-capture.js +111 -40
  546. package/lib/testing/playwright/server-log-capture.js.map +1 -1
  547. package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
  548. package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
  549. package/lib/testing/playwright/server-log-fixture.js +25 -6
  550. package/lib/testing/playwright/server-log-fixture.js.map +1 -1
  551. package/lib/testing/playwright/server-log-region.d.ts +15 -0
  552. package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
  553. package/lib/testing/playwright/server-log-region.js +30 -0
  554. package/lib/testing/playwright/server-log-region.js.map +1 -0
  555. package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
  556. package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
  557. package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
  558. package/lib/testing/run-update-pipeline.d.ts +8 -5
  559. package/lib/testing/run-update-pipeline.d.ts.map +1 -1
  560. package/lib/testing/run-update-pipeline.js.map +1 -1
  561. package/lib/testing/stub-ast-document-manager.d.ts +11 -52
  562. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
  563. package/lib/testing/stub-ast-document-manager.js +31 -62
  564. package/lib/testing/stub-ast-document-manager.js.map +1 -1
  565. package/lib/testing/stub-document-builder.d.ts +33 -11
  566. package/lib/testing/stub-document-builder.d.ts.map +1 -1
  567. package/lib/testing/stub-document-builder.js +103 -5
  568. package/lib/testing/stub-document-builder.js.map +1 -1
  569. package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
  570. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
  571. package/lib/testing/stub-hydranium-text-documents.js +132 -16
  572. package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
  573. package/lib/testing/stub-index-manager.js.map +1 -1
  574. package/lib/testing/stub-langium-documents.d.ts +3 -2
  575. package/lib/testing/stub-langium-documents.d.ts.map +1 -1
  576. package/lib/testing/stub-langium-documents.js.map +1 -1
  577. package/lib/testing/stub-model-service.d.ts +9 -8
  578. package/lib/testing/stub-model-service.d.ts.map +1 -1
  579. package/lib/testing/stub-model-service.js +6 -6
  580. package/lib/testing/stub-model-service.js.map +1 -1
  581. package/lib/testing/stub-project-manager.js.map +1 -1
  582. package/lib/testing/stub-self-save-registry.d.ts +1 -1
  583. package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
  584. package/lib/testing/stub-service-registry.d.ts +1 -1
  585. package/lib/testing/stub-service-registry.js.map +1 -1
  586. package/lib/testing/stub-writable-file-system.d.ts +1 -1
  587. package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
  588. package/lib/testing/stub-writable-file-system.js +2 -1
  589. package/lib/testing/stub-writable-file-system.js.map +1 -1
  590. package/lib/util/connection-liveness.d.ts +19 -6
  591. package/lib/util/connection-liveness.d.ts.map +1 -1
  592. package/lib/util/connection-liveness.js +61 -15
  593. package/lib/util/connection-liveness.js.map +1 -1
  594. package/lib/util/environment.d.ts.map +1 -1
  595. package/lib/util/environment.js.map +1 -1
  596. package/lib/util/registry.d.ts.map +1 -1
  597. package/package.json +38 -57
  598. package/src/browser/host-heads-in-worker.ts +218 -0
  599. package/src/browser/index.ts +17 -0
  600. package/src/browser/indexeddb-file-system-store.ts +192 -0
  601. package/src/browser/start-language-server-in-worker.ts +56 -0
  602. package/src/documents/ast-document-manager.ts +467 -233
  603. package/src/documents/client-ids.ts +5 -22
  604. package/src/documents/client-session-errors.ts +24 -0
  605. package/src/documents/client-session-registry.ts +262 -0
  606. package/src/documents/dirty-state-tracker.ts +167 -0
  607. package/src/documents/document-release-handler.ts +404 -0
  608. package/src/documents/document-release-scheduler.ts +121 -0
  609. package/src/documents/file-system-task-queue.ts +74 -0
  610. package/src/documents/hydranium-text-documents.ts +1022 -595
  611. package/src/documents/index.ts +10 -2
  612. package/src/documents/language-client-shadow.ts +501 -0
  613. package/src/documents/model-ledger.ts +66 -0
  614. package/src/documents/text-ledger.ts +112 -0
  615. package/src/documents/version-sync-service.ts +275 -0
  616. package/src/index.ts +8 -0
  617. package/src/langium/ast-extension/ast-extension-service.ts +77 -41
  618. package/src/langium/bootstrap.ts +95 -52
  619. package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
  620. package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
  621. package/src/langium/composite-ast-reflection.ts +112 -0
  622. package/src/langium/config/configuration-provider.ts +119 -0
  623. package/src/langium/config/index.ts +1 -0
  624. package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
  625. package/src/langium/diagnostics/log-preamble.ts +1 -1
  626. package/src/langium/diagnostics/logger.ts +38 -11
  627. package/src/langium/diagnostics/lsp-logger.ts +61 -16
  628. package/src/langium/document-builder/build-pipeline-integration.ts +46 -32
  629. package/src/langium/document-builder/build-session.ts +4 -3
  630. package/src/langium/document-builder/document-builder.ts +616 -73
  631. package/src/langium/integration-services.ts +59 -28
  632. package/src/langium/integrity/integrity-rule.ts +16 -8
  633. package/src/langium/integrity/integrity-service.ts +296 -69
  634. package/src/langium/keys/containment.ts +87 -0
  635. package/src/langium/keys/index.ts +1 -0
  636. package/src/langium/keys/name-based-key-provider.ts +4 -0
  637. package/src/langium/language-module.ts +49 -8
  638. package/src/langium/model-service/client-session.ts +718 -0
  639. package/src/langium/model-service/index.ts +2 -0
  640. package/src/langium/model-service/model-events.ts +80 -0
  641. package/src/langium/model-service/model-service.ts +908 -485
  642. package/src/langium/module.ts +212 -67
  643. package/src/langium/naming/name-provider.ts +44 -8
  644. package/src/langium/naming/name-separator-validation.ts +25 -3
  645. package/src/langium/project/abstract-project-manager.ts +13 -5
  646. package/src/langium/project/project-change-event.ts +2 -2
  647. package/src/langium/residency/cst-residency-service.ts +54 -19
  648. package/src/langium/scope/fallback-scope.ts +38 -0
  649. package/src/langium/scope/hydranium-scope-computation.ts +45 -44
  650. package/src/langium/scope/hydranium-scope-provider.ts +49 -16
  651. package/src/langium/scope/index.ts +1 -0
  652. package/src/langium/scope/reference-candidate-provider.ts +6 -5
  653. package/src/langium/scope/scope-extension-service.ts +74 -59
  654. package/src/langium/scope/scoped-ast-node-description.ts +1 -3
  655. package/src/langium/serialization/abstract-serializer.ts +57 -41
  656. package/src/langium/serialization/json-serializer.ts +14 -3
  657. package/src/langium/serialization/serializer.ts +1 -1
  658. package/src/langium/serialization/yaml-serializer.ts +4 -0
  659. package/src/langium/service-registry.ts +41 -2
  660. package/src/langium/shared-services.ts +26 -6
  661. package/src/langium/single-langium-copy.ts +42 -0
  662. package/src/langium/transfer/transfer-encoder.ts +102 -45
  663. package/src/langium/trivia/comment-preserver.ts +1100 -0
  664. package/src/langium/trivia/document-ending-preserver.ts +71 -0
  665. package/src/langium/trivia/index.ts +14 -0
  666. package/src/langium/trivia/trivia-contribution.ts +39 -0
  667. package/src/langium/trivia/trivia-preserver.ts +56 -0
  668. package/src/langium/trivia/trivia-service.ts +99 -0
  669. package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
  670. package/src/langium/update-rewrite/update-rewrite.ts +1 -1
  671. package/src/langium/validation/document-validator.ts +528 -13
  672. package/src/langium/validation/validation-contribution-collector.ts +10 -1
  673. package/src/langium/workspace/document-uri-policy.ts +32 -18
  674. package/src/langium/workspace/file-not-found.ts +35 -0
  675. package/src/langium/workspace/file-system-provider.ts +258 -16
  676. package/src/langium/workspace/hydranium-langium-document-factory.ts +83 -0
  677. package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
  678. package/src/langium/workspace/hydranium-workspace-manager.ts +241 -35
  679. package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
  680. package/src/langium/workspace/index.ts +1 -0
  681. package/src/langium/workspace/initialize-workspace.ts +129 -8
  682. package/src/langium/workspace/langium-documents.ts +19 -1
  683. package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
  684. package/src/langium/workspace/self-save-registry.ts +118 -0
  685. package/src/langium/workspace/virtual-document.ts +106 -25
  686. package/src/langium/workspace/write-lock-scope.ts +27 -12
  687. package/src/launcher/integrated-server.ts +3 -1
  688. package/src/locale/index.ts +10 -0
  689. package/src/locale/server-locale.ts +86 -0
  690. package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
  691. package/src/lsp/connection-features.ts +67 -0
  692. package/src/lsp/diagnostics-connection.ts +56 -0
  693. package/src/lsp/hydranium-document-update-handler.ts +285 -111
  694. package/src/lsp/index.ts +4 -1
  695. package/src/lsp/lsp-latency.ts +62 -0
  696. package/src/lsp/save-text-document.ts +63 -0
  697. package/src/lsp/semantic-token-provider.ts +74 -7
  698. package/src/lsp/shared-module.ts +4 -8
  699. package/src/lsp/start-language-server.ts +13 -7
  700. package/src/messages/carriers.ts +23 -15
  701. package/src/messages/index.ts +13 -1
  702. package/src/messages/renderer.ts +212 -0
  703. package/src/node/event-loop-monitor.ts +2 -1
  704. package/src/node/heap-ceiling.ts +108 -0
  705. package/src/node/index.ts +5 -1
  706. package/src/node/latency-from-env.ts +1 -1
  707. package/src/node/log-preamble-node.ts +20 -10
  708. package/src/node/measure-memory.ts +5 -4
  709. package/src/node/memory-monitor.ts +10 -10
  710. package/src/node/node-file-system-provider.ts +214 -57
  711. package/src/node/profile-capture.ts +16 -15
  712. package/src/node/profiling-run.ts +30 -8
  713. package/src/node/rename-over-open-readers.ts +94 -0
  714. package/src/node/server-diagnostics.ts +1 -1
  715. package/src/node/server-state-snapshot.ts +5 -5
  716. package/src/node/socket-launcher.ts +78 -14
  717. package/src/node/startup-cpu-profile.ts +94 -0
  718. package/src/node/stdio-launcher.ts +29 -19
  719. package/src/testing/document-uri-policy-conformance.ts +1 -1
  720. package/src/testing/fake-document.ts +2 -1
  721. package/src/testing/index.ts +2 -1
  722. package/src/testing/langium-test-helpers.ts +1 -0
  723. package/src/testing/make-noop-shared-services.ts +50 -2
  724. package/src/testing/make-test-services.ts +125 -31
  725. package/src/testing/make-test-tracer.ts +26 -0
  726. package/src/testing/node/applied-edit-capture.ts +141 -0
  727. package/src/testing/node/index.ts +1 -0
  728. package/src/testing/node/lsp-harness.ts +2 -0
  729. package/src/testing/node/lsp-server-connection.ts +83 -119
  730. package/src/testing/node/scratch-workspace.ts +10 -5
  731. package/src/testing/node/spawned-server.ts +57 -3
  732. package/src/testing/node/unhandled-rejections.ts +31 -0
  733. package/src/testing/parse-semantic-root.ts +1 -1
  734. package/src/testing/playwright/flaky-network-proxy.ts +240 -0
  735. package/src/testing/playwright/index.ts +1 -0
  736. package/src/testing/playwright/server-log-capture.ts +137 -47
  737. package/src/testing/playwright/server-log-fixture.ts +46 -6
  738. package/src/testing/playwright/server-log-region.ts +32 -0
  739. package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
  740. package/src/testing/run-update-pipeline.ts +8 -5
  741. package/src/testing/stub-ast-document-manager.ts +47 -128
  742. package/src/testing/stub-document-builder.ts +133 -18
  743. package/src/testing/stub-hydranium-text-documents.ts +184 -27
  744. package/src/testing/stub-langium-documents.ts +3 -2
  745. package/src/testing/stub-model-service.ts +11 -10
  746. package/src/testing/stub-self-save-registry.ts +1 -1
  747. package/src/testing/stub-service-registry.ts +1 -1
  748. package/src/testing/stub-writable-file-system.ts +3 -2
  749. package/src/util/connection-liveness.ts +67 -15
  750. package/src/util/environment.ts +9 -1
  751. package/lib/documents/language-client-text-shadow.d.ts +0 -101
  752. package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
  753. package/lib/documents/language-client-text-shadow.js +0 -156
  754. package/lib/documents/language-client-text-shadow.js.map +0 -1
  755. package/lib/documents/self-save-registry.d.ts +0 -55
  756. package/lib/documents/self-save-registry.d.ts.map +0 -1
  757. package/lib/documents/self-save-registry.js.map +0 -1
  758. package/lib/lsp/instrument-connection.d.ts +0 -36
  759. package/lib/lsp/instrument-connection.d.ts.map +0 -1
  760. package/lib/lsp/instrument-connection.js +0 -62
  761. package/lib/lsp/instrument-connection.js.map +0 -1
  762. package/lib/node/process-memory.d.ts +0 -66
  763. package/lib/node/process-memory.d.ts.map +0 -1
  764. package/lib/node/process-memory.js +0 -252
  765. package/lib/node/process-memory.js.map +0 -1
  766. package/src/documents/language-client-text-shadow.ts +0 -175
  767. package/src/documents/self-save-registry.ts +0 -81
  768. package/src/lsp/instrument-connection.ts +0 -66
  769. package/src/node/process-memory.ts +0 -299
@@ -0,0 +1,31 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { type Connection, type Disposable, type Features } from 'vscode-languageserver';
10
+ import type { ServerSharedServices } from '../langium/module.js';
11
+ /**
12
+ * Advertise {@link SaveTextDocumentRequest} in the `initialize` answer, as
13
+ * `experimental[SaveTextDocumentRequest.method]`, LSP's place for a server
14
+ * feature it does not define. Supply it where the connection is created, with
15
+ * {@link listenToSaveTextDocument} on that connection: only a host whose files
16
+ * the server holds answers the request, and a client takes the entry as the
17
+ * promise that it does.
18
+ */
19
+ export declare function withSaveTextDocumentCapability<T extends Features>(features: T): T;
20
+ /**
21
+ * Answer {@link SaveTextDocumentRequest} on `connection`: persist the store's
22
+ * text once `TextDocuments.assertLanguageClientHolds` finds the editor's
23
+ * buffer holds it. The gate and the manager's taking of the text are one
24
+ * synchronous step, so no change can land between them.
25
+ *
26
+ * A refusal crosses the wire as the data head's do, its message rendered by
27
+ * `MessageRenderer` and rebuilt on the connection's copy of `vscode-jsonrpc`,
28
+ * which keeps the code only of its own copy's errors.
29
+ */
30
+ export declare function listenToSaveTextDocument(connection: Connection, shared: ServerSharedServices): Disposable;
31
+ //# sourceMappingURL=save-text-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-text-document.d.ts","sourceRoot":"","sources":["../../src/lsp/save-text-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAEJ,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,QAAQ,EAIf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CASjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,GAAG,UAAU,CAWzG"}
@@ -0,0 +1,52 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { isResponseError, SaveTextDocumentRequest } from '@hydranium/protocol';
10
+ import { combineWorkspaceFeatures, ResponseError } from 'vscode-languageserver';
11
+ import { LANGUAGE_CLIENT_ID } from '../documents/client-ids.js';
12
+ /**
13
+ * Advertise {@link SaveTextDocumentRequest} in the `initialize` answer, as
14
+ * `experimental[SaveTextDocumentRequest.method]`, LSP's place for a server
15
+ * feature it does not define. Supply it where the connection is created, with
16
+ * {@link listenToSaveTextDocument} on that connection: only a host whose files
17
+ * the server holds answers the request, and a client takes the entry as the
18
+ * promise that it does.
19
+ */
20
+ export function withSaveTextDocumentCapability(features) {
21
+ const advertise = Base => class extends Base {
22
+ fillServerCapabilities(capabilities) {
23
+ super.fillServerCapabilities(capabilities);
24
+ capabilities.experimental = { ...capabilities.experimental, [SaveTextDocumentRequest.method]: true };
25
+ }
26
+ };
27
+ return { ...features, workspace: features.workspace ? combineWorkspaceFeatures(features.workspace, advertise) : advertise };
28
+ }
29
+ /**
30
+ * Answer {@link SaveTextDocumentRequest} on `connection`: persist the store's
31
+ * text once `TextDocuments.assertLanguageClientHolds` finds the editor's
32
+ * buffer holds it. The gate and the manager's taking of the text are one
33
+ * synchronous step, so no change can land between them.
34
+ *
35
+ * A refusal crosses the wire as the data head's do, its message rendered by
36
+ * `MessageRenderer` and rebuilt on the connection's copy of `vscode-jsonrpc`,
37
+ * which keeps the code only of its own copy's errors.
38
+ */
39
+ export function listenToSaveTextDocument(connection, shared) {
40
+ return connection.onRequest(SaveTextDocumentRequest.method, async (params) => {
41
+ const { uri, version } = params.textDocument;
42
+ try {
43
+ shared.workspace.TextDocuments.assertLanguageClientHolds(uri, version);
44
+ await shared.workspace.AstDocumentManager.save(uri, LANGUAGE_CLIENT_ID);
45
+ }
46
+ catch (error) {
47
+ throw isResponseError(error) ? new ResponseError(error.code, shared.MessageRenderer.renderError(error), error.data) : error;
48
+ }
49
+ return null;
50
+ });
51
+ }
52
+ //# sourceMappingURL=save-text-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-text-document.js","sourceRoot":"","sources":["../../src/lsp/save-text-document.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,eAAe,EAA+B,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EACJ,wBAAwB,EAIxB,aAAa,EAGf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE;;;;;;;GAOG;AACH,MAAM,UAAU,8BAA8B,CAAqB,QAAW;IAC3E,MAAM,SAAS,GAA6B,IAAI,CAAC,EAAE,CAChD,KAAM,SAAQ,IAAI;QACN,sBAAsB,CAAC,YAAgC;YAC7D,KAAK,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;YAC3C,YAAY,CAAC,YAAY,GAAG,EAAE,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;QACxG,CAAC;KACH,CAAC;IACL,OAAO,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC/H,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAsB,EAAE,MAA4B;IAC1F,OAAO,UAAU,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,MAA8B,EAAE,EAAE;QAClG,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACvE,MAAM,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACvB,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/H,CAAC;QACD,OAAO,IAAI,CAAC;IACf,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { type AstNode, type AstReflection, type LangiumDocument, type ReferenceInfo } from '@hydranium/langium';
9
+ import { type AstNode, type AstReflection, type LangiumDocument, type LeafCstNode, type ReferenceInfo } from '@hydranium/langium';
10
10
  import { AbstractSemanticTokenProvider, type SemanticTokenAcceptor } from '@hydranium/langium/lsp';
11
11
  import { type CancellationToken } from 'vscode-languageserver';
12
12
  import { type NameProvider } from '../langium/naming/name-provider.js';
@@ -37,6 +37,22 @@ export interface HydraniumSemanticTokenProviderOptions {
37
37
  * render in the editor's default foreground.
38
38
  */
39
39
  readonly highlightKeywords?: boolean;
40
+ /**
41
+ * Also emit a `comment` token for every comment leaf of the CST.
42
+ *
43
+ * OFF by default for the same reason as {@link highlightKeywords}, and the
44
+ * loss is larger: a TextMate grammar distinguishes `comment.line` from
45
+ * `comment.block` and scopes the delimiters separately, where a semantic
46
+ * token carries one flat `comment` that overrides all of them. It exists
47
+ * for the host that ships no client-side grammar, where a comment otherwise
48
+ * renders in the editor's default foreground.
49
+ *
50
+ * What counts as a comment is every hidden terminal the lexer retains,
51
+ * which is every hidden terminal whose pattern is not whitespace. A grammar
52
+ * whose hidden non-whitespace terminal means something other than a comment
53
+ * is miscoloured, and this option is the place to say no.
54
+ */
55
+ readonly highlightComments?: boolean;
40
56
  }
41
57
  /**
42
58
  * Semantic-token provider that derives highlighting from ONE adopter-supplied
@@ -102,6 +118,23 @@ export declare abstract class AbstractHydraniumSemanticTokenProvider extends Abs
102
118
  * drops anything outside `currentRange` on its own.
103
119
  */
104
120
  protected computeHighlighting(document: LangiumDocument, acceptor: SemanticTokenAcceptor, cancelToken: CancellationToken): Promise<void>;
121
+ /**
122
+ * Emit a comment as ONE TOKEN PER LINE, never as one multi-line range.
123
+ *
124
+ * A block comment is the first token this provider emits that can span
125
+ * lines, and the upstream encoder mishandles that for a client which does
126
+ * not advertise `multilineTokenSupport` — the split path computes the first
127
+ * line's length as `nextLineOffset - range.start.character - 1`, subtracting
128
+ * a COLUMN from a document OFFSET, so the length is right only for a token
129
+ * starting on line 0 and overruns its line everywhere else. No client in
130
+ * this repository advertises that capability, so the broken path is the one
131
+ * taken. Splitting here means every range handed over starts and ends on one
132
+ * line and the arithmetic is never reached.
133
+ *
134
+ * Lines come from the leaf's own text rather than from the document, so
135
+ * nothing has to re-derive where the comment ends.
136
+ */
137
+ protected acceptComment(cst: LeafCstNode, acceptor: SemanticTokenAcceptor): void;
105
138
  protected highlightElement(node: AstNode, acceptor: SemanticTokenAcceptor): void | undefined | 'prune';
106
139
  /** Colour the node's own name, at whichever property the NameProvider reads it from. */
107
140
  protected highlightDeclaration(node: AstNode, acceptor: SemanticTokenAcceptor): void;
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-token-provider.d.ts","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,OAAO,EACZ,KAAK,aAAa,EAKlB,KAAK,eAAe,EACpB,KAAK,aAAa,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,KAAK,iBAAiB,EAA8C,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAAC;AAU1G,6EAA6E;AAC7E,MAAM,WAAW,qCAAqC;IACnD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8BAAsB,sCAAuC,SAAQ,6BAA6B;IAC/F,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qCAAqC,CAAC;IAElE;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAsC;gBAEpF,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,qCAA0C;IAOjG;;;;;;;;;;;;;;;OAeG;cACsB,mBAAmB,CACzC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,qBAAqB,EAC/B,WAAW,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC;cAsBG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAM/G,wFAAwF;IACxF,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAYpF,kFAAkF;IAClF,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAUnF;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAE5E,0FAA0F;IAC1F,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS;IAI1E,4GAA4G;IAC5G,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS;IAI9E,uFAAuF;IACvF,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS;CAG9D"}
1
+ {"version":3,"file":"semantic-token-provider.d.ts","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,KAAK,OAAO,EACZ,KAAK,aAAa,EAMlB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,aAAa,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,KAAK,iBAAiB,EAA8C,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAAC;AAU1G,6EAA6E;AAC7E,MAAM,WAAW,qCAAqC;IACnD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAErC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8BAAsB,sCAAuC,SAAQ,6BAA6B;IAC/F,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qCAAqC,CAAC;IAElE;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAsC;IAEhG,YAAY,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,qCAA0C,EAKhG;IAED;;;;;;;;;;;;;;;OAeG;IACH,UAAyB,mBAAmB,CACzC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,qBAAqB,EAC/B,WAAW,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAkCf;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAgB/E;IAED,UAAmB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI9G;IAED,wFAAwF;IACxF,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAUnF;IAED,kFAAkF;IAClF,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAQlF;IAED;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAE7E,0FAA0F;IAC1F,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAEzE;IAED,4GAA4G;IAC5G,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAE7E;IAED,uFAAuF;IACvF,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;CACH"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { AstUtils, CstUtils, GrammarAST, interruptAndCheck } from '@hydranium/langium';
9
+ import { AstUtils, CstUtils, GrammarAST, interruptAndCheck, isLeafCstNode } from '@hydranium/langium';
10
10
  import { AbstractSemanticTokenProvider } from '@hydranium/langium/lsp';
11
11
  import { SemanticTokenModifiers, SemanticTokenTypes } from 'vscode-languageserver';
12
12
  /** Normalise both {@link SemanticTokenKind} forms to the acceptor's shape. */
@@ -86,7 +86,9 @@ export class AbstractHydraniumSemanticTokenProvider extends AbstractSemanticToke
86
86
  */
87
87
  async computeHighlighting(document, acceptor, cancelToken) {
88
88
  await super.computeHighlighting(document, acceptor, cancelToken);
89
- if (this.options.highlightKeywords !== true) {
89
+ const keywords = this.options.highlightKeywords === true;
90
+ const comments = this.options.highlightComments === true;
91
+ if (!keywords && !comments) {
90
92
  return;
91
93
  }
92
94
  const root = document.parseResult.value.$cstNode;
@@ -95,14 +97,59 @@ export class AbstractHydraniumSemanticTokenProvider extends AbstractSemanticToke
95
97
  }
96
98
  for (const cst of CstUtils.streamCst(root)) {
97
99
  await interruptAndCheck(cancelToken);
98
- // The grammar source is the whole filter. A keyword is always a leaf,
99
- // and the hidden leaves a comment or a run of whitespace contributes
100
- // are sourced from a terminal rule rather than a `Keyword` — so
101
- // neither a composite-node check nor a hidden-token check adds
102
- // anything here.
103
- if (GrammarAST.isKeyword(cst.grammarSource)) {
100
+ // A keyword is always a leaf with a `Keyword` grammar source, so that
101
+ // check alone separates it from everything else in the walk.
102
+ if (keywords && GrammarAST.isKeyword(cst.grammarSource)) {
104
103
  acceptor({ cst, type: SemanticTokenTypes.keyword });
105
104
  }
105
+ // A comment leaf cannot be recognised the same way — the CST builder
106
+ // adds hidden nodes from the token alone, so `grammarSource` is
107
+ // undefined, which is also why the keyword filter never matches one.
108
+ //
109
+ // `hidden` alone IS the comment test, and nothing narrower is needed:
110
+ // the token builder groups a hidden terminal as `Lexer.SKIPPED` when
111
+ // its pattern matches whitespace and as `hidden` otherwise, so the
112
+ // lexer discards whitespace before a CST node is ever built and every
113
+ // hidden leaf that survives is a comment. Classifying the terminal
114
+ // again here would be a second guard for the same property, which no
115
+ // test could then distinguish. An adopter whose token builder RETAINS
116
+ // whitespace breaks that equivalence and would colour its gaps.
117
+ if (comments && isLeafCstNode(cst) && cst.hidden) {
118
+ this.acceptComment(cst, acceptor);
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ * Emit a comment as ONE TOKEN PER LINE, never as one multi-line range.
124
+ *
125
+ * A block comment is the first token this provider emits that can span
126
+ * lines, and the upstream encoder mishandles that for a client which does
127
+ * not advertise `multilineTokenSupport` — the split path computes the first
128
+ * line's length as `nextLineOffset - range.start.character - 1`, subtracting
129
+ * a COLUMN from a document OFFSET, so the length is right only for a token
130
+ * starting on line 0 and overruns its line everywhere else. No client in
131
+ * this repository advertises that capability, so the broken path is the one
132
+ * taken. Splitting here means every range handed over starts and ends on one
133
+ * line and the arithmetic is never reached.
134
+ *
135
+ * Lines come from the leaf's own text rather than from the document, so
136
+ * nothing has to re-derive where the comment ends.
137
+ */
138
+ acceptComment(cst, acceptor) {
139
+ const lines = cst.text.split('\n');
140
+ for (let index = 0; index < lines.length; index++) {
141
+ // A `\r\n` document leaves the carriage return on the line's end;
142
+ // colouring it would extend the token past the visible text.
143
+ const length = lines[index].replace(/\r$/, '').length;
144
+ const character = index === 0 ? cst.range.start.character : 0;
145
+ if (length === 0) {
146
+ continue;
147
+ }
148
+ const line = cst.range.start.line + index;
149
+ acceptor({
150
+ range: { start: { line, character }, end: { line, character: character + length } },
151
+ type: SemanticTokenTypes.comment
152
+ });
106
153
  }
107
154
  }
108
155
  highlightElement(node, acceptor) {
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-token-provider.js","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-token-provider.js","sourceRoot":"","sources":["../../src/lsp/semantic-token-provider.ts"],"names":[],"mappings":"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"}
@@ -26,14 +26,10 @@ import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-hand
26
26
  * (an output channel, a structured logger) override the slot after this
27
27
  * module.
28
28
  *
29
- * - {@link HydraniumDocumentUpdateHandler} wraps `didChangeWatchedFiles` to
30
- * suppress echo events for the server's own writes via the shared
31
- * `SelfSaveRegistry` slot, debounces `didChangeContent`, stamps build
32
- * reasons through `markNextReason`, and dispatches a rebuild when the last
33
- * client closes a document.
34
- * Adopters with their own update-handler subclass should extend
35
- * `HydraniumDocumentUpdateHandler` (not Langium's
36
- * `DefaultDocumentUpdateHandler`) to preserve those behaviours.
29
+ * - {@link HydraniumDocumentUpdateHandler} carries the framework's handling of
30
+ * the LSP document events. Adopters with their own update-handler subclass
31
+ * should extend it (not Langium's `DefaultDocumentUpdateHandler`) to keep
32
+ * that handling.
37
33
  *
38
34
  * **Why this is a shared slot and not a per-language one.** Langium declares
39
35
  * `DocumentUpdateHandler` in `LangiumSharedLSPServices` — there is exactly one
@@ -1 +1 @@
1
- {"version":3,"file":"shared-module.d.ts","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,WAAW,4BAA4B;IAC3B,MAAM,EAAE,SAAS,CAAC;IACjC,GAAG,EAAE;QACa,qBAAqB,EAAE,8BAA8B,CAAC;KACvE,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,4BAA4B,CAAC;AAE1F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACxC,QAAQ,EAAE,mBAAmB,GAC7B,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,GAAG,4BAA4B,CAAC,CAO9F"}
1
+ {"version":3,"file":"shared-module.d.ts","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,4BAA4B;IAC3B,MAAM,EAAE,SAAS,CAAC;IACjC,GAAG,EAAE;QACa,qBAAqB,EAAE,8BAA8B,CAAC;KACvE,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG,4BAA4B,CAAC;AAE1F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACxC,QAAQ,EAAE,mBAAmB,GAC7B,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,GAAG,4BAA4B,CAAC,CAO9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared-module.js","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAIlF,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAmDxF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B,CACxC,QAA6B;IAE7B,OAAO;QACJ,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC;QAC3C,GAAG,EAAE;YACF,qBAAqB,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,8BAA8B,CAAC,QAAQ,CAAC;SACjF;KACH,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"shared-module.js","sourceRoot":"","sources":["../../src/lsp/shared-module.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAIlF,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AA+CxF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B,CACxC,QAA6B;IAE7B,OAAO;QACJ,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC;QAC3C,GAAG,EAAE;YACF,qBAAqB,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,8BAA8B,CAAC,QAAQ,CAAC;SACjF;KACH,CAAC;AACL,CAAC"}
@@ -14,10 +14,9 @@ import { type LangiumSharedServices, type ServiceRequirements } from '@hydranium
14
14
  * SHARED slot, so the head binds it in `createLspServerSharedModule` — a
15
15
  * separate module from `createLspServerLanguageModule`. An adopter who adds
16
16
  * only the language module gets a server that boots, links and serves
17
- * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: echo
18
- * suppression for the server's own writes, the `didChangeContent` debounce,
19
- * `markNextReason` stamping and the last-client-close rebuild are all absent,
20
- * with nothing in the log to say so.
17
+ * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: every
18
+ * behaviour `HydraniumDocumentUpdateHandler` adds, the editor save gate
19
+ * included, is absent, with nothing in the log to say so.
21
20
  *
22
21
  * The type system does not catch it. `createIntegrationServices` returns
23
22
  * `inject(...) as unknown as TShared`, so widening `TShared` with
@@ -35,9 +34,11 @@ import { type LangiumSharedServices, type ServiceRequirements } from '@hydranium
35
34
  export declare function assertLspHeadComposed(services: LangiumSharedServices): void;
36
35
  /**
37
36
  * The framework's LSP server entry point: {@link assertLspHeadComposed}, then
38
- * Langium's `startLanguageServer` unchanged. Signature-compatible with
39
- * Langium's, so it is a drop-in for adopters importing from
40
- * `@hydranium/core/lsp`.
37
+ * {@link guardDiagnosticsConnection} on the tree's connection, then Langium's
38
+ * `startLanguageServer`. Signature-compatible with Langium's, so it is a
39
+ * drop-in for adopters importing from `@hydranium/core/lsp`. Calling Langium's
40
+ * directly skips both: the composition check, and the guard without which a
41
+ * publish racing teardown fails the build that validated the document.
41
42
  */
42
43
  export declare function startLanguageServer(services: LangiumSharedServices, serviceRequirements?: Partial<ServiceRequirements>): void;
43
44
  //# sourceMappingURL=start-language-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-language-server.d.ts","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAEJ,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAC1B,MAAM,wBAAwB,CAAC;AAGhC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAe3E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAAG,IAAI,CAGjI"}
1
+ {"version":3,"file":"start-language-server.d.ts","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAEJ,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EAC1B,MAAM,wBAAwB,CAAC;AAIhC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAe3E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,mBAAmB,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAAG,IAAI,CAOjI"}
@@ -8,6 +8,7 @@
8
8
  ********************************************************************************/
9
9
  import { startLanguageServer as startLangiumLanguageServer } from '@hydranium/langium/lsp';
10
10
  import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-handler.js';
11
+ import { guardDiagnosticsConnection } from './diagnostics-connection.js';
11
12
  /**
12
13
  * Fail the LSP head's start when its shared module was never composed.
13
14
  *
@@ -15,10 +16,9 @@ import { HydraniumDocumentUpdateHandler } from './hydranium-document-update-hand
15
16
  * SHARED slot, so the head binds it in `createLspServerSharedModule` — a
16
17
  * separate module from `createLspServerLanguageModule`. An adopter who adds
17
18
  * only the language module gets a server that boots, links and serves
18
- * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: echo
19
- * suppression for the server's own writes, the `didChangeContent` debounce,
20
- * `markNextReason` stamping and the last-client-close rebuild are all absent,
21
- * with nothing in the log to say so.
19
+ * completion, and quietly runs Langium's `DefaultDocumentUpdateHandler`: every
20
+ * behaviour `HydraniumDocumentUpdateHandler` adds, the editor save gate
21
+ * included, is absent, with nothing in the log to say so.
22
22
  *
23
23
  * The type system does not catch it. `createIntegrationServices` returns
24
24
  * `inject(...) as unknown as TShared`, so widening `TShared` with
@@ -49,12 +49,18 @@ export function assertLspHeadComposed(services) {
49
49
  }
50
50
  /**
51
51
  * The framework's LSP server entry point: {@link assertLspHeadComposed}, then
52
- * Langium's `startLanguageServer` unchanged. Signature-compatible with
53
- * Langium's, so it is a drop-in for adopters importing from
54
- * `@hydranium/core/lsp`.
52
+ * {@link guardDiagnosticsConnection} on the tree's connection, then Langium's
53
+ * `startLanguageServer`. Signature-compatible with Langium's, so it is a
54
+ * drop-in for adopters importing from `@hydranium/core/lsp`. Calling Langium's
55
+ * directly skips both: the composition check, and the guard without which a
56
+ * publish racing teardown fails the build that validated the document.
55
57
  */
56
58
  export function startLanguageServer(services, serviceRequirements = {}) {
57
59
  assertLspHeadComposed(services);
60
+ const connection = services.lsp.Connection;
61
+ if (connection) {
62
+ guardDiagnosticsConnection(connection);
63
+ }
58
64
  startLangiumLanguageServer(services, serviceRequirements);
59
65
  }
60
66
  //# sourceMappingURL=start-language-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start-language-server.js","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,mBAAmB,IAAI,0BAA0B,EAGnD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA+B;IAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;QAC7B,OAAO;IACV,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,IAAI,CAAC,CAAC,OAAO,YAAY,8BAA8B,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACZ,oGAAoG;YACjG,IAAI,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,uEAAuE;YAClH,kHAAkH;YAClH,kGAAkG;YAClG,4GAA4G;YAC5G,4CAA4C,CACjD,CAAC;IACL,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA+B,EAAE,sBAAoD,EAAE;IACxH,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"start-language-server.js","sourceRoot":"","sources":["../../src/lsp/start-language-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,mBAAmB,IAAI,0BAA0B,EAGnD,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA+B;IAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC;QAC7B,OAAO;IACV,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,IAAI,CAAC,CAAC,OAAO,YAAY,8BAA8B,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACZ,oGAAoG;YACjG,IAAI,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,uEAAuE;YAClH,kHAAkH;YAClH,kGAAkG;YAClG,4GAA4G;YAC5G,4CAA4C,CACjD,CAAC;IACL,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA+B,EAAE,mBAAmB,GAAiC,EAAE;IACxH,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACd,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,0BAA0B,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAC7D,CAAC"}
@@ -8,7 +8,7 @@
8
8
  ********************************************************************************/
9
9
  import { type MessageDefinition, type ParamsArg, type ResolvedMessage } from '@hydranium/protocol';
10
10
  import type { AstNode, DiagnosticData, DiagnosticInfo, Properties, ValidationAcceptor } from '@hydranium/langium';
11
- import type { Diagnostic } from 'vscode-languageserver-protocol';
11
+ import { Diagnostic } from 'vscode-languageserver-protocol';
12
12
  /**
13
13
  * Raise a validation diagnostic from a declaration, so the call site never
14
14
  * restates the code or the sentence.
@@ -20,11 +20,16 @@ import type { Diagnostic } from 'vscode-languageserver-protocol';
20
20
  * be able to request a quick fix. The identity is merged OVER whatever they
21
21
  * pass, which makes the two conventions co-exist rather than compete.
22
22
  *
23
- * The identity lands in both `code` and `data.hydranium` on purpose. `code` is
24
- * what survives to the editor surface; Theia's converter drops `data` before the
25
- * squiggle, so a parameterised diagnostic falls back to the server's English
26
- * there while any adopter-owned surface can still render the parameterised form
27
- * from the marker store.
23
+ * `data` admits adopter-owned keys beside Langium's, which is why the index
24
+ * signature is there rather than a bare `Partial<DiagnosticData>`. Langium's
25
+ * shape is closed, and a diagnostic that carries a COMPANION payload for its own
26
+ * surface to read — the field a form must highlight, say — has nowhere else to
27
+ * put it: an encoder projecting that payload reads `diagnostic.data`, so the
28
+ * narrower type made the identity and the companion mutually exclusive.
29
+ *
30
+ * The identity lands in both `code` and `data.hydranium` on purpose: Theia's
31
+ * converter drops `data` before the squiggle, so `code` is what survives to the
32
+ * editor surface.
28
33
  *
29
34
  * `DiagnosticInfo` must be Langium's own type: a `Parameters<ValidationAcceptor>[2]`
30
35
  * shortcut compiles but loses the `property?: Properties<N>` relation. The `data`
@@ -32,15 +37,16 @@ import type { Diagnostic } from 'vscode-languageserver-protocol';
32
37
  * declares `data?: unknown` and an `unknown` cannot be spread.
33
38
  */
34
39
  export declare function acceptMessage<S extends string, N extends AstNode, P extends Properties<N> = Properties<N>>(accept: ValidationAcceptor, severity: 'error' | 'warning' | 'info' | 'hint', message: MessageDefinition<S>, info: Omit<DiagnosticInfo<N, P>, 'code' | 'data'> & {
35
- data?: Partial<DiagnosticData>;
40
+ data?: Partial<DiagnosticData> & Record<string, unknown>;
36
41
  }, ...params: ParamsArg<S>): void;
37
42
  /**
38
- * Recover the identity from a published diagnostic, for a surface that renders
39
- * diagnostics itself.
43
+ * Recover the identity from a published diagnostic, for a surface that
44
+ * identifies or renders diagnostics itself.
40
45
  *
41
- * The `MarkupContent` narrowing is not padding: `Diagnostic.message` is
42
- * `string | MarkupContent` in LSP 3.17+ and this does not compile without it.
43
- * Only the string form is a resolved English sentence.
46
+ * `Diagnostic.message` is `string | MarkupContent` in LSP 3.17+, so the text
47
+ * comes from upstream's own `Diagnostic.getMessageString` rather than a
48
+ * hand-rolled narrowing — consuming the library in its style, and one fewer
49
+ * place restating the union.
44
50
  */
45
51
  export declare function resolvedFromDiagnostic(diagnostic: Diagnostic): ResolvedMessage | undefined;
46
52
  //# sourceMappingURL=carriers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"carriers.d.ts","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAIJ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,eAAe,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EACvG,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,EACtF,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACvB,IAAI,CAGN;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,CAM1F"}
1
+ {"version":3,"file":"carriers.d.ts","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAIJ,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,eAAe,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EACvG,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,EAC/C,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAChH,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACvB,IAAI,CAMN;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,SAAS,CAK1F"}
@@ -7,6 +7,7 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
  import { hasMessageIdentity, messageData } from '@hydranium/protocol';
10
+ import { Diagnostic } from 'vscode-languageserver-protocol';
10
11
  /**
11
12
  * Raise a validation diagnostic from a declaration, so the call site never
12
13
  * restates the code or the sentence.
@@ -18,11 +19,16 @@ import { hasMessageIdentity, messageData } from '@hydranium/protocol';
18
19
  * be able to request a quick fix. The identity is merged OVER whatever they
19
20
  * pass, which makes the two conventions co-exist rather than compete.
20
21
  *
21
- * The identity lands in both `code` and `data.hydranium` on purpose. `code` is
22
- * what survives to the editor surface; Theia's converter drops `data` before the
23
- * squiggle, so a parameterised diagnostic falls back to the server's English
24
- * there while any adopter-owned surface can still render the parameterised form
25
- * from the marker store.
22
+ * `data` admits adopter-owned keys beside Langium's, which is why the index
23
+ * signature is there rather than a bare `Partial<DiagnosticData>`. Langium's
24
+ * shape is closed, and a diagnostic that carries a COMPANION payload for its own
25
+ * surface to read — the field a form must highlight, say — has nowhere else to
26
+ * put it: an encoder projecting that payload reads `diagnostic.data`, so the
27
+ * narrower type made the identity and the companion mutually exclusive.
28
+ *
29
+ * The identity lands in both `code` and `data.hydranium` on purpose: Theia's
30
+ * converter drops `data` before the squiggle, so `code` is what survives to the
31
+ * editor surface.
26
32
  *
27
33
  * `DiagnosticInfo` must be Langium's own type: a `Parameters<ValidationAcceptor>[2]`
28
34
  * shortcut compiles but loses the `property?: Properties<N>` relation. The `data`
@@ -30,22 +36,25 @@ import { hasMessageIdentity, messageData } from '@hydranium/protocol';
30
36
  * declares `data?: unknown` and an `unknown` cannot be spread.
31
37
  */
32
38
  export function acceptMessage(accept, severity, message, info, ...params) {
33
- const data = { ...info.data, ...messageData(message, ...params) };
39
+ const data = {
40
+ ...info.data,
41
+ ...messageData(message, ...params)
42
+ };
34
43
  accept(severity, message.format(...params), { ...info, code: message.code, data });
35
44
  }
36
45
  /**
37
- * Recover the identity from a published diagnostic, for a surface that renders
38
- * diagnostics itself.
46
+ * Recover the identity from a published diagnostic, for a surface that
47
+ * identifies or renders diagnostics itself.
39
48
  *
40
- * The `MarkupContent` narrowing is not padding: `Diagnostic.message` is
41
- * `string | MarkupContent` in LSP 3.17+ and this does not compile without it.
42
- * Only the string form is a resolved English sentence.
49
+ * `Diagnostic.message` is `string | MarkupContent` in LSP 3.17+, so the text
50
+ * comes from upstream's own `Diagnostic.getMessageString` rather than a
51
+ * hand-rolled narrowing — consuming the library in its style, and one fewer
52
+ * place restating the union.
43
53
  */
44
54
  export function resolvedFromDiagnostic(diagnostic) {
45
55
  if (!hasMessageIdentity(diagnostic.data)) {
46
56
  return undefined;
47
57
  }
48
- const text = typeof diagnostic.message === 'string' ? diagnostic.message : diagnostic.message.value;
49
- return { ...diagnostic.data.hydranium, text };
58
+ return { ...diagnostic.data.hydranium, text: Diagnostic.getMessageString(diagnostic) };
50
59
  }
51
60
  //# sourceMappingURL=carriers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"carriers.js","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,kBAAkB,EAClB,WAAW,EAKb,MAAM,qBAAqB,CAAC;AAI7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,aAAa,CAC1B,MAA0B,EAC1B,QAA+C,EAC/C,OAA6B,EAC7B,IAAsF,EACtF,GAAG,MAAoB;IAEvB,MAAM,IAAI,GAAmD,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAClH,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAsB;IAC1D,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;IACpG,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"carriers.js","sourceRoot":"","sources":["../../src/messages/carriers.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EACJ,kBAAkB,EAClB,WAAW,EAKb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,aAAa,CAC1B,MAA0B,EAC1B,QAA+C,EAC/C,OAA6B,EAC7B,IAAgH,EAChH,GAAG,MAAoB;IAEvB,MAAM,IAAI,GAA6E;QACpF,GAAG,IAAI,CAAC,IAAI;QACZ,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;KACpC,CAAC;IACF,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAsB;IAC1D,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;AAC1F,CAAC"}
@@ -16,7 +16,10 @@
16
16
  * code is the contract, and renaming one is a breaking change.
17
17
  */
18
18
  export * from './carriers.js';
19
+ export * from './renderer.js';
20
+ export { MODEL_UPDATE_EDIT } from '../langium/model-service/model-service.js';
19
21
  export { SEPARATOR_IN_NAME } from '../langium/naming/name-separator-validation.js';
22
+ export { INVALID_DEDENT, UNEXPECTED_CHARACTER, MISSING_ITERATION, NO_VIABLE_ALTERNATIVE, TRAILING_INPUT, UNEXPECTED_TOKEN, UNPOPPABLE_LEXER_MODE, UNRESOLVED_REFERENCE } from '../langium/validation/document-validator.js';
20
23
  export { NO_LOADABLE_CONTENT } from '../langium/workspace/langium-documents.js';
21
- export { NO_SUCH_FILE, NO_SUCH_PATH } from '../langium/workspace/in-memory-file-system-provider.js';
24
+ export { NO_SUCH_FILE, NO_SUCH_PATH, UNSUPPORTED_DELETE, UNSUPPORTED_WRITE } from '../langium/workspace/in-memory-file-system-provider.js';
22
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wDAAwD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EACJ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC"}
@@ -16,7 +16,10 @@
16
16
  * code is the contract, and renaming one is a breaking change.
17
17
  */
18
18
  export * from './carriers.js';
19
+ export * from './renderer.js';
20
+ export { MODEL_UPDATE_EDIT } from '../langium/model-service/model-service.js';
19
21
  export { SEPARATOR_IN_NAME } from '../langium/naming/name-separator-validation.js';
22
+ export { INVALID_DEDENT, UNEXPECTED_CHARACTER, MISSING_ITERATION, NO_VIABLE_ALTERNATIVE, TRAILING_INPUT, UNEXPECTED_TOKEN, UNPOPPABLE_LEXER_MODE, UNRESOLVED_REFERENCE } from '../langium/validation/document-validator.js';
20
23
  export { NO_LOADABLE_CONTENT } from '../langium/workspace/langium-documents.js';
21
- export { NO_SUCH_FILE, NO_SUCH_PATH } from '../langium/workspace/in-memory-file-system-provider.js';
24
+ export { NO_SUCH_FILE, NO_SUCH_PATH, UNSUPPORTED_DELETE, UNSUPPORTED_WRITE } from '../langium/workspace/in-memory-file-system-provider.js';
22
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wDAAwD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;GAQG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EACJ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACtB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wDAAwD,CAAC"}