@typespec/compiler 0.41.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 (352) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/cmd/tsp-server.js +3 -0
  4. package/cmd/tsp.js +3 -0
  5. package/dist/cmd/runner.d.ts +9 -0
  6. package/dist/cmd/runner.d.ts.map +1 -0
  7. package/dist/cmd/runner.js +62 -0
  8. package/dist/cmd/runner.js.map +1 -0
  9. package/dist/config/config-interpolation.d.ts +11 -0
  10. package/dist/config/config-interpolation.d.ts.map +1 -0
  11. package/dist/config/config-interpolation.js +109 -0
  12. package/dist/config/config-interpolation.js.map +1 -0
  13. package/dist/config/config-loader.d.ts +25 -0
  14. package/dist/config/config-loader.d.ts.map +1 -0
  15. package/dist/config/config-loader.js +182 -0
  16. package/dist/config/config-loader.js.map +1 -0
  17. package/dist/config/config-schema.d.ts +4 -0
  18. package/dist/config/config-schema.d.ts.map +1 -0
  19. package/dist/config/config-schema.js +84 -0
  20. package/dist/config/config-schema.js.map +1 -0
  21. package/dist/config/index.d.ts +3 -0
  22. package/dist/config/index.d.ts.map +1 -0
  23. package/dist/config/index.js +3 -0
  24. package/dist/config/index.js.map +1 -0
  25. package/dist/config/types.d.ts +79 -0
  26. package/dist/config/types.d.ts.map +1 -0
  27. package/dist/config/types.js +2 -0
  28. package/dist/config/types.js.map +1 -0
  29. package/dist/core/binder.d.ts +29 -0
  30. package/dist/core/binder.d.ts.map +1 -0
  31. package/dist/core/binder.js +455 -0
  32. package/dist/core/binder.js.map +1 -0
  33. package/dist/core/charcode.d.ts +130 -0
  34. package/dist/core/charcode.d.ts.map +1 -0
  35. package/dist/core/charcode.js +115 -0
  36. package/dist/core/charcode.js.map +1 -0
  37. package/dist/core/checker.d.ts +138 -0
  38. package/dist/core/checker.d.ts.map +1 -0
  39. package/dist/core/checker.js +4070 -0
  40. package/dist/core/checker.js.map +1 -0
  41. package/dist/core/cli/args.d.ts +18 -0
  42. package/dist/core/cli/args.d.ts.map +1 -0
  43. package/dist/core/cli/args.js +108 -0
  44. package/dist/core/cli/args.js.map +1 -0
  45. package/dist/core/cli/cli.d.ts +2 -0
  46. package/dist/core/cli/cli.d.ts.map +1 -0
  47. package/dist/core/cli/cli.js +477 -0
  48. package/dist/core/cli/cli.js.map +1 -0
  49. package/dist/core/cli/index.d.ts +2 -0
  50. package/dist/core/cli/index.d.ts.map +1 -0
  51. package/dist/core/cli/index.js +2 -0
  52. package/dist/core/cli/index.js.map +1 -0
  53. package/dist/core/decorator-utils.d.ts +108 -0
  54. package/dist/core/decorator-utils.d.ts.map +1 -0
  55. package/dist/core/decorator-utils.js +326 -0
  56. package/dist/core/decorator-utils.js.map +1 -0
  57. package/dist/core/diagnostics.d.ts +93 -0
  58. package/dist/core/diagnostics.d.ts.map +1 -0
  59. package/dist/core/diagnostics.js +315 -0
  60. package/dist/core/diagnostics.js.map +1 -0
  61. package/dist/core/emitter-utils.d.ts +14 -0
  62. package/dist/core/emitter-utils.d.ts.map +1 -0
  63. package/dist/core/emitter-utils.js +16 -0
  64. package/dist/core/emitter-utils.js.map +1 -0
  65. package/dist/core/formatter-fs.d.ts +21 -0
  66. package/dist/core/formatter-fs.d.ts.map +1 -0
  67. package/dist/core/formatter-fs.js +79 -0
  68. package/dist/core/formatter-fs.js.map +1 -0
  69. package/dist/core/formatter.d.ts +10 -0
  70. package/dist/core/formatter.d.ts.map +1 -0
  71. package/dist/core/formatter.js +24 -0
  72. package/dist/core/formatter.js.map +1 -0
  73. package/dist/core/helpers/discriminator-utils.d.ts +14 -0
  74. package/dist/core/helpers/discriminator-utils.d.ts.map +1 -0
  75. package/dist/core/helpers/discriminator-utils.js +169 -0
  76. package/dist/core/helpers/discriminator-utils.js.map +1 -0
  77. package/dist/core/helpers/index.d.ts +6 -0
  78. package/dist/core/helpers/index.d.ts.map +1 -0
  79. package/dist/core/helpers/index.js +6 -0
  80. package/dist/core/helpers/index.js.map +1 -0
  81. package/dist/core/helpers/operation-utils.d.ts +15 -0
  82. package/dist/core/helpers/operation-utils.d.ts.map +1 -0
  83. package/dist/core/helpers/operation-utils.js +35 -0
  84. package/dist/core/helpers/operation-utils.js.map +1 -0
  85. package/dist/core/helpers/projected-names-utils.d.ts +20 -0
  86. package/dist/core/helpers/projected-names-utils.d.ts.map +1 -0
  87. package/dist/core/helpers/projected-names-utils.js +40 -0
  88. package/dist/core/helpers/projected-names-utils.js.map +1 -0
  89. package/dist/core/helpers/type-name-utils.d.ts +14 -0
  90. package/dist/core/helpers/type-name-utils.d.ts.map +1 -0
  91. package/dist/core/helpers/type-name-utils.js +122 -0
  92. package/dist/core/helpers/type-name-utils.js.map +1 -0
  93. package/dist/core/helpers/usage-resolver.d.ts +20 -0
  94. package/dist/core/helpers/usage-resolver.d.ts.map +1 -0
  95. package/dist/core/helpers/usage-resolver.js +108 -0
  96. package/dist/core/helpers/usage-resolver.js.map +1 -0
  97. package/dist/core/index.d.ts +26 -0
  98. package/dist/core/index.d.ts.map +1 -0
  99. package/dist/core/index.js +26 -0
  100. package/dist/core/index.js.map +1 -0
  101. package/dist/core/install.d.ts +2 -0
  102. package/dist/core/install.d.ts.map +1 -0
  103. package/dist/core/install.js +26 -0
  104. package/dist/core/install.js.map +1 -0
  105. package/dist/core/library.d.ts +34 -0
  106. package/dist/core/library.d.ts.map +1 -0
  107. package/dist/core/library.js +100 -0
  108. package/dist/core/library.js.map +1 -0
  109. package/dist/core/logger/console-sink.browser.d.ts +4 -0
  110. package/dist/core/logger/console-sink.browser.d.ts.map +1 -0
  111. package/dist/core/logger/console-sink.browser.js +14 -0
  112. package/dist/core/logger/console-sink.browser.js.map +1 -0
  113. package/dist/core/logger/console-sink.d.ts +9 -0
  114. package/dist/core/logger/console-sink.d.ts.map +1 -0
  115. package/dist/core/logger/console-sink.js +81 -0
  116. package/dist/core/logger/console-sink.js.map +1 -0
  117. package/dist/core/logger/index.d.ts +3 -0
  118. package/dist/core/logger/index.d.ts.map +1 -0
  119. package/dist/core/logger/index.js +3 -0
  120. package/dist/core/logger/index.js.map +1 -0
  121. package/dist/core/logger/logger.d.ts +7 -0
  122. package/dist/core/logger/logger.d.ts.map +1 -0
  123. package/dist/core/logger/logger.js +32 -0
  124. package/dist/core/logger/logger.js.map +1 -0
  125. package/dist/core/logger/tracer.d.ts +3 -0
  126. package/dist/core/logger/tracer.d.ts.map +1 -0
  127. package/dist/core/logger/tracer.js +91 -0
  128. package/dist/core/logger/tracer.js.map +1 -0
  129. package/dist/core/manifest.d.ts +21 -0
  130. package/dist/core/manifest.d.ts.map +1 -0
  131. package/dist/core/manifest.js +8 -0
  132. package/dist/core/manifest.js.map +1 -0
  133. package/dist/core/messages.d.ts +2253 -0
  134. package/dist/core/messages.d.ts.map +1 -0
  135. package/dist/core/messages.js +749 -0
  136. package/dist/core/messages.js.map +1 -0
  137. package/dist/core/module-resolver.d.ts +84 -0
  138. package/dist/core/module-resolver.d.ts.map +1 -0
  139. package/dist/core/module-resolver.js +170 -0
  140. package/dist/core/module-resolver.js.map +1 -0
  141. package/dist/core/node-host.browser.d.ts +2 -0
  142. package/dist/core/node-host.browser.d.ts.map +1 -0
  143. package/dist/core/node-host.browser.js +2 -0
  144. package/dist/core/node-host.browser.js.map +1 -0
  145. package/dist/core/node-host.d.ts +7 -0
  146. package/dist/core/node-host.d.ts.map +1 -0
  147. package/dist/core/node-host.js +43 -0
  148. package/dist/core/node-host.js.map +1 -0
  149. package/dist/core/nonascii.d.ts +2 -0
  150. package/dist/core/nonascii.d.ts.map +1 -0
  151. package/dist/core/nonascii.js +712 -0
  152. package/dist/core/nonascii.js.map +1 -0
  153. package/dist/core/options.d.ts +46 -0
  154. package/dist/core/options.d.ts.map +1 -0
  155. package/dist/core/options.js +2 -0
  156. package/dist/core/options.js.map +1 -0
  157. package/dist/core/parser.d.ts +17 -0
  158. package/dist/core/parser.d.ts.map +1 -0
  159. package/dist/core/parser.js +2561 -0
  160. package/dist/core/parser.js.map +1 -0
  161. package/dist/core/path-utils.d.ts +193 -0
  162. package/dist/core/path-utils.d.ts.map +1 -0
  163. package/dist/core/path-utils.js +427 -0
  164. package/dist/core/path-utils.js.map +1 -0
  165. package/dist/core/program.d.ts +104 -0
  166. package/dist/core/program.d.ts.map +1 -0
  167. package/dist/core/program.js +898 -0
  168. package/dist/core/program.js.map +1 -0
  169. package/dist/core/projection-members.d.ts +8 -0
  170. package/dist/core/projection-members.d.ts.map +1 -0
  171. package/dist/core/projection-members.js +387 -0
  172. package/dist/core/projection-members.js.map +1 -0
  173. package/dist/core/projector.d.ts +26 -0
  174. package/dist/core/projector.d.ts.map +1 -0
  175. package/dist/core/projector.js +523 -0
  176. package/dist/core/projector.js.map +1 -0
  177. package/dist/core/scanner.d.ts +125 -0
  178. package/dist/core/scanner.d.ts.map +1 -0
  179. package/dist/core/scanner.js +1012 -0
  180. package/dist/core/scanner.js.map +1 -0
  181. package/dist/core/schema-validator.d.ts +6 -0
  182. package/dist/core/schema-validator.d.ts.map +1 -0
  183. package/dist/core/schema-validator.js +38 -0
  184. package/dist/core/schema-validator.js.map +1 -0
  185. package/dist/core/semantic-walker.d.ts +53 -0
  186. package/dist/core/semantic-walker.d.ts.map +1 -0
  187. package/dist/core/semantic-walker.js +355 -0
  188. package/dist/core/semantic-walker.js.map +1 -0
  189. package/dist/core/type-utils.d.ts +49 -0
  190. package/dist/core/type-utils.d.ts.map +1 -0
  191. package/dist/core/type-utils.js +95 -0
  192. package/dist/core/type-utils.js.map +1 -0
  193. package/dist/core/types.d.ts +1345 -0
  194. package/dist/core/types.d.ts.map +1 -0
  195. package/dist/core/types.js +105 -0
  196. package/dist/core/types.js.map +1 -0
  197. package/dist/core/util.d.ts +150 -0
  198. package/dist/core/util.d.ts.map +1 -0
  199. package/dist/core/util.js +417 -0
  200. package/dist/core/util.js.map +1 -0
  201. package/dist/emitter-framework/asset-emitter.d.ts +5 -0
  202. package/dist/emitter-framework/asset-emitter.d.ts.map +1 -0
  203. package/dist/emitter-framework/asset-emitter.js +610 -0
  204. package/dist/emitter-framework/asset-emitter.js.map +1 -0
  205. package/dist/emitter-framework/builders/array-builder.d.ts +7 -0
  206. package/dist/emitter-framework/builders/array-builder.d.ts.map +1 -0
  207. package/dist/emitter-framework/builders/array-builder.js +45 -0
  208. package/dist/emitter-framework/builders/array-builder.js.map +1 -0
  209. package/dist/emitter-framework/builders/object-builder.d.ts +9 -0
  210. package/dist/emitter-framework/builders/object-builder.d.ts.map +1 -0
  211. package/dist/emitter-framework/builders/object-builder.js +30 -0
  212. package/dist/emitter-framework/builders/object-builder.js.map +1 -0
  213. package/dist/emitter-framework/builders/string-builder.d.ts +13 -0
  214. package/dist/emitter-framework/builders/string-builder.d.ts.map +1 -0
  215. package/dist/emitter-framework/builders/string-builder.js +98 -0
  216. package/dist/emitter-framework/builders/string-builder.js.map +1 -0
  217. package/dist/emitter-framework/custom-key-map.d.ts +29 -0
  218. package/dist/emitter-framework/custom-key-map.d.ts.map +1 -0
  219. package/dist/emitter-framework/custom-key-map.js +62 -0
  220. package/dist/emitter-framework/custom-key-map.js.map +1 -0
  221. package/dist/emitter-framework/index.d.ts +8 -0
  222. package/dist/emitter-framework/index.d.ts.map +1 -0
  223. package/dist/emitter-framework/index.js +8 -0
  224. package/dist/emitter-framework/index.js.map +1 -0
  225. package/dist/emitter-framework/placeholder.d.ts +12 -0
  226. package/dist/emitter-framework/placeholder.d.ts.map +1 -0
  227. package/dist/emitter-framework/placeholder.js +27 -0
  228. package/dist/emitter-framework/placeholder.js.map +1 -0
  229. package/dist/emitter-framework/type-emitter.d.ts +314 -0
  230. package/dist/emitter-framework/type-emitter.d.ts.map +1 -0
  231. package/dist/emitter-framework/type-emitter.js +612 -0
  232. package/dist/emitter-framework/type-emitter.js.map +1 -0
  233. package/dist/emitter-framework/types.d.ts +124 -0
  234. package/dist/emitter-framework/types.d.ts.map +1 -0
  235. package/dist/emitter-framework/types.js +39 -0
  236. package/dist/emitter-framework/types.js.map +1 -0
  237. package/dist/formatter/index.d.ts +11 -0
  238. package/dist/formatter/index.d.ts.map +1 -0
  239. package/dist/formatter/index.js +28 -0
  240. package/dist/formatter/index.js.map +1 -0
  241. package/dist/formatter/parser.d.ts +16 -0
  242. package/dist/formatter/parser.d.ts.map +1 -0
  243. package/dist/formatter/parser.js +23 -0
  244. package/dist/formatter/parser.js.map +1 -0
  245. package/dist/formatter/print/comment-handler.d.ts +7 -0
  246. package/dist/formatter/print/comment-handler.d.ts.map +1 -0
  247. package/dist/formatter/print/comment-handler.js +81 -0
  248. package/dist/formatter/print/comment-handler.js.map +1 -0
  249. package/dist/formatter/print/index.d.ts +3 -0
  250. package/dist/formatter/print/index.d.ts.map +1 -0
  251. package/dist/formatter/print/index.js +3 -0
  252. package/dist/formatter/print/index.js.map +1 -0
  253. package/dist/formatter/print/needs-parens.d.ts +10 -0
  254. package/dist/formatter/print/needs-parens.d.ts.map +1 -0
  255. package/dist/formatter/print/needs-parens.js +27 -0
  256. package/dist/formatter/print/needs-parens.js.map +1 -0
  257. package/dist/formatter/print/printer.d.ts +62 -0
  258. package/dist/formatter/print/printer.d.ts.map +1 -0
  259. package/dist/formatter/print/printer.js +1025 -0
  260. package/dist/formatter/print/printer.js.map +1 -0
  261. package/dist/formatter/print/types.d.ts +9 -0
  262. package/dist/formatter/print/types.d.ts.map +1 -0
  263. package/dist/formatter/print/types.js +2 -0
  264. package/dist/formatter/print/types.js.map +1 -0
  265. package/dist/init/index.d.ts +2 -0
  266. package/dist/init/index.d.ts.map +1 -0
  267. package/dist/init/index.js +2 -0
  268. package/dist/init/index.js.map +1 -0
  269. package/dist/init/init-template.d.ts +45 -0
  270. package/dist/init/init-template.d.ts.map +1 -0
  271. package/dist/init/init-template.js +45 -0
  272. package/dist/init/init-template.js.map +1 -0
  273. package/dist/init/init.d.ts +49 -0
  274. package/dist/init/init.d.ts.map +1 -0
  275. package/dist/init/init.js +224 -0
  276. package/dist/init/init.js.map +1 -0
  277. package/dist/lib/decorators.d.ts +222 -0
  278. package/dist/lib/decorators.d.ts.map +1 -0
  279. package/dist/lib/decorators.js +745 -0
  280. package/dist/lib/decorators.js.map +1 -0
  281. package/dist/lib/service.d.ts +38 -0
  282. package/dist/lib/service.d.ts.map +1 -0
  283. package/dist/lib/service.js +78 -0
  284. package/dist/lib/service.js.map +1 -0
  285. package/dist/manifest.js +4 -0
  286. package/dist/server/completion.d.ts +10 -0
  287. package/dist/server/completion.d.ts.map +1 -0
  288. package/dist/server/completion.js +207 -0
  289. package/dist/server/completion.js.map +1 -0
  290. package/dist/server/index.d.ts +3 -0
  291. package/dist/server/index.d.ts.map +1 -0
  292. package/dist/server/index.js +3 -0
  293. package/dist/server/index.js.map +1 -0
  294. package/dist/server/language-config.d.ts +195 -0
  295. package/dist/server/language-config.d.ts.map +1 -0
  296. package/dist/server/language-config.js +102 -0
  297. package/dist/server/language-config.js.map +1 -0
  298. package/dist/server/server.d.ts +2 -0
  299. package/dist/server/server.d.ts.map +1 -0
  300. package/dist/server/server.js +131 -0
  301. package/dist/server/server.js.map +1 -0
  302. package/dist/server/serverlib.d.ts +72 -0
  303. package/dist/server/serverlib.d.ts.map +1 -0
  304. package/dist/server/serverlib.js +1034 -0
  305. package/dist/server/serverlib.js.map +1 -0
  306. package/dist/server/symbol-structure.d.ts +4 -0
  307. package/dist/server/symbol-structure.d.ts.map +1 -0
  308. package/dist/server/symbol-structure.js +121 -0
  309. package/dist/server/symbol-structure.js.map +1 -0
  310. package/dist/server/tmlanguage.d.ts +3 -0
  311. package/dist/server/tmlanguage.d.ts.map +1 -0
  312. package/dist/server/tmlanguage.js +713 -0
  313. package/dist/server/tmlanguage.js.map +1 -0
  314. package/dist/server/type-details.d.ts +11 -0
  315. package/dist/server/type-details.d.ts.map +1 -0
  316. package/dist/server/type-details.js +72 -0
  317. package/dist/server/type-details.js.map +1 -0
  318. package/dist/server/type-signature.d.ts +2 -0
  319. package/dist/server/type-signature.d.ts.map +1 -0
  320. package/dist/server/type-signature.js +108 -0
  321. package/dist/server/type-signature.js.map +1 -0
  322. package/dist/testing/expect.d.ts +49 -0
  323. package/dist/testing/expect.d.ts.map +1 -0
  324. package/dist/testing/expect.js +83 -0
  325. package/dist/testing/expect.js.map +1 -0
  326. package/dist/testing/index.d.ts +6 -0
  327. package/dist/testing/index.d.ts.map +1 -0
  328. package/dist/testing/index.js +6 -0
  329. package/dist/testing/index.js.map +1 -0
  330. package/dist/testing/test-host.d.ts +14 -0
  331. package/dist/testing/test-host.d.ts.map +1 -0
  332. package/dist/testing/test-host.js +271 -0
  333. package/dist/testing/test-host.js.map +1 -0
  334. package/dist/testing/test-server-host.d.ts +39 -0
  335. package/dist/testing/test-server-host.d.ts.map +1 -0
  336. package/dist/testing/test-server-host.js +112 -0
  337. package/dist/testing/test-server-host.js.map +1 -0
  338. package/dist/testing/test-utils.d.ts +22 -0
  339. package/dist/testing/test-utils.d.ts.map +1 -0
  340. package/dist/testing/test-utils.js +60 -0
  341. package/dist/testing/test-utils.js.map +1 -0
  342. package/dist/testing/types.d.ts +69 -0
  343. package/dist/testing/types.d.ts.map +1 -0
  344. package/dist/testing/types.js +7 -0
  345. package/dist/testing/types.js.map +1 -0
  346. package/dist/typespec.tmLanguage +1760 -0
  347. package/lib/decorators.tsp +420 -0
  348. package/lib/lib.tsp +158 -0
  349. package/lib/main.tsp +4 -0
  350. package/lib/projected-names.tsp +94 -0
  351. package/lib/reflection.tsp +10 -0
  352. package/package.json +119 -0
