github-linguist 5.3.3 → 6.0.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 (460) hide show
  1. checksums.yaml +4 -4
  2. data/bin/git-linguist +5 -2
  3. data/ext/linguist/linguist.c +18 -7
  4. data/grammars/annotation.liquidhaskell.haskell.json +969 -862
  5. data/grammars/config.xcompose.json +22 -25
  6. data/grammars/file.lasso.json +296 -309
  7. data/grammars/hint.haskell.json +867 -766
  8. data/grammars/hint.message.haskell.json +867 -766
  9. data/grammars/hint.type.haskell.json +867 -766
  10. data/grammars/objdump.x86asm.json +20 -24
  11. data/grammars/source.Kotlin.json +220 -225
  12. data/grammars/source.LS.json +36 -55
  13. data/grammars/source.MCPOST.json +24 -38
  14. data/grammars/source.MOD.json +26 -41
  15. data/grammars/source.SASLog.json +9 -16
  16. data/grammars/source.abap.json +48 -56
  17. data/grammars/source.abl.json +8 -14
  18. data/grammars/source.abnf.json +88 -98
  19. data/grammars/source.actionscript.3.json +398 -429
  20. data/grammars/source.acucobol.json +5 -8
  21. data/grammars/source.ada.json +46 -53
  22. data/grammars/source.afm.json +548 -554
  23. data/grammars/source.agc.json +34 -37
  24. data/grammars/source.agda.json +79 -91
  25. data/grammars/source.ahk.json +62 -66
  26. data/grammars/source.alloy.json +16 -20
  27. data/grammars/source.ampl.json +41 -47
  28. data/grammars/source.angelscript.json +71 -80
  29. data/grammars/source.antlr.json +131 -136
  30. data/grammars/source.apache-config.json +93 -99
  31. data/grammars/source.apache-config.mod_perl.json +19 -24
  32. data/grammars/source.apl.json +1038 -1029
  33. data/grammars/source.applescript.json +501 -523
  34. data/grammars/source.apt.json +9 -16
  35. data/grammars/source.asn.json +27 -31
  36. data/grammars/source.asp.json +61 -67
  37. data/grammars/source.aspectj.json +385 -391
  38. data/grammars/source.assembly.json +49 -55
  39. data/grammars/source.ats.json +45 -121
  40. data/grammars/source.autoit.json +64 -69
  41. data/grammars/source.awk.json +172 -176
  42. data/grammars/source.ballerina.json +48 -395
  43. data/grammars/source.batchfile.json +269 -269
  44. data/grammars/source.befunge.json +17 -21
  45. data/grammars/source.bf.json +5 -11
  46. data/grammars/source.bison.json +10 -14
  47. data/grammars/source.blitzmax.json +300 -305
  48. data/grammars/source.boo.json +189 -193
  49. data/grammars/source.brightauthorproject.json +8 -13
  50. data/grammars/source.brightscript.json +37 -47
  51. data/grammars/source.bro.json +134 -140
  52. data/grammars/source.bsl.json +152 -193
  53. data/grammars/source.bsv.json +96 -102
  54. data/grammars/source.c++.json +176 -193
  55. data/grammars/source.c++.qt.json +13 -21
  56. data/grammars/source.c.ec.json +15 -21
  57. data/grammars/source.c.json +237 -251
  58. data/grammars/source.c.platform.json +153 -159
  59. data/grammars/source.c2hs.json +3 -6
  60. data/grammars/source.cabal.json +17 -20
  61. data/grammars/source.cache.cmake.json +18 -23
  62. data/grammars/source.cake.json +4 -7
  63. data/grammars/source.camlp4.ocaml.json +24 -27
  64. data/grammars/source.capnp.json +33 -38
  65. data/grammars/source.ceylon.json +44 -50
  66. data/grammars/source.cfscript.cfc.json +78 -86
  67. data/grammars/source.cfscript.json +513 -520
  68. data/grammars/source.changelogs.rpm-spec.json +8 -16
  69. data/grammars/source.chapel.json +109 -87
  70. data/grammars/source.cirru.json +25 -30
  71. data/grammars/source.clarion.json +41 -54
  72. data/grammars/source.clean.json +90 -95
  73. data/grammars/source.click.json +25 -28
  74. data/grammars/source.clips.json +10 -23
  75. data/grammars/source.clojure.json +151 -168
  76. data/grammars/source.cm.json +14 -19
  77. data/grammars/source.cmake.json +53 -61
  78. data/grammars/source.cobol.json +165 -180
  79. data/grammars/source.coffee.json +454 -462
  80. data/grammars/source.cool.json +36 -43
  81. data/grammars/source.coq.json +17 -21
  82. data/grammars/source.crystal.json +889 -983
  83. data/grammars/source.cs.json +739 -740
  84. data/grammars/source.csound-document.json +69 -73
  85. data/grammars/source.csound-score.json +52 -55
  86. data/grammars/source.csound.json +167 -171
  87. data/grammars/source.css.json +683 -688
  88. data/grammars/source.css.less.json +211 -511
  89. data/grammars/source.css.mss.json +94 -101
  90. data/grammars/source.css.postcss.sugarss.json +260 -0
  91. data/grammars/source.csx.json +4 -7
  92. data/grammars/source.cuda-c++.json +47 -81
  93. data/grammars/source.cwl.json +103 -0
  94. data/grammars/source.cython.json +536 -582
  95. data/grammars/source.d.json +243 -252
  96. data/grammars/source.dart.json +161 -166
  97. data/grammars/source.data-weave.json +901 -905
  98. data/grammars/source.desktop.json +29 -33
  99. data/grammars/source.diff.json +43 -52
  100. data/grammars/source.disasm.json +15 -16
  101. data/grammars/source.ditroff.desc.json +73 -84
  102. data/grammars/source.ditroff.json +60 -61
  103. data/grammars/source.dm.json +202 -213
  104. data/grammars/source.dmf.json +44 -47
  105. data/grammars/source.dockerfile.json +29 -34
  106. data/grammars/source.dot.json +46 -55
  107. data/grammars/source.dylan.json +63 -68
  108. data/grammars/source.ebnf.json +55 -62
  109. data/grammars/source.eiffel.json +57 -62
  110. data/grammars/source.elixir.json +321 -366
  111. data/grammars/source.emacs.lisp.json +458 -249
  112. data/grammars/source.erazor.json +49 -57
  113. data/grammars/source.erlang.json +508 -515
  114. data/grammars/source.essl.json +17 -30
  115. data/grammars/source.factor.json +85 -91
  116. data/grammars/source.fan.json +92 -96
  117. data/grammars/source.fancy.json +93 -118
  118. data/grammars/source.fish.json +74 -98
  119. data/grammars/source.fontforge.json +142 -146
  120. data/grammars/source.forth.json +42 -57
  121. data/grammars/source.fortran.json +193 -231
  122. data/grammars/source.fortran.modern.json +77 -103
  123. data/grammars/source.fsharp.fsi.json +1 -6
  124. data/grammars/source.fsharp.fsl.json +1 -6
  125. data/grammars/source.fsharp.fsx.json +1 -6
  126. data/grammars/source.fsharp.json +148 -153
  127. data/grammars/source.gap.json +60 -70
  128. data/grammars/source.gcode.json +9 -16
  129. data/grammars/source.gdb.json +63 -79
  130. data/grammars/source.gdb.session.json +27 -28
  131. data/grammars/source.gdbregs.json +7 -8
  132. data/grammars/source.gdscript.json +92 -96
  133. data/grammars/source.gerber.json +38 -56
  134. data/grammars/source.gfm.json +447 -462
  135. data/grammars/source.glsl.json +58 -83
  136. data/grammars/source.gn.json +188 -193
  137. data/grammars/source.gnuplot.json +104 -120
  138. data/grammars/source.go.json +169 -181
  139. data/grammars/source.golo.json +82 -87
  140. data/grammars/source.gosu.2.json +58 -68
  141. data/grammars/source.grace.json +266 -270
  142. data/grammars/source.graphql.json +586 -596
  143. data/grammars/source.groovy.gradle.json +18 -22
  144. data/grammars/source.groovy.json +422 -433
  145. data/grammars/source.harbour.json +129 -173
  146. data/grammars/source.haskell.json +871 -772
  147. data/grammars/source.haxe.2.json +402 -413
  148. data/grammars/source.hlsl.json +6 -16
  149. data/grammars/source.hsc2hs.json +1 -4
  150. data/grammars/source.hsig.json +871 -770
  151. data/grammars/source.hss.1.json +122 -144
  152. data/grammars/source.httpspec.json +119 -123
  153. data/grammars/source.hxml.json +8 -15
  154. data/grammars/source.ideal.json +125 -125
  155. data/grammars/source.idl-dlm.json +25 -32
  156. data/grammars/source.idl.json +59 -80
  157. data/grammars/source.idris.json +171 -185
  158. data/grammars/source.inform7.json +117 -121
  159. data/grammars/source.ini.json +37 -43
  160. data/grammars/source.io.json +65 -73
  161. data/grammars/source.ioke.json +72 -78
  162. data/grammars/source.isabelle.root.json +26 -30
  163. data/grammars/source.isabelle.theory.json +46 -50
  164. data/grammars/source.j.json +18 -21
  165. data/grammars/source.jasmin.json +45 -50
  166. data/grammars/source.java-properties.json +31 -41
  167. data/grammars/source.java.json +333 -342
  168. data/grammars/source.jcl.json +15 -18
  169. data/grammars/source.jflex.json +166 -172
  170. data/grammars/source.jison.json +331 -334
  171. data/grammars/source.jisonlex-injection.json +1 -2
  172. data/grammars/source.jisonlex.json +148 -151
  173. data/grammars/source.jolie.json +37 -43
  174. data/grammars/source.jq.json +80 -87
  175. data/grammars/source.js.json +798 -818
  176. data/grammars/source.js.jsx.json +2115 -2225
  177. data/grammars/source.js.objj.json +167 -172
  178. data/grammars/source.js.regexp.json +50 -50
  179. data/grammars/source.js.regexp.replacement.json +7 -7
  180. data/grammars/source.jsdoc.json +94 -94
  181. data/grammars/source.json.json +61 -71
  182. data/grammars/source.julia.console.json +5 -6
  183. data/grammars/source.julia.json +237 -234
  184. data/grammars/source.lean.json +55 -67
  185. data/grammars/source.lid.json +6 -10
  186. data/grammars/source.lilypond.json +181 -195
  187. data/grammars/source.lisp.json +40 -50
  188. data/grammars/source.litcoffee.json +169 -183
  189. data/grammars/source.livescript.json +207 -220
  190. data/grammars/source.llvm.json +28 -38
  191. data/grammars/source.logos.json +7 -14
  192. data/grammars/source.logtalk.json +136 -141
  193. data/grammars/source.loomscript.json +77 -83
  194. data/grammars/source.lsl.json +90 -106
  195. data/grammars/source.lua.json +100 -109
  196. data/grammars/source.makefile.json +181 -188
  197. data/grammars/source.makegen.json +3 -7
  198. data/grammars/source.mask.json +260 -265
  199. data/grammars/source.mata.json +38 -46
  200. data/grammars/source.mathematica.json +155 -167
  201. data/grammars/source.matlab.json +407 -684
  202. data/grammars/source.maxscript.json +293 -281
  203. data/grammars/source.mercury.json +179 -184
  204. data/grammars/source.meson.json +52 -58
  205. data/grammars/source.meta-info.json +64 -74
  206. data/grammars/source.ml.json +107 -113
  207. data/grammars/source.modelica.json +51 -59
  208. data/grammars/source.modula2.json +33 -42
  209. data/grammars/source.monkey.json +234 -241
  210. data/grammars/source.moonscript.json +51 -56
  211. data/grammars/source.mql5.json +74 -101
  212. data/grammars/source.mupad.json +30 -72
  213. data/grammars/source.ncl.json +1 -14
  214. data/grammars/source.ne.json +39 -42
  215. data/grammars/source.nemerle.json +58 -63
  216. data/grammars/source.nesc.json +9 -15
  217. data/grammars/source.netlinx.erb.json +13 -25
  218. data/grammars/source.netlinx.json +231 -292
  219. data/grammars/source.nextflow-groovy.json +1360 -0
  220. data/grammars/source.nextflow.json +74 -0
  221. data/grammars/source.nginx.json +274 -287
  222. data/grammars/source.nim.json +442 -483
  223. data/grammars/source.nim_filter.json +6 -26
  224. data/grammars/source.nimcfg.json +38 -51
  225. data/grammars/source.ninja.json +64 -70
  226. data/grammars/source.nit.json +60 -64
  227. data/grammars/source.nix.json +269 -273
  228. data/grammars/source.nmml.json +31 -37
  229. data/grammars/source.nsis.json +66 -72
  230. data/grammars/source.nu.json +129 -139
  231. data/grammars/source.nut.json +129 -133
  232. data/grammars/source.objc++.json +3 -10
  233. data/grammars/source.objc.json +303 -314
  234. data/grammars/source.objc.platform.json +145 -151
  235. data/grammars/source.ocaml.json +506 -514
  236. data/grammars/source.ocamllex.json +108 -115
  237. data/grammars/source.ocamlyacc.json +116 -123
  238. data/grammars/source.ooc.json +148 -155
  239. data/grammars/source.opa.json +39 -49
  240. data/grammars/source.opal.json +84 -89
  241. data/grammars/source.opalsysdefs.json +9 -13
  242. data/grammars/source.opencobol.json +22 -25
  243. data/grammars/source.opentype.json +148 -152
  244. data/grammars/source.ox.json +36 -44
  245. data/grammars/source.oz.json +31 -38
  246. data/grammars/source.p4.json +49 -59
  247. data/grammars/source.pan.json +273 -278
  248. data/grammars/source.papyrus.skyrim.json +705 -781
  249. data/grammars/source.parrot.pir.json +59 -65
  250. data/grammars/source.pascal.json +54 -61
  251. data/grammars/source.pawn.json +835 -849
  252. data/grammars/source.pcb.board.json +153 -158
  253. data/grammars/source.pcb.schematic.json +134 -138
  254. data/grammars/source.pcb.sexp.json +64 -74
  255. data/grammars/source.pep8.json +28 -32
  256. data/grammars/source.perl.6.json +83 -92
  257. data/grammars/source.perl.json +711 -737
  258. data/grammars/source.perl6fe.json +1204 -1218
  259. data/grammars/source.php.zephir.json +80 -89
  260. data/grammars/source.pic.json +137 -142
  261. data/grammars/source.pig_latin.json +76 -80
  262. data/grammars/source.pike.json +23 -36
  263. data/grammars/source.po.json +74 -84
  264. data/grammars/source.pogoscript.json +23 -29
  265. data/grammars/source.pony.json +98 -108
  266. data/grammars/source.postcss.json +370 -0
  267. data/grammars/source.postscript.json +88 -97
  268. data/grammars/source.pov-ray sdl.json +36 -42
  269. data/grammars/source.powershell.json +175 -197
  270. data/grammars/source.processing.json +236 -249
  271. data/grammars/source.prolog.eclipse.json +33 -38
  272. data/grammars/source.prolog.json +66 -72
  273. data/grammars/source.protobuf.json +88 -94
  274. data/grammars/source.puppet.json +144 -151
  275. data/grammars/source.purescript.json +268 -289
  276. data/grammars/source.pyjade.json +256 -281
  277. data/grammars/source.python.django.json +13 -18
  278. data/grammars/source.python.json +3319 -3367
  279. data/grammars/source.python.salt.json +3 -7
  280. data/grammars/source.qmake.json +83 -90
  281. data/grammars/source.qml.json +57 -78
  282. data/grammars/source.quoting.perl6fe.json +666 -669
  283. data/grammars/source.r.json +75 -84
  284. data/grammars/source.racket.json +17 -38
  285. data/grammars/source.rascal.json +77 -80
  286. data/grammars/source.reason.hover.type.json +1 -1
  287. data/grammars/source.reason.json +1025 -1080
  288. data/grammars/source.rebol.json +167 -177
  289. data/grammars/source.red.json +169 -177
  290. data/grammars/source.regexp.babel.json +74 -77
  291. data/grammars/source.regexp.extended.json +4 -5
  292. data/grammars/source.regexp.json +260 -264
  293. data/grammars/source.regexp.perl6fe.json +108 -111
  294. data/grammars/source.regexp.python.json +210 -215
  295. data/grammars/source.regexp.spin.json +63 -72
  296. data/grammars/source.renpy.json +617 -687
  297. data/grammars/source.rexx.json +25 -32
  298. data/grammars/source.ring.json +84 -114
  299. data/grammars/source.rpm-spec.json +392 -401
  300. data/grammars/source.ruby.gemfile.json +9 -12
  301. data/grammars/source.ruby.json +862 -952
  302. data/grammars/source.ruby.rspec.cucumber.steps.json +90 -103
  303. data/grammars/source.rust.json +223 -281
  304. data/grammars/source.sas.json +88 -105
  305. data/grammars/source.sass.json +100 -108
  306. data/grammars/source.sbt.json +16 -23
  307. data/grammars/source.scad.json +60 -67
  308. data/grammars/source.scala.json +215 -228
  309. data/grammars/source.scaml.json +120 -135
  310. data/grammars/source.scheme.json +119 -136
  311. data/grammars/source.scilab.json +40 -47
  312. data/grammars/source.scss.json +369 -403
  313. data/grammars/source.sdbl.json +14 -25
  314. data/grammars/source.shaderlab.json +24 -27
  315. data/grammars/source.shell.json +409 -440
  316. data/grammars/source.shen.json +75 -94
  317. data/grammars/source.smali.json +232 -293
  318. data/grammars/source.smalltalk.json +60 -75
  319. data/grammars/source.smt.json +67 -82
  320. data/grammars/source.solidity.json +35 -54
  321. data/grammars/source.sp.json +40 -45
  322. data/grammars/source.sparql.json +3 -8
  323. data/grammars/source.spin.json +277 -297
  324. data/grammars/source.sqf.json +34 -44
  325. data/grammars/source.sql.json +142 -156
  326. data/grammars/source.stan.json +201 -160
  327. data/grammars/source.stata.json +57 -68
  328. data/grammars/source.strings.json +26 -30
  329. data/grammars/source.stylus.json +558 -565
  330. data/grammars/source.supercollider.json +33 -40
  331. data/grammars/source.swift.json +999 -1077
  332. data/grammars/source.systemverilog.json +351 -365
  333. data/grammars/source.tcl.json +77 -94
  334. data/grammars/source.tea.json +61 -67
  335. data/grammars/source.terra.json +25 -32
  336. data/grammars/source.terraform.json +68 -88
  337. data/grammars/source.thrift.json +300 -306
  338. data/grammars/source.tl.json +112 -117
  339. data/grammars/source.tla.json +65 -69
  340. data/grammars/source.toc.json +21 -25
  341. data/grammars/source.toml.json +117 -122
  342. data/grammars/source.ts.json +2838 -2774
  343. data/grammars/source.tsx.json +180 -184
  344. data/grammars/source.turing.json +970 -974
  345. data/grammars/source.turtle.json +124 -140
  346. data/grammars/source.txl.json +23 -37
  347. data/grammars/source.ucfconstraints.json +16 -21
  348. data/grammars/source.ur.json +15 -27
  349. data/grammars/source.vala.json +221 -235
  350. data/grammars/source.varnish.vcl.json +117 -129
  351. data/grammars/source.vbnet.json +69 -106
  352. data/grammars/source.verilog.json +101 -107
  353. data/grammars/source.vhdl.json +437 -445
  354. data/grammars/source.viml.json +540 -550
  355. data/grammars/source.wavefront.mtl.json +274 -277
  356. data/grammars/source.wavefront.obj.json +781 -784
  357. data/grammars/source.wdl.json +66 -46
  358. data/grammars/source.webassembly.json +97 -102
  359. data/grammars/source.webidl.json +311 -326
  360. data/grammars/source.x10.json +28 -32
  361. data/grammars/source.x86asm.json +21 -26
  362. data/grammars/source.xc.json +164 -172
  363. data/grammars/source.xq.json +81 -92
  364. data/grammars/source.xtend.json +199 -208
  365. data/grammars/source.yaml-ext.json +118 -124
  366. data/grammars/source.yaml.json +155 -174
  367. data/grammars/source.yaml.salt.json +113 -116
  368. data/grammars/source.yang.json +10 -13
  369. data/grammars/source.yara.json +98 -0
  370. data/grammars/text.bibtex.json +95 -100
  371. data/grammars/text.cfml.basic.json +403 -404
  372. data/grammars/text.elixir.json +18 -23
  373. data/grammars/text.error-list.json +15 -16
  374. data/grammars/text.find-refs.json +487 -488
  375. data/grammars/text.gherkin.feature.json +45 -53
  376. data/grammars/text.haml.json +176 -189
  377. data/grammars/text.hamlc.json +82 -88
  378. data/grammars/text.html.abl.json +16 -21
  379. data/grammars/text.html.asciidoc.json +139 -153
  380. data/grammars/text.html.asdoc.json +145 -155
  381. data/grammars/text.html.asp.json +23 -28
  382. data/grammars/text.html.basic.json +323 -338
  383. data/grammars/text.html.cfm.json +316 -325
  384. data/grammars/text.html.creole.json +177 -189
  385. data/grammars/text.html.django.json +27 -33
  386. data/grammars/text.html.ecr.json +21 -25
  387. data/grammars/text.html.elixir.json +3 -9
  388. data/grammars/text.html.erb.json +81 -85
  389. data/grammars/text.html.erlang.yaws.json +24 -29
  390. data/grammars/text.html.factor.json +5 -11
  391. data/grammars/text.html.ftl.json +16 -25
  392. data/grammars/text.html.handlebars.json +579 -598
  393. data/grammars/text.html.javadoc.json +426 -0
  394. data/grammars/text.html.js.json +11 -17
  395. data/grammars/text.html.jsp.json +377 -384
  396. data/grammars/text.html.liquid.json +8 -18
  397. data/grammars/text.html.mako.json +257 -275
  398. data/grammars/text.html.markdown.source.gfm.apib.json +419 -427
  399. data/grammars/text.html.markdown.source.gfm.mson.json +405 -414
  400. data/grammars/text.html.mediawiki.json +318 -344
  401. data/grammars/text.html.php.blade.json +2134 -2140
  402. data/grammars/text.html.php.json +980 -1013
  403. data/grammars/text.html.slash.json +101 -107
  404. data/grammars/text.html.smarty.json +75 -83
  405. data/grammars/text.html.soy.json +250 -253
  406. data/grammars/text.html.ssp.json +18 -24
  407. data/grammars/text.html.tcl.json +17 -24
  408. data/grammars/text.html.twig.json +712 -718
  409. data/grammars/text.idl-idldoc.json +5 -9
  410. data/grammars/text.jade.json +213 -235
  411. data/grammars/text.junit-test-report.json +25 -28
  412. data/grammars/text.log.latex.json +44 -46
  413. data/grammars/text.marko.json +370 -401
  414. data/grammars/text.python.console.json +3 -7
  415. data/grammars/text.python.traceback.json +2 -5
  416. data/grammars/text.rdoc.json +15 -19
  417. data/grammars/text.restructuredtext.clean.json +8 -11
  418. data/grammars/text.restructuredtext.json +886 -873
  419. data/grammars/text.robot.json +26 -36
  420. data/grammars/text.roff.json +2852 -2915
  421. data/grammars/text.runoff.json +56 -69
  422. data/grammars/text.sfd.json +151 -155
  423. data/grammars/text.shell-session.json +5 -8
  424. data/grammars/text.slim.json +184 -210
  425. data/grammars/text.srt.json +54 -57
  426. data/grammars/text.tex.json +98 -105
  427. data/grammars/text.tex.latex.beamer.json +14 -20
  428. data/grammars/text.tex.latex.haskell.json +883 -782
  429. data/grammars/text.tex.latex.json +281 -291
  430. data/grammars/text.tex.latex.memoir.json +39 -46
  431. data/grammars/text.tex.latex.rd.json +32 -38
  432. data/grammars/text.xml.ant.json +62 -69
  433. data/grammars/text.xml.flex-config.json +1009 -1013
  434. data/grammars/text.xml.genshi.json +10 -16
  435. data/grammars/text.xml.json +117 -130
  436. data/grammars/text.xml.pom.json +235 -240
  437. data/grammars/text.xml.xsl.json +31 -37
  438. data/grammars/text.zone_file.json +24 -29
  439. data/lib/linguist/blob.rb +10 -1
  440. data/lib/linguist/blob_helper.rb +4 -1
  441. data/lib/linguist/file_blob.rb +5 -0
  442. data/lib/linguist/generated.rb +16 -0
  443. data/lib/linguist/heuristics.rb +23 -11
  444. data/lib/linguist/language.rb +3 -6
  445. data/lib/linguist/languages.json +1 -1
  446. data/lib/linguist/languages.yml +74 -12
  447. data/lib/linguist/lazy_blob.rb +15 -1
  448. data/lib/linguist/linguist.bundle +0 -0
  449. data/lib/linguist/samples.json +1666 -3381
  450. data/lib/linguist/shebang.rb +2 -0
  451. data/lib/linguist/strategy/modeline.rb +2 -0
  452. data/lib/linguist/vendor.yml +5 -6
  453. data/lib/linguist/version.rb +1 -1
  454. metadata +12 -11
  455. data/grammars/source.elm.json +0 -381
  456. data/grammars/source.nant-build.json +0 -86
  457. data/grammars/source.octave.json +0 -451
  458. data/grammars/text.html.mediawiki.elm-build-output.json +0 -111
  459. data/grammars/text.html.mediawiki.elm-documentation.json +0 -22
  460. data/grammars/text.html.vue.json +0 -936
