github-linguist 7.11.1 → 7.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (611) hide show
  1. checksums.yaml +4 -4
  2. data/ext/linguist/lex.linguist_yy.c +1123 -623
  3. data/ext/linguist/lex.linguist_yy.h +433 -66
  4. data/ext/linguist/linguist.c +5 -35
  5. data/ext/linguist/linguist.h +0 -18
  6. data/ext/linguist/tokenizer.l +83 -65
  7. data/grammars/annotation.liquidhaskell.haskell.json +1 -1835
  8. data/grammars/config.xcompose.json +1 -80
  9. data/grammars/documentation.markdown.injection.haxe.json +1 -22
  10. data/grammars/etc.json +1 -987
  11. data/grammars/file.lasso.json +1 -702
  12. data/grammars/hidden.manref.json +1 -29
  13. data/grammars/hidden.regexp.injection-shell.json +1 -28
  14. data/grammars/hint.haskell.json +1 -1762
  15. data/grammars/hint.message.haskell.json +1 -1786
  16. data/grammars/hint.type.haskell.json +1 -1759
  17. data/grammars/injections.etc.json +1 -659
  18. data/grammars/inline.prisma.json +1 -55
  19. data/grammars/markdown.hack.codeblock.json +1 -20
  20. data/grammars/markdown.haxe.codeblock.json +1 -26
  21. data/grammars/markdown.hxml.codeblock.json +1 -26
  22. data/grammars/markdown.lean.codeblock.json +1 -0
  23. data/grammars/markdown.plantuml.codeblock.json +1 -26
  24. data/grammars/objdump.x86asm.json +1 -69
  25. data/grammars/source.4dm.json +1 -1156
  26. data/grammars/source.SASLog.json +1 -18
  27. data/grammars/source.abap.json +1 -335
  28. data/grammars/source.abapcds.json +1 -0
  29. data/grammars/source.abl.json +1 -734
  30. data/grammars/source.abnf.json +1 -294
  31. data/grammars/source.actionscript.3.json +1 -1538
  32. data/grammars/source.acucobol.json +1 -13
  33. data/grammars/source.ada.json +1 -133
  34. data/grammars/source.afm.json +1 -1207
  35. data/grammars/source.agc.json +1 -87
  36. data/grammars/source.agda.json +1 -72
  37. data/grammars/source.ahk.json +1 -195
  38. data/grammars/source.al.json +1 -130
  39. data/grammars/source.alloy.json +1 -40
  40. data/grammars/source.ampl.json +1 -151
  41. data/grammars/source.angelscript.json +1 -186
  42. data/grammars/source.antlr.json +1 -295
  43. data/grammars/source.apache-config.json +1 -346
  44. data/grammars/source.apache-config.mod_perl.json +1 -65
  45. data/grammars/source.apl.json +1 -1427
  46. data/grammars/source.applescript.json +1 -1384
  47. data/grammars/source.asl.json +1 -56
  48. data/grammars/source.asn.json +1 -55
  49. data/grammars/source.asp.json +1 -151
  50. data/grammars/source.aspectj.json +1 -960
  51. data/grammars/source.assembly.json +1 -116
  52. data/grammars/source.ats.json +1 -164
  53. data/grammars/source.autoit.json +1 -167
  54. data/grammars/source.avro.json +1 -381
  55. data/grammars/source.awk.json +1 -384
  56. data/grammars/source.ballerina.json +1 -1785
  57. data/grammars/source.basic.json +1 -0
  58. data/grammars/source.batchfile.json +1 -732
  59. data/grammars/source.bdf.json +1 -425
  60. data/grammars/source.befunge.json +1 -34
  61. data/grammars/source.bf.json +1 -30
  62. data/grammars/source.bicep.json +1 -0
  63. data/grammars/source.blitzmax.json +1 -905
  64. data/grammars/source.bnf.json +1 -191
  65. data/grammars/source.boo.json +1 -448
  66. data/grammars/source.boogie.json +1 -0
  67. data/grammars/source.brightauthorproject.json +1 -24
  68. data/grammars/source.brightscript.json +1 -148
  69. data/grammars/source.bsl.json +1 -451
  70. data/grammars/source.bsv.json +1 -277
  71. data/grammars/source.c++.json +1 -436
  72. data/grammars/source.c++.qt.json +1 -29
  73. data/grammars/source.c.ec.json +1 -33
  74. data/grammars/source.c.json +1 -712
  75. data/grammars/source.c.nwscript.json +1 -0
  76. data/grammars/source.c.platform.json +1 -1115
  77. data/grammars/source.c2hs.json +1 -24
  78. data/grammars/source.cabal.json +1 -63
  79. data/grammars/source.cache.cmake.json +1 -70
  80. data/grammars/source.camlp4.ocaml.json +1 -60
  81. data/grammars/source.capnp.json +1 -88
  82. data/grammars/source.ceylon.json +1 -93
  83. data/grammars/source.cfscript.cfc.json +1 -162
  84. data/grammars/source.cfscript.json +1 -737
  85. data/grammars/source.changelogs.rpm-spec.json +1 -91
  86. data/grammars/source.chapel.json +1 -265
  87. data/grammars/source.cirru.json +1 -61
  88. data/grammars/source.clarion.json +1 -146
  89. data/grammars/source.clean.json +1 -222
  90. data/grammars/source.click.json +1 -107
  91. data/grammars/source.clips.json +1 -67
  92. data/grammars/source.clojure.json +1 -429
  93. data/grammars/source.cm.json +1 -49
  94. data/grammars/source.cmake.json +1 -173
  95. data/grammars/source.cobol.json +1 -485
  96. data/grammars/source.coffee.json +1 -1310
  97. data/grammars/source.cool.json +1 -96
  98. data/grammars/source.coq.json +1 -58
  99. data/grammars/source.crystal.json +1 -2694
  100. data/grammars/source.cs.json +1 -4323
  101. data/grammars/source.csound-document.json +1 -175
  102. data/grammars/source.csound-score.json +1 -191
  103. data/grammars/source.csound.json +1 -824
  104. data/grammars/source.css.json +1 -1859
  105. data/grammars/source.css.less.json +1 -536
  106. data/grammars/source.css.mss.json +1 -249
  107. data/grammars/source.css.postcss.sugarss.json +1 -260
  108. data/grammars/source.css.scss.json +1 -1873
  109. data/grammars/source.cuda-c++.json +1 -103
  110. data/grammars/source.curlrc.json +1 -984
  111. data/grammars/source.cwl.json +1 -103
  112. data/grammars/source.cython.json +1 -1912
  113. data/grammars/source.d.json +1 -741
  114. data/grammars/source.dart.json +1 -433
  115. data/grammars/source.data-weave.json +1 -1580
  116. data/grammars/source.desktop.json +1 -86
  117. data/grammars/source.diff.json +1 -153
  118. data/grammars/source.dircolors.json +1 -137
  119. data/grammars/source.direct-x.json +1 -135
  120. data/grammars/source.disasm.json +1 -30
  121. data/grammars/source.ditroff.desc.json +1 -411
  122. data/grammars/source.ditroff.json +1 -1280
  123. data/grammars/source.dm.json +1 -628
  124. data/grammars/source.dmf.json +1 -96
  125. data/grammars/source.dockerfile.json +1 -88
  126. data/grammars/source.dosbox-conf.json +1 -97
  127. data/grammars/source.dot.json +1 -117
  128. data/grammars/source.dylan.json +1 -212
  129. data/grammars/source.ebnf.json +1 -240
  130. data/grammars/source.editorconfig.json +1 -365
  131. data/grammars/source.eiffel.json +1 -133
  132. data/grammars/source.elixir.json +1 -965
  133. data/grammars/source.elm.json +1 -375
  134. data/grammars/source.emacs.lisp.json +1 -1301
  135. data/grammars/source.erlang.json +1 -1647
  136. data/grammars/source.essl.json +1 -37
  137. data/grammars/source.factor.json +1 -252
  138. data/grammars/source.fan.json +1 -341
  139. data/grammars/source.fancy.json +1 -245
  140. data/grammars/source.faust.json +1 -119
  141. data/grammars/source.figctrl.json +1 -252
  142. data/grammars/source.figfont.json +1 -121
  143. data/grammars/source.firestore.json +1 -289
  144. data/grammars/source.fish.json +1 -190
  145. data/grammars/source.fontdir.json +1 -99
  146. data/grammars/source.fontforge.json +1 -355
  147. data/grammars/source.fontinfo.json +1 -0
  148. data/grammars/source.forth.json +1 -84
  149. data/grammars/source.fortran.json +1 -464
  150. data/grammars/source.fortran.modern.json +1 -200
  151. data/grammars/source.fsharp.fsi.json +1 -9
  152. data/grammars/source.fsharp.fsl.json +1 -9
  153. data/grammars/source.fsharp.fsx.json +1 -13
  154. data/grammars/source.fsharp.json +1 -452
  155. data/grammars/source.fstar.json +1 -439
  156. data/grammars/source.futhark.json +1 -167
  157. data/grammars/source.gap.json +1 -163
  158. data/grammars/source.gcode.json +1 -176
  159. data/grammars/source.gdb.json +1 -160
  160. data/grammars/source.gdb.session.json +1 -70
  161. data/grammars/source.gdbregs.json +1 -14
  162. data/grammars/source.gdscript.json +1 -491
  163. data/grammars/source.gedcom.json +1 -196
  164. data/grammars/source.gemfile-lock.json +1 -0
  165. data/grammars/source.generic-db.json +1 -41
  166. data/grammars/source.gerber.json +1 -321
  167. data/grammars/source.gf.json +1 -51
  168. data/grammars/source.gfm.blade.json +1 -15
  169. data/grammars/source.gfm.json +1 -1913
  170. data/grammars/source.gitattributes.json +1 -111
  171. data/grammars/source.gitconfig.json +1 -450
  172. data/grammars/source.gitignore.json +1 -140
  173. data/grammars/source.glsl.json +1 -139
  174. data/grammars/source.gn.json +1 -345
  175. data/grammars/source.gnuplot.json +1 -260
  176. data/grammars/source.go.json +1 -540
  177. data/grammars/source.golo.json +1 -177
  178. data/grammars/source.gosu.2.json +1 -153
  179. data/grammars/source.grace.json +1 -675
  180. data/grammars/source.graphql.json +1 -978
  181. data/grammars/source.gremlin.json +1 -200
  182. data/grammars/source.groovy.gradle.json +1 -69
  183. data/grammars/source.groovy.json +1 -1374
  184. data/grammars/source.hack.json +1 -2595
  185. data/grammars/source.haproxy-config.json +1 -152
  186. data/grammars/source.harbour.json +1 -388
  187. data/grammars/source.haskell.json +1 -1760
  188. data/grammars/source.hc.json +1 -709
  189. data/grammars/source.hgignore.json +1 -34
  190. data/grammars/source.hlsl.json +1 -211
  191. data/grammars/source.hosts.json +1 -40
  192. data/grammars/source.hql.json +1 -492
  193. data/grammars/source.hsc2hs.json +1 -9
  194. data/grammars/source.hsig.json +1 -1760
  195. data/grammars/source.httpspec.json +1 -283
  196. data/grammars/source.hx.argument.json +1 -80
  197. data/grammars/source.hx.json +1 -2428
  198. data/grammars/source.hx.type.json +1 -8
  199. data/grammars/source.hxml.json +1 -59
  200. data/grammars/source.hy.json +1 -429
  201. data/grammars/source.ideal.json +1 -356
  202. data/grammars/source.idl-dlm.json +1 -105
  203. data/grammars/source.idl.json +1 -246
  204. data/grammars/source.idris.json +1 -523
  205. data/grammars/source.igor.json +1 -369
  206. data/grammars/source.inform7.json +1 -183
  207. data/grammars/source.ini.json +1 -107
  208. data/grammars/source.ini.npmrc.json +1 -311
  209. data/grammars/source.inno.json +1 -133
  210. data/grammars/source.inputrc.json +1 -500
  211. data/grammars/source.io.json +1 -156
  212. data/grammars/source.ioke.json +1 -266
  213. data/grammars/source.isabelle.root.json +1 -64
  214. data/grammars/source.isabelle.theory.json +1 -102
  215. data/grammars/source.j.json +1 -260
  216. data/grammars/source.jasmin.json +1 -294
  217. data/grammars/source.java-properties.json +1 -87
  218. data/grammars/source.java.json +1 -1020
  219. data/grammars/source.jcl.json +1 -46
  220. data/grammars/source.jflex.json +1 -484
  221. data/grammars/source.jison.json +1 -711
  222. data/grammars/source.jisonlex-injection.json +1 -10
  223. data/grammars/source.jisonlex.json +1 -434
  224. data/grammars/source.jolie.json +1 -132
  225. data/grammars/source.jq.json +1 -211
  226. data/grammars/source.js.json +1 -1897
  227. data/grammars/source.js.objj.json +1 -419
  228. data/grammars/source.js.regexp.json +1 -152
  229. data/grammars/source.js.regexp.replacement.json +1 -26
  230. data/grammars/source.jsdoc.json +1 -460
  231. data/grammars/source.json.json +1 -139
  232. data/grammars/source.jsoniq.json +1 -0
  233. data/grammars/source.jsonnet.json +1 -197
  234. data/grammars/source.julia.console.json +1 -51
  235. data/grammars/source.julia.json +1 -991
  236. data/grammars/source.kotlin.json +1 -704
  237. data/grammars/source.kusto.json +1 -0
  238. data/grammars/source.lark.json +1 -0
  239. data/grammars/source.lbnf.json +1 -0
  240. data/grammars/source.lcov.json +1 -398
  241. data/grammars/source.lean.json +1 -226
  242. data/grammars/source.lean.markdown.json +1 -2598
  243. data/grammars/source.lex.json +1 -232
  244. data/grammars/source.lex.regexp.json +1 -269
  245. data/grammars/source.lid.json +1 -19
  246. data/grammars/source.lilypond.json +1 -869
  247. data/grammars/source.lisp.json +1 -101
  248. data/grammars/source.litcoffee.json +1 -654
  249. data/grammars/source.livescript.json +1 -603
  250. data/grammars/source.llvm.json +1 -61
  251. data/grammars/source.logos.json +1 -24
  252. data/grammars/source.logtalk.json +1 -310
  253. data/grammars/source.loomscript.json +1 -208
  254. data/grammars/source.lsl.json +1 -241
  255. data/grammars/source.ltspice.symbol.json +1 -294
  256. data/grammars/source.lua.json +1 -275
  257. data/grammars/source.m2.json +1 -125
  258. data/grammars/source.m4.json +1 -229
  259. data/grammars/source.m68k.json +1 -412
  260. data/grammars/source.mailmap.json +1 -28
  261. data/grammars/source.makefile.json +1 -470
  262. data/grammars/source.makegen.json +1 -9
  263. data/grammars/source.man-conf.json +1 -153
  264. data/grammars/source.mask.json +1 -816
  265. data/grammars/source.mata.json +1 -125
  266. data/grammars/source.mathematica.json +1 -416
  267. data/grammars/source.matlab.json +1 -1096
  268. data/grammars/source.maxscript.json +1 -465
  269. data/grammars/source.mcfunction-snapshot.json +1 -24480
  270. data/grammars/source.mcfunction.json +1 -1354
  271. data/grammars/source.mercury.json +1 -246
  272. data/grammars/source.meson.json +1 -165
  273. data/grammars/source.meta-info.json +1 -146
  274. data/grammars/source.ml.json +1 -285
  275. data/grammars/source.mlir.json +1 -109
  276. data/grammars/source.modelica.json +1 -142
  277. data/grammars/source.modula-3.json +1 -88
  278. data/grammars/source.modula2.json +1 -94
  279. data/grammars/source.monkey.json +1 -694
  280. data/grammars/source.moonscript.json +1 -144
  281. data/grammars/source.mql5.json +1 -187
  282. data/grammars/source.msl.json +1 -755
  283. data/grammars/source.mupad.json +1 -131
  284. data/grammars/source.nanorc.json +1 -333
  285. data/grammars/source.nasl.json +1 -155
  286. data/grammars/source.ncl.json +1 -53
  287. data/grammars/source.ne.json +1 -105
  288. data/grammars/source.nemerle.json +1 -132
  289. data/grammars/source.neon.json +1 -381
  290. data/grammars/source.nesc.json +1 -21
  291. data/grammars/source.netlinx.erb.json +1 -34
  292. data/grammars/source.netlinx.json +1 -704
  293. data/grammars/source.nextflow-groovy.json +1 -1359
  294. data/grammars/source.nextflow.json +1 -94
  295. data/grammars/source.nginx.json +1 -815
  296. data/grammars/source.nim.comment.json +1 -82
  297. data/grammars/source.nim.json +1 -1083
  298. data/grammars/source.nim_filter.json +1 -113
  299. data/grammars/source.nimcfg.json +1 -103
  300. data/grammars/source.ninja.json +1 -248
  301. data/grammars/source.nit.json +1 -234
  302. data/grammars/source.nix.json +1 -1196
  303. data/grammars/source.nsis.json +1 -152
  304. data/grammars/source.nu.json +1 -516
  305. data/grammars/source.nunjucks.json +1 -0
  306. data/grammars/source.nut.json +1 -262
  307. data/grammars/source.objc++.json +1 -12
  308. data/grammars/source.objc.json +1 -910
  309. data/grammars/source.objc.platform.json +1 -842
  310. data/grammars/source.objectscript.json +1 -309
  311. data/grammars/source.objectscript_class.json +1 -674
  312. data/grammars/source.objectscript_csp.json +1 -19
  313. data/grammars/source.objectscript_macros.json +1 -226
  314. data/grammars/source.ocaml.json +1 -1418
  315. data/grammars/source.ocamllex.json +1 -298
  316. data/grammars/source.ocamlyacc.json +1 -339
  317. data/grammars/source.odin-ehr.json +1 -806
  318. data/grammars/source.odin.json +1 -402
  319. data/grammars/source.ooc.json +1 -685
  320. data/grammars/source.opa.json +1 -196
  321. data/grammars/source.opal.json +1 -410
  322. data/grammars/source.opalsysdefs.json +1 -66
  323. data/grammars/source.openbsd-pkg.contents.json +1 -128
  324. data/grammars/source.opencobol.json +1 -62
  325. data/grammars/source.opentype.json +1 -448
  326. data/grammars/source.opts.json +1 -108
  327. data/grammars/source.ox.json +1 -89
  328. data/grammars/source.oz.json +1 -77
  329. data/grammars/source.p4.json +1 -122
  330. data/grammars/source.paket.dependencies.json +1 -0
  331. data/grammars/source.paket.lock.json +1 -0
  332. data/grammars/source.pan.json +1 -706
  333. data/grammars/source.papyrus.skyrim.json +1 -1272
  334. data/grammars/source.parrot.pir.json +1 -145
  335. data/grammars/source.pascal.json +1 -143
  336. data/grammars/source.pawn.json +1 -1194
  337. data/grammars/source.pcb.board.json +1 -285
  338. data/grammars/source.pcb.schematic.json +1 -424
  339. data/grammars/source.pcb.sexp.json +1 -232
  340. data/grammars/source.pep8.json +1 -118
  341. data/grammars/source.perl.6.json +1 -309
  342. data/grammars/source.perl.json +1 -2519
  343. data/grammars/source.php.zephir.json +1 -353
  344. data/grammars/source.pic.json +1 -908
  345. data/grammars/source.pig_latin.json +1 -168
  346. data/grammars/source.pike.json +1 -49
  347. data/grammars/source.plist.json +1 -336
  348. data/grammars/source.po.json +1 -222
  349. data/grammars/source.pogoscript.json +1 -79
  350. data/grammars/source.pony.json +1 -245
  351. data/grammars/source.postcss.json +1 -370
  352. data/grammars/source.postscript.json +1 -477
  353. data/grammars/source.pov-ray sdl.json +1 -82
  354. data/grammars/source.powershell.json +1 -981
  355. data/grammars/source.prisma.json +1 -435
  356. data/grammars/source.processing.json +1 -872
  357. data/grammars/source.prolog.eclipse.json +1 -201
  358. data/grammars/source.prolog.json +1 -286
  359. data/grammars/source.protobuf.json +1 -471
  360. data/grammars/source.puppet.json +1 -433
  361. data/grammars/source.purescript.json +1 -861
  362. data/grammars/source.pyjade.json +1 -996
  363. data/grammars/source.python.django.json +1 -29
  364. data/grammars/source.python.json +1 -5292
  365. data/grammars/source.python.salt.json +1 -9
  366. data/grammars/source.q.json +1 -215
  367. data/grammars/source.q_output.json +1 -348
  368. data/grammars/source.qasm.json +1 -66
  369. data/grammars/source.ql.json +1 -1408
  370. data/grammars/source.qmake.json +1 -210
  371. data/grammars/source.qml.json +1 -174
  372. data/grammars/source.qsharp.json +1 -120
  373. data/grammars/source.quake.json +1 -44
  374. data/grammars/source.quoting.raku.json +1 -0
  375. data/grammars/source.r.json +1 -194
  376. data/grammars/source.racket.json +1 -98
  377. data/grammars/source.raku.json +1 -0
  378. data/grammars/source.rascal.json +1 -283
  379. data/grammars/source.reason.hover.type.json +1 -14
  380. data/grammars/source.reason.json +1 -3382
  381. data/grammars/source.rebol.json +1 -637
  382. data/grammars/source.record-jar.json +1 -0
  383. data/grammars/source.red.json +1 -644
  384. data/grammars/source.redirects.json +1 -0
  385. data/grammars/source.reg.json +1 -159
  386. data/grammars/source.regexp.extended.json +1 -558
  387. data/grammars/source.regexp.json +1 -1434
  388. data/grammars/source.regexp.posix.json +1 -0
  389. data/grammars/source.regexp.python.json +1 -490
  390. data/grammars/source.regexp.raku.json +1 -0
  391. data/grammars/source.regexp.spin.json +1 -179
  392. data/grammars/source.rego.json +1 -124
  393. data/grammars/source.renpy.json +1 -1948
  394. data/grammars/source.rescript.json +1 -0
  395. data/grammars/source.rexx.json +1 -52
  396. data/grammars/source.ring.json +1 -247
  397. data/grammars/source.rpm-spec.json +1 -765
  398. data/grammars/source.ruby.gemfile.json +1 -24
  399. data/grammars/source.ruby.json +1 -2605
  400. data/grammars/source.ruby.rspec.cucumber.steps.json +1 -261
  401. data/grammars/source.rust.json +1 -629
  402. data/grammars/source.sas.json +1 -286
  403. data/grammars/source.sass.json +1 -1089
  404. data/grammars/source.sassdoc.json +1 -346
  405. data/grammars/source.scad.json +1 -145
  406. data/grammars/source.scala.json +1 -1121
  407. data/grammars/source.scaml.json +1 -451
  408. data/grammars/source.scheme.json +1 -353
  409. data/grammars/source.scilab.json +1 -96
  410. data/grammars/source.sdbl.json +1 -90
  411. data/grammars/source.sed.json +1 -1520
  412. data/grammars/source.shaderlab.json +1 -198
  413. data/grammars/source.shell.json +1 -1272
  414. data/grammars/source.shen.json +1 -143
  415. data/grammars/source.sieve.json +1 -383
  416. data/grammars/source.singularity.json +1 -0
  417. data/grammars/source.slice.json +1 -2755
  418. data/grammars/source.smali.json +1 -1610
  419. data/grammars/source.smalltalk.json +1 -187
  420. data/grammars/source.smpl.json +1 -314
  421. data/grammars/source.smt.json +1 -158
  422. data/grammars/source.solidity.json +1 -189
  423. data/grammars/source.solution.json +1 -0
  424. data/grammars/source.sourcepawn.json +1 -651
  425. data/grammars/source.sparql.json +1 -18
  426. data/grammars/source.spin.json +1 -916
  427. data/grammars/source.sqf.json +1 -111
  428. data/grammars/source.sql.json +1 -459
  429. data/grammars/source.ssh-config.json +1 -97
  430. data/grammars/source.stan.json +1 -388
  431. data/grammars/source.stata.json +1 -197
  432. data/grammars/source.stdbez.json +1 -0
  433. data/grammars/source.string-template.json +1 -0
  434. data/grammars/source.strings.json +1 -49
  435. data/grammars/source.stylus.json +1 -1018
  436. data/grammars/source.supercollider.json +1 -93
  437. data/grammars/source.svelte.json +1 -827
  438. data/grammars/source.swift.json +1 -3134
  439. data/grammars/source.sy.json +1 -2954
  440. data/grammars/source.systemverilog.json +1 -1036
  441. data/grammars/source.tags.json +1 -266
  442. data/grammars/source.tcl.json +1 -260
  443. data/grammars/source.tea.json +1 -174
  444. data/grammars/source.terra.json +1 -138
  445. data/grammars/source.terraform.json +1 -694
  446. data/grammars/source.thrift.json +1 -698
  447. data/grammars/source.tl.json +1 -259
  448. data/grammars/source.tla.json +1 -140
  449. data/grammars/source.tnsaudit.json +1 -256
  450. data/grammars/source.toc.json +1 -52
  451. data/grammars/source.toml.json +1 -426
  452. data/grammars/source.ts.json +1 -5581
  453. data/grammars/source.tsql.json +1 -507
  454. data/grammars/source.tsx.json +1 -5834
  455. data/grammars/source.turing.json +1 -1553
  456. data/grammars/source.turtle.json +1 -489
  457. data/grammars/source.txl.json +1 -48
  458. data/grammars/source.ucd.nameslist.json +1 -444
  459. data/grammars/source.ucd.unidata.json +1 -570
  460. data/grammars/source.ucfconstraints.json +1 -67
  461. data/grammars/source.ur.json +1 -31
  462. data/grammars/source.v.json +1 -1010
  463. data/grammars/source.vala.json +1 -800
  464. data/grammars/source.varnish.vcl.json +1 -331
  465. data/grammars/source.vbnet.json +1 -239
  466. data/grammars/source.verilog.json +1 -296
  467. data/grammars/source.vhdl.json +1 -1374
  468. data/grammars/source.vim-snippet.json +1 -645
  469. data/grammars/source.viml.json +1 -1197
  470. data/grammars/source.vtt.json +1 -702
  471. data/grammars/source.vyper.json +1 -213
  472. data/grammars/source.wavefront.mtl.json +1 -1190
  473. data/grammars/source.wavefront.obj.json +1 -1341
  474. data/grammars/source.wdl.json +1 -220
  475. data/grammars/source.webassembly.json +1 -349
  476. data/grammars/source.webidl.json +1 -807
  477. data/grammars/source.wgetrc.json +1 -1640
  478. data/grammars/source.wollok.json +1 -100
  479. data/grammars/source.wsd.json +1 -781
  480. data/grammars/source.x10.json +1 -64
  481. data/grammars/source.x86.json +1 -299
  482. data/grammars/source.x86asm.json +1 -42
  483. data/grammars/source.xc.json +1 -371
  484. data/grammars/source.xlfd.json +1 -462
  485. data/grammars/source.xojo.json +1 -85
  486. data/grammars/source.xq.json +1 -230
  487. data/grammars/source.xtend.json +1 -724
  488. data/grammars/source.yacc.json +1 -626
  489. data/grammars/source.yaml.json +1 -443
  490. data/grammars/source.yaml.salt.json +1 -345
  491. data/grammars/source.yang.json +1 -78
  492. data/grammars/source.yara.json +1 -99
  493. data/grammars/source.yasnippet.json +1 -377
  494. data/grammars/source.zap.json +1 -260
  495. data/grammars/source.zeek.json +1 -412
  496. data/grammars/source.zenscript.json +1 -282
  497. data/grammars/source.zig.json +1 -547
  498. data/grammars/source.zil.json +1 -750
  499. data/grammars/text.bibtex.json +1 -246
  500. data/grammars/text.browserslist.json +1 -0
  501. data/grammars/text.cfml.basic.json +1 -735
  502. data/grammars/text.checksums.json +1 -0
  503. data/grammars/text.codeowners.json +1 -0
  504. data/grammars/text.conllu.json +1 -45
  505. data/grammars/text.dfy.dafny.json +1 -188
  506. data/grammars/text.elixir.json +1 -52
  507. data/grammars/text.eml.basic.json +1 -296
  508. data/grammars/text.error-list.json +1 -53
  509. data/grammars/text.find-refs.json +1 -926
  510. data/grammars/text.gherkin.feature.json +1 -127
  511. data/grammars/text.haml.json +1 -518
  512. data/grammars/text.hamlc.json +1 -219
  513. data/grammars/text.html.asciidoc.json +1 -478
  514. data/grammars/text.html.asdoc.json +1 -529
  515. data/grammars/text.html.asp.json +1 -53
  516. data/grammars/text.html.basic.json +1 -908
  517. data/grammars/text.html.cfm.json +1 -802
  518. data/grammars/text.html.creole.json +1 -317
  519. data/grammars/text.html.cshtml.json +1 -356
  520. data/grammars/text.html.django.json +1 -63
  521. data/grammars/text.html.ecr.json +1 -48
  522. data/grammars/text.html.elixir.json +1 -21
  523. data/grammars/text.html.erb.json +1 -150
  524. data/grammars/text.html.erlang.yaws.json +1 -67
  525. data/grammars/text.html.factor.json +1 -19
  526. data/grammars/text.html.ftl.json +1 -76
  527. data/grammars/text.html.handlebars.json +1 -845
  528. data/grammars/text.html.javadoc.json +1 -426
  529. data/grammars/text.html.js.json +1 -24
  530. data/grammars/text.html.jsp.json +1 -1196
  531. data/grammars/text.html.liquid.json +1 -25
  532. data/grammars/text.html.mako.json +1 -726
  533. data/grammars/text.html.markdown.source.gfm.apib.json +1 -1298
  534. data/grammars/text.html.markdown.source.gfm.mson.json +1 -1156
  535. data/grammars/text.html.mediawiki.elm-build-output.json +1 -97
  536. data/grammars/text.html.mediawiki.elm-documentation.json +1 -17
  537. data/grammars/text.html.mediawiki.json +1 -946
  538. data/grammars/text.html.nunjucks.json +1 -0
  539. data/grammars/text.html.php.blade.json +1 -3833
  540. data/grammars/text.html.php.json +1 -2507
  541. data/grammars/text.html.riot.json +1 -788
  542. data/grammars/text.html.slash.json +1 -307
  543. data/grammars/text.html.smarty.json +1 -232
  544. data/grammars/text.html.soy.json +1 -606
  545. data/grammars/text.html.ssp.json +1 -43
  546. data/grammars/text.html.tcl.json +1 -37
  547. data/grammars/text.html.twig.json +1 -1344
  548. data/grammars/text.html.vue.json +1 -963
  549. data/grammars/text.idl-idldoc.json +1 -10
  550. data/grammars/text.jade.json +1 -963
  551. data/grammars/text.junit-test-report.json +1 -89
  552. data/grammars/text.log.latex.json +1 -84
  553. data/grammars/text.marko.json +1 -1662
  554. data/grammars/text.muse.json +1 -1471
  555. data/grammars/text.openbsd-pkg.desc.json +1 -78
  556. data/grammars/text.plain.json +1 -18
  557. data/grammars/text.python.console.json +1 -21
  558. data/grammars/text.python.traceback.json +1 -43
  559. data/grammars/text.rdoc.json +1 -44
  560. data/grammars/text.restructuredtext.clean.json +1 -24
  561. data/grammars/text.restructuredtext.json +1 -1765
  562. data/grammars/text.robot.json +1 -63
  563. data/grammars/text.robots-txt.json +1 -0
  564. data/grammars/text.roff.json +1 -6927
  565. data/grammars/text.rtf.json +1 -148
  566. data/grammars/text.runoff.json +1 -308
  567. data/grammars/text.sfd.json +1 -292
  568. data/grammars/text.shell-session.json +1 -29
  569. data/grammars/text.slim.json +1 -527
  570. data/grammars/text.srt.json +1 -166
  571. data/grammars/text.tex.json +1 -264
  572. data/grammars/text.tex.latex.beamer.json +1 -57
  573. data/grammars/text.tex.latex.haskell.json +1 -1826
  574. data/grammars/text.tex.latex.json +1 -1003
  575. data/grammars/text.tex.latex.memoir.json +1 -129
  576. data/grammars/text.tex.latex.rd.json +1 -111
  577. data/grammars/text.texinfo.json +1 -1525
  578. data/grammars/text.vim-help.json +1 -383
  579. data/grammars/text.xml.ant.json +1 -195
  580. data/grammars/text.xml.flex-config.json +1 -2628
  581. data/grammars/text.xml.genshi.json +1 -28
  582. data/grammars/text.xml.json +1 -351
  583. data/grammars/text.xml.plist.json +1 -664
  584. data/grammars/text.xml.pom.json +1 -769
  585. data/grammars/text.xml.svg.json +1 -562
  586. data/grammars/text.xml.xsl.json +1 -88
  587. data/grammars/text.zone_file.json +1 -67
  588. data/grammars/version +1 -1
  589. data/lib/linguist/VERSION +1 -1
  590. data/lib/linguist/classifier.rb +9 -5
  591. data/lib/linguist/generated.rb +10 -0
  592. data/lib/linguist/generic.yml +18 -0
  593. data/lib/linguist/heuristics.yml +77 -20
  594. data/lib/linguist/language.rb +7 -17
  595. data/lib/linguist/languages.json +1 -1
  596. data/lib/linguist/languages.yml +271 -49
  597. data/lib/linguist/linguist.bundle +0 -0
  598. data/lib/linguist/samples.json +1 -1
  599. data/lib/linguist/samples.rb +2 -2
  600. data/lib/linguist/strategy/extension.rb +13 -5
  601. data/lib/linguist/strategy/modeline.rb +64 -32
  602. data/lib/linguist/vendor.yml +1 -1
  603. metadata +37 -13
  604. data/ext/linguist/strndup.c +0 -10
  605. data/grammars/source.cake.json +0 -13
  606. data/grammars/source.csx.json +0 -13
  607. data/grammars/source.js.css.json +0 -328
  608. data/grammars/source.js.jsx.json +0 -2488
  609. data/grammars/source.perl6fe.json +0 -2769
  610. data/grammars/source.quoting.perl6fe.json +0 -2369
  611. data/grammars/source.regexp.perl6fe.json +0 -244
