crystal.json 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. {
  2. "aliases": [
  3. "cr"
  4. ],
  5. "lexemes": "[a-zA-Z_]\\w*[!?=]?",
  6. "keywords": {
  7. "keyword": "abstract alias annotation as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until verbatim when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",
  8. "literal": "false nil true"
  9. },
  10. "contains": [
  11. {
  12. "className": "template-variable",
  13. "variants": [
  14. {
  15. "begin": "\\{\\{",
  16. "end": "\\}\\}"
  17. },
  18. {
  19. "begin": "\\{%",
  20. "end": "%\\}"
  21. }
  22. ],
  23. "keywords": {
  24. "$ref": "#keywords"
  25. },
  26. "contains": [
  27. {
  28. "className": "string",
  29. "contains": [
  30. {
  31. "begin": "\\\\[\\s\\S]",
  32. "relevance": 0
  33. },
  34. {
  35. "className": "subst",
  36. "begin": "#{",
  37. "end": "}",
  38. "keywords": {
  39. "$ref": "#keywords"
  40. },
  41. "contains": {
  42. "$ref": "#contains"
  43. }
  44. }
  45. ],
  46. "variants": [
  47. {
  48. "begin": "'",
  49. "end": "'"
  50. },
  51. {
  52. "begin": "\"",
  53. "end": "\""
  54. },
  55. {
  56. "begin": "`",
  57. "end": "`"
  58. },
  59. {
  60. "begin": "%[Qwi]?\\(",
  61. "end": "\\)",
  62. "contains": [
  63. {
  64. "begin": "\\(",
  65. "end": "\\)",
  66. "contains": {
  67. "$ref": "#contains.0.contains.0.variants.3.contains"
  68. }
  69. }
  70. ]
  71. },
  72. {
  73. "begin": "%[Qwi]?\\[",
  74. "end": "\\]",
  75. "contains": [
  76. {
  77. "begin": "\\[",
  78. "end": "\\]",
  79. "contains": {
  80. "$ref": "#contains.0.contains.0.variants.4.contains"
  81. }
  82. }
  83. ]
  84. },
  85. {
  86. "begin": "%[Qwi]?{",
  87. "end": "}",
  88. "contains": [
  89. {
  90. "begin": "{",
  91. "end": "}",
  92. "contains": {
  93. "$ref": "#contains.0.contains.0.variants.5.contains"
  94. }
  95. }
  96. ]
  97. },
  98. {
  99. "begin": "%[Qwi]?<",
  100. "end": ">",
  101. "contains": [
  102. {
  103. "begin": "<",
  104. "end": ">",
  105. "contains": {
  106. "$ref": "#contains.0.contains.0.variants.6.contains"
  107. }
  108. }
  109. ]
  110. },
  111. {
  112. "begin": "%[Qwi]?\\|",
  113. "end": "\\|"
  114. },
  115. {
  116. "begin": "<<-\\w+$",
  117. "end": "^\\s*\\w+$"
  118. }
  119. ],
  120. "relevance": 0
  121. },
  122. {
  123. "className": "string",
  124. "variants": [
  125. {
  126. "begin": "%q\\(",
  127. "end": "\\)",
  128. "contains": [
  129. {
  130. "begin": "\\(",
  131. "end": "\\)",
  132. "contains": {
  133. "$ref": "#contains.0.contains.1.variants.0.contains"
  134. }
  135. }
  136. ]
  137. },
  138. {
  139. "begin": "%q\\[",
  140. "end": "\\]",
  141. "contains": [
  142. {
  143. "begin": "\\[",
  144. "end": "\\]",
  145. "contains": {
  146. "$ref": "#contains.0.contains.1.variants.1.contains"
  147. }
  148. }
  149. ]
  150. },
  151. {
  152. "begin": "%q{",
  153. "end": "}",
  154. "contains": [
  155. {
  156. "begin": "{",
  157. "end": "}",
  158. "contains": {
  159. "$ref": "#contains.0.contains.1.variants.2.contains"
  160. }
  161. }
  162. ]
  163. },
  164. {
  165. "begin": "%q<",
  166. "end": ">",
  167. "contains": [
  168. {
  169. "begin": "<",
  170. "end": ">",
  171. "contains": {
  172. "$ref": "#contains.0.contains.1.variants.3.contains"
  173. }
  174. }
  175. ]
  176. },
  177. {
  178. "begin": "%q\\|",
  179. "end": "\\|"
  180. },
  181. {
  182. "begin": "<<-'\\w+'$",
  183. "end": "^\\s*\\w+$"
  184. }
  185. ],
  186. "relevance": 0
  187. },
  188. {
  189. "className": "regexp",
  190. "contains": [
  191. {
  192. "$ref": "#contains.0.contains.0.contains.0"
  193. },
  194. {
  195. "$ref": "#contains.0.contains.0.contains.1"
  196. }
  197. ],
  198. "variants": [
  199. {
  200. "begin": "%r\\(",
  201. "end": "\\)",
  202. "contains": [
  203. {
  204. "begin": "\\(",
  205. "end": "\\)",
  206. "contains": {
  207. "$ref": "#contains.0.contains.2.variants.0.contains"
  208. }
  209. }
  210. ]
  211. },
  212. {
  213. "begin": "%r\\[",
  214. "end": "\\]",
  215. "contains": [
  216. {
  217. "begin": "\\[",
  218. "end": "\\]",
  219. "contains": {
  220. "$ref": "#contains.0.contains.2.variants.1.contains"
  221. }
  222. }
  223. ]
  224. },
  225. {
  226. "begin": "%r{",
  227. "end": "}",
  228. "contains": [
  229. {
  230. "begin": "{",
  231. "end": "}",
  232. "contains": {
  233. "$ref": "#contains.0.contains.2.variants.2.contains"
  234. }
  235. }
  236. ]
  237. },
  238. {
  239. "begin": "%r<",
  240. "end": ">",
  241. "contains": [
  242. {
  243. "begin": "<",
  244. "end": ">",
  245. "contains": {
  246. "$ref": "#contains.0.contains.2.variants.3.contains"
  247. }
  248. }
  249. ]
  250. },
  251. {
  252. "begin": "%r\\|",
  253. "end": "\\|"
  254. }
  255. ],
  256. "relevance": 0
  257. },
  258. {
  259. "begin": "(?!%})(!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|\/=|\/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~|\\n|\\b(case|if|select|unless|until|when|while)\\b)\\s*",
  260. "keywords": "case if select unless until when while",
  261. "contains": [
  262. {
  263. "className": "regexp",
  264. "contains": [
  265. {
  266. "$ref": "#contains.0.contains.0.contains.0"
  267. },
  268. {
  269. "$ref": "#contains.0.contains.0.contains.1"
  270. }
  271. ],
  272. "variants": [
  273. {
  274. "begin": "\/\/[a-z]*",
  275. "relevance": 0
  276. },
  277. {
  278. "begin": "\/(?!\\\/)",
  279. "end": "\/[a-z]*"
  280. }
  281. ]
  282. }
  283. ],
  284. "relevance": 0
  285. },
  286. {
  287. "className": "meta",
  288. "begin": "@\\[",
  289. "end": "\\]",
  290. "contains": [
  291. {
  292. "className": "meta-string",
  293. "begin": "\"",
  294. "end": "\"",
  295. "illegal": "\\n",
  296. "contains": [
  297. {
  298. "$ref": "#contains.0.contains.0.contains.0"
  299. }
  300. ]
  301. }
  302. ]
  303. },
  304. {
  305. "className": "comment",
  306. "begin": "#",
  307. "end": "$",
  308. "contains": [
  309. {
  310. "begin": "\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b"
  311. },
  312. {
  313. "className": "doctag",
  314. "begin": "(?:TODO|FIXME|NOTE|BUG|XXX):",
  315. "relevance": 0
  316. }
  317. ]
  318. },
  319. {
  320. "className": "class",
  321. "beginKeywords": "class module struct",
  322. "end": "$|;",
  323. "illegal": "=",
  324. "contains": [
  325. {
  326. "$ref": "#contains.0.contains.5"
  327. },
  328. {
  329. "className": "title",
  330. "begin": "[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",
  331. "relevance": 0
  332. },
  333. {
  334. "begin": "<"
  335. }
  336. ]
  337. },
  338. {
  339. "className": "class",
  340. "beginKeywords": "lib enum union",
  341. "end": "$|;",
  342. "illegal": "=",
  343. "contains": [
  344. {
  345. "$ref": "#contains.0.contains.5"
  346. },
  347. {
  348. "className": "title",
  349. "begin": "[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",
  350. "relevance": 0
  351. }
  352. ],
  353. "relevance": 10
  354. },
  355. {
  356. "beginKeywords": "annotation",
  357. "end": "$|;",
  358. "illegal": "=",
  359. "contains": [
  360. {
  361. "$ref": "#contains.0.contains.5"
  362. },
  363. {
  364. "className": "title",
  365. "begin": "[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",
  366. "relevance": 0
  367. }
  368. ],
  369. "relevance": 10
  370. },
  371. {
  372. "className": "function",
  373. "beginKeywords": "def",
  374. "end": "\\B\\b",
  375. "contains": [
  376. {
  377. "className": "title",
  378. "begin": "[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-\/+%^&*~|]|\/\/|\/\/=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",
  379. "relevance": 0,
  380. "endsParent": true
  381. }
  382. ]
  383. },
  384. {
  385. "className": "function",
  386. "beginKeywords": "fun macro",
  387. "end": "\\B\\b",
  388. "contains": [
  389. {
  390. "className": "title",
  391. "begin": "[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-\/+%^&*~|]|\/\/|\/\/=|&[-+*]=?|&\\*\\*|\\[\\][=?]?",
  392. "relevance": 0,
  393. "endsParent": true
  394. }
  395. ],
  396. "relevance": 5
  397. },
  398. {
  399. "className": "symbol",
  400. "begin": "[a-zA-Z_]\\w*(\\!|\\?)?:",
  401. "relevance": 0
  402. },
  403. {
  404. "className": "symbol",
  405. "begin": ":",
  406. "contains": [
  407. {
  408. "$ref": "#contains.0.contains.0"
  409. },
  410. {
  411. "begin": "[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|[=!]~|===?|<=>|[<>]=?|\\*\\*|[-\/+%^&*~|]|\/\/|\/\/=|&[-+*]=?|&\\*\\*|\\[\\][=?]?"
  412. }
  413. ],
  414. "relevance": 0
  415. },
  416. {
  417. "className": "number",
  418. "variants": [
  419. {
  420. "begin": "\\b0b([01_]+)(_*[ui](8|16|32|64|128))?"
  421. },
  422. {
  423. "begin": "\\b0o([0-7_]+)(_*[ui](8|16|32|64|128))?"
  424. },
  425. {
  426. "begin": "\\b0x([A-Fa-f0-9_]+)(_*[ui](8|16|32|64|128))?"
  427. },
  428. {
  429. "begin": "\\b([1-9][0-9_]*[0-9]|[0-9])(\\.[0-9][0-9_]*)?([eE]_*[-+]?[0-9_]*)?(_*f(32|64))?(?!_)"
  430. },
  431. {
  432. "begin": "\\b([1-9][0-9_]*|0)(_*[ui](8|16|32|64|128))?"
  433. }
  434. ],
  435. "relevance": 0
  436. }
  437. ]
  438. },
  439. {
  440. "$ref": "#contains.0.contains.0"
  441. },
  442. {
  443. "$ref": "#contains.0.contains.1"
  444. },
  445. {
  446. "$ref": "#contains.0.contains.2"
  447. },
  448. {
  449. "$ref": "#contains.0.contains.3"
  450. },
  451. {
  452. "$ref": "#contains.0.contains.4"
  453. },
  454. {
  455. "$ref": "#contains.0.contains.5"
  456. },
  457. {
  458. "$ref": "#contains.0.contains.6"
  459. },
  460. {
  461. "$ref": "#contains.0.contains.7"
  462. },
  463. {
  464. "$ref": "#contains.0.contains.8"
  465. },
  466. {
  467. "$ref": "#contains.0.contains.9"
  468. },
  469. {
  470. "$ref": "#contains.0.contains.10"
  471. },
  472. {
  473. "$ref": "#contains.0.contains.11"
  474. },
  475. {
  476. "$ref": "#contains.0.contains.12"
  477. },
  478. {
  479. "$ref": "#contains.0.contains.13"
  480. }
  481. ]
  482. }