carbon.tmLanguage.json 6.6 KB

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