@@ -1,4323 +1 @@
1
- {
2
- "name": "C#",
3
- "scopeName": "source.cs",
4
- "patterns": [
5
- {
6
- "include": "#preprocessor"
7
- },
8
- {
9
- "include": "#comment"
10
- },
11
- {
12
- "include": "#directives"
13
- },
14
- {
15
- "include": "#declarations"
16
- },
17
- {
18
- "include": "#script-top-level"
19
- }
20
- ],
21
- "repository": {
22
- "anonymous-method-expression": {
23
- "patterns": [
24
- {
25
- "begin": "(?x)\n(?:\\b(async)\\b\\s*)?\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=\u003e)",
26
- "end": "(?=\\)|;|}|,)",
27
- "patterns": [
28
- {
29
- "include": "#block"
30
- },
31
- {
32
- "include": "#ref-modifier"
33
- },
34
- {
35
- "include": "#expression"
36
- }
37
- ],
38
- "beginCaptures": {
39
- "1": {
40
- "name": "storage.modifier.cs"
41
- },
42
- "2": {
43
- "name": "variable.parameter.function.cs"
44
- },
45
- "3": {
46
- "name": "keyword.operator.arrow.cs"
47
- }
48
- }
49
- },
50
- {
51
- "begin": "(?x)\n(?:\\b(async)\\b\\s*)?\n(\\(.*?\\))\\s*\n(=\u003e)",
52
- "end": "(?=\\)|;|}|,)",
53
- "patterns": [
54
- {
55
- "include": "#block"
56
- },
57
- {
58
- "include": "#ref-modifier"
59
- },
60
- {
61
- "include": "#expression"
62
- }
63
- ],
64
- "beginCaptures": {
65
- "1": {
66
- "name": "storage.modifier.cs"
67
- },
68
- "2": {
69
- "patterns": [
70
- {
71
- "include": "#lambda-parameter-list"
72
- }
73
- ]
74
- },
75
- "3": {
76
- "name": "keyword.operator.arrow.cs"
77
- }
78
- }
79
- },
80
- {
81
- "begin": "(?x)\n(?:\\b(async)\\b\\s*)?\n(?:\\b(delegate)\\b\\s*)",
82
- "end": "(?=\\)|;|}|,)",
83
- "patterns": [
84
- {
85
- "include": "#parenthesized-parameter-list"
86
- },
87
- {
88
- "include": "#block"
89
- },
90
- {
91
- "include": "#expression"
92
- }
93
- ],
94
- "beginCaptures": {
95
- "1": {
96
- "name": "storage.modifier.cs"
97
- },
98
- "2": {
99
- "name": "keyword.other.delegate.cs"
100
- }
101
- }
102
- }
103
- ]
104
- },
105
- "anonymous-object-creation-expression": {
106
- "begin": "\\b(new)\\b\\s*(?=\\{|$)",
107
- "end": "(?\u003c=\\})",
108
- "patterns": [
109
- {
110
- "include": "#initializer-expression"
111
- }
112
- ],
113
- "beginCaptures": {
114
- "1": {
115
- "name": "keyword.other.new.cs"
116
- }
117
- }
118
- },
119
- "argument": {
120
- "patterns": [
121
- {
122
- "name": "storage.modifier.cs",
123
- "match": "\\b(ref|out|in)\\b"
124
- },
125
- {
126
- "include": "#declaration-expression-local"
127
- },
128
- {
129
- "include": "#expression"
130
- }
131
- ]
132
- },
133
- "argument-list": {
134
- "begin": "\\(",
135
- "end": "\\)",
136
- "patterns": [
137
- {
138
- "include": "#named-argument"
139
- },
140
- {
141
- "include": "#argument"
142
- },
143
- {
144
- "include": "#punctuation-comma"
145
- }
146
- ],
147
- "beginCaptures": {
148
- "0": {
149
- "name": "punctuation.parenthesis.open.cs"
150
- }
151
- },
152
- "endCaptures": {
153
- "0": {
154
- "name": "punctuation.parenthesis.close.cs"
155
- }
156
- }
157
- },
158
- "array-creation-expression": {
159
- "begin": "(?x)\n\\b(new|stackalloc)\\b\\s*\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?\\s*\n(?=\\[)",
160
- "end": "(?\u003c=\\])",
161
- "patterns": [
162
- {
163
- "include": "#bracketed-argument-list"
164
- }
165
- ],
166
- "beginCaptures": {
167
- "1": {
168
- "name": "keyword.other.new.cs"
169
- },
170
- "2": {
171
- "patterns": [
172
- {
173
- "include": "#type"
174
- }
175
- ]
176
- }
177
- }
178
- },
179
- "as-expression": {
180
- "match": "(?x)\n(?\u003c!\\.)\\b(as)\\b\\s*\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?",
181
- "captures": {
182
- "1": {
183
- "name": "keyword.other.as.cs"
184
- },
185
- "2": {
186
- "patterns": [
187
- {
188
- "include": "#type"
189
- }
190
- ]
191
- }
192
- }
193
- },
194
- "attribute": {
195
- "patterns": [
196
- {
197
- "include": "#type-name"
198
- },
199
- {
200
- "include": "#attribute-arguments"
201
- }
202
- ]
203
- },
204
- "attribute-arguments": {
205
- "begin": "(\\()",
206
- "end": "(\\))",
207
- "patterns": [
208
- {
209
- "include": "#attribute-named-argument"
210
- },
211
- {
212
- "include": "#expression"
213
- },
214
- {
215
- "include": "#punctuation-comma"
216
- }
217
- ],
218
- "beginCaptures": {
219
- "1": {
220
- "name": "punctuation.parenthesis.open.cs"
221
- }
222
- },
223
- "endCaptures": {
224
- "1": {
225
- "name": "punctuation.parenthesis.close.cs"
226
- }
227
- }
228
- },
229
- "attribute-named-argument": {
230
- "begin": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?==)",
231
- "end": "(?=(,|\\)))",
232
- "patterns": [
233
- {
234
- "include": "#operator-assignment"
235
- },
236
- {
237
- "include": "#expression"
238
- }
239
- ],
240
- "beginCaptures": {
241
- "1": {
242
- "name": "entity.name.variable.property.cs"
243
- }
244
- }
245
- },
246
- "attribute-section": {
247
- "begin": "(\\[)(assembly|module|field|event|method|param|property|return|type)?(\\:)?",
248
- "end": "(\\])",
249
- "patterns": [
250
- {
251
- "include": "#comment"
252
- },
253
- {
254
- "include": "#attribute"
255
- },
256
- {
257
- "include": "#punctuation-comma"
258
- }
259
- ],
260
- "beginCaptures": {
261
- "1": {
262
- "name": "punctuation.squarebracket.open.cs"
263
- },
264
- "2": {
265
- "name": "keyword.other.attribute-specifier.cs"
266
- },
267
- "3": {
268
- "name": "punctuation.separator.colon.cs"
269
- }
270
- },
271
- "endCaptures": {
272
- "1": {
273
- "name": "punctuation.squarebracket.close.cs"
274
- }
275
- }
276
- },
277
- "await-expression": {
278
- "name": "keyword.other.await.cs",
279
- "match": "(?!\\.)\\b(await)\\b"
280
- },
281
- "await-statement": {
282
- "begin": "(?\u003c!\\.)\\b(await)\\b",
283
- "end": "(?=;)",
284
- "patterns": [
285
- {
286
- "include": "#expression"
287
- }
288
- ],
289
- "beginCaptures": {
290
- "1": {
291
- "name": "keyword.other.await.cs"
292
- }
293
- }
294
- },
295
- "base-types": {
296
- "begin": ":",
297
- "end": "(?=\\{|where)",
298
- "patterns": [
299
- {
300
- "include": "#type"
301
- },
302
- {
303
- "include": "#punctuation-comma"
304
- },
305
- {
306
- "include": "#preprocessor"
307
- }
308
- ],
309
- "beginCaptures": {
310
- "0": {
311
- "name": "punctuation.separator.colon.cs"
312
- }
313
- }
314
- },
315
- "block": {
316
- "begin": "\\{",
317
- "end": "\\}",
318
- "patterns": [
319
- {
320
- "include": "#statement"
321
- }
322
- ],
323
- "beginCaptures": {
324
- "0": {
325
- "name": "punctuation.curlybrace.open.cs"
326
- }
327
- },
328
- "endCaptures": {
329
- "0": {
330
- "name": "punctuation.curlybrace.close.cs"
331
- }
332
- }
333
- },
334
- "boolean-literal": {
335
- "patterns": [
336
- {
337
- "name": "constant.language.boolean.true.cs",
338
- "match": "(?\u003c!\\.)\\btrue\\b"
339
- },
340
- {
341
- "name": "constant.language.boolean.false.cs",
342
- "match": "(?\u003c!\\.)\\bfalse\\b"
343
- }
344
- ]
345
- },
346
- "bracketed-argument-list": {
347
- "begin": "\\[",
348
- "end": "\\]",
349
- "patterns": [
350
- {
351
- "include": "#named-argument"
352
- },
353
- {
354
- "include": "#argument"
355
- },
356
- {
357
- "include": "#punctuation-comma"
358
- }
359
- ],
360
- "beginCaptures": {
361
- "0": {
362
- "name": "punctuation.squarebracket.open.cs"
363
- }
364
- },
365
- "endCaptures": {
366
- "0": {
367
- "name": "punctuation.squarebracket.close.cs"
368
- }
369
- }
370
- },
371
- "bracketed-parameter-list": {
372
- "begin": "(?=(\\[))",
373
- "end": "(?=(\\]))",
374
- "patterns": [
375
- {
376
- "begin": "(?\u003c=\\[)",
377
- "end": "(?=\\])",
378
- "patterns": [
379
- {
380
- "include": "#comment"
381
- },
382
- {
383
- "include": "#attribute-section"
384
- },
385
- {
386
- "include": "#parameter"
387
- },
388
- {
389
- "include": "#punctuation-comma"
390
- },
391
- {
392
- "include": "#variable-initializer"
393
- }
394
- ]
395
- }
396
- ],
397
- "beginCaptures": {
398
- "1": {
399
- "name": "punctuation.squarebracket.open.cs"
400
- }
401
- },
402
- "endCaptures": {
403
- "1": {
404
- "name": "punctuation.squarebracket.close.cs"
405
- }
406
- }
407
- },
408
- "break-or-continue-statement": {
409
- "match": "(?\u003c!\\.)\\b(?:(break)|(continue))\\b",
410
- "captures": {
411
- "1": {
412
- "name": "keyword.control.flow.break.cs"
413
- },
414
- "2": {
415
- "name": "keyword.control.flow.continue.cs"
416
- }
417
- }
418
- },
419
- "cast-expression": {
420
- "match": "(?x)\n(\\()\\s*\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(\\))(?=\\s*@?[_[:alnum:]\\(])",
421
- "captures": {
422
- "1": {
423
- "name": "punctuation.parenthesis.open.cs"
424
- },
425
- "2": {
426
- "patterns": [
427
- {
428
- "include": "#type"
429
- }
430
- ]
431
- },
432
- "7": {
433
- "name": "punctuation.parenthesis.close.cs"
434
- }
435
- }
436
- },
437
- "catch-clause": {
438
- "begin": "(?\u003c!\\.)\\b(catch)\\b",
439
- "end": "(?\u003c=\\})",
440
- "patterns": [
441
- {
442
- "begin": "\\(",
443
- "end": "\\)",
444
- "patterns": [
445
- {
446
- "match": "(?x)\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?:(\\g\u003cidentifier\u003e)\\b)?",
447
- "captures": {
448
- "1": {
449
- "patterns": [
450
- {
451
- "include": "#type"
452
- }
453
- ]
454
- },
455
- "6": {
456
- "name": "variable.other.cs"
457
- }
458
- }
459
- }
460
- ],
461
- "beginCaptures": {
462
- "0": {
463
- "name": "punctuation.parenthesis.open.cs"
464
- }
465
- },
466
- "endCaptures": {
467
- "0": {
468
- "name": "punctuation.parenthesis.close.cs"
469
- }
470
- }
471
- },
472
- {
473
- "include": "#when-clause"
474
- },
475
- {
476
- "include": "#comment"
477
- },
478
- {
479
- "include": "#block"
480
- }
481
- ],
482
- "beginCaptures": {
483
- "1": {
484
- "name": "keyword.control.try.catch.cs"
485
- }
486
- }
487
- },
488
- "char-literal": {
489
- "name": "string.quoted.single.cs",
490
- "begin": "'",
491
- "end": "(\\')|((?:[^\\\\\\n])$)",
492
- "patterns": [
493
- {
494
- "include": "#string-character-escape"
495
- }
496
- ],
497
- "beginCaptures": {
498
- "0": {
499
- "name": "punctuation.definition.char.begin.cs"
500
- }
501
- },
502
- "endCaptures": {
503
- "1": {
504
- "name": "punctuation.definition.char.end.cs"
505
- },
506
- "2": {
507
- "name": "invalid.illegal.newline.cs"
508
- }
509
- }
510
- },
511
- "checked-unchecked-expression": {
512
- "begin": "(?\u003c!\\.)\\b(?:(checked)|(unchecked))\\b\\s*(\\()",
513
- "end": "\\)",
514
- "patterns": [
515
- {
516
- "include": "#expression"
517
- }
518
- ],
519
- "beginCaptures": {
520
- "1": {
521
- "name": "keyword.other.checked.cs"
522
- },
523
- "2": {
524
- "name": "keyword.other.unchecked.cs"
525
- },
526
- "3": {
527
- "name": "punctuation.parenthesis.open.cs"
528
- }
529
- },
530
- "endCaptures": {
531
- "0": {
532
- "name": "punctuation.parenthesis.close.cs"
533
- }
534
- }
535
- },
536
- "checked-unchecked-statement": {
537
- "begin": "(?\u003c!\\.)\\b(?:(checked)|(unchecked))\\b\\s*(?!\\()",
538
- "end": "(?\u003c=\\})",
539
- "patterns": [
540
- {
541
- "include": "#block"
542
- },
543
- {
544
- "include": "#comment"
545
- }
546
- ],
547
- "beginCaptures": {
548
- "1": {
549
- "name": "keyword.other.checked.cs"
550
- },
551
- "2": {
552
- "name": "keyword.other.unchecked.cs"
553
- }
554
- }
555
- },
556
- "class-declaration": {
557
- "begin": "(?=\\bclass\\b)",
558
- "end": "(?\u003c=\\})",
559
- "patterns": [
560
- {
561
- "begin": "(?x)\n\\b(class)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*",
562
- "end": "(?=\\{)",
563
- "patterns": [
564
- {
565
- "include": "#comment"
566
- },
567
- {
568
- "include": "#type-parameter-list"
569
- },
570
- {
571
- "include": "#base-types"
572
- },
573
- {
574
- "include": "#generic-constraints"
575
- }
576
- ],
577
- "beginCaptures": {
578
- "1": {
579
- "name": "keyword.other.class.cs"
580
- },
581
- "2": {
582
- "name": "entity.name.type.class.cs"
583
- }
584
- }
585
- },
586
- {
587
- "begin": "\\{",
588
- "end": "\\}",
589
- "patterns": [
590
- {
591
- "include": "#class-or-struct-members"
592
- }
593
- ],
594
- "beginCaptures": {
595
- "0": {
596
- "name": "punctuation.curlybrace.open.cs"
597
- }
598
- },
599
- "endCaptures": {
600
- "0": {
601
- "name": "punctuation.curlybrace.close.cs"
602
- }
603
- }
604
- },
605
- {
606
- "include": "#preprocessor"
607
- },
608
- {
609
- "include": "#comment"
610
- }
611
- ]
612
- },
613
- "class-or-struct-members": {
614
- "patterns": [
615
- {
616
- "include": "#preprocessor"
617
- },
618
- {
619
- "include": "#comment"
620
- },
621
- {
622
- "include": "#storage-modifier"
623
- },
624
- {
625
- "include": "#type-declarations"
626
- },
627
- {
628
- "include": "#property-declaration"
629
- },
630
- {
631
- "include": "#field-declaration"
632
- },
633
- {
634
- "include": "#event-declaration"
635
- },
636
- {
637
- "include": "#indexer-declaration"
638
- },
639
- {
640
- "include": "#variable-initializer"
641
- },
642
- {
643
- "include": "#constructor-declaration"
644
- },
645
- {
646
- "include": "#destructor-declaration"
647
- },
648
- {
649
- "include": "#operator-declaration"
650
- },
651
- {
652
- "include": "#conversion-operator-declaration"
653
- },
654
- {
655
- "include": "#method-declaration"
656
- },
657
- {
658
- "include": "#attribute-section"
659
- },
660
- {
661
- "include": "#punctuation-semicolon"
662
- }
663
- ]
664
- },
665
- "comment": {
666
- "patterns": [
667
- {
668
- "name": "comment.block.cs",
669
- "begin": "/\\*",
670
- "end": "\\*/",
671
- "beginCaptures": {
672
- "0": {
673
- "name": "punctuation.definition.comment.cs"
674
- }
675
- },
676
- "endCaptures": {
677
- "0": {
678
- "name": "punctuation.definition.comment.cs"
679
- }
680
- }
681
- },
682
- {
683
- "begin": "(^\\s+)?(?=//)",
684
- "end": "(?=$)",
685
- "patterns": [
686
- {
687
- "name": "comment.block.documentation.cs",
688
- "begin": "(?\u003c!/)///(?!/)",
689
- "end": "(?=$)",
690
- "patterns": [
691
- {
692
- "include": "#xml-doc-comment"
693
- }
694
- ],
695
- "beginCaptures": {
696
- "0": {
697
- "name": "punctuation.definition.comment.cs"
698
- }
699
- }
700
- },
701
- {
702
- "name": "comment.line.double-slash.cs",
703
- "begin": "(?\u003c!/)//(?:(?!/)|(?=//))",
704
- "end": "(?=$)",
705
- "beginCaptures": {
706
- "0": {
707
- "name": "punctuation.definition.comment.cs"
708
- }
709
- }
710
- }
711
- ],
712
- "beginCaptures": {
713
- "1": {
714
- "name": "punctuation.whitespace.comment.leading.cs"
715
- }
716
- }
717
- }
718
- ]
719
- },
720
- "conditional-operator": {
721
- "begin": "(?\u003c!\\?)\\?(?!\\?|\\.|\\[)",
722
- "end": ":",
723
- "patterns": [
724
- {
725
- "include": "#expression"
726
- }
727
- ],
728
- "beginCaptures": {
729
- "0": {
730
- "name": "keyword.operator.conditional.question-mark.cs"
731
- }
732
- },
733
- "endCaptures": {
734
- "0": {
735
- "name": "keyword.operator.conditional.colon.cs"
736
- }
737
- }
738
- },
739
- "constructor-declaration": {
740
- "begin": "(?=@?[_[:alpha:]][_[:alnum:]]*\\s*\\()",
741
- "end": "(?\u003c=\\})|(?=;)",
742
- "patterns": [
743
- {
744
- "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\b",
745
- "captures": {
746
- "1": {
747
- "name": "entity.name.function.cs"
748
- }
749
- }
750
- },
751
- {
752
- "begin": "(:)",
753
- "end": "(?=\\{|=\u003e)",
754
- "patterns": [
755
- {
756
- "include": "#constructor-initializer"
757
- }
758
- ],
759
- "beginCaptures": {
760
- "1": {
761
- "name": "punctuation.separator.colon.cs"
762
- }
763
- }
764
- },
765
- {
766
- "include": "#parenthesized-parameter-list"
767
- },
768
- {
769
- "include": "#preprocessor"
770
- },
771
- {
772
- "include": "#comment"
773
- },
774
- {
775
- "include": "#expression-body"
776
- },
777
- {
778
- "include": "#block"
779
- }
780
- ]
781
- },
782
- "constructor-initializer": {
783
- "begin": "\\b(?:(base)|(this))\\b\\s*(?=\\()",
784
- "end": "(?\u003c=\\))",
785
- "patterns": [
786
- {
787
- "include": "#argument-list"
788
- }
789
- ],
790
- "beginCaptures": {
791
- "1": {
792
- "name": "keyword.other.base.cs"
793
- },
794
- "2": {
795
- "name": "keyword.other.this.cs"
796
- }
797
- }
798
- },
799
- "conversion-operator-declaration": {
800
- "begin": "(?x)\n(?\u003cexplicitorimplicitkeyword\u003e(?:\\b(?:explicit|implicit)))\\s*\n(?\u003coperatorkeyword\u003e(?:\\b(?:operator)))\\s*\n(?\u003ctypename\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?=\\()",
801
- "end": "(?\u003c=\\})|(?=;)",
802
- "patterns": [
803
- {
804
- "include": "#comment"
805
- },
806
- {
807
- "include": "#parenthesized-parameter-list"
808
- },
809
- {
810
- "include": "#expression-body"
811
- },
812
- {
813
- "include": "#block"
814
- }
815
- ],
816
- "beginCaptures": {
817
- "1": {
818
- "patterns": [
819
- {
820
- "match": "\\b(explicit)\\b",
821
- "captures": {
822
- "1": {
823
- "name": "keyword.other.explicit.cs"
824
- }
825
- }
826
- },
827
- {
828
- "match": "\\b(implicit)\\b",
829
- "captures": {
830
- "1": {
831
- "name": "keyword.other.implicit.cs"
832
- }
833
- }
834
- }
835
- ]
836
- },
837
- "2": {
838
- "name": "keyword.other.operator-decl.cs"
839
- },
840
- "3": {
841
- "patterns": [
842
- {
843
- "include": "#type"
844
- }
845
- ]
846
- }
847
- }
848
- },
849
- "declaration-expression-local": {
850
- "match": "(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)\\]])",
851
- "captures": {
852
- "1": {
853
- "name": "keyword.other.var.cs"
854
- },
855
- "2": {
856
- "patterns": [
857
- {
858
- "include": "#type"
859
- }
860
- ]
861
- },
862
- "7": {
863
- "name": "variable.other.cs"
864
- }
865
- }
866
- },
867
- "declaration-expression-tuple": {
868
- "match": "(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])",
869
- "captures": {
870
- "1": {
871
- "name": "keyword.other.var.cs"
872
- },
873
- "2": {
874
- "patterns": [
875
- {
876
- "include": "#type"
877
- }
878
- ]
879
- },
880
- "7": {
881
- "name": "entity.name.variable.tuple-element.cs"
882
- }
883
- }
884
- },
885
- "declarations": {
886
- "patterns": [
887
- {
888
- "include": "#namespace-declaration"
889
- },
890
- {
891
- "include": "#type-declarations"
892
- },
893
- {
894
- "include": "#punctuation-semicolon"
895
- }
896
- ]
897
- },
898
- "delegate-declaration": {
899
- "begin": "(?x)\n(?:\\b(delegate)\\b)\\s+\n(?\u003ctypename\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()",
900
- "end": "(?=;)",
901
- "patterns": [
902
- {
903
- "include": "#comment"
904
- },
905
- {
906
- "include": "#parenthesized-parameter-list"
907
- },
908
- {
909
- "include": "#generic-constraints"
910
- }
911
- ],
912
- "beginCaptures": {
913
- "1": {
914
- "name": "keyword.other.delegate.cs"
915
- },
916
- "2": {
917
- "patterns": [
918
- {
919
- "include": "#type"
920
- }
921
- ]
922
- },
923
- "7": {
924
- "name": "entity.name.type.delegate.cs"
925
- },
926
- "8": {
927
- "patterns": [
928
- {
929
- "include": "#type-parameter-list"
930
- }
931
- ]
932
- }
933
- }
934
- },
935
- "destructor-declaration": {
936
- "begin": "(~)(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?=\\()",
937
- "end": "(?\u003c=\\})|(?=;)",
938
- "patterns": [
939
- {
940
- "include": "#comment"
941
- },
942
- {
943
- "include": "#parenthesized-parameter-list"
944
- },
945
- {
946
- "include": "#expression-body"
947
- },
948
- {
949
- "include": "#block"
950
- }
951
- ],
952
- "beginCaptures": {
953
- "1": {
954
- "name": "punctuation.tilde.cs"
955
- },
956
- "2": {
957
- "name": "entity.name.function.cs"
958
- }
959
- }
960
- },
961
- "directives": {
962
- "patterns": [
963
- {
964
- "include": "#extern-alias-directive"
965
- },
966
- {
967
- "include": "#using-directive"
968
- },
969
- {
970
- "include": "#attribute-section"
971
- },
972
- {
973
- "include": "#punctuation-semicolon"
974
- }
975
- ]
976
- },
977
- "do-statement": {
978
- "begin": "(?\u003c!\\.)\\b(do)\\b",
979
- "end": "(?=;|})",
980
- "patterns": [
981
- {
982
- "include": "#statement"
983
- }
984
- ],
985
- "beginCaptures": {
986
- "1": {
987
- "name": "keyword.control.loop.do.cs"
988
- }
989
- }
990
- },
991
- "element-access-expression": {
992
- "begin": "(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*)? # property name\n(?:(\\?)\\s*)? # null-conditional operator?\n(?=\\[) # open bracket of argument list",
993
- "end": "(?\u003c=\\])(?!\\s*\\[)",
994
- "patterns": [
995
- {
996
- "include": "#bracketed-argument-list"
997
- }
998
- ],
999
- "beginCaptures": {
1000
- "1": {
1001
- "name": "keyword.operator.null-conditional.cs"
1002
- },
1003
- "2": {
1004
- "name": "punctuation.accessor.cs"
1005
- },
1006
- "3": {
1007
- "name": "variable.other.object.property.cs"
1008
- },
1009
- "4": {
1010
- "name": "keyword.operator.null-conditional.cs"
1011
- }
1012
- }
1013
- },
1014
- "else-part": {
1015
- "begin": "(?\u003c!\\.)\\b(else)\\b",
1016
- "end": "(?\u003c=\\})|(?=;)",
1017
- "patterns": [
1018
- {
1019
- "include": "#statement"
1020
- }
1021
- ],
1022
- "beginCaptures": {
1023
- "1": {
1024
- "name": "keyword.control.conditional.else.cs"
1025
- }
1026
- }
1027
- },
1028
- "enum-declaration": {
1029
- "begin": "(?=\\benum\\b)",
1030
- "end": "(?\u003c=\\})",
1031
- "patterns": [
1032
- {
1033
- "begin": "(?=enum)",
1034
- "end": "(?=\\{)",
1035
- "patterns": [
1036
- {
1037
- "include": "#comment"
1038
- },
1039
- {
1040
- "match": "(enum)\\s+(@?[_[:alpha:]][_[:alnum:]]*)",
1041
- "captures": {
1042
- "1": {
1043
- "name": "keyword.other.enum.cs"
1044
- },
1045
- "2": {
1046
- "name": "entity.name.type.enum.cs"
1047
- }
1048
- }
1049
- },
1050
- {
1051
- "begin": ":",
1052
- "end": "(?=\\{)",
1053
- "patterns": [
1054
- {
1055
- "include": "#type"
1056
- }
1057
- ],
1058
- "beginCaptures": {
1059
- "0": {
1060
- "name": "punctuation.separator.colon.cs"
1061
- }
1062
- }
1063
- }
1064
- ]
1065
- },
1066
- {
1067
- "begin": "\\{",
1068
- "end": "\\}",
1069
- "patterns": [
1070
- {
1071
- "include": "#preprocessor"
1072
- },
1073
- {
1074
- "include": "#comment"
1075
- },
1076
- {
1077
- "include": "#attribute-section"
1078
- },
1079
- {
1080
- "include": "#punctuation-comma"
1081
- },
1082
- {
1083
- "begin": "@?[_[:alpha:]][_[:alnum:]]*",
1084
- "end": "(?=(,|\\}))",
1085
- "patterns": [
1086
- {
1087
- "include": "#comment"
1088
- },
1089
- {
1090
- "include": "#variable-initializer"
1091
- }
1092
- ],
1093
- "beginCaptures": {
1094
- "0": {
1095
- "name": "entity.name.variable.enum-member.cs"
1096
- }
1097
- }
1098
- }
1099
- ],
1100
- "beginCaptures": {
1101
- "0": {
1102
- "name": "punctuation.curlybrace.open.cs"
1103
- }
1104
- },
1105
- "endCaptures": {
1106
- "0": {
1107
- "name": "punctuation.curlybrace.close.cs"
1108
- }
1109
- }
1110
- },
1111
- {
1112
- "include": "#preprocessor"
1113
- },
1114
- {
1115
- "include": "#comment"
1116
- }
1117
- ]
1118
- },
1119
- "event-accessors": {
1120
- "begin": "\\{",
1121
- "end": "\\}",
1122
- "patterns": [
1123
- {
1124
- "name": "keyword.other.add.cs",
1125
- "match": "\\b(add)\\b"
1126
- },
1127
- {
1128
- "name": "keyword.other.remove.cs",
1129
- "match": "\\b(remove)\\b"
1130
- },
1131
- {
1132
- "include": "#comment"
1133
- },
1134
- {
1135
- "include": "#attribute-section"
1136
- },
1137
- {
1138
- "include": "#expression-body"
1139
- },
1140
- {
1141
- "include": "#block"
1142
- },
1143
- {
1144
- "include": "#punctuation-semicolon"
1145
- }
1146
- ],
1147
- "beginCaptures": {
1148
- "0": {
1149
- "name": "punctuation.curlybrace.open.cs"
1150
- }
1151
- },
1152
- "endCaptures": {
1153
- "0": {
1154
- "name": "punctuation.curlybrace.close.cs"
1155
- }
1156
- }
1157
- },
1158
- "event-declaration": {
1159
- "begin": "(?x)\n\\b(event)\\b\\s*\n(?\u003creturntype\u003e\n (?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?\u003cinterfacename\u003e\\g\u003ctypename\u003e\\s*\\.\\s*)?\n(?\u003ceventnames\u003e\\g\u003cidentifier\u003e(?:\\s*,\\s*\\g\u003cidentifier\u003e)*)\\s*\n(?=\\{|;|$)",
1160
- "end": "(?\u003c=\\})|(?=;)",
1161
- "patterns": [
1162
- {
1163
- "include": "#comment"
1164
- },
1165
- {
1166
- "include": "#event-accessors"
1167
- },
1168
- {
1169
- "include": "#punctuation-comma"
1170
- }
1171
- ],
1172
- "beginCaptures": {
1173
- "1": {
1174
- "name": "keyword.other.event.cs"
1175
- },
1176
- "2": {
1177
- "patterns": [
1178
- {
1179
- "include": "#type"
1180
- }
1181
- ]
1182
- },
1183
- "8": {
1184
- "patterns": [
1185
- {
1186
- "include": "#type"
1187
- },
1188
- {
1189
- "include": "#punctuation-accessor"
1190
- }
1191
- ]
1192
- },
1193
- "9": {
1194
- "patterns": [
1195
- {
1196
- "name": "entity.name.variable.event.cs",
1197
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
1198
- },
1199
- {
1200
- "include": "#punctuation-comma"
1201
- }
1202
- ]
1203
- }
1204
- }
1205
- },
1206
- "expression": {
1207
- "patterns": [
1208
- {
1209
- "include": "#preprocessor"
1210
- },
1211
- {
1212
- "include": "#comment"
1213
- },
1214
- {
1215
- "include": "#checked-unchecked-expression"
1216
- },
1217
- {
1218
- "include": "#typeof-or-default-expression"
1219
- },
1220
- {
1221
- "include": "#nameof-expression"
1222
- },
1223
- {
1224
- "include": "#throw-expression"
1225
- },
1226
- {
1227
- "include": "#interpolated-string"
1228
- },
1229
- {
1230
- "include": "#verbatim-interpolated-string"
1231
- },
1232
- {
1233
- "include": "#this-or-base-expression"
1234
- },
1235
- {
1236
- "include": "#conditional-operator"
1237
- },
1238
- {
1239
- "include": "#expression-operators"
1240
- },
1241
- {
1242
- "include": "#await-expression"
1243
- },
1244
- {
1245
- "include": "#query-expression"
1246
- },
1247
- {
1248
- "include": "#as-expression"
1249
- },
1250
- {
1251
- "include": "#is-expression"
1252
- },
1253
- {
1254
- "include": "#anonymous-method-expression"
1255
- },
1256
- {
1257
- "include": "#object-creation-expression"
1258
- },
1259
- {
1260
- "include": "#array-creation-expression"
1261
- },
1262
- {
1263
- "include": "#anonymous-object-creation-expression"
1264
- },
1265
- {
1266
- "include": "#invocation-expression"
1267
- },
1268
- {
1269
- "include": "#member-access-expression"
1270
- },
1271
- {
1272
- "include": "#element-access-expression"
1273
- },
1274
- {
1275
- "include": "#cast-expression"
1276
- },
1277
- {
1278
- "include": "#literal"
1279
- },
1280
- {
1281
- "include": "#parenthesized-expression"
1282
- },
1283
- {
1284
- "include": "#tuple-deconstruction-assignment"
1285
- },
1286
- {
1287
- "include": "#initializer-expression"
1288
- },
1289
- {
1290
- "include": "#identifier"
1291
- }
1292
- ]
1293
- },
1294
- "expression-body": {
1295
- "begin": "=\u003e",
1296
- "end": "(?=[,\\);}])",
1297
- "patterns": [
1298
- {
1299
- "include": "#ref-modifier"
1300
- },
1301
- {
1302
- "include": "#expression"
1303
- }
1304
- ],
1305
- "beginCaptures": {
1306
- "0": {
1307
- "name": "keyword.operator.arrow.cs"
1308
- }
1309
- }
1310
- },
1311
- "expression-operators": {
1312
- "patterns": [
1313
- {
1314
- "name": "keyword.operator.assignment.compound.cs",
1315
- "match": "\\*=|/=|%=|\\+=|-="
1316
- },
1317
- {
1318
- "name": "keyword.operator.assignment.compound.bitwise.cs",
1319
- "match": "\\\u0026=|\\^=|\u003c\u003c=|\u003e\u003e=|\\|="
1320
- },
1321
- {
1322
- "name": "keyword.operator.bitwise.shift.cs",
1323
- "match": "\u003c\u003c|\u003e\u003e"
1324
- },
1325
- {
1326
- "name": "keyword.operator.comparison.cs",
1327
- "match": "==|!="
1328
- },
1329
- {
1330
- "name": "keyword.operator.relational.cs",
1331
- "match": "\u003c=|\u003e=|\u003c|\u003e"
1332
- },
1333
- {
1334
- "name": "keyword.operator.logical.cs",
1335
- "match": "\\!|\u0026\u0026|\\|\\|"
1336
- },
1337
- {
1338
- "name": "keyword.operator.bitwise.cs",
1339
- "match": "\\\u0026|~|\\^|\\|"
1340
- },
1341
- {
1342
- "name": "keyword.operator.assignment.cs",
1343
- "match": "\\="
1344
- },
1345
- {
1346
- "name": "keyword.operator.decrement.cs",
1347
- "match": "--"
1348
- },
1349
- {
1350
- "name": "keyword.operator.increment.cs",
1351
- "match": "\\+\\+"
1352
- },
1353
- {
1354
- "name": "keyword.operator.arithmetic.cs",
1355
- "match": "%|\\*|/|-|\\+"
1356
- },
1357
- {
1358
- "name": "keyword.operator.null-coalescing.cs",
1359
- "match": "\\?\\?"
1360
- }
1361
- ]
1362
- },
1363
- "extern-alias-directive": {
1364
- "begin": "\\s*(extern)\\b\\s*(alias)\\b\\s*(@?[_[:alpha:]][_[:alnum:]]*)",
1365
- "end": "(?=;)",
1366
- "beginCaptures": {
1367
- "1": {
1368
- "name": "keyword.other.extern.cs"
1369
- },
1370
- "2": {
1371
- "name": "keyword.other.alias.cs"
1372
- },
1373
- "3": {
1374
- "name": "variable.other.alias.cs"
1375
- }
1376
- }
1377
- },
1378
- "field-declaration": {
1379
- "begin": "(?x)\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s* # first field name\n(?!=\u003e|==)(?=,|;|=|$)",
1380
- "end": "(?=;)",
1381
- "patterns": [
1382
- {
1383
- "name": "variable.other.cs",
1384
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
1385
- },
1386
- {
1387
- "include": "#punctuation-comma"
1388
- },
1389
- {
1390
- "include": "#comment"
1391
- },
1392
- {
1393
- "include": "#variable-initializer"
1394
- },
1395
- {
1396
- "include": "#class-or-struct-members"
1397
- }
1398
- ],
1399
- "beginCaptures": {
1400
- "1": {
1401
- "patterns": [
1402
- {
1403
- "include": "#type"
1404
- }
1405
- ]
1406
- },
1407
- "6": {
1408
- "name": "variable.other.cs"
1409
- }
1410
- }
1411
- },
1412
- "finally-clause": {
1413
- "begin": "(?\u003c!\\.)\\b(finally)\\b",
1414
- "end": "(?\u003c=\\})",
1415
- "patterns": [
1416
- {
1417
- "include": "#comment"
1418
- },
1419
- {
1420
- "include": "#block"
1421
- }
1422
- ],
1423
- "beginCaptures": {
1424
- "1": {
1425
- "name": "keyword.control.try.finally.cs"
1426
- }
1427
- }
1428
- },
1429
- "for-statement": {
1430
- "begin": "(?\u003c!\\.)\\b(for)\\b\\s*(?=\\()",
1431
- "end": "(?\u003c=\\})|(?=;)",
1432
- "patterns": [
1433
- {
1434
- "begin": "\\(",
1435
- "end": "\\)",
1436
- "patterns": [
1437
- {
1438
- "include": "#local-variable-declaration"
1439
- },
1440
- {
1441
- "include": "#expression"
1442
- },
1443
- {
1444
- "include": "#punctuation-comma"
1445
- },
1446
- {
1447
- "include": "#punctuation-semicolon"
1448
- }
1449
- ],
1450
- "beginCaptures": {
1451
- "0": {
1452
- "name": "punctuation.parenthesis.open.cs"
1453
- }
1454
- },
1455
- "endCaptures": {
1456
- "0": {
1457
- "name": "punctuation.parenthesis.close.cs"
1458
- }
1459
- }
1460
- },
1461
- {
1462
- "include": "#statement"
1463
- }
1464
- ],
1465
- "beginCaptures": {
1466
- "1": {
1467
- "name": "keyword.control.loop.for.cs"
1468
- }
1469
- }
1470
- },
1471
- "foreach-statement": {
1472
- "begin": "(?\u003c!\\.)\\b(foreach)\\b\\s*(?=\\()",
1473
- "end": "(?\u003c=\\})|(?=;)",
1474
- "patterns": [
1475
- {
1476
- "begin": "\\(",
1477
- "end": "\\)",
1478
- "patterns": [
1479
- {
1480
- "match": "(?x)\n(?:\n (\\bvar\\b)|\n (?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s+\n\\b(in)\\b",
1481
- "captures": {
1482
- "1": {
1483
- "name": "keyword.other.var.cs"
1484
- },
1485
- "2": {
1486
- "patterns": [
1487
- {
1488
- "include": "#type"
1489
- }
1490
- ]
1491
- },
1492
- "7": {
1493
- "name": "variable.other.cs"
1494
- },
1495
- "8": {
1496
- "name": "keyword.control.loop.in.cs"
1497
- }
1498
- }
1499
- },
1500
- {
1501
- "match": "(?x) # match foreach (var (x, y) in ...)\n(?:\\b(var)\\b\\s*)?\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s+\n\\b(in)\\b",
1502
- "captures": {
1503
- "1": {
1504
- "name": "keyword.other.var.cs"
1505
- },
1506
- "2": {
1507
- "patterns": [
1508
- {
1509
- "include": "#tuple-declaration-deconstruction-element-list"
1510
- }
1511
- ]
1512
- },
1513
- "3": {
1514
- "name": "keyword.control.loop.in.cs"
1515
- }
1516
- }
1517
- },
1518
- {
1519
- "include": "#expression"
1520
- }
1521
- ],
1522
- "beginCaptures": {
1523
- "0": {
1524
- "name": "punctuation.parenthesis.open.cs"
1525
- }
1526
- },
1527
- "endCaptures": {
1528
- "0": {
1529
- "name": "punctuation.parenthesis.close.cs"
1530
- }
1531
- }
1532
- },
1533
- {
1534
- "include": "#statement"
1535
- }
1536
- ],
1537
- "beginCaptures": {
1538
- "1": {
1539
- "name": "keyword.control.loop.foreach.cs"
1540
- }
1541
- }
1542
- },
1543
- "generic-constraints": {
1544
- "begin": "(where)\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)",
1545
- "end": "(?=\\{|where|;|=\u003e)",
1546
- "patterns": [
1547
- {
1548
- "name": "keyword.other.class.cs",
1549
- "match": "\\bclass\\b"
1550
- },
1551
- {
1552
- "name": "keyword.other.struct.cs",
1553
- "match": "\\bstruct\\b"
1554
- },
1555
- {
1556
- "match": "(new)\\s*(\\()\\s*(\\))",
1557
- "captures": {
1558
- "1": {
1559
- "name": "keyword.other.new.cs"
1560
- },
1561
- "2": {
1562
- "name": "punctuation.parenthesis.open.cs"
1563
- },
1564
- "3": {
1565
- "name": "punctuation.parenthesis.close.cs"
1566
- }
1567
- }
1568
- },
1569
- {
1570
- "include": "#type"
1571
- },
1572
- {
1573
- "include": "#punctuation-comma"
1574
- },
1575
- {
1576
- "include": "#generic-constraints"
1577
- }
1578
- ],
1579
- "beginCaptures": {
1580
- "1": {
1581
- "name": "keyword.other.where.cs"
1582
- },
1583
- "2": {
1584
- "name": "entity.name.type.type-parameter.cs"
1585
- },
1586
- "3": {
1587
- "name": "punctuation.separator.colon.cs"
1588
- }
1589
- }
1590
- },
1591
- "goto-statement": {
1592
- "begin": "(?\u003c!\\.)\\b(goto)\\b",
1593
- "end": "(?=;)",
1594
- "patterns": [
1595
- {
1596
- "begin": "\\b(case)\\b",
1597
- "end": "(?=;)",
1598
- "patterns": [
1599
- {
1600
- "include": "#expression"
1601
- }
1602
- ],
1603
- "beginCaptures": {
1604
- "1": {
1605
- "name": "keyword.control.case.cs"
1606
- }
1607
- }
1608
- },
1609
- {
1610
- "match": "\\b(default)\\b",
1611
- "captures": {
1612
- "1": {
1613
- "name": "keyword.control.default.cs"
1614
- }
1615
- }
1616
- },
1617
- {
1618
- "name": "entity.name.label.cs",
1619
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
1620
- }
1621
- ],
1622
- "beginCaptures": {
1623
- "1": {
1624
- "name": "keyword.control.goto.cs"
1625
- }
1626
- }
1627
- },
1628
- "group-by": {
1629
- "match": "\\b(by)\\b\\s*",
1630
- "captures": {
1631
- "1": {
1632
- "name": "keyword.query.by.cs"
1633
- }
1634
- }
1635
- },
1636
- "group-clause": {
1637
- "begin": "\\b(group)\\b\\s*",
1638
- "end": "(?=;|\\))",
1639
- "patterns": [
1640
- {
1641
- "include": "#group-by"
1642
- },
1643
- {
1644
- "include": "#group-into"
1645
- },
1646
- {
1647
- "include": "#query-body"
1648
- },
1649
- {
1650
- "include": "#expression"
1651
- }
1652
- ],
1653
- "beginCaptures": {
1654
- "1": {
1655
- "name": "keyword.query.group.cs"
1656
- }
1657
- }
1658
- },
1659
- "group-into": {
1660
- "match": "(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*",
1661
- "captures": {
1662
- "1": {
1663
- "name": "keyword.query.into.cs"
1664
- },
1665
- "2": {
1666
- "name": "entity.name.variable.range-variable.cs"
1667
- }
1668
- }
1669
- },
1670
- "identifier": {
1671
- "name": "variable.other.readwrite.cs",
1672
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
1673
- },
1674
- "if-statement": {
1675
- "begin": "(?\u003c!\\.)\\b(if)\\b\\s*(?=\\()",
1676
- "end": "(?\u003c=\\})|(?=;)",
1677
- "patterns": [
1678
- {
1679
- "begin": "\\(",
1680
- "end": "\\)",
1681
- "patterns": [
1682
- {
1683
- "include": "#expression"
1684
- }
1685
- ],
1686
- "beginCaptures": {
1687
- "0": {
1688
- "name": "punctuation.parenthesis.open.cs"
1689
- }
1690
- },
1691
- "endCaptures": {
1692
- "0": {
1693
- "name": "punctuation.parenthesis.close.cs"
1694
- }
1695
- }
1696
- },
1697
- {
1698
- "include": "#statement"
1699
- }
1700
- ],
1701
- "beginCaptures": {
1702
- "1": {
1703
- "name": "keyword.control.conditional.if.cs"
1704
- }
1705
- }
1706
- },
1707
- "indexer-declaration": {
1708
- "begin": "(?x)\n(?\u003creturntype\u003e\n (?\u003ctypename\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?\u003cinterfacename\u003e\\g\u003ctypename\u003e\\s*\\.\\s*)?\n(?\u003cindexername\u003ethis)\\s*\n(?=\\[)",
1709
- "end": "(?\u003c=\\})|(?=;)",
1710
- "patterns": [
1711
- {
1712
- "include": "#comment"
1713
- },
1714
- {
1715
- "include": "#bracketed-parameter-list"
1716
- },
1717
- {
1718
- "include": "#property-accessors"
1719
- },
1720
- {
1721
- "include": "#expression-body"
1722
- },
1723
- {
1724
- "include": "#variable-initializer"
1725
- }
1726
- ],
1727
- "beginCaptures": {
1728
- "1": {
1729
- "patterns": [
1730
- {
1731
- "include": "#type"
1732
- }
1733
- ]
1734
- },
1735
- "7": {
1736
- "patterns": [
1737
- {
1738
- "include": "#type"
1739
- },
1740
- {
1741
- "include": "#punctuation-accessor"
1742
- }
1743
- ]
1744
- },
1745
- "8": {
1746
- "name": "keyword.other.this.cs"
1747
- }
1748
- }
1749
- },
1750
- "initializer-expression": {
1751
- "begin": "\\{",
1752
- "end": "\\}",
1753
- "patterns": [
1754
- {
1755
- "include": "#expression"
1756
- },
1757
- {
1758
- "include": "#punctuation-comma"
1759
- }
1760
- ],
1761
- "beginCaptures": {
1762
- "0": {
1763
- "name": "punctuation.curlybrace.open.cs"
1764
- }
1765
- },
1766
- "endCaptures": {
1767
- "0": {
1768
- "name": "punctuation.curlybrace.close.cs"
1769
- }
1770
- }
1771
- },
1772
- "interface-declaration": {
1773
- "begin": "(?=\\binterface\\b)",
1774
- "end": "(?\u003c=\\})",
1775
- "patterns": [
1776
- {
1777
- "begin": "(?x)\n(interface)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)",
1778
- "end": "(?=\\{)",
1779
- "patterns": [
1780
- {
1781
- "include": "#comment"
1782
- },
1783
- {
1784
- "include": "#type-parameter-list"
1785
- },
1786
- {
1787
- "include": "#base-types"
1788
- },
1789
- {
1790
- "include": "#generic-constraints"
1791
- }
1792
- ],
1793
- "beginCaptures": {
1794
- "1": {
1795
- "name": "keyword.other.interface.cs"
1796
- },
1797
- "2": {
1798
- "name": "entity.name.type.interface.cs"
1799
- }
1800
- }
1801
- },
1802
- {
1803
- "begin": "\\{",
1804
- "end": "\\}",
1805
- "patterns": [
1806
- {
1807
- "include": "#interface-members"
1808
- }
1809
- ],
1810
- "beginCaptures": {
1811
- "0": {
1812
- "name": "punctuation.curlybrace.open.cs"
1813
- }
1814
- },
1815
- "endCaptures": {
1816
- "0": {
1817
- "name": "punctuation.curlybrace.close.cs"
1818
- }
1819
- }
1820
- },
1821
- {
1822
- "include": "#preprocessor"
1823
- },
1824
- {
1825
- "include": "#comment"
1826
- }
1827
- ]
1828
- },
1829
- "interface-members": {
1830
- "patterns": [
1831
- {
1832
- "include": "#preprocessor"
1833
- },
1834
- {
1835
- "include": "#comment"
1836
- },
1837
- {
1838
- "include": "#property-declaration"
1839
- },
1840
- {
1841
- "include": "#event-declaration"
1842
- },
1843
- {
1844
- "include": "#indexer-declaration"
1845
- },
1846
- {
1847
- "include": "#method-declaration"
1848
- },
1849
- {
1850
- "include": "#attribute-section"
1851
- },
1852
- {
1853
- "include": "#punctuation-semicolon"
1854
- }
1855
- ]
1856
- },
1857
- "interpolated-string": {
1858
- "name": "string.quoted.double.cs",
1859
- "begin": "\\$\"",
1860
- "end": "(\")|((?:[^\\\\\\n])$)",
1861
- "patterns": [
1862
- {
1863
- "include": "#string-character-escape"
1864
- },
1865
- {
1866
- "include": "#interpolation"
1867
- }
1868
- ],
1869
- "beginCaptures": {
1870
- "0": {
1871
- "name": "punctuation.definition.string.begin.cs"
1872
- }
1873
- },
1874
- "endCaptures": {
1875
- "1": {
1876
- "name": "punctuation.definition.string.end.cs"
1877
- },
1878
- "2": {
1879
- "name": "invalid.illegal.newline.cs"
1880
- }
1881
- }
1882
- },
1883
- "interpolation": {
1884
- "name": "meta.interpolation.cs",
1885
- "begin": "(?\u003c=[^\\{])((?:\\{\\{)*)(\\{)(?=[^\\{])",
1886
- "end": "\\}",
1887
- "patterns": [
1888
- {
1889
- "include": "#expression"
1890
- }
1891
- ],
1892
- "beginCaptures": {
1893
- "1": {
1894
- "name": "string.quoted.double.cs"
1895
- },
1896
- "2": {
1897
- "name": "punctuation.definition.interpolation.begin.cs"
1898
- }
1899
- },
1900
- "endCaptures": {
1901
- "0": {
1902
- "name": "punctuation.definition.interpolation.end.cs"
1903
- }
1904
- }
1905
- },
1906
- "invocation-expression": {
1907
- "begin": "(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # method name\n(?\u003ctypeargs\u003e\\s*\u003c([^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\\s* # type arguments\n(?=\\() # open paren of argument list",
1908
- "end": "(?\u003c=\\))",
1909
- "patterns": [
1910
- {
1911
- "include": "#argument-list"
1912
- }
1913
- ],
1914
- "beginCaptures": {
1915
- "1": {
1916
- "name": "keyword.operator.null-conditional.cs"
1917
- },
1918
- "2": {
1919
- "name": "punctuation.accessor.cs"
1920
- },
1921
- "3": {
1922
- "name": "entity.name.function.cs"
1923
- },
1924
- "4": {
1925
- "patterns": [
1926
- {
1927
- "include": "#type-arguments"
1928
- }
1929
- ]
1930
- }
1931
- }
1932
- },
1933
- "is-expression": {
1934
- "match": "(?x)\n(?\u003c!\\.)\\b(is)\\b\\s*\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?",
1935
- "captures": {
1936
- "1": {
1937
- "name": "keyword.other.is.cs"
1938
- },
1939
- "2": {
1940
- "patterns": [
1941
- {
1942
- "include": "#type"
1943
- }
1944
- ]
1945
- }
1946
- }
1947
- },
1948
- "join-clause": {
1949
- "begin": "(?x)\n\\b(join)\\b\\s*\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*",
1950
- "end": "(?=;|\\))",
1951
- "patterns": [
1952
- {
1953
- "include": "#join-on"
1954
- },
1955
- {
1956
- "include": "#join-equals"
1957
- },
1958
- {
1959
- "include": "#join-into"
1960
- },
1961
- {
1962
- "include": "#query-body"
1963
- },
1964
- {
1965
- "include": "#expression"
1966
- }
1967
- ],
1968
- "beginCaptures": {
1969
- "1": {
1970
- "name": "keyword.query.join.cs"
1971
- },
1972
- "2": {
1973
- "patterns": [
1974
- {
1975
- "include": "#type"
1976
- }
1977
- ]
1978
- },
1979
- "7": {
1980
- "name": "entity.name.variable.range-variable.cs"
1981
- },
1982
- "8": {
1983
- "name": "keyword.query.in.cs"
1984
- }
1985
- }
1986
- },
1987
- "join-equals": {
1988
- "match": "\\b(equals)\\b\\s*",
1989
- "captures": {
1990
- "1": {
1991
- "name": "keyword.query.equals.cs"
1992
- }
1993
- }
1994
- },
1995
- "join-into": {
1996
- "match": "(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*",
1997
- "captures": {
1998
- "1": {
1999
- "name": "keyword.query.into.cs"
2000
- },
2001
- "2": {
2002
- "name": "entity.name.variable.range-variable.cs"
2003
- }
2004
- }
2005
- },
2006
- "join-on": {
2007
- "match": "\\b(on)\\b\\s*",
2008
- "captures": {
2009
- "1": {
2010
- "name": "keyword.query.on.cs"
2011
- }
2012
- }
2013
- },
2014
- "labeled-statement": {
2015
- "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)",
2016
- "captures": {
2017
- "1": {
2018
- "name": "entity.name.label.cs"
2019
- },
2020
- "2": {
2021
- "name": "punctuation.separator.colon.cs"
2022
- }
2023
- }
2024
- },
2025
- "lambda-parameter": {
2026
- "match": "(?x)\n(?:\\b(ref|out|in)\\b)?\\s*\n(?:(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+)?\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])",
2027
- "captures": {
2028
- "1": {
2029
- "name": "storage.modifier.cs"
2030
- },
2031
- "2": {
2032
- "patterns": [
2033
- {
2034
- "include": "#type"
2035
- }
2036
- ]
2037
- },
2038
- "7": {
2039
- "name": "variable.parameter.function.cs"
2040
- }
2041
- }
2042
- },
2043
- "lambda-parameter-list": {
2044
- "begin": "\\(",
2045
- "end": "\\)",
2046
- "patterns": [
2047
- {
2048
- "include": "#comment"
2049
- },
2050
- {
2051
- "include": "#attribute-section"
2052
- },
2053
- {
2054
- "include": "#lambda-parameter"
2055
- },
2056
- {
2057
- "include": "#punctuation-comma"
2058
- }
2059
- ],
2060
- "beginCaptures": {
2061
- "0": {
2062
- "name": "punctuation.parenthesis.open.cs"
2063
- }
2064
- },
2065
- "endCaptures": {
2066
- "0": {
2067
- "name": "punctuation.parenthesis.close.cs"
2068
- }
2069
- }
2070
- },
2071
- "let-clause": {
2072
- "begin": "(?x)\n\\b(let)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=)\\s*",
2073
- "end": "(?=;|\\))",
2074
- "patterns": [
2075
- {
2076
- "include": "#query-body"
2077
- },
2078
- {
2079
- "include": "#expression"
2080
- }
2081
- ],
2082
- "beginCaptures": {
2083
- "1": {
2084
- "name": "keyword.query.let.cs"
2085
- },
2086
- "2": {
2087
- "name": "entity.name.variable.range-variable.cs"
2088
- },
2089
- "3": {
2090
- "name": "keyword.operator.assignment.cs"
2091
- }
2092
- }
2093
- },
2094
- "literal": {
2095
- "patterns": [
2096
- {
2097
- "include": "#boolean-literal"
2098
- },
2099
- {
2100
- "include": "#null-literal"
2101
- },
2102
- {
2103
- "include": "#numeric-literal"
2104
- },
2105
- {
2106
- "include": "#char-literal"
2107
- },
2108
- {
2109
- "include": "#string-literal"
2110
- },
2111
- {
2112
- "include": "#verbatim-string-literal"
2113
- },
2114
- {
2115
- "include": "#tuple-literal"
2116
- }
2117
- ]
2118
- },
2119
- "local-constant-declaration": {
2120
- "begin": "(?x)\n(?\u003cconstkeyword\u003e\\b(?:const)\\b)\\s*\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?=,|;|=)",
2121
- "end": "(?=;)",
2122
- "patterns": [
2123
- {
2124
- "name": "variable.other.cs",
2125
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
2126
- },
2127
- {
2128
- "include": "#punctuation-comma"
2129
- },
2130
- {
2131
- "include": "#comment"
2132
- },
2133
- {
2134
- "include": "#variable-initializer"
2135
- }
2136
- ],
2137
- "beginCaptures": {
2138
- "1": {
2139
- "name": "storage.modifier.cs"
2140
- },
2141
- "2": {
2142
- "patterns": [
2143
- {
2144
- "include": "#type"
2145
- }
2146
- ]
2147
- },
2148
- "7": {
2149
- "name": "variable.other.cs"
2150
- }
2151
- }
2152
- },
2153
- "local-declaration": {
2154
- "patterns": [
2155
- {
2156
- "include": "#local-constant-declaration"
2157
- },
2158
- {
2159
- "include": "#local-variable-declaration"
2160
- },
2161
- {
2162
- "include": "#local-tuple-var-deconstruction"
2163
- }
2164
- ]
2165
- },
2166
- "local-tuple-var-deconstruction": {
2167
- "begin": "(?x) # e.g. var (x, y) = GetPoint();\n(?:\\b(var)\\b\\s*)\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?=;|=|\\))",
2168
- "end": "(?=;|\\))",
2169
- "patterns": [
2170
- {
2171
- "include": "#comment"
2172
- },
2173
- {
2174
- "include": "#variable-initializer"
2175
- }
2176
- ],
2177
- "beginCaptures": {
2178
- "1": {
2179
- "name": "keyword.other.var.cs"
2180
- },
2181
- "2": {
2182
- "patterns": [
2183
- {
2184
- "include": "#tuple-declaration-deconstruction-element-list"
2185
- }
2186
- ]
2187
- }
2188
- }
2189
- },
2190
- "local-variable-declaration": {
2191
- "begin": "(?x)\n(?:\n (?:(\\bref)\\s+(?:(\\breadonly)\\s+)?)?(\\bvar\\b)| # ref local\n (?\u003ctypename\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref local\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?=,|;|=|\\))",
2192
- "end": "(?=;|\\))",
2193
- "patterns": [
2194
- {
2195
- "name": "variable.other.cs",
2196
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
2197
- },
2198
- {
2199
- "include": "#punctuation-comma"
2200
- },
2201
- {
2202
- "include": "#comment"
2203
- },
2204
- {
2205
- "include": "#variable-initializer"
2206
- }
2207
- ],
2208
- "beginCaptures": {
2209
- "1": {
2210
- "name": "storage.modifier.cs"
2211
- },
2212
- "2": {
2213
- "name": "storage.modifier.cs"
2214
- },
2215
- "3": {
2216
- "name": "keyword.other.var.cs"
2217
- },
2218
- "4": {
2219
- "patterns": [
2220
- {
2221
- "include": "#type"
2222
- }
2223
- ]
2224
- },
2225
- "9": {
2226
- "name": "variable.other.cs"
2227
- }
2228
- }
2229
- },
2230
- "lock-statement": {
2231
- "begin": "(?\u003c!\\.)\\b(lock)\\b\\s*(?=\\()",
2232
- "end": "(?\u003c=\\})|(?=;)",
2233
- "patterns": [
2234
- {
2235
- "begin": "\\(",
2236
- "end": "\\)",
2237
- "patterns": [
2238
- {
2239
- "include": "#expression"
2240
- }
2241
- ],
2242
- "beginCaptures": {
2243
- "0": {
2244
- "name": "punctuation.parenthesis.open.cs"
2245
- }
2246
- },
2247
- "endCaptures": {
2248
- "0": {
2249
- "name": "punctuation.parenthesis.close.cs"
2250
- }
2251
- }
2252
- },
2253
- {
2254
- "include": "#statement"
2255
- }
2256
- ],
2257
- "beginCaptures": {
2258
- "1": {
2259
- "name": "keyword.other.lock.cs"
2260
- }
2261
- }
2262
- },
2263
- "member-access-expression": {
2264
- "patterns": [
2265
- {
2266
- "match": "(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(\\.)\\s* # preceding dot\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # property name\n(?![_[:alnum:]]|\\(|(\\?)?\\[|\u003c) # next character is not alpha-numeric, nor a (, [, or \u003c. Also, test for ?[",
2267
- "captures": {
2268
- "1": {
2269
- "name": "keyword.operator.null-conditional.cs"
2270
- },
2271
- "2": {
2272
- "name": "punctuation.accessor.cs"
2273
- },
2274
- "3": {
2275
- "name": "variable.other.object.property.cs"
2276
- }
2277
- }
2278
- },
2279
- {
2280
- "match": "(?x)\n(\\.)?\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?\u003ctypeparams\u003e\\s*\u003c([^\u003c\u003e]|\\g\u003ctypeparams\u003e)+\u003e\\s*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)",
2281
- "captures": {
2282
- "1": {
2283
- "name": "punctuation.accessor.cs"
2284
- },
2285
- "2": {
2286
- "name": "variable.other.object.cs"
2287
- },
2288
- "3": {
2289
- "patterns": [
2290
- {
2291
- "include": "#type-arguments"
2292
- }
2293
- ]
2294
- }
2295
- }
2296
- },
2297
- {
2298
- "match": "(?x)\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)",
2299
- "captures": {
2300
- "1": {
2301
- "name": "variable.other.object.cs"
2302
- }
2303
- }
2304
- }
2305
- ]
2306
- },
2307
- "method-declaration": {
2308
- "begin": "(?x)\n(?\u003creturntype\u003e\n (?\u003ctypename\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?\u003cinterfacename\u003e\\g\u003ctypename\u003e\\s*\\.\\s*)?\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()",
2309
- "end": "(?\u003c=\\})|(?=;)",
2310
- "patterns": [
2311
- {
2312
- "include": "#comment"
2313
- },
2314
- {
2315
- "include": "#parenthesized-parameter-list"
2316
- },
2317
- {
2318
- "include": "#generic-constraints"
2319
- },
2320
- {
2321
- "include": "#expression-body"
2322
- },
2323
- {
2324
- "include": "#block"
2325
- }
2326
- ],
2327
- "beginCaptures": {
2328
- "1": {
2329
- "patterns": [
2330
- {
2331
- "include": "#type"
2332
- }
2333
- ]
2334
- },
2335
- "7": {
2336
- "patterns": [
2337
- {
2338
- "include": "#type"
2339
- },
2340
- {
2341
- "include": "#punctuation-accessor"
2342
- }
2343
- ]
2344
- },
2345
- "8": {
2346
- "name": "entity.name.function.cs"
2347
- },
2348
- "9": {
2349
- "patterns": [
2350
- {
2351
- "include": "#type-parameter-list"
2352
- }
2353
- ]
2354
- }
2355
- }
2356
- },
2357
- "named-argument": {
2358
- "begin": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)",
2359
- "end": "(?=(,|\\)|\\]))",
2360
- "patterns": [
2361
- {
2362
- "include": "#argument"
2363
- }
2364
- ],
2365
- "beginCaptures": {
2366
- "1": {
2367
- "name": "variable.parameter.function.cs"
2368
- },
2369
- "2": {
2370
- "name": "punctuation.separator.colon.cs"
2371
- }
2372
- }
2373
- },
2374
- "nameof-expression": {
2375
- "begin": "(?\u003c!\\.)\\b(nameof)\\b\\s*(\\()",
2376
- "end": "\\)",
2377
- "patterns": [
2378
- {
2379
- "include": "#expression"
2380
- }
2381
- ],
2382
- "beginCaptures": {
2383
- "1": {
2384
- "name": "keyword.other.nameof.cs"
2385
- },
2386
- "2": {
2387
- "name": "punctuation.parenthesis.open.cs"
2388
- }
2389
- },
2390
- "endCaptures": {
2391
- "0": {
2392
- "name": "punctuation.parenthesis.close.cs"
2393
- }
2394
- }
2395
- },
2396
- "namespace-declaration": {
2397
- "begin": "\\b(namespace)\\s+",
2398
- "end": "(?\u003c=\\})",
2399
- "patterns": [
2400
- {
2401
- "include": "#comment"
2402
- },
2403
- {
2404
- "name": "entity.name.type.namespace.cs",
2405
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
2406
- },
2407
- {
2408
- "include": "#punctuation-accessor"
2409
- },
2410
- {
2411
- "begin": "\\{",
2412
- "end": "\\}",
2413
- "patterns": [
2414
- {
2415
- "include": "#declarations"
2416
- },
2417
- {
2418
- "include": "#using-directive"
2419
- },
2420
- {
2421
- "include": "#punctuation-semicolon"
2422
- }
2423
- ],
2424
- "beginCaptures": {
2425
- "0": {
2426
- "name": "punctuation.curlybrace.open.cs"
2427
- }
2428
- },
2429
- "endCaptures": {
2430
- "0": {
2431
- "name": "punctuation.curlybrace.close.cs"
2432
- }
2433
- }
2434
- }
2435
- ],
2436
- "beginCaptures": {
2437
- "1": {
2438
- "name": "keyword.other.namespace.cs"
2439
- }
2440
- }
2441
- },
2442
- "null-literal": {
2443
- "name": "constant.language.null.cs",
2444
- "match": "(?\u003c!\\.)\\bnull\\b"
2445
- },
2446
- "numeric-literal": {
2447
- "patterns": [
2448
- {
2449
- "name": "constant.numeric.hex.cs",
2450
- "match": "\\b0(x|X)[0-9a-fA-F_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b"
2451
- },
2452
- {
2453
- "name": "constant.numeric.binary.cs",
2454
- "match": "\\b0(b|B)[01_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b"
2455
- },
2456
- {
2457
- "name": "constant.numeric.decimal.cs",
2458
- "match": "\\b([0-9_]+)?\\.[0-9_]+((e|E)[0-9]+)?(F|f|D|d|M|m)?\\b"
2459
- },
2460
- {
2461
- "name": "constant.numeric.decimal.cs",
2462
- "match": "\\b[0-9_]+(e|E)[0-9_]+(F|f|D|d|M|m)?\\b"
2463
- },
2464
- {
2465
- "name": "constant.numeric.decimal.cs",
2466
- "match": "\\b[0-9_]+(F|f|D|d|M|m)\\b"
2467
- },
2468
- {
2469
- "name": "constant.numeric.decimal.cs",
2470
- "match": "\\b[0-9_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b"
2471
- }
2472
- ]
2473
- },
2474
- "object-creation-expression": {
2475
- "patterns": [
2476
- {
2477
- "include": "#object-creation-expression-with-parameters"
2478
- },
2479
- {
2480
- "include": "#object-creation-expression-with-no-parameters"
2481
- }
2482
- ]
2483
- },
2484
- "object-creation-expression-with-no-parameters": {
2485
- "match": "(?x)\n(new)\\s+\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?=\\{|$)",
2486
- "captures": {
2487
- "1": {
2488
- "name": "keyword.other.new.cs"
2489
- },
2490
- "2": {
2491
- "patterns": [
2492
- {
2493
- "include": "#type"
2494
- }
2495
- ]
2496
- }
2497
- }
2498
- },
2499
- "object-creation-expression-with-parameters": {
2500
- "begin": "(?x)\n(new)\\s+\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?=\\()",
2501
- "end": "(?\u003c=\\))",
2502
- "patterns": [
2503
- {
2504
- "include": "#argument-list"
2505
- }
2506
- ],
2507
- "beginCaptures": {
2508
- "1": {
2509
- "name": "keyword.other.new.cs"
2510
- },
2511
- "2": {
2512
- "patterns": [
2513
- {
2514
- "include": "#type"
2515
- }
2516
- ]
2517
- }
2518
- }
2519
- },
2520
- "operator-assignment": {
2521
- "name": "keyword.operator.assignment.cs",
2522
- "match": "(?\u003c!=|!)(=)(?!=)"
2523
- },
2524
- "operator-declaration": {
2525
- "begin": "(?x)\n(?\u003ctypename\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s*\n(?\u003coperatorkeyword\u003e(?:\\b(?:operator)))\\s*\n(?\u003coperator\u003e(?:\\+|-|\\*|/|%|\u0026|\\||\\^|\\\u003c\\\u003c|\\\u003e\\\u003e|==|!=|\\\u003e|\\\u003c|\\\u003e=|\\\u003c=|!|~|\\+\\+|--|true|false))\\s*\n(?=\\()",
2526
- "end": "(?\u003c=\\})|(?=;)",
2527
- "patterns": [
2528
- {
2529
- "include": "#comment"
2530
- },
2531
- {
2532
- "include": "#parenthesized-parameter-list"
2533
- },
2534
- {
2535
- "include": "#expression-body"
2536
- },
2537
- {
2538
- "include": "#block"
2539
- }
2540
- ],
2541
- "beginCaptures": {
2542
- "1": {
2543
- "patterns": [
2544
- {
2545
- "include": "#type"
2546
- }
2547
- ]
2548
- },
2549
- "6": {
2550
- "name": "keyword.other.operator-decl.cs"
2551
- },
2552
- "7": {
2553
- "name": "entity.name.function.cs"
2554
- }
2555
- }
2556
- },
2557
- "orderby-clause": {
2558
- "begin": "\\b(orderby)\\b\\s*",
2559
- "end": "(?=;|\\))",
2560
- "patterns": [
2561
- {
2562
- "include": "#ordering-direction"
2563
- },
2564
- {
2565
- "include": "#query-body"
2566
- },
2567
- {
2568
- "include": "#expression"
2569
- },
2570
- {
2571
- "include": "#punctuation-comma"
2572
- }
2573
- ],
2574
- "beginCaptures": {
2575
- "1": {
2576
- "name": "keyword.query.orderby.cs"
2577
- }
2578
- }
2579
- },
2580
- "ordering-direction": {
2581
- "match": "\\b(?:(ascending)|(descending))\\b",
2582
- "captures": {
2583
- "1": {
2584
- "name": "keyword.query.ascending.cs"
2585
- },
2586
- "2": {
2587
- "name": "keyword.query.descending.cs"
2588
- }
2589
- }
2590
- },
2591
- "parameter": {
2592
- "match": "(?x)\n(?:(?:\\b(ref|params|out|in|this)\\b)\\s+)?\n(?\u003ctypename\u003e\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\\s+\n(\\g\u003cidentifier\u003e)",
2593
- "captures": {
2594
- "1": {
2595
- "name": "storage.modifier.cs"
2596
- },
2597
- "2": {
2598
- "patterns": [
2599
- {
2600
- "include": "#type"
2601
- }
2602
- ]
2603
- },
2604
- "7": {
2605
- "name": "variable.parameter.function.cs"
2606
- }
2607
- }
2608
- },
2609
- "parenthesized-expression": {
2610
- "begin": "\\(",
2611
- "end": "\\)",
2612
- "patterns": [
2613
- {
2614
- "include": "#expression"
2615
- }
2616
- ],
2617
- "beginCaptures": {
2618
- "0": {
2619
- "name": "punctuation.parenthesis.open.cs"
2620
- }
2621
- },
2622
- "endCaptures": {
2623
- "0": {
2624
- "name": "punctuation.parenthesis.close.cs"
2625
- }
2626
- }
2627
- },
2628
- "parenthesized-parameter-list": {
2629
- "begin": "(\\()",
2630
- "end": "(\\))",
2631
- "patterns": [
2632
- {
2633
- "include": "#comment"
2634
- },
2635
- {
2636
- "include": "#attribute-section"
2637
- },
2638
- {
2639
- "include": "#parameter"
2640
- },
2641
- {
2642
- "include": "#punctuation-comma"
2643
- },
2644
- {
2645
- "include": "#variable-initializer"
2646
- }
2647
- ],
2648
- "beginCaptures": {
2649
- "0": {
2650
- "name": "punctuation.parenthesis.open.cs"
2651
- }
2652
- },
2653
- "endCaptures": {
2654
- "0": {
2655
- "name": "punctuation.parenthesis.close.cs"
2656
- }
2657
- }
2658
- },
2659
- "preprocessor": {
2660
- "name": "meta.preprocessor.cs",
2661
- "begin": "^\\s*(\\#)\\s*",
2662
- "end": "(?\u003c=$)",
2663
- "patterns": [
2664
- {
2665
- "include": "#comment"
2666
- },
2667
- {
2668
- "include": "#preprocessor-define-or-undef"
2669
- },
2670
- {
2671
- "include": "#preprocessor-if-or-elif"
2672
- },
2673
- {
2674
- "include": "#preprocessor-else-or-endif"
2675
- },
2676
- {
2677
- "include": "#preprocessor-warning-or-error"
2678
- },
2679
- {
2680
- "include": "#preprocessor-region"
2681
- },
2682
- {
2683
- "include": "#preprocessor-endregion"
2684
- },
2685
- {
2686
- "include": "#preprocessor-load"
2687
- },
2688
- {
2689
- "include": "#preprocessor-r"
2690
- },
2691
- {
2692
- "include": "#preprocessor-line"
2693
- },
2694
- {
2695
- "include": "#preprocessor-pragma-warning"
2696
- },
2697
- {
2698
- "include": "#preprocessor-pragma-checksum"
2699
- }
2700
- ],
2701
- "beginCaptures": {
2702
- "1": {
2703
- "name": "punctuation.separator.hash.cs"
2704
- }
2705
- }
2706
- },
2707
- "preprocessor-define-or-undef": {
2708
- "match": "\\b(?:(define)|(undef))\\b\\s*\\b([_[:alpha:]][_[:alnum:]]*)\\b",
2709
- "captures": {
2710
- "1": {
2711
- "name": "keyword.preprocessor.define.cs"
2712
- },
2713
- "2": {
2714
- "name": "keyword.preprocessor.undef.cs"
2715
- },
2716
- "3": {
2717
- "name": "entity.name.variable.preprocessor.symbol.cs"
2718
- }
2719
- }
2720
- },
2721
- "preprocessor-else-or-endif": {
2722
- "match": "\\b(?:(else)|(endif))\\b",
2723
- "captures": {
2724
- "1": {
2725
- "name": "keyword.preprocessor.else.cs"
2726
- },
2727
- "2": {
2728
- "name": "keyword.preprocessor.endif.cs"
2729
- }
2730
- }
2731
- },
2732
- "preprocessor-endregion": {
2733
- "match": "\\b(endregion)\\b",
2734
- "captures": {
2735
- "1": {
2736
- "name": "keyword.preprocessor.endregion.cs"
2737
- }
2738
- }
2739
- },
2740
- "preprocessor-expression": {
2741
- "patterns": [
2742
- {
2743
- "begin": "\\(",
2744
- "end": "\\)",
2745
- "patterns": [
2746
- {
2747
- "include": "#preprocessor-expression"
2748
- }
2749
- ],
2750
- "beginCaptures": {
2751
- "0": {
2752
- "name": "punctuation.parenthesis.open.cs"
2753
- }
2754
- },
2755
- "endCaptures": {
2756
- "0": {
2757
- "name": "punctuation.parenthesis.close.cs"
2758
- }
2759
- }
2760
- },
2761
- {
2762
- "match": "\\b(?:(true)|(false)|([_[:alpha:]][_[:alnum:]]*))\\b",
2763
- "captures": {
2764
- "1": {
2765
- "name": "constant.language.boolean.true.cs"
2766
- },
2767
- "2": {
2768
- "name": "constant.language.boolean.false.cs"
2769
- },
2770
- "3": {
2771
- "name": "entity.name.variable.preprocessor.symbol.cs"
2772
- }
2773
- }
2774
- },
2775
- {
2776
- "match": "(==|!=)|(\\!|\u0026\u0026|\\|\\|)",
2777
- "captures": {
2778
- "1": {
2779
- "name": "keyword.operator.comparison.cs"
2780
- },
2781
- "2": {
2782
- "name": "keyword.operator.logical.cs"
2783
- }
2784
- }
2785
- }
2786
- ]
2787
- },
2788
- "preprocessor-if-or-elif": {
2789
- "begin": "\\b(?:(if)|(elif))\\b",
2790
- "end": "(?=$)",
2791
- "patterns": [
2792
- {
2793
- "include": "#comment"
2794
- },
2795
- {
2796
- "include": "#preprocessor-expression"
2797
- }
2798
- ],
2799
- "beginCaptures": {
2800
- "1": {
2801
- "name": "keyword.preprocessor.if.cs"
2802
- },
2803
- "2": {
2804
- "name": "keyword.preprocessor.elif.cs"
2805
- }
2806
- }
2807
- },
2808
- "preprocessor-line": {
2809
- "begin": "\\b(line)\\b",
2810
- "end": "(?=$)",
2811
- "patterns": [
2812
- {
2813
- "match": "\\b(?:(default|hidden))",
2814
- "captures": {
2815
- "1": {
2816
- "name": "keyword.preprocessor.default.cs"
2817
- },
2818
- "2": {
2819
- "name": "keyword.preprocessor.hidden.cs"
2820
- }
2821
- }
2822
- },
2823
- {
2824
- "match": "[0-9]+",
2825
- "captures": {
2826
- "0": {
2827
- "name": "constant.numeric.decimal.cs"
2828
- }
2829
- }
2830
- },
2831
- {
2832
- "match": "\\\"[^\"]*\\\"",
2833
- "captures": {
2834
- "0": {
2835
- "name": "string.quoted.double.cs"
2836
- }
2837
- }
2838
- }
2839
- ],
2840
- "beginCaptures": {
2841
- "1": {
2842
- "name": "keyword.preprocessor.line.cs"
2843
- }
2844
- }
2845
- },
2846
- "preprocessor-load": {
2847
- "begin": "\\b(load)\\b",
2848
- "end": "(?=$)",
2849
- "patterns": [
2850
- {
2851
- "match": "\\\"[^\"]*\\\"",
2852
- "captures": {
2853
- "0": {
2854
- "name": "string.quoted.double.cs"
2855
- }
2856
- }
2857
- }
2858
- ],
2859
- "beginCaptures": {
2860
- "1": {
2861
- "name": "keyword.preprocessor.load.cs"
2862
- }
2863
- }
2864
- },
2865
- "preprocessor-pragma-checksum": {
2866
- "match": "\\b(pragma)\\b\\s*\\b(checksum)\\b\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")",
2867
- "captures": {
2868
- "1": {
2869
- "name": "keyword.preprocessor.pragma.cs"
2870
- },
2871
- "2": {
2872
- "name": "keyword.preprocessor.checksum.cs"
2873
- },
2874
- "3": {
2875
- "name": "string.quoted.double.cs"
2876
- },
2877
- "4": {
2878
- "name": "string.quoted.double.cs"
2879
- },
2880
- "5": {
2881
- "name": "string.quoted.double.cs"
2882
- }
2883
- }
2884
- },
2885
- "preprocessor-pragma-warning": {
2886
- "match": "\\b(pragma)\\b\\s*\\b(warning)\\b\\s*\\b(?:(disable)|(restore))\\b(\\s*[0-9]+(?:\\s*,\\s*[0-9]+)?)?",
2887
- "captures": {
2888
- "1": {
2889
- "name": "keyword.preprocessor.pragma.cs"
2890
- },
2891
- "2": {
2892
- "name": "keyword.preprocessor.warning.cs"
2893
- },
2894
- "3": {
2895
- "name": "keyword.preprocessor.disable.cs"
2896
- },
2897
- "4": {
2898
- "name": "keyword.preprocessor.restore.cs"
2899
- },
2900
- "5": {
2901
- "patterns": [
2902
- {
2903
- "match": "[0-9]+",
2904
- "captures": {
2905
- "0": {
2906
- "name": "constant.numeric.decimal.cs"
2907
- }
2908
- }
2909
- },
2910
- {
2911
- "include": "#punctuation-comma"
2912
- }
2913
- ]
2914
- }
2915
- }
2916
- },
2917
- "preprocessor-r": {
2918
- "begin": "\\b(r)\\b",
2919
- "end": "(?=$)",
2920
- "patterns": [
2921
- {
2922
- "match": "\\\"[^\"]*\\\"",
2923
- "captures": {
2924
- "0": {
2925
- "name": "string.quoted.double.cs"
2926
- }
2927
- }
2928
- }
2929
- ],
2930
- "beginCaptures": {
2931
- "1": {
2932
- "name": "keyword.preprocessor.r.cs"
2933
- }
2934
- }
2935
- },
2936
- "preprocessor-region": {
2937
- "match": "\\b(region)\\b\\s*(.*)(?=$)",
2938
- "captures": {
2939
- "1": {
2940
- "name": "keyword.preprocessor.region.cs"
2941
- },
2942
- "2": {
2943
- "name": "string.unquoted.preprocessor.message.cs"
2944
- }
2945
- }
2946
- },
2947
- "preprocessor-warning-or-error": {
2948
- "match": "\\b(?:(warning)|(error))\\b\\s*(.*)(?=$)",
2949
- "captures": {
2950
- "1": {
2951
- "name": "keyword.preprocessor.warning.cs"
2952
- },
2953
- "2": {
2954
- "name": "keyword.preprocessor.error.cs"
2955
- },
2956
- "3": {
2957
- "name": "string.unquoted.preprocessor.message.cs"
2958
- }
2959
- }
2960
- },
2961
- "property-accessors": {
2962
- "begin": "\\{",
2963
- "end": "\\}",
2964
- "patterns": [
2965
- {
2966
- "name": "storage.modifier.cs",
2967
- "match": "\\b(private|protected|internal)\\b"
2968
- },
2969
- {
2970
- "name": "keyword.other.get.cs",
2971
- "match": "\\b(get)\\b"
2972
- },
2973
- {
2974
- "name": "keyword.other.set.cs",
2975
- "match": "\\b(set)\\b"
2976
- },
2977
- {
2978
- "include": "#comment"
2979
- },
2980
- {
2981
- "include": "#attribute-section"
2982
- },
2983
- {
2984
- "include": "#expression-body"
2985
- },
2986
- {
2987
- "include": "#block"
2988
- },
2989
- {
2990
- "include": "#punctuation-semicolon"
2991
- }
2992
- ],
2993
- "beginCaptures": {
2994
- "0": {
2995
- "name": "punctuation.curlybrace.open.cs"
2996
- }
2997
- },
2998
- "endCaptures": {
2999
- "0": {
3000
- "name": "punctuation.curlybrace.close.cs"
3001
- }
3002
- }
3003
- },
3004
- "property-declaration": {
3005
- "begin": "(?x)\n\n# The negative lookahead below ensures that we don't match nested types\n# or other declarations as properties.\n(?![[:word:][:space:]]*\\b(?:class|interface|struct|enum|event)\\b)\n\n(?\u003creturntype\u003e\n (?\u003ctypename\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n )\\s+\n)\n(?\u003cinterfacename\u003e\\g\u003ctypename\u003e\\s*\\.\\s*)?\n(?\u003cpropertyname\u003e\\g\u003cidentifier\u003e)\\s*\n(?=\\{|=\u003e|$)",
3006
- "end": "(?\u003c=\\})|(?=;)",
3007
- "patterns": [
3008
- {
3009
- "include": "#comment"
3010
- },
3011
- {
3012
- "include": "#property-accessors"
3013
- },
3014
- {
3015
- "include": "#expression-body"
3016
- },
3017
- {
3018
- "include": "#variable-initializer"
3019
- },
3020
- {
3021
- "include": "#class-or-struct-members"
3022
- }
3023
- ],
3024
- "beginCaptures": {
3025
- "1": {
3026
- "patterns": [
3027
- {
3028
- "include": "#type"
3029
- }
3030
- ]
3031
- },
3032
- "7": {
3033
- "patterns": [
3034
- {
3035
- "include": "#type"
3036
- },
3037
- {
3038
- "include": "#punctuation-accessor"
3039
- }
3040
- ]
3041
- },
3042
- "8": {
3043
- "name": "variable.other.cs"
3044
- }
3045
- }
3046
- },
3047
- "punctuation-accessor": {
3048
- "name": "punctuation.accessor.cs",
3049
- "match": "\\."
3050
- },
3051
- "punctuation-comma": {
3052
- "name": "punctuation.separator.comma.cs",
3053
- "match": ","
3054
- },
3055
- "punctuation-semicolon": {
3056
- "name": "punctuation.terminator.statement.cs",
3057
- "match": ";"
3058
- },
3059
- "query-body": {
3060
- "patterns": [
3061
- {
3062
- "include": "#let-clause"
3063
- },
3064
- {
3065
- "include": "#where-clause"
3066
- },
3067
- {
3068
- "include": "#join-clause"
3069
- },
3070
- {
3071
- "include": "#orderby-clause"
3072
- },
3073
- {
3074
- "include": "#select-clause"
3075
- },
3076
- {
3077
- "include": "#group-clause"
3078
- }
3079
- ]
3080
- },
3081
- "query-expression": {
3082
- "begin": "(?x)\n\\b(from)\\b\\s*\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*",
3083
- "end": "(?=;|\\))",
3084
- "patterns": [
3085
- {
3086
- "include": "#query-body"
3087
- },
3088
- {
3089
- "include": "#expression"
3090
- }
3091
- ],
3092
- "beginCaptures": {
3093
- "1": {
3094
- "name": "keyword.query.from.cs"
3095
- },
3096
- "2": {
3097
- "patterns": [
3098
- {
3099
- "include": "#type"
3100
- }
3101
- ]
3102
- },
3103
- "7": {
3104
- "name": "entity.name.variable.range-variable.cs"
3105
- },
3106
- "8": {
3107
- "name": "keyword.query.in.cs"
3108
- }
3109
- }
3110
- },
3111
- "readonly-modifier": {
3112
- "name": "storage.modifier.cs",
3113
- "match": "\\b(readonly)\\b"
3114
- },
3115
- "ref-modifier": {
3116
- "name": "storage.modifier.cs",
3117
- "match": "\\b(ref)\\b"
3118
- },
3119
- "return-statement": {
3120
- "begin": "(?\u003c!\\.)\\b(return)\\b",
3121
- "end": "(?=;)",
3122
- "patterns": [
3123
- {
3124
- "include": "#ref-modifier"
3125
- },
3126
- {
3127
- "include": "#expression"
3128
- }
3129
- ],
3130
- "beginCaptures": {
3131
- "1": {
3132
- "name": "keyword.control.flow.return.cs"
3133
- }
3134
- }
3135
- },
3136
- "script-top-level": {
3137
- "patterns": [
3138
- {
3139
- "include": "#method-declaration"
3140
- },
3141
- {
3142
- "include": "#statement"
3143
- },
3144
- {
3145
- "include": "#punctuation-semicolon"
3146
- }
3147
- ]
3148
- },
3149
- "select-clause": {
3150
- "begin": "\\b(select)\\b\\s*",
3151
- "end": "(?=;|\\))",
3152
- "patterns": [
3153
- {
3154
- "include": "#query-body"
3155
- },
3156
- {
3157
- "include": "#expression"
3158
- }
3159
- ],
3160
- "beginCaptures": {
3161
- "1": {
3162
- "name": "keyword.query.select.cs"
3163
- }
3164
- }
3165
- },
3166
- "statement": {
3167
- "patterns": [
3168
- {
3169
- "include": "#preprocessor"
3170
- },
3171
- {
3172
- "include": "#comment"
3173
- },
3174
- {
3175
- "include": "#while-statement"
3176
- },
3177
- {
3178
- "include": "#do-statement"
3179
- },
3180
- {
3181
- "include": "#for-statement"
3182
- },
3183
- {
3184
- "include": "#foreach-statement"
3185
- },
3186
- {
3187
- "include": "#if-statement"
3188
- },
3189
- {
3190
- "include": "#else-part"
3191
- },
3192
- {
3193
- "include": "#switch-statement"
3194
- },
3195
- {
3196
- "include": "#goto-statement"
3197
- },
3198
- {
3199
- "include": "#return-statement"
3200
- },
3201
- {
3202
- "include": "#break-or-continue-statement"
3203
- },
3204
- {
3205
- "include": "#throw-statement"
3206
- },
3207
- {
3208
- "include": "#yield-statement"
3209
- },
3210
- {
3211
- "include": "#await-statement"
3212
- },
3213
- {
3214
- "include": "#try-statement"
3215
- },
3216
- {
3217
- "include": "#checked-unchecked-statement"
3218
- },
3219
- {
3220
- "include": "#lock-statement"
3221
- },
3222
- {
3223
- "include": "#using-statement"
3224
- },
3225
- {
3226
- "include": "#labeled-statement"
3227
- },
3228
- {
3229
- "include": "#local-declaration"
3230
- },
3231
- {
3232
- "include": "#block"
3233
- },
3234
- {
3235
- "include": "#expression"
3236
- },
3237
- {
3238
- "include": "#punctuation-semicolon"
3239
- }
3240
- ]
3241
- },
3242
- "storage-modifier": {
3243
- "name": "storage.modifier.cs",
3244
- "match": "(?\u003c!\\.)\\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe|ref)\\b"
3245
- },
3246
- "string-character-escape": {
3247
- "name": "constant.character.escape.cs",
3248
- "match": "\\\\."
3249
- },
3250
- "string-literal": {
3251
- "name": "string.quoted.double.cs",
3252
- "begin": "(?\u003c!@)\"",
3253
- "end": "(\")|((?:[^\\\\\\n])$)",
3254
- "patterns": [
3255
- {
3256
- "include": "#string-character-escape"
3257
- }
3258
- ],
3259
- "beginCaptures": {
3260
- "0": {
3261
- "name": "punctuation.definition.string.begin.cs"
3262
- }
3263
- },
3264
- "endCaptures": {
3265
- "1": {
3266
- "name": "punctuation.definition.string.end.cs"
3267
- },
3268
- "2": {
3269
- "name": "invalid.illegal.newline.cs"
3270
- }
3271
- }
3272
- },
3273
- "struct-declaration": {
3274
- "begin": "(?=\\bstruct\\b)",
3275
- "end": "(?\u003c=\\})",
3276
- "patterns": [
3277
- {
3278
- "begin": "(?x)\n(struct)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)",
3279
- "end": "(?=\\{)",
3280
- "patterns": [
3281
- {
3282
- "include": "#comment"
3283
- },
3284
- {
3285
- "include": "#type-parameter-list"
3286
- },
3287
- {
3288
- "include": "#base-types"
3289
- },
3290
- {
3291
- "include": "#generic-constraints"
3292
- }
3293
- ],
3294
- "beginCaptures": {
3295
- "1": {
3296
- "name": "keyword.other.struct.cs"
3297
- },
3298
- "2": {
3299
- "name": "entity.name.type.struct.cs"
3300
- }
3301
- }
3302
- },
3303
- {
3304
- "begin": "\\{",
3305
- "end": "\\}",
3306
- "patterns": [
3307
- {
3308
- "include": "#class-or-struct-members"
3309
- }
3310
- ],
3311
- "beginCaptures": {
3312
- "0": {
3313
- "name": "punctuation.curlybrace.open.cs"
3314
- }
3315
- },
3316
- "endCaptures": {
3317
- "0": {
3318
- "name": "punctuation.curlybrace.close.cs"
3319
- }
3320
- }
3321
- },
3322
- {
3323
- "include": "#preprocessor"
3324
- },
3325
- {
3326
- "include": "#comment"
3327
- }
3328
- ]
3329
- },
3330
- "switch-label": {
3331
- "patterns": [
3332
- {
3333
- "begin": "(?\u003c!\\.)\\b(case)\\b\\s+",
3334
- "end": ":",
3335
- "patterns": [
3336
- {
3337
- "include": "#expression"
3338
- }
3339
- ],
3340
- "beginCaptures": {
3341
- "1": {
3342
- "name": "keyword.control.case.cs"
3343
- }
3344
- },
3345
- "endCaptures": {
3346
- "0": {
3347
- "name": "punctuation.separator.colon.cs"
3348
- }
3349
- }
3350
- },
3351
- {
3352
- "match": "(?\u003c!\\.)\\b(default)\\b\\s*(:)",
3353
- "captures": {
3354
- "1": {
3355
- "name": "keyword.control.default.cs"
3356
- },
3357
- "2": {
3358
- "name": "punctuation.separator.colon.cs"
3359
- }
3360
- }
3361
- }
3362
- ]
3363
- },
3364
- "switch-statement": {
3365
- "begin": "(?\u003c!\\.)\\b(switch)\\b\\s*(?=\\()",
3366
- "end": "(?\u003c=\\})",
3367
- "patterns": [
3368
- {
3369
- "begin": "\\(",
3370
- "end": "\\)",
3371
- "patterns": [
3372
- {
3373
- "include": "#expression"
3374
- }
3375
- ],
3376
- "beginCaptures": {
3377
- "0": {
3378
- "name": "punctuation.parenthesis.open.cs"
3379
- }
3380
- },
3381
- "endCaptures": {
3382
- "0": {
3383
- "name": "punctuation.parenthesis.close.cs"
3384
- }
3385
- }
3386
- },
3387
- {
3388
- "begin": "\\{",
3389
- "end": "\\}",
3390
- "patterns": [
3391
- {
3392
- "include": "#switch-label"
3393
- },
3394
- {
3395
- "include": "#statement"
3396
- }
3397
- ],
3398
- "beginCaptures": {
3399
- "0": {
3400
- "name": "punctuation.curlybrace.open.cs"
3401
- }
3402
- },
3403
- "endCaptures": {
3404
- "0": {
3405
- "name": "punctuation.curlybrace.close.cs"
3406
- }
3407
- }
3408
- }
3409
- ],
3410
- "beginCaptures": {
3411
- "1": {
3412
- "name": "keyword.control.switch.cs"
3413
- }
3414
- }
3415
- },
3416
- "this-or-base-expression": {
3417
- "match": "\\b(?:(base)|(this))\\b",
3418
- "captures": {
3419
- "1": {
3420
- "name": "keyword.other.base.cs"
3421
- },
3422
- "2": {
3423
- "name": "keyword.other.this.cs"
3424
- }
3425
- }
3426
- },
3427
- "throw-expression": {
3428
- "match": "(?\u003c!\\.)\\b(throw)\\b",
3429
- "captures": {
3430
- "1": {
3431
- "name": "keyword.control.flow.throw.cs"
3432
- }
3433
- }
3434
- },
3435
- "throw-statement": {
3436
- "begin": "(?\u003c!\\.)\\b(throw)\\b",
3437
- "end": "(?=;)",
3438
- "patterns": [
3439
- {
3440
- "include": "#expression"
3441
- }
3442
- ],
3443
- "beginCaptures": {
3444
- "1": {
3445
- "name": "keyword.control.flow.throw.cs"
3446
- }
3447
- }
3448
- },
3449
- "try-block": {
3450
- "begin": "(?\u003c!\\.)\\b(try)\\b",
3451
- "end": "(?\u003c=\\})",
3452
- "patterns": [
3453
- {
3454
- "include": "#comment"
3455
- },
3456
- {
3457
- "include": "#block"
3458
- }
3459
- ],
3460
- "beginCaptures": {
3461
- "1": {
3462
- "name": "keyword.control.try.cs"
3463
- }
3464
- }
3465
- },
3466
- "try-statement": {
3467
- "patterns": [
3468
- {
3469
- "include": "#try-block"
3470
- },
3471
- {
3472
- "include": "#catch-clause"
3473
- },
3474
- {
3475
- "include": "#finally-clause"
3476
- }
3477
- ]
3478
- },
3479
- "tuple-declaration-deconstruction-element-list": {
3480
- "begin": "\\(",
3481
- "end": "\\)",
3482
- "patterns": [
3483
- {
3484
- "include": "#comment"
3485
- },
3486
- {
3487
- "include": "#tuple-declaration-deconstruction-element-list"
3488
- },
3489
- {
3490
- "include": "#declaration-expression-tuple"
3491
- },
3492
- {
3493
- "include": "#punctuation-comma"
3494
- },
3495
- {
3496
- "match": "(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])",
3497
- "captures": {
3498
- "1": {
3499
- "name": "entity.name.variable.tuple-element.cs"
3500
- }
3501
- }
3502
- }
3503
- ],
3504
- "beginCaptures": {
3505
- "0": {
3506
- "name": "punctuation.parenthesis.open.cs"
3507
- }
3508
- },
3509
- "endCaptures": {
3510
- "0": {
3511
- "name": "punctuation.parenthesis.close.cs"
3512
- }
3513
- }
3514
- },
3515
- "tuple-deconstruction-assignment": {
3516
- "match": "(?x)\n(?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?!=\u003e|==)(?==)",
3517
- "captures": {
3518
- "1": {
3519
- "patterns": [
3520
- {
3521
- "include": "#tuple-deconstruction-element-list"
3522
- }
3523
- ]
3524
- }
3525
- }
3526
- },
3527
- "tuple-deconstruction-element-list": {
3528
- "begin": "\\(",
3529
- "end": "\\)",
3530
- "patterns": [
3531
- {
3532
- "include": "#comment"
3533
- },
3534
- {
3535
- "include": "#tuple-deconstruction-element-list"
3536
- },
3537
- {
3538
- "include": "#declaration-expression-tuple"
3539
- },
3540
- {
3541
- "include": "#punctuation-comma"
3542
- },
3543
- {
3544
- "match": "(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])",
3545
- "captures": {
3546
- "1": {
3547
- "name": "variable.other.readwrite.cs"
3548
- }
3549
- }
3550
- }
3551
- ],
3552
- "beginCaptures": {
3553
- "0": {
3554
- "name": "punctuation.parenthesis.open.cs"
3555
- }
3556
- },
3557
- "endCaptures": {
3558
- "0": {
3559
- "name": "punctuation.parenthesis.close.cs"
3560
- }
3561
- }
3562
- },
3563
- "tuple-element": {
3564
- "match": "(?x)\n(?\u003ctypename\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cnameandtypeargs\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctypeargs\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctypeargs\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cnameandtypeargs\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s*\\[(?:\\s*,\\s*)*\\]\\s*)* # array suffix?\n )\n)\n(?:(?\u003ctuplename\u003e\\g\u003cidentifier\u003e)\\b)?",
3565
- "captures": {
3566
- "1": {
3567
- "patterns": [
3568
- {
3569
- "include": "#type"
3570
- }
3571
- ]
3572
- },
3573
- "6": {
3574
- "name": "entity.name.variable.tuple-element.cs"
3575
- }
3576
- }
3577
- },
3578
- "tuple-literal": {
3579
- "begin": "(\\()(?=.*[:,])",
3580
- "end": "\\)",
3581
- "patterns": [
3582
- {
3583
- "include": "#comment"
3584
- },
3585
- {
3586
- "include": "#tuple-literal-element"
3587
- },
3588
- {
3589
- "include": "#punctuation-comma"
3590
- }
3591
- ],
3592
- "beginCaptures": {
3593
- "1": {
3594
- "name": "punctuation.parenthesis.open.cs"
3595
- }
3596
- },
3597
- "endCaptures": {
3598
- "0": {
3599
- "name": "punctuation.parenthesis.close.cs"
3600
- }
3601
- }
3602
- },
3603
- "tuple-literal-element": {
3604
- "begin": "(?x)\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)\\s*)?\n(?![,)])",
3605
- "end": "(?=[,)])",
3606
- "patterns": [
3607
- {
3608
- "include": "#expression"
3609
- }
3610
- ],
3611
- "beginCaptures": {
3612
- "0": {
3613
- "name": "entity.name.variable.tuple-element.cs"
3614
- },
3615
- "1": {
3616
- "name": "punctuation.separator.colon.cs"
3617
- }
3618
- }
3619
- },
3620
- "tuple-type": {
3621
- "begin": "\\(",
3622
- "end": "\\)",
3623
- "patterns": [
3624
- {
3625
- "include": "#tuple-element"
3626
- },
3627
- {
3628
- "include": "#punctuation-comma"
3629
- }
3630
- ],
3631
- "beginCaptures": {
3632
- "0": {
3633
- "name": "punctuation.parenthesis.open.cs"
3634
- }
3635
- },
3636
- "endCaptures": {
3637
- "0": {
3638
- "name": "punctuation.parenthesis.close.cs"
3639
- }
3640
- }
3641
- },
3642
- "type": {
3643
- "name": "meta.type.cs",
3644
- "patterns": [
3645
- {
3646
- "include": "#comment"
3647
- },
3648
- {
3649
- "include": "#ref-modifier"
3650
- },
3651
- {
3652
- "include": "#readonly-modifier"
3653
- },
3654
- {
3655
- "include": "#tuple-type"
3656
- },
3657
- {
3658
- "include": "#type-builtin"
3659
- },
3660
- {
3661
- "include": "#type-name"
3662
- },
3663
- {
3664
- "include": "#type-arguments"
3665
- },
3666
- {
3667
- "include": "#type-array-suffix"
3668
- },
3669
- {
3670
- "include": "#type-nullable-suffix"
3671
- }
3672
- ]
3673
- },
3674
- "type-arguments": {
3675
- "begin": "\u003c",
3676
- "end": "\u003e",
3677
- "patterns": [
3678
- {
3679
- "include": "#comment"
3680
- },
3681
- {
3682
- "include": "#type"
3683
- },
3684
- {
3685
- "include": "#punctuation-comma"
3686
- }
3687
- ],
3688
- "beginCaptures": {
3689
- "0": {
3690
- "name": "punctuation.definition.typeparameters.begin.cs"
3691
- }
3692
- },
3693
- "endCaptures": {
3694
- "0": {
3695
- "name": "punctuation.definition.typeparameters.end.cs"
3696
- }
3697
- }
3698
- },
3699
- "type-array-suffix": {
3700
- "begin": "\\[",
3701
- "end": "\\]",
3702
- "patterns": [
3703
- {
3704
- "include": "#punctuation-comma"
3705
- }
3706
- ],
3707
- "beginCaptures": {
3708
- "0": {
3709
- "name": "punctuation.squarebracket.open.cs"
3710
- }
3711
- },
3712
- "endCaptures": {
3713
- "0": {
3714
- "name": "punctuation.squarebracket.close.cs"
3715
- }
3716
- }
3717
- },
3718
- "type-builtin": {
3719
- "match": "\\b(bool|byte|char|decimal|double|float|int|long|object|sbyte|short|string|uint|ulong|ushort|void|dynamic)\\b",
3720
- "captures": {
3721
- "1": {
3722
- "name": "keyword.type.cs"
3723
- }
3724
- }
3725
- },
3726
- "type-declarations": {
3727
- "patterns": [
3728
- {
3729
- "include": "#preprocessor"
3730
- },
3731
- {
3732
- "include": "#comment"
3733
- },
3734
- {
3735
- "include": "#storage-modifier"
3736
- },
3737
- {
3738
- "include": "#class-declaration"
3739
- },
3740
- {
3741
- "include": "#delegate-declaration"
3742
- },
3743
- {
3744
- "include": "#enum-declaration"
3745
- },
3746
- {
3747
- "include": "#interface-declaration"
3748
- },
3749
- {
3750
- "include": "#struct-declaration"
3751
- },
3752
- {
3753
- "include": "#attribute-section"
3754
- },
3755
- {
3756
- "include": "#punctuation-semicolon"
3757
- }
3758
- ]
3759
- },
3760
- "type-name": {
3761
- "patterns": [
3762
- {
3763
- "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\:\\:)",
3764
- "captures": {
3765
- "1": {
3766
- "name": "entity.name.type.alias.cs"
3767
- },
3768
- "2": {
3769
- "name": "punctuation.separator.coloncolon.cs"
3770
- }
3771
- }
3772
- },
3773
- {
3774
- "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\.)",
3775
- "captures": {
3776
- "1": {
3777
- "name": "storage.type.cs"
3778
- },
3779
- "2": {
3780
- "name": "punctuation.accessor.cs"
3781
- }
3782
- }
3783
- },
3784
- {
3785
- "match": "(\\.)\\s*(@?[_[:alpha:]][_[:alnum:]]*)",
3786
- "captures": {
3787
- "1": {
3788
- "name": "punctuation.accessor.cs"
3789
- },
3790
- "2": {
3791
- "name": "storage.type.cs"
3792
- }
3793
- }
3794
- },
3795
- {
3796
- "name": "entity.name.type.cs",
3797
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
3798
- }
3799
- ]
3800
- },
3801
- "type-nullable-suffix": {
3802
- "match": "\\?",
3803
- "captures": {
3804
- "0": {
3805
- "name": "punctuation.separator.question-mark.cs"
3806
- }
3807
- }
3808
- },
3809
- "type-parameter-list": {
3810
- "begin": "\\\u003c",
3811
- "end": "\\\u003e",
3812
- "patterns": [
3813
- {
3814
- "match": "\\b(in|out)\\b",
3815
- "captures": {
3816
- "1": {
3817
- "name": "storage.modifier.cs"
3818
- }
3819
- }
3820
- },
3821
- {
3822
- "match": "(@?[_[:alpha:]][_[:alnum:]]*)\\b",
3823
- "captures": {
3824
- "1": {
3825
- "name": "entity.name.type.type-parameter.cs"
3826
- }
3827
- }
3828
- },
3829
- {
3830
- "include": "#comment"
3831
- },
3832
- {
3833
- "include": "#punctuation-comma"
3834
- },
3835
- {
3836
- "include": "#attribute-section"
3837
- }
3838
- ],
3839
- "beginCaptures": {
3840
- "0": {
3841
- "name": "punctuation.definition.typeparameters.begin.cs"
3842
- }
3843
- },
3844
- "endCaptures": {
3845
- "0": {
3846
- "name": "punctuation.definition.typeparameters.end.cs"
3847
- }
3848
- }
3849
- },
3850
- "typeof-or-default-expression": {
3851
- "begin": "(?\u003c!\\.)\\b(?:(typeof)|(default))\\b\\s*(\\()",
3852
- "end": "\\)",
3853
- "patterns": [
3854
- {
3855
- "include": "#type"
3856
- }
3857
- ],
3858
- "beginCaptures": {
3859
- "1": {
3860
- "name": "keyword.other.typeof.cs"
3861
- },
3862
- "2": {
3863
- "name": "keyword.other.default.cs"
3864
- },
3865
- "3": {
3866
- "name": "punctuation.parenthesis.open.cs"
3867
- }
3868
- },
3869
- "endCaptures": {
3870
- "0": {
3871
- "name": "punctuation.parenthesis.close.cs"
3872
- }
3873
- }
3874
- },
3875
- "using-directive": {
3876
- "patterns": [
3877
- {
3878
- "begin": "\\b(using)\\b\\s+(static)\\s+",
3879
- "end": "(?=;)",
3880
- "patterns": [
3881
- {
3882
- "include": "#type"
3883
- }
3884
- ],
3885
- "beginCaptures": {
3886
- "1": {
3887
- "name": "keyword.other.using.cs"
3888
- },
3889
- "2": {
3890
- "name": "keyword.other.static.cs"
3891
- }
3892
- }
3893
- },
3894
- {
3895
- "begin": "\\b(using)\\s+(?=(@?[_[:alpha:]][_[:alnum:]]*)\\s*=)",
3896
- "end": "(?=;)",
3897
- "patterns": [
3898
- {
3899
- "include": "#comment"
3900
- },
3901
- {
3902
- "include": "#type"
3903
- },
3904
- {
3905
- "include": "#operator-assignment"
3906
- }
3907
- ],
3908
- "beginCaptures": {
3909
- "1": {
3910
- "name": "keyword.other.using.cs"
3911
- },
3912
- "2": {
3913
- "name": "entity.name.type.alias.cs"
3914
- }
3915
- }
3916
- },
3917
- {
3918
- "begin": "\\b(using)\\s*",
3919
- "end": "(?=;)",
3920
- "patterns": [
3921
- {
3922
- "include": "#comment"
3923
- },
3924
- {
3925
- "name": "entity.name.type.namespace.cs",
3926
- "match": "@?[_[:alpha:]][_[:alnum:]]*"
3927
- },
3928
- {
3929
- "include": "#operator-assignment"
3930
- }
3931
- ],
3932
- "beginCaptures": {
3933
- "1": {
3934
- "name": "keyword.other.using.cs"
3935
- }
3936
- }
3937
- }
3938
- ]
3939
- },
3940
- "using-statement": {
3941
- "begin": "(?\u003c!\\.)\\b(using)\\b\\s*(?=\\()",
3942
- "end": "(?=\\;|})",
3943
- "patterns": [
3944
- {
3945
- "begin": "\\(",
3946
- "end": "\\)",
3947
- "patterns": [
3948
- {
3949
- "include": "#local-variable-declaration"
3950
- },
3951
- {
3952
- "include": "#expression"
3953
- }
3954
- ],
3955
- "beginCaptures": {
3956
- "0": {
3957
- "name": "punctuation.parenthesis.open.cs"
3958
- }
3959
- },
3960
- "endCaptures": {
3961
- "0": {
3962
- "name": "punctuation.parenthesis.close.cs"
3963
- }
3964
- }
3965
- },
3966
- {
3967
- "include": "#statement"
3968
- }
3969
- ],
3970
- "beginCaptures": {
3971
- "1": {
3972
- "name": "keyword.other.using.cs"
3973
- }
3974
- }
3975
- },
3976
- "variable-initializer": {
3977
- "begin": "(?\u003c!=|!)(=)(?!=|\u003e)",
3978
- "end": "(?=[,\\)\\];}])",
3979
- "patterns": [
3980
- {
3981
- "include": "#ref-modifier"
3982
- },
3983
- {
3984
- "include": "#expression"
3985
- }
3986
- ],
3987
- "beginCaptures": {
3988
- "1": {
3989
- "name": "keyword.operator.assignment.cs"
3990
- }
3991
- }
3992
- },
3993
- "verbatim-interpolated-string": {
3994
- "name": "string.quoted.double.cs",
3995
- "begin": "\\$@\"",
3996
- "end": "\"(?=[^\"])",
3997
- "patterns": [
3998
- {
3999
- "include": "#verbatim-string-character-escape"
4000
- },
4001
- {
4002
- "include": "#interpolation"
4003
- }
4004
- ],
4005
- "beginCaptures": {
4006
- "0": {
4007
- "name": "punctuation.definition.string.begin.cs"
4008
- }
4009
- },
4010
- "endCaptures": {
4011
- "0": {
4012
- "name": "punctuation.definition.string.end.cs"
4013
- }
4014
- }
4015
- },
4016
- "verbatim-string-character-escape": {
4017
- "name": "constant.character.escape.cs",
4018
- "match": "\"\""
4019
- },
4020
- "verbatim-string-literal": {
4021
- "name": "string.quoted.double.cs",
4022
- "begin": "@\"",
4023
- "end": "\"(?=[^\"])",
4024
- "patterns": [
4025
- {
4026
- "include": "#verbatim-string-character-escape"
4027
- }
4028
- ],
4029
- "beginCaptures": {
4030
- "0": {
4031
- "name": "punctuation.definition.string.begin.cs"
4032
- }
4033
- },
4034
- "endCaptures": {
4035
- "0": {
4036
- "name": "punctuation.definition.string.end.cs"
4037
- }
4038
- }
4039
- },
4040
- "when-clause": {
4041
- "begin": "(?\u003c!\\.)\\b(when)\\b\\s*(\\()",
4042
- "end": "\\)",
4043
- "patterns": [
4044
- {
4045
- "include": "#expression"
4046
- },
4047
- {
4048
- "include": "#comment"
4049
- }
4050
- ],
4051
- "beginCaptures": {
4052
- "1": {
4053
- "name": "keyword.control.try.when.cs"
4054
- },
4055
- "2": {
4056
- "name": "punctuation.parenthesis.open.cs"
4057
- }
4058
- },
4059
- "endCaptures": {
4060
- "0": {
4061
- "name": "punctuation.parenthesis.close.cs"
4062
- }
4063
- }
4064
- },
4065
- "where-clause": {
4066
- "begin": "(?x)\n\\b(where)\\b\\s*",
4067
- "end": "(?=;|\\))",
4068
- "patterns": [
4069
- {
4070
- "include": "#query-body"
4071
- },
4072
- {
4073
- "include": "#expression"
4074
- }
4075
- ],
4076
- "beginCaptures": {
4077
- "1": {
4078
- "name": "keyword.query.where.cs"
4079
- }
4080
- }
4081
- },
4082
- "while-statement": {
4083
- "begin": "(?\u003c!\\.)\\b(while)\\b\\s*(?=\\()",
4084
- "end": "(?\u003c=\\})|(?=;)",
4085
- "patterns": [
4086
- {
4087
- "begin": "\\(",
4088
- "end": "\\)",
4089
- "patterns": [
4090
- {
4091
- "include": "#expression"
4092
- }
4093
- ],
4094
- "beginCaptures": {
4095
- "0": {
4096
- "name": "punctuation.parenthesis.open.cs"
4097
- }
4098
- },
4099
- "endCaptures": {
4100
- "0": {
4101
- "name": "punctuation.parenthesis.close.cs"
4102
- }
4103
- }
4104
- },
4105
- {
4106
- "include": "#statement"
4107
- }
4108
- ],
4109
- "beginCaptures": {
4110
- "1": {
4111
- "name": "keyword.control.loop.while.cs"
4112
- }
4113
- }
4114
- },
4115
- "xml-attribute": {
4116
- "patterns": [
4117
- {
4118
- "match": "(?x)\n(?:^|\\s+)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)\n(=)",
4119
- "captures": {
4120
- "1": {
4121
- "name": "entity.other.attribute-name.cs"
4122
- },
4123
- "2": {
4124
- "name": "entity.other.attribute-name.namespace.cs"
4125
- },
4126
- "3": {
4127
- "name": "punctuation.separator.colon.cs"
4128
- },
4129
- "4": {
4130
- "name": "entity.other.attribute-name.localname.cs"
4131
- },
4132
- "5": {
4133
- "name": "punctuation.separator.equals.cs"
4134
- }
4135
- }
4136
- },
4137
- {
4138
- "include": "#xml-string"
4139
- }
4140
- ]
4141
- },
4142
- "xml-cdata": {
4143
- "name": "string.unquoted.cdata.cs",
4144
- "begin": "\u003c!\\[CDATA\\[",
4145
- "end": "\\]\\]\u003e",
4146
- "beginCaptures": {
4147
- "0": {
4148
- "name": "punctuation.definition.string.begin.cs"
4149
- }
4150
- },
4151
- "endCaptures": {
4152
- "0": {
4153
- "name": "punctuation.definition.string.end.cs"
4154
- }
4155
- }
4156
- },
4157
- "xml-character-entity": {
4158
- "patterns": [
4159
- {
4160
- "name": "constant.character.entity.cs",
4161
- "match": "(?x)\n(\u0026)\n(\n (?:[[:alpha:]:_][[:alnum:]:_.-]*)|\n (?:\\#[[:digit:]]+)|\n (?:\\#x[[:xdigit:]]+)\n)\n(;)",
4162
- "captures": {
4163
- "1": {
4164
- "name": "punctuation.definition.constant.cs"
4165
- },
4166
- "3": {
4167
- "name": "punctuation.definition.constant.cs"
4168
- }
4169
- }
4170
- },
4171
- {
4172
- "name": "invalid.illegal.bad-ampersand.cs",
4173
- "match": "\u0026"
4174
- }
4175
- ]
4176
- },
4177
- "xml-comment": {
4178
- "name": "comment.block.cs",
4179
- "begin": "\u003c!--",
4180
- "end": "--\u003e",
4181
- "beginCaptures": {
4182
- "0": {
4183
- "name": "punctuation.definition.comment.cs"
4184
- }
4185
- },
4186
- "endCaptures": {
4187
- "0": {
4188
- "name": "punctuation.definition.comment.cs"
4189
- }
4190
- }
4191
- },
4192
- "xml-doc-comment": {
4193
- "patterns": [
4194
- {
4195
- "include": "#xml-comment"
4196
- },
4197
- {
4198
- "include": "#xml-character-entity"
4199
- },
4200
- {
4201
- "include": "#xml-cdata"
4202
- },
4203
- {
4204
- "include": "#xml-tag"
4205
- }
4206
- ]
4207
- },
4208
- "xml-string": {
4209
- "patterns": [
4210
- {
4211
- "name": "string.quoted.single.cs",
4212
- "begin": "\\'",
4213
- "end": "\\'",
4214
- "patterns": [
4215
- {
4216
- "include": "#xml-character-entity"
4217
- }
4218
- ],
4219
- "beginCaptures": {
4220
- "0": {
4221
- "name": "punctuation.definition.string.begin.cs"
4222
- }
4223
- },
4224
- "endCaptures": {
4225
- "0": {
4226
- "name": "punctuation.definition.string.end.cs"
4227
- }
4228
- }
4229
- },
4230
- {
4231
- "name": "string.quoted.double.cs",
4232
- "begin": "\\\"",
4233
- "end": "\\\"",
4234
- "patterns": [
4235
- {
4236
- "include": "#xml-character-entity"
4237
- }
4238
- ],
4239
- "beginCaptures": {
4240
- "0": {
4241
- "name": "punctuation.definition.string.begin.cs"
4242
- }
4243
- },
4244
- "endCaptures": {
4245
- "0": {
4246
- "name": "punctuation.definition.string.end.cs"
4247
- }
4248
- }
4249
- }
4250
- ]
4251
- },
4252
- "xml-tag": {
4253
- "name": "meta.tag.cs",
4254
- "begin": "(?x)\n(\u003c/?)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)",
4255
- "end": "(/?\u003e)",
4256
- "patterns": [
4257
- {
4258
- "include": "#xml-attribute"
4259
- }
4260
- ],
4261
- "beginCaptures": {
4262
- "1": {
4263
- "name": "punctuation.definition.tag.cs"
4264
- },
4265
- "2": {
4266
- "name": "entity.name.tag.cs"
4267
- },
4268
- "3": {
4269
- "name": "entity.name.tag.namespace.cs"
4270
- },
4271
- "4": {
4272
- "name": "punctuation.separator.colon.cs"
4273
- },
4274
- "5": {
4275
- "name": "entity.name.tag.localname.cs"
4276
- }
4277
- },
4278
- "endCaptures": {
4279
- "1": {
4280
- "name": "punctuation.definition.tag.cs"
4281
- }
4282
- }
4283
- },
4284
- "yield-break-statement": {
4285
- "match": "(?\u003c!\\.)\\b(yield)\\b\\s*\\b(break)\\b",
4286
- "captures": {
4287
- "1": {
4288
- "name": "keyword.control.flow.yield.cs"
4289
- },
4290
- "2": {
4291
- "name": "keyword.control.flow.break.cs"
4292
- }
4293
- }
4294
- },
4295
- "yield-return-statement": {
4296
- "begin": "(?\u003c!\\.)\\b(yield)\\b\\s*\\b(return)\\b",
4297
- "end": "(?=;)",
4298
- "patterns": [
4299
- {
4300
- "include": "#expression"
4301
- }
4302
- ],
4303
- "beginCaptures": {
4304
- "1": {
4305
- "name": "keyword.control.flow.yield.cs"
4306
- },
4307
- "2": {
4308
- "name": "keyword.control.flow.return.cs"
4309
- }
4310
- }
4311
- },
4312
- "yield-statement": {
4313
- "patterns": [
4314
- {
4315
- "include": "#yield-return-statement"
4316
- },
4317
- {
4318
- "include": "#yield-break-statement"
4319
- }
4320
- ]
4321
- }
4322
- }
4323
- }
1
+ {"name":"C#","scopeName":"source.cs","patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#directives"},{"include":"#declarations"},{"include":"#script-top-level"}],"repository":{"anonymous-method-expression":{"patterns":[{"begin":"(?x)\n(?:\\b(async)\\b\\s*)?\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=\u003e)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#block"},{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"name":"entity.name.variable.parameter.cs"},"3":{"name":"keyword.operator.arrow.cs"}}},{"begin":"(?x)\n(?:\\b(async)\\b\\s*)?\n(\\(.*?\\))\\s*\n(=\u003e)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#block"},{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#lambda-parameter-list"}]},"3":{"name":"keyword.operator.arrow.cs"}}},{"begin":"(?x)\n(?:\\b(async)\\b\\s*)?\n(?:\\b(delegate)\\b\\s*)","end":"(?=\\)|;|}|,)","patterns":[{"include":"#parenthesized-parameter-list"},{"include":"#block"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"name":"keyword.other.delegate.cs"}}}]},"anonymous-object-creation-expression":{"begin":"\\b(new)\\b\\s*(?=\\{|$)","end":"(?\u003c=\\})","patterns":[{"include":"#initializer-expression"}],"beginCaptures":{"1":{"name":"keyword.other.new.cs"}}},"argument":{"patterns":[{"name":"storage.modifier.cs","match":"\\b(ref|out|in)\\b"},{"include":"#declaration-expression-local"},{"include":"#expression"}]},"argument-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#named-argument"},{"include":"#argument"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"array-creation-expression":{"begin":"(?x)\n\\b(new|stackalloc)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\\s*\n(?=\\[)","end":"(?\u003c=\\])","patterns":[{"include":"#bracketed-argument-list"}],"beginCaptures":{"1":{"name":"keyword.other.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"as-expression":{"match":"(?x)\n(?\u003c!\\.)\\b(as)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?","captures":{"1":{"name":"keyword.other.as.cs"},"2":{"patterns":[{"include":"#type"}]}}},"attribute":{"patterns":[{"include":"#type-name"},{"include":"#attribute-arguments"}]},"attribute-arguments":{"begin":"(\\()","end":"(\\))","patterns":[{"include":"#attribute-named-argument"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"1":{"name":"punctuation.parenthesis.close.cs"}}},"attribute-named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?==)","end":"(?=(,|\\)))","patterns":[{"include":"#operator-assignment"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"entity.name.variable.property.cs"}}},"attribute-section":{"begin":"(\\[)(assembly|module|field|event|method|param|property|return|type)?(\\:)?","end":"(\\])","patterns":[{"include":"#comment"},{"include":"#attribute"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.squarebracket.open.cs"},"2":{"name":"keyword.other.attribute-specifier.cs"},"3":{"name":"punctuation.separator.colon.cs"}},"endCaptures":{"1":{"name":"punctuation.squarebracket.close.cs"}}},"await-expression":{"name":"keyword.other.await.cs","match":"(?!\\.)\\b(await)\\b"},"await-statement":{"begin":"(?\u003c!\\.)\\b(await)\\b","end":"(?=;)","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.other.await.cs"}}},"base-types":{"begin":":","end":"(?=\\{|where)","patterns":[{"include":"#type"},{"include":"#punctuation-comma"},{"include":"#preprocessor"}],"beginCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}},"block":{"begin":"\\{","end":"\\}","patterns":[{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"boolean-literal":{"patterns":[{"name":"constant.language.boolean.true.cs","match":"(?\u003c!\\.)\\btrue\\b"},{"name":"constant.language.boolean.false.cs","match":"(?\u003c!\\.)\\bfalse\\b"}]},"bracketed-argument-list":{"begin":"\\[","end":"\\]","patterns":[{"include":"#named-argument"},{"include":"#argument"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}}},"bracketed-parameter-list":{"begin":"(?=(\\[))","end":"(?=(\\]))","patterns":[{"begin":"(?\u003c=\\[)","end":"(?=\\])","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#parameter"},{"include":"#punctuation-comma"},{"include":"#variable-initializer"}]}],"beginCaptures":{"1":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"1":{"name":"punctuation.squarebracket.close.cs"}}},"break-or-continue-statement":{"match":"(?\u003c!\\.)\\b(?:(break)|(continue))\\b","captures":{"1":{"name":"keyword.control.flow.break.cs"},"2":{"name":"keyword.control.flow.continue.cs"}}},"cast-expression":{"match":"(?x)\n(\\()\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(\\))(?=\\s*@?[_[:alnum:]\\(])","captures":{"1":{"name":"punctuation.parenthesis.open.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"punctuation.parenthesis.close.cs"}}},"catch-clause":{"begin":"(?\u003c!\\.)\\b(catch)\\b","end":"(?\u003c=\\})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"match":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?:(\\g\u003cidentifier\u003e)\\b)?","captures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.local.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#when-clause"},{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.try.catch.cs"}}},"char-character-escape":{"name":"constant.character.escape.cs","match":"\\\\(['\"\\\\0abfnrtv]|x[0-9a-fA-F]{1,4}|u[0-9a-fA-F]{4})"},"char-literal":{"name":"string.quoted.single.cs","begin":"'","end":"(\\')|((?:[^\\\\\\n])$)","patterns":[{"include":"#char-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.char.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.char.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"checked-unchecked-expression":{"begin":"(?\u003c!\\.)\\b(?:(checked)|(unchecked))\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.other.checked.cs"},"2":{"name":"keyword.other.unchecked.cs"},"3":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"checked-unchecked-statement":{"begin":"(?\u003c!\\.)\\b(?:(checked)|(unchecked))\\b\\s*(?!\\()","end":"(?\u003c=\\})","patterns":[{"include":"#block"},{"include":"#comment"}],"beginCaptures":{"1":{"name":"keyword.other.checked.cs"},"2":{"name":"keyword.other.unchecked.cs"}}},"class-declaration":{"begin":"(?=\\bclass\\b)","end":"(?\u003c=\\})","patterns":[{"begin":"(?x)\n\\b(class)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)\\s*","end":"(?=\\{)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.class.cs"},"2":{"name":"entity.name.type.class.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"class-or-struct-members":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#storage-modifier"},{"include":"#type-declarations"},{"include":"#property-declaration"},{"include":"#field-declaration"},{"include":"#event-declaration"},{"include":"#indexer-declaration"},{"include":"#variable-initializer"},{"include":"#constructor-declaration"},{"include":"#destructor-declaration"},{"include":"#operator-declaration"},{"include":"#conversion-operator-declaration"},{"include":"#method-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"comment":{"patterns":[{"name":"comment.block.cs","begin":"/\\*","end":"\\*/","beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}},{"begin":"(^\\s+)?(?=//)","end":"(?=$)","patterns":[{"name":"comment.block.documentation.cs","begin":"(?\u003c!/)///(?!/)","end":"(?=$)","patterns":[{"include":"#xml-doc-comment"}],"beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}},{"name":"comment.line.double-slash.cs","begin":"(?\u003c!/)//(?:(?!/)|(?=//))","end":"(?=$)","beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}}],"beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.cs"}}}]},"conditional-operator":{"begin":"(?\u003c!\\?)\\?(?!\\?|\\.|\\[)","end":":","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.conditional.question-mark.cs"}},"endCaptures":{"0":{"name":"keyword.operator.conditional.colon.cs"}}},"constructor-declaration":{"begin":"(?=@?[_[:alpha:]][_[:alnum:]]*\\s*\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"entity.name.function.cs"}}},{"begin":"(:)","end":"(?=\\{|=\u003e)","patterns":[{"include":"#constructor-initializer"}],"beginCaptures":{"1":{"name":"punctuation.separator.colon.cs"}}},{"include":"#parenthesized-parameter-list"},{"include":"#preprocessor"},{"include":"#comment"},{"include":"#expression-body"},{"include":"#block"}]},"constructor-initializer":{"begin":"\\b(?:(base)|(this))\\b\\s*(?=\\()","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"keyword.other.base.cs"},"2":{"name":"keyword.other.this.cs"}}},"conversion-operator-declaration":{"begin":"(?x)\n(?\u003cexplicit_or_implicit_keyword\u003e(?:\\b(?:explicit|implicit)))\\s*\n(?\u003coperator_keyword\u003e(?:\\b(?:operator)))\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"match":"\\b(explicit)\\b","captures":{"1":{"name":"keyword.other.explicit.cs"}}},{"match":"\\b(implicit)\\b","captures":{"1":{"name":"keyword.other.implicit.cs"}}}]},"2":{"name":"keyword.other.operator-decl.cs"},"3":{"patterns":[{"include":"#type"}]}}},"declaration-expression-local":{"match":"(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)\\]])","captures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}}},"declaration-expression-tuple":{"match":"(?x) # e.g. int x OR var x\n(?:\n \\b(var)\\b|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.tuple-element.cs"}}},"declarations":{"patterns":[{"include":"#namespace-declaration"},{"include":"#type-declarations"},{"include":"#punctuation-semicolon"}]},"delegate-declaration":{"begin":"(?x)\n(?:\\b(delegate)\\b)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()","end":"(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.delegate.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.type.delegate.cs"},"8":{"patterns":[{"include":"#type-parameter-list"}]}}},"destructor-declaration":{"begin":"(~)(@?[_[:alpha:]][_[:alnum:]]*)\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"name":"punctuation.tilde.cs"},"2":{"name":"entity.name.function.cs"}}},"directives":{"patterns":[{"include":"#extern-alias-directive"},{"include":"#using-directive"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"do-statement":{"begin":"(?\u003c!\\.)\\b(do)\\b","end":"(?=;|})","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.do.cs"}}},"element-access-expression":{"begin":"(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*)? # property name\n(?:(\\?)\\s*)? # null-conditional operator?\n(?=\\[) # open bracket of argument list","end":"(?\u003c=\\])(?!\\s*\\[)","patterns":[{"include":"#bracketed-argument-list"}],"beginCaptures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"variable.other.object.property.cs"},"4":{"name":"keyword.operator.null-conditional.cs"}}},"else-part":{"begin":"(?\u003c!\\.)\\b(else)\\b","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.else.cs"}}},"enum-declaration":{"begin":"(?=\\benum\\b)","end":"(?\u003c=\\})","patterns":[{"begin":"(?=enum)","end":"(?=\\{)","patterns":[{"include":"#comment"},{"match":"(enum)\\s+(@?[_[:alpha:]][_[:alnum:]]*)","captures":{"1":{"name":"keyword.other.enum.cs"},"2":{"name":"entity.name.type.enum.cs"}}},{"begin":":","end":"(?=\\{)","patterns":[{"include":"#type"}],"beginCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}}]},{"begin":"\\{","end":"\\}","patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#attribute-section"},{"include":"#punctuation-comma"},{"begin":"@?[_[:alpha:]][_[:alnum:]]*","end":"(?=(,|\\}))","patterns":[{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"0":{"name":"entity.name.variable.enum-member.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"event-accessors":{"begin":"\\{","end":"\\}","patterns":[{"name":"keyword.other.add.cs","match":"\\b(add)\\b"},{"name":"keyword.other.remove.cs","match":"\\b(remove)\\b"},{"include":"#comment"},{"include":"#attribute-section"},{"include":"#expression-body"},{"include":"#block"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"event-declaration":{"begin":"(?x)\n\\b(event)\\b\\s*\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cevent_names\u003e\\g\u003cidentifier\u003e(?:\\s*,\\s*\\g\u003cidentifier\u003e)*)\\s*\n(?=\\{|;|$)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#event-accessors"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"keyword.other.event.cs"},"2":{"patterns":[{"include":"#type"}]},"8":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"9":{"patterns":[{"name":"entity.name.variable.event.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"}]}}},"expression":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#checked-unchecked-expression"},{"include":"#typeof-or-default-expression"},{"include":"#nameof-expression"},{"include":"#throw-expression"},{"include":"#interpolated-string"},{"include":"#verbatim-interpolated-string"},{"include":"#this-or-base-expression"},{"include":"#switch-expression"},{"include":"#conditional-operator"},{"include":"#expression-operators"},{"include":"#await-expression"},{"include":"#query-expression"},{"include":"#as-expression"},{"include":"#is-expression"},{"include":"#anonymous-method-expression"},{"include":"#object-creation-expression"},{"include":"#array-creation-expression"},{"include":"#anonymous-object-creation-expression"},{"include":"#invocation-expression"},{"include":"#member-access-expression"},{"include":"#element-access-expression"},{"include":"#cast-expression"},{"include":"#literal"},{"include":"#parenthesized-expression"},{"include":"#tuple-deconstruction-assignment"},{"include":"#initializer-expression"},{"include":"#identifier"}]},"expression-body":{"begin":"=\u003e","end":"(?=[,\\);}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"keyword.operator.arrow.cs"}}},"expression-operators":{"patterns":[{"name":"keyword.operator.assignment.compound.cs","match":"\\*=|/=|%=|\\+=|-=|\\?\\?="},{"name":"keyword.operator.assignment.compound.bitwise.cs","match":"\\\u0026=|\\^=|\u003c\u003c=|\u003e\u003e=|\\|="},{"name":"keyword.operator.bitwise.shift.cs","match":"\u003c\u003c|\u003e\u003e"},{"name":"keyword.operator.comparison.cs","match":"==|!="},{"name":"keyword.operator.relational.cs","match":"\u003c=|\u003e=|\u003c|\u003e"},{"name":"keyword.operator.logical.cs","match":"\\!|\u0026\u0026|\\|\\|"},{"name":"keyword.operator.bitwise.cs","match":"\\\u0026|~|\\^|\\|"},{"name":"keyword.operator.assignment.cs","match":"\\="},{"name":"keyword.operator.decrement.cs","match":"--"},{"name":"keyword.operator.increment.cs","match":"\\+\\+"},{"name":"keyword.operator.arithmetic.cs","match":"%|\\*|/|-|\\+"},{"name":"keyword.operator.null-coalescing.cs","match":"\\?\\?"}]},"extern-alias-directive":{"begin":"\\s*(extern)\\b\\s*(alias)\\b\\s*(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=;)","beginCaptures":{"1":{"name":"keyword.other.extern.cs"},"2":{"name":"keyword.other.alias.cs"},"3":{"name":"variable.other.alias.cs"}}},"field-declaration":{"begin":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s* # first field name\n(?!=\u003e|==)(?=,|;|=|$)","end":"(?=;)","patterns":[{"name":"entity.name.variable.field.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"},{"include":"#class-or-struct-members"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.field.cs"}}},"finally-clause":{"begin":"(?\u003c!\\.)\\b(finally)\\b","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.try.finally.cs"}}},"for-statement":{"begin":"(?\u003c!\\.)\\b(for)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#local-variable-declaration"},{"include":"#expression"},{"include":"#punctuation-comma"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.for.cs"}}},"foreach-statement":{"begin":"(?\u003c!\\.)\\b(foreach)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"match":"(?x)\n(?:\n (\\bvar\\b)|\n (?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s+\n\\b(in)\\b","captures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"},"8":{"name":"keyword.control.loop.in.cs"}}},{"match":"(?x) # match foreach (var (x, y) in ...)\n(?:\\b(var)\\b\\s*)?\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s+\n\\b(in)\\b","captures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]},"3":{"name":"keyword.control.loop.in.cs"}}},{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.foreach.cs"}}},"generic-constraints":{"begin":"(where)\\s+(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","end":"(?=\\{|where|;|=\u003e)","patterns":[{"name":"keyword.other.class.cs","match":"\\bclass\\b"},{"name":"keyword.other.struct.cs","match":"\\bstruct\\b"},{"match":"(new)\\s*(\\()\\s*(\\))","captures":{"1":{"name":"keyword.other.new.cs"},"2":{"name":"punctuation.parenthesis.open.cs"},"3":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#type"},{"include":"#punctuation-comma"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.where.cs"},"2":{"name":"storage.type.cs"},"3":{"name":"punctuation.separator.colon.cs"}}},"goto-statement":{"begin":"(?\u003c!\\.)\\b(goto)\\b","end":"(?=;)","patterns":[{"begin":"\\b(case)\\b","end":"(?=;)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.case.cs"}}},{"match":"\\b(default)\\b","captures":{"1":{"name":"keyword.control.default.cs"}}},{"name":"entity.name.label.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"}],"beginCaptures":{"1":{"name":"keyword.control.goto.cs"}}},"group-by":{"match":"\\b(by)\\b\\s*","captures":{"1":{"name":"keyword.query.by.cs"}}},"group-clause":{"begin":"\\b(group)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#group-by"},{"include":"#group-into"},{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.group.cs"}}},"group-into":{"match":"(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*","captures":{"1":{"name":"keyword.query.into.cs"},"2":{"name":"entity.name.variable.range-variable.cs"}}},"identifier":{"name":"variable.other.readwrite.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},"if-statement":{"begin":"(?\u003c!\\.)\\b(if)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.conditional.if.cs"}}},"indexer-declaration":{"begin":"(?x)\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cindexer_name\u003ethis)\\s*\n(?=\\[)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#bracketed-parameter-list"},{"include":"#property-accessors"},{"include":"#expression-body"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"keyword.other.this.cs"}}},"initializer-expression":{"begin":"\\{","end":"\\}","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"interface-declaration":{"begin":"(?=\\binterface\\b)","end":"(?\u003c=\\})","patterns":[{"begin":"(?x)\n(interface)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.interface.cs"},"2":{"name":"entity.name.type.interface.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#interface-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"interface-members":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#property-declaration"},{"include":"#event-declaration"},{"include":"#indexer-declaration"},{"include":"#method-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"interpolated-string":{"name":"string.quoted.double.cs","begin":"\\$\"","end":"(\")|((?:[^\\\\\\n])$)","patterns":[{"include":"#string-character-escape"},{"include":"#interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"interpolation":{"name":"meta.interpolation.cs","begin":"(?\u003c=[^\\{]|^)((?:\\{\\{)*)(\\{)(?=[^\\{])","end":"\\}","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"string.quoted.double.cs"},"2":{"name":"punctuation.definition.interpolation.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.interpolation.end.cs"}}},"invocation-expression":{"begin":"(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(?:(\\.)\\s*)? # preceding dot?\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # method name\n(?\u003ctype_args\u003e\\s*\u003c([^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\\s* # type arguments\n(?=\\() # open paren of argument list","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"entity.name.function.cs"},"4":{"patterns":[{"include":"#type-arguments"}]}}},"is-expression":{"match":"(?x)\n(?\u003c!\\.)\\b(is)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?","captures":{"1":{"name":"keyword.other.is.cs"},"2":{"patterns":[{"include":"#type"}]}}},"join-clause":{"begin":"(?x)\n\\b(join)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#join-on"},{"include":"#join-equals"},{"include":"#join-into"},{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.join.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.range-variable.cs"},"8":{"name":"keyword.query.in.cs"}}},"join-equals":{"match":"\\b(equals)\\b\\s*","captures":{"1":{"name":"keyword.query.equals.cs"}}},"join-into":{"match":"(?x)\n\\b(into)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*","captures":{"1":{"name":"keyword.query.into.cs"},"2":{"name":"entity.name.variable.range-variable.cs"}}},"join-on":{"match":"\\b(on)\\b\\s*","captures":{"1":{"name":"keyword.query.on.cs"}}},"labeled-statement":{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","captures":{"1":{"name":"entity.name.label.cs"},"2":{"name":"punctuation.separator.colon.cs"}}},"lambda-parameter":{"match":"(?x)\n(?:\\b(ref|out|in)\\b)?\\s*\n(?:(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+)?\n(\\g\u003cidentifier\u003e)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.parameter.cs"}}},"lambda-parameter-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#lambda-parameter"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"let-clause":{"begin":"(?x)\n\\b(let)\\b\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(=)\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.let.cs"},"2":{"name":"entity.name.variable.range-variable.cs"},"3":{"name":"keyword.operator.assignment.cs"}}},"literal":{"patterns":[{"include":"#boolean-literal"},{"include":"#null-literal"},{"include":"#numeric-literal"},{"include":"#char-literal"},{"include":"#string-literal"},{"include":"#verbatim-string-literal"},{"include":"#tuple-literal"}]},"local-constant-declaration":{"begin":"(?x)\n(?\u003cconst_keyword\u003e\\b(?:const)\\b)\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?=,|;|=)","end":"(?=;)","patterns":[{"name":"entity.name.variable.local.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.local.cs"}}},"local-declaration":{"patterns":[{"include":"#local-constant-declaration"},{"include":"#local-variable-declaration"},{"include":"#local-function-declaration"},{"include":"#local-tuple-var-deconstruction"}]},"local-function-declaration":{"patterns":[{"include":"#method-declaration"}]},"local-tuple-var-deconstruction":{"begin":"(?x) # e.g. var (x, y) = GetPoint();\n(?:\\b(var)\\b\\s*)\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?=;|=|\\))","end":"(?=;|\\))","patterns":[{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]}}},"local-variable-declaration":{"begin":"(?x)\n(?:\n (?:(\\busing)\\s+)?\n (?:(\\bref)\\s+(?:(\\breadonly)\\s+)?)?(\\bvar\\b)| # ref local\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref local\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\s*\n(?!=\u003e)\n(?=,|;|=|\\))","end":"(?=;|\\))","patterns":[{"name":"entity.name.variable.local.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-comma"},{"include":"#comment"},{"include":"#variable-initializer"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"},"10":{"name":"entity.name.variable.local.cs"},"2":{"name":"storage.modifier.cs"},"3":{"name":"storage.modifier.cs"},"4":{"name":"keyword.other.var.cs"},"5":{"patterns":[{"include":"#type"}]}}},"lock-statement":{"begin":"(?\u003c!\\.)\\b(lock)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.other.lock.cs"}}},"member-access-expression":{"patterns":[{"match":"(?x)\n(?:(\\?)\\s*)? # preceding null-conditional operator?\n(\\.)\\s* # preceding dot\n(@?[_[:alpha:]][_[:alnum:]]*)\\s* # property name\n(?![_[:alnum:]]|\\(|(\\?)?\\[|\u003c) # next character is not alpha-numeric, nor a (, [, or \u003c. Also, test for ?[","captures":{"1":{"name":"keyword.operator.null-conditional.cs"},"2":{"name":"punctuation.accessor.cs"},"3":{"name":"variable.other.object.property.cs"}}},{"match":"(?x)\n(\\.)?\\s*\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?\u003ctype_params\u003e\\s*\u003c([^\u003c\u003e]|\\g\u003ctype_params\u003e)+\u003e\\s*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)","captures":{"1":{"name":"punctuation.accessor.cs"},"2":{"name":"variable.other.object.cs"},"3":{"patterns":[{"include":"#type-arguments"}]}}},{"match":"(?x)\n(@?[_[:alpha:]][_[:alnum:]]*)\n(?=\n (\\s*\\?)?\n \\s*\\.\\s*@?[_[:alpha:]][_[:alnum:]]*\n)","captures":{"1":{"name":"variable.other.object.cs"}}}]},"method-declaration":{"begin":"(?x)\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(\\g\u003cidentifier\u003e)\\s*\n(\u003c([^\u003c\u003e]+)\u003e)?\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#generic-constraints"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"entity.name.function.cs"},"9":{"patterns":[{"include":"#type-parameter-list"}]}}},"named-argument":{"begin":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)","end":"(?=(,|\\)|\\]))","patterns":[{"include":"#argument"}],"beginCaptures":{"1":{"name":"entity.name.variable.parameter.cs"},"2":{"name":"punctuation.separator.colon.cs"}}},"nameof-expression":{"begin":"(?\u003c!\\.)\\b(nameof)\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.other.nameof.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"namespace-declaration":{"begin":"\\b(namespace)\\s+","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"name":"entity.name.type.namespace.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#punctuation-accessor"},{"begin":"\\{","end":"\\}","patterns":[{"include":"#declarations"},{"include":"#using-directive"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.other.namespace.cs"}}},"null-literal":{"name":"constant.language.null.cs","match":"(?\u003c!\\.)\\bnull\\b"},"numeric-literal":{"patterns":[{"name":"constant.numeric.hex.cs","match":"\\b0(x|X)[0-9a-fA-F_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b"},{"name":"constant.numeric.binary.cs","match":"\\b0(b|B)[01_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b"},{"name":"constant.numeric.decimal.cs","match":"\\b([0-9_]+)?\\.[0-9_]+((e|E)[0-9]+)?(F|f|D|d|M|m)?\\b"},{"name":"constant.numeric.decimal.cs","match":"\\b[0-9_]+(e|E)[0-9_]+(F|f|D|d|M|m)?\\b"},{"name":"constant.numeric.decimal.cs","match":"\\b[0-9_]+(F|f|D|d|M|m)\\b"},{"name":"constant.numeric.decimal.cs","match":"\\b[0-9_]+(U|u|L|l|UL|Ul|uL|ul|LU|Lu|lU|lu)?\\b"}]},"object-creation-expression":{"patterns":[{"include":"#object-creation-expression-with-parameters"},{"include":"#object-creation-expression-with-no-parameters"}]},"object-creation-expression-with-no-parameters":{"match":"(?x)\n(new)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\{|$)","captures":{"1":{"name":"keyword.other.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"object-creation-expression-with-parameters":{"begin":"(?x)\n(new)\\s+\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?=\\()","end":"(?\u003c=\\))","patterns":[{"include":"#argument-list"}],"beginCaptures":{"1":{"name":"keyword.other.new.cs"},"2":{"patterns":[{"include":"#type"}]}}},"operator-assignment":{"name":"keyword.operator.assignment.cs","match":"(?\u003c!=|!)(=)(?!=)"},"operator-declaration":{"begin":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s*\n(?\u003coperator_keyword\u003e(?:\\b(?:operator)))\\s*\n(?\u003coperator\u003e(?:\\+|-|\\*|/|%|\u0026|\\||\\^|\\\u003c\\\u003c|\\\u003e\\\u003e|==|!=|\\\u003e|\\\u003c|\\\u003e=|\\\u003c=|!|~|\\+\\+|--|true|false))\\s*\n(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#parenthesized-parameter-list"},{"include":"#expression-body"},{"include":"#block"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"keyword.other.operator-decl.cs"},"7":{"name":"entity.name.function.cs"}}},"orderby-clause":{"begin":"\\b(orderby)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#ordering-direction"},{"include":"#query-body"},{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"keyword.query.orderby.cs"}}},"ordering-direction":{"match":"\\b(?:(ascending)|(descending))\\b","captures":{"1":{"name":"keyword.query.ascending.cs"},"2":{"name":"keyword.query.descending.cs"}}},"parameter":{"match":"(?x)\n(?:(?:\\b(ref|params|out|in|this)\\b)\\s+)?\n(?\u003ctype_name\u003e\n (?:\n (?:ref\\s+)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)","captures":{"1":{"name":"storage.modifier.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.parameter.cs"}}},"parenthesized-expression":{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"parenthesized-parameter-list":{"begin":"(\\()","end":"(\\))","patterns":[{"include":"#comment"},{"include":"#attribute-section"},{"include":"#parameter"},{"include":"#punctuation-comma"},{"include":"#variable-initializer"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"preprocessor":{"name":"meta.preprocessor.cs","begin":"^\\s*(\\#)\\s*","end":"(?\u003c=$)","patterns":[{"include":"#comment"},{"include":"#preprocessor-define-or-undef"},{"include":"#preprocessor-if-or-elif"},{"include":"#preprocessor-else-or-endif"},{"include":"#preprocessor-warning-or-error"},{"include":"#preprocessor-region"},{"include":"#preprocessor-endregion"},{"include":"#preprocessor-load"},{"include":"#preprocessor-r"},{"include":"#preprocessor-line"},{"include":"#preprocessor-pragma-warning"},{"include":"#preprocessor-pragma-checksum"}],"beginCaptures":{"1":{"name":"punctuation.separator.hash.cs"}}},"preprocessor-define-or-undef":{"match":"\\b(?:(define)|(undef))\\b\\s*\\b([_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"keyword.preprocessor.define.cs"},"2":{"name":"keyword.preprocessor.undef.cs"},"3":{"name":"entity.name.variable.preprocessor.symbol.cs"}}},"preprocessor-else-or-endif":{"match":"\\b(?:(else)|(endif))\\b","captures":{"1":{"name":"keyword.preprocessor.else.cs"},"2":{"name":"keyword.preprocessor.endif.cs"}}},"preprocessor-endregion":{"match":"\\b(endregion)\\b","captures":{"1":{"name":"keyword.preprocessor.endregion.cs"}}},"preprocessor-expression":{"patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#preprocessor-expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"match":"\\b(?:(true)|(false)|([_[:alpha:]][_[:alnum:]]*))\\b","captures":{"1":{"name":"constant.language.boolean.true.cs"},"2":{"name":"constant.language.boolean.false.cs"},"3":{"name":"entity.name.variable.preprocessor.symbol.cs"}}},{"match":"(==|!=)|(\\!|\u0026\u0026|\\|\\|)","captures":{"1":{"name":"keyword.operator.comparison.cs"},"2":{"name":"keyword.operator.logical.cs"}}}]},"preprocessor-if-or-elif":{"begin":"\\b(?:(if)|(elif))\\b","end":"(?=$)","patterns":[{"include":"#comment"},{"include":"#preprocessor-expression"}],"beginCaptures":{"1":{"name":"keyword.preprocessor.if.cs"},"2":{"name":"keyword.preprocessor.elif.cs"}}},"preprocessor-line":{"begin":"\\b(line)\\b","end":"(?=$)","patterns":[{"match":"\\b(?:(default|hidden))","captures":{"1":{"name":"keyword.preprocessor.default.cs"},"2":{"name":"keyword.preprocessor.hidden.cs"}}},{"match":"[0-9]+","captures":{"0":{"name":"constant.numeric.decimal.cs"}}},{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.line.cs"}}},"preprocessor-load":{"begin":"\\b(load)\\b","end":"(?=$)","patterns":[{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.load.cs"}}},"preprocessor-pragma-checksum":{"match":"\\b(pragma)\\b\\s*\\b(checksum)\\b\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")\\s*(\\\"[^\"]*\\\")","captures":{"1":{"name":"keyword.preprocessor.pragma.cs"},"2":{"name":"keyword.preprocessor.checksum.cs"},"3":{"name":"string.quoted.double.cs"},"4":{"name":"string.quoted.double.cs"},"5":{"name":"string.quoted.double.cs"}}},"preprocessor-pragma-warning":{"match":"\\b(pragma)\\b\\s*\\b(warning)\\b\\s*\\b(?:(disable)|(restore))\\b(\\s*[0-9]+(?:\\s*,\\s*[0-9]+)?)?","captures":{"1":{"name":"keyword.preprocessor.pragma.cs"},"2":{"name":"keyword.preprocessor.warning.cs"},"3":{"name":"keyword.preprocessor.disable.cs"},"4":{"name":"keyword.preprocessor.restore.cs"},"5":{"patterns":[{"match":"[0-9]+","captures":{"0":{"name":"constant.numeric.decimal.cs"}}},{"include":"#punctuation-comma"}]}}},"preprocessor-r":{"begin":"\\b(r)\\b","end":"(?=$)","patterns":[{"match":"\\\"[^\"]*\\\"","captures":{"0":{"name":"string.quoted.double.cs"}}}],"beginCaptures":{"1":{"name":"keyword.preprocessor.r.cs"}}},"preprocessor-region":{"match":"\\b(region)\\b\\s*(.*)(?=$)","captures":{"1":{"name":"keyword.preprocessor.region.cs"},"2":{"name":"string.unquoted.preprocessor.message.cs"}}},"preprocessor-warning-or-error":{"match":"\\b(?:(warning)|(error))\\b\\s*(.*)(?=$)","captures":{"1":{"name":"keyword.preprocessor.warning.cs"},"2":{"name":"keyword.preprocessor.error.cs"},"3":{"name":"string.unquoted.preprocessor.message.cs"}}},"property-accessors":{"begin":"\\{","end":"\\}","patterns":[{"name":"storage.modifier.cs","match":"\\b(private|protected|internal)\\b"},{"name":"keyword.other.get.cs","match":"\\b(get)\\b"},{"name":"keyword.other.set.cs","match":"\\b(set)\\b"},{"include":"#comment"},{"include":"#attribute-section"},{"include":"#expression-body"},{"include":"#block"},{"include":"#punctuation-semicolon"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"property-declaration":{"begin":"(?x)\n\n# The negative lookahead below ensures that we don't match nested types\n# or other declarations as properties.\n(?![[:word:][:space:]]*\\b(?:class|interface|struct|enum|event)\\b)\n\n(?\u003creturn_type\u003e\n (?\u003ctype_name\u003e\n (?:\n (?:ref\\s+(?:readonly\\s+)?)? # ref return\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n )\\s+\n)\n(?\u003cinterface_name\u003e\\g\u003ctype_name\u003e\\s*\\.\\s*)?\n(?\u003cproperty_name\u003e\\g\u003cidentifier\u003e)\\s*\n(?=\\{|=\u003e|$)","end":"(?\u003c=\\})|(?=;)","patterns":[{"include":"#comment"},{"include":"#property-accessors"},{"include":"#expression-body"},{"include":"#variable-initializer"},{"include":"#class-or-struct-members"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"7":{"patterns":[{"include":"#type"},{"include":"#punctuation-accessor"}]},"8":{"name":"entity.name.variable.property.cs"}}},"punctuation-accessor":{"name":"punctuation.accessor.cs","match":"\\."},"punctuation-comma":{"name":"punctuation.separator.comma.cs","match":","},"punctuation-semicolon":{"name":"punctuation.terminator.statement.cs","match":";"},"query-body":{"patterns":[{"include":"#let-clause"},{"include":"#where-clause"},{"include":"#join-clause"},{"include":"#orderby-clause"},{"include":"#select-clause"},{"include":"#group-clause"}]},"query-expression":{"begin":"(?x)\n\\b(from)\\b\\s*\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\n\\s+(\\g\u003cidentifier\u003e)\\b\\s*\n\\b(in)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.from.cs"},"2":{"patterns":[{"include":"#type"}]},"7":{"name":"entity.name.variable.range-variable.cs"},"8":{"name":"keyword.query.in.cs"}}},"readonly-modifier":{"name":"storage.modifier.cs","match":"\\b(readonly)\\b"},"ref-modifier":{"name":"storage.modifier.cs","match":"\\b(ref)\\b"},"return-statement":{"begin":"(?\u003c!\\.)\\b(return)\\b","end":"(?=;)","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.return.cs"}}},"script-top-level":{"patterns":[{"include":"#method-declaration"},{"include":"#statement"},{"include":"#punctuation-semicolon"}]},"select-clause":{"begin":"\\b(select)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.select.cs"}}},"statement":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#while-statement"},{"include":"#do-statement"},{"include":"#for-statement"},{"include":"#foreach-statement"},{"include":"#if-statement"},{"include":"#else-part"},{"include":"#switch-statement"},{"include":"#goto-statement"},{"include":"#return-statement"},{"include":"#break-or-continue-statement"},{"include":"#throw-statement"},{"include":"#yield-statement"},{"include":"#await-statement"},{"include":"#try-statement"},{"include":"#checked-unchecked-statement"},{"include":"#lock-statement"},{"include":"#using-statement"},{"include":"#labeled-statement"},{"include":"#local-declaration"},{"include":"#block"},{"include":"#expression"},{"include":"#punctuation-semicolon"}]},"storage-modifier":{"name":"storage.modifier.cs","match":"(?\u003c!\\.)\\b(new|public|protected|internal|private|abstract|virtual|override|sealed|static|partial|readonly|volatile|const|extern|async|unsafe|ref)\\b"},"string-character-escape":{"name":"constant.character.escape.cs","match":"\\\\(['\"\\\\0abfnrtv]|x[0-9a-fA-F]{1,4}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4})"},"string-literal":{"name":"string.quoted.double.cs","begin":"(?\u003c!@)\"","end":"(\")|((?:[^\\\\\\n])$)","patterns":[{"include":"#string-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.string.end.cs"},"2":{"name":"invalid.illegal.newline.cs"}}},"struct-declaration":{"begin":"(?=\\bstruct\\b)","end":"(?\u003c=\\})","patterns":[{"begin":"(?x)\n(struct)\\b\\s+\n(@?[_[:alpha:]][_[:alnum:]]*)","end":"(?=\\{)","patterns":[{"include":"#comment"},{"include":"#type-parameter-list"},{"include":"#base-types"},{"include":"#generic-constraints"}],"beginCaptures":{"1":{"name":"keyword.other.struct.cs"},"2":{"name":"entity.name.type.struct.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#class-or-struct-members"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},{"include":"#preprocessor"},{"include":"#comment"}]},"switch-expression":{"begin":"(?x) (?\u003c!\\.)\\b(switch)","end":"(?\u003c=\\})","patterns":[{"begin":"\\{","end":"\\}","patterns":[{"include":"#comment"},{"include":"#literal"},{"include":"#switch-var-pattern"},{"include":"#switch-property-expression"},{"include":"#member-access-expression"},{"include":"#switch-pattern"},{"include":"#expression-body"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.switch.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"switch-label":{"patterns":[{"begin":"(?\u003c!\\.)\\b(case)\\b\\s+","end":":","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.case.cs"}},"endCaptures":{"0":{"name":"punctuation.separator.colon.cs"}}},{"match":"(?\u003c!\\.)\\b(default)\\b\\s*(:)","captures":{"1":{"name":"keyword.control.default.cs"},"2":{"name":"punctuation.separator.colon.cs"}}}]},"switch-literal":{"name":"constant.language.null.cs","match":"(?\u003c!\\.)\\bnull\\b","patterns":[{"include":"#comment"},{"include":"#punctuation-comma"},{"include":"#expression-body"}],"beginCaptures":{"1":{"name":"constant.language.null.cs"}}},"switch-pattern":{"begin":"(?x) # e.g. int x OR var x\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\\s+\n(\\g\u003cidentifier\u003e)\\b\\s*","end":"(?==\u003e)","patterns":[{"include":"#comment"},{"include":"#switch-when-clause"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"2":{"name":"entity.name.variable.local.cs"}}},"switch-property-expression":{"begin":"(?x) # e.g. int x OR var x\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)?\\s*\n(\\{)","end":"\\}","patterns":[{"include":"#expression"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}},"switch-statement":{"begin":"(?\u003c!\\.)\\b(switch)\\b\\s*(?=\\()","end":"(?\u003c=\\})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"begin":"\\{","end":"\\}","patterns":[{"include":"#switch-label"},{"include":"#statement"}],"beginCaptures":{"0":{"name":"punctuation.curlybrace.open.cs"}},"endCaptures":{"0":{"name":"punctuation.curlybrace.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.switch.cs"}}},"switch-var-pattern":{"begin":"(?x) # match foreach (var (x, y) in ...)\n(?:\\b(var)\\b\\s*)\n(?\u003ctuple\u003e\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*","end":"(?==\u003e)","patterns":[{"include":"#comment"},{"include":"#switch-when-clause"}],"beginCaptures":{"1":{"name":"keyword.other.var.cs"},"2":{"patterns":[{"include":"#tuple-declaration-deconstruction-element-list"}]}}},"switch-when-clause":{"begin":"(?\u003c!\\.)\\b(when)\\b\\s*(\\()?","end":"(?==\u003e)","patterns":[{"include":"#comment"},{"include":"#expression"},{"include":"#punctuation-comma"},{"match":"\\(","captures":{"0":{"name":"punctuation.parenthesis.open.cs"}}},{"match":"\\)","captures":{"0":{"name":"punctuation.parenthesis.close.cs"}}}],"beginCaptures":{"1":{"name":"keyword.control.try.when.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}}},"this-or-base-expression":{"match":"\\b(?:(base)|(this))\\b","captures":{"1":{"name":"keyword.other.base.cs"},"2":{"name":"keyword.other.this.cs"}}},"throw-expression":{"match":"(?\u003c!\\.)\\b(throw)\\b","captures":{"1":{"name":"keyword.control.flow.throw.cs"}}},"throw-statement":{"begin":"(?\u003c!\\.)\\b(throw)\\b","end":"(?=;)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.throw.cs"}}},"try-block":{"begin":"(?\u003c!\\.)\\b(try)\\b","end":"(?\u003c=\\})","patterns":[{"include":"#comment"},{"include":"#block"}],"beginCaptures":{"1":{"name":"keyword.control.try.cs"}}},"try-statement":{"patterns":[{"include":"#try-block"},{"include":"#catch-clause"},{"include":"#finally-clause"}]},"tuple-declaration-deconstruction-element-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-declaration-deconstruction-element-list"},{"include":"#declaration-expression-tuple"},{"include":"#punctuation-comma"},{"match":"(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"entity.name.variable.tuple-element.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-deconstruction-assignment":{"match":"(?x)\n(?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\\s*\n(?!=\u003e|==)(?==)","captures":{"1":{"patterns":[{"include":"#tuple-deconstruction-element-list"}]}}},"tuple-deconstruction-element-list":{"begin":"\\(","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-deconstruction-element-list"},{"include":"#declaration-expression-tuple"},{"include":"#punctuation-comma"},{"match":"(?x) # e.g. x\n(@?[_[:alpha:]][_[:alnum:]]*)\\b\\s*\n(?=[,)])","captures":{"1":{"name":"variable.other.readwrite.cs"}}}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-element":{"match":"(?x)\n(?\u003ctype_name\u003e\n (?:\n (?:\n (?:(?\u003cidentifier\u003e@?[_[:alpha:]][_[:alnum:]]*)\\s*\\:\\:\\s*)? # alias-qualification\n (?\u003cname_and_type_args\u003e # identifier + type arguments (if any)\n \\g\u003cidentifier\u003e\\s*\n (?\u003ctype_args\u003e\\s*\u003c(?:[^\u003c\u003e]|\\g\u003ctype_args\u003e)+\u003e\\s*)?\n )\n (?:\\s*\\.\\s*\\g\u003cname_and_type_args\u003e)* | # Are there any more names being dotted into?\n (?\u003ctuple\u003e\\s*\\((?:[^\\(\\)]|\\g\u003ctuple\u003e)+\\))\n )\n (?:\\s*\\?\\s*)? # nullable suffix?\n (?:\\s* # array suffix?\n \\[\n (?:\\s*,\\s*)* # commata for multi-dimensional arrays\n \\]\n \\s*\n (?:\\?)? # arrays can be nullable reference types\n \\s*\n )*\n )\n)\n(?:(?\u003ctuple_name\u003e\\g\u003cidentifier\u003e)\\b)?","captures":{"1":{"patterns":[{"include":"#type"}]},"6":{"name":"entity.name.variable.tuple-element.cs"}}},"tuple-literal":{"begin":"(\\()(?=.*[:,])","end":"\\)","patterns":[{"include":"#comment"},{"include":"#tuple-literal-element"},{"include":"#punctuation-comma"}],"beginCaptures":{"1":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"tuple-literal-element":{"begin":"(?x)\n(?:(@?[_[:alpha:]][_[:alnum:]]*)\\s*(:)\\s*)?\n(?![,)])","end":"(?=[,)])","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"entity.name.variable.tuple-element.cs"},"1":{"name":"punctuation.separator.colon.cs"}}},"tuple-type":{"begin":"\\(","end":"\\)","patterns":[{"include":"#tuple-element"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"type":{"name":"meta.type.cs","patterns":[{"include":"#comment"},{"include":"#ref-modifier"},{"include":"#readonly-modifier"},{"include":"#tuple-type"},{"include":"#type-builtin"},{"include":"#type-name"},{"include":"#type-arguments"},{"include":"#type-array-suffix"},{"include":"#type-nullable-suffix"}]},"type-arguments":{"begin":"\u003c","end":"\u003e","patterns":[{"include":"#comment"},{"include":"#type"},{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.cs"}}},"type-array-suffix":{"begin":"\\[","end":"\\]","patterns":[{"include":"#punctuation-comma"}],"beginCaptures":{"0":{"name":"punctuation.squarebracket.open.cs"}},"endCaptures":{"0":{"name":"punctuation.squarebracket.close.cs"}}},"type-builtin":{"match":"\\b(bool|byte|char|decimal|double|float|int|long|object|sbyte|short|string|uint|ulong|ushort|void|dynamic)\\b","captures":{"1":{"name":"keyword.type.cs"}}},"type-declarations":{"patterns":[{"include":"#preprocessor"},{"include":"#comment"},{"include":"#storage-modifier"},{"include":"#class-declaration"},{"include":"#delegate-declaration"},{"include":"#enum-declaration"},{"include":"#interface-declaration"},{"include":"#struct-declaration"},{"include":"#attribute-section"},{"include":"#punctuation-semicolon"}]},"type-name":{"patterns":[{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\:\\:)","captures":{"1":{"name":"entity.name.type.alias.cs"},"2":{"name":"punctuation.separator.coloncolon.cs"}}},{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\s*(\\.)","captures":{"1":{"name":"storage.type.cs"},"2":{"name":"punctuation.accessor.cs"}}},{"match":"(\\.)\\s*(@?[_[:alpha:]][_[:alnum:]]*)","captures":{"1":{"name":"punctuation.accessor.cs"},"2":{"name":"storage.type.cs"}}},{"name":"storage.type.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"}]},"type-nullable-suffix":{"match":"\\?","captures":{"0":{"name":"punctuation.separator.question-mark.cs"}}},"type-parameter-list":{"begin":"\\\u003c","end":"\\\u003e","patterns":[{"match":"\\b(in|out)\\b","captures":{"1":{"name":"storage.modifier.cs"}}},{"match":"(@?[_[:alpha:]][_[:alnum:]]*)\\b","captures":{"1":{"name":"entity.name.type.type-parameter.cs"}}},{"include":"#comment"},{"include":"#punctuation-comma"},{"include":"#attribute-section"}],"beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.cs"}}},"typeof-or-default-expression":{"begin":"(?\u003c!\\.)\\b(?:(typeof)|(default))\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.typeof.cs"},"2":{"name":"keyword.other.default.cs"},"3":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"using-directive":{"patterns":[{"begin":"\\b(using)\\b\\s+(static)\\s+","end":"(?=;)","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"},"2":{"name":"keyword.other.static.cs"}}},{"begin":"\\b(using)\\s+(?=(@?[_[:alpha:]][_[:alnum:]]*)\\s*=)","end":"(?=;)","patterns":[{"include":"#comment"},{"include":"#type"},{"include":"#operator-assignment"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"},"2":{"name":"entity.name.type.alias.cs"}}},{"begin":"\\b(using)\\s*","end":"(?=;)","patterns":[{"include":"#comment"},{"name":"entity.name.type.namespace.cs","match":"@?[_[:alpha:]][_[:alnum:]]*"},{"include":"#operator-assignment"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"}}}]},"using-statement":{"begin":"(?\u003c!\\.)\\b(using)\\b\\s*(?=\\()","end":"(?=\\;|})","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#local-variable-declaration"},{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.other.using.cs"}}},"variable-initializer":{"begin":"(?\u003c!=|!)(=)(?!=|\u003e)","end":"(?=[,\\)\\];}])","patterns":[{"include":"#ref-modifier"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.operator.assignment.cs"}}},"verbatim-interpolated-string":{"name":"string.quoted.double.cs","begin":"(?:\\$@|@\\$)\"","end":"\"(?=[^\"])","patterns":[{"include":"#verbatim-string-character-escape"},{"include":"#interpolation"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"verbatim-string-character-escape":{"name":"constant.character.escape.cs","match":"\"\""},"verbatim-string-literal":{"name":"string.quoted.double.cs","begin":"@\"","end":"\"(?=[^\"])","patterns":[{"include":"#verbatim-string-character-escape"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"when-clause":{"begin":"(?\u003c!\\.)\\b(when)\\b\\s*(\\()","end":"\\)","patterns":[{"include":"#expression"},{"include":"#comment"}],"beginCaptures":{"1":{"name":"keyword.control.try.when.cs"},"2":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},"where-clause":{"begin":"(?x)\n\\b(where)\\b\\s*","end":"(?=;|\\))","patterns":[{"include":"#query-body"},{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.query.where.cs"}}},"while-statement":{"begin":"(?\u003c!\\.)\\b(while)\\b\\s*(?=\\()","end":"(?\u003c=\\})|(?=;)","patterns":[{"begin":"\\(","end":"\\)","patterns":[{"include":"#expression"}],"beginCaptures":{"0":{"name":"punctuation.parenthesis.open.cs"}},"endCaptures":{"0":{"name":"punctuation.parenthesis.close.cs"}}},{"include":"#statement"}],"beginCaptures":{"1":{"name":"keyword.control.loop.while.cs"}}},"xml-attribute":{"patterns":[{"match":"(?x)\n(?:^|\\s+)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)\n(=)","captures":{"1":{"name":"entity.other.attribute-name.cs"},"2":{"name":"entity.other.attribute-name.namespace.cs"},"3":{"name":"punctuation.separator.colon.cs"},"4":{"name":"entity.other.attribute-name.localname.cs"},"5":{"name":"punctuation.separator.equals.cs"}}},{"include":"#xml-string"}]},"xml-cdata":{"name":"string.unquoted.cdata.cs","begin":"\u003c!\\[CDATA\\[","end":"\\]\\]\u003e","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},"xml-character-entity":{"patterns":[{"name":"constant.character.entity.cs","match":"(?x)\n(\u0026)\n(\n (?:[[:alpha:]:_][[:alnum:]:_.-]*)|\n (?:\\#[[:digit:]]+)|\n (?:\\#x[[:xdigit:]]+)\n)\n(;)","captures":{"1":{"name":"punctuation.definition.constant.cs"},"3":{"name":"punctuation.definition.constant.cs"}}},{"name":"invalid.illegal.bad-ampersand.cs","match":"\u0026"}]},"xml-comment":{"name":"comment.block.cs","begin":"\u003c!--","end":"--\u003e","beginCaptures":{"0":{"name":"punctuation.definition.comment.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.comment.cs"}}},"xml-doc-comment":{"patterns":[{"include":"#xml-comment"},{"include":"#xml-character-entity"},{"include":"#xml-cdata"},{"include":"#xml-tag"}]},"xml-string":{"patterns":[{"name":"string.quoted.single.cs","begin":"\\'","end":"\\'","patterns":[{"include":"#xml-character-entity"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}},{"name":"string.quoted.double.cs","begin":"\\\"","end":"\\\"","patterns":[{"include":"#xml-character-entity"}],"beginCaptures":{"0":{"name":"punctuation.definition.string.begin.cs"}},"endCaptures":{"0":{"name":"punctuation.definition.string.end.cs"}}}]},"xml-tag":{"name":"meta.tag.cs","begin":"(?x)\n(\u003c/?)\n(\n (?:\n ([-_[:alnum:]]+)\n (:)\n )?\n ([-_[:alnum:]]+)\n)","end":"(/?\u003e)","patterns":[{"include":"#xml-attribute"}],"beginCaptures":{"1":{"name":"punctuation.definition.tag.cs"},"2":{"name":"entity.name.tag.cs"},"3":{"name":"entity.name.tag.namespace.cs"},"4":{"name":"punctuation.separator.colon.cs"},"5":{"name":"entity.name.tag.localname.cs"}},"endCaptures":{"1":{"name":"punctuation.definition.tag.cs"}}},"yield-break-statement":{"match":"(?\u003c!\\.)\\b(yield)\\b\\s*\\b(break)\\b","captures":{"1":{"name":"keyword.control.flow.yield.cs"},"2":{"name":"keyword.control.flow.break.cs"}}},"yield-return-statement":{"begin":"(?\u003c!\\.)\\b(yield)\\b\\s*\\b(return)\\b","end":"(?=;)","patterns":[{"include":"#expression"}],"beginCaptures":{"1":{"name":"keyword.control.flow.yield.cs"},"2":{"name":"keyword.control.flow.return.cs"}}},"yield-statement":{"patterns":[{"include":"#yield-return-statement"},{"include":"#yield-break-statement"}]}}}