@hydranium/core 1.0.0-next.37 → 1.0.0-next.370

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 (787) 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 +254 -140
  19. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  20. package/lib/documents/ast-document-manager.js +311 -127
  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 +445 -282
  51. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  52. package/lib/documents/hydranium-text-documents.js +903 -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 +3 -0
  75. package/lib/index.d.ts.map +1 -1
  76. package/lib/index.js +3 -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/ast-extension/ast-node-builder.d.ts +12 -7
  83. package/lib/langium/ast-extension/ast-node-builder.d.ts.map +1 -1
  84. package/lib/langium/ast-extension/ast-node-builder.js +25 -9
  85. package/lib/langium/ast-extension/ast-node-builder.js.map +1 -1
  86. package/lib/langium/bootstrap.d.ts +49 -36
  87. package/lib/langium/bootstrap.d.ts.map +1 -1
  88. package/lib/langium/bootstrap.js +75 -36
  89. package/lib/langium/bootstrap.js.map +1 -1
  90. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts +9 -9
  91. package/lib/langium/build-phase-pass/build-phase-pass-service.d.ts.map +1 -1
  92. package/lib/langium/build-phase-pass/build-phase-pass-service.js +25 -16
  93. package/lib/langium/build-phase-pass/build-phase-pass-service.js.map +1 -1
  94. package/lib/langium/build-phase-pass/build-phase-pass.d.ts +20 -8
  95. package/lib/langium/build-phase-pass/build-phase-pass.d.ts.map +1 -1
  96. package/lib/langium/build-phase-pass/build-phase-pass.js +20 -0
  97. package/lib/langium/build-phase-pass/build-phase-pass.js.map +1 -1
  98. package/lib/langium/composite-ast-reflection.d.ts +46 -0
  99. package/lib/langium/composite-ast-reflection.d.ts.map +1 -0
  100. package/lib/langium/composite-ast-reflection.js +97 -0
  101. package/lib/langium/composite-ast-reflection.js.map +1 -0
  102. package/lib/langium/config/configuration-provider.d.ts +81 -0
  103. package/lib/langium/config/configuration-provider.d.ts.map +1 -0
  104. package/lib/langium/config/configuration-provider.js +112 -0
  105. package/lib/langium/config/configuration-provider.js.map +1 -0
  106. package/lib/langium/config/index.d.ts +1 -0
  107. package/lib/langium/config/index.d.ts.map +1 -1
  108. package/lib/langium/config/index.js +1 -0
  109. package/lib/langium/config/index.js.map +1 -1
  110. package/lib/langium/config/settings.js.map +1 -1
  111. package/lib/langium/diagnostics/console-tee.d.ts +27 -0
  112. package/lib/langium/diagnostics/console-tee.d.ts.map +1 -0
  113. package/lib/langium/diagnostics/console-tee.js +141 -0
  114. package/lib/langium/diagnostics/console-tee.js.map +1 -0
  115. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts +9 -20
  116. package/lib/langium/diagnostics/hydranium-langium-profiler.d.ts.map +1 -1
  117. package/lib/langium/diagnostics/hydranium-langium-profiler.js +15 -24
  118. package/lib/langium/diagnostics/hydranium-langium-profiler.js.map +1 -1
  119. package/lib/langium/diagnostics/log-preamble.js +1 -1
  120. package/lib/langium/diagnostics/log-preamble.js.map +1 -1
  121. package/lib/langium/diagnostics/logger.d.ts +25 -6
  122. package/lib/langium/diagnostics/logger.d.ts.map +1 -1
  123. package/lib/langium/diagnostics/logger.js +49 -17
  124. package/lib/langium/diagnostics/logger.js.map +1 -1
  125. package/lib/langium/diagnostics/lsp-logger.d.ts +25 -0
  126. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
  127. package/lib/langium/diagnostics/lsp-logger.js +81 -46
  128. package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
  129. package/lib/langium/diagnostics/server-tracer.d.ts.map +1 -1
  130. package/lib/langium/diagnostics/server-tracer.js.map +1 -1
  131. package/lib/langium/document-builder/build-pipeline-integration.d.ts +21 -1
  132. package/lib/langium/document-builder/build-pipeline-integration.d.ts.map +1 -1
  133. package/lib/langium/document-builder/build-pipeline-integration.js +43 -30
  134. package/lib/langium/document-builder/build-pipeline-integration.js.map +1 -1
  135. package/lib/langium/document-builder/build-session.d.ts +6 -5
  136. package/lib/langium/document-builder/build-session.d.ts.map +1 -1
  137. package/lib/langium/document-builder/build-session.js +5 -5
  138. package/lib/langium/document-builder/build-session.js.map +1 -1
  139. package/lib/langium/document-builder/document-builder.d.ts +308 -39
  140. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  141. package/lib/langium/document-builder/document-builder.js +490 -79
  142. package/lib/langium/document-builder/document-builder.js.map +1 -1
  143. package/lib/langium/documentation/comment-provider.d.ts.map +1 -1
  144. package/lib/langium/documentation/comment-provider.js.map +1 -1
  145. package/lib/langium/integration-services.d.ts +39 -23
  146. package/lib/langium/integration-services.d.ts.map +1 -1
  147. package/lib/langium/integration-services.js +7 -4
  148. package/lib/langium/integration-services.js.map +1 -1
  149. package/lib/langium/integrity/integrity-rule.d.ts +17 -8
  150. package/lib/langium/integrity/integrity-rule.d.ts.map +1 -1
  151. package/lib/langium/integrity/integrity-rule.js.map +1 -1
  152. package/lib/langium/integrity/integrity-service.d.ts +95 -27
  153. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  154. package/lib/langium/integrity/integrity-service.js +303 -63
  155. package/lib/langium/integrity/integrity-service.js.map +1 -1
  156. package/lib/langium/keys/containment.d.ts +3 -2
  157. package/lib/langium/keys/containment.d.ts.map +1 -1
  158. package/lib/langium/keys/containment.js.map +1 -1
  159. package/lib/langium/keys/name-based-key-provider.d.ts +17 -10
  160. package/lib/langium/keys/name-based-key-provider.d.ts.map +1 -1
  161. package/lib/langium/keys/name-based-key-provider.js +24 -12
  162. package/lib/langium/keys/name-based-key-provider.js.map +1 -1
  163. package/lib/langium/keys/positional-key-provider.d.ts.map +1 -1
  164. package/lib/langium/keys/positional-key-provider.js.map +1 -1
  165. package/lib/langium/labeling/label-provider.d.ts.map +1 -1
  166. package/lib/langium/labeling/label-provider.js.map +1 -1
  167. package/lib/langium/language-module.d.ts +30 -5
  168. package/lib/langium/language-module.d.ts.map +1 -1
  169. package/lib/langium/language-module.js +21 -5
  170. package/lib/langium/language-module.js.map +1 -1
  171. package/lib/langium/model-service/client-session.d.ts +383 -0
  172. package/lib/langium/model-service/client-session.d.ts.map +1 -0
  173. package/lib/langium/model-service/client-session.js +455 -0
  174. package/lib/langium/model-service/client-session.js.map +1 -0
  175. package/lib/langium/model-service/index.d.ts +2 -0
  176. package/lib/langium/model-service/index.d.ts.map +1 -1
  177. package/lib/langium/model-service/index.js +2 -0
  178. package/lib/langium/model-service/index.js.map +1 -1
  179. package/lib/langium/model-service/model-events.d.ts +68 -0
  180. package/lib/langium/model-service/model-events.d.ts.map +1 -0
  181. package/lib/langium/model-service/model-events.js +10 -0
  182. package/lib/langium/model-service/model-events.js.map +1 -0
  183. package/lib/langium/model-service/model-service.d.ts +440 -323
  184. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  185. package/lib/langium/model-service/model-service.js +601 -397
  186. package/lib/langium/model-service/model-service.js.map +1 -1
  187. package/lib/langium/module.d.ts +89 -30
  188. package/lib/langium/module.d.ts.map +1 -1
  189. package/lib/langium/module.js +39 -27
  190. package/lib/langium/module.js.map +1 -1
  191. package/lib/langium/naming/name-provider.d.ts +32 -7
  192. package/lib/langium/naming/name-provider.d.ts.map +1 -1
  193. package/lib/langium/naming/name-provider.js +10 -4
  194. package/lib/langium/naming/name-provider.js.map +1 -1
  195. package/lib/langium/naming/name-separator-validation.d.ts.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 +15 -11
  203. package/lib/langium/residency/cst-residency-service.d.ts.map +1 -1
  204. package/lib/langium/residency/cst-residency-service.js +15 -3
  205. package/lib/langium/residency/cst-residency-service.js.map +1 -1
  206. package/lib/langium/scope/ast-node-description-provider.d.ts +46 -10
  207. package/lib/langium/scope/ast-node-description-provider.d.ts.map +1 -1
  208. package/lib/langium/scope/ast-node-description-provider.js +88 -15
  209. package/lib/langium/scope/ast-node-description-provider.js.map +1 -1
  210. package/lib/langium/scope/built-local-symbols.d.ts +12 -0
  211. package/lib/langium/scope/built-local-symbols.d.ts.map +1 -0
  212. package/lib/langium/scope/built-local-symbols.js +11 -0
  213. package/lib/langium/scope/built-local-symbols.js.map +1 -0
  214. package/lib/langium/scope/fallback-scope.d.ts +27 -0
  215. package/lib/langium/scope/fallback-scope.d.ts.map +1 -0
  216. package/lib/langium/scope/fallback-scope.js +35 -0
  217. package/lib/langium/scope/fallback-scope.js.map +1 -0
  218. package/lib/langium/scope/hydranium-scope-computation.d.ts +21 -18
  219. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
  220. package/lib/langium/scope/hydranium-scope-computation.js +38 -39
  221. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
  222. package/lib/langium/scope/hydranium-scope-provider.d.ts +122 -32
  223. package/lib/langium/scope/hydranium-scope-provider.d.ts.map +1 -1
  224. package/lib/langium/scope/hydranium-scope-provider.js +217 -39
  225. package/lib/langium/scope/hydranium-scope-provider.js.map +1 -1
  226. package/lib/langium/scope/index.d.ts +1 -0
  227. package/lib/langium/scope/index.d.ts.map +1 -1
  228. package/lib/langium/scope/index.js +1 -0
  229. package/lib/langium/scope/index.js.map +1 -1
  230. package/lib/langium/scope/reference-builder.d.ts.map +1 -1
  231. package/lib/langium/scope/reference-builder.js.map +1 -1
  232. package/lib/langium/scope/reference-candidate-provider.d.ts +6 -5
  233. package/lib/langium/scope/reference-candidate-provider.d.ts.map +1 -1
  234. package/lib/langium/scope/reference-candidate-provider.js +3 -2
  235. package/lib/langium/scope/reference-candidate-provider.js.map +1 -1
  236. package/lib/langium/scope/scope-extension-service.d.ts +69 -37
  237. package/lib/langium/scope/scope-extension-service.d.ts.map +1 -1
  238. package/lib/langium/scope/scope-extension-service.js +102 -29
  239. package/lib/langium/scope/scope-extension-service.js.map +1 -1
  240. package/lib/langium/scope/scoped-ast-node-description.d.ts +1 -3
  241. package/lib/langium/scope/scoped-ast-node-description.d.ts.map +1 -1
  242. package/lib/langium/scope/scoped-ast-node-description.js +1 -3
  243. package/lib/langium/scope/scoped-ast-node-description.js.map +1 -1
  244. package/lib/langium/serialization/abstract-serializer.d.ts +38 -27
  245. package/lib/langium/serialization/abstract-serializer.d.ts.map +1 -1
  246. package/lib/langium/serialization/abstract-serializer.js +54 -30
  247. package/lib/langium/serialization/abstract-serializer.js.map +1 -1
  248. package/lib/langium/serialization/json-serializer.d.ts +8 -1
  249. package/lib/langium/serialization/json-serializer.d.ts.map +1 -1
  250. package/lib/langium/serialization/json-serializer.js +13 -3
  251. package/lib/langium/serialization/json-serializer.js.map +1 -1
  252. package/lib/langium/serialization/serializer.d.ts +1 -1
  253. package/lib/langium/serialization/yaml-serializer.d.ts +12 -0
  254. package/lib/langium/serialization/yaml-serializer.d.ts.map +1 -1
  255. package/lib/langium/serialization/yaml-serializer.js +24 -4
  256. package/lib/langium/serialization/yaml-serializer.js.map +1 -1
  257. package/lib/langium/service-registry.d.ts +29 -1
  258. package/lib/langium/service-registry.d.ts.map +1 -1
  259. package/lib/langium/service-registry.js +37 -0
  260. package/lib/langium/service-registry.js.map +1 -1
  261. package/lib/langium/shared-services.d.ts +10 -4
  262. package/lib/langium/shared-services.d.ts.map +1 -1
  263. package/lib/langium/shared-services.js.map +1 -1
  264. package/lib/langium/single-langium-copy.d.ts +22 -0
  265. package/lib/langium/single-langium-copy.d.ts.map +1 -0
  266. package/lib/langium/single-langium-copy.js +36 -0
  267. package/lib/langium/single-langium-copy.js.map +1 -0
  268. package/lib/langium/transfer/transfer-encoder.d.ts +60 -39
  269. package/lib/langium/transfer/transfer-encoder.d.ts.map +1 -1
  270. package/lib/langium/transfer/transfer-encoder.js +35 -24
  271. package/lib/langium/transfer/transfer-encoder.js.map +1 -1
  272. package/lib/langium/trivia/comment-preserver.d.ts +543 -0
  273. package/lib/langium/trivia/comment-preserver.d.ts.map +1 -0
  274. package/lib/langium/trivia/comment-preserver.js +1164 -0
  275. package/lib/langium/trivia/comment-preserver.js.map +1 -0
  276. package/lib/langium/trivia/document-ending-preserver.d.ts +51 -0
  277. package/lib/langium/trivia/document-ending-preserver.d.ts.map +1 -0
  278. package/lib/langium/trivia/document-ending-preserver.js +62 -0
  279. package/lib/langium/trivia/document-ending-preserver.js.map +1 -0
  280. package/lib/langium/trivia/index.d.ts +14 -0
  281. package/lib/langium/trivia/index.d.ts.map +1 -0
  282. package/lib/langium/trivia/index.js +14 -0
  283. package/lib/langium/trivia/index.js.map +1 -0
  284. package/lib/langium/trivia/trivia-contribution.d.ts +37 -0
  285. package/lib/langium/trivia/trivia-contribution.d.ts.map +1 -0
  286. package/lib/langium/trivia/trivia-contribution.js +10 -0
  287. package/lib/langium/trivia/trivia-contribution.js.map +1 -0
  288. package/lib/langium/trivia/trivia-preserver.d.ts +52 -0
  289. package/lib/langium/trivia/trivia-preserver.d.ts.map +1 -0
  290. package/lib/langium/trivia/trivia-preserver.js +10 -0
  291. package/lib/langium/trivia/trivia-preserver.js.map +1 -0
  292. package/lib/langium/trivia/trivia-service.d.ts +70 -0
  293. package/lib/langium/trivia/trivia-service.d.ts.map +1 -0
  294. package/lib/langium/trivia/trivia-service.js +56 -0
  295. package/lib/langium/trivia/trivia-service.js.map +1 -0
  296. package/lib/langium/update-rewrite/normalize-empty-strings.d.ts.map +1 -1
  297. package/lib/langium/update-rewrite/update-rewrite-service.d.ts +1 -1
  298. package/lib/langium/update-rewrite/update-rewrite-service.d.ts.map +1 -1
  299. package/lib/langium/update-rewrite/update-rewrite-service.js.map +1 -1
  300. package/lib/langium/update-rewrite/update-rewrite.d.ts +1 -1
  301. package/lib/langium/validation/document-validator.d.ts +168 -23
  302. package/lib/langium/validation/document-validator.d.ts.map +1 -1
  303. package/lib/langium/validation/document-validator.js +264 -26
  304. package/lib/langium/validation/document-validator.js.map +1 -1
  305. package/lib/langium/validation/validation-contribution-collector.d.ts +9 -1
  306. package/lib/langium/validation/validation-contribution-collector.d.ts.map +1 -1
  307. package/lib/langium/validation/validation-contribution-collector.js +1 -1
  308. package/lib/langium/validation/validation-contribution-collector.js.map +1 -1
  309. package/lib/langium/workspace/ast-node-locator.d.ts +24 -0
  310. package/lib/langium/workspace/ast-node-locator.d.ts.map +1 -0
  311. package/lib/langium/workspace/ast-node-locator.js +32 -0
  312. package/lib/langium/workspace/ast-node-locator.js.map +1 -0
  313. package/lib/langium/workspace/document-uri-policy.d.ts +24 -15
  314. package/lib/langium/workspace/document-uri-policy.d.ts.map +1 -1
  315. package/lib/langium/workspace/document-uri-policy.js +22 -13
  316. package/lib/langium/workspace/document-uri-policy.js.map +1 -1
  317. package/lib/langium/workspace/file-not-found.d.ts +23 -0
  318. package/lib/langium/workspace/file-not-found.d.ts.map +1 -0
  319. package/lib/langium/workspace/file-not-found.js +31 -0
  320. package/lib/langium/workspace/file-not-found.js.map +1 -0
  321. package/lib/langium/workspace/file-system-provider.d.ts +167 -8
  322. package/lib/langium/workspace/file-system-provider.d.ts.map +1 -1
  323. package/lib/langium/workspace/file-system-provider.js +115 -13
  324. package/lib/langium/workspace/file-system-provider.js.map +1 -1
  325. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts +31 -1
  326. package/lib/langium/workspace/hydranium-langium-document-factory.d.ts.map +1 -1
  327. package/lib/langium/workspace/hydranium-langium-document-factory.js +54 -0
  328. package/lib/langium/workspace/hydranium-langium-document-factory.js.map +1 -1
  329. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +43 -1
  330. package/lib/langium/workspace/hydranium-workspace-lock.d.ts.map +1 -1
  331. package/lib/langium/workspace/hydranium-workspace-lock.js +58 -1
  332. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
  333. package/lib/langium/workspace/hydranium-workspace-manager.d.ts +103 -21
  334. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
  335. package/lib/langium/workspace/hydranium-workspace-manager.js +184 -31
  336. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
  337. package/lib/langium/workspace/in-memory-file-system-provider.d.ts +26 -9
  338. package/lib/langium/workspace/in-memory-file-system-provider.d.ts.map +1 -1
  339. package/lib/langium/workspace/in-memory-file-system-provider.js +45 -22
  340. package/lib/langium/workspace/in-memory-file-system-provider.js.map +1 -1
  341. package/lib/langium/workspace/index-manager.d.ts.map +1 -1
  342. package/lib/langium/workspace/index-manager.js.map +1 -1
  343. package/lib/langium/workspace/index.d.ts +2 -0
  344. package/lib/langium/workspace/index.d.ts.map +1 -1
  345. package/lib/langium/workspace/index.js +2 -0
  346. package/lib/langium/workspace/index.js.map +1 -1
  347. package/lib/langium/workspace/initialize-workspace.d.ts +40 -3
  348. package/lib/langium/workspace/initialize-workspace.d.ts.map +1 -1
  349. package/lib/langium/workspace/initialize-workspace.js +68 -3
  350. package/lib/langium/workspace/initialize-workspace.js.map +1 -1
  351. package/lib/langium/workspace/langium-documents.d.ts +7 -0
  352. package/lib/langium/workspace/langium-documents.d.ts.map +1 -1
  353. package/lib/langium/workspace/langium-documents.js +18 -1
  354. package/lib/langium/workspace/langium-documents.js.map +1 -1
  355. package/lib/langium/workspace/persistent-file-system-provider.d.ts +16 -10
  356. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
  357. package/lib/langium/workspace/persistent-file-system-provider.js +25 -13
  358. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
  359. package/lib/{documents → langium/workspace}/self-save-registry.d.ts +7 -9
  360. package/lib/langium/workspace/self-save-registry.d.ts.map +1 -0
  361. package/lib/{documents → langium/workspace}/self-save-registry.js +9 -11
  362. package/lib/langium/workspace/self-save-registry.js.map +1 -0
  363. package/lib/langium/workspace/virtual-document.d.ts +55 -21
  364. package/lib/langium/workspace/virtual-document.d.ts.map +1 -1
  365. package/lib/langium/workspace/virtual-document.js +87 -24
  366. package/lib/langium/workspace/virtual-document.js.map +1 -1
  367. package/lib/langium/workspace/write-lock-scope.d.ts +22 -10
  368. package/lib/langium/workspace/write-lock-scope.d.ts.map +1 -1
  369. package/lib/langium/workspace/write-lock-scope.js +15 -5
  370. package/lib/langium/workspace/write-lock-scope.js.map +1 -1
  371. package/lib/launcher/integrated-server.d.ts +3 -1
  372. package/lib/launcher/integrated-server.d.ts.map +1 -1
  373. package/lib/locale/server-locale.d.ts +6 -6
  374. package/lib/locale/server-locale.d.ts.map +1 -1
  375. package/lib/locale/server-locale.js.map +1 -1
  376. package/lib/lsp/completion/hydranium-completion-provider.d.ts +44 -2
  377. package/lib/lsp/completion/hydranium-completion-provider.d.ts.map +1 -1
  378. package/lib/lsp/completion/hydranium-completion-provider.js +68 -0
  379. package/lib/lsp/completion/hydranium-completion-provider.js.map +1 -1
  380. package/lib/lsp/connection-features.d.ts +23 -0
  381. package/lib/lsp/connection-features.d.ts.map +1 -0
  382. package/lib/lsp/connection-features.js +60 -0
  383. package/lib/lsp/connection-features.js.map +1 -0
  384. package/lib/lsp/diagnostics-connection.d.ts +27 -0
  385. package/lib/lsp/diagnostics-connection.d.ts.map +1 -0
  386. package/lib/lsp/diagnostics-connection.js +53 -0
  387. package/lib/lsp/diagnostics-connection.js.map +1 -0
  388. package/lib/lsp/edit-requests-guard.d.ts +31 -0
  389. package/lib/lsp/edit-requests-guard.d.ts.map +1 -0
  390. package/lib/lsp/edit-requests-guard.js +125 -0
  391. package/lib/lsp/edit-requests-guard.js.map +1 -0
  392. package/lib/lsp/hydranium-document-update-handler.d.ts +126 -82
  393. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  394. package/lib/lsp/hydranium-document-update-handler.js +234 -101
  395. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  396. package/lib/lsp/index.d.ts +6 -2
  397. package/lib/lsp/index.d.ts.map +1 -1
  398. package/lib/lsp/index.js +6 -2
  399. package/lib/lsp/index.js.map +1 -1
  400. package/lib/lsp/lsp-latency.d.ts +39 -0
  401. package/lib/lsp/lsp-latency.d.ts.map +1 -0
  402. package/lib/lsp/lsp-latency.js +58 -0
  403. package/lib/lsp/lsp-latency.js.map +1 -0
  404. package/lib/lsp/save-text-document.d.ts +31 -0
  405. package/lib/lsp/save-text-document.d.ts.map +1 -0
  406. package/lib/lsp/save-text-document.js +52 -0
  407. package/lib/lsp/save-text-document.js.map +1 -0
  408. package/lib/lsp/semantic-token-provider.d.ts +58 -2
  409. package/lib/lsp/semantic-token-provider.d.ts.map +1 -1
  410. package/lib/lsp/semantic-token-provider.js +98 -9
  411. package/lib/lsp/semantic-token-provider.js.map +1 -1
  412. package/lib/lsp/shared-module.d.ts +4 -8
  413. package/lib/lsp/shared-module.d.ts.map +1 -1
  414. package/lib/lsp/shared-module.js.map +1 -1
  415. package/lib/lsp/start-language-server.d.ts +12 -7
  416. package/lib/lsp/start-language-server.d.ts.map +1 -1
  417. package/lib/lsp/start-language-server.js +21 -7
  418. package/lib/lsp/start-language-server.js.map +1 -1
  419. package/lib/messages/carriers.d.ts +4 -6
  420. package/lib/messages/carriers.d.ts.map +1 -1
  421. package/lib/messages/carriers.js +4 -6
  422. package/lib/messages/carriers.js.map +1 -1
  423. package/lib/messages/index.d.ts +2 -2
  424. package/lib/messages/index.d.ts.map +1 -1
  425. package/lib/messages/index.js +2 -2
  426. package/lib/messages/index.js.map +1 -1
  427. package/lib/messages/renderer.d.ts +10 -4
  428. package/lib/messages/renderer.d.ts.map +1 -1
  429. package/lib/messages/renderer.js +6 -0
  430. package/lib/messages/renderer.js.map +1 -1
  431. package/lib/node/event-loop-monitor.d.ts.map +1 -1
  432. package/lib/node/event-loop-monitor.js +2 -1
  433. package/lib/node/event-loop-monitor.js.map +1 -1
  434. package/lib/node/heap-ceiling.d.ts +61 -0
  435. package/lib/node/heap-ceiling.d.ts.map +1 -0
  436. package/lib/node/heap-ceiling.js +72 -0
  437. package/lib/node/heap-ceiling.js.map +1 -0
  438. package/lib/node/index.d.ts +1 -1
  439. package/lib/node/index.d.ts.map +1 -1
  440. package/lib/node/index.js +5 -1
  441. package/lib/node/index.js.map +1 -1
  442. package/lib/node/latency-from-env.d.ts +1 -1
  443. package/lib/node/latency-from-env.js +1 -1
  444. package/lib/node/lint-grammar.js.map +1 -1
  445. package/lib/node/log-file-sink.d.ts +3 -2
  446. package/lib/node/log-file-sink.d.ts.map +1 -1
  447. package/lib/node/log-file-sink.js +6 -2
  448. package/lib/node/log-file-sink.js.map +1 -1
  449. package/lib/node/log-preamble-node.d.ts +5 -3
  450. package/lib/node/log-preamble-node.d.ts.map +1 -1
  451. package/lib/node/log-preamble-node.js +13 -10
  452. package/lib/node/log-preamble-node.js.map +1 -1
  453. package/lib/node/measure-memory.d.ts.map +1 -1
  454. package/lib/node/measure-memory.js +5 -4
  455. package/lib/node/measure-memory.js.map +1 -1
  456. package/lib/node/memory-monitor.d.ts +2 -2
  457. package/lib/node/memory-monitor.d.ts.map +1 -1
  458. package/lib/node/memory-monitor.js +9 -10
  459. package/lib/node/memory-monitor.js.map +1 -1
  460. package/lib/node/node-file-system-provider.d.ts +67 -9
  461. package/lib/node/node-file-system-provider.d.ts.map +1 -1
  462. package/lib/node/node-file-system-provider.js +198 -53
  463. package/lib/node/node-file-system-provider.js.map +1 -1
  464. package/lib/node/profile-capture.d.ts +12 -4
  465. package/lib/node/profile-capture.d.ts.map +1 -1
  466. package/lib/node/profile-capture.js +8 -6
  467. package/lib/node/profile-capture.js.map +1 -1
  468. package/lib/node/profile-digest.js.map +1 -1
  469. package/lib/node/profiling-run.d.ts +13 -3
  470. package/lib/node/profiling-run.d.ts.map +1 -1
  471. package/lib/node/profiling-run.js +17 -8
  472. package/lib/node/profiling-run.js.map +1 -1
  473. package/lib/node/rename-over-open-readers.d.ts +61 -0
  474. package/lib/node/rename-over-open-readers.d.ts.map +1 -0
  475. package/lib/node/rename-over-open-readers.js +80 -0
  476. package/lib/node/rename-over-open-readers.js.map +1 -0
  477. package/lib/node/server-diagnostics.js +1 -1
  478. package/lib/node/server-diagnostics.js.map +1 -1
  479. package/lib/node/server-state-snapshot.js +4 -4
  480. package/lib/node/server-state-snapshot.js.map +1 -1
  481. package/lib/node/socket-launcher.d.ts +43 -7
  482. package/lib/node/socket-launcher.d.ts.map +1 -1
  483. package/lib/node/socket-launcher.js +42 -7
  484. package/lib/node/socket-launcher.js.map +1 -1
  485. package/lib/node/startup-cpu-profile.d.ts +29 -0
  486. package/lib/node/startup-cpu-profile.d.ts.map +1 -0
  487. package/lib/node/startup-cpu-profile.js +91 -0
  488. package/lib/node/startup-cpu-profile.js.map +1 -0
  489. package/lib/node/stdio-launcher.d.ts +13 -13
  490. package/lib/node/stdio-launcher.d.ts.map +1 -1
  491. package/lib/node/stdio-launcher.js +21 -11
  492. package/lib/node/stdio-launcher.js.map +1 -1
  493. package/lib/node/validate-workspace.d.ts +1 -1
  494. package/lib/node/validate-workspace.d.ts.map +1 -1
  495. package/lib/node/validate-workspace.js +5 -1
  496. package/lib/node/validate-workspace.js.map +1 -1
  497. package/lib/testing/document-uri-policy-conformance.js +1 -1
  498. package/lib/testing/document-uri-policy-conformance.js.map +1 -1
  499. package/lib/testing/fake-description.js.map +1 -1
  500. package/lib/testing/fake-document.d.ts +2 -1
  501. package/lib/testing/fake-document.d.ts.map +1 -1
  502. package/lib/testing/fake-document.js.map +1 -1
  503. package/lib/testing/index.d.ts +1 -1
  504. package/lib/testing/index.d.ts.map +1 -1
  505. package/lib/testing/index.js +2 -1
  506. package/lib/testing/index.js.map +1 -1
  507. package/lib/testing/langium-test-helpers.d.ts.map +1 -1
  508. package/lib/testing/langium-test-helpers.js +1 -0
  509. package/lib/testing/langium-test-helpers.js.map +1 -1
  510. package/lib/testing/make-noop-language-services.js.map +1 -1
  511. package/lib/testing/make-noop-shared-services.js.map +1 -1
  512. package/lib/testing/make-test-services.d.ts +45 -14
  513. package/lib/testing/make-test-services.d.ts.map +1 -1
  514. package/lib/testing/make-test-services.js +23 -7
  515. package/lib/testing/make-test-services.js.map +1 -1
  516. package/lib/testing/make-test-tracer.d.ts +12 -0
  517. package/lib/testing/make-test-tracer.d.ts.map +1 -1
  518. package/lib/testing/make-test-tracer.js +13 -0
  519. package/lib/testing/make-test-tracer.js.map +1 -1
  520. package/lib/testing/node/applied-edit-capture.d.ts +29 -0
  521. package/lib/testing/node/applied-edit-capture.d.ts.map +1 -0
  522. package/lib/testing/node/applied-edit-capture.js +117 -0
  523. package/lib/testing/node/applied-edit-capture.js.map +1 -0
  524. package/lib/testing/node/golden-corpus.js.map +1 -1
  525. package/lib/testing/node/index.d.ts +1 -0
  526. package/lib/testing/node/index.d.ts.map +1 -1
  527. package/lib/testing/node/index.js +1 -0
  528. package/lib/testing/node/index.js.map +1 -1
  529. package/lib/testing/node/lsp-harness.d.ts.map +1 -1
  530. package/lib/testing/node/lsp-harness.js +2 -0
  531. package/lib/testing/node/lsp-harness.js.map +1 -1
  532. package/lib/testing/node/lsp-server-connection.d.ts +21 -6
  533. package/lib/testing/node/lsp-server-connection.d.ts.map +1 -1
  534. package/lib/testing/node/lsp-server-connection.js +49 -106
  535. package/lib/testing/node/lsp-server-connection.js.map +1 -1
  536. package/lib/testing/node/scratch-workspace.d.ts.map +1 -1
  537. package/lib/testing/node/scratch-workspace.js +10 -5
  538. package/lib/testing/node/scratch-workspace.js.map +1 -1
  539. package/lib/testing/node/spawned-server.d.ts +30 -1
  540. package/lib/testing/node/spawned-server.d.ts.map +1 -1
  541. package/lib/testing/node/spawned-server.js +39 -2
  542. package/lib/testing/node/spawned-server.js.map +1 -1
  543. package/lib/testing/node/unhandled-rejections.d.ts +20 -0
  544. package/lib/testing/node/unhandled-rejections.d.ts.map +1 -0
  545. package/lib/testing/node/unhandled-rejections.js +32 -0
  546. package/lib/testing/node/unhandled-rejections.js.map +1 -0
  547. package/lib/testing/playwright/browser-capture-bridge.js.map +1 -1
  548. package/lib/testing/playwright/e2e-profiling.js.map +1 -1
  549. package/lib/testing/playwright/flaky-network-proxy.d.ts +76 -0
  550. package/lib/testing/playwright/flaky-network-proxy.d.ts.map +1 -0
  551. package/lib/testing/playwright/flaky-network-proxy.js +164 -0
  552. package/lib/testing/playwright/flaky-network-proxy.js.map +1 -0
  553. package/lib/testing/playwright/index.d.ts +1 -0
  554. package/lib/testing/playwright/index.d.ts.map +1 -1
  555. package/lib/testing/playwright/index.js +1 -0
  556. package/lib/testing/playwright/index.js.map +1 -1
  557. package/lib/testing/playwright/server-log-capture.d.ts +46 -16
  558. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
  559. package/lib/testing/playwright/server-log-capture.js +111 -40
  560. package/lib/testing/playwright/server-log-capture.js.map +1 -1
  561. package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
  562. package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
  563. package/lib/testing/playwright/server-log-fixture.js +25 -6
  564. package/lib/testing/playwright/server-log-fixture.js.map +1 -1
  565. package/lib/testing/playwright/server-log-region.d.ts +15 -0
  566. package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
  567. package/lib/testing/playwright/server-log-region.js +30 -0
  568. package/lib/testing/playwright/server-log-region.js.map +1 -0
  569. package/lib/testing/playwright/server-log-rename-reporter.d.ts.map +1 -1
  570. package/lib/testing/playwright/server-log-rename-reporter.js +4 -3
  571. package/lib/testing/playwright/server-log-rename-reporter.js.map +1 -1
  572. package/lib/testing/run-update-pipeline.d.ts +8 -5
  573. package/lib/testing/run-update-pipeline.d.ts.map +1 -1
  574. package/lib/testing/run-update-pipeline.js.map +1 -1
  575. package/lib/testing/stub-ast-document-manager.d.ts +11 -51
  576. package/lib/testing/stub-ast-document-manager.d.ts.map +1 -1
  577. package/lib/testing/stub-ast-document-manager.js +31 -59
  578. package/lib/testing/stub-ast-document-manager.js.map +1 -1
  579. package/lib/testing/stub-document-builder.d.ts +33 -11
  580. package/lib/testing/stub-document-builder.d.ts.map +1 -1
  581. package/lib/testing/stub-document-builder.js +103 -5
  582. package/lib/testing/stub-document-builder.js.map +1 -1
  583. package/lib/testing/stub-hydranium-text-documents.d.ts +33 -10
  584. package/lib/testing/stub-hydranium-text-documents.d.ts.map +1 -1
  585. package/lib/testing/stub-hydranium-text-documents.js +132 -16
  586. package/lib/testing/stub-hydranium-text-documents.js.map +1 -1
  587. package/lib/testing/stub-index-manager.js.map +1 -1
  588. package/lib/testing/stub-langium-documents.d.ts +3 -2
  589. package/lib/testing/stub-langium-documents.d.ts.map +1 -1
  590. package/lib/testing/stub-langium-documents.js.map +1 -1
  591. package/lib/testing/stub-model-service.d.ts +8 -7
  592. package/lib/testing/stub-model-service.d.ts.map +1 -1
  593. package/lib/testing/stub-model-service.js +4 -4
  594. package/lib/testing/stub-model-service.js.map +1 -1
  595. package/lib/testing/stub-project-manager.js.map +1 -1
  596. package/lib/testing/stub-self-save-registry.d.ts +1 -1
  597. package/lib/testing/stub-self-save-registry.d.ts.map +1 -1
  598. package/lib/testing/stub-service-registry.d.ts +1 -1
  599. package/lib/testing/stub-service-registry.js.map +1 -1
  600. package/lib/testing/stub-writable-file-system.d.ts +1 -1
  601. package/lib/testing/stub-writable-file-system.d.ts.map +1 -1
  602. package/lib/testing/stub-writable-file-system.js +2 -1
  603. package/lib/testing/stub-writable-file-system.js.map +1 -1
  604. package/lib/util/connection-liveness.d.ts +22 -6
  605. package/lib/util/connection-liveness.d.ts.map +1 -1
  606. package/lib/util/connection-liveness.js +75 -15
  607. package/lib/util/connection-liveness.js.map +1 -1
  608. package/lib/util/environment.d.ts +7 -0
  609. package/lib/util/environment.d.ts.map +1 -1
  610. package/lib/util/environment.js +15 -1
  611. package/lib/util/environment.js.map +1 -1
  612. package/lib/util/registry.d.ts.map +1 -1
  613. package/package.json +41 -60
  614. package/src/browser/host-heads-in-worker.ts +218 -0
  615. package/src/browser/index.ts +17 -0
  616. package/src/browser/indexeddb-file-system-store.ts +192 -0
  617. package/src/browser/start-language-server-in-worker.ts +56 -0
  618. package/src/documents/ast-document-manager.ts +477 -249
  619. package/src/documents/client-ids.ts +5 -22
  620. package/src/documents/client-session-errors.ts +24 -0
  621. package/src/documents/client-session-registry.ts +262 -0
  622. package/src/documents/dirty-state-tracker.ts +167 -0
  623. package/src/documents/document-release-handler.ts +404 -0
  624. package/src/documents/document-release-scheduler.ts +121 -0
  625. package/src/documents/file-system-task-queue.ts +74 -0
  626. package/src/documents/hydranium-text-documents.ts +1029 -595
  627. package/src/documents/index.ts +10 -2
  628. package/src/documents/language-client-shadow.ts +501 -0
  629. package/src/documents/model-ledger.ts +66 -0
  630. package/src/documents/text-ledger.ts +112 -0
  631. package/src/documents/version-sync-service.ts +275 -0
  632. package/src/index.ts +3 -0
  633. package/src/langium/ast-extension/ast-extension-service.ts +77 -41
  634. package/src/langium/ast-extension/ast-node-builder.ts +35 -13
  635. package/src/langium/bootstrap.ts +79 -43
  636. package/src/langium/build-phase-pass/build-phase-pass-service.ts +29 -19
  637. package/src/langium/build-phase-pass/build-phase-pass.ts +37 -8
  638. package/src/langium/composite-ast-reflection.ts +112 -0
  639. package/src/langium/config/configuration-provider.ts +119 -0
  640. package/src/langium/config/index.ts +1 -0
  641. package/src/langium/diagnostics/console-tee.ts +150 -0
  642. package/src/langium/diagnostics/hydranium-langium-profiler.ts +15 -39
  643. package/src/langium/diagnostics/log-preamble.ts +1 -1
  644. package/src/langium/diagnostics/logger.ts +51 -17
  645. package/src/langium/diagnostics/lsp-logger.ts +83 -45
  646. package/src/langium/document-builder/build-pipeline-integration.ts +57 -32
  647. package/src/langium/document-builder/build-session.ts +4 -3
  648. package/src/langium/document-builder/document-builder.ts +613 -77
  649. package/src/langium/integration-services.ts +58 -27
  650. package/src/langium/integrity/integrity-rule.ts +17 -8
  651. package/src/langium/integrity/integrity-service.ts +332 -69
  652. package/src/langium/keys/containment.ts +3 -2
  653. package/src/langium/keys/name-based-key-provider.ts +24 -12
  654. package/src/langium/language-module.ts +52 -9
  655. package/src/langium/model-service/client-session.ts +726 -0
  656. package/src/langium/model-service/index.ts +2 -0
  657. package/src/langium/model-service/model-events.ts +82 -0
  658. package/src/langium/model-service/model-service.ts +887 -522
  659. package/src/langium/module.ts +132 -56
  660. package/src/langium/naming/name-provider.ts +34 -8
  661. package/src/langium/project/abstract-project-manager.ts +13 -5
  662. package/src/langium/project/project-change-event.ts +2 -2
  663. package/src/langium/residency/cst-residency-service.ts +30 -14
  664. package/src/langium/scope/ast-node-description-provider.ts +111 -16
  665. package/src/langium/scope/built-local-symbols.ts +13 -0
  666. package/src/langium/scope/fallback-scope.ts +38 -0
  667. package/src/langium/scope/hydranium-scope-computation.ts +45 -44
  668. package/src/langium/scope/hydranium-scope-provider.ts +245 -41
  669. package/src/langium/scope/index.ts +1 -0
  670. package/src/langium/scope/reference-candidate-provider.ts +6 -5
  671. package/src/langium/scope/scope-extension-service.ts +148 -56
  672. package/src/langium/scope/scoped-ast-node-description.ts +1 -3
  673. package/src/langium/serialization/abstract-serializer.ts +57 -41
  674. package/src/langium/serialization/json-serializer.ts +14 -3
  675. package/src/langium/serialization/serializer.ts +1 -1
  676. package/src/langium/serialization/yaml-serializer.ts +26 -4
  677. package/src/langium/service-registry.ts +41 -2
  678. package/src/langium/shared-services.ts +13 -4
  679. package/src/langium/single-langium-copy.ts +42 -0
  680. package/src/langium/transfer/transfer-encoder.ts +76 -50
  681. package/src/langium/trivia/comment-preserver.ts +1409 -0
  682. package/src/langium/trivia/document-ending-preserver.ts +71 -0
  683. package/src/langium/trivia/index.ts +14 -0
  684. package/src/langium/trivia/trivia-contribution.ts +39 -0
  685. package/src/langium/trivia/trivia-preserver.ts +56 -0
  686. package/src/langium/trivia/trivia-service.ts +99 -0
  687. package/src/langium/update-rewrite/update-rewrite-service.ts +1 -1
  688. package/src/langium/update-rewrite/update-rewrite.ts +1 -1
  689. package/src/langium/validation/document-validator.ts +312 -31
  690. package/src/langium/validation/validation-contribution-collector.ts +10 -1
  691. package/src/langium/workspace/ast-node-locator.ts +33 -0
  692. package/src/langium/workspace/document-uri-policy.ts +32 -18
  693. package/src/langium/workspace/file-not-found.ts +35 -0
  694. package/src/langium/workspace/file-system-provider.ts +258 -16
  695. package/src/langium/workspace/hydranium-langium-document-factory.ts +83 -0
  696. package/src/langium/workspace/hydranium-workspace-lock.ts +86 -2
  697. package/src/langium/workspace/hydranium-workspace-manager.ts +212 -35
  698. package/src/langium/workspace/in-memory-file-system-provider.ts +54 -23
  699. package/src/langium/workspace/index.ts +2 -0
  700. package/src/langium/workspace/initialize-workspace.ts +96 -4
  701. package/src/langium/workspace/langium-documents.ts +19 -1
  702. package/src/langium/workspace/persistent-file-system-provider.ts +27 -15
  703. package/src/{documents → langium/workspace}/self-save-registry.ts +12 -14
  704. package/src/langium/workspace/virtual-document.ts +106 -25
  705. package/src/langium/workspace/write-lock-scope.ts +27 -12
  706. package/src/launcher/integrated-server.ts +3 -1
  707. package/src/locale/server-locale.ts +6 -6
  708. package/src/lsp/completion/hydranium-completion-provider.ts +82 -2
  709. package/src/lsp/connection-features.ts +67 -0
  710. package/src/lsp/diagnostics-connection.ts +56 -0
  711. package/src/lsp/edit-requests-guard.ts +152 -0
  712. package/src/lsp/hydranium-document-update-handler.ts +284 -110
  713. package/src/lsp/index.ts +6 -2
  714. package/src/lsp/lsp-latency.ts +62 -0
  715. package/src/lsp/save-text-document.ts +63 -0
  716. package/src/lsp/semantic-token-provider.ts +146 -8
  717. package/src/lsp/shared-module.ts +4 -8
  718. package/src/lsp/start-language-server.ts +21 -7
  719. package/src/messages/carriers.ts +4 -6
  720. package/src/messages/index.ts +11 -2
  721. package/src/messages/renderer.ts +11 -3
  722. package/src/node/event-loop-monitor.ts +2 -1
  723. package/src/node/heap-ceiling.ts +108 -0
  724. package/src/node/index.ts +5 -1
  725. package/src/node/latency-from-env.ts +1 -1
  726. package/src/node/log-file-sink.ts +6 -2
  727. package/src/node/log-preamble-node.ts +20 -10
  728. package/src/node/measure-memory.ts +5 -4
  729. package/src/node/memory-monitor.ts +10 -10
  730. package/src/node/node-file-system-provider.ts +214 -57
  731. package/src/node/profile-capture.ts +16 -15
  732. package/src/node/profiling-run.ts +30 -8
  733. package/src/node/rename-over-open-readers.ts +94 -0
  734. package/src/node/server-diagnostics.ts +1 -1
  735. package/src/node/server-state-snapshot.ts +5 -5
  736. package/src/node/socket-launcher.ts +78 -14
  737. package/src/node/startup-cpu-profile.ts +94 -0
  738. package/src/node/stdio-launcher.ts +29 -19
  739. package/src/node/validate-workspace.ts +8 -2
  740. package/src/testing/document-uri-policy-conformance.ts +1 -1
  741. package/src/testing/fake-document.ts +2 -1
  742. package/src/testing/index.ts +2 -1
  743. package/src/testing/langium-test-helpers.ts +1 -0
  744. package/src/testing/make-test-services.ts +83 -31
  745. package/src/testing/make-test-tracer.ts +26 -0
  746. package/src/testing/node/applied-edit-capture.ts +141 -0
  747. package/src/testing/node/index.ts +1 -0
  748. package/src/testing/node/lsp-harness.ts +2 -0
  749. package/src/testing/node/lsp-server-connection.ts +83 -119
  750. package/src/testing/node/scratch-workspace.ts +10 -5
  751. package/src/testing/node/spawned-server.ts +57 -3
  752. package/src/testing/node/unhandled-rejections.ts +31 -0
  753. package/src/testing/parse-semantic-root.ts +1 -1
  754. package/src/testing/playwright/flaky-network-proxy.ts +240 -0
  755. package/src/testing/playwright/index.ts +1 -0
  756. package/src/testing/playwright/server-log-capture.ts +137 -47
  757. package/src/testing/playwright/server-log-fixture.ts +46 -6
  758. package/src/testing/playwright/server-log-region.ts +32 -0
  759. package/src/testing/playwright/server-log-rename-reporter.ts +4 -3
  760. package/src/testing/run-update-pipeline.ts +8 -5
  761. package/src/testing/stub-ast-document-manager.ts +47 -123
  762. package/src/testing/stub-document-builder.ts +138 -18
  763. package/src/testing/stub-hydranium-text-documents.ts +184 -27
  764. package/src/testing/stub-langium-documents.ts +3 -2
  765. package/src/testing/stub-model-service.ts +9 -8
  766. package/src/testing/stub-self-save-registry.ts +1 -1
  767. package/src/testing/stub-service-registry.ts +1 -1
  768. package/src/testing/stub-writable-file-system.ts +3 -2
  769. package/src/util/connection-liveness.ts +81 -15
  770. package/src/util/environment.ts +24 -2
  771. package/lib/documents/language-client-text-shadow.d.ts +0 -101
  772. package/lib/documents/language-client-text-shadow.d.ts.map +0 -1
  773. package/lib/documents/language-client-text-shadow.js +0 -156
  774. package/lib/documents/language-client-text-shadow.js.map +0 -1
  775. package/lib/documents/self-save-registry.d.ts.map +0 -1
  776. package/lib/documents/self-save-registry.js.map +0 -1
  777. package/lib/lsp/instrument-connection.d.ts +0 -36
  778. package/lib/lsp/instrument-connection.d.ts.map +0 -1
  779. package/lib/lsp/instrument-connection.js +0 -62
  780. package/lib/lsp/instrument-connection.js.map +0 -1
  781. package/lib/node/process-memory.d.ts +0 -66
  782. package/lib/node/process-memory.d.ts.map +0 -1
  783. package/lib/node/process-memory.js +0 -252
  784. package/lib/node/process-memory.js.map +0 -1
  785. package/src/documents/language-client-text-shadow.ts +0 -175
  786. package/src/lsp/instrument-connection.ts +0 -66
  787. package/src/node/process-memory.ts +0 -299