@@ -11,4 +11,4 @@
11
11
  "include": "source.reason#type-expression"
12
12
  }
13
13
  ]
14
- }
14
+ }
@@ -1,10 +1,6 @@
1
1
  {
2
2
  "name": "Reason",
3
3
  "scopeName": "source.reason",
4
- "fileTypes": [
5
- "re",
6
- "rei"
7
- ],
8
4
  "patterns": [
9
5
  {
10
6
  "include": "#structure-expression-block-item"
@@ -21,16 +17,16 @@
21
17
  {
22
18
  "begin": "\\[(@{1,3})",
23
19
  "end": "(?=[^_\\.'[:word:]])",
24
- "beginCaptures": {
25
- "1": {
26
- "name": "keyword.control.less"
27
- }
28
- },
29
20
  "patterns": [
30
21
  {
31
22
  "include": "#attribute-identifier"
32
23
  }
33
- ]
24
+ ],
25
+ "beginCaptures": {
26
+ "1": {
27
+ "name": "keyword.control.less"
28
+ }
29
+ }
34
30
  },
35
31
  {
36
32
  "include": "#attribute-payload"
@@ -51,8 +47,8 @@
51
47
  }
52
48
  },
53
49
  {
54
- "match": "\\b([[:alpha:]][[:word:]]*)\\b",
55
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
50
+ "name": "entity.other.attribute-name.css constant.language constant.numeric",
51
+ "match": "\\b([[:alpha:]][[:word:]]*)\\b"
56
52
  }
57
53
  ]
58
54
  },
@@ -61,11 +57,6 @@
61
57
  {
62
58
  "begin": "(:)",
63
59
  "end": "(?=\\])",
64
- "beginCaptures": {
65
- "1": {
66
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
67
- }
68
- },
69
60
  "patterns": [
70
61
  {
71
62
  "include": "#structure-expression"
@@ -76,16 +67,16 @@
76
67
  {
77
68
  "include": "#type-expression"
78
69
  }
79
- ]
70
+ ],
71
+ "beginCaptures": {
72
+ "1": {
73
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
74
+ }
75
+ }
80
76
  },
81
77
  {
82
78
  "begin": "([\\?])",
83
79
  "end": "(?=\\])",
84
- "beginCaptures": {
85
- "1": {
86
- "name": "keyword.control.less"
87
- }
88
- },
89
80
  "patterns": [
90
81
  {
91
82
  "include": "#pattern-guard"
@@ -93,7 +84,12 @@
93
84
  {
94
85
  "include": "#pattern"
95
86
  }
96
- ]
87
+ ],
88
+ "beginCaptures": {
89
+ "1": {
90
+ "name": "keyword.control.less"
91
+ }
92
+ }
97
93
  },
98
94
  {
99
95
  "include": "#structure-expression-block-item"
@@ -106,6 +102,11 @@
106
102
  "class-item-inherit": {
107
103
  "begin": "\\b(inherit)\\b",
108
104
  "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
105
+ "patterns": [
106
+ {
107
+ "include": "#value-expression"
108
+ }
109
+ ],
109
110
  "beginCaptures": {
110
111
  "1": {
111
112
  "name": "keyword.other"
@@ -115,16 +116,16 @@
115
116
  "1": {
116
117
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
117
118
  }
118
- },
119
- "patterns": [
120
- {
121
- "include": "#value-expression"
122
- }
123
- ]
119
+ }
124
120
  },
125
121
  "class-item-method": {
126
122
  "begin": "\\b(method)\\b",
127
123
  "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|type|val|with)\\b)",
124
+ "patterns": [
125
+ {
126
+ "include": "#module-item-let-value-bind-name-params-type-body"
127
+ }
128
+ ],
128
129
  "beginCaptures": {
129
130
  "1": {
130
131
  "name": "storage.type"
@@ -134,12 +135,7 @@
134
135
  "1": {
135
136
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
136
137
  }
137
- },
138
- "patterns": [
139
- {
140
- "include": "#module-item-let-value-bind-name-params-type-body"
141
- }
142
- ]
138
+ }
143
139
  },
144
140
  "comment": {
145
141
  "name": "comment",
@@ -153,9 +149,9 @@
153
149
  ]
154
150
  },
