@aster-cloud/aster-lang-ts 1.0.37 → 1.2.0

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 (346) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +13 -7
  3. package/dist/scripts/aster.js +10 -5
  4. package/dist/scripts/aster.js.map +1 -1
  5. package/dist/scripts/core-ir-json.js +8 -3
  6. package/dist/scripts/core-ir-json.js.map +1 -1
  7. package/dist/scripts/emit-classfiles.js +3 -2
  8. package/dist/scripts/emit-classfiles.js.map +1 -1
  9. package/dist/scripts/emit-core.js +8 -5
  10. package/dist/scripts/emit-core.js.map +1 -1
  11. package/dist/scripts/generate-casefold.d.ts +2 -0
  12. package/dist/scripts/generate-casefold.d.ts.map +1 -0
  13. package/dist/scripts/generate-casefold.js +34 -0
  14. package/dist/scripts/generate-casefold.js.map +1 -0
  15. package/dist/scripts/generate-diagnostic-overlays.d.ts +29 -0
  16. package/dist/scripts/generate-diagnostic-overlays.d.ts.map +1 -0
  17. package/dist/scripts/generate-diagnostic-overlays.js +90 -0
  18. package/dist/scripts/generate-diagnostic-overlays.js.map +1 -0
  19. package/dist/scripts/golden.js +45 -20
  20. package/dist/scripts/golden.js.map +1 -1
  21. package/dist/scripts/perf-benchmark.js +1 -0
  22. package/dist/scripts/perf-benchmark.js.map +1 -1
  23. package/dist/scripts/profile-medium-project.js +1 -1
  24. package/dist/scripts/profile-medium-project.js.map +1 -1
  25. package/dist/scripts/repl.js +3 -8
  26. package/dist/scripts/repl.js.map +1 -1
  27. package/dist/scripts/typecheck-cli.js +10 -9
  28. package/dist/scripts/typecheck-cli.js.map +1 -1
  29. package/dist/scripts/update-eff-violation-expected.js +6 -6
  30. package/dist/scripts/update-eff-violation-expected.js.map +1 -1
  31. package/dist/scripts/verify-capabilities.js +3 -6
  32. package/dist/scripts/verify-capabilities.js.map +1 -1
  33. package/dist/scripts/verify-lexicon-sync.js +26 -0
  34. package/dist/scripts/verify-lexicon-sync.js.map +1 -1
  35. package/dist/src/ai/validator.d.ts +1 -1
  36. package/dist/src/ai/validator.d.ts.map +1 -1
  37. package/dist/src/ai/validator.js +12 -12
  38. package/dist/src/ai/validator.js.map +1 -1
  39. package/dist/src/ast/ast.d.ts +2 -0
  40. package/dist/src/ast/ast.d.ts.map +1 -1
  41. package/dist/src/ast/ast.js +6 -0
  42. package/dist/src/ast/ast.js.map +1 -1
  43. package/dist/src/ast/type-nodes.d.ts +25 -0
  44. package/dist/src/ast/type-nodes.d.ts.map +1 -0
  45. package/dist/src/ast/type-nodes.js +56 -0
  46. package/dist/src/ast/type-nodes.js.map +1 -0
  47. package/dist/src/browser.d.ts +27 -10
  48. package/dist/src/browser.d.ts.map +1 -1
  49. package/dist/src/browser.js +44 -55
  50. package/dist/src/browser.js.map +1 -1
  51. package/dist/src/cli/policy-converter.js +5 -9
  52. package/dist/src/cli/policy-converter.js.map +1 -1
  53. package/dist/src/cnl-printer.d.ts.map +1 -1
  54. package/dist/src/cnl-printer.js +10 -9
  55. package/dist/src/cnl-printer.js.map +1 -1
  56. package/dist/src/compile-pipeline.d.ts +48 -0
  57. package/dist/src/compile-pipeline.d.ts.map +1 -0
  58. package/dist/src/compile-pipeline.js +89 -0
  59. package/dist/src/compile-pipeline.js.map +1 -0
  60. package/dist/src/config/lexicons/diagnostic-messages.d.ts +7 -5
  61. package/dist/src/config/lexicons/diagnostic-messages.d.ts.map +1 -1
  62. package/dist/src/config/lexicons/diagnostic-messages.js +17 -105
  63. package/dist/src/config/lexicons/diagnostic-messages.js.map +1 -1
  64. package/dist/src/config/lexicons/diagnostic-overlays.generated.d.ts +9 -0
  65. package/dist/src/config/lexicons/diagnostic-overlays.generated.d.ts.map +1 -0
  66. package/dist/src/config/lexicons/diagnostic-overlays.generated.js +615 -0
  67. package/dist/src/config/lexicons/diagnostic-overlays.generated.js.map +1 -0
  68. package/dist/src/config/lexicons/identifiers/casefold-table.generated.d.ts +9 -0
  69. package/dist/src/config/lexicons/identifiers/casefold-table.generated.d.ts.map +1 -0
  70. package/dist/src/config/lexicons/identifiers/casefold-table.generated.js +1467 -0
  71. package/dist/src/config/lexicons/identifiers/casefold-table.generated.js.map +1 -0
  72. package/dist/src/config/lexicons/identifiers/casefold.d.ts +7 -0
  73. package/dist/src/config/lexicons/identifiers/casefold.d.ts.map +1 -0
  74. package/dist/src/config/lexicons/identifiers/casefold.js +37 -0
  75. package/dist/src/config/lexicons/identifiers/casefold.js.map +1 -0
  76. package/dist/src/config/lexicons/identifiers/domains/finance.loan.de-DE.d.ts.map +1 -1
  77. package/dist/src/config/lexicons/identifiers/domains/finance.loan.de-DE.js +8 -0
  78. package/dist/src/config/lexicons/identifiers/domains/finance.loan.de-DE.js.map +1 -1
  79. package/dist/src/config/lexicons/identifiers/domains/finance.loan.en-US.d.ts.map +1 -1
  80. package/dist/src/config/lexicons/identifiers/domains/finance.loan.en-US.js +8 -0
  81. package/dist/src/config/lexicons/identifiers/domains/finance.loan.en-US.js.map +1 -1
  82. package/dist/src/config/lexicons/identifiers/domains/finance.loan.zh-CN.d.ts.map +1 -1
  83. package/dist/src/config/lexicons/identifiers/domains/finance.loan.zh-CN.js +8 -0
  84. package/dist/src/config/lexicons/identifiers/domains/finance.loan.zh-CN.js.map +1 -1
  85. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.de-DE.d.ts.map +1 -1
  86. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.de-DE.js +6 -0
  87. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.de-DE.js.map +1 -1
  88. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.en-US.d.ts.map +1 -1
  89. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.en-US.js +6 -0
  90. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.en-US.js.map +1 -1
  91. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.zh-CN.d.ts.map +1 -1
  92. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.zh-CN.js +6 -0
  93. package/dist/src/config/lexicons/identifiers/domains/insurance.auto.zh-CN.js.map +1 -1
  94. package/dist/src/config/lexicons/identifiers/index.d.ts +7 -9
  95. package/dist/src/config/lexicons/identifiers/index.d.ts.map +1 -1
  96. package/dist/src/config/lexicons/identifiers/index.js +8 -9
  97. package/dist/src/config/lexicons/identifiers/index.js.map +1 -1
  98. package/dist/src/config/lexicons/identifiers/registry.d.ts +11 -5
  99. package/dist/src/config/lexicons/identifiers/registry.d.ts.map +1 -1
  100. package/dist/src/config/lexicons/identifiers/registry.js +20 -14
  101. package/dist/src/config/lexicons/identifiers/registry.js.map +1 -1
  102. package/dist/src/config/lexicons/identifiers/scopes.d.ts +52 -0
  103. package/dist/src/config/lexicons/identifiers/scopes.d.ts.map +1 -0
  104. package/dist/src/config/lexicons/identifiers/scopes.js +166 -0
  105. package/dist/src/config/lexicons/identifiers/scopes.js.map +1 -0
  106. package/dist/src/config/lexicons/identifiers/types.d.ts +15 -29
  107. package/dist/src/config/lexicons/identifiers/types.d.ts.map +1 -1
  108. package/dist/src/config/lexicons/identifiers/types.js +91 -101
  109. package/dist/src/config/lexicons/identifiers/types.js.map +1 -1
  110. package/dist/src/config/lexicons/lsp-ui-texts.d.ts +7 -0
  111. package/dist/src/config/lexicons/lsp-ui-texts.d.ts.map +1 -1
  112. package/dist/src/config/lexicons/lsp-ui-texts.js +12 -0
  113. package/dist/src/config/lexicons/lsp-ui-texts.js.map +1 -1
  114. package/dist/src/config/semantic.d.ts +5 -0
  115. package/dist/src/config/semantic.d.ts.map +1 -1
  116. package/dist/src/config/semantic.js +12 -0
  117. package/dist/src/config/semantic.js.map +1 -1
  118. package/dist/src/core/core_ir.d.ts +2 -0
  119. package/dist/src/core/core_ir.d.ts.map +1 -1
  120. package/dist/src/core/core_ir.js +6 -0
  121. package/dist/src/core/core_ir.js.map +1 -1
  122. package/dist/src/core/inferred_fields.d.ts +10 -0
  123. package/dist/src/core/inferred_fields.d.ts.map +1 -1
  124. package/dist/src/core/inferred_fields.js +9 -0
  125. package/dist/src/core/inferred_fields.js.map +1 -1
  126. package/dist/src/core/interpreter.d.ts.map +1 -1
  127. package/dist/src/core/interpreter.js +12 -10
  128. package/dist/src/core/interpreter.js.map +1 -1
  129. package/dist/src/core/resolution-mark.d.ts +28 -0
  130. package/dist/src/core/resolution-mark.d.ts.map +1 -0
  131. package/dist/src/core/resolution-mark.js +19 -0
  132. package/dist/src/core/resolution-mark.js.map +1 -0
  133. package/dist/src/core/resolve-typed-references.d.ts +36 -0
  134. package/dist/src/core/resolve-typed-references.d.ts.map +1 -0
  135. package/dist/src/core/resolve-typed-references.js +703 -0
  136. package/dist/src/core/resolve-typed-references.js.map +1 -0
  137. package/dist/src/diagnostics/error_codes.d.ts +11 -1
  138. package/dist/src/diagnostics/error_codes.d.ts.map +1 -1
  139. package/dist/src/diagnostics/error_codes.js +80 -0
  140. package/dist/src/diagnostics/error_codes.js.map +1 -1
  141. package/dist/src/frontend/canonicalizer.d.ts +8 -13
  142. package/dist/src/frontend/canonicalizer.d.ts.map +1 -1
  143. package/dist/src/frontend/canonicalizer.js +19 -48
  144. package/dist/src/frontend/canonicalizer.js.map +1 -1
  145. package/dist/src/frontend/resolution-choice.d.ts +34 -0
  146. package/dist/src/frontend/resolution-choice.d.ts.map +1 -0
  147. package/dist/src/frontend/resolution-choice.js +69 -0
  148. package/dist/src/frontend/resolution-choice.js.map +1 -0
  149. package/dist/src/frontend/resolution-context.d.ts +28 -0
  150. package/dist/src/frontend/resolution-context.d.ts.map +1 -0
  151. package/dist/src/frontend/resolution-context.js +7 -0
  152. package/dist/src/frontend/resolution-context.js.map +1 -0
  153. package/dist/src/frontend/resolve-declarations.d.ts +13 -0
  154. package/dist/src/frontend/resolve-declarations.d.ts.map +1 -0
  155. package/dist/src/frontend/resolve-declarations.js +595 -0
  156. package/dist/src/frontend/resolve-declarations.js.map +1 -0
  157. package/dist/src/frontend/resolve-policy-types.d.ts +54 -0
  158. package/dist/src/frontend/resolve-policy-types.d.ts.map +1 -0
  159. package/dist/src/frontend/resolve-policy-types.js +71 -0
  160. package/dist/src/frontend/resolve-policy-types.js.map +1 -0
  161. package/dist/src/index.d.ts +14 -7
  162. package/dist/src/index.d.ts.map +1 -1
  163. package/dist/src/index.js +14 -7
  164. package/dist/src/index.js.map +1 -1
  165. package/dist/src/lower_to_core.d.ts +2 -16
  166. package/dist/src/lower_to_core.d.ts.map +1 -1
  167. package/dist/src/lower_to_core.js +105 -44
  168. package/dist/src/lower_to_core.js.map +1 -1
  169. package/dist/src/lsp/canonicalize-options.d.ts +8 -11
  170. package/dist/src/lsp/canonicalize-options.d.ts.map +1 -1
  171. package/dist/src/lsp/canonicalize-options.js +8 -8
  172. package/dist/src/lsp/canonicalize-options.js.map +1 -1
  173. package/dist/src/lsp/completion.d.ts +55 -5
  174. package/dist/src/lsp/completion.d.ts.map +1 -1
  175. package/dist/src/lsp/completion.js +149 -0
  176. package/dist/src/lsp/completion.js.map +1 -1
  177. package/dist/src/lsp/diagnostics.d.ts +2 -0
  178. package/dist/src/lsp/diagnostics.d.ts.map +1 -1
  179. package/dist/src/lsp/diagnostics.js +84 -73
  180. package/dist/src/lsp/diagnostics.js.map +1 -1
  181. package/dist/src/lsp/navigation/definition.d.ts +2 -1
  182. package/dist/src/lsp/navigation/definition.d.ts.map +1 -1
  183. package/dist/src/lsp/navigation/definition.js +35 -1
  184. package/dist/src/lsp/navigation/definition.js.map +1 -1
  185. package/dist/src/lsp/navigation/hover.d.ts +12 -5
  186. package/dist/src/lsp/navigation/hover.d.ts.map +1 -1
  187. package/dist/src/lsp/navigation/hover.js +136 -90
  188. package/dist/src/lsp/navigation/hover.js.map +1 -1
  189. package/dist/src/lsp/parse-document.d.ts +4 -1
  190. package/dist/src/lsp/parse-document.d.ts.map +1 -1
  191. package/dist/src/lsp/parse-document.js +20 -17
  192. package/dist/src/lsp/parse-document.js.map +1 -1
  193. package/dist/src/lsp/resolution.d.ts +40 -0
  194. package/dist/src/lsp/resolution.d.ts.map +1 -0
  195. package/dist/src/lsp/resolution.js +179 -0
  196. package/dist/src/lsp/resolution.js.map +1 -0
  197. package/dist/src/lsp/server.js +3 -1
  198. package/dist/src/lsp/server.js.map +1 -1
  199. package/dist/src/lsp/source-positions.d.ts +2 -8
  200. package/dist/src/lsp/source-positions.d.ts.map +1 -1
  201. package/dist/src/lsp/source-positions.js +4 -16
  202. package/dist/src/lsp/source-positions.js.map +1 -1
  203. package/dist/src/mapping/pipeline.js +3 -2
  204. package/dist/src/mapping/pipeline.js.map +1 -1
  205. package/dist/src/mapping/review-queue.d.ts.map +1 -1
  206. package/dist/src/mapping/review-queue.js +3 -2
  207. package/dist/src/mapping/review-queue.js.map +1 -1
  208. package/dist/src/parser/context.d.ts +3 -1
  209. package/dist/src/parser/context.d.ts.map +1 -1
  210. package/dist/src/parser/context.js +1 -0
  211. package/dist/src/parser/context.js.map +1 -1
  212. package/dist/src/parser/decl-parser.d.ts.map +1 -1
  213. package/dist/src/parser/decl-parser.js +7 -5
  214. package/dist/src/parser/decl-parser.js.map +1 -1
  215. package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
  216. package/dist/src/parser/expr-stmt-parser.js +2 -16
  217. package/dist/src/parser/expr-stmt-parser.js.map +1 -1
  218. package/dist/src/parser/type-parser.d.ts.map +1 -1
  219. package/dist/src/parser/type-parser.js +42 -0
  220. package/dist/src/parser/type-parser.js.map +1 -1
  221. package/dist/src/parser.d.ts.map +1 -1
  222. package/dist/src/parser.js +6 -1
  223. package/dist/src/parser.js.map +1 -1
  224. package/dist/src/typecheck/diagnostics.d.ts +10 -0
  225. package/dist/src/typecheck/diagnostics.d.ts.map +1 -1
  226. package/dist/src/typecheck/diagnostics.js +27 -0
  227. package/dist/src/typecheck/diagnostics.js.map +1 -1
  228. package/dist/src/typecheck/expression.d.ts.map +1 -1
  229. package/dist/src/typecheck/expression.js +13 -0
  230. package/dist/src/typecheck/expression.js.map +1 -1
  231. package/dist/src/typecheck/generics.d.ts +5 -0
  232. package/dist/src/typecheck/generics.d.ts.map +1 -1
  233. package/dist/src/typecheck/generics.js +15 -8
  234. package/dist/src/typecheck/generics.js.map +1 -1
  235. package/dist/src/types.d.ts +59 -13
  236. package/dist/src/types.d.ts.map +1 -1
  237. package/dist/src/types.js.map +1 -1
  238. package/dist/src/version.d.ts +18 -0
  239. package/dist/src/version.d.ts.map +1 -0
  240. package/dist/src/version.js +18 -0
  241. package/dist/src/version.js.map +1 -0
  242. package/dist/test/integration/builtin-enum-vocabulary.test.d.ts +2 -0
  243. package/dist/test/integration/builtin-enum-vocabulary.test.d.ts.map +1 -0
  244. package/dist/test/integration/builtin-enum-vocabulary.test.js +51 -0
  245. package/dist/test/integration/builtin-enum-vocabulary.test.js.map +1 -0
  246. package/dist/test/integration/lsp/lsp-rename-safety.test.js +0 -13
  247. package/dist/test/integration/lsp/lsp-rename-safety.test.js.map +1 -1
  248. package/dist/test/integration/name-resolution-entrypoints.test.d.ts +2 -0
  249. package/dist/test/integration/name-resolution-entrypoints.test.d.ts.map +1 -0
  250. package/dist/test/integration/name-resolution-entrypoints.test.js +109 -0
  251. package/dist/test/integration/name-resolution-entrypoints.test.js.map +1 -0
  252. package/dist/test/integration/scripts/typecheck-cli-repl.test.d.ts +2 -0
  253. package/dist/test/integration/scripts/typecheck-cli-repl.test.d.ts.map +1 -0
  254. package/dist/test/integration/scripts/typecheck-cli-repl.test.js +133 -0
  255. package/dist/test/integration/scripts/typecheck-cli-repl.test.js.map +1 -0
  256. package/dist/test/integration/vocabulary-resolution.test.d.ts +2 -0
  257. package/dist/test/integration/vocabulary-resolution.test.d.ts.map +1 -0
  258. package/dist/test/integration/vocabulary-resolution.test.js +291 -0
  259. package/dist/test/integration/vocabulary-resolution.test.js.map +1 -0
  260. package/dist/test/property/property.test.js +2 -1
  261. package/dist/test/property/property.test.js.map +1 -1
  262. package/dist/test/unit/canonicalizer/canonicalizer.test.js +7 -79
  263. package/dist/test/unit/canonicalizer/canonicalizer.test.js.map +1 -1
  264. package/dist/test/unit/config/lexicons/identifiers/identifier-mapping.test.js +134 -31
  265. package/dist/test/unit/config/lexicons/identifiers/identifier-mapping.test.js.map +1 -1
  266. package/dist/test/unit/config/lexicons/identifiers/literal-macro.test.js +16 -18
  267. package/dist/test/unit/config/lexicons/identifiers/literal-macro.test.js.map +1 -1
  268. package/dist/test/unit/core/resolve-typed-references.test.d.ts +2 -0
  269. package/dist/test/unit/core/resolve-typed-references.test.d.ts.map +1 -0
  270. package/dist/test/unit/core/resolve-typed-references.test.js +600 -0
  271. package/dist/test/unit/core/resolve-typed-references.test.js.map +1 -0
  272. package/dist/test/unit/diagnostics/diagnostic-overlays.test.d.ts +2 -0
  273. package/dist/test/unit/diagnostics/diagnostic-overlays.test.d.ts.map +1 -0
  274. package/dist/test/unit/diagnostics/diagnostic-overlays.test.js +156 -0
  275. package/dist/test/unit/diagnostics/diagnostic-overlays.test.js.map +1 -0
  276. package/dist/test/unit/diagnostics/resolution-codes.test.d.ts +6 -0
  277. package/dist/test/unit/diagnostics/resolution-codes.test.d.ts.map +1 -0
  278. package/dist/test/unit/diagnostics/resolution-codes.test.js +96 -0
  279. package/dist/test/unit/diagnostics/resolution-codes.test.js.map +1 -0
  280. package/dist/test/unit/formatter-corpus-roundtrip.test.js +5 -0
  281. package/dist/test/unit/formatter-corpus-roundtrip.test.js.map +1 -1
  282. package/dist/test/unit/formatter-roundtrip.test.js +84 -0
  283. package/dist/test/unit/formatter-roundtrip.test.js.map +1 -1
  284. package/dist/test/unit/frontend/resolve-declarations.test.d.ts +2 -0
  285. package/dist/test/unit/frontend/resolve-declarations.test.d.ts.map +1 -0
  286. package/dist/test/unit/frontend/resolve-declarations.test.js +459 -0
  287. package/dist/test/unit/frontend/resolve-declarations.test.js.map +1 -0
  288. package/dist/test/unit/identifiers/casefold.test.d.ts +2 -0
  289. package/dist/test/unit/identifiers/casefold.test.d.ts.map +1 -0
  290. package/dist/test/unit/identifiers/casefold.test.js +77 -0
  291. package/dist/test/unit/identifiers/casefold.test.js.map +1 -0
  292. package/dist/test/unit/identifiers/scopes.test.d.ts +2 -0
  293. package/dist/test/unit/identifiers/scopes.test.d.ts.map +1 -0
  294. package/dist/test/unit/identifiers/scopes.test.js +109 -0
  295. package/dist/test/unit/identifiers/scopes.test.js.map +1 -0
  296. package/dist/test/unit/lambda-capture-parity.test.js +12 -5
  297. package/dist/test/unit/lambda-capture-parity.test.js.map +1 -1
  298. package/dist/test/unit/lsp/lsp-locale-fixes.test.js +10 -11
  299. package/dist/test/unit/lsp/lsp-locale-fixes.test.js.map +1 -1
  300. package/dist/test/unit/lsp/parse-document.test.js +42 -0
  301. package/dist/test/unit/lsp/parse-document.test.js.map +1 -1
  302. package/dist/test/unit/lsp/resolution-completion.test.d.ts +2 -0
  303. package/dist/test/unit/lsp/resolution-completion.test.d.ts.map +1 -0
  304. package/dist/test/unit/lsp/resolution-completion.test.js +132 -0
  305. package/dist/test/unit/lsp/resolution-completion.test.js.map +1 -0
  306. package/dist/test/unit/lsp/resolution-definition.test.d.ts +2 -0
  307. package/dist/test/unit/lsp/resolution-definition.test.d.ts.map +1 -0
  308. package/dist/test/unit/lsp/resolution-definition.test.js +75 -0
  309. package/dist/test/unit/lsp/resolution-definition.test.js.map +1 -0
  310. package/dist/test/unit/lsp/resolution-diagnostics.test.d.ts +2 -0
  311. package/dist/test/unit/lsp/resolution-diagnostics.test.d.ts.map +1 -0
  312. package/dist/test/unit/lsp/resolution-diagnostics.test.js +88 -0
  313. package/dist/test/unit/lsp/resolution-diagnostics.test.js.map +1 -0
  314. package/dist/test/unit/lsp/resolution-fixture.d.ts +32 -0
  315. package/dist/test/unit/lsp/resolution-fixture.d.ts.map +1 -0
  316. package/dist/test/unit/lsp/resolution-fixture.js +69 -0
  317. package/dist/test/unit/lsp/resolution-fixture.js.map +1 -0
  318. package/dist/test/unit/lsp/resolution-hover.test.d.ts +2 -0
  319. package/dist/test/unit/lsp/resolution-hover.test.d.ts.map +1 -0
  320. package/dist/test/unit/lsp/resolution-hover.test.js +107 -0
  321. package/dist/test/unit/lsp/resolution-hover.test.js.map +1 -0
  322. package/dist/test/unit/lsp/tenant-vocabulary.test.js +21 -47
  323. package/dist/test/unit/lsp/tenant-vocabulary.test.js.map +1 -1
  324. package/dist/test/unit/parser/func-type.test.d.ts +2 -0
  325. package/dist/test/unit/parser/func-type.test.d.ts.map +1 -0
  326. package/dist/test/unit/parser/func-type.test.js +161 -0
  327. package/dist/test/unit/parser/func-type.test.js.map +1 -0
  328. package/dist/test/unit/parser/parser.test.js +33 -0
  329. package/dist/test/unit/parser/parser.test.js.map +1 -1
  330. package/dist/test/unit/public-api-checked-entries.test.d.ts +2 -0
  331. package/dist/test/unit/public-api-checked-entries.test.d.ts.map +1 -0
  332. package/dist/test/unit/public-api-checked-entries.test.js +28 -0
  333. package/dist/test/unit/public-api-checked-entries.test.js.map +1 -0
  334. package/dist/test/unit/typecheck/qualified-enum-member.test.d.ts +2 -0
  335. package/dist/test/unit/typecheck/qualified-enum-member.test.d.ts.map +1 -0
  336. package/dist/test/unit/typecheck/qualified-enum-member.test.js +73 -0
  337. package/dist/test/unit/typecheck/qualified-enum-member.test.js.map +1 -0
  338. package/dist/test/unit/version.test.d.ts +9 -0
  339. package/dist/test/unit/version.test.d.ts.map +1 -0
  340. package/dist/test/unit/version.test.js +34 -0
  341. package/dist/test/unit/version.test.js.map +1 -0
  342. package/package.json +2 -1
  343. package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.d.ts +0 -47
  344. package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.d.ts.map +0 -1
  345. package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.js +0 -142
  346. package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-definition.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-definition.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolution-diagnostics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-diagnostics.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-diagnostics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * 语法不完整时诊断的降级(ADR 0051 Review Focus 1):只对解析器恢复出的部分运行 R1,跳过 R2,
