carbon.tmLanguage.json 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. {
  5. "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
  6. "name": "carbon",
  7. "foldingStartMarker": "\\{\\s*$",
  8. "foldingStopMarker": "^\\s*\\}",
  9. "fileTypes": ["carbon"],
  10. "patterns": [
  11. {
  12. "include": "#comments"
  13. },
  14. {
  15. "include": "#operators"
  16. },
  17. {
  18. "include": "#special-keywords"
  19. },
  20. {
  21. "include": "#numbers"
  22. },
  23. {
  24. "include": "#reserved-words"
  25. },
  26. {
  27. "include": "#operator-dedicated-keywords-statements"
  28. },
  29. {
  30. "include": "#ctrl-statements"
  31. },
  32. {
  33. "include": "#true-false"
  34. },
  35. {
  36. "include": "#functions"
  37. },
  38. {
  39. "name": "string.quoted.triple.carbon",
  40. "begin": "'''([^\\s'#]*\\n)?",
  41. "end": "'''",
  42. "beginCaptures": {
  43. "1": {
  44. "name": "constant.character.escape.carbon"
  45. }
  46. },
  47. "patterns": [
  48. {
  49. "include": "#string_escapes"
  50. }
  51. ]
  52. },
  53. {
  54. "name": "string.quoted.double.carbon",
  55. "begin": "\"",
  56. "end": "\"",
  57. "patterns": [
  58. {
  59. "include": "#string_escapes"
  60. }
  61. ]
  62. },
  63. {
  64. "include": "#customs"
  65. }
  66. ],
  67. "repository": {
  68. "operators": {
  69. "patterns": [
  70. {
  71. "name": "keyword.operator.carbon",
  72. "match": "\\b(\\+|-|\\*|/|!)\\b"
  73. }
  74. ]
  75. },
  76. "comments": {
  77. "patterns": [
  78. {
  79. "begin": "(^[ \\t]+)?(?=//)",
  80. "end": "(?!\\G)",
  81. "patterns": [
  82. {
  83. "name": "comment.line.carbon",
  84. "begin": "//",
  85. "end": "$"
  86. }
  87. ]
  88. }
  89. ]
  90. },
  91. "string_escapes": {
  92. "patterns": [
  93. {
  94. "name": "constant.character.escape.carbon",
  95. "match": "\\\\([tnr'\"0\\0]|x[0-9A-F]{2}|u\\{[0-9A-F]{4,}\\})"
  96. }
  97. ]
  98. },
  99. "special-keywords": {
  100. "patterns": [
  101. {
  102. "name": "keyword.control.carbon",
  103. "match": "\\b(break|case|continue|default|else|if|for|match|return|returned|then|while)\\b"
  104. }
  105. ]
  106. },
  107. "operator-dedicated-keywords-statements": {
  108. "patterns": [
  109. {
  110. "name": "keyword.other.carbon",
  111. "match": "\\b(abstract|adapt|addr|alias|and|api|as|auto|base|choice|class|constraint|destructor|extend|final|fn|forall|friend|impl|impls|import|in|interface|let|library|like|namespace|not|observe|or|override|package|partial|private|protected|require|Self|template|type|var|virtual|where|_)\\b"
  112. }
  113. ]
  114. },
  115. "reserved-words": {
  116. "patterns": [
  117. {
  118. "name": "support.type.carbon",
  119. "match": "\\b(As|bool|Carbon\\.Int|Carbon\\.UInt|f16|f32|f64|f128|i8|i16|i32|i64|i128|i256|Slice|String|StringView|type|u8|u16|u32|u64|u128|u256)\\b"
  120. }
  121. ]
  122. },
  123. "true-false": {
  124. "patterns": [
  125. {
  126. "name": "constant.language.carbon",
  127. "match": "\\b(true|false)\\b"
  128. }
  129. ]
  130. },
  131. "functions": {
  132. "patterns": [
  133. {
  134. "name": "support.function.carbon",
  135. "match": "\\b[a-zA-Z]+\\s*\\("
  136. }
  137. ]
  138. },
  139. "customs": {
  140. "patterns": [
  141. {
  142. "name": "support.class.carbon",
  143. "match": "(?<=\\bpackage\\s)\\w+"
  144. },
  145. {
  146. "name": "support.variable.carbon",
  147. "match": "(?<=\\s*\\.)\\w+"
  148. },
  149. {
  150. "name": "support.variable.carbon",
  151. "match": "(?<=\\bas\\s)\\w+"
  152. },
  153. {
  154. "name": "support.variable.carbon",
  155. "match": "\\w+(?=\\s*:)"
  156. },
  157. {
  158. "name": "support.variable.carbon",
  159. "match": "(?<=\\blet\\s)\\w+"
  160. },
  161. {
  162. "name": "support.variable.carbon",
  163. "match": "(?<=\\bvar\\s)\\w+"
  164. },
  165. {
  166. "name": "support.function.carbon",
  167. "match": "(?<=\\bfn\\s)\\w+"
  168. },
  169. {
  170. "name": "support.other.carbon",
  171. "match": "(?<=\\bimpl\\s)\\w+"
  172. },
  173. {
  174. "name": "support.type.property-name.carbon",
  175. "match": "(?<=\\bimport\\s)\\w+"
  176. },
  177. {
  178. "name": "support.class.carbon",
  179. "match": "(?<=\\bclass\\s)\\w+"
  180. }
  181. ]
  182. },
  183. "numbers": {
  184. "patterns": [
  185. {
  186. "name": "constant.numeric.carbon",
  187. "match": "0x[_0-9A-F]+(\\.[_0-9A-F]+(p[-+]?[1-9][0-9]*)?)?"
  188. },
  189. {
  190. "name": "constant.numeric.carbon",
  191. "match": "0b[_01]+"
  192. },
  193. {
  194. "name": "constant.numeric.carbon",
  195. "match": "[1-9][_0-9]*(\\.[_0-9]+(e[-+]?[1-9][0-9]*)?)?"
  196. }
  197. ]
  198. }
  199. },
  200. "scopeName": "source.carbon"
  201. }