155
151
  "comment-block": {
152
+ "name": "comment.block",
156
153
  "begin": "/\\*",
157
154
  "end": "\\*/",
158
- "name": "comment.block",
159
155
  "patterns": [
160
156
  {
161
157
  "include": "#comment"
@@ -163,9 +159,9 @@
163
159
  ]
164
160
  },
165
161
  "comment-block-doc": {
162
+ "name": "comment.block.documentation",
166
163
  "begin": "/\\*\\*(?!/)",
167
164
  "end": "\\*/",
168
- "name": "comment.block.documentation",
169
165
  "patterns": [
170
166
  {
171
167
  "include": "#comment"
@@ -173,22 +169,22 @@
173
169
  ]
174
170
  },
175
171
  "condition-lhs": {
176
- "begin": "(?<![#\\-:!?.@*/&%^+<=>|~$\\\\])([\\?])(?![#\\-:!?.@*/&%^+<=>|~$\\\\])",
172
+ "begin": "(?\u003c![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])([\\?])(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])",
177
173
  "end": "(?=[\\)])",
178
- "beginCaptures": {
179
- "1": {
180
- "name": "keyword.control message.error variable.interpolation"
181
- }
182
- },
183
174
  "patterns": [
184
175
  {
185
- "match": "(?:\\b|[[:space:]]+)([?])(?:\\b|[[:space:]]+)",
186
- "name": "keyword.control message.error variable.interpolation"
176
+ "name": "keyword.control message.error variable.interpolation",
177
+ "match": "(?:\\b|[[:space:]]+)([?])(?:\\b|[[:space:]]+)"
187
178
  },
188
179
  {
189
180
  "include": "#value-expression"
190
181
  }
191
- ]
182
+ ],
183
+ "beginCaptures": {
184
+ "1": {
185
+ "name": "keyword.control message.error variable.interpolation"
186
+ }
187
+ }
192
188
  },
193
189
  "extension-node": {
194
190
  "begin": "(?=\\[(%{1,3})[[:space:]]*[[:alpha:]])",
@@ -197,16 +193,16 @@
197
193
  {
198
194
  "begin": "\\[(%{1,3})",
199
195
  "end": "(?=[^_\\.'[:word:]])",
200
- "beginCaptures": {
201
- "1": {
202
- "name": "keyword.control.less"
203
- }
204
- },
205
196
  "patterns": [
206
197
  {
207
198
  "include": "#attribute-identifier"
208
199
  }
209
- ]
200
+ ],
201
+ "beginCaptures": {
202
+ "1": {
203
+ "name": "keyword.control.less"
204
+ }
205
+ }
210
206
  },
211
207
  {
212
208
  "include": "#attribute-payload"
@@ -227,8 +223,12 @@
227
223
  "patterns": [
228
224
  {
229
225
  "begin": "\\b([[:lower:]][[:word:]]*)\\b[[:space:]]*(=)",
230
- "end": "(?<![=])(?=[/>[:lower:]])",
231
- "comment": "meta.separator",
226
+ "end": "(?\u003c![=])(?=[/\u003e[:lower:]])",
227
+ "patterns": [
228
+ {
229
+ "include": "#value-expression-atomic-with-paths"
230
+ }
231
+ ],
232
232
  "beginCaptures": {
233
233
  "1": {
234
234
  "name": "markup.inserted constant.language support.property-value entity.name.filename"
@@ -236,19 +236,12 @@
236
236
  "2": {
237
237
  "name": "keyword.control.less"
238
238
  }
239
- },
240
- "patterns": [
241
- {
242
- "include": "#value-expression-atomic-with-paths"
243
- }
244
- ]
239
+ }
245
240
  },
246
241
  {
247
242
  "match": "(\\b([[:lower:]][[:word:]]*)\\b[[:space:]]*+)",
248
243
  "captures": {
249
- "1": {
250
- "comment": "meta.separator"
251
- },
244
+ "1": {},
252
245
  "2": {
253
246
  "name": "markup.inserted constant.language support.property-value entity.name.filename"
254
247
  }
@@ -257,58 +250,37 @@
257
250
  ]
258
251
  },
259
252
  "jsx-body": {
260
- "begin": "((>))",
261
- "end": "(?=</)",
262
- "beginCaptures": {
263
- "1": {
264
- "comment": "meta.separator"
265
- },
266
- "2": {
267
- "name": "punctuation.definition.tag.end.js"
268
- }
269
- },
253
+ "begin": "((\u003e))",
254
+ "end": "(?=\u003c/)",
270
255
  "patterns": [
271
256
  {
272
- "comment": "FIXME: seems necessary in order to properly tokenize `[[:word:]]</` boundary",
273
257
  "match": "[[:lower:]][[:word:]]*"
274
258
  },
275
259
  {
276
260
  "include": "#value-expression"
277
261
  }
278
- ]
279
- },
280
- "jsx-head": {
281
- "begin": "((<))(?=[_[:alpha:]])",
282
- "end": "((/>))|(?=</)",
283
- "applyEndPatternLast": true,
262
+ ],
284
263
  "beginCaptures": {
285
- "1": {
286
- "comment": "meta.separator"
287
- },
288
- "2": {
289
- "name": "punctuation.definition.tag.begin.js"
290
- }
291
- },
292
- "endCaptures": {
293
- "1": {
294
- "comment": "meta.separator"
295
- },
264
+ "1": {},
296
265
  "2": {
297
266
  "name": "punctuation.definition.tag.end.js"
298
267
  }
299
- },
268
+ }
269
+ },
270
+ "jsx-head": {
271
+ "begin": "((\u003c))(?=[_[:alpha:]])",
272
+ "end": "((/\u003e))|(?=\u003c/)",
300
273
  "patterns": [
301
274
  {
302
275
  "begin": "\\G",
303
- "end": "(?=[[:space:]/>])[[:space:]]*+",
304
- "comment": "meta.separator",
276
+ "end": "(?=[[:space:]/\u003e])[[:space:]]*+",
305
277
  "patterns": [
306
278
  {
307
279
  "include": "#module-path-simple"
308
280
  },
309
281
  {
310
- "match": "\\b[[:lower:]][[:word:]]*\\b",
311
- "name": "entity.name.tag.inline.any.html"
282
+ "name": "entity.name.tag.inline.any.html",
283
+ "match": "\\b[[:lower:]][[:word:]]*\\b"
312
284
  }
313
285
  ]
314
286
  },
@@ -318,194 +290,69 @@
318
290
  {
319
291
  "include": "#jsx-body"
320
292
  }
321
- ]
322
- },
323
- "jsx-tail": {
324
- "begin": "\\G(/>)|(</)",
325
- "end": "(>)",
326
- "applyEndPatternLast": true,
327
- "comment": "meta.separator",
293
+ ],
328
294
  "beginCaptures": {
329
- "1": {
330
- "name": "punctuation.definition.tag.end.js"
331
- },
295
+ "1": {},
332
296
  "2": {
333
297
  "name": "punctuation.definition.tag.begin.js"
334
298
  }
335
299
  },
336
300
  "endCaptures": {
337
- "1": {
301
+ "1": {},
302
+ "2": {
338
303
  "name": "punctuation.definition.tag.end.js"
339
304
  }
340
305
  },
341
- "patterns": [
342
- {
343
- "include": "#module-path-simple"
344
- },
345
- {
346
- "match": "\\b[[:lower:]][[:word:]]*\\b",
347
- "name": "entity.name.tag.inline.any.html"
348
- }
349
- ]
306
+ "applyEndPatternLast": true
350
307
  },
351
- "module-name-extended": {
352
- "patterns": [
353
- {
354
- "include": "#module-name-simple"
355
- },
356
- {
357
- "begin": "([\\(])",
358
- "end": "([\\)])",
359
- "captures": {
360
- "1": {
361
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
362
- }
363
- },
364
- "patterns": [
365
- {
366
- "include": "#module-path-extended"
367
- }
368
- ]
369
- }
370
- ]
371
- },
372
- "module-name-simple": {
373
- "match": "\\b[[:upper:]][[:word:]]*\\b",
374
- "name": "support.class entity.name.class"
375
- },
376
- "module-path-extended": {
308
+ "jsx-tail": {
309
+ "begin": "\\G(/\u003e)|(\u003c/)",
310
+ "end": "(\u003e)",
377
311
  "patterns": [
378
312
  {
379
- "include": "#module-name-extended"
380
- },
381
- {
382
- "include": "#comment"
313
+ "include": "#module-path-simple"
383
314
  },
384
315
  {
385
- "comment": "NOTE: end early to avoid too much reparsing",
386
- "begin": "([\\.])",
387
- "end": "(?<=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
388
- "beginCaptures": {
389
- "1": {
390
- "name": "keyword.control.less"
391
- }
392
- },
393
- "patterns": [
394
- {
395
- "begin": "(?<=[\\.])",
396
- "end": "(?<=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
397
- "patterns": [
398
- {
399
- "include": "#comment"
400
- },
401
- {
402
- "include": "#module-name-extended"
403
- }
404
- ]
405
- }
406
- ]
316
+ "name": "entity.name.tag.inline.any.html",
317
+ "match": "\\b[[:lower:]][[:word:]]*\\b"
407
318
  }
408
- ]
409
- },
410
- "module-path-extended-prefix": {
411
- "begin": "(?=\\b[[:upper:]])",
412
- "end": "([\\.])|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
413
- "endCaptures": {
319
+ ],
320
+ "beginCaptures": {
414
321
  "1": {
415
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
416
- }
417
- },
418
- "patterns": [
419
- {
420
- "include": "#module-path-extended"
421
- }
422
- ]
423
- },
424
- "module-path-simple": {
425
- "patterns": [
426
- {
427
- "include": "#module-name-simple"
428
- },
429
- {
430
- "include": "#comment"
322
+ "name": "punctuation.definition.tag.end.js"
431
323
  },
432
- {
433
- "comment": "NOTE: end early to avoid too much reparsing",
434
- "begin": "([\\.])",
435
- "end": "(?<=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
436
- "beginCaptures": {
437
- "1": {
438
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
439
- }
440
- },
441
- "patterns": [
442
- {
443
- "begin": "(?<=[\\.])",
444
- "end": "(?<=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
445
- "patterns": [
446
- {
447
- "include": "#comment"
448
- },
449
- {
450
- "include": "#module-name-simple"
451
- }
452
- ]
453
- }
454
- ]
324
+ "2": {
325
+ "name": "punctuation.definition.tag.begin.js"
455
326
  }
456
- ]
457
- },
458
- "module-path-simple-prefix": {
459
- "begin": "(?=\\b[[:upper:]])",
460
- "end": "([\\.])|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
327
+ },
461
328
  "endCaptures": {
462
329
  "1": {
463
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
330
+ "name": "punctuation.definition.tag.end.js"
464
331
  }
465
332
  },
466
- "patterns": [
467
- {
468
- "include": "#module-path-simple"
469
- }
470
- ]
333
+ "applyEndPatternLast": true
471
334
  },
472
335
  "module-item-class-type": {
473
- "comment": "FIXME: proper parsing",
474
336
  "begin": "\\b(class)\\b",
475
337
  "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|module|nonrec|open|private|rec|type|val|with)\\b)",
476
- "beginCaptures": {
477
- "1": {
478
- "name": "keyword.other"
479
- }
480
- },
481
- "endCaptures": {
482
- "1": {
483
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
484
- }
485
- },
486
338
  "patterns": [
487
339
  {
488
340
  "begin": "(?:\\G|^)[[:space:]]*\\b(type)\\b",
489
341
  "end": "(?==)",
490
- "beginCaptures": {
491
- "1": {
492
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
493
- }
494
- },
495
342
  "patterns": [
496
343
  {
497
344
  "include": "#module-item-type-bind-name-tyvars"
498
345
  }
499
- ]
346
+ ],
347
+ "beginCaptures": {
348
+ "1": {
349
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
350
+ }
351
+ }
500
352
  },
501
353
  {
502
354
  "begin": "(=)",
503
355
  "end": "(?=;)",
504
- "beginCaptures": {
505
- "1": {
506
- "name": "keyword.control.less"
507
- }
508
- },
509
356
  "patterns": [
510
357
  {
511
358
  "include": "#attribute"
@@ -519,13 +366,14 @@
519
366
  {
520
367
  "include": "#class-item-method"
521
368
  }
522
- ]
369
+ ],
370
+ "beginCaptures": {
371
+ "1": {
372
+ "name": "keyword.control.less"
373
+ }
374
+ }
523
375
  }
524
- ]
525
- },
526
- "module-item-exception": {
527
- "begin": "\\b(exception)\\b",
528
- "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
376
+ ],
529
377
  "beginCaptures": {
530
378
  "1": {
531
379
  "name": "keyword.other"
@@ -535,26 +383,30 @@
535
383
  "1": {
536
384
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
537
385
  }
538
- },
386
+ }
387
+ },
388
+ "module-item-exception": {
389
+ "begin": "\\b(exception)\\b",
390
+ "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
539
391
  "patterns": [
540
392
  {
541
393
  "include": "#module-item-type-bind-body-item"
542
394
  }
543
- ]
544
- },
545
- "module-item-external": {
546
- "begin": "\\b(external)\\b",
547
- "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
395
+ ],
548
396
  "beginCaptures": {
549
397
  "1": {
550
- "name": "storage.type"
398
+ "name": "keyword.other"
551
399
  }
552
400
  },
553
401
  "endCaptures": {
554
402
  "1": {
555
403
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
556
404
  }
557
- },
405
+ }
406
+ },
407
+ "module-item-external": {
408
+ "begin": "\\b(external)\\b",
409
+ "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
558
410
  "patterns": [
559
411
  {
560
412
  "include": "#module-item-let-value-bind-name-or-pattern"
@@ -565,19 +417,14 @@
565
417
  {
566
418
  "begin": "(=)",
567
419
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
568
- "beginCaptures": {
569
- "1": {
570
- "name": "keyword.control.less"
571
- }
572
- },
573
420
  "patterns": [
574
421
  {
575
422
  "include": "#attribute"
576
423
  },
577
424
  {
425
+ "name": "string.double string.regexp",
578
426
  "begin": "\"",
579
427
  "end": "\"",
580
- "name": "string.double string.regexp",
581
428
  "patterns": [
582
429
  {
583
430
  "include": "#value-literal-string-escape"
@@ -598,42 +445,47 @@
598
445
  }
599
446
  ]
600
447
  }
601
- ]
448
+ ],
449
+ "beginCaptures": {
450
+ "1": {
451
+ "name": "keyword.control.less"
452
+ }
453
+ }
602
454
  }
603
- ]
604
- },
605
- "module-item-include": {
606
- "begin": "\\b(include)\\b",
607
- "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val)\\b)",
455
+ ],
608
456
  "beginCaptures": {
609
457
  "1": {
610
- "name": "keyword.control.include"
458
+ "name": "storage.type"
611
459
  }
612
460
  },
613
461
  "endCaptures": {
614
462
  "1": {
615
463
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
616
464
  }
617
- },
465
+ }
466
+ },
467
+ "module-item-include": {
468
+ "begin": "\\b(include)\\b",
469
+ "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val)\\b)",
618
470
  "patterns": [
619
471
  {
620
472
  "include": "#signature-expression"
621
473
  }
622
- ]
623
- },
624
- "module-item-let": {
625
- "begin": "\\b(let)\\b",
626
- "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
474
+ ],
627
475
  "beginCaptures": {
628
476
  "1": {
629
- "name": "storage.type"
477
+ "name": "keyword.control.include"
630
478
  }
631
479
  },
632
480
  "endCaptures": {
633
481
  "1": {
634
482
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
635
483
  }
636
- },
484
+ }
485
+ },
486
+ "module-item-let": {
487
+ "begin": "\\b(let)\\b",
488
+ "end": "(;)|(?=}|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
637
489
  "patterns": [
638
490
  {
639
491
  "include": "#module-item-let-module"
@@ -641,16 +493,21 @@
641
493
  {
642
494
  "include": "#module-item-let-value"
643
495
  }
644
- ]
645
- },
646
- "module-item-let-module": {
647
- "begin": "(?:\\G|^)[[:space:]]*\\b(module)\\b",
648
- "end": "(?=[;}]|\\b(class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|type|val|with)\\b)",
496
+ ],
649
497
  "beginCaptures": {
650
498
  "1": {
651
- "name": "variable.other.class.js variable.interpolation keyword.control storage.type message.error"
499
+ "name": "storage.type"
652
500
  }
653
501
  },
502
+ "endCaptures": {
503
+ "1": {
504
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
505
+ }
506
+ }
507
+ },
508
+ "module-item-let-module": {
509
+ "begin": "(?:\\G|^)[[:space:]]*\\b(module)\\b",
510
+ "end": "(?=[;}]|\\b(class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|type|val|with)\\b)",
654
511
  "patterns": [
655
512
  {
656
513
  "include": "#comment"
@@ -664,44 +521,44 @@
664
521
  {
665
522
  "include": "#module-item-let-module-bind-name-params-type-body"
666
523
  }
667
- ]
524
+ ],
525
+ "beginCaptures": {
526
+ "1": {
527
+ "name": "variable.other.class.js variable.interpolation keyword.control storage.type message.error"
528
+ }
529
+ }
668
530
  },
669
531
  "module-item-let-module-and": {
670
532
  "begin": "\\b(and)\\b",
671
533
  "end": "(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
672
- "beginCaptures": {
673
- "1": {
674
- "name": "storage.type"
675
- }
676
- },
677
534
  "patterns": [
678
535
  {
679
536
  "include": "#module-item-let-module-bind-name-params-type-body"
680
537
  }
681
- ]
682
- },
683
- "module-item-let-module-bind-body": {
684
- "begin": "(=>?)",
685
- "end": "(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
538
+ ],
686
539
  "beginCaptures": {
687
540
  "1": {
688
- "name": "keyword.control.less"
541
+ "name": "storage.type"
689
542
  }
690
- },
543
+ }
544
+ },
545
+ "module-item-let-module-bind-body": {
546
+ "begin": "(=\u003e?)",
547
+ "end": "(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
691
548
  "patterns": [
692
549
  {
693
550
  "include": "#structure-expression"
694
551
  }
695
- ]
552
+ ],
553
+ "beginCaptures": {
554
+ "1": {
555
+ "name": "keyword.control.less"
556
+ }
557
+ }
696
558
  },
697
559
  "module-item-let-module-bind-name-params": {
698
560
  "begin": "\\b([[:upper:]][[:word:]]*)\\b",
699
561
  "end": "(?=[;:}=]|\\b(class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
700
- "beginCaptures": {
701
- "1": {
702
- "name": "support.class entity.name.class"
703
- }
704
- },
705
562
  "patterns": [
706
563
  {
707
564
  "include": "#comment"
@@ -709,7 +566,12 @@
709
566
  {
710
567
  "include": "#module-item-let-module-param"
711
568
  }
712
- ]
569
+ ],
570
+ "beginCaptures": {
571
+ "1": {
572
+ "name": "support.class entity.name.class"
573
+ }
574
+ }
713
575
  },
714
576
  "module-item-let-module-bind-name-params-type-body": {
715
577
  "begin": "(?:\\G|^)",
@@ -732,16 +594,16 @@
732
594
  "module-item-let-module-bind-type": {
733
595
  "begin": "(:)",
734
596
  "end": "(?=[;}=]|\\b(and|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val)\\b)",
735
- "beginCaptures": {
736
- "1": {
737
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
738
- }
739
- },
740
597
  "patterns": [
741
598
  {
742
599
  "include": "#signature-expression"
743
600
  }
744
- ]
601
+ ],
602
+ "beginCaptures": {
603
+ "1": {
604
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
605
+ }
606
+ }
745
607
  },
746
608
  "module-item-let-module-param": {
747
609
  "begin": "(?=\\()",
@@ -758,36 +620,36 @@
758
620
  "include": "#module-name-simple"
759
621
  }
760
622
  ]
761
- },
762
- {
763
- "begin": "(:)",
764
- "end": "(?=\\))",
765
- "beginCaptures": {
766
- "1": {
767
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
768
- }
769
- },
623
+ },
624
+ {
625
+ "begin": "(:)",
626
+ "end": "(?=\\))",
770
627
  "patterns": [
771
628
  {
772
629
  "include": "#signature-expression"
773
630
  }
774
- ]
631
+ ],
632
+ "beginCaptures": {
633
+ "1": {
634
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
635
+ }
636
+ }
775
637
  }
776
638
  ]
777
639
  },
778
640
  "module-item-let-module-rec": {
779
641
  "begin": "(?:\\G|^)[[:space:]]*\\b(rec)\\b",
780
642
  "end": "(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
781
- "beginCaptures": {
782
- "1": {
783
- "name": "keyword.control storage.modifier.rec"
784
- }
785
- },
786
643
  "patterns": [
787
644
  {
788
645
  "include": "#module-item-let-module-bind-name-params-type-body"
789
646
  }
790
- ]
647
+ ],
648
+ "beginCaptures": {
649
+ "1": {
650
+ "name": "keyword.control storage.modifier.rec"
651
+ }
652
+ }
791
653
  },
792
654
  "module-item-let-value": {
793
655
  "patterns": [
@@ -805,34 +667,34 @@
805
667
  "module-item-let-value-and": {
806
668
  "begin": "\\b(and)\\b",
807
669
  "end": "(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
808
- "beginCaptures": {
809
- "1": {
810
- "name": "storage.type"
811
- }
812
- },
813
670
  "patterns": [
814
671
  {
815
672
  "include": "#module-item-let-value-bind-name-params-type-body"
816
673
  }
817
- ]
818
- },
819
- "module-item-let-value-bind-body": {
820
- "begin": "(=>?)",
821
- "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
674
+ ],
822
675
  "beginCaptures": {
823
676
  "1": {
824
- "name": "keyword.control.less"
677
+ "name": "storage.type"
825
678
  }
826
- },
679
+ }
680
+ },
681
+ "module-item-let-value-bind-body": {
682
+ "begin": "(=\u003e?)",
683
+ "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
827
684
  "patterns": [
828
685
  {
829
686
  "include": "#value-expression"
830
687
  }
831
- ]
688
+ ],
689
+ "beginCaptures": {
690
+ "1": {
691
+ "name": "keyword.control.less"
692
+ }
693
+ }
832
694
  },
