github-linguist 4.8.8 → 4.8.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/grammars/hint.haskell.json +1123 -0
  3. data/grammars/hint.message.haskell.json +1147 -0
  4. data/grammars/hint.type.haskell.json +1120 -0
  5. data/grammars/source.asn.json +59 -0
  6. data/grammars/source.blitzmax.json +0 -2
  7. data/grammars/source.bsl.json +372 -0
  8. data/grammars/source.c++.json +67 -0
  9. data/grammars/source.c2hs.json +27 -0
  10. data/grammars/source.cabal.json +66 -0
  11. data/grammars/source.coffee.json +6 -5
  12. data/grammars/source.crystal.json +0 -11
  13. data/grammars/source.csound-score.json +3 -3
  14. data/grammars/source.csound.json +51 -15
  15. data/grammars/source.css.json +1 -1
  16. data/grammars/source.css.less.json +9 -5
  17. data/grammars/source.cython.json +42 -193
  18. data/grammars/source.d.json +7 -7
  19. data/grammars/source.elixir.json +2 -2
  20. data/grammars/source.forth.json +0 -2
  21. data/grammars/source.graphql.json +8 -2
  22. data/grammars/source.haskell.json +1089 -323
  23. data/grammars/source.hsc2hs.json +12 -0
  24. data/grammars/source.ideal.json +356 -0
  25. data/grammars/source.java.json +3 -0
  26. data/grammars/source.js.json +262 -131
  27. data/grammars/source.js.jsx.json +848 -256
  28. data/grammars/source.lsl.json +51 -103
  29. data/grammars/source.objc.json +1 -1
  30. data/grammars/source.parrot.pir.json +49 -15
  31. data/grammars/source.pic.json +868 -0
  32. data/grammars/source.purescript.json +114 -90
  33. data/grammars/source.python.json +11 -9
  34. data/grammars/source.regexp.babel.json +1 -1
  35. data/grammars/source.renpy.json +7 -7
  36. data/grammars/source.rexx.json +59 -0
  37. data/grammars/source.sas.json +8 -75
  38. data/grammars/source.sdbl.json +97 -0
  39. data/grammars/source.shell.json +1 -0
  40. data/grammars/source.smali.json +2 -2
  41. data/grammars/source.sqf.json +11 -11
  42. data/grammars/source.stan.json +60 -25
  43. data/grammars/source.tla.json +18 -6
  44. data/grammars/source.toc.json +5 -1
  45. data/grammars/source.ts.json +134 -31
  46. data/grammars/source.tsx.json +134 -31
  47. data/grammars/source.vhdl.json +150 -117
  48. data/grammars/source.viml.json +4 -4
  49. data/grammars/source.xquery.json +23 -5
  50. data/grammars/source.yaml.json +35 -19
  51. data/grammars/text.html.handlebars.json +2 -2
  52. data/grammars/text.html.php.blade.json +1 -1
  53. data/grammars/text.html.twig.json +1 -4
  54. data/grammars/text.html.vue.json +41 -1
  55. data/grammars/text.restructuredtext.json +56 -1
  56. data/grammars/text.roff.json +5089 -0
  57. data/grammars/text.runoff.json +321 -0
  58. data/grammars/text.slim.json +126 -105
  59. data/grammars/text.tex.latex.haskell.json +1335 -21
  60. data/lib/linguist/heuristics.rb +8 -0
  61. data/lib/linguist/languages.json +1 -1
  62. data/lib/linguist/languages.yml +58 -3
  63. data/lib/linguist/samples.json +5257 -76
  64. data/lib/linguist/version.rb +1 -1
  65. metadata +16 -4
  66. data/grammars/source.man.json +0 -53
  67. data/grammars/text.groff.json +0 -113
@@ -54,7 +54,7 @@
54
54
  "name": "invalid.deprecated.version.d"
55
55
  }
56
56
  },
57
- "match": "(?x)^\\s*\n\t\t\t\t\t(else\\s+)?(version)\\s*\n\t\t\t\t\t\\(\\s*\n\t\t\t\t\t((DigitalMars|\n\t\t\t\t\tGNU|\n\t\t\t\t\tLDC|\n\t\t\t\t\tSDC|\n\t\t\t\t\tWindows|\n\t\t\t\t\tWin32|\n\t\t\t\t\tWin64|\n\t\t\t\t\tlinux|\n\t\t\t\t\tOSX|\n\t\t\t\t\tFreeBSD|\n\t\t\t\t\tOpenBSD|\n\t\t\t\t\tNetBSD|\n\t\t\t\t\tDragonFlyBSD|\n\t\t\t\t\tBSD|\n\t\t\t\t\tSolaris|\n\t\t\t\t\tPosix|\n\t\t\t\t\tAIX|\n\t\t\t\t\tHaiku|\n\t\t\t\t\tSkyOS|\n\t\t\t\t\tSysV3|\n\t\t\t\t\tSysV4|\n\t\t\t\t\tHurd|\n\t\t\t\t\tAndroid|\n\t\t\t\t\tCygwin|\n\t\t\t\t\tMinGW|\n\t\t\t\t\tFreeStanding|\n\t\t\t\t\tX86|\n\t\t\t\t\tX86_64|\n\t\t\t\t\tARM|\n\t\t\t\t\tARM_Thumb|\n\t\t\t\t\tARM_SoftFloat|\n\t\t\t\t\tARM_SoftFP|\n\t\t\t\t\tARM_HardFloat|\n\t\t\t\t\tAArch64|\n\t\t\t\t\tEpiphany|\n\t\t\t\t\tPPC|\n\t\t\t\t\tPPC_SoftFloat|\n\t\t\t\t\tPPC_HardFloat|\n\t\t\t\t\tPPC64|\n\t\t\t\t\tIA64|\n\t\t\t\t\tMIPS32|\n\t\t\t\t\tMIPS64|\n\t\t\t\t\tMIPS_O32|\n\t\t\t\t\tMIPS_N32|\n\t\t\t\t\tMIPS_O64|\n\t\t\t\t\tMIPS_N64|\n\t\t\t\t\tMIPS_EABI|\n\t\t\t\t\tMIPS_SoftFloat|\n\t\t\t\t\tMIPS_HardFloat|\n\t\t\t\t\tNVPTX|\n\t\t\t\t\tNVPTX64|\n\t\t\t\t\tSPARC|\n\t\t\t\t\tSPARC_V8Plus|\n\t\t\t\t\tSPARC_SoftFloat|\n\t\t\t\t\tSPARC_HardFloat|\n\t\t\t\t\tSPARC64|\n\t\t\t\t\tS390|\n\t\t\t\t\tS390X|\n\t\t\t\t\tHPPA|\n\t\t\t\t\tHPPA64|\n\t\t\t\t\tSH|\n\t\t\t\t\tSH64|\n\t\t\t\t\tAlpha|\n\t\t\t\t\tAlpha_SoftFloat|\n\t\t\t\t\tAlpha_HardFloat|\n\t\t\t\t\tLittleEndian|\n\t\t\t\t\tBigEndian|\n\t\t\t\t\tD_Coverage|\n\t\t\t\t\tD_Ddoc|\n\t\t\t\t\tD_InlineAsm_X86|\n\t\t\t\t\tD_InlineAsm_X86_64|\n\t\t\t\t\tD_LP64|\n\t\t\t\t\tD_X32|\n\t\t\t\t\tD_HardFloat|\n\t\t\t\t\tD_SoftFloat|\n\t\t\t\t\tD_PIC|\n\t\t\t\t\tD_SIMD|\n\t\t\t\t\tD_Version2|\n\t\t\t\t\tD_NoBoundsChecks|\n\t\t\t\t\tunittest|\n\t\t\t\t\tassert|\n\t\t\t\t\tnone|\n\t\t\t\t\tall)|(darwin|Thumb)|([A-Za-z_][A-Za-z0-9_]*))\n\t\t\t\t\t\\s*\\)",
57
+ "match": "(?x)(?<=^|\\}|:)\\s*\n\t\t\t\t\t(else\\s+)?(version)\\s*\n\t\t\t\t\t\\(\\s*\n\t\t\t\t\t((DigitalMars|\n\t\t\t\t\tGNU|\n\t\t\t\t\tLDC|\n\t\t\t\t\tSDC|\n\t\t\t\t\tWindows|\n\t\t\t\t\tWin32|\n\t\t\t\t\tWin64|\n\t\t\t\t\tlinux|\n\t\t\t\t\tOSX|\n\t\t\t\t\tFreeBSD|\n\t\t\t\t\tOpenBSD|\n\t\t\t\t\tNetBSD|\n\t\t\t\t\tDragonFlyBSD|\n\t\t\t\t\tBSD|\n\t\t\t\t\tSolaris|\n\t\t\t\t\tPosix|\n\t\t\t\t\tAIX|\n\t\t\t\t\tHaiku|\n\t\t\t\t\tSkyOS|\n\t\t\t\t\tSysV3|\n\t\t\t\t\tSysV4|\n\t\t\t\t\tHurd|\n\t\t\t\t\tAndroid|\n\t\t\t\t\tCygwin|\n\t\t\t\t\tMinGW|\n\t\t\t\t\tFreeStanding|\n\t\t\t\t\tX86|\n\t\t\t\t\tX86_64|\n\t\t\t\t\tARM|\n\t\t\t\t\tARM_Thumb|\n\t\t\t\t\tARM_SoftFloat|\n\t\t\t\t\tARM_SoftFP|\n\t\t\t\t\tARM_HardFloat|\n\t\t\t\t\tAArch64|\n\t\t\t\t\tEpiphany|\n\t\t\t\t\tPPC|\n\t\t\t\t\tPPC_SoftFloat|\n\t\t\t\t\tPPC_HardFloat|\n\t\t\t\t\tPPC64|\n\t\t\t\t\tIA64|\n\t\t\t\t\tMIPS32|\n\t\t\t\t\tMIPS64|\n\t\t\t\t\tMIPS_O32|\n\t\t\t\t\tMIPS_N32|\n\t\t\t\t\tMIPS_O64|\n\t\t\t\t\tMIPS_N64|\n\t\t\t\t\tMIPS_EABI|\n\t\t\t\t\tMIPS_SoftFloat|\n\t\t\t\t\tMIPS_HardFloat|\n\t\t\t\t\tNVPTX|\n\t\t\t\t\tNVPTX64|\n\t\t\t\t\tSPARC|\n\t\t\t\t\tSPARC_V8Plus|\n\t\t\t\t\tSPARC_SoftFloat|\n\t\t\t\t\tSPARC_HardFloat|\n\t\t\t\t\tSPARC64|\n\t\t\t\t\tS390|\n\t\t\t\t\tS390X|\n\t\t\t\t\tHPPA|\n\t\t\t\t\tHPPA64|\n\t\t\t\t\tSH|\n\t\t\t\t\tSH64|\n\t\t\t\t\tAlpha|\n\t\t\t\t\tAlpha_SoftFloat|\n\t\t\t\t\tAlpha_HardFloat|\n\t\t\t\t\tLittleEndian|\n\t\t\t\t\tBigEndian|\n\t\t\t\t\tD_Coverage|\n\t\t\t\t\tD_Ddoc|\n\t\t\t\t\tD_InlineAsm_X86|\n\t\t\t\t\tD_InlineAsm_X86_64|\n\t\t\t\t\tD_LP64|\n\t\t\t\t\tD_X32|\n\t\t\t\t\tD_HardFloat|\n\t\t\t\t\tD_SoftFloat|\n\t\t\t\t\tD_PIC|\n\t\t\t\t\tD_SIMD|\n\t\t\t\t\tD_Version2|\n\t\t\t\t\tD_NoBoundsChecks|\n\t\t\t\t\tunittest|\n\t\t\t\t\tassert|\n\t\t\t\t\tnone|\n\t\t\t\t\tall)|(darwin|Thumb)|([A-Za-z_][A-Za-z0-9_]*))\n\t\t\t\t\t\\s*\\)",
58
58
  "name": "meta.version.d"