@@ -0,0 +1,713 @@
1
+ // TextMate-based syntax highlighting is implemented in this file.
2
+ // typespec.tmLanguage is generated by running this script.
3
+ import { writeFile } from "fs/promises";
4
+ import mkdirp from "mkdirp";
5
+ import { resolve } from "path";
6
+ import * as tm from "tmlanguage-generator";
7
+ const meta = tm.meta;
8
+ const identifierStart = "[_$[:alpha:]]";
9
+ // cspell:disable-next-line
10
+ const identifierContinue = "[_$[:alnum:]]";
11
+ const beforeIdentifier = `(?=${identifierStart})`;
12
+ const identifier = `\\b${identifierStart}${identifierContinue}*\\b`;
13
+ const qualifiedIdentifier = `\\b${identifierStart}(${identifierContinue}|\\.${identifierStart})*\\b`;
14
+ const stringPattern = '\\"(?:[^\\"\\\\]|\\\\.)*\\"';
15
+ const modifierKeyword = `\\b(?:extern)\\b`;
16
+ const statementKeyword = `\\b(?:namespace|model|op|using|import|enum|alias|union|interface|dec|fn)\\b`;
17
+ const universalEnd = `(?=,|;|@|\\)|\\}|${modifierKeyword}|${statementKeyword})`;
18
+ const universalEndExceptComma = `(?=;|@|\\)|\\}|${modifierKeyword}|${statementKeyword})`;
19
+ /**
20
+ * Universal end with extra end char: `=`
21
+ */
22
+ const expressionEnd = `(?=,|;|@|\\)|\\}|=|${statementKeyword})`;
23
+ const hexNumber = "\\b(?<!\\$)0(?:x|X)[0-9a-fA-F][0-9a-fA-F_]*(n)?\\b(?!\\$)";
24
+ const binaryNumber = "\\b(?<!\\$)0(?:b|B)[01][01_]*(n)?\\b(?!\\$)";
25
+ const decimalNumber = "(?<!\\$)(?:" +
26
+ "(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|" + // 1.1E+3
27
+ "(?:\\b[0-9][0-9_]*(\\.)[eE][+-]?[0-9][0-9_]*(n)?\\b)|" + // 1.E+3
28
+ "(?:\\B(\\.)[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|" + // .1E+3
29
+ "(?:\\b[0-9][0-9_]*[eE][+-]?[0-9][0-9_]*(n)?\\b)|" + // 1E+3
30
+ "(?:\\b[0-9][0-9_]*(\\.)[0-9][0-9_]*(n)?\\b)|" + // 1.1
31
+ "(?:\\b[0-9][0-9_]*(\\.)(n)?\\B)|" + // 1.
32
+ "(?:\\B(\\.)[0-9][0-9_]*(n)?\\b)|" + // .1
33
+ "(?:\\b[0-9][0-9_]*(n)?\\b(?!\\.))" + // 1
34
+ ")(?!\\$)";
35
+ const anyNumber = `(?:${hexNumber}|${binaryNumber}|${decimalNumber})`;
36
+ const expression = {
37
+ key: "expression",
38
+ patterns: [
39
+ /* placeholder filled later due to cycle*/
40
+ ],
41
+ };
42
+ const statement = {
43
+ key: "statement",
44
+ patterns: [
45
+ /*placeholder filled later due to cycle*/
46
+ ],
47
+ };
48
+ const booleanLiteral = {
49
+ key: "boolean-literal",
50
+ scope: "constant.language.tsp",
51
+ match: `\\b(true|false)\\b`,
52
+ };
53
+ const escapeChar = {
54
+ key: "escape-character",
55
+ scope: "constant.character.escape.tsp",
56
+ match: "\\\\.",
57
+ };
58
+ const stringLiteral = {
59
+ key: "string-literal",
60
+ scope: "string.quoted.double.tsp",
61
+ begin: '"',
62
+ end: '"|$',
63
+ patterns: [escapeChar],
64
+ };
65
+ const tripleQuotedStringLiteral = {
66
+ key: "triple-quoted-string-literal",
67
+ scope: "string.quoted.triple.tsp",
68
+ begin: '"""',
69
+ end: '"""',
70
+ patterns: [escapeChar],
71
+ };
72
+ const punctuationComma = {
73
+ key: "punctuation-comma",
74
+ scope: "punctuation.comma.tsp",
75
+ match: ",",
76
+ };
77
+ const punctuationAccessor = {
78
+ key: "punctuation-accessor",
79
+ scope: "punctuation.accessor.tsp",
80
+ match: "\\.",
81
+ };
82
+ const punctuationSemicolon = {
83
+ key: "punctuation-semicolon",
84
+ scope: "punctuation.terminator.statement.tsp",
85
+ match: ";",
86
+ };
87
+ const operatorAssignment = {
88
+ key: "operator-assignment",
89
+ scope: "keyword.operator.assignment.tsp",
90
+ match: "=",
91
+ };
92
+ const numericLiteral = {
93
+ key: "numeric-literal",
94
+ scope: "constant.numeric.tsp",
95
+ match: anyNumber,
96
+ };
97
+ const lineComment = {
98
+ key: "line-comment",
99
+ scope: "comment.line.double-slash.tsp",
100
+ match: "//.*$",
101
+ };
102
+ const blockComment = {
103
+ key: "block-comment",
104
+ scope: "comment.block.tsp",
105
+ begin: "/\\*",
106
+ end: "\\*/",
107
+ };
108
+ // Tokens that match standing alone in any context: literals and comments
109
+ const token = {
110
+ key: "token",
111
+ patterns: [
112
+ lineComment,
113
+ blockComment,
114
+ // `"""` must come before `"` or first two quotes of `"""` will match as
115
+ // empty string
116
+ tripleQuotedStringLiteral,
117
+ stringLiteral,
118
+ booleanLiteral,
119
+ numericLiteral,
120
+ ],
121
+ };
122
+ const parenthesizedExpression = {
123
+ key: "parenthesized-expression",
124
+ scope: meta,
125
+ begin: "\\(",
126
+ beginCaptures: {
127
+ "0": { scope: "punctuation.parenthesis.open.tsp" },
128
+ },
129
+ end: "\\)",
130
+ endCaptures: {
131
+ "0": { scope: "punctuation.parenthesis.close.tsp" },
132
+ },
133
+ patterns: [expression, punctuationComma],
134
+ };
135
+ const decorator = {
136
+ key: "decorator",
137
+ scope: meta,
138
+ begin: `(@${qualifiedIdentifier})`,
139
+ beginCaptures: {
140
+ "1": { scope: "entity.name.tag.tsp" },
141
+ },
142
+ end: `${beforeIdentifier}|${universalEnd}`,
143
+ patterns: [token, parenthesizedExpression],
144
+ };
145
+ const augmentDecoratorStatement = {
146
+ key: "augment-decorator-statement",
147
+ scope: meta,
148
+ begin: `(@@${qualifiedIdentifier})`,
149
+ beginCaptures: {
150
+ "1": { scope: "entity.name.tag.tsp" },
151
+ },
152
+ end: `${beforeIdentifier}|${universalEnd}`,
153
+ patterns: [token, parenthesizedExpression],
154
+ };
155
+ const identifierExpression = {
156
+ key: "identifier-expression",
157
+ scope: "entity.name.type.tsp",
158
+ match: identifier,
159
+ };
160
+ const typeArguments = {
161
+ key: "type-arguments",
162
+ scope: meta,
163
+ begin: "<",
164
+ beginCaptures: {
165
+ "0": { scope: "punctuation.definition.typeparameters.begin.tsp" },
166
+ },
167
+ end: ">",
168
+ endCaptures: {
169
+ "0": { scope: "punctuation.definition.typeparameters.end.tsp" },
170
+ },
171
+ patterns: [expression, punctuationComma],
172
+ };
173
+ const typeParameterConstraint = {
174
+ key: "type-parameter-constraint",
175
+ scope: meta,
176
+ begin: `extends`,
177
+ beginCaptures: {
178
+ "0": { scope: "keyword.other.tsp" },
179
+ },
180
+ end: `(?=>)|${universalEnd}`,
181
+ patterns: [expression],
182
+ };
183
+ const typeParameterDefault = {
184
+ key: "type-parameter-default",
185
+ scope: meta,
186
+ begin: `=`,
187
+ beginCaptures: {
188
+ "0": { scope: "keyword.operator.assignment.tsp" },
189
+ },
190
+ end: `(?=>)|${universalEnd}`,
191
+ patterns: [expression],
192
+ };
193
+ const typeParameter = {
194
+ key: "type-parameter",
195
+ scope: meta,
196
+ begin: `(${identifier})`,
197
+ beginCaptures: {
198
+ "1": { scope: "entity.name.type.tsp" },
199
+ },
200
+ end: `(?=>)|${universalEnd}`,
201
+ patterns: [typeParameterConstraint, typeParameterDefault],
202
+ };
203
+ const typeParameters = {
204
+ key: "type-parameters",
205
+ scope: meta,
206
+ begin: "<",
207
+ beginCaptures: {
208
+ "0": { scope: "punctuation.definition.typeparameters.begin.tsp" },
209
+ },
210
+ end: ">",
211
+ endCaptures: {
212
+ "0": { scope: "punctuation.definition.typeparameters.end.tsp" },
213
+ },
214
+ patterns: [typeParameter, punctuationComma],
215
+ };
216
+ const tupleExpression = {
217
+ key: "tuple-expression",
218
+ scope: meta,
219
+ begin: "\\[",
220
+ beginCaptures: {
221
+ "0": { scope: "punctuation.squarebracket.open.tsp" },
222
+ },
223
+ end: "\\]",
224
+ endCaptures: {
225
+ "0": { scope: "punctuation.squarebracket.close.tsp" },
226
+ },
227
+ patterns: [expression],
228
+ };
229
+ const typeAnnotation = {
230
+ key: "type-annotation",
231
+ scope: meta,
232
+ begin: "\\s*(\\??)\\s*(:)",
233
+ beginCaptures: {
234
+ "1": { scope: "keyword.operator.optional.tsp" },
235
+ "2": { scope: "keyword.operator.type.annotation.tsp" },
236
+ },
237
+ end: expressionEnd,
238
+ patterns: [expression],
239
+ };
240
+ const modelProperty = {
241
+ key: "model-property",
242
+ scope: meta,
243
+ begin: `(?:(${identifier})|(${stringPattern}))`,
244
+ beginCaptures: {
245
+ "1": { scope: "variable.name.tsp" },
246
+ "2": { scope: "string.quoted.double.tsp" },
247
+ },
248
+ end: universalEnd,
249
+ patterns: [token, typeAnnotation, operatorAssignment, expression],
250
+ };
251
+ const modelSpreadProperty = {
252
+ key: "model-spread-property",
253
+ scope: meta,
254
+ begin: "\\.\\.\\.",
255
+ beginCaptures: {
256
+ "0": { scope: "keyword.operator.spread.tsp" },
257
+ },
258
+ end: universalEnd,
259
+ patterns: [expression],
260
+ };
261
+ const directive = {
262
+ key: "directive",
263
+ scope: meta,
264
+ begin: `\\s*(#${identifier})`,
265
+ beginCaptures: {
266
+ "1": { scope: "keyword.directive.name.tsp" },
267
+ },
268
+ end: `$|${universalEnd}`,
269
+ patterns: [stringLiteral, identifierExpression],
270
+ };
271
+ const modelExpression = {
272
+ key: "model-expression",
273
+ scope: meta,
274
+ begin: "\\{",
275
+ beginCaptures: {
276
+ "0": { scope: "punctuation.curlybrace.open.tsp" },
277
+ },
278
+ end: "\\}",
279
+ endCaptures: {
280
+ "0": { scope: "punctuation.curlybrace.close.tsp" },
281
+ },
282
+ patterns: [
283
+ // modelProperty must come before token or quoted property name will be
284
+ // considered an arbitrarily positioned string literal and not match as part
285
+ // of modelProperty begin.
286
+ modelProperty,
287
+ token,
288
+ directive,
289
+ decorator,
290
+ modelSpreadProperty,
291
+ punctuationSemicolon,
292
+ ],
293
+ };
294
+ const modelHeritage = {
295
+ key: "model-heritage",
296
+ scope: meta,
297
+ begin: "\\b(extends|is)\\b",
298
+ beginCaptures: {
299
+ "1": { scope: "keyword.other.tsp" },
300
+ },
301
+ end: `((?=\\{)|${universalEndExceptComma})`,
302
+ patterns: [expression, punctuationComma],
303
+ };
304
+ const modelStatement = {
305
+ key: "model-statement",
306
+ scope: meta,
307
+ begin: "\\b(model)\\b",
308
+ beginCaptures: {
309
+ "1": { scope: "keyword.other.tsp" },
310
+ },
311
+ end: `(?<=\\})|${universalEnd}`,
312
+ patterns: [
313
+ token,
314
+ typeParameters,
315
+ modelHeritage,
316
+ expression, // enough to match name, type parameters, and body.
317
+ ],
318
+ };
319
+ const scalarExtends = {
320
+ key: "scalar-extends",
321
+ scope: meta,
322
+ begin: "\\b(extends)\\b",
323
+ beginCaptures: {
324
+ "1": { scope: "keyword.other.tsp" },
325
+ },
326
+ end: universalEndExceptComma,
327
+ patterns: [expression, punctuationComma],
328
+ };
329
+ const scalarStatement = {
330
+ key: "scalar-statement",
331
+ scope: meta,
332
+ begin: "\\b(scalar)\\b",
333
+ beginCaptures: {
334
+ "1": { scope: "keyword.other.tsp" },
335
+ },
336
+ end: universalEnd,
337
+ patterns: [
338
+ token,
339
+ typeParameters,
340
+ scalarExtends,
341
+ expression, // enough to match name, type parameters, and body.
342
+ ],
343
+ };
344
+ const enumStatement = {
345
+ key: "enum-statement",
346
+ scope: meta,
347
+ begin: "\\b(enum)\\b",
348
+ beginCaptures: {
349
+ "1": { scope: "keyword.other.tsp" },
350
+ },
351
+ end: `(?<=\\})|${universalEnd}`,
352
+ patterns: [token, expression],
353
+ };
354
+ const unionStatement = {
355
+ key: "union-statement",
356
+ scope: meta,
357
+ begin: "\\b(union)\\b",
358
+ beginCaptures: {
359
+ "1": { scope: "keyword.other.tsp" },
360
+ },
361
+ end: `(?<=\\})|${universalEnd}`,
362
+ patterns: [token, expression],
363
+ };
364
+ const aliasStatement = {
365
+ key: "alias-statement",
366
+ scope: meta,
367
+ begin: "\\b(alias)\\b",
368
+ beginCaptures: {
369
+ "1": { scope: "keyword.other.tsp" },
370
+ },
371
+ end: universalEnd,
372
+ patterns: [typeParameters, operatorAssignment, expression],
373
+ };
374
+ const namespaceName = {
375
+ key: "namespace-name",
376
+ scope: meta,
377
+ begin: beforeIdentifier,
378
+ end: `((?=\\{)|${universalEnd})`,
379
+ patterns: [identifierExpression, punctuationAccessor],
380
+ };
381
+ const namespaceBody = {
382
+ key: "namespace-body",
383
+ scope: meta,
384
+ begin: "\\{",
385
+ beginCaptures: {
386
+ "0": { scope: "punctuation.curlybrace.open.tsp" },
387
+ },
388
+ end: "\\}",
389
+ endCaptures: {
390
+ "0": { scope: "punctuation.curlybrace.close.tsp" },
391
+ },
392
+ patterns: [statement],
393
+ };
394
+ const namespaceStatement = {
395
+ key: "namespace-statement",
396
+ scope: meta,
397
+ begin: "\\b(namespace)\\b",
398
+ beginCaptures: {
399
+ "1": { scope: "keyword.other.tsp" },
400
+ },
401
+ end: `((?<=\\})|${universalEnd})`,
402
+ patterns: [token, namespaceName, namespaceBody],
403
+ };
404
+ const operationParameters = {
405
+ key: "operation-parameters",
406
+ scope: meta,
407
+ begin: "\\(",
408
+ beginCaptures: {
409
+ "0": { scope: "punctuation.parenthesis.open.tsp" },
410
+ },
411
+ end: "\\)",
412
+ endCaptures: {
413
+ "0": { scope: "punctuation.parenthesis.close.tsp" },
414
+ },
415
+ patterns: [token, decorator, modelProperty, modelSpreadProperty, punctuationComma],
416
+ };
417
+ const operationHeritage = {
418
+ key: "operation-heritage",
419
+ scope: meta,
420
+ begin: "\\b(is)\\b",
421
+ beginCaptures: {
422
+ "1": { scope: "keyword.other.tsp" },
423
+ },
424
+ end: universalEnd,
425
+ patterns: [expression],
426
+ };
427
+ const operationSignature = {
428
+ key: "operation-signature",
429
+ patterns: [
430
+ typeParameters,
431
+ operationHeritage,
432
+ operationParameters,
433
+ typeAnnotation, // return type
434
+ ],
435
+ };
436
+ const operationStatement = {
437
+ key: "operation-statement",
438
+ scope: meta,
439
+ begin: `\\b(op)\\b\\s+(${identifier})`,
440
+ beginCaptures: {
441
+ "1": { scope: "keyword.other.tsp" },
442
+ "2": { scope: "entity.name.function.tsp" },
443
+ },
444
+ end: universalEnd,
445
+ patterns: [token, operationSignature],
446
+ };
447
+ const interfaceMember = {
448
+ key: "interface-member",
449
+ scope: meta,
450
+ begin: `(?:\\b(op)\\b\\s+)?(${identifier})`,
451
+ beginCaptures: {
452
+ "1": { scope: "keyword.other.tsp" },
453
+ "2": { scope: "entity.name.function.tsp" },
454
+ },
455
+ end: universalEnd,
456
+ patterns: [token, operationSignature],
457
+ };
458
+ const interfaceHeritage = {
459
+ key: "interface-heritage",
460
+ scope: meta,
461
+ begin: "\\b(extends)\\b",
462
+ beginCaptures: {
463
+ "1": { scope: "keyword.other.tsp" },
464
+ },
465
+ end: `((?=\\{)|${universalEndExceptComma})`,
466
+ patterns: [expression, punctuationComma],
467
+ };
468
+ const interfaceBody = {
469
+ key: "interface-body",
470
+ scope: meta,
471
+ begin: "\\{",
472
+ beginCaptures: {
473
+ "0": { scope: "punctuation.curlybrace.open.tsp" },
474
+ },
475
+ end: "\\}",
476
+ endCaptures: {
477
+ "0": { scope: "punctuation.curlybrace.close.tsp" },
478
+ },
479
+ patterns: [token, directive, decorator, interfaceMember, punctuationSemicolon],
480
+ };
481
+ const interfaceStatement = {
482
+ key: "interface-statement",
483
+ scope: meta,
484
+ begin: "\\b(interface)\\b",
485
+ beginCaptures: {
486
+ "1": { scope: "keyword.other.tsp" },
487
+ },
488
+ end: `(?<=\\})|${universalEnd}`,
489
+ patterns: [
490
+ token,
491
+ interfaceHeritage,
492
+ interfaceBody,
493
+ expression, // enough to match name and type parameters
494
+ ],
495
+ };
496
+ const importStatement = {
497
+ key: "import-statement",
498
+ scope: meta,
499
+ begin: "\\b(import)\\b",
500
+ beginCaptures: {
501
+ "1": { scope: "keyword.other.tsp" },
502
+ },
503
+ end: universalEnd,
504
+ patterns: [token],
505
+ };
506
+ const usingStatement = {
507
+ key: "using-statement",
508
+ scope: meta,
509
+ begin: "\\b(using)\\b",
510
+ beginCaptures: {
511
+ "1": { scope: "keyword.other.tsp" },
512
+ },
513
+ end: universalEnd,
514
+ patterns: [token, identifierExpression],
515
+ };
516
+ const decoratorDeclarationStatement = {
517
+ key: "decorator-declaration-statement",
518
+ scope: meta,
519
+ begin: `(?:(extern)\\s+)?\\b(dec)\\b\\s+(${identifier})`,
520
+ beginCaptures: {
521
+ "1": { scope: "keyword.other.tsp" },
522
+ "2": { scope: "keyword.other.tsp" },
523
+ "3": { scope: "entity.name.function.tsp" },
524
+ },
525
+ end: universalEnd,
526
+ patterns: [token, operationParameters],
527
+ };
528
+ const functionDeclarationStatement = {
529
+ key: "function-declaration-statement",
530
+ scope: meta,
531
+ begin: `(?:(extern)\\s+)?\\b(fn)\\b\\s+(${identifier})`,
532
+ beginCaptures: {
533
+ "1": { scope: "keyword.other.tsp" },
534
+ "2": { scope: "keyword.other.tsp" },
535
+ "3": { scope: "entity.name.function.tsp" },
536
+ },
537
+ end: universalEnd,
538
+ patterns: [token, operationParameters, typeAnnotation],
539
+ };
540
+ const projectionParameter = {
541
+ key: "projection-parameter",
542
+ scope: meta,
543
+ begin: `(${identifier})`,
544
+ beginCaptures: {
545
+ "1": { scope: "variable.name.tsp" },
546
+ },
547
+ end: `(?=\\))|${universalEnd}`,
548
+ patterns: [],
549
+ };
550
+ const projectionParameters = {
551
+ key: "projection-parameters",
552
+ scope: meta,
553
+ begin: "\\(",
554
+ beginCaptures: {
555
+ "0": { scope: "punctuation.parenthesis.open.tsp" },
556
+ },
557
+ end: "\\)",
558
+ endCaptures: {
559
+ "0": { scope: "punctuation.parenthesis.close.tsp" },
560
+ },
561
+ patterns: [token, projectionParameter],
562
+ };
563
+ const projectionExpression = {
564
+ key: "projection-expression",
565
+ patterns: [
566
+ /* placeholder filled later due to cycle*/
567
+ ],
568
+ };
569
+ const projectionBody = {
570
+ key: "projection-body",
571
+ scope: meta,
572
+ begin: "\\{",
573
+ beginCaptures: {
574
+ "0": { scope: "punctuation.curlybrace.open.tsp" },
575
+ },
576
+ end: "\\}",
577
+ endCaptures: {
578
+ "0": { scope: "punctuation.curlybrace.close.tsp" },
579
+ },
580
+ patterns: [projectionExpression, punctuationSemicolon],
581
+ };
582
+ const ifExpression = {
583
+ key: "if-expression",
584
+ scope: meta,
585
+ begin: `\\b(if)\\b`,
586
+ beginCaptures: {
587
+ "1": { scope: "keyword.other.tsp" },
588
+ },
589
+ end: `((?<=\\})|${universalEnd})`,
590
+ patterns: [projectionExpression, projectionBody],
591
+ };
592
+ const elseIfExpression = {
593
+ key: "else-if-expression",
594
+ scope: meta,
595
+ begin: `\\b(else)\\s+(if)\\b`,
596
+ beginCaptures: {
597
+ "1": { scope: "keyword.other.tsp" },
598
+ "2": { scope: "keyword.other.tsp" },
599
+ },
600
+ end: `((?<=\\})|${universalEnd})`,
601
+ patterns: [projectionExpression, projectionBody],
602
+ };
603
+ const elseExpression = {
604
+ key: "else-expression",
605
+ scope: meta,
606
+ begin: `\\b(else)\\b`,
607
+ beginCaptures: {
608
+ "1": { scope: "keyword.other.tsp" },
609
+ },
610
+ end: `((?<=\\})|${universalEnd})`,
611
+ patterns: [projectionExpression, projectionBody],
612
+ };
613
+ const functionCall = {
614
+ key: "function-call",
615
+ scope: meta,
616
+ begin: `(${identifier})\\s*(\\()`,
617
+ beginCaptures: {
618
+ "1": { scope: "entity.name.function.tsp" },
619
+ "2": { scope: "punctuation.parenthesis.open.tsp" },
620
+ },
621
+ end: `\\)`,
622
+ endCaptures: {
623
+ "0": { scope: "punctuation.parenthesis.close.tsp" },
624
+ },
625
+ patterns: [expression],
626
+ };
627
+ projectionExpression.patterns = [elseIfExpression, ifExpression, elseExpression, functionCall];
628
+ const projection = {
629
+ key: "projection",
630
+ scope: meta,
631
+ begin: "(from|to)",
632
+ beginCaptures: {
633
+ "1": { scope: "keyword.other.tsp" },
634
+ },
635
+ end: `((?<=\\})|${universalEnd})`,
636
+ patterns: [projectionParameters, projectionBody],
637
+ };
638
+ const projectionStatementBody = {
639
+ key: "projection-statement-body",
640
+ scope: meta,
641
+ begin: "\\{",
642
+ beginCaptures: {
643
+ "0": { scope: "punctuation.curlybrace.open.tsp" },
644
+ },
645
+ end: "\\}",
646
+ endCaptures: {
647
+ "0": { scope: "punctuation.curlybrace.close.tsp" },
648
+ },
649
+ patterns: [projection],
650
+ };
651
+ const projectionStatement = {
652
+ key: "projection-statement",
653
+ scope: meta,
654
+ begin: `\\b(projection)\\b\\s+(${identifier})(#)(${identifier})`,
655
+ beginCaptures: {
656
+ "1": { scope: "keyword.other.tsp" },
657
+ "2": { scope: "keyword.other.tsp" },
658
+ "3": { scope: "keyword.operator.selector.tsp" },
659
+ "4": { scope: "variable.name.tsp" },
660
+ },
661
+ end: `((?<=\\})|${universalEnd})`,
662
+ patterns: [projectionStatementBody],
663
+ };
664
+ // NOTE: We don't actually classify all the different expression types and their
665
+ // punctuation yet. For now, at least, we only deal with the ones that would
666
+ // break coloring due to breaking out of context inappropriately with parens/
667
+ // braces/brackets that weren't handled with appropriate precedence. The other
668
+ // expressions color acceptably as unclassified punctuation around those we do
669
+ // handle here.
670
+ expression.patterns = [
671
+ token,
672
+ directive,
673
+ parenthesizedExpression,
674
+ typeArguments,
675
+ tupleExpression,
676
+ modelExpression,
677
+ identifierExpression,
678
+ ];
679
+ statement.patterns = [
680
+ token,
681
+ directive,
682
+ augmentDecoratorStatement,
683
+ decorator,
684
+ modelStatement,
685
+ scalarStatement,
686
+ unionStatement,
687
+ interfaceStatement,
688
+ enumStatement,
689
+ aliasStatement,
690
+ namespaceStatement,
691
+ operationStatement,
692
+ importStatement,
693
+ usingStatement,
694
+ decoratorDeclarationStatement,
695
+ functionDeclarationStatement,
696
+ projectionStatement,
697
+ punctuationSemicolon,
698
+ ];
699
+ const grammar = {
700
+ $schema: tm.schema,
701
+ name: "TypeSpec",
702
+ scopeName: "source.tsp",
703
+ fileTypes: [".tsp"],
704
+ patterns: [statement],
705
+ };
706
+ export async function main() {
707
+ const plist = await tm.emitPList(grammar, {
708
+ errorSourceFilePath: resolve("./src/tmlanguage.ts"),
709
+ });
710
+ await mkdirp("./dist");
711
+ await writeFile("./dist/typespec.tmLanguage", plist);
712
+ }
713
+ //# sourceMappingURL=tmlanguage.js.map