833
695
  "module-item-let-value-bind-name-or-pattern": {
834
- "begin": "(?<=[^[:word:]]and|^and|[^[:word:]]external|^external|[^[:word:]]let|^let|[^[:word:]]method|^method|[^[:word:]]rec|^rec)[[:space:]]*",
835
- "end": "(?<=[^[:space:]])|(?=[[:space:]]|[;:}=]|\\b(and|as|class|constraint|exception|external|for|include|inherit|let|method|module|nonrec|open|private|rec|switch|try|type|val|while|with)\\b)",
696
+ "begin": "(?\u003c=[^[:word:]]and|^and|[^[:word:]]external|^external|[^[:word:]]let|^let|[^[:word:]]method|^method|[^[:word:]]rec|^rec)[[:space:]]*",
697
+ "end": "(?\u003c=[^[:space:]])|(?=[[:space:]]|[;:}=]|\\b(and|as|class|constraint|exception|external|for|include|inherit|let|method|module|nonrec|open|private|rec|switch|try|type|val|while|with)\\b)",
836
698
  "patterns": [
837
699
  {
838
700
  "include": "#comment"
@@ -857,25 +719,24 @@
857
719
  ]
858
720
  },
859
721
  "module-item-let-value-bind-name-params-type-body": {
860
- "begin": "(?<=[^[:word:]]and|^and|[^[:word:]]external|^external|[^[:word:]]let|^let|[^[:word:]]method|^method|[^[:word:]]rec|^rec)",
722
+ "begin": "(?\u003c=[^[:word:]]and|^and|[^[:word:]]external|^external|[^[:word:]]let|^let|[^[:word:]]method|^method|[^[:word:]]rec|^rec)",
861
723
  "end": "(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
862
724
  "patterns": [
863
725
  {
864
- "comment": "FIXME; hack for punned arguments",
865
726
  "begin": "(::)",
866
- "end": "(?<=[[:space:]])",
867
- "beginCaptures": {
868
- "1": {
869
- "name": "keyword.control"
870
- }
871
- },
727
+ "end": "(?\u003c=[[:space:]])",
872
728
  "patterns": [
873
729
  {
874
730
  "include": "#pattern"
875
731
  },
876
732
  {
877
733
  "begin": "(=)",
878
- "end": "(\\?)|(?<=[^[:space:]=][[:space:]])(?=[[:space:]]*+[^\\.])",
734
+ "end": "(\\?)|(?\u003c=[^[:space:]=][[:space:]])(?=[[:space:]]*+[^\\.])",
735
+ "patterns": [
736
+ {
737
+ "include": "#value-expression-atomic-with-paths"
738
+ }
739
+ ],
879
740
  "beginCaptures": {
880
741
  "1": {
881
742
  "name": "markup.inserted keyword.control.less message.error"
@@ -885,14 +746,14 @@
885
746
  "1": {
886
747
  "name": "storage.type"
887
748
  }
888
- },
889
- "patterns": [
890
- {
891
- "include": "#value-expression-atomic-with-paths"
892
- }
893
- ]
749
+ }
894
750
  }
895
- ]
751
+ ],
752
+ "beginCaptures": {
753
+ "1": {
754
+ "name": "keyword.control"
755
+ }
756
+ }
896
757
  },
897
758
  {
898
759
  "include": "#module-item-let-value-bind-name-or-pattern"
@@ -919,18 +780,18 @@
919
780
  "include": "#module-item-let-value-param"
920
781
  },
921
782
  {
922
- "begin": "(?<![:])(:)[[:space:]]*(?![[:space:]]*[:\\)])",
783
+ "begin": "(?\u003c![:])(:)[[:space:]]*(?![[:space:]]*[:\\)])",
923
784
  "end": "(?=[;}=]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|val|with)\\b)",
924
- "beginCaptures": {
925
- "1": {
926
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
927
- }
928
- },
929
785
  "patterns": [
930
786
  {
931
787
  "include": "#type-expression-atomic"
932
788
  }
933
- ]
789
+ ],
790
+ "beginCaptures": {
791
+ "1": {
792
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
793
+ }
794
+ }
934
795
  }
935
796
  ]
936
797
  },
@@ -953,7 +814,7 @@
953
814
  ]
954
815
  },
955
816
  "module-item-let-value-bind-pattern": {
956
- "begin": "(?<=[^[:word:]]and|^and|[^[:word:]]external|^external|[^[:word:]]let|^let|[^[:word:]]method|^method|[^[:word:]]rec|^rec)",
817
+ "begin": "(?\u003c=[^[:word:]]and|^and|[^[:word:]]external|^external|[^[:word:]]let|^let|[^[:word:]]method|^method|[^[:word:]]rec|^rec)",
957
818
  "end": "(?=[;:}=]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
958
819
  "patterns": [
959
820
  {
@@ -968,18 +829,17 @@
968
829
  ]
969
830
  },
970
831
  "module-item-let-value-bind-type": {
971
- "comment": "FIXME: lookahead",
972
- "begin": "(?<![:])(:)(?![[:space:]]*[:\\)])",
973
- "end": "(?==[^>]|[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|val|with)\\b)",
974
- "beginCaptures": {
975
- "1": {
976
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
977
- }
978
- },
832
+ "begin": "(?\u003c![:])(:)(?![[:space:]]*[:\\)])",
833
+ "end": "(?==[^\u003e]|[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|val|with)\\b)",
979
834
  "patterns": [
980
835
  {
981
836
  "begin": "\\b(type)\\b",
982
837
  "end": "([\\.])",
838
+ "patterns": [
839
+ {
840
+ "include": "#pattern-variable"
841
+ }
842
+ ],
983
843
  "beginCaptures": {
984
844
  "1": {
985
845
  "name": "entity.other.attribute-name.css constant.language constant.numeric"
@@ -989,17 +849,17 @@
989
849
  "1": {
990
850
  "name": "entity.name.function"
991
851
  }
992
- },
993
- "patterns": [
994
- {
995
- "include": "#pattern-variable"
996
- }
997
- ]
852
+ }
998
853
  },
999
854
  {
1000
855
  "include": "#type-expression"
1001
856
  }
1002
- ]
857
+ ],
858
+ "beginCaptures": {
859
+ "1": {
860
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
861
+ }
862
+ }
1003
863
  },
1004
864
  "module-item-let-value-param": {
1005
865
  "patterns": [
@@ -1021,22 +881,19 @@
1021
881
  "patterns": [
1022
882
  {
1023
883
  "begin": "(\\b[[:lower:]][[:word:]]*\\b)?[[:space:]]*(::)",
1024
- "end": "(?<=[[:space:]])",
1025
- "beginCaptures": {
1026
- "1": {
1027
- "name": "markup.inserted constant.language support.property-value entity.name.filename"
1028
- },
1029
- "2": {
1030
- "name": "keyword.control"
1031
- }
1032
- },
884
+ "end": "(?\u003c=[[:space:]])",
1033
885
  "patterns": [
1034
886
  {
1035
887
  "include": "#pattern"
1036
888
  },
1037
889
  {
1038
890
  "begin": "(=)",
1039
- "end": "(\\?)|(?<=[^[:space:]=][[:space:]])(?=[[:space:]]*+[^\\.])",
891
+ "end": "(\\?)|(?\u003c=[^[:space:]=][[:space:]])(?=[[:space:]]*+[^\\.])",
892
+ "patterns": [
893
+ {
894
+ "include": "#value-expression-atomic-with-paths"
895
+ }
896
+ ],
1040
897
  "beginCaptures": {
1041
898
  "1": {
1042
899
  "name": "markup.inserted keyword.control.less message.error"
@@ -1046,88 +903,78 @@
1046
903
  "1": {
1047
904
  "name": "storage.type"
1048
905
  }
1049
- },
1050
- "patterns": [
1051
- {
1052
- "include": "#value-expression-atomic-with-paths"
1053
- }
1054
- ]
906
+ }
1055
907
  }
1056
- ]
908
+ ],
909
+ "beginCaptures": {
910
+ "1": {
911
+ "name": "markup.inserted constant.language support.property-value entity.name.filename"
912
+ },
913
+ "2": {
914
+ "name": "keyword.control"
915
+ }
916
+ }
1057
917
  }
1058
918
  ]
1059
919
  },
1060
920
  "module-item-let-value-param-module": {
1061
- "comment": "FIXME: merge with pattern-parens",
1062
921
  "begin": "\\([[:space:]]*(?=\\b(module)\\b)",
1063
922
  "end": "\\)",
1064
923
  "patterns": [
1065
924
  {
1066
925
  "begin": "\\b(module)\\b",
1067
926
  "end": "(?=\\))",
927
+ "patterns": [
928
+ {
929
+ "name": "support.class entity.name.class",
930
+ "match": "\\b[[:upper:]][[:word:]]*\\b"
931
+ }
932
+ ],
1068
933
  "beginCaptures": {
1069
934
  "1": {
1070
935
  "name": "keyword.other message.error"
1071
936
  }
1072
- },
1073
- "patterns": [
1074
- {
1075
- "match": "\\b[[:upper:]][[:word:]]*\\b",
1076
- "name": "support.class entity.name.class"
1077
- }
1078
- ]
937
+ }
1079
938
  }
1080
939
  ]
1081
940
  },
1082
941
  "module-item-let-value-param-type": {
1083
- "comment": "FIXME: merge with pattern-parens",
1084
942
  "begin": "\\((?=\\b(type)\\b)",
1085
943
  "end": "\\)",
1086
944
  "patterns": [
1087
945
  {
1088
946
  "begin": "\\b(type)\\b",
1089
947
  "end": "(?=\\))",
1090
- "beginCaptures": {
1091
- "1": {
1092
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
1093
- }
1094
- },
1095
948
  "patterns": [
1096
949
  {
1097
950
  "include": "#pattern-variable"
1098
951
  }
1099
- ]
952
+ ],
953
+ "beginCaptures": {
954
+ "1": {
955
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
956
+ }
957
+ }
1100
958
  }
1101
959
  ]
1102
960
  },
1103
961
  "module-item-let-value-rec": {
1104
962
  "begin": "(?:\\G|^)[[:space:]]*\\b(rec)\\b",
1105
963
  "end": "(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1106
- "beginCaptures": {
1107
- "1": {
1108
- "name": "keyword.control storage.modifier message.error"
1109
- }
1110
- },
1111
964
  "patterns": [
1112
965
  {
1113
966
  "include": "#module-item-let-value-bind-name-params-type-body"
1114
967
  }
1115
- ]
968
+ ],
969
+ "beginCaptures": {
970
+ "1": {
971
+ "name": "keyword.control storage.modifier message.error"
972
+ }
973
+ }
1116
974
  },
1117
975
  "module-item-module": {
1118
- "comment": "NOTE: this is to support the let-module case without the let prefix",
1119
976
  "begin": "\\b(module)\\b[[:space:]]*(?!\\b(type)\\b|$)",
1120
977
  "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1121
- "beginCaptures": {
1122
- "1": {
1123
- "name": "storage.type message.error"
1124
- }
1125
- },
1126
- "endCaptures": {
1127
- "1": {
1128
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1129
- }
1130
- },
1131
978
  "patterns": [
1132
979
  {
1133
980
  "include": "#module-item-let-module-and"
@@ -1138,30 +985,25 @@
1138
985
  {
1139
986
  "include": "#module-item-let-module-bind-name-params-type-body"
1140
987
  }
1141
- ]
1142
- },
1143
- "module-item-module-type": {
1144
- "begin": "\\b(module)\\b[[:space:]]*(?=\\b(type)\\b|$)",
1145
- "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|val|with)\\b)",
988
+ ],
1146
989
  "beginCaptures": {
1147
990
  "1": {
1148
- "name": "keyword.control message.error"
991
+ "name": "storage.type message.error"
1149
992
  }
1150
993
  },
1151
994
  "endCaptures": {
1152
995
  "1": {
1153
996
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1154
997
  }
1155
- },
998
+ }
999
+ },
1000
+ "module-item-module-type": {
1001
+ "begin": "\\b(module)\\b[[:space:]]*(?=\\b(type)\\b|$)",
1002
+ "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|val|with)\\b)",
1156
1003
  "patterns": [
1157
1004
  {
1158
1005
  "begin": "(?:\\G|^)[[:space:]]*\\b(type)\\b",
1159
1006
  "end": "(?==)",
1160
- "beginCaptures": {
1161
- "1": {
1162
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
1163
- }
1164
- },
1165
1007
  "patterns": [
1166
1008
  {
1167
1009
  "include": "#comment"
@@ -1174,16 +1016,16 @@
1174
1016
  }
1175
1017
  }
1176
1018
  }
1177
- ]
1019
+ ],
1020
+ "beginCaptures": {
1021
+ "1": {
1022
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
1023
+ }
1024
+ }
1178
1025
  },
1179
1026
  {
1180
1027
  "begin": "(=)",
1181
1028
  "end": "(?=;)",
1182
- "beginCaptures": {
1183
- "1": {
1184
- "name": "keyword.control.less"
1185
- }
1186
- },
1187
1029
  "patterns": [
1188
1030
  {
1189
1031
  "include": "#comment"
@@ -1191,23 +1033,28 @@
1191
1033
  {
1192
1034
  "include": "#signature-expression"
1193
1035
  }
1194
- ]
1036
+ ],
1037
+ "beginCaptures": {
1038
+ "1": {
1039
+ "name": "keyword.control.less"
1040
+ }
1041
+ }
1195
1042
  }
1196
- ]
1197
- },
1198
- "module-item-open": {
1199
- "begin": "\\b(open)\\b",
1200
- "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1043
+ ],
1201
1044
  "beginCaptures": {
1202
1045
  "1": {
1203
- "name": "keyword.control.open"
1046
+ "name": "keyword.control message.error"
1204
1047
  }
1205
1048
  },
1206
1049
  "endCaptures": {
1207
1050
  "1": {
1208
1051
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1209
1052
  }
1210
- },
1053
+ }
1054
+ },
1055
+ "module-item-open": {
1056
+ "begin": "\\b(open)\\b",
1057
+ "end": "(;)|(?=}|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1211
1058
  "patterns": [
1212
1059
  {
1213
1060
  "include": "#comment"
@@ -1215,22 +1062,21 @@
1215
1062
  {
1216
1063
  "include": "#module-path-simple"
1217
1064
  }
1218
- ]
1219
- },
1220
- "module-item-type": {
1221
- "comment": "FIXME: the semi-colon is optional so we can re-use this for hover, which does not print the trailing ;",
1222
- "begin": "\\b(type)\\b",
1223
- "end": "(;)|(?=[\\)}]|\\b(class|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
1065
+ ],
1224
1066
  "beginCaptures": {
1225
1067
  "1": {
1226
- "name": "keyword.other"
1068
+ "name": "keyword.control.open"
1227
1069
  }
1228
1070
  },
1229
1071
  "endCaptures": {
1230
1072
  "1": {
1231
1073
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1232
1074
  }
1233
- },
1075
+ }
1076
+ },
1077
+ "module-item-type": {
1078
+ "begin": "\\b(type)\\b",
1079
+ "end": "(;)|(?=[\\)}]|\\b(class|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
1234
1080
  "patterns": [
1235
1081
  {
1236
1082
  "include": "#module-item-type-and"
@@ -1241,12 +1087,26 @@
1241
1087
  {
1242
1088
  "include": "#module-item-type-bind"
1243
1089
  }
1244
- ]
1090
+ ],
1091
+ "beginCaptures": {
1092
+ "1": {
1093
+ "name": "keyword.other"
1094
+ }
1095
+ },
1096
+ "endCaptures": {
1097
+ "1": {
1098
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1099
+ }
1100
+ }
1245
1101
  },
1246
1102
  "module-item-type-and": {
1247
- "comment": "FIXME: the optional `type` is for module constraints",
1248
1103
  "begin": "\\b(and)\\b([[:space:]]*type)?",
1249
1104
  "end": "(?=[;\\)}]|\\b(class|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
1105
+ "patterns": [
1106
+ {
1107
+ "include": "#module-item-type-bind-name-tyvars-body"
1108
+ }
1109
+ ],
1250
1110
  "beginCaptures": {
1251
1111
  "1": {
1252
1112
  "name": "keyword.other"
@@ -1254,15 +1114,9 @@
1254
1114
  "2": {
1255
1115
  "name": "entity.other.attribute-name.css constant.language constant.numeric"
1256
1116
  }
1257
- },
1258
- "patterns": [
1259
- {
1260
- "include": "#module-item-type-bind-name-tyvars-body"
1261
- }
1262
- ]
1117
+ }
1263
1118
  },
1264
1119
  "module-item-type-bind": {
1265
- "comment": "FIXME: only allow module paths before type variables",
1266
1120
  "patterns": [
1267
1121
  {
1268
1122
  "include": "#module-item-type-bind-nonrec"
@@ -1273,24 +1127,23 @@
1273
1127
  ]
1274
1128
  },
1275
1129
  "module-item-type-bind-body": {
1276
- "comment": "FIXME: parsing",
1277
1130
  "begin": "(\\+?=)",
1278
1131
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|rec|type|val|with)\\b)",
1279
- "beginCaptures": {
1280
- "1": {
1281
- "name": "keyword.control.less"
1282
- }
1283
- },
1284
1132
  "patterns": [
1285
1133
  {
1286
1134
  "include": "#module-item-type-bind-body-item"
1287
1135
  }
1288
- ]
1136
+ ],
1137
+ "beginCaptures": {
1138
+ "1": {
1139
+ "name": "keyword.control.less"
1140
+ }
1141
+ }
1289
1142
  },