59
59
  },
60
60
  {
@@ -73,7 +73,7 @@
73
73
  "name": "meta.control.conditional.d"
74
74
  },
75
75
  {
76
- "begin": "(?x)^\\s*\n\t\t\t\t\t((?:\\b(public|private|protected|static|final|synchronized|abstract|export|shared)\\b\\s*)*) # modifier\n\t\t\t\t\t(class|interface)\\s+\n\t\t\t\t\t(\\w+)\\s* # identifier\n\t\t\t\t\t(?:\\(\\s*([^\\)]+)\\s*\\)|)\\s* # Template type\n\t\t\t\t\t(?:\n\t\t\t\t\t \\s*(:)\\s*\n\t\t\t\t\t (\\w+)\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t)? # super class\n\t\t\t\t\t",
76
+ "begin": "(?x)(?<=^|\\}|;)\\s*\n\t\t\t\t\t((?:\\b(public|private|protected|static|final|synchronized|abstract|export|shared)\\b\\s*)*) # modifier\n\t\t\t\t\t(class|interface)\\s+\n\t\t\t\t\t(\\w+)\\s* # identifier\n\t\t\t\t\t(?:\\(\\s*([^\\)]+)\\s*\\)|)\\s* # Template type\n\t\t\t\t\t(?:\n\t\t\t\t\t \\s*(:)\\s*\n\t\t\t\t\t (\\w+)\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t (?:\\s*,\\s*(\\w+))?\n\t\t\t\t\t)? # super class\n\t\t\t\t\t",
77
77
  "beginCaptures": {
78
78
  "1": {
79
79
  "name": "storage.modifier.d"
@@ -140,7 +140,7 @@
140
140
  ]
141
141
  },
142
142
  {
143
- "begin": "(?x)^\\s*\n\t\t\t\t\t((?:\\b(public|private|protected|static|final|synchronized|abstract|export|shared)\\b\\s*)*) # modifier\n\t\t\t\t\t(struct)\\s+\n\t\t\t\t\t(\\w+)\\s* # identifier\n\t\t\t\t\t(?:\\(\\s*([^\\)]+)\\s*\\)|)\\s* # Template type\n\t\t\t\t\t",
143
+ "begin": "(?x)(?<=^|\\}|;)\\s*\n\t\t\t\t\t((?:\\b(public|private|protected|static|final|synchronized|abstract|export|shared)\\b\\s*)*) # modifier\n\t\t\t\t\t(struct)\\s+\n\t\t\t\t\t(\\w+)\\s* # identifier\n\t\t\t\t\t(?:\\(\\s*([^\\)]+)\\s*\\)|)\\s* # Template type\n\t\t\t\t\t",
144
144
  "beginCaptures": {
145
145
  "1": {
146
146
  "name": "storage.modifier.d"
@@ -183,7 +183,7 @@
183
183
  ]
184
184
  },
185
185
  {
186
- "begin": "(?x)^\\s*\n\t\t\t\t\t((?:\\b(public|private|protected|static|final|synchronized|abstract|export)\\b\\s*)*) # modifier\n\t\t\t\t\t(\\b(this))\\s* # identifier\n\t\t\t\t\t(?=\\()",
186
+ "begin": "(?x)(?<=^|\\}|;)\\s*\n\t\t\t\t\t((?:\\b(public|private|protected|static|final|synchronized|abstract|export)\\b\\s*)*) # modifier\n\t\t\t\t\t(\\b(this))\\s* # identifier\n\t\t\t\t\t(?=\\()",
187
187
  "captures": {
188
188
  "1": {
189
189
  "name": "storage.modifier.d"
@@ -224,7 +224,7 @@
224
224
  ]
225
225
  },
226
226
  {
227
- "begin": "(?x)^\\s*\n\t\t\t\t\t((?:\\b(?:public|private|protected|static|final|synchronized|abstract|export|override|auto|nothrow|immutable|const|inout|ref|shared)\\b\\s*)*) # modifier\n\t\t\t\t\t(?:(_|\\w[^\"'`\\s]*))\\s+ # return type\n\t\t\t\t\t(\\w+)\\s* # identifier\n\t\t\t\t\t(?=\\()",
227
+ "begin": "(?x)(?<=^|\\}|;)\\s*\n\t\t\t\t\t((?:\\b(?:public|private|protected|static|final|synchronized|abstract|export|override|auto|nothrow|immutable|const|inout|ref|shared)\\b\\s*)*) # modifier\n\t\t\t\t\t(?:(_|\\w[^\"'`\\s]*))\\s+ # return type\n\t\t\t\t\t(\\w+)\\s* # identifier\n\t\t\t\t\t(?=\\()",
228
228
  "beginCaptures": {
229
229
  "1": {
230
230
  "name": "storage.modifier.d"
@@ -252,7 +252,7 @@
252
252
  ]
253
253
  },
254
254
  {
255
- "begin": "(?x)^\\s*\n\t\t\t\t\t(__traits)\n\t\t\t\t\t\\(\n\t\t\t\t\t(isAbstractClass|\n\t\t\t\t\tisArithmetic|\n\t\t\t\t\tisAssociativeArray|\n\t\t\t\t\tisFinalClass|\n\t\t\t\t\tisPOD|\n\t\t\t\t\tisNested|\n\t\t\t\t\tisFloating|\n\t\t\t\t\tisIntegral|\n\t\t\t\t\tisScalar|\n\t\t\t\t\tisStaticArray|\n\t\t\t\t\tisUnsigned|\n\t\t\t\t\tisVirtualFunction|\n\t\t\t\t\tisVirtualMethod|\n\t\t\t\t\tisAbstractFunction|\n\t\t\t\t\tisFinalFunction|\n\t\t\t\t\tisStaticFunction|\n\t\t\t\t\tisOverrideFunction|\n\t\t\t\t\tisRef|\n\t\t\t\t\tisOut|\n\t\t\t\t\tisLazy|\n\t\t\t\t\thasMember|\n\t\t\t\t\tidentifier|\n\t\t\t\t\tgetAliasThis|\n\t\t\t\t\tgetAttributes|\n\t\t\t\t\tgetFunctionAttributes|\n\t\t\t\t\tgetMember|\n\t\t\t\t\tgetOverloads|\n\t\t\t\t\tgetPointerBitmap|\n\t\t\t\t\tgetProtection|\n\t\t\t\t\tgetVirtualFunctions|\n\t\t\t\t\tgetVirtualMethods|\n\t\t\t\t\tgetUnitTests|\n\t\t\t\t\tparent|\n\t\t\t\t\tclassInstanceSize|\n\t\t\t\t\tgetVirtualIndex|\n\t\t\t\t\tallMembers|\n\t\t\t\t\tderivedMembers|\n\t\t\t\t\tisSame|\n\t\t\t\t\tcompiles)\n\t\t\t\t\t,",
255
+ "begin": "(?x)(?<=^|;)\\s*\n\t\t\t\t\t(__traits)\n\t\t\t\t\t\\(\n\t\t\t\t\t(isAbstractClass|\n\t\t\t\t\tisArithmetic|\n\t\t\t\t\tisAssociativeArray|\n\t\t\t\t\tisFinalClass|\n\t\t\t\t\tisPOD|\n\t\t\t\t\tisNested|\n\t\t\t\t\tisFloating|\n\t\t\t\t\tisIntegral|\n\t\t\t\t\tisScalar|\n\t\t\t\t\tisStaticArray|\n\t\t\t\t\tisUnsigned|\n\t\t\t\t\tisVirtualFunction|\n\t\t\t\t\tisVirtualMethod|\n\t\t\t\t\tisAbstractFunction|\n\t\t\t\t\tisFinalFunction|\n\t\t\t\t\tisStaticFunction|\n\t\t\t\t\tisOverrideFunction|\n\t\t\t\t\tisRef|\n\t\t\t\t\tisOut|\n\t\t\t\t\tisLazy|\n\t\t\t\t\thasMember|\n\t\t\t\t\tidentifier|\n\t\t\t\t\tgetAliasThis|\n\t\t\t\t\tgetAttributes|\n\t\t\t\t\tgetFunctionAttributes|\n\t\t\t\t\tgetMember|\n\t\t\t\t\tgetOverloads|\n\t\t\t\t\tgetPointerBitmap|\n\t\t\t\t\tgetProtection|\n\t\t\t\t\tgetVirtualFunctions|\n\t\t\t\t\tgetVirtualMethods|\n\t\t\t\t\tgetUnitTests|\n\t\t\t\t\tparent|\n\t\t\t\t\tclassInstanceSize|\n\t\t\t\t\tgetVirtualIndex|\n\t\t\t\t\tallMembers|\n\t\t\t\t\tderivedMembers|\n\t\t\t\t\tisSame|\n\t\t\t\t\tcompiles)\n\t\t\t\t\t",
256
256
  "beginCaptures": {
257
257
  "1": {
258
258
  "name": "keyword.other.special.d"
@@ -281,7 +281,7 @@
281
281
  "name": "constant.language.external.d"
282
282
  }
283
283
  },
284
- "match": "(extern)(\\s*\\(\\s*(((C\\+\\+)(\\s*,\\s*[A-Za-z_][A-Za-z0-9._]*)?)|(C|D|Windows|Pascal|System))\\s*\\))?",
284
+ "match": "\\b(extern)\\b(\\s*\\(\\s*(((C\\+\\+)(\\s*,\\s*[A-Za-z_][A-Za-z0-9._]*)?)|(C|D|Windows|Pascal|System))\\s*\\))?",
285
285
  "name": "meta.external.d"
286
286
  },
287
287
  {
@@ -326,7 +326,7 @@
326
326
  ]
327
327
  },
328
328
  {
329
- "match": "(?<!\\.)\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super)\\b(?![?!:])",
329
+ "match": "(?<!\\.)\\b(do|end|case|bc|lc|for|if|cond|unless|try|receive|fn|defmodule|defp?|defprotocol|defimpl|defrecord|defstruct|defmacrop?|defdelegate|defcallback|defmacrocallback|defexception|defoverridable|exit|after|rescue|catch|else|raise|throw|import|require|alias|use|quote|unquote|super|with)\\b(?![?!:])",
330
330
  "name": "keyword.control.elixir"
331
331
  },
332
332
  {
@@ -336,7 +336,7 @@
336
336
  },
337
337
  {
338
338
  "match": "\\b[A-Z]\\w*\\b",
339
- "name": "support.type.elixir"
339
+ "name": "entity.name.class.elixir"
340
340
  },
341
341
  {
342
342
  "match": "\\b(nil|true|false)\\b(?![?!])",
@@ -3,8 +3,6 @@
3
3
  "frt",
4
4
  "fs"
5
5
  ],
6
- "foldingStartMarker": "/\\*\\*|\\{\\s*$",
7
- "foldingStopMarker": "\\*\\*/|^\\s*\\}",
8
6
  "keyEquivalent": "^~F",
9
7
  "name": "Forth",
10
8
  "patterns": [
@@ -33,7 +33,7 @@
33
33
  {
34
34
  "name": "meta.operation",
35
35
  "comment": "an operation definition",
36
- "match": "(query|mutation)\\s*([_A-Za-z][_0-9A-Za-z]*)",
36
+ "match": "(query|mutation|subscription)\\s*([_A-Za-z][_0-9A-Za-z]*)",
37
37
  "captures": {
38
38
  "1": {
39
39
  "name": "storage.type"
@@ -96,13 +96,19 @@
96
96
  "match": "[_A-Za-z][_0-9A-Za-z]*"
97
97
  },
98
98
  "fragmentSpread": {
99
- "match": "(\\.\\.\\.)\\s*([_A-Za-z][_0-9A-Za-z]*)\\s*(on)?",
99
+ "match": "(\\.\\.\\.)\\s*([_A-Za-z][_0-9A-Za-z]*)\\s*(on\\s*)?([_A-Za-z][_0-9A-Za-z]*)?",
100
100
  "captures": {
101
101
  "1": {
102
102
  "name": "keyword.operator"
103
103
  },
104
104
  "2": {
105
105
  "name": "variable.other"
106
+ },
107
+ "3": {
108
+ "name": "keyword.operator"
109
+ },
110
+ "4": {
111
+ "name": "support.constant"
106
112
  }
107
113
  }
108
114
  },
@@ -2,448 +2,1214 @@
2
2
  "fileTypes": [
3
3
  "hs"
4
4
  ],
5
- "keyEquivalent": "^~H",
5
+ "firstLineMatch": "^\\#\\!.*\\brunhaskell\\b",
6
6
  "name": "Haskell",
7
- "patterns": [
8
- {
9
- "captures": {
10
- "1": {
11
- "name": "punctuation.definition.entity.haskell"
7
+ "scopeName": "source.haskell",
8
+ "macros": {
9
+ "identStartCharClass": "[\\p{Ll}_\\p{Lu}\\p{Lt}]",
10
+ "identCharClass": "[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']",
11
+ "functionNameOne": "[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
12
+ "classNameOne": "[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
13
+ "functionName": "(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
14
+ "className": "[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*",
15
+ "operatorChar": "[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]",
16
+ "operator": "[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+",
17
+ "operatorFun": "(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))",
18
+ "basicChar": "[\\ -\\[\\]-~]",
19
+ "escapeChar": "\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\"'\\&])",
20
+ "octalChar": "(?:\\\\o[0-7]+)",
21
+ "hexChar": "(?:\\\\x[0-9A-Fa-f]+)",
22
+ "controlChar": "(?:\\^[A-Z@\\[\\]\\\\\\^_])",
23
+ "character": "(?:[\\ -\\[\\]-~]|\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\"'\\&])|(?:\\\\o[0-7]+)|(?:\\\\x[0-9A-Fa-f]+)|(?:\\^[A-Z@\\[\\]\\\\\\^_]))",
24
+ "functionTypeDeclaration": "(?:(?:((?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\)))(?:(?:\\s*,\\s*)(?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))))*))(?:\\s*(::|∷)))",
25
+ "ctorTypeDeclaration": "(?:(?:((?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\)))(?:(?:\\s*,\\s*)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))))*))(?:\\s*(::|∷)))",
26
+ "ctorArgs": "(?!deriving)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:(?!deriving)(?:[\\w()'→⇒\\[\\],]|->|=>)+\\s*)+)",
27
+ "ctor": "(?:(?:(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))([\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*)\\s*)(?:((?:(?!deriving)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:(?!deriving)(?:[\\w()'→⇒\\[\\],]|->|=>)+\\s*)+))(?:(?:\\s+)(?:(?!deriving)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:(?!deriving)(?:[\\w()'→⇒\\[\\],]|->|=>)+\\s*)+)))*)?))",
28
+ "typeDeclOne": "(?:(?!(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))where(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])))(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*))",
29
+ "typeDecl": "(?>(?:(?:(?!(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))where(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])))(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)))(?:\\s+(?:(?!(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))where(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])))(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)))*)",
30
+ "indentChar": "[ \\t]",
31
+ "indentBlockStart": "^([ \\t]*)",
32
+ "indentBlockEnd": "^(?!\\1[ \\t]|[ \\t]*$)",
33
+ "maybeBirdTrack": "^",
34
+ "lb": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))",
35
+ "rb": "(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
36
+ "b": "(?:(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))|(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])))"
37
+ },
38
+ "repository": {
39
+ "block_comment": {
40
+ "patterns": [
41
+ {
42
+ "name": "comment.block.haddock.haskell",
43
+ "begin": "\\{-\\s*[|^]",
44
+ "end": "-\\}",
45
+ "applyEndPatternLast": 1,
46
+ "beginCaptures": {
47
+ "0": {
48
+ "name": "punctuation.definition.comment.haddock.haskell"
49
+ }
50
+ },
51
+ "endCaptures": {
52
+ "0": {
53
+ "name": "punctuation.definition.comment.haddock.haskell"
54
+ }
55
+ },
56
+ "patterns": [
57
+ {
58
+ "include": "#block_comment"
59
+ }
60
+ ]
12
61
  },
13
- "2": {
14
- "name": "punctuation.definition.entity.haskell"
62
+ {
63
+ "name": "comment.block.haskell",
64
+ "begin": "\\{-",
65
+ "end": "-\\}",
66
+ "applyEndPatternLast": 1,
67
+ "beginCaptures": {
68
+ "0": {
69
+ "name": "punctuation.definition.comment.block.start.haskell"
70
+ }
71
+ },
72
+ "endCaptures": {
73
+ "0": {
74
+ "name": "punctuation.definition.comment.block.end.haskell"
75
+ }
76
+ },
77
+ "patterns": [
78
+ {
79
+ "include": "#block_comment"
80
+ }
81
+ ]
15
82
  }
16
- },
17
- "comment": "In case this regex seems unusual for an infix operator, note that Haskell allows any ordinary function application (elem 4 [1..10]) to be rewritten as an infix expression (4 `elem` [1..10]).",
18
- "match": "(`)[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(`)",
19
- "name": "keyword.operator.function.infix.haskell"
20
- },
21
- {
22
- "match": "\\(\\)",
23
- "name": "constant.language.unit.haskell"
24
- },
25
- {
26
- "match": "\\[\\]",
27
- "name": "constant.language.empty-list.haskell"
83
+ ]
28
84
  },
29
- {
30
- "begin": "\\b(module)\\b",
31
- "beginCaptures": {
32
- "1": {
33
- "name": "keyword.other.haskell"
34
- }
35
- },
36
- "end": "\\b(where)\\b",
37
- "endCaptures": {
38
- "1": {
39
- "name": "keyword.other.haskell"
40
- }
41
- },
42
- "name": "meta.declaration.module.haskell",
85
+ "comments": {
43
86
  "patterns": [
44
87
  {
45
- "include": "#module_name"
88
+ "begin": "(^[ \\t]+)?(?=--+\\s+[|^])",
89
+ "end": "(?!\\G)",
90
+ "beginCaptures": {
91
+ "1": {
92
+ "name": "punctuation.whitespace.comment.leading.haskell"
93
+ }
94
+ },
95
+ "patterns": [
96
+ {
97
+ "name": "comment.line.double-dash.haddock.haskell",
98
+ "begin": "(--+)\\s+([|^])",
99
+ "end": "\\n",
100
+ "beginCaptures": {
101
+ "1": {
102
+ "name": "punctuation.definition.comment.haskell"
103
+ },
104
+ "2": {
105
+ "name": "punctuation.definition.comment.haddock.haskell"
106
+ }
107
+ }
108
+ }
109
+ ]
46
110
  },
47
111
  {
48
- "include": "#module_exports"
112
+ "begin": "(^[ \\t]+)?(?=--+(?![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]))",
113
+ "end": "(?!\\G)",
114
+ "beginCaptures": {
115
+ "1": {
116
+ "name": "punctuation.whitespace.comment.leading.haskell"
117
+ }
118
+ },
119
+ "patterns": [
120
+ {
121
+ "name": "comment.line.double-dash.haskell",
122
+ "begin": "--",
123
+ "end": "\\n",
124
+ "beginCaptures": {
125
+ "0": {
126
+ "name": "punctuation.definition.comment.haskell"
127
+ }
128
+ }
129
+ }
130
+ ]
49
131
  },
50
132
  {
51
- "match": "[a-z]+",
52
- "name": "invalid"
133
+ "include": "#block_comment"
53
134
  }
54
135
  ]
55
136
  },
56
- {
57
- "begin": "\\b(class)\\b",
58
- "beginCaptures": {
59
- "1": {
60
- "name": "keyword.other.haskell"
61
- }
62
- },
63
- "end": "\\b(where)\\b",
64
- "endCaptures": {
65
- "1": {
66
- "name": "keyword.other.haskell"
67
- }
68
- },
69
- "name": "meta.declaration.class.haskell",
137
+ "characters": {
70
138
  "patterns": [
71
139
  {
72
- "match": "\\b(Monad|Functor|Eq|Ord|Read|Show|Num|(Frac|Ra)tional|Enum|Bounded|Real(Frac|Float)?|Integral|Floating)\\b",
73
- "name": "support.class.prelude.haskell"
140
+ "match": "\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\"'\\&])",
141
+ "name": "constant.character.escape.haskell"
142
+ },
143
+ {
144
+ "match": "(?:\\\\o[0-7]+)",
145
+ "name": "constant.character.escape.octal.haskell"
74
146
  },
75
147
  {
76
- "match": "[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
77
- "name": "entity.other.inherited-class.haskell"
148
+ "match": "(?:\\\\x[0-9A-Fa-f]+)",
149
+ "name": "constant.character.escape.hexadecimal.haskell"
78
150
  },
79
151
  {
80
- "match": "\\b[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
81
- "name": "variable.other.generic-type.haskell"
152
+ "match": "(?:\\^[A-Z@\\[\\]\\\\\\^_])",
153
+ "name": "constant.character.escape.control.haskell"
82
154
  }
83
155
  ]
84
156
  },
85
- {
86
- "begin": "\\b(instance)\\b",
87
- "beginCaptures": {
88
- "1": {
89
- "name": "keyword.other.haskell"
90
- }
91
- },
92
- "end": "\\b(where)\\b|$",
93
- "endCaptures": {
94
- "1": {
95
- "name": "keyword.other.haskell"
96
- }
97
- },
98
- "name": "meta.declaration.instance.haskell",
157
+ "infix_op": {
99
158
  "patterns": [
100
159
  {
101
- "include": "#type_signature"
160
+ "name": "entity.name.function.infix.haskell",
161
+ "match": "(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))"
102
162
  }
103
163
  ]
104
164
  },
105
- {
106
- "begin": "\\b(import)\\b",
107
- "beginCaptures": {
108
- "1": {
109
- "name": "keyword.other.haskell"
110
- }
111
- },
112
- "end": "($|;|(?=--))",
113
- "name": "meta.import.haskell",
165
+ "module_exports": {
114
166
  "patterns": [
115
167
  {
116
- "match": "(qualified|as|hiding)",
117
- "name": "keyword.other.haskell"
118
- },
119
- {
120
- "include": "#module_name"
121
- },
122
- {
123
- "include": "#module_exports"
168
+ "name": "meta.declaration.exports.haskell",
169
+ "begin": "\\(",
170
+ "end": "\\)",
171
+ "patterns": [
172
+ {
173
+ "include": "#comments"
174
+ },
175
+ {
176
+ "include": "#function_name"
177
+ },
178
+ {
179
+ "include": "#type_name"
180
+ },
181
+ {
182
+ "include": "#comma"
183
+ },
184
+ {
185
+ "name": "meta.other.constructor-list.haskell",
186
+ "begin": "(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))\\s*\\(",
187
+ "end": "\\)",
188
+ "patterns": [
189
+ {
190
+ "include": "#type_ctor"
191
+ },
192
+ {
193
+ "include": "#attribute_name"
194
+ },
195
+ {
196
+ "include": "#comma"
197
+ },
198
+ {
199
+ "match": "\\.\\.",
200
+ "name": "keyword.operator.wildcard.haskell"
201
+ }
202
+ ]
203
+ },
204
+ {
205
+ "include": "#infix_op"
206
+ }
207
+ ]
124
208
  }
125
209
  ]
126
210
  },
127
- {
128
- "begin": "(deriving)\\s*\\(",
129
- "beginCaptures": {
130
- "1": {
131
- "name": "keyword.other.haskell"
132
- }
133
- },
134
- "end": "\\)",
135
- "name": "meta.deriving.haskell",
211
+ "module_name": {
136
212
  "patterns": [
137
213
  {
138
- "match": "\\b[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
139
- "name": "entity.other.inherited-class.haskell"
214
+ "name": "support.other.module.haskell",
215
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
140
216
  }
141
217
  ]
142
218
  },
143
- {
144
- "match": "\\b(deriving|where|data|type|case|of|let|in|newtype|default)\\b",
145
- "name": "keyword.other.haskell"
146
- },
147
- {
148
- "match": "\\binfix[lr]?\\b",
149
- "name": "keyword.operator.haskell"
150
- },
151
- {
152
- "match": "\\b(do|if|then|else)\\b",
153
- "name": "keyword.control.haskell"
154
- },
155
- {
156
- "comment": "Floats are always decimal",
157
- "match": "\\b([0-9]+\\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\\b",
158
- "name": "constant.numeric.float.haskell"
159
- },
160
- {
161
- "match": "\\b([0-9]+|0([xX][0-9a-fA-F]+|[oO][0-7]+))\\b",
162
- "name": "constant.numeric.haskell"
163
- },
164
- {
165
- "captures": {
166
- "1": {
167
- "name": "punctuation.definition.preprocessor.c"
219
+ "module_name_prefix": {
220
+ "patterns": [
221
+ {
222
+ "name": "support.other.module.haskell",
223
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\."
168
224
  }
169
- },
170
- "comment": "In addition to Haskell's \"native\" syntax, GHC permits the C preprocessor to be run on a source file.",
171
- "match": "^\\s*(#)\\s*\\w+",
172
- "name": "meta.preprocessor.c"
173
- },
174
- {
175
- "include": "#pragma"
225
+ ]
176
226
  },
177
- {
178
- "begin": "\"",
179
- "beginCaptures": {
180
- "0": {
181
- "name": "punctuation.definition.string.begin.haskell"
182
- }
183
- },
184
- "end": "\"",
185
- "endCaptures": {
186
- "0": {
187
- "name": "punctuation.definition.string.end.haskell"
188
- }
189
- },
190
- "name": "string.quoted.double.haskell",
227
+ "pragma": {
191
228
  "patterns": [
192
229
  {
193
- "match": "\\\\(NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\"'\\&])",
194
- "name": "constant.character.escape.haskell"
195
- },
196
- {
197
- "match": "\\\\o[0-7]+|\\\\x[0-9A-Fa-f]+|\\\\[0-9]+",
198
- "name": "constant.character.escape.octal.haskell"
199
- },
200
- {
201
- "match": "\\^[A-Z@\\[\\]\\\\\\^_]",
202
- "name": "constant.character.escape.control.haskell"
203
- },
204
- {
205
- "begin": "\\\\\\s",
206
- "beginCaptures": {
207
- "0": {
208
- "name": "constant.character.escape.begin.haskell"
209
- }
210
- },
211
- "end": "\\\\",
212
- "endCaptures": {
213
- "0": {
214
- "name": "constant.character.escape.end.haskell"
215
- }
216
- },
230
+ "name": "meta.preprocessor.haskell",
231
+ "begin": "\\{-#",
232
+ "end": "#-\\}",
217
233
  "patterns": [
218
234
  {
219
- "match": "\\S+",
220
- "name": "invalid.illegal.character-not-allowed-here.haskell"
235
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(NOTINLINE CONSTRUCTORLIKE|NOINLINE CONSTRUCTORLIKE|INLINE CONSTRUCTORLIKE|SPECIALISE NOTINLINE|SPECIALIZE NOTINLINE|SPECIALISE NOINLINE|SPECIALIZE NOINLINE|NOTINLINE CONLIKE|SPECIALISE INLINE|SPECIALIZE INLINE|NOINLINE CONLIKE|VECTORISE SCALAR|VECTORIZE SCALAR|OPTIONS_HADDOCK|INLINE CONLIKE|OPTIONS_DERIVE|OPTIONS_CATCH|OPTIONS_NHC98|OPTIONS_HUGS|OVERLAPPABLE|NOVECTORISE|NOVECTORIZE|OPTIONS_GHC|OPTIONS_JHC|OPTIONS_YHC|OVERLAPPING|DEPRECATED|INCOHERENT|INLINEABLE|SPECIALISE|SPECIALIZE|GENERATED|INLINABLE|NOTINLINE|VECTORISE|VECTORIZE|CONTRACT|LANGUAGE|NOINLINE|NOUNPACK|OVERLAPS|INCLUDE|MINIMAL|OPTIONS|WARNING|CFILES|INLINE|SOURCE|UNPACK|CTYPE|RULES|CORE|LINE|ANN|SCC)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
236
+ "name": "keyword.other.preprocessor.haskell"
221
237
  }
222
238
  ]
223
239
  }
224
240
  ]
225
241
  },
226
- {
227
- "captures": {
228
- "1": {
229
- "name": "punctuation.definition.string.begin.haskell"
230
- },
231
- "2": {
232
- "name": "constant.character.escape.haskell"
233
- },
234
- "3": {
235
- "name": "constant.character.escape.octal.haskell"
236
- },
237
- "4": {
238
- "name": "constant.character.escape.hexadecimal.haskell"
239
- },
240
- "5": {
241
- "name": "constant.character.escape.control.haskell"
242
- },
243
- "6": {
244
- "name": "punctuation.definition.string.end.haskell"
245
- }
246
- },
247
- "match": "(?x)\n\t\t\t(')\n\t\t\t(?:\n\t\t\t\t[\\ -\\[\\]-~]\t\t\t\t\t\t\t\t# Basic Char\n\t\t\t | (\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE\n\t\t\t\t\t|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS\n\t\t\t\t\t|US|SP|DEL|[abfnrtv\\\\\\\"'\\&]))\t\t# Escapes\n\t\t\t | (\\\\o[0-7]+)\t\t\t\t\t\t\t\t# Octal Escapes\n\t\t\t | (\\\\x[0-9A-Fa-f]+)\t\t\t\t\t\t# Hexadecimal Escapes\n\t\t\t | (\\^[A-Z@\\[\\]\\\\\\^_])\t\t\t\t\t\t# Control Chars\n\t\t\t)\n\t\t\t(')\n\t\t\t",
248
- "name": "string.quoted.single.haskell"
249
- },
250
- {
251
- "begin": "^\\s*(?<fn>(?:[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|\\((?!--+\\))((?![(),;\\[\\]`{}_\"'])[\\p{S}\\p{P}])+\\))(?:\\s*,\\s*\\g<fn>)?)\\s*(::)",
252
- "beginCaptures": {
253
- "1": {
254
- "patterns": [
255
- {
256
- "match": "[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
257
- "name": "entity.name.function.haskell"
242
+ "function_type_declaration": {
243
+ "patterns": [
244
+ {
245
+ "name": "meta.function.type-declaration.haskell",
246
+ "begin": "^([ \\t]*)(?:(?:((?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\)))(?:(?:\\s*,\\s*)(?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))))*))(?:\\s*(::|∷)))",
247
+ "end": "^(?!\\1[ \\t]|[ \\t]*$)",
248
+ "contentName": "meta.type-signature.haskell",
249
+ "beginCaptures": {
250
+ "2": {
251
+ "patterns": [
252
+ {
253
+ "include": "#function_name"
254
+ },
255
+ {
256
+ "include": "#infix_op"
257
+ }
258
+ ]
258
259
  },
260
+ "3": {
261
+ "name": "keyword.other.double-colon.haskell"
262
+ }
263
+ },
264
+ "patterns": [
259
265
  {
260
- "include": "#infix_op"
266
+ "include": "#type_signature"
261
267
  }
262
268
  ]
263
- },
264
- "2": {
265
- "name": "keyword.other.double-colon.haskell"
266
- }
267
- },
268
- "end": "$\\n?",
269
- "name": "meta.function.type-declaration.haskell",
270
- "patterns": [
271
- {
272
- "include": "#type_signature"
273
269
  }
274
270
  ]
275
271
  },
276
- {
277
- "match": "\\b(Just|Nothing|Left|Right|True|False|LT|EQ|GT|\\(\\)|\\[\\])\\b",
278
- "name": "support.constant.haskell"
279
- },
280
- {
281
- "match": "\\b[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
282
- "name": "constant.other.haskell"
283
- },
284
- {
285
- "include": "#comments"
286
- },
287
- {
288
- "match": "\\b(abs|acos|acosh|all|and|any|appendFile|applyM|asTypeOf|asin|asinh|atan|atan2|atanh|break|catch|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\\b(?!')",
289
- "name": "support.function.prelude.haskell"
290
- },
291
- {
292
- "include": "#infix_op"
293
- },
294
- {
295
- "comment": "In case this regex seems overly general, note that Haskell permits the definition of new operators which can be nearly any string of punctuation characters, such as $%^&*.",
296
- "match": "((?![(),;\\[\\]`{}_\"'])[\\p{S}\\p{P}])+",
297
- "name": "keyword.operator.haskell"
298
- },
299
- {
300
- "match": ",",
301
- "name": "punctuation.separator.comma.haskell"
302
- }
303
- ],
304
- "repository": {
305
- "block_comment": {
306
- "applyEndPatternLast": 1,
307
- "begin": "\\{-(?!#)",
308
- "captures": {
309
- "0": {
310
- "name": "punctuation.definition.comment.haskell"
311
- }
312
- },
313
- "end": "-\\}",
314
- "name": "comment.block.haskell",
272
+ "ctor_type_declaration": {
315
273
  "patterns": [
316
274
  {
317
- "include": "#block_comment"
275
+ "name": "meta.ctor.type-declaration.haskell",
276
+ "begin": "^([ \\t]*)(?:(?:((?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\)))(?:(?:\\s*,\\s*)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))))*))(?:\\s*(::|∷)))",
277
+ "end": "^(?!\\1[ \\t]|[ \\t]*$)",
278
+ "contentName": "meta.type-signature.haskell",
279
+ "beginCaptures": {
280
+ "2": {
281
+ "patterns": [
282
+ {
283
+ "include": "#type_ctor"
284
+ },
285
+ {
286
+ "include": "#infix_op"
287
+ }
288
+ ]
289
+ },
290
+ "3": {
291
+ "name": "keyword.other.double-colon.haskell"
292
+ }
293
+ },
294
+ "patterns": [
295
+ {
296
+ "include": "#type_signature"
297
+ }
298
+ ]
318
299
  }
319
300
  ]
320
301
  },
321
- "comments": {
302
+ "record_field_declaration": {
322
303
  "patterns": [
323
304
  {
324
- "begin": "(^[ \\t]+)?(?=--+((?![\\p{S}\\p{P}])|[(),;\\[\\]`{}_\"']))",
305
+ "name": "meta.record-field.type-declaration.haskell",
306
+ "begin": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(?:(?:((?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\)))(?:(?:\\s*,\\s*)(?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))))*))(?:\\s*(::|∷)))",
307
+ "end": "(?=(?:(?:((?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\)))(?:(?:\\s*,\\s*)(?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))))*))(?:\\s*(::|∷)))|})",
308
+ "contentName": "meta.type-signature.haskell",
325
309
  "beginCaptures": {
326
310
  "1": {
327
- "name": "punctuation.whitespace.comment.leading.haskell"
311
+ "patterns": [
312
+ {
313
+ "include": "#attribute_name"
314
+ },
315
+ {
316
+ "include": "#infix_op"
317
+ }
318
+ ]
319
+ },
320
+ "2": {
321
+ "name": "keyword.other.double-colon.haskell"
328
322
  }
329
323
  },
330
- "comment": "Operators may begin with '--' as long as they are not entirely composed of '-' characters. This means comments can't be immediately followed by an allowable operator character.",
331
- "end": "(?!\\G)",
332
324
  "patterns": [
333
325
  {
334
- "begin": "--",
335
- "beginCaptures": {
336
- "0": {
337
- "name": "punctuation.definition.comment.haskell"
338
- }
339
- },
340
- "end": "\\n",
341
- "name": "comment.line.double-dash.haskell"
326
+ "include": "#type_signature"
342
327
  }
343
328
  ]
344
- },
345
- {
346
- "include": "#block_comment"
347
329
  }
348
330
  ]
349
331
  },
350
- "infix_op": {
351
- "comment": "An operator cannot be composed entirely of '-' characters; instead, it should be matched as a comment.",
352
- "match": "(\\((?!--+\\))((?![(),;\\[\\]`{}_\"'])[\\p{S}\\p{P}])+\\)|\\(,+\\))",
353
- "name": "entity.name.function.infix.haskell"
354
- },
355
- "module_exports": {
356
- "begin": "\\(",
357
- "end": "\\)",
358
- "name": "meta.declaration.exports.haskell",
332
+ "type_signature": {
359
333
  "patterns": [
360
334
  {
361
- "match": "\\b[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
362
- "name": "entity.name.function.haskell"
335
+ "include": "#pragma"
336
+ },
337
+ {
338
+ "include": "#comments"
339
+ },
340
+ {
341
+ "name": "keyword.other.forall.haskell",
342
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))forall(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
343
+ },
344
+ {
345
+ "include": "#unit"
363
346
  },
364
347
  {
365
- "match": "\\b[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
366
- "name": "storage.type.haskell"
348
+ "include": "#empty_list"
367
349
  },
368
350
  {
369
- "match": ",",
370
- "name": "punctuation.separator.comma.haskell"
351
+ "name": "keyword.other.arrow.haskell",
352
+ "match": "(?<![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])(->|→)(?![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])"
371
353
  },
372
354
  {
373
- "include": "#infix_op"
355
+ "name": "keyword.other.big-arrow.haskell",
356
+ "match": "(?<![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])(=>|⇒)(?![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])"
374
357
  },
375
358
  {
376
- "comment": "So named because I don't know what to call this.",
377
- "match": "\\(.*?\\)",
378
- "name": "meta.other.unknown.haskell"
359
+ "include": "#operator"
360
+ },
361
+ {
362
+ "name": "variable.other.generic-type.haskell",
363
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
364
+ },
365
+ {
366
+ "include": "#type_name"
379
367
  }
380
368
  ]
381
369
  },
382
- "module_name": {
383
- "match": "(?<conid>[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(\\.\\g<conid>)?)",
384
- "name": "support.other.module.haskell"
385
- },
386
- "pragma": {
387
- "begin": "\\{-#",
388
- "end": "#-\\}",
389
- "name": "meta.preprocessor.haskell",
370
+ "unit": {
390
371
  "patterns": [
391
372
  {
392
- "match": "\\b(LANGUAGE|UNPACK|INLINE)\\b",
393
- "name": "keyword.other.preprocessor.haskell"
373
+ "name": "constant.language.unit.haskell",
374
+ "match": "\\(\\)"
394
375
  }
395
376
  ]
396
377
  },
397
- "type_signature": {
378
+ "empty_list": {
398
379
  "patterns": [
399
380
  {
381
+ "name": "constant.language.empty-list.haskell",
382
+ "match": "\\[\\]"
383
+ }
384
+ ]
385
+ },
386
+ "deriving": {
387
+ "patterns": [
388
+ {
389
+ "include": "#deriving_list"
390
+ },
391
+ {
392
+ "include": "#deriving_simple"
393
+ },
394
+ {
395
+ "include": "#deriving_keyword"
396
+ }
397
+ ]
398
+ },
399
+ "deriving_keyword": {
400
+ "patterns": [
401
+ {
402
+ "name": "meta.deriving.haskell",
403
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(deriving)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
404
+ "captures": {
405
+ "1": {
406
+ "name": "keyword.other.haskell"
407
+ }
408
+ }
409
+ }
410
+ ]
411
+ },
412
+ "deriving_list": {
413
+ "patterns": [
414
+ {
415
+ "name": "meta.deriving.haskell",
416
+ "begin": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(deriving)\\s*\\(",
417
+ "end": "\\)",
418
+ "beginCaptures": {
419
+ "1": {
420
+ "name": "keyword.other.haskell"
421
+ }
422
+ },
423
+ "patterns": [
424
+ {
425
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))([\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
426
+ "captures": {
427
+ "1": {
428
+ "name": "entity.other.inherited-class.haskell"
429
+ }
430
+ }
431
+ }
432
+ ]
433
+ }
434
+ ]
435
+ },
436
+ "deriving_simple": {
437
+ "patterns": [
438
+ {
439
+ "name": "meta.deriving.haskell",
440
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(deriving)\\s*([\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
400
441
  "captures": {
401
442
  "1": {
443
+ "name": "keyword.other.haskell"
444
+ },
445
+ "2": {
402
446
  "name": "entity.other.inherited-class.haskell"
447
+ }
448
+ }
449
+ }
450
+ ]
451
+ },
452
+ "infix_function": {
453
+ "patterns": [
454
+ {
455
+ "name": "keyword.operator.function.infix.haskell",
456
+ "match": "(`)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(`)",
457
+ "captures": {
458
+ "1": {
459
+ "name": "punctuation.definition.entity.haskell"
460
+ },
461
+ "2": {
462
+ "name": "punctuation.definition.entity.haskell"
463
+ }
464
+ }
465
+ }
466
+ ]
467
+ },
468
+ "quasi_quotes": {
469
+ "patterns": [
470
+ {
471
+ "begin": "(\\[)([\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)(\\|)",
472
+ "end": "(\\|)(\\])",
473
+ "beginCaptures": {
474
+ "1": {
475
+ "name": "punctuation.definition.quasiquotes.begin.haskell"
476
+ },
477
+ "2": {
478
+ "name": "entity.name.tag.haskell"
479
+ }
480
+ },
481
+ "endCaptures": {
482
+ "2": {
483
+ "name": "punctuation.definition.quasiquotes.end.haskell"
484
+ }
485
+ },
486
+ "contentName": "string.quoted.quasiquotes.haskell"
487
+ }
488
+ ]
489
+ },
490
+ "module_decl": {
491
+ "patterns": [
492
+ {
493
+ "name": "meta.declaration.module.haskell",
494
+ "begin": "^([ \\t]*)(module)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
495
+ "end": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(where)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
496
+ "beginCaptures": {
497
+ "2": {
498
+ "name": "keyword.other.haskell"
499
+ }
500
+ },
501
+ "endCaptures": {
502
+ "1": {
503
+ "name": "keyword.other.haskell"
504
+ }
505
+ },
506
+ "patterns": [
507
+ {
508
+ "include": "#comments"
509
+ },
510
+ {
511
+ "include": "#module_name"
512
+ },
513
+ {
514
+ "include": "#module_exports"
515
+ },
516
+ {
517
+ "include": "#invalid"
518
+ }
519
+ ]
520
+ }
521
+ ]
522
+ },
523
+ "class_decl": {
524
+ "patterns": [
525
+ {
526
+ "name": "meta.declaration.class.haskell",
527
+ "begin": "^([ \\t]*)(class)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
528
+ "end": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(where)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))|$",
529
+ "beginCaptures": {
530
+ "2": {
531
+ "name": "storage.type.class.haskell"
532
+ }
533
+ },
534
+ "endCaptures": {
535
+ "1": {
536
+ "name": "keyword.other.haskell"
537
+ }
538
+ },
539
+ "patterns": [
540
+ {
541
+ "include": "#type_signature"
542
+ }
543
+ ]
544
+ }
545
+ ]
546
+ },
547
+ "instance_decl": {
548
+ "patterns": [
549
+ {
550
+ "name": "meta.declaration.instance.haskell",
551
+ "begin": "^([ \\t]*)(instance)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
552
+ "end": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(where)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))|$",
553
+ "contentName": "meta.type-signature.haskell",
554
+ "beginCaptures": {
555
+ "2": {
556
+ "name": "keyword.other.haskell"
557
+ }
558
+ },
559
+ "endCaptures": {
560
+ "1": {
561
+ "name": "keyword.other.haskell"
562
+ }
563
+ },
564
+ "patterns": [
565
+ {
566
+ "include": "#pragma"
403
567
  },
568
+ {
569
+ "include": "#type_signature"
570
+ }
571
+ ]
572
+ }
573
+ ]
574
+ },
575
+ "foreign_import": {
576
+ "patterns": [
577
+ {
578
+ "name": "meta.foreign.haskell",
579
+ "begin": "^([ \\t]*)(foreign)\\s+(import|export)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
580
+ "end": "^(?!\\1[ \\t]|[ \\t]*$)",
581
+ "beginCaptures": {
404
582
  "2": {
405
- "name": "variable.other.generic-type.haskell"
583
+ "name": "keyword.other.haskell"
406
584
  },
407
585
  "3": {
408
- "name": "keyword.other.big-arrow.haskell"
586
+ "name": "keyword.other.haskell"
409
587
  }
410
588
  },
411
- "match": "\\(\\s*([\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)\\s+([\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)\\)\\s*(=>)",
412
- "name": "meta.class-constraint.haskell"
413
- },
589
+ "patterns": [
590
+ {
591
+ "match": "(?:un)?safe",
592
+ "captures": {
593
+ "0": {
594
+ "name": "keyword.other.haskell"
595
+ }
596
+ }
597
+ },
598
+ {
599
+ "include": "$self"
600
+ }
601
+ ]
602
+ }
603
+ ]
604
+ },
605
+ "regular_import": {
606
+ "patterns": [
414
607
  {
415
- "include": "#pragma"
608
+ "name": "meta.import.haskell",
609
+ "begin": "^([ \\t]*)(import)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
610
+ "end": "^(?!\\1[ \\t]|[ \\t]*$)",
611
+ "beginCaptures": {
612
+ "2": {
613
+ "name": "keyword.other.haskell"
614
+ }
615
+ },
616
+ "patterns": [
617
+ {
618
+ "include": "#module_name"
619
+ },
620
+ {
621
+ "include": "#module_exports"
622
+ },
623
+ {
624
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(qualified|as|hiding)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
625
+ "captures": {
626
+ "1": {
627
+ "name": "keyword.other.haskell"
628
+ }
629
+ }
630
+ }
631
+ ]
632
+ }
633
+ ]
634
+ },
635
+ "data_decl": {
636
+ "patterns": [
637
+ {
638
+ "name": "meta.declaration.type.data.haskell",
639
+ "begin": "^([ \\t]*)(data|newtype)\\s+((?:(?!=|where).)*)",
640
+ "end": "^(?!\\1[ \\t]|[ \\t]*$)",
641
+ "beginCaptures": {
642
+ "2": {
643
+ "name": "storage.type.data.haskell"
644
+ },
645
+ "3": {
646
+ "name": "meta.type-signature.haskell",
647
+ "patterns": [
648
+ {
649
+ "include": "#family_and_instance"
650
+ },
651
+ {
652
+ "include": "#type_signature"
653
+ }
654
+ ]
655
+ }
656
+ },
657
+ "patterns": [
658
+ {
659
+ "include": "#comments"
660
+ },
661
+ {
662
+ "include": "#where"
663
+ },
664
+ {
665
+ "include": "#deriving"
666
+ },
667
+ {
668
+ "include": "#assignment_op"
669
+ },
670
+ {
671
+ "match": "(?:(?:(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))([\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*)\\s*)(?:((?:(?!deriving)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:(?!deriving)(?:[\\w()'→⇒\\[\\],]|->|=>)+\\s*)+))(?:(?:\\s+)(?:(?!deriving)(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*|(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:(?!deriving)(?:[\\w()'→⇒\\[\\],]|->|=>)+\\s*)+)))*)?))",
672
+ "captures": {
673
+ "1": {
674
+ "patterns": [
675
+ {
676
+ "include": "#type_ctor"
677
+ }
678
+ ]
679
+ },
680
+ "2": {
681
+ "name": "meta.type-signature.haskell",
682
+ "patterns": [
683
+ {
684
+ "include": "#type_signature"
685
+ }
686
+ ]
687
+ }
688
+ }
689
+ },
690
+ {
691
+ "match": "\\|",
692
+ "captures": {
693
+ "0": {
694
+ "name": "punctuation.separator.pipe.haskell"
695
+ }
696
+ }
697
+ },
698
+ {
699
+ "name": "meta.declaration.type.data.record.block.haskell",
700
+ "begin": "\\{",
701
+ "beginCaptures": {
702
+ "0": {
703
+ "name": "keyword.operator.record.begin.haskell"
704
+ }
705
+ },
706
+ "end": "\\}",
707
+ "endCaptures": {
708
+ "0": {
709
+ "name": "keyword.operator.record.end.haskell"
710
+ }
711
+ },
712
+ "patterns": [
713
+ {
714
+ "include": "#comments"
715
+ },
716
+ {
717
+ "include": "#comma"
718
+ },
719
+ {
720
+ "include": "#record_field_declaration"
721
+ }
722
+ ]
723
+ },
724
+ {
725
+ "include": "#ctor_type_declaration"
726
+ }
727
+ ]
728
+ }
729
+ ]
730
+ },
731
+ "type_alias": {
732
+ "patterns": [
733
+ {
734
+ "name": "meta.declaration.type.type.haskell",
735
+ "begin": "^([ \\t]*)(type)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
736
+ "end": "^(?!\\1[ \\t]|[ \\t]*$)",
737
+ "contentName": "meta.type-signature.haskell",
738
+ "beginCaptures": {
739
+ "2": {
740
+ "name": "storage.type.data.haskell"
741
+ }
742
+ },
743
+ "patterns": [
744
+ {
745
+ "include": "#comments"
746
+ },
747
+ {
748
+ "include": "#family_and_instance"
749
+ },
750
+ {
751
+ "include": "#where"
752
+ },
753
+ {
754
+ "include": "#assignment_op"
755
+ },
756
+ {
757
+ "include": "#type_signature"
758
+ }
759
+ ]
760
+ }
761
+ ]
762
+ },
763
+ "keywords": {
764
+ "patterns": [
765
+ {
766
+ "name": "keyword.other.haskell",
767
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(deriving|where|data|type|newtype)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
416
768
  },
417
769
  {
418
- "match": "->",
419
- "name": "keyword.other.arrow.haskell"
770
+ "name": "storage.type.haskell",
771
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(data|type|newtype)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
420
772
  },
421
773
  {
422
- "match": "=>",
423
- "name": "keyword.other.big-arrow.haskell"
774
+ "name": "keyword.operator.haskell",
775
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))infix[lr]?(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
424
776
  },
425
777
  {
426
- "match": "\\b(Int(eger)?|Maybe|Either|Bool|Float|Double|Char|String|Ordering|ShowS|ReadS|FilePath|IO(Error)?)\\b",
427
- "name": "support.type.prelude.haskell"
778
+ "name": "keyword.control.haskell",
779
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(do|if|then|else|case|of|let|in|default)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
780
+ }
781
+ ]
782
+ },
783
+ "c_preprocessor": {
784
+ "patterns": [
785
+ {
786
+ "name": "meta.preprocessor.c.haskell",
787
+ "begin": "^(?=#)",
788
+ "end": "(?<!\\\\)(?=\\n)",
789
+ "patterns": [
790
+ {
791
+ "include": "source.c"
792
+ }
793
+ ]
794
+ }
795
+ ]
796
+ },
797
+ "string": {
798
+ "patterns": [
799
+ {
800
+ "name": "string.quoted.double.haskell",
801
+ "begin": "\"",
802
+ "end": "\"",
803
+ "beginCaptures": {
804
+ "0": {
805
+ "name": "punctuation.definition.string.begin.haskell"
806
+ }
807
+ },
808
+ "endCaptures": {
809
+ "0": {
810
+ "name": "punctuation.definition.string.end.haskell"
811
+ }
812
+ },
813
+ "patterns": [
814
+ {
815
+ "include": "#characters"
816
+ },
817
+ {
818
+ "begin": "\\\\\\s",
819
+ "end": "\\\\",
820
+ "beginCaptures": {
821
+ "0": {
822
+ "name": "markup.other.escape.newline.begin.haskell"
823
+ }
824
+ },
825
+ "endCaptures": {
826
+ "0": {
827
+ "name": "markup.other.escape.newline.end.haskell"
828
+ }
829
+ },
830
+ "patterns": [
831
+ {
832
+ "include": "#invalid"
833
+ }
834
+ ]
835
+ }
836
+ ]
837
+ }
838
+ ]
839
+ },
840
+ "newline_escape": {
841
+ "patterns": [
842
+ {
843
+ "name": "markup.other.escape.newline.haskell",
844
+ "match": "\\\\$"
845
+ }
846
+ ]
847
+ },
848
+ "quoted_character": {
849
+ "patterns": [
850
+ {
851
+ "name": "string.quoted.single.haskell",
852
+ "match": "(')((?:[\\ -\\[\\]-~]|\\\\(?:NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|[abfnrtv\\\\\\\"'\\&])|(?:\\\\o[0-7]+)|(?:\\\\x[0-9A-Fa-f]+)|(?:\\^[A-Z@\\[\\]\\\\\\^_])))(')",
853
+ "captures": {
854
+ "1": {
855
+ "name": "punctuation.definition.string.begin.haskell"
856
+ },
857
+ "2": {
858
+ "patterns": [
859
+ {
860
+ "include": "#characters"
861
+ }
862
+ ]
863
+ },
864
+ "3": {
865
+ "name": "punctuation.definition.string.end.haskell"
866
+ }
867
+ }
868
+ }
869
+ ]
870
+ },
871
+ "scoped_type": {
872
+ "patterns": [
873
+ {
874
+ "match": "\\((?<paren>(?:[^()]|\\(\\g<paren>\\))*)(::|∷)(?<paren2>(?:[^()]|\\(\\g<paren2>\\))*)\\)",
875
+ "captures": {
876
+ "1": {
877
+ "patterns": [
878
+ {
879
+ "include": "source.haskell"
880
+ }
881
+ ]
882
+ },
883
+ "2": {
884
+ "name": "keyword.other.double-colon.haskell"
885
+ },
886
+ "3": {
887
+ "name": "meta.type-signature.haskell",
888
+ "patterns": [
889
+ {
890
+ "include": "#type_signature"
891
+ }
892
+ ]
893
+ }
894
+ }
428
895
  },
429
896
  {
430
- "match": "\\b[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
431
- "name": "variable.other.generic-type.haskell"
897
+ "match": "(::|∷)(.*?)(?:(?<![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])(<-|=)(?![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])|$)",
898
+ "captures": {
899
+ "1": {
900
+ "name": "keyword.other.double-colon.haskell"
901
+ },
902
+ "2": {
903
+ "name": "meta.type-signature.haskell",
904
+ "patterns": [
905
+ {
906
+ "include": "#type_signature"
907
+ }
908
+ ]
909
+ },
910
+ "3": {
911
+ "patterns": [
912
+ {
913
+ "include": "#assignment_op"
914
+ },
915
+ {
916
+ "include": "#operator"
917
+ }
918
+ ]
919
+ }
920
+ }
921
+ }
922
+ ]
923
+ },
924
+ "scoped_type_override": {
925
+ "patterns": [
926
+ {
927
+ "match": "^([ \\t]*)(?:(?:((?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\)))(?:(?:\\s*,\\s*)(?:(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*|(?:\\((?!--+\\))[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+\\))))*))(?:\\s*(::|∷)))(.*)(?<![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])(<-|=)(?![\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']])",
928
+ "captures": {
929
+ "2": {
930
+ "patterns": [
931
+ {
932
+ "include": "#identifier"
933
+ }
934
+ ]
935
+ },
936
+ "3": {
937
+ "name": "keyword.other.double-colon.haskell"
938
+ },
939
+ "4": {
940
+ "name": "meta.type-signature.haskell",
941
+ "patterns": [
942
+ {
943
+ "include": "#type_signature"
944
+ }
945
+ ]
946
+ },
947
+ "5": {
948
+ "patterns": [
949
+ {
950
+ "include": "#assignment_op"
951
+ },
952
+ {
953
+ "include": "#operator"
954
+ }
955
+ ]
956
+ }
957
+ }
958
+ }
959
+ ]
960
+ },
961
+ "comma": {
962
+ "patterns": [
963
+ {
964
+ "name": "punctuation.separator.comma.haskell",
965
+ "match": ","
966
+ }
967
+ ]
968
+ },
969
+ "lit_num": {
970
+ "patterns": [
971
+ {
972
+ "name": "constant.numeric.hexadecimal.haskell",
973
+ "match": "0[xX][0-9a-fA-F]+"
432
974
  },
433
975
  {
434
- "match": "\\b[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*",
435
- "name": "storage.type.haskell"
976
+ "name": "constant.numeric.octal.haskell",
977
+ "match": "0[oO][0-7]+"
436
978
  },
437
979
  {
438
- "match": "\\(\\)",
439
- "name": "support.constant.unit.haskell"
980
+ "name": "constant.numeric.float.haskell",
981
+ "match": "[0-9]+(\\.[0-9]+[eE][+-]?|\\.|[eE][+-]?)[0-9]+"
440
982
  },
441
983
  {
442
- "include": "#comments"
984
+ "name": "constant.numeric.decimal.haskell",
985
+ "match": "[0-9]+"
986
+ }
987
+ ]
988
+ },
989
+ "operator": {
990
+ "patterns": [
991
+ {
992
+ "name": "keyword.operator.haskell",
993
+ "match": "[\\p{S}\\p{P}&&[^(),;\\[\\]`{}_\"']]+"
994
+ }
995
+ ]
996
+ },
997
+ "identifier": {
998
+ "patterns": [
999
+ {
1000
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
1001
+ "name": "identifier.haskell",
1002
+ "captures": {
1003
+ "0": {
1004
+ "patterns": [
1005
+ {
1006
+ "include": "#module_name_prefix"
1007
+ },
1008
+ {
1009
+ "name": "support.function.prelude.haskell",
1010
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(abs|acos|acosh|all|and|any|appendFile|asTypeOf|asin|asinh|atan|atan2|atanh|break|ceiling|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldMap|foldl|foldl1|foldr|foldr1|fromEnum|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|head|id|init|interact|ioError|isDenormalized|isIEEE|isInfinite|isNaN|isNegativeZero|iterate|last|lcm|length|lex|lines|log|logBase|lookup|map|mapM|mapM_|mappend|max|maxBound|maximum|maybe|mconcat|mempty|min|minBound|minimum|mod|negate|not|notElem|null|odd|or|otherwise|pi|pred|print|product|properFraction|pure|putChar|putStr|putStrLn|quot|quotRem|read|readFile|readIO|readList|readLn|readParen|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequenceA|sequence_|show|showChar|showList|showParen|showString|shows|showsPrec|significand|signum|sin|sinh|snd|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|toEnum|toInteger|toRational|traverse|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
1011
+ }
1012
+ ]
1013
+ }
1014
+ }
1015
+ }
1016
+ ]
1017
+ },
1018
+ "type_name": {
1019
+ "patterns": [
1020
+ {
1021
+ "name": "entity.name.type.haskell",
1022
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
1023
+ "captures": {
1024
+ "0": {
1025
+ "patterns": [
1026
+ {
1027
+ "include": "#module_name_prefix"
1028
+ },
1029
+ {
1030
+ "name": "entity.other.inherited-class.prelude.haskell",
1031
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(Applicative|Bounded|Enum|Eq|Floating|Foldable|Fractional|Functor|Integral|Monad|Monoid|Num|Ord|Read|Real|RealFloat|RealFrac|Show|Traversable)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
1032
+ },
1033
+ {
1034
+ "name": "support.class.prelude.haskell",
1035
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(Either|FilePath|IO|IOError|Integer|Maybe|Ordering|Rational|ReadS|ShowS|String|Bool|Char|Double|Float|Int|Word)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
1036
+ }
1037
+ ]
1038
+ }
1039
+ }
1040
+ }
1041
+ ]
1042
+ },
1043
+ "type_ctor": {
1044
+ "patterns": [
1045
+ {
1046
+ "name": "entity.name.tag.haskell",
1047
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
1048
+ "captures": {
1049
+ "0": {
1050
+ "patterns": [
1051
+ {
1052
+ "include": "#module_name_prefix"
1053
+ },
1054
+ {
1055
+ "name": "support.tag.prelude.haskell",
1056
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(EQ|GT|Just|LT|Left|Nothing|Right|True|False)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
1057
+ }
1058
+ ]
1059
+ }
1060
+ }
1061
+ }
1062
+ ]
1063
+ },
1064
+ "where": {
1065
+ "patterns": [
1066
+ {
1067
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))where(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
1068
+ "name": "keyword.other.haskell"
1069
+ }
1070
+ ]
1071
+ },
1072
+ "family_and_instance": {
1073
+ "patterns": [
1074
+ {
1075
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(family|instance)(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))",
1076
+ "name": "keyword.other.haskell"
1077
+ }
1078
+ ]
1079
+ },
1080
+ "invalid": {
1081
+ "patterns": [
1082
+ {
1083
+ "match": "\\S+",
1084
+ "name": "invalid.illegal.character-not-allowed-here.haskell"
1085
+ }
1086
+ ]
1087
+ },
1088
+ "function_name": {
1089
+ "patterns": [
1090
+ {
1091
+ "name": "entity.name.function.haskell",
1092
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
1093
+ }
1094
+ ]
1095
+ },
1096
+ "assignment_op": {
1097
+ "patterns": [
1098
+ {
1099
+ "match": "=",
1100
+ "captures": {
1101
+ "0": {
1102
+ "name": "keyword.operator.assignment.haskell"
1103
+ }
1104
+ }
1105
+ }
1106
+ ]
1107
+ },
1108
+ "attribute_name": {
1109
+ "patterns": [
1110
+ {
1111
+ "name": "entity.other.attribute-name.haskell",
1112
+ "match": "(?:(?=[\\p{Ll}_\\p{Lu}\\p{Lt}])(?<![\\p{Ll}_\\p{Lu}\\p{Lt}]))(?:[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:\\.[\\p{Lu}\\p{Lt}][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*)*\\.)?[\\p{Ll}_][\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']*(?:(?<=[\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}'])(?![\\p{Ll}_\\p{Lu}\\p{Lt}\\p{Nd}']))"
443
1113
  }
444
1114
  ]
445
1115
  }
446
1116
  },
447
- "scopeName": "source.haskell",
448
- "uuid": "5C034675-1F6D-497E-8073-369D37E2FD7D"
1117
+ "patterns": [
1118
+ {
1119
+ "name": "block.liquidhaskell.haskell",
1120
+ "contentName": "block.liquidhaskell.annotation.haskell",
1121
+ "begin": "\\{-@(?!#)",
1122
+ "end": "@-\\}",
1123
+ "patterns": [
1124
+ {
1125
+ "include": "$self"
1126
+ }
1127
+ ]
1128
+ },
1129
+ {
1130
+ "name": "comment.line.shebang.haskell",
1131
+ "match": "^\\#\\!.*\\brunhaskell\\b.*$"
1132
+ },
1133
+ {
1134
+ "include": "#infix_function"
1135
+ },
1136
+ {
1137
+ "include": "#unit"
1138
+ },
1139
+ {
1140
+ "include": "#empty_list"
1141
+ },
1142
+ {
1143
+ "include": "#quasi_quotes"
1144
+ },
1145
+ {
1146
+ "include": "#module_decl"
1147
+ },
1148
+ {
1149
+ "include": "#class_decl"
1150
+ },
1151
+ {
1152
+ "include": "#instance_decl"
1153
+ },
1154
+ {
1155
+ "include": "#foreign_import"
1156
+ },
1157
+ {
1158
+ "include": "#regular_import"
1159
+ },
1160
+ {
1161
+ "include": "#data_decl"
1162
+ },
1163
+ {
1164
+ "include": "#type_alias"
1165
+ },
1166
+ {
1167
+ "include": "#keywords"
1168
+ },
1169
+ {
1170
+ "include": "#c_preprocessor"
1171
+ },
1172
+ {
1173
+ "include": "#pragma"
1174
+ },
1175
+ {
1176
+ "include": "#string"
1177
+ },
1178
+ {
1179
+ "include": "#newline_escape"
1180
+ },
1181
+ {
1182
+ "include": "#quoted_character"
1183
+ },
1184
+ {
1185
+ "include": "#scoped_type_override"
1186
+ },
1187
+ {
1188
+ "include": "#function_type_declaration"
1189
+ },
1190
+ {
1191
+ "include": "#scoped_type"
1192
+ },
1193
+ {
1194
+ "include": "#comments"
1195
+ },
1196
+ {
1197
+ "include": "#infix_op"
1198
+ },
1199
+ {
1200
+ "include": "#comma"
1201
+ },
1202
+ {
1203
+ "include": "#lit_num"
1204
+ },
1205
+ {
1206
+ "include": "#operator"
1207
+ },
1208
+ {
1209
+ "include": "#identifier"
1210
+ },
1211
+ {
1212
+ "include": "#type_ctor"
1213
+ }
1214
+ ]
449
1215
  }