@@ -1 +1 @@
1
- {"version":3,"file":"integrated-server.d.ts","sourceRoot":"","sources":["../../src/launcher/integrated-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,gBAAgB;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC"}
1
+ {"version":3,"file":"integrated-server.d.ts","sourceRoot":"","sources":["../../src/launcher/integrated-server.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC"}
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import type { Tracer } from '@hydranium/protocol';
9
+ import type { Locale, Tracer } from '@hydranium/protocol';
10
10
  import { type LogNameOptions } from '../langium/diagnostics/logger.js';
11
11
  import type { ServerSharedServicesMinimal } from '../langium/shared-services.js';
12
12
  /** Construction options for {@link ServerLocale}. */
@@ -22,8 +22,8 @@ export type ServerLocaleOptions = LogNameOptions;
22
22
  */
23
23
  export interface ServerLocale {
24
24
  /** The locale, or `undefined` when no init supplied one — the framework's English. */
25
- readonly value: string | undefined;
26
- accept(locale: string): void;
25
+ readonly value: Locale | undefined;
26
+ accept(locale: Locale): void;
27
27
  }
28
28
  /**
29
29
  * The locale the server was handed at init, for whoever needs to render in the
@@ -36,10 +36,10 @@ export interface ServerLocale {
36
36
  */
37
37
  export declare class DefaultServerLocale implements ServerLocale {
38
38
  protected readonly tracer: Tracer;
39
- protected current: string | undefined;
39
+ protected current: Locale | undefined;
40
40
  constructor(services: ServerSharedServicesMinimal, options?: ServerLocaleOptions);
41
41
  /** The locale, or `undefined` when no init supplied one — which means the framework's English. */
42
- get value(): string | undefined;
42
+ get value(): Locale | undefined;
43
43
  /**
44
44
  * Take the locale an init declared.
45
45
  *
@@ -68,6 +68,6 @@ export declare class DefaultServerLocale implements ServerLocale {
68
68
  * threshold and therefore absent from exactly the log someone would be
69
69
  * reading.
70
70
  */
71
- accept(locale: string): void;
71
+ accept(locale: Locale): void;
72
72
  }
73
73
  //# sourceMappingURL=server-locale.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-locale.d.ts","sourceRoot":"","sources":["../../src/locale/server-locale.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC1B,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE1B,QAAQ,EAAE,2BAA2B,EAAE,OAAO,GAAE,mBAAwB;IAIpF,kGAAkG;IAClG,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAI9B"}
1
+ {"version":3,"file":"server-locale.d.ts","sourceRoot":"","sources":["../../src/locale/server-locale.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,qDAAqD;AACrD,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC1B,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAEtC,YAAY,QAAQ,EAAE,2BAA2B,EAAE,OAAO,GAAE,mBAAwB,EAEnF;IAED,kGAAkG;IAClG,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG3B;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"server-locale.js","sourceRoot":"","sources":["../../src/locale/server-locale.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAwBlF;;;;;;;;GAQG;AACH,MAAM,OAAO,mBAAmB;IACV,MAAM,CAAS;IACxB,OAAO,CAAqB;IAEtC,YAAY,QAAqC,EAAE,UAA+B,EAAE;QACjF,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9F,CAAC;IAED,kGAAkG;IAClG,IAAI,KAAK;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,MAAc;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;CACH"}
1
+ {"version":3,"file":"server-locale.js","sourceRoot":"","sources":["../../src/locale/server-locale.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAwBlF;;;;;;;;GAQG;AACH,MAAM,OAAO,mBAAmB;IACV,MAAM,CAAS;IACxB,OAAO,CAAqB;IAEtC,YAAY,QAAqC,EAAE,OAAO,GAAwB,EAAE;QACjF,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9F,CAAC;IAED,kGAAkG;IAClG,IAAI,KAAK;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,MAAc;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;CACH"}
@@ -6,9 +6,9 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
- import { type AstNodeDescription, type ReferenceInfo, type Stream } from '@hydranium/langium';
9
+ import { type AstNodeDescription, type LangiumDocument, type ReferenceInfo, type Stream } from '@hydranium/langium';
10
10
  import { DefaultCompletionProvider, type CompletionContext, type CompletionValueItem } from '@hydranium/langium/lsp';
11
- import type { CompletionItem } from 'vscode-languageserver';
11
+ import { CompletionList, type CancellationToken, type CompletionItem, type CompletionParams, type Position } from 'vscode-languageserver';
12
12
  import { type ReferenceCandidateProvider } from '../../langium/scope/reference-candidate-provider.js';
13
13
  import { type ServerLanguageServices } from '../../langium/language-module.js';
14
14
  /**
@@ -50,10 +50,52 @@ import { type ServerLanguageServices } from '../../langium/language-module.js';
50
50
  * elements. The provider owns that pipeline in one place, so the
51
51
  * text-editor dropdown and the protocol candidate picker stay in sync; this
52
52
  * class keeps only the LSP-specific {@link fillCompletionItem} upgrade.
53
+ *
54
+ * **A comment is not a completion site.** Langium's context builder reads the
55
+ * non-hidden token stream alone, so a cursor in a comment is indistinguishable
56
+ * from one in the whitespace between the tokens surrounding it: the grammar's
57
+ * follow-set goes out as keyword proposals, and none of them is filtered,
58
+ * because the characters the user typed belong to the hidden token and the
59
+ * prefix matched against is therefore empty. {@link isInsideComment} suppresses
60
+ * the request instead.
53
61
  */
54
62
  export declare class HydraniumCompletionProvider extends DefaultCompletionProvider {
55
63
  protected readonly candidateProvider: ReferenceCandidateProvider;
56
64
  constructor(services: ServerLanguageServices);
65
+ /**
66
+ * Answer no proposals at all when the cursor is inside a comment.
67
+ *
68
+ * Suppressing the whole request is what makes the rule hold for every
69
+ * proposal kind at once. Filtering the built contexts instead has to catch
70
+ * each context kind the base builds separately, and a kind added upstream
71
+ * arrives unguarded.
72
+ *
73
+ * The list is marked incomplete so the client re-asks on the next keystroke
74
+ * and proposals resume the moment the cursor leaves the comment.
75
+ */
76
+ getCompletion(document: LangiumDocument, params: CompletionParams, cancelToken?: CancellationToken): Promise<CompletionList | undefined>;
77
+ /**
78
+ * Whether `position` falls in text a comment terminal claims.
79
+ *
80
+ * The two comment kinds part company at their far edge. A single-line
81
+ * comment runs to the line break, so a cursor at its end offset is still in
82
+ * prose and that offset counts as inside. A multi-line comment is
83
+ * terminated, so a cursor at its end offset has passed the terminator and is
84
+ * back in code. A cursor ON the opening delimiter is outside either way,
85
+ * that offset being a legal position for whatever token the comment
86
+ * displaced.
87
+ *
88
+ * The hidden token stream decides rather than the CST. A leaf lookup by
89
+ * offset misses the position a cursor reaches by typing prose into a
90
+ * trailing comment, because that comment ends AT the line break and
91
+ * whitespace is discarded before a CST node is built over it — so the
92
+ * lookup answers nothing exactly where proposals are least wanted.
93
+ *
94
+ * An adopter whose comment syntax carries completable content — a
95
+ * documentation tag naming a type — narrows this to return `false` over that
96
+ * region rather than replacing {@link getCompletion}.
97
+ */
98
+ protected isInsideComment(document: LangiumDocument, position: Position): boolean;
57
99
  /**
58
100
  * Delegate cross-reference candidate gathering to the candidate provider
59
101
  * so the LSP completion dropdown applies the same filter / canonical
@@ -1 +1 @@
1
- {"version":3,"file":"hydranium-completion-provider.d.ts","sourceRoot":"","sources":["../../../src/lsp/completion/hydranium-completion-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACrH,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,qBAAa,2BAA4B,SAAQ,yBAAyB;IACvE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;gBAErD,QAAQ,EAAE,sBAAsB;IAK5C;;;;;;;OAOG;cACgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,kBAAkB,CAAC;cAIvG,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,GAAG,cAAc,GAAG,SAAS;IAsBxH;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;CAcnE"}
1
+ {"version":3,"file":"hydranium-completion-provider.d.ts","sourceRoot":"","sources":["../../../src/lsp/completion/hydranium-completion-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACpH,OAAO,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACrH,OAAO,EACJ,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,2BAA4B,SAAQ,yBAAyB;IACvE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;IAEjE,YAAY,QAAQ,EAAE,sBAAsB,EAG3C;IAED;;;;;;;;;;OAUG;IACY,aAAa,CACzB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,gBAAgB,EACxB,WAAW,CAAC,EAAE,iBAAiB,GAC/B,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAKrC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAoBhF;IAED;;;;;;;OAOG;IACH,UAAmB,sBAAsB,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAEzH;IAED,UAAmB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,mBAAmB,GAAG,cAAc,GAAG,SAAS,CAoBvH;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAahE;CACH"}
@@ -7,6 +7,7 @@
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
9
  import { DefaultCompletionProvider } from '@hydranium/langium/lsp';
10
+ import { CompletionList } from 'vscode-languageserver';
10
11
  /**
11
12
  * Completion provider that upgrades Langium's default `TextEdit` to
12
13
  * {@link InsertReplaceEdit} so accepting a suggestion over an existing token
@@ -46,6 +47,14 @@ import { DefaultCompletionProvider } from '@hydranium/langium/lsp';
46
47
  * elements. The provider owns that pipeline in one place, so the
47
48
  * text-editor dropdown and the protocol candidate picker stay in sync; this
48
49
  * class keeps only the LSP-specific {@link fillCompletionItem} upgrade.
50
+ *
51
+ * **A comment is not a completion site.** Langium's context builder reads the
52
+ * non-hidden token stream alone, so a cursor in a comment is indistinguishable
53
+ * from one in the whitespace between the tokens surrounding it: the grammar's
54
+ * follow-set goes out as keyword proposals, and none of them is filtered,
55
+ * because the characters the user typed belong to the hidden token and the
56
+ * prefix matched against is therefore empty. {@link isInsideComment} suppresses
57
+ * the request instead.
49
58
  */
50
59
  export class HydraniumCompletionProvider extends DefaultCompletionProvider {
51
60
  candidateProvider;
@@ -53,6 +62,65 @@ export class HydraniumCompletionProvider extends DefaultCompletionProvider {
53
62
  super(services);
54
63
  this.candidateProvider = services.references.CandidateProvider;
55
64
  }
65
+ /**
66
+ * Answer no proposals at all when the cursor is inside a comment.
67
+ *
68
+ * Suppressing the whole request is what makes the rule hold for every
69
+ * proposal kind at once. Filtering the built contexts instead has to catch
70
+ * each context kind the base builds separately, and a kind added upstream
71
+ * arrives unguarded.
72
+ *
73
+ * The list is marked incomplete so the client re-asks on the next keystroke
74
+ * and proposals resume the moment the cursor leaves the comment.
75
+ */
76
+ async getCompletion(document, params, cancelToken) {
77
+ if (this.isInsideComment(document, params.position)) {
78
+ return CompletionList.create([], true);
79
+ }
80
+ return super.getCompletion(document, params, cancelToken);
81
+ }
82
+ /**
83
+ * Whether `position` falls in text a comment terminal claims.
84
+ *
85
+ * The two comment kinds part company at their far edge. A single-line
86
+ * comment runs to the line break, so a cursor at its end offset is still in
87
+ * prose and that offset counts as inside. A multi-line comment is
88
+ * terminated, so a cursor at its end offset has passed the terminator and is
89
+ * back in code. A cursor ON the opening delimiter is outside either way,
90
+ * that offset being a legal position for whatever token the comment
91
+ * displaced.
92
+ *
93
+ * The hidden token stream decides rather than the CST. A leaf lookup by
94
+ * offset misses the position a cursor reaches by typing prose into a
95
+ * trailing comment, because that comment ends AT the line break and
96
+ * whitespace is discarded before a CST node is built over it — so the
97
+ * lookup answers nothing exactly where proposals are least wanted.
98
+ *
99
+ * An adopter whose comment syntax carries completable content — a
100
+ * documentation tag naming a type — narrows this to return `false` over that
101
+ * region rather than replacing {@link getCompletion}.
102
+ */
103
+ isInsideComment(document, position) {
104
+ const text = document.textDocument.getText();
105
+ const offset = document.textDocument.offsetAt(position);
106
+ const multilineCommentRules = this.grammarConfig.multilineCommentRules;
107
+ for (const token of this.lexer.tokenize(text).hidden) {
108
+ if (token.startOffset >= offset) {
109
+ // Hidden tokens arrive in document order, so no later one reaches back over the cursor.
110
+ return false;
111
+ }
112
+ // `endOffset` is optional on the token type and the image is not, so
113
+ // the width comes from the image and needs no absent-value branch.
114
+ const endOffset = token.startOffset + token.image.length;
115
+ if (offset < endOffset) {
116
+ return true;
117
+ }
118
+ if (offset === endOffset && !multilineCommentRules.includes(token.tokenType.name)) {
119
+ return true;
120
+ }
121
+ }
122
+ return false;
123
+ }
56
124
  /**
57
125
  * Delegate cross-reference candidate gathering to the candidate provider
58
126
  * so the LSP completion dropdown applies the same filter / canonical
@@ -1 +1 @@
1
- {"version":3,"file":"hydranium-completion-provider.js","sourceRoot":"","sources":["../../../src/lsp/completion/hydranium-completion-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAE,yBAAyB,EAAoD,MAAM,wBAAwB,CAAC;AAKrH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,OAAO,2BAA4B,SAAQ,yBAAyB;IACpD,iBAAiB,CAA6B;IAEjE,YAAY,QAAgC;QACzC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAClE,CAAC;IAED;;;;;;;OAOG;IACgB,sBAAsB,CAAC,OAAsB,EAAE,QAA2B;QAC1F,OAAO,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC1F,CAAC;IAEkB,kBAAkB,CAAC,OAA0B,EAAE,IAAyB;QACxF,MAAM,cAAc,GAAG,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,EAAE,QAAQ,IAAI,QAAQ,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YACpE,OAAO,cAAc,CAAC;QACzB,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3D,0EAA0E;QAC1E,mEAAmE;QACnE,4CAA4C;QAC5C,IAAI,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACtC,OAAO,cAAc,CAAC;QACzB,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;QACzC,MAAM,iBAAiB,GAAsB;YAC1C,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM,EAAE,QAAQ,CAAC,KAAK;YACtB,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;SAClG,CAAC;QACF,cAAc,CAAC,QAAQ,GAAG,iBAAiB,CAAC;QAC5C,OAAO,cAAc,CAAC;IACzB,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACO,mBAAmB,CAAC,OAA0B;QACrD,IAAI,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,cAAc,CAAC;QACjC,CAAC;QACD,wEAAwE;QACxE,qDAAqD;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;QACjD,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,EAAE,CAAC;QACT,CAAC;QACD,OAAO,GAAG,CAAC;IACd,CAAC;CACH"}
1
+ {"version":3,"file":"hydranium-completion-provider.js","sourceRoot":"","sources":["../../../src/lsp/completion/hydranium-completion-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { type Features } from 'vscode-languageserver';
10
+ /**
11
+ * Add Hydranium's connection-liveness handling to a language-server
12
+ * connection's console. The upstream `RemoteConsole` catches every failed log
13
+ * notification and prints `Sending log message failed`, so every ordinary
14
+ * teardown reports a failure; this console drops only a failure that
15
+ * {@link isClientGoneError} recognises and re-raises any other as an
16
+ * unhandled rejection.
17
+ *
18
+ * Supply it where the connection is created. `createConnection` builds the
19
+ * console from these features, so a connection that already exists keeps the
20
+ * upstream console for its whole lifetime.
21
+ */
22
+ export declare function withHydraniumLspFeatures<T extends Features>(features: T): T;
23
+ //# sourceMappingURL=connection-features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-features.d.ts","sourceRoot":"","sources":["../../src/lsp/connection-features.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAuC,KAAK,QAAQ,EAAsB,MAAM,uBAAuB,CAAC;AAG/G;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CA0C3E"}
@@ -0,0 +1,60 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { LogMessageNotification, MessageType } from 'vscode-languageserver';
10
+ import { isClientGoneError } from '../util/connection-liveness.js';
11
+ /**
12
+ * Add Hydranium's connection-liveness handling to a language-server
13
+ * connection's console. The upstream `RemoteConsole` catches every failed log
14
+ * notification and prints `Sending log message failed`, so every ordinary
15
+ * teardown reports a failure; this console drops only a failure that
16
+ * {@link isClientGoneError} recognises and re-raises any other as an
17
+ * unhandled rejection.
18
+ *
19
+ * Supply it where the connection is created. `createConnection` builds the
20
+ * console from these features, so a connection that already exists keeps the
21
+ * upstream console for its whole lifetime.
22
+ */
23
+ export function withHydraniumLspFeatures(features) {
24
+ return {
25
+ ...features,
26
+ console: (Base) => class extends Base {
27
+ error(message) {
28
+ this.sendLogMessage(MessageType.Error, message);
29
+ }
30
+ warn(message) {
31
+ this.sendLogMessage(MessageType.Warning, message);
32
+ }
33
+ info(message) {
34
+ this.sendLogMessage(MessageType.Info, message);
35
+ }
36
+ log(message) {
37
+ this.sendLogMessage(MessageType.Log, message);
38
+ }
39
+ debug(message) {
40
+ this.sendLogMessage(MessageType.Debug, message);
41
+ }
42
+ sendLogMessage(type, message) {
43
+ try {
44
+ void this.connection.sendNotification(LogMessageNotification.type, { type, message }).catch(error => {
45
+ this.handleLogSendFailure(error);
46
+ });
47
+ }
48
+ catch (error) {
49
+ this.handleLogSendFailure(error);
50
+ }
51
+ }
52
+ handleLogSendFailure(error) {
53
+ if (!isClientGoneError(error)) {
54
+ void Promise.reject(error);
55
+ }
56
+ }
57
+ }
58
+ };
59
+ }
60
+ //# sourceMappingURL=connection-features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-features.js","sourceRoot":"","sources":["../../src/lsp/connection-features.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAqC,MAAM,uBAAuB,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAqB,QAAW;IACrE,OAAO;QACJ,GAAG,QAAQ;QACX,OAAO,EAAE,CAAC,IAA6B,EAAE,EAAE,CACxC,KAAM,SAAQ,IAAI;YACN,KAAK,CAAC,OAAe;gBAC3B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;YAEQ,IAAI,CAAC,OAAe;gBAC1B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrD,CAAC;YAEQ,IAAI,CAAC,OAAe;gBAC1B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClD,CAAC;YAEQ,GAAG,CAAC,OAAe;gBACzB,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YAEQ,KAAK,CAAC,OAAe;gBAC3B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACnD,CAAC;YAEO,cAAc,CAAC,IAAiB,EAAE,OAAe;gBACtD,IAAI,CAAC;oBACF,KAAK,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBACjG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;gBACN,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACd,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;YACJ,CAAC;YAEO,oBAAoB,CAAC,KAAc;gBACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC7B,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACJ,CAAC;SACH;KACD,CAAC;AACV,CAAC"}
@@ -0,0 +1,27 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import type { Connection } from 'vscode-languageserver';
10
+ /**
11
+ * Protect Langium's fire-and-forget diagnostics publish from the expected
12
+ * failure caused by a peer disconnecting during teardown.
13
+ *
14
+ * A publish issued after the connection is disposed throws synchronously
15
+ * instead of rejecting, and Langium's publisher is a document-phase listener,
16
+ * so an unguarded throw fails the build that validated the document. The
17
+ * `try` answers that case with a resolved promise; a guard on the promise
18
+ * alone never sees it.
19
+ *
20
+ * Otherwise the original promise is returned unchanged. The detached catch is
21
+ * deliberate: it marks the original promise as observed, suppresses only the
22
+ * expected connection-liveness error, and rethrows unexpected failures so they
23
+ * stay visible as unhandled rejections, as an unguarded fire-and-forget send
24
+ * would leave them.
25
+ */
26
+ export declare function guardDiagnosticsConnection(connection: Connection): void;
27
+ //# sourceMappingURL=diagnostics-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-connection.d.ts","sourceRoot":"","sources":["../../src/lsp/diagnostics-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKxD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAyBvE"}
@@ -0,0 +1,53 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 CrossBreeze, EclipseSource and others.
3
+ *
4
+ * This program and the accompanying materials are made available under the
5
+ * terms of the MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { isClientGoneError } from '../util/connection-liveness.js';
10
+ const wrappedConnections = new WeakSet();
11
+ /**
12
+ * Protect Langium's fire-and-forget diagnostics publish from the expected
13
+ * failure caused by a peer disconnecting during teardown.
14
+ *
15
+ * A publish issued after the connection is disposed throws synchronously
16
+ * instead of rejecting, and Langium's publisher is a document-phase listener,
17
+ * so an unguarded throw fails the build that validated the document. The
18
+ * `try` answers that case with a resolved promise; a guard on the promise
19
+ * alone never sees it.
20
+ *
21
+ * Otherwise the original promise is returned unchanged. The detached catch is
22
+ * deliberate: it marks the original promise as observed, suppresses only the
23
+ * expected connection-liveness error, and rethrows unexpected failures so they
24
+ * stay visible as unhandled rejections, as an unguarded fire-and-forget send
25
+ * would leave them.
26
+ */
27
+ export function guardDiagnosticsConnection(connection) {
28
+ if (wrappedConnections.has(connection)) {
29
+ return;
30
+ }
31
+ wrappedConnections.add(connection);
32
+ const sendDiagnostics = connection.sendDiagnostics.bind(connection);
33
+ connection.sendDiagnostics = params => {
34
+ let result;
35
+ try {
36
+ result = sendDiagnostics(params);
37
+ }
38
+ catch (error) {
39
+ if (isClientGoneError(error)) {
40
+ return Promise.resolve();
41
+ }
42
+ throw error;
43
+ }
44
+ void result.catch(error => {
45
+ if (isClientGoneError(error)) {
46
+ return;
47
+ }
48
+ throw error;
49
+ });
50
+ return result;
51
+ };
52
+ }
53
+ //# sourceMappingURL=diagnostics-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-connection.js","sourceRoot":"","sources":["../../src/lsp/diagnostics-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAU,CAAC;AAEjD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAsB;IAC9D,IAAI,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,OAAO;IACV,CAAC;IACD,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEnC,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpE,UAAU,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE;QACnC,IAAI,MAAqB,CAAC;QAC1B,IAAI,CAAC;YACF,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACvB,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5B,CAAC;YACD,MAAM,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO;YACV,CAAC;YACD,MAAM,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IACjB,CAAC,CAAC;AACL,CAAC"}
@@ -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 LangiumSharedServices } from '@hydranium/langium/lsp';
10
+ import { type Connection } from 'vscode-languageserver';
11
+ /**
12
+ * Refuse with `ContentModified` a request whose answer edits documents, when
13
+ * the editor of the request's document is behind the store as it arrives, or
14
+ * when a document the answer edits changed while it was computed, by another
15
+ * client, by a rebuild of a closed document or by its release, or its editor
16
+ * is then behind.
17
+ *
18
+ * The editor applies the edits by position to the text it holds, and sent the
19
+ * request's position in it, so an answer computed on other text rewrites the
20
+ * wrong characters. The check runs on the answer, since the documents a rename
21
+ * or code action edits are only known there, and on the connection, so an
22
+ * adopter's provider for these requests is covered. Edits that arrive by a
23
+ * resolve request, a file operation, `willSaveWaitUntil`, an inlay hint or a
24
+ * command's `workspace/applyEdit` are not.
25
+ *
26
+ * Read-only answers are not refused, since a refusal would blank them. An
27
+ * editor ahead of the store does not exist, as its changes reach the store
28
+ * before any request it sends after them.
29
+ */
30
+ export declare function guardEditRequests(connection: Connection, services: LangiumSharedServices): void;
31
+ //# sourceMappingURL=edit-requests-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-requests-guard.d.ts","sourceRoot":"","sources":["../../src/lsp/edit-requests-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAGlF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACJ,KAAK,UAAU,EAMjB,MAAM,uBAAuB,CAAC;AAS/B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAgG/F"}
@@ -0,0 +1,125 @@
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 { LSPErrorCodes, ResponseError } from 'vscode-languageserver';
10
+ import { LANGUAGE_CLIENT_ID } from '../documents/client-ids.js';
11
+ import { HydraniumTextDocuments } from '../documents/hydranium-text-documents.js';
12
+ const wrappedConnections = new WeakSet();
13
+ /**
14
+ * Refuse with `ContentModified` a request whose answer edits documents, when
15
+ * the editor of the request's document is behind the store as it arrives, or
16
+ * when a document the answer edits changed while it was computed, by another
17
+ * client, by a rebuild of a closed document or by its release, or its editor
18
+ * is then behind.
19
+ *
20
+ * The editor applies the edits by position to the text it holds, and sent the
21
+ * request's position in it, so an answer computed on other text rewrites the
22
+ * wrong characters. The check runs on the answer, since the documents a rename
23
+ * or code action edits are only known there, and on the connection, so an
24
+ * adopter's provider for these requests is covered. Edits that arrive by a
25
+ * resolve request, a file operation, `willSaveWaitUntil`, an inlay hint or a
26
+ * command's `workspace/applyEdit` are not.
27
+ *
28
+ * Read-only answers are not refused, since a refusal would blank them. An
29
+ * editor ahead of the store does not exist, as its changes reach the store
30
+ * before any request it sends after them.
31
+ */
32
+ export function guardEditRequests(connection, services) {
33
+ const store = services.workspace.TextDocuments;
34
+ if (wrappedConnections.has(connection) || !(store instanceof HydraniumTextDocuments)) {
35
+ return;
36
+ }
37
+ wrappedConnections.add(connection);
38
+ // A Hydranium store implies the Hydranium shared services.
39
+ const keyOf = (uri) => services.workspace.DocumentUriPolicy.canonicalUri(uri);
40
+ const versions = () => new Map(store.all().map(document => [document.uri, document.version]));
41
+ // A closed document records no author per version, so a rebuild of it
42
+ // while an answer is computed is what refuses the answer. A release clears
43
+ // the authors, so a reopen would attribute another client's change to the
44
+ // editor, and refuses it as well.
45
+ const watching = new Set();
46
+ services.workspace.DocumentBuilder.onUpdate((changed, deleted) => {
47
+ if (watching.size === 0) {
48
+ return;
49
+ }
50
+ const keys = [...changed, ...deleted].map(keyOf);
51
+ for (const watched of watching) {
52
+ keys.forEach(key => watched.rebuilt.add(key));
53
+ }
54
+ });
55
+ store.onDidReleaseDocument(event => {
56
+ for (const watched of watching) {
57
+ watched.released.add(event.uri);
58
+ }
59
+ });
60
+ // The editor's own changes are not counted: it discards or re-filters an
61
+ // answer that predates them, and counting them would blank completion
62
+ // while the user types.
63
+ const changedByAnother = (uri, from, to) => {
64
+ if (from === undefined) {
65
+ return true;
66
+ }
67
+ for (let version = from + 1; version <= to; version++) {
68
+ if (store.getAuthor(uri, version) !== LANGUAGE_CLIENT_ID) {
69
+ return true;
70
+ }
71
+ }
72
+ return false;
73
+ };
74
+ const refused = () => new ResponseError(LSPErrorCodes.ContentModified, 'The editor does not hold the text the answer was computed on');
75
+ // The request's position is in the editor's text, which an answer
76
+ // computed on the store's would be applied past.
77
+ const behind = (uri) => store.isLanguageClientBehind(uri, store.version(uri));
78
+ /** Watches the documents an answer may edit while it is computed; dispose it after. */
79
+ const watch = () => {
80
+ const computedOn = versions();
81
+ const watched = { rebuilt: new Set(), released: new Set() };
82
+ watching.add(watched);
83
+ return {
84
+ changed: uris => [...new Set(uris)].some(uri => {
85
+ const document = store.get(uri);
86
+ const key = keyOf(uri);
87
+ const changed = watched.released.has(key) ||
88
+ (document === undefined
89
+ ? watched.rebuilt.has(key)
90
+ : changedByAnother(uri, computedOn.get(document.uri), document.version));
91
+ return changed || behind(uri);
92
+ }),
93
+ dispose: () => watching.delete(watched)
94
+ };
95
+ };
96
+ const guard = (register, edited = () => []) => handler => register(async (params, ...rest) => {
97
+ const uri = params.textDocument.uri;
98
+ if (behind(uri)) {
99
+ return refused();
100
+ }
101
+ const answer = watch();
102
+ try {
103
+ const result = await handler(params, ...rest);
104
+ return result instanceof ResponseError || !answer.changed([uri, ...edited(result)]) ? result : refused();
105
+ }
106
+ finally {
107
+ answer.dispose();
108
+ }
109
+ });
110
+ connection.onCompletion = guard(connection.onCompletion.bind(connection));
111
+ connection.onDocumentFormatting = guard(connection.onDocumentFormatting.bind(connection));
112
+ connection.onDocumentRangeFormatting = guard(connection.onDocumentRangeFormatting.bind(connection));
113
+ connection.onDocumentOnTypeFormatting = guard(connection.onDocumentOnTypeFormatting.bind(connection));
114
+ connection.onRenameRequest = guard(connection.onRenameRequest.bind(connection), editedUris);
115
+ connection.onCodeAction = guard(connection.onCodeAction.bind(connection), actions => (actions ?? []).flatMap(action => ('edit' in action && action.edit ? [...editedUris(action.edit)] : [])));
116
+ }
117
+ function* editedUris(edit) {
118
+ yield* Object.keys(edit?.changes ?? {});
119
+ for (const change of edit?.documentChanges ?? []) {
120
+ if ('textDocument' in change) {
121
+ yield change.textDocument.uri;
122
+ }
123
+ }
124
+ }
125
+ //# sourceMappingURL=edit-requests-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-requests-guard.js","sourceRoot":"","sources":["../../src/lsp/edit-requests-guard.ts"],"names":[],"mappings":"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"}