1290
1143
  "module-item-type-bind-body-item": {
1291
1144
  "patterns": [
1292
1145
  {
1293
- "match": "(=)(?!>)|\\b(private)\\b",
1146
+ "match": "(=)(?!\u003e)|\\b(private)\\b",
1294
1147
  "captures": {
1295
1148
  "1": {
1296
1149
  "name": "keyword.control.less"
@@ -1301,7 +1154,6 @@
1301
1154
  }
1302
1155
  },
1303
1156
  {
1304
- "comment": "FIXME: specialized version of variant rule that also scans for (",
1305
1157
  "match": "\\b([[:upper:]][[:word:]]*)\\b(?![[:space:]]*[\\.\\(])",
1306
1158
  "captures": {
1307
1159
  "1": {
@@ -1319,13 +1171,8 @@
1319
1171
  }
1320
1172
  },
1321
1173
  {
1322
- "begin": "(\\|)(?![#\\-:!?.@*/&%^+<=>|~$\\\\])[[:space:]]*",
1323
- "end": "(?=[;\\)}]|\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\])|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1324
- "beginCaptures": {
1325
- "1": {
1326
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1327
- }
1328
- },
1174
+ "begin": "(\\|)(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])[[:space:]]*",
1175
+ "end": "(?=[;\\)}]|\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1329
1176
  "patterns": [
1330
1177
  {
1331
1178
  "include": "#value-expression-constructor"
@@ -1344,11 +1191,15 @@
1344
1191
  {
1345
1192
  "include": "#type-expression"
1346
1193
  }
1347
- ]
1194
+ ],
1195
+ "beginCaptures": {
1196
+ "1": {
1197
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1198
+ }
1199
+ }
1348
1200
  },
1349
1201
  {
1350
- "comment": "FIXME: remove this once the pretty printer no longer outputs 'of'",
1351
- "match": "(:)|(\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\]))|\\b(of)\\b",
1202
+ "match": "(:)|(\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]))|\\b(of)\\b",
1352
1203
  "captures": {
1353
1204
  "1": {
1354
1205
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
@@ -1367,13 +1218,8 @@
1367
1218
  ]
1368
1219
  },
1369
1220
  "module-item-type-bind-name-tyvars": {
1370
- "begin": "(?<=\\G|^|\\.)[[:space:]]*\\b([[:lower:]][[:word:]]*)\\b",
1221
+ "begin": "(?\u003c=\\G|^|\\.)[[:space:]]*\\b([[:lower:]][[:word:]]*)\\b",
1371
1222
  "end": "(?=\\+?=|[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1372
- "beginCaptures": {
1373
- "1": {
1374
- "name": "entity.name.function"
1375
- }
1376
- },
1377
1223
  "patterns": [
1378
1224
  {
1379
1225
  "include": "#comment"
@@ -1382,11 +1228,10 @@
1382
1228
  "include": "#attribute"
1383
1229
  },
1384
1230
  {
1385
- "match": "_",
1386
- "name": "comment"
1231
+ "name": "comment",
1232
+ "match": "_"
1387
1233
  },
1388
1234
  {
1389
- "comment": "FIXME: add separate type-variable rule",
1390
1235
  "match": "([+\\-])?(?:(_)|(')([[:lower:]][[:word:]]*)\\b)(?!\\.[[:upper:]])",
1391
1236
  "captures": {
1392
1237
  "1": {
@@ -1403,7 +1248,12 @@
1403
1248
  }
1404
1249
  }
1405
1250
  }
1406
- ]
1251
+ ],
1252
+ "beginCaptures": {
1253
+ "1": {
1254
+ "name": "entity.name.function"
1255
+ }
1256
+ }
1407
1257
  },
1408
1258
  "module-item-type-bind-name-tyvars-body": {
1409
1259
  "begin": "(?=(\\G|^)[[:space:]]*\\b[[:alpha:]])",
@@ -1423,29 +1273,22 @@
1423
1273
  "module-item-type-bind-nonrec": {
1424
1274
  "begin": "(?:\\G|^)[[:space:]]*\\b(nonrec)\\b",
1425
1275
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1426
- "beginCaptures": {
1427
- "1": {
1428
- "name": "keyword.control storage.modifier message.error"
1429
- }
1430
- },
1431
1276
  "patterns": [
1432
1277
  {
1433
1278
  "include": "#module-item-type-bind-name-tyvars-body"
1434
1279
  }
1435
- ]
1280
+ ],
1281
+ "beginCaptures": {
1282
+ "1": {
1283
+ "name": "keyword.control storage.modifier message.error"
1284
+ }
1285
+ }
1436
1286
  },
1437
1287
  "module-item-type-constraint": {
1438
- "comment": "FIXME: proper parsing",
1439
1288
  "begin": "\\b(constraint)\\b",
1440
1289
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1441
- "beginCaptures": {
1442
- "1": {
1443
- "name": "variable.other.class.js variable.interpolation storage.modifier message.error"
1444
- }
1445
- },
1446
1290
  "patterns": [
1447
1291
  {
1448
- "comment": "FIXME: add separate type-variable rule",
1449
1292
  "match": "([+\\-])?(')([_[:lower:]][[:word:]]*)\\b(?!\\.[[:upper:]])",
1450
1293
  "captures": {
1451
1294
  "1": {
@@ -1460,28 +1303,152 @@
1460
1303
  }
1461
1304
  },
1462
1305
  {
1463
- "match": "=",
1464
- "name": "keyword.control.less"
1306
+ "name": "keyword.control.less",
1307
+ "match": "="
1465
1308
  },
1466
1309
  {
1467
1310
  "include": "#type-expression"
1468
1311
  }
1312
+ ],
1313
+ "beginCaptures": {
1314
+ "1": {
1315
+ "name": "variable.other.class.js variable.interpolation storage.modifier message.error"
1316
+ }
1317
+ }
1318
+ },
1319
+ "module-name-extended": {
1320
+ "patterns": [
1321
+ {
1322
+ "include": "#module-name-simple"
1323
+ },
1324
+ {
1325
+ "begin": "([\\(])",
1326
+ "end": "([\\)])",
1327
+ "patterns": [
1328
+ {
1329
+ "include": "#module-path-extended"
1330
+ }
1331
+ ],
1332
+ "captures": {
1333
+ "1": {
1334
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
1335
+ }
1336
+ }
1337
+ }
1469
1338
  ]
1470
1339
  },
1471
- "object-item": {
1472
- "begin": "\\G|(;)",
1473
- "end": "(?=[;}]|\\b(class|constraint|exception|external|include|let|module|nonrec|open|private|type|val|with)\\b)",
1474
- "beginCaptures": {
1340
+ "module-name-simple": {
1341
+ "name": "support.class entity.name.class",
1342
+ "match": "\\b[[:upper:]][[:word:]]*\\b"
1343
+ },
1344
+ "module-path-extended": {
1345
+ "patterns": [
1346
+ {
1347
+ "include": "#module-name-extended"
1348
+ },
1349
+ {
1350
+ "include": "#comment"
1351
+ },
1352
+ {
1353
+ "begin": "([\\.])",
1354
+ "end": "(?\u003c=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
1355
+ "patterns": [
1356
+ {
1357
+ "begin": "(?\u003c=[\\.])",
1358
+ "end": "(?\u003c=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
1359
+ "patterns": [
1360
+ {
1361
+ "include": "#comment"
1362
+ },
1363
+ {
1364
+ "include": "#module-name-extended"
1365
+ }
1366
+ ]
1367
+ }
1368
+ ],
1369
+ "beginCaptures": {
1370
+ "1": {
1371
+ "name": "keyword.control.less"
1372
+ }
1373
+ }
1374
+ }
1375
+ ]
1376
+ },
1377
+ "module-path-extended-prefix": {
1378
+ "begin": "(?=\\b[[:upper:]])",
1379
+ "end": "([\\.])|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1380
+ "patterns": [
1381
+ {
1382
+ "include": "#module-path-extended"
1383
+ }
1384
+ ],
1385
+ "endCaptures": {
1475
1386
  "1": {
1476
1387
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1477
1388
  }
1478
- },
1389
+ }
1390
+ },
1391
+ "module-path-simple": {
1479
1392
  "patterns": [
1480
1393
  {
1481
- "include": "#class-item-method"
1394
+ "include": "#module-name-simple"
1395
+ },
1396
+ {
1397
+ "include": "#comment"
1398
+ },
1399
+ {
1400
+ "begin": "([\\.])",
1401
+ "end": "(?\u003c=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
1402
+ "patterns": [
1403
+ {
1404
+ "begin": "(?\u003c=[\\.])",
1405
+ "end": "(?\u003c=[[:word:]\\)])|(?=[^\\.[:upper:]/])",
1406
+ "patterns": [
1407
+ {
1408
+ "include": "#comment"
1409
+ },
1410
+ {
1411
+ "include": "#module-name-simple"
1412
+ }
1413
+ ]
1414
+ }
1415
+ ],
1416
+ "beginCaptures": {
1417
+ "1": {
1418
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1419
+ }
1420
+ }
1482
1421
  }
1483
1422
  ]
1484
1423
  },
1424
+ "module-path-simple-prefix": {
1425
+ "begin": "(?=\\b[[:upper:]])",
1426
+ "end": "([\\.])|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1427
+ "patterns": [
1428
+ {
1429
+ "include": "#module-path-simple"
1430
+ }
1431
+ ],
1432
+ "endCaptures": {
1433
+ "1": {
1434
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1435
+ }
1436
+ }
1437
+ },
1438
+ "object-item": {
1439
+ "begin": "\\G|(;)",
1440
+ "end": "(?=[;}]|\\b(class|constraint|exception|external|include|let|module|nonrec|open|private|type|val|with)\\b)",
1441
+ "patterns": [
1442
+ {
1443
+ "include": "#class-item-method"
1444
+ }
1445
+ ],
1446
+ "beginCaptures": {
1447
+ "1": {
1448
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1449
+ }
1450
+ }
1451
+ },
1485
1452
  "operator": {
1486
1453
  "patterns": [
1487
1454
  {
@@ -1495,8 +1462,8 @@
1495
1462
  "operator-infix": {
1496
1463
  "patterns": [
1497
1464
  {
1498
- "match": ";",
1499
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1465
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error",
1466
+ "match": ";"
1500
1467
  },
1501
1468
  {
1502
1469
  "include": "#operator-infix-assign"
@@ -1507,25 +1474,21 @@
1507
1474
  {
1508
1475
  "include": "#operator-infix-custom"
1509
1476
  },
1510
- {
1511
- "comment": "#operator-infix-custom-hash"
1512
- }
1477
+ {}
1513
1478
  ]
1514
1479
  },
1515
1480
  "operator-infix-assign": {
1516
- "match": "(?<![#\\-:!?.@*/&%^+<=>|~$\\\\])(=)(?![#\\-:!?.@*/&%^+<=>|~$\\\\])",
1517
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control.less message.error"
1481
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control.less message.error",
1482
+ "match": "(?\u003c![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])(=)(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])"
1518
1483
  },
1519
1484
  "operator-infix-builtin": {
1520
- "match": ":=",
1521
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control.less message.error"
1485
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control.less message.error",
1486
+ "match": ":="
1522
1487
  },
1523
1488
  "operator-infix-custom": {
1524
- "match": "(?:(?<![#\\-:!?.@*/&%^+<=>|~$\\\\])((<>))(?![#\\-:!?.@*/&%^+<=>|~$\\\\]))|([#\\-@*/&%^+<=>$\\\\][#\\-:!?.@*/&%^+<=>|~$\\\\]*|[|][#\\-:!?.@*/&%^+<=>|~$\\\\]+)",
1489
+ "match": "(?:(?\u003c![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])((\u003c\u003e))(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]))|([#\\-@*/\u0026%^+\u003c=\u003e$\\\\][#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]*|[|][#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]+)",
1525
1490
  "captures": {
1526
- "1": {
1527
- "comment": "meta.separator"
1528
- },
1491
+ "1": {},
1529
1492
  "2": {
1530
1493
  "name": "punctuation.definition.tag.begin.js"
1531
1494
  },
@@ -1535,8 +1498,8 @@
1535
1498
  }
1536
1499
  },
1537
1500
  "operator-infix-custom-hash": {
1538
- "match": "#[\\-:!?.@*/&%^+<=>|~$]+",
1539
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1501
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error",
1502
+ "match": "#[\\-:!?.@*/\u0026%^+\u003c=\u003e|~$]+"
1540
1503
  },
1541
1504
  "operator-prefix": {
1542
1505
  "patterns": [
@@ -1549,12 +1512,12 @@
1549
1512
  ]
1550
1513
  },
1551
1514
  "operator-prefix-bang": {
1552
- "match": "![\\-:!?.@*/&%^+<=>|~$]*",
1553
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1515
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error",
1516
+ "match": "![\\-:!?.@*/\u0026%^+\u003c=\u003e|~$]*"
1554
1517
  },
1555
1518
  "operator-prefix-label-token": {
1556
- "match": "[?~][\\-:!?.@*/&%^+<=>|~$]+",
1557
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1519
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error",
1520
+ "match": "[?~][\\-:!?.@*/\u0026%^+\u003c=\u003e|~$]+"
1558
1521
  },
1559
1522
  "pattern": {
1560
1523
  "patterns": [
@@ -1568,7 +1531,7 @@
1568
1531
  "include": "#pattern-atomic"
1569
1532
  },
1570
1533
  {
1571
- "match": "[[:space:]]*+(?:(\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\]))|\\b(as)\\b|(\\.\\.\\.?))[[:space:]]*+",
1534
+ "match": "[[:space:]]*+(?:(\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]))|\\b(as)\\b|(\\.\\.\\.?))[[:space:]]*+",
1572
1535
  "captures": {
1573
1536
  "1": {
1574
1537
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
@@ -1586,8 +1549,8 @@
1586
1549
  "pattern-atomic": {
1587
1550
  "patterns": [
1588
1551
  {
1589
- "match": "\\b(exception)\\b",
1590
- "name": "keyword.other"
1552
+ "name": "keyword.other",
1553
+ "match": "\\b(exception)\\b"
1591
1554
  },
1592
1555
  {
1593
1556
  "include": "#value-expression-literal"
@@ -1611,63 +1574,141 @@
1611
1574
  },
1612
1575
  "pattern-guard": {
1613
1576
  "begin": "\\b(when)\\b",
1614
- "end": "(?==>)",
1577
+ "end": "(?==\u003e)",
1578
+ "patterns": [
1579
+ {
1580
+ "include": "#value-expression"
1581
+ }
1582
+ ],
1615
1583
  "beginCaptures": {
1616
1584
  "1": {
1617
1585
  "name": "keyword.other"
1618
1586
  }
1587
+ }
1588
+ },
1589
+ "pattern-list-or-array": {
1590
+ "begin": "(\\[\\|?)(?![@%])",
1591
+ "end": "(\\|?\\])",
1592
+ "patterns": [
1593
+ {
1594
+ "include": "#value-expression-literal-list-or-array-separator"
1595
+ },
1596
+ {
1597
+ "include": "#pattern"
1598
+ }
1599
+ ],
1600
+ "beginCaptures": {
1601
+ "1": {
1602
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
1603
+ }
1619
1604
  },
1605
+ "endCaptures": {
1606
+ "1": {
1607
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
1608
+ }
1609
+ }
1610
+ },
1611
+ "pattern-parens": {
1612
+ "begin": "(?=\\()",
1613
+ "end": "\\)|(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1620
1614
  "patterns": [
1621
1615
  {
1622
- "include": "#value-expression"
1616
+ "include": "#pattern-parens-lhs"
1617
+ },
1618
+ {
1619
+ "include": "#type-annotation-rhs"
1623
1620
  }
1624
1621
  ]
1625
1622
  },
1626
- "pattern-list-or-array": {
1627
- "begin": "(\\[\\|?)(?![@%])",
1628
- "end": "(\\|?\\])",
1623
+ "pattern-parens-lhs": {
1624
+ "begin": "\\(|(,)",
1625
+ "end": "(?=(?:[,:\\)]))|(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1626
+ "patterns": [
1627
+ {
1628
+ "include": "#pattern"
1629
+ }
1630
+ ],
1629
1631
  "beginCaptures": {
1630
1632
  "1": {
1631
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
1633
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1634
+ }
1635
+ }
1636
+ },
1637
+ "pattern-record": {
1638
+ "begin": "{",
1639
+ "end": "}",
1640
+ "patterns": [
1641
+ {
1642
+ "include": "#comment"
1643
+ },
1644
+ {
1645
+ "include": "#pattern-record-item"
1646
+ }
1647
+ ]
1648
+ },
1649
+ "pattern-record-field": {
1650
+ "begin": "\\b([_][[:word:]]*)\\b|\\b([[:lower:]][[:word:]]*)\\b",
1651
+ "end": "(,)|(?=})",
1652
+ "patterns": [
1653
+ {
1654
+ "include": "#comment"
1655
+ },
1656
+ {
1657
+ "begin": "\\G(:)",
1658
+ "end": "(?=[,}])",
1659
+ "patterns": [
1660
+ {
1661
+ "include": "#pattern"
1662
+ }
1663
+ ],
1664
+ "beginCaptures": {
1665
+ "1": {
1666
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1667
+ }
1668
+ }
1669
+ }
1670
+ ],
1671
+ "beginCaptures": {
1672
+ "1": {
1673
+ "name": "comment"
1674
+ },
1675
+ "2": {
1676
+ "name": "markup.inserted constant.language support.property-value entity.name.filename"
1632
1677
  }
1633
1678
  },
1634
1679
  "endCaptures": {
1635
1680
  "1": {
1636
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
1681
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1637
1682
  }
1638
- },
1683
+ }
1684
+ },
1685
+ "pattern-record-item": {
1639
1686
  "patterns": [
1640
1687
  {
1641
- "include": "#value-expression-literal-list-or-array-separator"
1688
+ "include": "#module-path-simple-prefix"
1642
1689
  },
1643
1690
  {
1644
- "include": "#pattern"
1691
+ "include": "#pattern-record-field"
1645
1692
  }
1646
1693
  ]
1647
1694
  },
1648
- "pattern-parens": {
1649
- "begin": "(?=\\()",
1650
- "end": "\\)|(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1695
+ "pattern-variable": {
1651
1696
  "patterns": [
1652
1697
  {
1653
- "include": "#pattern-parens-lhs"
1698
+ "match": "\\b(_(?:[[:lower:]][[:word:]]*)?)\\b(?!\\.[[:upper:]])",
1699
+ "captures": {
1700
+ "1": {
1701
+ "name": "comment"
1702
+ }
1703
+ }
1654
1704
  },
1655
1705
  {
1656
- "include": "#type-annotation-rhs"
1657
- }
1658
- ]
1659
- },
1660
- "pattern-parens-lhs": {
1661
- "begin": "\\(|(,)",
1662
- "end": "(?=(?:[,:\\)]))|(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1663
- "beginCaptures": {
1664
- "1": {
1665
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1666
- }
1667
- },
1668
- "patterns": [
1669
- {
1670
- "include": "#pattern"
1706
+ "match": "\\b([[:lower:]][[:word:]]*)\\b(?!\\.[[:upper:]])",
1707
+ "captures": {
1708
+ "1": {
1709
+ "name": "variable.language string.other.link"
1710
+ }
1711
+ }
1671
1712
  }
1672
1713
  ]
1673
1714
  },
@@ -1686,22 +1727,6 @@
1686
1727
  "record-path-suffix": {
1687
1728
  "begin": "(\\.)",
1688
1729
  "end": "(\\))|\\b([[:upper:]][[:word:]]*)\\b|\\b([[:lower:]][[:word:]]*)\\b|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|with)\\b)",
1689
- "beginCaptures": {
1690
- "1": {
1691
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1692
- }
1693
- },
1694
- "endCaptures": {
1695
- "1": {
1696
- "name": "keyword.control"
1697
- },
1698
- "2": {
1699
- "name": "support.class entity.name.class"
1700
- },
1701
- "3": {
1702
- "name": "markup.inserted constant.language support.property-value entity.name.filename"
1703
- }
1704
- },
1705
1730
  "patterns": [
1706
1731
  {
1707
1732
  "include": "#comment"
@@ -1709,11 +1734,6 @@
1709
1734
  {
1710
1735
  "begin": "([\\(])",
1711
1736
  "end": "(?=[\\)])",
1712
- "beginCaptures": {
1713
- "1": {
1714
- "name": "keyword.control"
1715
- }
1716
- },
1717
1737
  "patterns": [
1718
1738
  {
1719
1739
  "include": "#comment"
@@ -1730,8 +1750,8 @@
1730
1750
  }
1731
1751
  },
1732
1752
  {
1733
- "match": "([\\.])",
1734
- "name": "keyword.control.less"
1753
+ "name": "keyword.control.less",
1754
+ "match": "([\\.])"
1735
1755
  },
1736
1756
  {
1737
1757
  "match": "\\b([[:lower:]][[:word:]]*)\\b[[:space:]]*",
@@ -1744,98 +1764,40 @@
1744
1764
  {
1745
1765
  "include": "#value-expression"
1746
1766
  }
1747
- ]
1748
- }
1749
- ]
1750
- },
1751
- "pattern-record": {
1752
- "begin": "{",
1753
- "end": "}",
1754
- "patterns": [
1755
- {
1756
- "include": "#comment"
1757
- },
1758
- {
1759
- "include": "#pattern-record-item"
1767
+ ],
1768
+ "beginCaptures": {
1769
+ "1": {
1770
+ "name": "keyword.control"
1771
+ }
1772
+ }
1760
1773
  }
1761
- ]
1762
- },
1763
- "pattern-record-field": {
1764
- "begin": "\\b([_][[:word:]]*)\\b|\\b([[:lower:]][[:word:]]*)\\b",
1765
- "end": "(,)|(?=})",
1774
+ ],
1766
1775
  "beginCaptures": {
1767
1776
  "1": {
1768
- "name": "comment"
1769
- },
1770
- "2": {
1771
- "name": "markup.inserted constant.language support.property-value entity.name.filename"
1777
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1772
1778
  }
1773
1779
  },
1774
1780
  "endCaptures": {
1775
1781
  "1": {
1776
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1777
- }
1778
- },
1779
- "patterns": [
1780
- {
1781
- "include": "#comment"
1782
- },
1783
- {
1784
- "begin": "\\G(:)",
1785
- "end": "(?=[,}])",
1786
- "beginCaptures": {
1787
- "1": {
1788
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1789
- }
1790
- },
1791
- "patterns": [
1792
- {
1793
- "include": "#pattern"
1794
- }
1795
- ]
1796
- }
1797
- ]
1798
- },
1799
- "pattern-record-item": {
1800
- "patterns": [
1801
- {
1802
- "include": "#module-path-simple-prefix"
1782
+ "name": "keyword.control"
1803
1783
  },
1804
- {
1805
- "include": "#pattern-record-field"
1806
- }
1807
- ]
1808
- },
1809
- "pattern-variable": {
1810
- "patterns": [
1811
- {
1812
- "match": "\\b(_(?:[[:lower:]][[:word:]]*)?)\\b(?!\\.[[:upper:]])",
1813
- "captures": {
1814
- "1": {
1815
- "name": "comment"
1816
- }
1817
- }
1784
+ "2": {
1785
+ "name": "support.class entity.name.class"
1818
1786
  },
1819
- {
1820
- "match": "\\b([[:lower:]][[:word:]]*)\\b(?!\\.[[:upper:]])",
1821
- "captures": {
1822
- "1": {
1823
- "name": "variable.language string.other.link"
1824
- }
1825
- }
1787
+ "3": {
1788
+ "name": "markup.inserted constant.language support.property-value entity.name.filename"
1826
1789
  }
1827
- ]
1790
+ }
1828
1791
  },
1829
1792
  "signature-expression": {
1830
1793
  "patterns": [
1831
1794
  {
1832
- "comment": "FIXME: scan for :upper: to disambiguate type/signature in hover",
1833
1795
  "begin": "(?=\\([[:space:]]*[[:upper:]][[:word:]]*[[:space:]]*:)",
1834
1796
  "end": "(?=[;])",
1835
1797
  "patterns": [
1836
1798
  {
1837
1799
  "begin": "(?=\\()",
1838
- "end": "(?=[;]|=>)",
1800
+ "end": "(?=[;]|=\u003e)",
1839
1801
  "patterns": [
1840
1802
  {
1841
1803
  "include": "#module-item-let-module-param"
@@ -1843,24 +1805,36 @@
1843
1805
  ]
1844
1806
  },
1845
1807
  {
1846
- "begin": "(=>)",
1808
+ "begin": "(=\u003e)",
1847
1809
  "end": "(?=[;\\(])",
1848
- "beginCaptures": {
1849
- "1": {
1850
- "name": "markup.inserted keyword.control.less"
1851
- }
1852
- },
1853
1810
  "patterns": [
1854
1811
  {
1855
1812
  "include": "#structure-expression"
1856
1813
  }
1857
- ]
1814
+ ],
1815
+ "beginCaptures": {
1816
+ "1": {
1817
+ "name": "markup.inserted keyword.control.less"
1818
+ }
1819
+ }
1858
1820
  }
1859
1821
  ]
1860
1822
  },
1861
1823
  {
1862
1824
  "begin": "\\b(module)\\b[[:space:]]*\\b(type)\\b([[:space:]]*\\b(of)\\b)?",
1863
1825
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
1826
+ "patterns": [
1827
+ {
1828
+ "include": "#comment"
1829
+ },
1830
+ {
1831
+ "include": "#module-path-simple"
1832
+ },
1833
+ {
1834
+ "name": "support.class entity.name.class",
1835
+ "match": "\\b([[:upper:]][[:word:]]*)\\b"
1836
+ }
1837
+ ],
1864
1838
  "beginCaptures": {
1865
1839
  "1": {
1866
1840
  "name": "markup.inserted keyword.other variable.other.readwrite.instance"
@@ -1871,19 +1845,7 @@
1871
1845
  "3": {
1872
1846
  "name": "markup.inserted keyword.other variable.other.readwrite.instance"
1873
1847
  }
1874
- },
1875
- "patterns": [
1876
- {
1877
- "include": "#comment"
1878
- },
1879
- {
1880
- "include": "#module-path-simple"
1881
- },
1882
- {
1883
- "match": "\\b([[:upper:]][[:word:]]*)\\b",
1884
- "name": "support.class entity.name.class"
1885
- }
1886
- ]
1848
+ }
1887
1849
  },
1888
1850
  {
1889
1851
  "include": "#signature-expression-constraints"
@@ -1900,24 +1862,13 @@
1900
1862
  {
1901
1863
  "begin": "\\b(and|with)\\b",
1902
1864
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|val|with)\\b)",
1903
- "beginCaptures": {
1904
- "1": {
1905
- "name": "variable.other.class.js variable.interpolation storage.modifier message.error"
1906
- }
1907
- },
1908
1865
  "patterns": [
1909
1866
  {
1910
1867
  "include": "#comment"
1911
1868
  },
1912
1869
  {
1913
- "comment": "FIXME: special version of #module-item-type with non-consuming `;`. Atom seems to need this to work.",
1914
1870
  "begin": "\\b(type)\\b",
1915
1871
  "end": "(?=[;\\)}]|\\b(class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|val|with)\\b)",
1916
- "beginCaptures": {
1917
- "1": {
1918
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
1919
- }
1920
- },
1921
1872
  "patterns": [
1922
1873
  {
1923
1874
  "include": "#module-item-type-and"
@@ -1928,7 +1879,12 @@
1928
1879
  {
1929
1880
  "include": "#module-item-type-bind"
1930
1881
  }
1931
- ]
1882
+ ],
1883
+ "beginCaptures": {
1884
+ "1": {
1885
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
1886
+ }
1887
+ }
1932
1888
  },
1933
1889
  {
1934
1890
  "begin": "(?=\\b(module)\\b)",
@@ -1937,11 +1893,6 @@
1937
1893
  {
1938
1894
  "begin": "\\b(module)\\b",
1939
1895
  "end": "(?=:?=|[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
1940
- "beginCaptures": {
1941
- "1": {
1942
- "name": "markup.inserted keyword.control storage.type variable.other.readwrite.instance"
1943
- }
1944
- },
1945
1896
  "patterns": [
1946
1897
  {
1947
1898
  "include": "#comment"
@@ -1950,14 +1901,24 @@
1950
1901
  "include": "#module-path-simple"
1951
1902
  },
1952
1903
  {
1953
- "match": "[[:upper:]][[:word:]]*",
1954
- "name": "support.class entity.name.class"
1904
+ "name": "support.class entity.name.class",
1905
+ "match": "[[:upper:]][[:word:]]*"
1906
+ }
1907
+ ],
1908
+ "beginCaptures": {
1909
+ "1": {
1910
+ "name": "markup.inserted keyword.control storage.type variable.other.readwrite.instance"
1955
1911
  }
1956
- ]
1912
+ }
1957
1913
  },
1958
1914
  {
1959
1915
  "begin": "(:=)|(=)",
1960
1916
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|type|val|with)\\b)",
1917
+ "patterns": [
1918
+ {
1919
+ "include": "#structure-expression"
1920
+ }
1921
+ ],
1961
1922
  "beginCaptures": {
1962
1923
  "1": {
1963
1924
  "name": "markup.inserted keyword.control.less message.error"
@@ -1965,16 +1926,16 @@
1965
1926
  "2": {
1966
1927
  "name": "markup.inserted keyword.control.less"
1967
1928
  }
1968
- },
1969
- "patterns": [
1970
- {
1971
- "include": "#structure-expression"
1972
- }
1973
- ]
1929
+ }
1974
1930
  }
1975
1931
  ]
1976
1932
  }
1977
- ]
1933
+ ],
1934
+ "beginCaptures": {
1935
+ "1": {
1936
+ "name": "variable.other.class.js variable.interpolation storage.modifier message.error"
1937
+ }
1938
+ }
1978
1939
  }
1979
1940
  ]
1980
1941
  },
@@ -1984,34 +1945,32 @@
1984
1945
  "include": "#comment"
1985
1946
  },
1986
1947
  {
1987
- "comment": "FIXME: scan for :upper: or `val` to disambiguate types from signatures for hover",
1988
- "begin": "\\((?=[[:space:]]*(\\b(val)\\b|[^'\\[<[:lower:]]))",
1948
+ "begin": "\\((?=[[:space:]]*(\\b(val)\\b|[^'\\[\u003c[:lower:]]))",
1989
1949
  "end": "\\)|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|with)\\b)",
1990
1950
  "patterns": [
1991
1951
  {
1992
1952
  "include": "#comment"
1993
1953
  },
1994
1954
  {
1995
- "comment": "FIXME: might need to refactor this or include more expressions",
1996
1955
  "include": "#structure-expression-block"
1997
1956
  },
1998
1957
  {
1999
1958
  "begin": "\\b(val)\\b",
2000
1959
  "end": "(?=\\))|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2001
- "beginCaptures": {
2002
- "1": {
2003
- "name": "keyword.other"
2004
- }
2005
- },
2006
1960
  "patterns": [
2007
1961
  {
2008
1962
  "include": "#comment"
2009
1963
  },
2010
1964
  {
2011
- "match": "\\b([[:lower:]][[:word:]]*)\\b",
2012
- "name": "support.class entity.name.class"
1965
+ "name": "support.class entity.name.class",
1966
+ "match": "\\b([[:lower:]][[:word:]]*)\\b"
2013
1967
  }
2014
- ]
1968
+ ],
1969
+ "beginCaptures": {
1970
+ "1": {
1971
+ "name": "keyword.other"
1972
+ }
1973
+ }
2015
1974
  },
2016
1975
  {
2017
1976
  "include": "#module-path-simple"
@@ -2019,16 +1978,16 @@
2019
1978
  {
2020
1979
  "begin": "(:)",
2021
1980
  "end": "(?=[\\)])|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val)\\b)",
2022
- "beginCaptures": {
2023
- "1": {
2024
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2025
- }
2026
- },
2027
1981
  "patterns": [
2028
1982
  {
2029
1983
  "include": "#signature-expression"
2030
1984
  }
2031
- ]
1985
+ ],
1986
+ "beginCaptures": {
1987
+ "1": {
1988
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
1989
+ }
1990
+ }
2032
1991
  }
2033
1992
  ]
2034
1993
  },
@@ -2084,27 +2043,27 @@
2084
2043
  {
2085
2044
  "include": "#module-item-type"
2086
2045
  }
2087
- ]
2088
- },
2089
- "type-annotation-rhs": {
2090
- "begin": "(?<![#\\-:!?.@*/&%^+<=>|~$\\\\])([:])(?![#\\-:!?.@*/&%^+<=>|~$\\\\])",
2091
- "end": "(?=\\))|(?=[,;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2092
- "beginCaptures": {
2093
- "1": {
2094
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2095
- }
2096
- },
2046
+ ]
2047
+ },
2048
+ "type-annotation-rhs": {
2049
+ "begin": "(?\u003c![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])([:])(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])",
2050
+ "end": "(?=\\))|(?=[,;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2097
2051
  "patterns": [
2098
2052
  {
2099
2053
  "include": "#type-expression"
2100
2054
  }
2101
- ]
2055
+ ],
2056
+ "beginCaptures": {
2057
+ "1": {
2058
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2059
+ }
2060
+ }
2102
2061
  },
2103
2062
  "type-expression": {
2104
2063
  "patterns": [
2105
2064
  {
2106
- "match": "([\\.])",
2107
- "name": "entity.name.function"
2065
+ "name": "entity.name.function",
2066
+ "match": "([\\.])"
2108
2067
  },
2109
2068
  {
2110
2069
  "include": "#type-expression-atomic"
@@ -2114,6 +2073,10 @@
2114
2073
  }
2115
2074
  ]
2116
2075
  },
2076
+ "type-expression-arrow": {
2077
+ "name": "markup.inserted keyword.control.less",
2078
+ "match": "=\u003e"
2079
+ },
2117
2080
  "type-expression-atomic": {
2118
2081
  "patterns": [
2119
2082
  {
@@ -2129,8 +2092,8 @@
2129
2092
  "include": "#type-expression-label"
2130
2093
  },
2131
2094
  {
2132
- "match": "\\b(as)\\b",
2133
- "name": "variable.other.class.js variable.interpolation storage.modifier message.error"
2095
+ "name": "variable.other.class.js variable.interpolation storage.modifier message.error",
2096
+ "match": "\\b(as)\\b"
2134
2097
  },
2135
2098
  {
2136
2099
  "include": "#type-expression-constructor"
@@ -2152,10 +2115,6 @@
2152
2115
  }
2153
2116
  ]
2154
2117
  },
2155
- "type-expression-arrow": {
2156
- "match": "=>",
2157
- "name": "markup.inserted keyword.control.less"
2158
- },
2159
2118
  "type-expression-constructor": {
2160
2119
  "match": "(_)(?![[:alnum:]])|\\b([_[:lower:]][[:word:]]*)\\b(?!\\.[[:upper:]])",
2161
2120
  "captures": {
@@ -2169,15 +2128,7 @@
2169
2128
  },
2170
2129
  "type-expression-label": {
2171
2130
  "begin": "\\b([_[:lower:]][[:word:]]*)\\b(::)",
2172
- "end": "(?<==>)",
2173
- "beginCaptures": {
2174
- "1": {
2175
- "name": "markup.inserted constant.language support.property-value entity.name.filename"
2176
- },
2177
- "2": {
2178
- "name": "keyword.control"
2179
- }
2180
- },
2131
+ "end": "(?\u003c==\u003e)",
2181
2132
  "patterns": [
2182
2133
  {
2183
2134
  "include": "#type-expression"
@@ -2190,21 +2141,23 @@
2190
2141
  }
2191
2142
  }
2192
2143
  }
2193
- ]
2194
- },
2195
- "type-expression-object": {
2196
- "comment": "FIXME: separate sub-rules",
2197
- "begin": "(<)",
2198
- "end": "(>)",
2199
- "captures": {
2144
+ ],
2145
+ "beginCaptures": {
2200
2146
  "1": {
2201
- "name": "entity.name.function"
2147
+ "name": "markup.inserted constant.language support.property-value entity.name.filename"
2148
+ },
2149
+ "2": {
2150
+ "name": "keyword.control"
2202
2151
  }
2203
- },
2152
+ }
2153
+ },
2154
+ "type-expression-object": {
2155
+ "begin": "(\u003c)",
2156
+ "end": "(\u003e)",
2204
2157
  "patterns": [
2205
2158
  {
2206
2159
  "begin": "(\\.\\.)",
2207
- "end": "(?=>)",
2160
+ "end": "(?=\u003e)",
2208
2161
  "beginCaptures": {
2209
2162
  "1": {
2210
2163
  "name": "entity.other.attribute-name.css constant.language constant.numeric"
@@ -2212,17 +2165,10 @@
2212
2165
  }
2213
2166
  },
2214
2167
  {
2215
- "comment": "FIXME: method item",
2216
2168
  "begin": "(?=[_[:lower:]])",
2217
- "end": "(,)|(?=>)",
2218
- "endCaptures": {
2219
- "1": {
2220
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2221
- }
2222
- },
2169
+ "end": "(,)|(?=\u003e)",
2223
2170
  "patterns": [
2224
2171
  {
2225
- "comment": "FIXME: method name",
2226
2172
  "begin": "(?=[_[:lower:]])",
2227
2173
  "end": "(?=:)",
2228
2174
  "patterns": [
@@ -2237,37 +2183,40 @@
2237
2183
  ]
2238
2184
  },
2239
2185
  {
2240
- "comment": "FIXME: method type",
2241
2186
  "begin": "(:)",
2242
- "end": "(?=[,>])",
2243
- "beginCaptures": {
2244
- "1": {
2245
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2246
- }
2247
- },
2187
+ "end": "(?=[,\u003e])",
2248
2188
  "patterns": [
2249
2189
  {
2250
2190
  "include": "#type-expression"
2251
2191
  }
2252
- ]
2192
+ ],
2193
+ "beginCaptures": {
2194
+ "1": {
2195
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2196
+ }
2197
+ }
2253
2198
  }
2254
- ]
2199
+ ],
2200
+ "endCaptures": {
2201
+ "1": {
2202
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2203
+ }
2204
+ }
2255
2205
  }
2256
- ]
2206
+ ],
2207
+ "captures": {
2208
+ "1": {
2209
+ "name": "entity.name.function"
2210
+ }
2211
+ }
2257
2212
  },
2258
2213
  "type-expression-parens": {
2259
- "comment": "FIXME: proper tuple types",
2260
2214
  "begin": "\\(",
2261
2215
  "end": "\\)",
2262
2216
  "patterns": [
2263
2217
  {
2264
2218
  "begin": "\\b(module)\\b",
2265
2219
  "end": "(?=[\\)])",
2266
- "beginCaptures": {
2267
- "1": {
2268
- "name": "keyword.other message.error"
2269
- }
2270
- },
2271
2220
  "patterns": [
2272
2221
  {
2273
2222
  "include": "#module-path-extended"
@@ -2275,11 +2224,16 @@
2275
2224
  {
2276
2225
  "include": "#signature-expression-constraints"
2277
2226
  }
2278
- ]
2227
+ ],
2228
+ "beginCaptures": {
2229
+ "1": {
2230
+ "name": "keyword.other message.error"
2231
+ }
2232
+ }
2279
2233
  },
2280
2234
  {
2281
- "match": ",",
2282
- "name": "keyword.control.less"
2235
+ "name": "keyword.control.less",
2236
+ "match": ","
2283
2237
  },
2284
2238
  {
2285
2239
  "include": "#type-expression"
@@ -2287,32 +2241,18 @@
2287
2241
  ]
2288
2242
  },
2289
2243
  "type-expression-polymorphic-variant": {
2290
- "comment": "FIXME: proper parsing",
2291
- "begin": "(\\[)([<>])?",
2244
+ "begin": "(\\[)([\u003c\u003e])?",
2292
2245
  "end": "(\\])",
2293
- "captures": {
2294
- "1": {
2295
- "name": "entity.name.function"
2296
- },
2297
- "2": {
2298
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2299
- }
2300
- },
2301
2246
  "patterns": [
2302
2247
  {
2303
- "begin": "(\\|)?(?![#\\-:!?.@*/&%^+<=>|~$\\\\])[[:space:]]*",
2304
- "end": "(?=[;)}\\]]|\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\])|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2305
- "beginCaptures": {
2306
- "1": {
2307
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2308
- }
2309
- },
2248
+ "begin": "(\\|)?(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])[[:space:]]*",
2249
+ "end": "(?=[;)}\\]]|\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2310
2250
  "patterns": [
2311
2251
  {
2312
2252
  "include": "#value-expression-constructor"
2313
2253
  },
2314
2254
  {
2315
- "match": "([:])|\\b(of)\\b|([&])",
2255
+ "match": "([:])|\\b(of)\\b|([\u0026])",
2316
2256
  "captures": {
2317
2257
  "1": {
2318
2258
  "name": "keyword.control.less"
@@ -2331,9 +2271,22 @@
2331
2271
  {
2332
2272
  "include": "#type-expression"
2333
2273
  }
2334
- ]
2274
+ ],
2275
+ "beginCaptures": {
2276
+ "1": {
2277
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2278
+ }
2279
+ }
2335
2280
  }
2336
- ]
2281
+ ],
2282
+ "captures": {
2283
+ "1": {
2284
+ "name": "entity.name.function"
2285
+ },
2286
+ "2": {
2287
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2288
+ }
2289
+ }
2337
2290
  },
2338
2291
  "type-expression-record": {
2339
2292
  "begin": "{",
@@ -2344,19 +2297,30 @@
2344
2297
  }
2345
2298
  ]
2346
2299
  },
2300
+ "type-expression-record-field": {
2301
+ "patterns": [
2302
+ {
2303
+ "begin": "\\b(mutable)\\b",
2304
+ "end": "(?\u003c=[,])|(?=})",
2305
+ "patterns": [
2306
+ {
2307
+ "include": "#type-expression-record-field-sans-modifier"
2308
+ }
2309
+ ],
2310
+ "beginCaptures": {
2311
+ "1": {
2312
+ "name": "variable.other.class.js variable.interpolation storage.modifier message.error"
2313
+ }
2314
+ }
2315
+ },
2316
+ {
2317
+ "include": "#type-expression-record-field-sans-modifier"
2318
+ }
2319
+ ]
2320
+ },
2347
2321
  "type-expression-record-field-sans-modifier": {
2348
2322
  "begin": "\\b([_[:lower:]][[:word:]]*)\\b",
2349
2323
  "end": "(,)|(?=[,}])",
2350
- "beginCaptures": {
2351
- "1": {
2352
- "name": "markup.inserted constant.language support.property-value entity.name.filename"
2353
- }
2354
- },
2355
- "endCaptures": {
2356
- "1": {
2357
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2358
- }
2359
- },
2360
2324
  "patterns": [
2361
2325
  {
2362
2326
  "include": "#comment"
@@ -2364,39 +2328,28 @@
2364
2328
  {
2365
2329
  "begin": "(:)",
2366
2330
  "end": "(?=[,}])",
2367
- "beginCaptures": {
2368
- "1": {
2369
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2370
- }
2371
- },
2372
2331
  "patterns": [
2373
2332
  {
2374
2333
  "include": "#type-expression"
2375
2334
  }
2376
- ]
2377
- }
2378
- ]
2379
- },
2380
- "type-expression-record-field": {
2381
- "patterns": [
2382
- {
2383
- "begin": "\\b(mutable)\\b",
2384
- "end": "(?<=[,])|(?=})",
2335
+ ],
2385
2336
  "beginCaptures": {
2386
2337
  "1": {
2387
- "name": "variable.other.class.js variable.interpolation storage.modifier message.error"
2388
- }
2389
- },
2390
- "patterns": [
2391
- {
2392
- "include": "#type-expression-record-field-sans-modifier"
2338
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2393
2339
  }
2394
- ]
2395
- },
2396
- {
2397
- "include": "#type-expression-record-field-sans-modifier"
2340
+ }
2398
2341
  }
2399
- ]
2342
+ ],
2343
+ "beginCaptures": {
2344
+ "1": {
2345
+ "name": "markup.inserted constant.language support.property-value entity.name.filename"
2346
+ }
2347
+ },
2348
+ "endCaptures": {
2349
+ "1": {
2350
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2351
+ }
2352
+ }
2400
2353
  },