3
+ * 不从未完成代码级联出 E8xx / W8xx;语法完整时 R2 照常报告。
4
+ */
5
+ import { describe, it } from 'node:test';
6
+ import assert from 'node:assert/strict';
7
+ import { computeDiagnostics } from '../../../src/lsp/diagnostics.js';
8
+ import { ZH_CN } from '../../../src/config/lexicons/zh-CN.js';
9
+ import { EN_US } from '../../../src/config/lexicons/en-US.js';
10
+ import { parseDocumentText } from '../../../src/lsp/parse-document.js';
11
+ import { DECLS, docOf, getOrParseWith } from './resolution-fixture.js';
12
+ async function codesOf(lines) {
13
+ const doc = docOf(lines);
14
+ const diags = await computeDiagnostics(doc.document, getOrParseWith(ZH_CN), ZH_CN);
15
+ return diags.map((d) => String(d.code ?? ''));
16
+ }
17
+ const isResolution = (code) => /^[EW]8\d\d$/.test(code);
18
+ const GOOD = ['规则 检查 给定 x 作为 司机,产出 整数:', ' 返回 x.alter。', ''];
19
+ describe('诊断:语法不完整时降级', () => {
20
+ it('★各种半行输入都不产生 E8xx / W8xx', async () => {
21
+ const tails = [
22
+ ' 返回 x.',
23
+ ' 返回 x.al',
24
+ ' 返回 x.alter',
25
+ ' 令 y 定义为 司机 包含 alter 将 设为',
26
+ ' 令 y 定义为 司机 包含 al',
27
+ ' 返回 Ho',
28
+ ' 返回 检',
29
+ '规则 坏 给定 h 作为 车',
30
+ '定义 车主 包含 jah',
31
+ ' 如果 x.alter',
32
+ ];
33
+ for (const tail of tails) {
34
+ const codes = await codesOf([...DECLS, ...GOOD, '规则 坏 给定 x 作为 司机,产出 整数:', tail, '']);
35
+ assert.ok(codes.some((c) => !isResolution(c)), `夹具应含语法错误:${tail}`);
36
+ assert.deepEqual(codes.filter(isResolution), [], `半行 "${tail}" 级联出了名称解析诊断`);
37
+ }
38
+ });
39
+ it('★语法不完整时,完整部分的本地化路径不被误报(R2 跳过,也不拿未解析的 Core 做类型检查)', async () => {
40
+ const codes = await codesOf([...DECLS, ...GOOD, '规则 坏 给定 h 作为 车主,产出 整数:', ' 返回 h.fahrer.al', '']);
41
+ assert.deepEqual(codes.filter((c) => /^E8|^W8|^E0/.test(c) && c !== ''), [], `实际:${codes}`);
42
+ });
43
+ it('★正在编辑的声明被解析器丢弃时,引用它的完整部分不报 E800 / E802', async () => {
44
+ const codes = await codesOf([
45
+ '模块 m。',
46
+ '',
47
+ '定义 Kunde 包含 nam',
48
+ '',
49
+ '规则 g 给定 k 作为 Kunde,产出 Kunde:',
50
+ ' 返回 k。',
51
+ '',
52
+ '规则 hilfe 产出 整数:',
53
+ ' 返回 1 加',
54
+ '',
55
+ '规则 h 产出 整数:',
56
+ ' 令 f 定义为 hilfe。',
57
+ ' 返回 1。',
58
+ '',
59
+ ]);
60
+ assert.ok(codes.some((c) => !isResolution(c)), '夹具应含语法错误');
61
+ assert.deepEqual(codes.filter(isResolution), [], `被丢弃的声明级联出了名称解析诊断:${codes}`);
62
+ });
63
+ it('★无词汇时语法错误不屏蔽其它声明的类型诊断(R2 跳过,R1 输出直接 lower 做检查)', async () => {
64
+ const doc = docOf([
65
+ 'Module m.',
66
+ '',
67
+ 'Rule f given x as Int, produce Text:',
68
+ ' Return x.',
69
+ '',
70
+ 'Rule g given z as Int, produce Int:',
71
+ ' Return z plus',
72
+ '',
73
+ ]);
74
+ const plain = (d) => ({ ...parseDocumentText(d.getText(), EN_US, undefined, undefined), text: d.getText() });
75
+ const codes = (await computeDiagnostics(doc.document, plain, EN_US)).map((d) => String(d.code ?? ''));
76
+ assert.ok(codes.some((c) => c.startsWith('P')), `夹具应含语法错误:${codes}`);
77
+ assert.ok(codes.includes('E003'), `返回类型不匹配应仍被报告:${codes}`);
78
+ assert.deepEqual(codes.filter(isResolution), []);
79
+ });
80
+ it('语法完整时 R2 照常报告:未知字段 E801', async () => {
81
+ const codes = await codesOf([...DECLS, '规则 检查 给定 x 作为 司机,产出 整数:', ' 返回 x.unbekannt。', '']);
82
+ assert.ok(codes.includes('E801'), `实际:${codes}`);
83
+ });
84
+ it('语法完整且全部可解析时无名称解析诊断', async () => {
85
+ assert.deepEqual((await codesOf([...DECLS, ...GOOD])).filter(isResolution), []);
86
+ });
87
+ });
88
+ //# sourceMappingURL=resolution-diagnostics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-diagnostics.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-diagnostics.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 名称解析悬停 / 补全测试的共用夹具(ADR 0051):带租户词汇的文档快照与 stub connection。
3
+ *
4
+ * 走真实的 parseDocumentText 与 register*Handlers 接线,只把词汇作用域直接塞进快照
5
+ * (等价于 server 的 CachedDoc),避免依赖租户注册中心的全局状态。
6
+ */
7
+ import { TextDocument } from 'vscode-languageserver-textdocument';
8
+ import { parseDocumentText } from '../../../src/lsp/parse-document.js';
9
+ import type { VocabularyScopes } from '../../../src/config/lexicons/identifiers/scopes.js';
10
+ import type { Lexicon } from '../../../src/config/lexicons/types.js';
11
+ /** Driver(司机)字段 age → alter、name 无本地化;Owner(车主)字段 years → jahre、driver → fahrer;Level 成员 Hoch / Niedrig。 */
12
+ export declare const VOCAB: VocabularyScopes;
13
+ export declare const DECLS: string[];
14
+ export interface Doc {
15
+ readonly uri: string;
16
+ readonly document: TextDocument;
17
+ readonly lines: readonly string[];
18
+ }
19
+ export declare function docOf(lines: readonly string[]): Doc;
20
+ /** 等价 server 的 getOrParse:解析文档并附上租户词汇作用域。 */
21
+ export declare function getOrParseWith(lexicon: Lexicon, vocabulary?: VocabularyScopes): (doc: TextDocument) => ReturnType<typeof parseDocumentText> & {
22
+ text: string;
23
+ };
24
+ /** 第 line 行(0 基)中第 nth 个 needle 的起始列 + offset。 */
25
+ export declare function posOf(doc: Doc, line: number, needle: string, offset?: number, nth?: number): {
26
+ line: number;
27
+ character: number;
28
+ };
29
+ export declare function documentsOf(...docs: Doc[]): {
30
+ get: (uri: string) => TextDocument | undefined;
31
+ };
32
+ //# sourceMappingURL=resolution-fixture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-fixture.d.ts","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-fixture.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAG3F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAUrE,4GAA4G;AAC5G,eAAO,MAAM,KAAK,EAAE,gBAMlB,CAAC;AAEH,eAAO,MAAM,KAAK,UASjB,CAAC;AAEF,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAID,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAGnD;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,GAAE,gBAAwB,IAE3E,KAAK,YAAY,KAMI,UAAU,CAAC,OAAO,iBAAiB,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAErF;AAED,kDAAkD;AAClD,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAI,EAAE,GAAG,SAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAStH;AAED,wBAAgB,WAAW,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE;eAEpB,MAAM;EAC3B"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 名称解析悬停 / 补全测试的共用夹具(ADR 0051):带租户词汇的文档快照与 stub connection。
3
+ *
4
+ * 走真实的 parseDocumentText 与 register*Handlers 接线,只把词汇作用域直接塞进快照
5
+ * (等价于 server 的 CachedDoc),避免依赖租户注册中心的全局状态。
6
+ */
7
+ import { TextDocument } from 'vscode-languageserver-textdocument';
8
+ import { parseDocumentText } from '../../../src/lsp/parse-document.js';
9
+ import { buildVocabularyScopes } from '../../../src/config/lexicons/identifiers/scopes.js';
10
+ import { IdentifierKind } from '../../../src/config/lexicons/identifiers/types.js';
11
+ const struct = (canonical, localized) => ({ canonical, localized, kind: IdentifierKind.STRUCT });
12
+ const field = (parent, canonical, localized) => ({
13
+ canonical, localized, kind: IdentifierKind.FIELD, parent,
14
+ });
15
+ const member = (parent, canonical, localized) => ({
16
+ canonical, localized, kind: IdentifierKind.ENUM_VALUE, parent,
17
+ });
18
+ /** Driver(司机)字段 age → alter、name 无本地化;Owner(车主)字段 years → jahre、driver → fahrer;Level 成员 Hoch / Niedrig。 */
19
+ export const VOCAB = buildVocabularyScopes({
20
+ id: 'lsp-resolution', name: 't', locale: 'zh-CN', version: '1',
21
+ structs: [struct('Driver', '司机'), struct('Owner', '车主'), struct('Level', '等级')],
22
+ fields: [field('Driver', 'age', 'alter'), field('Owner', 'years', 'jahre'), field('Owner', 'driver', 'fahrer')],
23
+ functions: [{ canonical: 'check', localized: '检查', kind: IdentifierKind.FUNCTION }],
24
+ enumValues: [member('Level', 'High', 'Hoch'), member('Level', 'Low', 'Niedrig')],
25
+ });
26
+ export const DECLS = [
27
+ '模块 m。',
28
+ '',
29
+ '定义 司机 包含 alter 作为 整数,name 作为 文本。',
30
+ '',
31
+ '定义 车主 包含 jahre 作为 整数,fahrer 作为 司机。',
32
+ '',
33
+ '定义 等级 为以下之一 Hoch、Niedrig。',
34
+ '',
35
+ ];
36
+ let seq = 0;
37
+ export function docOf(lines) {
38
+ const uri = `file:///resolution-${seq++}.aster`;
39
+ return { uri, document: TextDocument.create(uri, 'aster', 1, lines.join('\n')), lines };
40
+ }
41
+ /** 等价 server 的 getOrParse:解析文档并附上租户词汇作用域。 */
42
+ export function getOrParseWith(lexicon, vocabulary = VOCAB) {
43
+ const entries = new Map();
44
+ return (doc) => {
45
+ const key = `${doc.uri}@${doc.version}`;
46
+ if (!entries.has(key)) {
47
+ const parsed = parseDocumentText(doc.getText(), lexicon, undefined, undefined);
48
+ entries.set(key, { ...parsed, text: doc.getText(), vocabulary });
49
+ }
50
+ return entries.get(key);
51
+ };
52
+ }
53
+ /** 第 line 行(0 基)中第 nth 个 needle 的起始列 + offset。 */
54
+ export function posOf(doc, line, needle, offset = 0, nth = 0) {
55
+ let from = 0;
56
+ let at = -1;
57
+ for (let i = 0; i <= nth; i++) {
58
+ at = doc.lines[line].indexOf(needle, from);
59
+ from = at + 1;
60
+ }
61
+ if (at < 0)
62
+ throw new Error(`第 ${line} 行找不到 ${needle}`);
63
+ return { line, character: at + offset };
64
+ }
65
+ export function documentsOf(...docs) {
66
+ const byUri = new Map(docs.map((d) => [d.uri, d.document]));
67
+ return { get: (uri) => byUri.get(uri) };
68
+ }
69
+ //# sourceMappingURL=resolution-fixture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-fixture.js","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-fixture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolution-hover.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-hover.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-hover.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * 按位置角色的悬停(ADR 0051 §5「LSP」与 Review Focus 1)。
3
+ *
4
+ * 悬停在本地化写法上显示 `写法 → 规范名(角色 · 父名)`,角色与父名来自 R1 的 resolved 与
5
+ * R2 的解析结果;写法等于规范名时不追加任何内容。语法不完整时只用 R1 结果,R2 跳过,不抛异常。
6
+ * 走真实的 registerHoverHandler 接线(stub connection 捕获回调)。
7
+ */
8
+ import { describe, it } from 'node:test';
9
+ import assert from 'node:assert/strict';
10
+ import { registerHoverHandler } from '../../../src/lsp/navigation/hover.js';
11
+ import { resolveDocument } from '../../../src/lsp/resolution.js';
12
+ import { ZH_CN } from '../../../src/config/lexicons/zh-CN.js';
13
+ import { DE_DE } from '../../../src/config/lexicons/de-DE.js';
14
+ import { DECLS, docOf, documentsOf, getOrParseWith, posOf } from './resolution-fixture.js';
15
+ function hoverAt(doc, pos, lexicon = ZH_CN) {
16
+ let handler;
17
+ const connection = { onHover: (fn) => { handler = fn; } };
18
+ registerHoverHandler(connection, documentsOf(doc), getOrParseWith(lexicon), () => lexicon);
19
+ assert.ok(handler, 'onHover 未注册');
20
+ return handler({ textDocument: { uri: doc.uri }, position: pos }).then((h) => h?.contents.value ?? null);
21
+ }
22
+ const PROGRAM = docOf([
23
+ ...DECLS,
24
+ '规则 检查 给定 x 作为 司机,产出 整数:',
25
+ ' 返回 x.alter。',
26
+ '',
27
+ '规则 级别 给定 x 作为 司机,产出 等级:',
28
+ ' 返回 Hoch。',
29
+ '',
30
+ '规则 g 给定 h 作为 车主,产出 整数:',
31
+ ' 返回 h.fahrer.alter。',
32
+ '',
33
+ ]);
34
+ describe('按角色悬停', () => {
35
+ it('★字段声明 alter:alter → age(字段 · Driver)', async () => {
36
+ const text = await hoverAt(PROGRAM, posOf(PROGRAM, 2, 'alter', 1));
37
+ assert.ok(text?.includes('alter → age(字段 · Driver)'), `实际:${text}`);
38
+ });
39
+ it('★点分路径 x.alter 的字段段(R2):alter → age(字段 · Driver)', async () => {
40
+ const text = await hoverAt(PROGRAM, posOf(PROGRAM, 9, 'alter', 2));
41
+ assert.ok(text?.includes('alter → age(字段 · Driver)'), `实际:${text}`);
42
+ });
43
+ it('★多段路径 h.fahrer.alter:各段按前一段的类型取父名', async () => {
44
+ const fahrer = await hoverAt(PROGRAM, posOf(PROGRAM, 15, 'fahrer', 1));
45
+ const alter = await hoverAt(PROGRAM, posOf(PROGRAM, 15, 'alter', 1));
46
+ assert.ok(fahrer?.includes('fahrer → driver(字段 · Owner)'), `实际:${fahrer}`);
47
+ assert.ok(alter?.includes('alter → age(字段 · Driver)'), `实际:${alter}`);
48
+ });
49
+ it('★枚举成员:声明与期望枚举下的裸名都显示 Hoch → High(枚举成员 · Level)', async () => {
50
+ const decl = await hoverAt(PROGRAM, posOf(PROGRAM, 6, 'Hoch', 1));
51
+ const ref = await hoverAt(PROGRAM, posOf(PROGRAM, 12, 'Hoch', 1));
52
+ assert.ok(decl?.includes('Hoch → High(枚举成员 · Level)'), `实际:${decl}`);
53
+ assert.ok(ref?.includes('Hoch → High(枚举成员 · Level)'), `实际:${ref}`);
54
+ });
55
+ it('类型与函数:司机 → Driver(类型)、检查 → check(函数)', async () => {
56
+ const type = await hoverAt(PROGRAM, posOf(PROGRAM, 8, '司机', 1));
57
+ const func = await hoverAt(PROGRAM, posOf(PROGRAM, 8, '检查', 1));
58
+ assert.ok(type?.includes('司机 → Driver(类型)'), `实际:${type}`);
59
+ assert.ok(func?.includes('检查 → check(函数)'), `实际:${func}`);
60
+ });
61
+ it('★写法等于规范名时不追加解析行,原有悬停保持不变', async () => {
62
+ const param = await hoverAt(PROGRAM, posOf(PROGRAM, 8, 'x', 0));
63
+ const name = await hoverAt(PROGRAM, posOf(PROGRAM, 2, 'name', 1));
64
+ assert.ok(param && !param.includes('→'), `实际:${param}`);
65
+ assert.ok(param.startsWith('参数'), `原有参数悬停丢失:${param}`);
66
+ assert.ok(name && !name.includes('→'), `实际:${name}`);
67
+ });
68
+ it('文案随文档 lexicon 本地化:英文界面为 alter → age (field · Driver)', async () => {
69
+ const doc = docOf(['Modul m.', '', 'Definiere Driver hat alter als Ganzzahl.', '']);
70
+ const text = await hoverAt(doc, posOf(doc, 2, 'alter', 1), DE_DE);
71
+ assert.ok(text?.includes('alter → age (field · Driver)'), `实际:${text}`);
72
+ });
73
+ });
74
+ describe('语法不完整时的降级(Review Focus 1)', () => {
75
+ const BROKEN = docOf([
76
+ ...DECLS,
77
+ '规则 检查 给定 x 作为 司机,产出 整数:',
78
+ ' 返回 x.alter。',
79
+ '',
80
+ '规则 坏 给定 h 作为 车主,产出 整数:',
81
+ ' 返回 h.fahrer.al',
82
+ '',
83
+ ]);
84
+ it('★R2 跳过,仍保留 R1 可得的解析位置', () => {
85
+ const parsed = getOrParseWith(ZH_CN)(BROKEN.document);
86
+ assert.ok(parsed.parseDiagnostics.some((d) => d.severity === 'error'), '夹具应含语法错误');
87
+ const res = resolveDocument(parsed);
88
+ assert.equal(res.complete, false);
89
+ assert.equal(res.core, undefined, '语法不完整时不应运行 lower/R2');
90
+ assert.ok(res.sites.some((s) => s.role === 'FIELD_DECL' && s.canonical === 'age'), 'R1 的字段声明位置应保留');
91
+ });
92
+ it('★R1 位置照常悬停;R2 位置不悬停解析行;均不抛异常', async () => {
93
+ const decl = await hoverAt(BROKEN, posOf(BROKEN, 2, 'alter', 1));
94
+ assert.ok(decl?.includes('alter → age(字段 · Driver)'), `实际:${decl}`);
95
+ const path = await hoverAt(BROKEN, posOf(BROKEN, 9, 'alter', 2));
96
+ assert.ok(!path?.includes('→'), `R2 已跳过,不应有字段段解析行:${path}`);
97
+ await hoverAt(BROKEN, posOf(BROKEN, 12, 'al', 1));
98
+ });
99
+ it('半行输入的各种形态都不抛异常', async () => {
100
+ const tails = [' 返回 h.', ' 令 y 定义为 司机 包含 alter 将 设为', '规则 坏 给定 h 作为 车', ' 返回 Ho', '定义 车主 包含 jah'];
101
+ for (const tail of tails) {
102
+ const doc = docOf([...DECLS, '规则 坏 给定 h 作为 车主,产出 整数:', tail, '']);
103
+ await hoverAt(doc, { line: DECLS.length + 1, character: tail.length - 1 });
104
+ }
105
+ });
106
+ });
107
+ //# sourceMappingURL=resolution-hover.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-hover.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/resolution-hover.test.ts"],"names":[],"mappings":"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"}
@@ -3,29 +3,21 @@ import assert from 'node:assert/strict';
3
3
  import { vocabularyRegistry, initBuiltinVocabularies, } from '../../../src/config/lexicons/identifiers/registry.js';
