carbon.tmLanguage.json 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. {
  2. "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
  3. "name": "carbon",
  4. "scopeName": "source.carbon",
  5. "foldingStartMarker": "\\{\\s*$",
  6. "foldingStopMarker": "^\\s*\\}",
  7. "fileTypes": ["carbon"],
  8. "patterns": [
  9. {
  10. "include": "#comments"
  11. },
  12. {
  13. "include": "#strings"
  14. },
  15. {
  16. "include": "#operators"
  17. },
  18. {
  19. "include": "#special-keywords"
  20. },
  21. {
  22. "include": "#numbers"
  23. },
  24. {
  25. "include": "#introducer-keywords"
  26. },
  27. {
  28. "include": "#modifier-keywords"
  29. },
  30. {
  31. "include": "#misc-keywords"
  32. },
  33. {
  34. "include": "#self-keywords"
  35. },
  36. {
  37. "include": "#underscore"
  38. },
  39. {
  40. "include": "#true-false"
  41. },
  42. {
  43. "include": "#type-literals"
  44. },
  45. {
  46. "include": "#functions"
  47. },
  48. {
  49. "include": "#customs"
  50. }
  51. ],
  52. "repository": {
  53. "comments": {
  54. "patterns": [
  55. {
  56. "name": "comment.line.carbon",
  57. "match": "^\\s*(?=//\\s).*$"
  58. },
  59. {
  60. "name": "comment.line.carbon",
  61. "match": "^\\s*//@dump-sem-ir-(begin|end)\\s*$"
  62. }
  63. ]
  64. },
  65. "string_escapes": {
  66. "patterns": [
  67. {
  68. "name": "constant.character.escape.carbon",
  69. "match": "\\\\([tnr'\"0\\0]|x[0-9A-F]{2}|u\\{[0-9A-F]{4,}\\})"
  70. }
  71. ]
  72. },
  73. "strings": {
  74. "patterns": [
  75. {
  76. "name": "string.quoted.triple.carbon",
  77. "begin": "'''([^\\s'#]*\\n)?",
  78. "end": "'''",
  79. "beginCaptures": {
  80. "1": {
  81. "name": "constant.character.escape.carbon"
  82. }
  83. },
  84. "patterns": [
  85. {
  86. "include": "#string_escapes"
  87. }
  88. ]
  89. },
  90. {
  91. "name": "string.quoted.double.carbon",
  92. "begin": "\"",
  93. "end": "\"",
  94. "patterns": [
  95. {
  96. "include": "#string_escapes"
  97. }
  98. ]
  99. }
  100. ]
  101. },
  102. "operators": {
  103. "patterns": [
  104. {
  105. "name": "keyword.operator.carbon",
  106. "match": "\\b(>>=|<=>|<<=|\\&=|==|!=|>=|>>|<=|<<|-=|->|--|%=|\\|=|\\+=|\\+\\+|/=|\\*=|\\&|\\^|=|>|<|-|%|.|\\||\\+|/|\\*)\\b"
  107. },
  108. {
  109. "name": "keyword.operator.carbon",
  110. "match": "\\b(addr|and|as|impls|in|like|not|or|partial|template|where)\\b"
  111. }
  112. ]
  113. },
  114. "special-keywords": {
  115. "patterns": [
  116. {
  117. "name": "keyword.control.carbon",
  118. "match": "\\b(break|case|continue|else|if|for|match|return|returned|then|while)\\b"
  119. },
  120. {
  121. "name": "keyword.control.carbon",
  122. "match": "\\b(default)\\b(?=\\s*=>)"
  123. }
  124. ]
  125. },
  126. "introducer-keywords": {
  127. "patterns": [
  128. {
  129. "name": "storage.type.carbon",
  130. "match": "\\b(adapt|alias|choice|class|constraint|fn|import|interface|let|library|namespace|var)\\b"
  131. },
  132. {
  133. "name": "storage.type.carbon",
  134. "match": "\\b(base)\\b(?!\\s*class\\b)"
  135. },
  136. {
  137. "name": "storage.type.carbon",
  138. "match": "\\b(export)\\b(?!\\s*import\\b)"
  139. },
  140. {
  141. "name": "storage.type.carbon",
  142. "match": "\\b(impl)\\b(?!\\s*(fn|library|package)\\b)"
  143. },
  144. {
  145. "name": "storage.type.carbon",
  146. "match": "\\b(package)\\b(?!\\.)"
  147. }
  148. ]
  149. },
  150. "modifier-keywords": {
  151. "patterns": [
  152. {
  153. "name": "storage.modifier.carbon",
  154. "match": "\\b(abstract|extend|extern|final|private|protected|virtual)\\b"
  155. },
  156. {
  157. "name": "storage.modifier.carbon",
  158. "match": "\\b(base)\\b(?=\\s*class\\b)"
  159. },
  160. {
  161. "name": "storage.modifier.carbon",
  162. "match": "\\b(default)\\b(?!\\s*=>)"
  163. },
  164. {
  165. "name": "storage.modifier.carbon",
  166. "match": "\\b(export)\\b(?=\\s*import\\b)"
  167. },
  168. {
  169. "name": "storage.modifier.carbon",
  170. "match": "\\b(impl)\\b(?=\\s*(fn|library|package)\\b)"
  171. }
  172. ]
  173. },
  174. "misc-keywords": {
  175. "patterns": [
  176. {
  177. "name": "keyword.other.carbon",
  178. "match": "\\b(auto|destructor|forall|friend|observe|override|require)\\b"
  179. },
  180. {
  181. "name": "keyword.other.carbon",
  182. "match": "(?<=\\.)\\b(base)\\b"
  183. }
  184. ]
  185. },
  186. "self-keywords": {
  187. "patterns": [
  188. {
  189. "name": "variable.language.carbon",
  190. "match": "\\b(self|Self)\\b"
  191. }
  192. ]
  193. },
  194. "underscore": {
  195. "patterns": [
  196. {
  197. "name": "variable.language.carbon",
  198. "match": "\\b(_)\\b"
  199. }
  200. ]
  201. },
  202. "true-false": {
  203. "patterns": [
  204. {
  205. "name": "constant.language.carbon",
  206. "match": "\\b(true|false)\\b"
  207. }
  208. ]
  209. },
  210. "type-literals": {
  211. "patterns": [
  212. {
  213. "name": "constant.language.carbon",
  214. "match": "\\b(bool|[iuf][1-9][0-9]*|type)\\b"
  215. }
  216. ]
  217. },
  218. "functions": {
  219. "patterns": [
  220. {
  221. "name": "support.function.carbon",
  222. "match": "\\b[a-zA-Z]+\\s*\\("
  223. }
  224. ]
  225. },
  226. "customs": {
  227. "patterns": [
  228. {
  229. "name": "support.class.carbon",
  230. "match": "(?<=\\b(package|Core)\\s)\\w+"
  231. },
  232. {
  233. "name": "support.variable.carbon",
  234. "match": "(?<=\\s*\\.)\\w+"
  235. },
  236. {
  237. "name": "support.variable.carbon",
  238. "match": "(?<=\\bas\\s)\\w+"
  239. },
  240. {
  241. "name": "support.variable.carbon",
  242. "match": "\\w+(?=\\s*:)"
  243. },
  244. {
  245. "name": "support.variable.carbon",
  246. "match": "(?<=\\blet\\s)\\w+"
  247. },
  248. {
  249. "name": "support.variable.carbon",
  250. "match": "(?<=\\bvar\\s)\\w+"
  251. },
  252. {
  253. "name": "support.function.carbon",
  254. "match": "(?<=\\bfn\\s)\\w+"
  255. },
  256. {
  257. "name": "support.other.carbon",
  258. "match": "(?<=\\bimpl\\s)\\w+"
  259. },
  260. {
  261. "name": "support.type.property-name.carbon",
  262. "match": "(?<=\\bimport\\s)\\w+"
  263. },
  264. {
  265. "name": "support.class.carbon",
  266. "match": "(?<=\\bclass\\s)\\w+"
  267. }
  268. ]
  269. },
  270. "numbers": {
  271. "patterns": [
  272. {
  273. "name": "constant.numeric.carbon",
  274. "match": "0x[_0-9A-F]+(\\.[_0-9A-F]+(p[-+]?[1-9][0-9]*)?)?"
  275. },
  276. {
  277. "name": "constant.numeric.carbon",
  278. "match": "0b[_01]+"
  279. },
  280. {
  281. "name": "constant.numeric.carbon",
  282. "match": "[1-9][_0-9]*(\\.[_0-9]+(e[-+]?[1-9][0-9]*)?)?"
  283. }
  284. ]
  285. }
  286. }
  287. }