2401
2354
  "type-expression-record-item": {
2402
2355
  "patterns": [
@@ -2452,8 +2405,8 @@
2452
2405
  "include": "#module-path-simple-prefix"
2453
2406
  },
2454
2407
  {
2455
- "match": "[:?]",
2456
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2408
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error",
2409
+ "match": "[:?]"
2457
2410
  },
2458
2411
  {
2459
2412
  "include": "#record-path"
@@ -2591,7 +2544,7 @@
2591
2544
  },
2592
2545
  "value-expression-for": {
2593
2546
  "begin": "(?=\\b(for)\\b)",
2594
- "end": "(?<=})|(?=[;]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
2547
+ "end": "(?\u003c=})|(?=[;]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
2595
2548
  "patterns": [
2596
2549
  {
2597
2550
  "include": "#value-expression-for-head"
@@ -2608,11 +2561,6 @@
2608
2561
  {
2609
2562
  "begin": "\\b(for)\\b",
2610
2563
  "end": "(?=\\b(in)\\b)|(?=[;]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
2611
- "beginCaptures": {
2612
- "1": {
2613
- "name": "keyword.control.loop"
2614
- }
2615
- },
2616
2564
  "patterns": [
2617
2565
  {
2618
2566
  "include": "#comment"
@@ -2620,16 +2568,16 @@
2620
2568
  {
2621
2569
  "include": "#pattern-variable"
2622
2570
  }
2623
- ]
2624
- },
2625
- {
2626
- "begin": "\\b(in)\\b",
2627
- "end": "(?=\\b(to)\\b)|(?=[;]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
2571
+ ],
2628
2572
  "beginCaptures": {
2629
2573
  "1": {
2630
2574
  "name": "keyword.control.loop"
2631
2575
  }
2632
- },
2576
+ }
2577
+ },
2578
+ {
2579
+ "begin": "\\b(in)\\b",
2580
+ "end": "(?=\\b(to)\\b)|(?=[;]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
2633
2581
  "patterns": [
2634
2582
  {
2635
2583
  "include": "#comment"
@@ -2637,16 +2585,16 @@
2637
2585
  {
2638
2586
  "include": "#value-expression-atomic-with-paths"
2639
2587
  }
2640
- ]
2641
- },
2642
- {
2643
- "begin": "\\b(to)\\b",
2644
- "end": "(?={)|(?=[;]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
2588
+ ],
2645
2589
  "beginCaptures": {
2646
2590
  "1": {
2647
2591
  "name": "keyword.control.loop"
2648
2592
  }
2649
- },
2593
+ }
2594
+ },
2595
+ {
2596
+ "begin": "\\b(to)\\b",
2597
+ "end": "(?={)|(?=[;]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
2650
2598
  "patterns": [
2651
2599
  {
2652
2600
  "include": "#comment"
@@ -2654,7 +2602,12 @@
2654
2602
  {
2655
2603
  "include": "#value-expression-atomic-with-paths"
2656
2604
  }
2657
- ]
2605
+ ],
2606
+ "beginCaptures": {
2607
+ "1": {
2608
+ "name": "keyword.control.loop"
2609
+ }
2610
+ }
2658
2611
  },
2659
2612
  {
2660
2613
  "include": "#value-expression-block"
@@ -2664,11 +2617,6 @@
2664
2617
  "value-expression-fun": {
2665
2618
  "begin": "\\b(fun)\\b",
2666
2619
  "end": "(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2667
- "beginCaptures": {
2668
- "1": {
2669
- "name": "keyword.control"
2670
- }
2671
- },
2672
2620
  "patterns": [
2673
2621
  {
2674
2622
  "include": "#value-expression-fun-pattern-match-rule-lhs"
@@ -2676,12 +2624,21 @@
2676
2624
  {
2677
2625
  "include": "#value-expression-fun-pattern-match-rule-rhs"
2678
2626
  }
2679
- ]
2627
+ ],
2628
+ "beginCaptures": {
2629
+ "1": {
2630
+ "name": "keyword.control"
2631
+ }
2632
+ }
2680
2633
  },
2681
2634
  "value-expression-fun-pattern-match-rule-lhs": {
2682
- "begin": "(?=\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\]))|(?<=fun)",
2683
- "end": "(\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\]))|(?==>)|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2684
- "applyEndPatternLast": true,
2635
+ "begin": "(?=\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]))|(?\u003c=fun)",
2636
+ "end": "(\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]))|(?==\u003e)|(?=[;\\)}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
2637
+ "patterns": [
2638
+ {
2639
+ "include": "#module-item-let-value-param"
2640
+ }
2641
+ ],
2685
2642
  "beginCaptures": {
2686
2643
  "1": {
2687
2644
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
@@ -2692,35 +2649,25 @@
2692
2649
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
2693
2650
  }
2694
2651
  },
2652
+ "applyEndPatternLast": true
2653
+ },
2654
+ "value-expression-fun-pattern-match-rule-rhs": {
2655
+ "begin": "(=\u003e)",
2656
+ "end": "(?=[;\\)}]|\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\])|\\b(and)\\b)",
2695
2657
  "patterns": [
2696
2658
  {
2697
- "include": "#module-item-let-value-param"
2659
+ "include": "#value-expression"
2698
2660
  }
2699
- ]
2700
- },
2701
- "value-expression-fun-pattern-match-rule-rhs": {
2702
- "begin": "(=>)",
2703
- "end": "(?=[;\\)}]|\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\])|\\b(and)\\b)",
2661
+ ],
2704
2662
  "beginCaptures": {
2705
2663
  "1": {
2706
2664
  "name": "keyword.control.less"
2707
2665
  }
2708
- },
2709
- "patterns": [
2710
- {
2711
- "include": "#value-expression"
2712
- }
2713
- ]
2666
+ }
2714
2667
  },
2715
2668
  "value-expression-if-then-else": {
2716
2669
  "begin": "\\b(if)\\b",
2717
2670
  "end": "(?=[;\\)\\]}])",
2718
- "applyEndPatternLast": true,
2719
- "beginCaptures": {
2720
- "1": {
2721
- "name": "keyword.control.conditional"
2722
- }
2723
- },
2724
2671
  "patterns": [
2725
2672
  {
2726
2673
  "include": "#comment"
@@ -2728,34 +2675,36 @@
2728
2675
  {
2729
2676
  "begin": "\\b(else)\\b",
2730
2677
  "end": "(?=[;\\)\\]}])",
2731
- "beginCaptures": {
2732
- "1": {
2733
- "name": "keyword.control.conditional"
2734
- }
2735
- },
2736
2678
  "patterns": [
2737
2679
  {
2738
2680
  "include": "#value-expression"
2739
2681
  }
2740
- ]
2682
+ ],
2683
+ "beginCaptures": {
2684
+ "1": {
2685
+ "name": "keyword.control.conditional"
2686
+ }
2687
+ }
2741
2688
  },
2742
2689
  {
2743
2690
  "include": "#value-expression-atomic-with-paths"
2744
2691
  }
2745
- ]
2746
- },
2747
- "value-expression-lazy": {
2748
- "comment": "FIXME",
2749
- "match": "\\b(lazy)\\b",
2750
- "captures": {
2692
+ ],
2693
+ "beginCaptures": {
2751
2694
  "1": {
2752
- "name": "keyword.other"
2695
+ "name": "keyword.control.conditional"
2753
2696
  }
2754
- }
2697
+ },
2698
+ "applyEndPatternLast": true
2755
2699
  },