4
4
  import { canonicalize } from '../../../src/frontend/canonicalizer.js';
5
5
  import { ZH_CN } from '../../../src/config/lexicons/zh-CN.js';
6
+ import { lookup } from '../../../src/config/lexicons/identifiers/scopes.js';
6
7
  import { buildCanonicalizeOptions } from '../../../src/lsp/canonicalize-options.js';
7
8
  import { applyTenantInitOptions, resolveTenantContext } from '../../../src/lsp/tenant-init.js';
8
9
  /**
9
10
  * 租户领域词汇必须参与 LSP 的解析(issue #161)。
10
11
  *
11
12
  * ★缺口有**两半**,缺任一半都等于没做:
12
- * 1. LSP 进程不知道自己在为哪个租户服务 —— 网关的 upgrade 只校验
13
- * Origin + 共享 token,不传租户身份。已改为由客户端在 `initialize` 的
13
+ * 1. LSP 进程不知道自己在为哪个租户服务 —— 已改为由客户端在 `initialize` 的
14
14
  * `initializationOptions` 里推送 `{ tenantId, domainVocabularies }`。
15
- * 2. **即便注册了也白搭**:canonicalizer 靠
16
- * `getWithCustom(tenantId, domain, locale)` 查自定义词汇,
17
- * 而 LSP 此前调用的是 `canonicalize(text, lexicon)` —— 只传 lexicon,
18
- * 那条分支(要求 `opts.domain && opts.locale` 同时存在)根本走不到。
15
+ * 2. LSP 必须把该租户的词汇作用域交给 canonicalize(字面量宏)与后续名称解析
16
+ * (ADR 0051:标识符按位置解析,canonicalize 不再替换标识符)。
19
17
  *
20
18
  * 本测试两半都锁:
21
- * · 第 2 半——同一段源码在**传/不传**租户上下文时的行为差异(canonicalizer 契约)
19
+ * · 第 2 半——buildCanonicalizeOptions 在传/不传租户上下文时取到的词汇作用域
22
20
  * · 第 1 半——`applyTenantInitOptions` 是否真的把词汇注册进去
23
- *
24
- * ★为什么第 1 半非补不可:原先它只由 `server.ts` 承担,而那个模块顶层就
25
- * `createConnection()`,单测无法 import。实测把 server.ts 整段注册逻辑改成
26
- * `if (false)`,本文件 6 条用例**仍然全绿**——契约证明"canonicalizer 会用
27
- * 租户词汇",证明不了"LSP 真的注册了"。已把决策点抽成无副作用的
28
- * `src/lsp/tenant-init.ts`(与 aster-lang-ts#162 同一修法)。
29
21
  */