2756
2700
  "value-expression-label": {
2757
2701
  "begin": "\\b([_[:lower:]][[:word:]]*)\\b[[:space:]]*(::)(\\?)?",
2758
2702
  "end": "(?![[:space:]])",
2703
+ "patterns": [
2704
+ {
2705
+ "include": "#value-expression"
2706
+ }
2707
+ ],
2759
2708
  "beginCaptures": {
2760
2709
  "1": {
2761
2710
  "name": "markup.inserted constant.language support.property-value entity.name.filename"
@@ -2766,12 +2715,15 @@
2766
2715
  "3": {
2767
2716
  "name": "storage.type"
2768
2717
  }
2769
- },
2770
- "patterns": [
2771
- {
2772
- "include": "#value-expression"
2718
+ }
2719
+ },
2720
+ "value-expression-lazy": {
2721
+ "match": "\\b(lazy)\\b",
2722
+ "captures": {
2723
+ "1": {
2724
+ "name": "keyword.other"
2773
2725
  }
2774
- ]
2726
+ }
2775
2727
  },
2776
2728
  "value-expression-literal": {
2777
2729
  "patterns": [
@@ -2802,26 +2754,16 @@
2802
2754
  ]
2803
2755
  },
2804
2756
  "value-expression-literal-boolean": {
2805
- "match": "\\b(false|true)\\b",
2806
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
2757
+ "name": "entity.other.attribute-name.css constant.language constant.numeric",
2758
+ "match": "\\b(false|true)\\b"
2807
2759
  },
2808
2760
  "value-expression-literal-character": {
2809
- "match": "(')([[:space:]]|[[:graph:]]|\\\\[\\\\\"'ntbr]|\\\\[[:digit:]][[:digit:]][[:digit:]]|\\\\x[[:xdigit:]][[:xdigit:]]|\\\\o[0-3][0-7][0-7])(')",
2810
- "name": "constant.character"
2761
+ "name": "constant.character",
2762
+ "match": "(')([[:space:]]|[[:graph:]]|\\\\[\\\\\"'ntbr]|\\\\[[:digit:]][[:digit:]][[:digit:]]|\\\\x[[:xdigit:]][[:xdigit:]]|\\\\o[0-3][0-7][0-7])(')"
2811
2763
  },
2812
2764
  "value-expression-literal-list-or-array": {
2813
2765
  "begin": "(\\[\\|?)(?![@%])",
2814
2766
  "end": "(\\|?\\])",
2815
- "beginCaptures": {
2816
- "1": {
2817
- "name": "constant.language.list"
2818
- }
2819
- },
2820
- "endCaptures": {
2821
- "1": {
2822
- "name": "constant.language.list"
2823
- }
2824
- },
2825
2767
  "patterns": [
2826
2768
  {
2827
2769
  "include": "#value-expression-literal-list-or-array-separator"
@@ -2832,7 +2774,17 @@
2832
2774
  {
2833
2775
  "include": "#value-expression-literal-list-or-array"
2834
2776
  }
2835
- ]
2777
+ ],
2778
+ "beginCaptures": {
2779
+ "1": {
2780
+ "name": "constant.language.list"
2781
+ }
2782
+ },
2783
+ "endCaptures": {
2784
+ "1": {
2785
+ "name": "constant.language.list"
2786
+ }
2787
+ }
2836
2788
  },
2837
2789
  "value-expression-literal-list-or-array-separator": {
2838
2790
  "match": "(,)|(\\.\\.\\.)",
@@ -2935,24 +2887,17 @@
2935
2887
  "value-expression-literal-string": {
2936
2888
  "patterns": [
2937
2889
  {
2938
- "begin": "(?<![[:alpha:]])js_expr(?!=[[:word:]])",
2939
- "end": "(?<=\")|(\\|)([_[:lower:]]*)?(})|(?=[^[:space:]\"{])",
2940
- "endCaptures": {
2941
- "1": {
2942
- "name": "keyword.control.flow message.error"
2943
- },
2944
- "2": {
2945
- "name": "entity.other.attribute-name.css constant.language constant.numeric"
2946
- },
2947
- "3": {
2948
- "name": "keyword.control.flow message.error"
2949
- }
2950
- },
2890
+ "begin": "(?\u003c![[:alpha:]])js_expr(?!=[[:word:]])",
2891
+ "end": "(?\u003c=\")|(\\|)([_[:lower:]]*)?(})|(?=[^[:space:]\"{])",
2951
2892
  "patterns": [
2952
2893
  {
2953
2894
  "begin": "({)([_[:lower:]]*)?(\\|)",
2954
2895
  "end": "(?=\\|\\2})",
2955
- "comment": "meta.separator",
2896
+ "patterns": [
2897
+ {
2898
+ "include": "source.js"
2899
+ }
2900
+ ],
2956
2901
  "beginCaptures": {
2957
2902
  "1": {
2958
2903
  "name": "keyword.control.flow message.error"
@@ -2963,29 +2908,34 @@
2963
2908
  "3": {
2964
2909
  "name": "keyword.control.flow message.error"
2965
2910
  }
2966
- },
2967
- "patterns": [
2968
- {
2969
- "include": "source.js"
2970
- }
2971
- ]
2911
+ }
2972
2912
  },
2973
2913
  {
2974
2914
  "begin": "\"",
2975
2915
  "end": "\"",
2976
- "comment": "meta.separator",
2977
2916
  "patterns": [
2978
2917
  {
2979
2918
  "include": "source.js"
2980
2919
  }
2981
2920
  ]
2982
2921
  }
2983
- ]
2922
+ ],
2923
+ "endCaptures": {
2924
+ "1": {
2925
+ "name": "keyword.control.flow message.error"
2926
+ },
2927
+ "2": {
2928
+ "name": "entity.other.attribute-name.css constant.language constant.numeric"
2929
+ },
2930
+ "3": {
2931
+ "name": "keyword.control.flow message.error"
2932
+ }
2933
+ }
2984
2934
  },
2985
2935
  {
2936
+ "name": "string.double string.regexp",
2986
2937
  "begin": "({)([_[:lower:]]*)?(\\|)",
2987
2938
  "end": "(\\|)(\\2)(})",
2988
- "name": "string.double string.regexp",
2989
2939
  "beginCaptures": {
2990
2940
  "1": {
2991
2941
  "name": "keyword.control.flow message.error"
@@ -3010,9 +2960,9 @@
3010
2960
  }
3011
2961
  },
3012
2962
  {
2963
+ "name": "string.double string.regexp",
3013
2964
  "begin": "\"",
3014
2965
  "end": "\"",
3015
- "name": "string.double string.regexp",
3016
2966
  "patterns": [
3017
2967
  {
3018
2968
  "include": "#value-expression-literal-string-escape"
@@ -3024,9 +2974,8 @@
3024
2974
  "value-expression-literal-string-escape": {
3025
2975
  "patterns": [
3026
2976
  {
3027
- "comment": "FIXME: make escapes into separate rule",
3028
- "match": "\\\\[\\\\\"'ntbr ]|\\\\[[:digit:]][[:digit:]][[:digit:]]|\\\\x[[:xdigit:]][[:xdigit:]]|\\\\o[0-3][0-7][0-7]",
3029
- "name": "constant.character"
2977
+ "name": "constant.character",
2978
+ "match": "\\\\[\\\\\"'ntbr ]|\\\\[[:digit:]][[:digit:]][[:digit:]]|\\\\x[[:xdigit:]][[:xdigit:]]|\\\\o[0-3][0-7][0-7]"
3030
2979
  },
3031
2980
  {
3032
2981
  "match": "(@)([ \\[\\],.]|\\\\n)",
@@ -3040,7 +2989,6 @@
3040
2989
  }
3041
2990
  },
3042
2991
  {
3043
- "comment": "FIXME: don't highlight in external strings",
3044
2992
  "match": "(%)([ads])?",
3045
2993
  "captures": {
3046
2994
  "1": {
@@ -3054,11 +3002,10 @@
3054
3002
  ]
3055
3003
  },
3056
3004
  "value-expression-literal-unit": {
3057
- "match": "\\(\\)",
3058
- "name": "constant.language.unit"
3005
+ "name": "constant.language.unit",
3006
+ "match": "\\(\\)"
3059
3007
  },
3060
3008
  "value-expression-object-look": {
3061
- "comment": "FIXME: is there a better way than listing all the keywords?",
3062
3009
  "begin": "(?:\\G|^)[[:space:]]*(?=method)",
3063
3010
  "end": "(?=})",
3064
3011
  "patterns": [
@@ -3070,8 +3017,6 @@
3070
3017
  "value-expression-parens": {
3071
3018
  "begin": "(?=\\()",
3072
3019
  "end": "(\\))|(?=[;}]|\\b(and|class|constraint|exception|external|include|inherit|let|method|module|nonrec|open|private|rec|type|val|with)\\b)",
3073
- "endCaptures": {
3074
- },
3075
3020
  "patterns": [
3076
3021
  {
3077
3022
  "include": "#condition-lhs"
@@ -3087,46 +3032,36 @@
3087
3032
  "value-expression-parens-lhs": {
3088
3033
  "begin": "(\\()|(,)",
3089
3034
  "end": "(?=[?,:\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3090
- "beginCaptures": {
3091
- "2": {
3092
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3093
- }
3094
- },
3095
3035
  "patterns": [
3096
3036
  {
3097
3037
  "begin": "\\b(module)\\b",
3098
3038
  "end": "(?=\\))",
3099
- "beginCaptures": {
3100
- "1": {
3101
- "name": "keyword.other message.error"
3102
- }
3103
- },
3104
3039
  "patterns": [
3105
3040
  {
3106
3041
  "include": "#module-path-simple"
3107
3042
  }
3108
- ]
3043
+ ],
3044
+ "beginCaptures": {
3045
+ "1": {
3046
+ "name": "keyword.other message.error"
3047
+ }
3048
+ }
3109
3049
  },
3110
3050
  {
3111
3051
  "include": "#value-expression"
3112
3052
  }
3113
- ]
3053
+ ],
3054
+ "beginCaptures": {
3055
+ "2": {
3056
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3057
+ }
3058
+ }
3114
3059
  },
3115
3060
  "value-expression-record-field": {
3116
3061
  "patterns": [
3117
3062
  {
3118
3063
  "begin": "(\\.\\.\\.)",
3119
3064
  "end": "(,)|(?=})",
3120
- "beginCaptures": {
3121
- "1": {
3122
- "name": "keyword.control"
3123
- }
3124
- },
3125
- "endCaptures": {
3126
- "1": {
3127
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3128
- }
3129
- },
3130
3065
  "patterns": [
3131
3066
  {
3132
3067
  "include": "#comment"
@@ -3139,40 +3074,40 @@
3139
3074
  "end": "(?=[:,])",
3140
3075
  "patterns": [
3141
3076
  {
3142
- "match": "\\b[[:lower:]][[:word:]]*\\b",
3143
- "name": "markup.inserted constant.language support.property-value entity.name.filename"
3077
+ "name": "markup.inserted constant.language support.property-value entity.name.filename",
3078
+ "match": "\\b[[:lower:]][[:word:]]*\\b"
3144
3079
  }
3145
3080
  ]
3146
3081
  },
3147
3082
  {
3148
3083
  "begin": "(:)",
3149
3084
  "end": "(?=[,}])",
3150
- "beginCaptures": {
3151
- "1": {
3152
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3153
- }
3154
- },
3155
3085
  "patterns": [
3156
3086
  {
3157
3087
  "include": "#value-expression"
3158
3088
  }
3159
- ]
3089
+ ],
3090
+ "beginCaptures": {
3091
+ "1": {
3092
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3093
+ }
3094
+ }
3160
3095
  }
3161
- ]
3162
- },
3163
- {
3164
- "begin": "\\b[[:upper:]][[:word:]]*\\b",
3165
- "end": "(,)|(?=})",
3096
+ ],
3166
3097
  "beginCaptures": {
3167
3098
  "1": {
3168
- "name": "support.class entity.name.class"
3099
+ "name": "keyword.control"
3169
3100
  }
3170
3101
  },
3171
3102
  "endCaptures": {
3172
3103
  "1": {
3173
3104
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3174
3105
  }
3175
- },
3106
+ }
3107
+ },
3108
+ {
3109
+ "begin": "\\b[[:upper:]][[:word:]]*\\b",
3110
+ "end": "(,)|(?=})",
3176
3111
  "patterns": [
3177
3112
  {
3178
3113
  "include": "#module-path-simple-prefix"
@@ -3180,48 +3115,58 @@
3180
3115
  {
3181
3116
  "begin": "(:)",
3182
3117
  "end": "(?=[,}])",
3183
- "beginCaptures": {
3184
- "1": {
3185
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3186
- }
3187
- },
3188
3118
  "patterns": [
3189
3119
  {
3190
3120
  "include": "#value-expression"
3191
3121
  }
3192
- ]
3122
+ ],
3123
+ "beginCaptures": {
3124
+ "1": {
3125
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3126
+ }
3127
+ }
3193
3128
  }
3194
- ]
3195
- },
3196
- {
3197
- "begin": "\\b([[:lower:]][[:word:]]*)\\b",
3198
- "end": "(,)|(?=})",
3129
+ ],
3199
3130
  "beginCaptures": {
3200
3131
  "1": {
3201
- "name": "markup.inserted constant.language support.property-value entity.name.filename"
3132
+ "name": "support.class entity.name.class"
3202
3133
  }
3203
3134
  },
3204
3135
  "endCaptures": {
3205
3136
  "1": {
3206
3137
  "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3207
3138
  }
3208
- },
3139
+ }
3140
+ },
3141
+ {
3142
+ "begin": "\\b([[:lower:]][[:word:]]*)\\b",
3143
+ "end": "(,)|(?=})",
3209
3144
  "patterns": [
3210
3145
  {
3211
3146
  "begin": "(:)",
3212
3147
  "end": "(?=[,}])",
3213
- "beginCaptures": {
3214
- "1": {
3215
- "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3216
- }
3217
- },
3218
3148
  "patterns": [
3219
3149
  {
3220
3150
  "include": "#value-expression"
3221
3151
  }
3222
- ]
3152
+ ],
3153
+ "beginCaptures": {
3154
+ "1": {
3155
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3156
+ }
3157
+ }
3223
3158
  }
3224
- ]
3159
+ ],
3160
+ "beginCaptures": {
3161
+ "1": {
3162
+ "name": "markup.inserted constant.language support.property-value entity.name.filename"
3163
+ }
3164
+ },
3165
+ "endCaptures": {
3166
+ "1": {
3167
+ "name": "variable.other.class.js variable.interpolation keyword.operator keyword.control message.error"
3168
+ }
3169
+ }
3225
3170
  }
3226
3171
  ]
3227
3172
  },
@@ -3238,14 +3183,18 @@
3238
3183
  }
3239
3184
  ]
3240
3185
  },
3186
+ "value-expression-record-look": {
3187
+ "begin": "(?=\\.\\.\\.|([[:upper:]][[:word:]]*\\.)*([[:lower:]][[:word:]]*)[[:space:]]*[,:}])",
3188
+ "end": "(?=})",
3189
+ "patterns": [
3190
+ {
3191
+ "include": "#value-expression-record-item"
3192
+ }
3193
+ ]
3194
+ },
3241
3195
  "value-expression-switch": {
3242
3196
  "begin": "\\b(switch)\\b",
3243
- "end": "(?<=})",
3244
- "beginCaptures": {
3245
- "1": {
3246
- "name": "keyword.control.switch"
3247
- }
3248
- },
3197
+ "end": "(?\u003c=})",
3249
3198
  "patterns": [
3250
3199
  {
3251
3200
  "include": "#value-expression-switch-head"
@@ -3253,7 +3202,12 @@
3253
3202
  {
3254
3203
  "include": "#value-expression-switch-body"
3255
3204
  }
3256
- ]
3205
+ ],
3206
+ "beginCaptures": {
3207
+ "1": {
3208
+ "name": "keyword.control.switch"
3209
+ }
3210
+ }
3257
3211
  },
3258
3212
  "value-expression-switch-body": {
3259
3213
  "begin": "{",
@@ -3268,8 +3222,8 @@
3268
3222
  ]
3269
3223
  },
3270
3224
  "value-expression-switch-head": {
3271
- "begin": "(?<=switch)",
3272
- "end": "(?<!switch)(?={)|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3225
+ "begin": "(?\u003c=switch)",
3226
+ "end": "(?\u003c!switch)(?={)|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3273
3227
  "patterns": [
3274
3228
  {
3275
3229
  "include": "#comment"
@@ -3299,8 +3253,8 @@
3299
3253
  ]
3300
3254
  },
3301
3255
  "value-expression-switch-pattern-match-rule-lhs": {
3302
- "begin": "(?=\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\]))",
3303
- "end": "(?==>|[;\\)}])",
3256
+ "begin": "(?=\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]))",
3257
+ "end": "(?==\u003e|[;\\)}])",
3304
3258
  "patterns": [
3305
3259
  {
3306
3260
  "include": "#pattern-guard"
@@ -3311,27 +3265,22 @@
3311
3265
  ]
3312
3266
  },
3313
3267
  "value-expression-switch-pattern-match-rule-rhs": {
3314
- "begin": "(=>)",
3315
- "end": "(?=}|\\|(?![#\\-:!?.@*/&%^+<=>|~$\\\\]))",
3316
- "beginCaptures": {
3317
- "1": {
3318
- "name": "keyword.control.less"
3319
- }
3320
- },
3268
+ "begin": "(=\u003e)",
3269
+ "end": "(?=}|\\|(?![#\\-:!?.@*/\u0026%^+\u003c=\u003e|~$\\\\]))",
3321
3270
  "patterns": [
3322
3271
  {
3323
3272
  "include": "#value-expression-block-item"
3324
3273
  }
3325
- ]
3326
- },
3327
- "value-expression-try": {
3328
- "begin": "\\b(try)\\b",
3329
- "end": "(?<=})|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3274
+ ],
3330
3275
  "beginCaptures": {
3331
3276
  "1": {
3332
- "name": "keyword.control.trycatch"
3277
+ "name": "keyword.control.less"
3333
3278
  }
3334
- },
3279
+ }
3280
+ },
3281
+ "value-expression-try": {
3282
+ "begin": "\\b(try)\\b",
3283
+ "end": "(?\u003c=})|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3335
3284
  "patterns": [
3336
3285
  {
3337
3286
  "include": "#value-expression-try-head"
@@ -3339,16 +3288,16 @@
3339
3288
  {
3340
3289
  "include": "#value-expression-switch-body"
3341
3290
  }
3342
- ]
3343
- },
3344
- "value-expression-try-head": {
3345
- "begin": "(?<=try)",
3346
- "end": "(?<!try)(?={)|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3291
+ ],
3347
3292
  "beginCaptures": {
3348
3293
  "1": {
3349
- "name": "keyword.control"
3294
+ "name": "keyword.control.trycatch"
3350
3295
  }
3351
- },
3296
+ }
3297
+ },
3298
+ "value-expression-try-head": {
3299
+ "begin": "(?\u003c=try)",
3300
+ "end": "(?\u003c!try)(?={)|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3352
3301
  "patterns": [
3353
3302
  {
3354
3303
  "include": "#comment"
@@ -3365,16 +3314,16 @@
3365
3314
  {
3366
3315
  "include": "#value-expression-atomic-with-paths"
3367
3316
  }
3368
- ]
3369
- },
3370
- "value-expression-while": {
3371
- "begin": "\\b(while)\\b",
3372
- "end": "(?<=})|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3317
+ ],
3373
3318
  "beginCaptures": {
3374
3319
  "1": {
3375
- "name": "keyword.control.loop"
3320
+ "name": "keyword.control"
3376
3321
  }
3377
- },
3322
+ }
3323
+ },
3324
+ "value-expression-while": {
3325
+ "begin": "\\b(while)\\b",
3326
+ "end": "(?\u003c=})|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3378
3327
  "patterns": [
3379
3328
  {
3380
3329
  "include": "#value-expression-while-head"
@@ -3382,10 +3331,15 @@
3382
3331
  {
3383
3332
  "include": "#value-expression-block"
3384
3333
  }
3385
- ]
3334
+ ],
3335
+ "beginCaptures": {
3336
+ "1": {
3337
+ "name": "keyword.control.loop"
3338
+ }
3339
+ }
3386
3340
  },
3387
3341
  "value-expression-while-head": {
3388
- "begin": "(?<=while)[[:space:]]*+",
3342
+ "begin": "(?\u003c=while)[[:space:]]*+",
3389
3343
  "end": "(?={)|(?=[;\\)]|\\b(and|as|class|constraint|exception|external|include|inherit|let|method|nonrec|open|private|rec|type|val|with)\\b)",
3390
3344
  "patterns": [
3391
3345
  {
@@ -3395,15 +3349,6 @@
3395
3349
  "include": "#value-expression-atomic-with-paths"
3396
3350
  }
3397
3351
  ]
3398
- },
3399
- "value-expression-record-look": {
3400
- "begin": "(?=\\.\\.\\.|([[:upper:]][[:word:]]*\\.)*([[:lower:]][[:word:]]*)[[:space:]]*[,:}])",
3401
- "end": "(?=})",
3402
- "patterns": [
3403
- {
3404
- "include": "#value-expression-record-item"
3405
- }
3406
- ]
3407
3352
  }
3408
3353
  }
3409
- }
3354
+ }