30
22
  const TENANT = 'tenant-vocab-test';
31
23
  const DOMAIN = 'insurance.vocabtest';
@@ -40,36 +32,31 @@ const VOCAB = {
40
32
  functions: [{ canonical: 'coverageAmount', localized: '保额', kind: 'function' }],
41
33
  };
42
34
  const SRC = '模块 probe。\n\n规则 main 产出 Int:\n 返回 保额()。\n';
35
+ function vocabularyOf(opts) {
36
+ return opts && 'vocabulary' in opts ? opts.vocabulary : undefined;
37
+ }
43
38
  describe('租户领域词汇参与解析', () => {
44
- it('★传租户上下文时,本地化词被规范化', () => {
39
+ it('★有完整租户上下文时,LSP 传的是带该租户词汇作用域的 options', () => {
45
40
  initBuiltinVocabularies();
46
41
  vocabularyRegistry.registerCustom(TENANT, VOCAB);
47
- const out = canonicalize(SRC, {
48
- lexicon: ZH_CN,
49
- tenantId: TENANT,
50
- domain: DOMAIN,
51
- locale: 'zh-CN',
52
- });
53
- assert.ok(out.includes('coverageAmount'), `「保额」应被规范化为 coverageAmount,实际输出:${out.slice(0, 120)}`);
42
+ const opts = buildCanonicalizeOptions(ZH_CN, TENANT, DOMAIN);
43
+ const scopes = vocabularyOf(opts);
44
+ assert.ok(scopes, 'LSP 应传 options 对象而非裸 lexicon,否则租户词汇走不到');
45
+ assert.equal(opts.lexicon, ZH_CN);
46
+ assert.deepEqual(lookup(scopes.functions, '保额').exact.map((c) => c.canonical), ['coverageAmount']);
54
47
  });
55
- it('★不传租户上下文时保持原样(反向护栏)', () => {
48
+ it('★canonicalize 不再替换标识符:本地化词保持原写法,交由名称解析', () => {
56
49
  initBuiltinVocabularies();
57
50
  vocabularyRegistry.registerCustom(TENANT, VOCAB);
58
- // 没有这一条,把实现写成「无条件查所有租户词汇」也能让上面变绿——
59
- // 而那会造成**跨租户词汇泄露**:A 租户的术语在 B 租户的文档里生效。
60
- const out = canonicalize(SRC, ZH_CN);
61
- assert.ok(!out.includes('coverageAmount'), `未传租户时不得应用其词汇(跨租户泄露),实际输出:${out.slice(0, 120)}`);
51
+ const out = canonicalize(SRC, buildCanonicalizeOptions(ZH_CN, TENANT, DOMAIN));
52
+ assert.ok(out.includes('保额') && !out.includes('coverageAmount'), `实际输出:${out.slice(0, 120)}`);
62
53
  });
63
54
  it('★另一个租户拿不到本租户的词汇(隔离性)', () => {
64
55
  initBuiltinVocabularies();
65
56
  vocabularyRegistry.registerCustom(TENANT, VOCAB);
66
- const out = canonicalize(SRC, {
67
- lexicon: ZH_CN,
68
- tenantId: 'some-other-tenant',
69
- domain: DOMAIN,
70
- locale: 'zh-CN',
71
- });
72
- assert.ok(!out.includes('coverageAmount'), `租户隔离被打破:other-tenant 用到了 ${TENANT} 的词汇`);
57
+ // 没有这一条,把实现写成「无条件查所有租户词汇」也能让上面变绿——
58
+ // 而那会造成**跨租户词汇泄露**:A 租户的术语在 B 租户的文档里生效。
59
+ assert.equal(buildCanonicalizeOptions(ZH_CN, 'some-other-tenant', DOMAIN), ZH_CN, `租户隔离被打破:other-tenant 用到了 ${TENANT} 的词汇`);
73
60
  });
74
61
  it('无效词汇表被拒绝(registerCustom 有校验,不静默接受)', () => {
75
62
  initBuiltinVocabularies();
@@ -77,20 +64,7 @@ describe('租户领域词汇参与解析', () => {
77
64
  // 否则损坏的词汇会在解析期以更难定位的方式炸。
78
65
  assert.throws(() => vocabularyRegistry.registerCustom(TENANT, { id: 'bad', name: 'x' }), /.+/);
79
66
  });
80
- /* ── LSP 侧接线:证明"真的传了",而不只是"canonicalizer 会用" ────────────
81
- *
82
- * ★上面四条只锁 canonicalizer 契约。实测把 LSP 里的租户参数删掉
83
- * (回到缺陷版)后,那四条**仍然全绿** —— 契约对了不等于调用方传了。
84
- * 故必须对 LSP 实际构造的参数单独断言。
85
- */
86
- it('★有完整租户上下文时,LSP 传的是带 tenantId/domain 的 options', () => {
87
- const opts = buildCanonicalizeOptions(ZH_CN, TENANT, DOMAIN);
88
- assert.ok(opts && typeof opts === 'object' && 'tenantId' in opts, 'LSP 应传 options 对象而非裸 lexicon,否则自定义词汇分支走不到');
89
- assert.equal(opts.tenantId, TENANT);
90
- assert.equal(opts.domain, DOMAIN);
91
- assert.equal(opts.locale, ZH_CN.id, 'locale 必须跟随 lexicon —— canonicalizer 按 (tenant, domain, locale) 三元组查');
92
- });
93
- it('★缺任一项即回退裸 lexicon(半套参数会静默走内置,比报错更难查)', () => {
67
+ it('★缺任一项即回退裸 lexicon(半套参数查不到租户那一份)', () => {
94
68
  assert.equal(buildCanonicalizeOptions(ZH_CN, undefined, DOMAIN), ZH_CN, '缺 tenantId 应回退');
95
69
  assert.equal(buildCanonicalizeOptions(ZH_CN, TENANT, undefined), ZH_CN, '缺 domain 应回退');
96
70
  assert.equal(buildCanonicalizeOptions(undefined, TENANT, DOMAIN), undefined, '无 lexicon 时保持 undefined');
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-vocabulary.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/tenant-vocabulary.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenant-vocabulary.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/tenant-vocabulary.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=func-type.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"func-type.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/parser/func-type.test.ts"],"names":[],"mappings":""}