aboutsummaryrefslogtreecommitdiff
path: root/runtime/queries/ponylang/highlights.scm
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/queries/ponylang/highlights.scm')
-rw-r--r--runtime/queries/ponylang/highlights.scm176
1 files changed, 176 insertions, 0 deletions
diff --git a/runtime/queries/ponylang/highlights.scm b/runtime/queries/ponylang/highlights.scm
new file mode 100644
index 00000000..2d0594a7
--- /dev/null
+++ b/runtime/queries/ponylang/highlights.scm
@@ -0,0 +1,176 @@
+[
+ (line_comment)
+ (block_comment)
+] @comment
+
+(bool) @constant.builtin.boolean
+(integer) @constant.numeric.integer
+(float) @constant.numeric.float
+(character) @constant.character
+
+;; strings and docstring
+(source_file docstring: (string) @string.special)
+(entity docstring: (string) @string.special)
+(method docstring: (string) @string.special) ; docstring for methods without body
+(behavior docstring: (string) @string.special) ; docstring for methods without body
+(constructor docstring: (string) @string.special) ; docstring for methods without body
+(method body: (block . (string) @string.special)) ; docstring for methods with body
+(behavior body: (block . (string) @string.special))
+(constructor body: (block . (string) @string.special))
+(field docstring: (string) @string.special)
+(string) @string
+
+;; Punctuation
+[
+ "("
+ ")"
+ "{"
+ "}"
+ "["
+ "]"
+] @punctuation.bracket
+[
+ ";"
+ "."
+ ","
+] @punctuation.delimiter
+
+(this) @variable.builtin
+
+(field name: (identifier) @variable.other.member)
+
+"use" @keyword.control.import
+[
+ "for"
+ "in"
+ "while"
+ "do"
+ "repeat"
+ "until"
+] @keyword.control.repeat
+[
+ "if"
+ "ifdef"
+ "iftype"
+ "then"
+ "elseif"
+ "else"
+ "match"
+] @keyword.control.conditional
+[
+ "break"
+ "continue"
+ "return"
+ "error"
+ "compile_error"
+ "compile_intrinsic"
+] @keyword.control.return
+[
+ "recover"
+ "consume"
+ "end"
+ "try"
+ "with"
+] @keyword.control
+
+[
+ "as"
+ "is"
+ "isnt"
+ "not"
+ "and"
+ "or"
+ "xor"
+ "digestof"
+ "addressof"
+ (location)
+] @keyword.operator
+
+(entity_type) @keyword.storage.type
+
+[
+ "var"
+ "let"
+ "embed"
+] @keyword.storage
+
+[
+ "fun"
+ "be"
+ "new"
+] @keyword.function
+
+[
+ (cap)
+ (gencap)
+ "where"
+] @keyword
+
+[
+ (partial)
+ "=>"
+ "~"
+ ".>"
+ "+"
+ "-"
+ "*"
+ "/"
+ "%"
+ "%%"
+ "+~"
+ "-~"
+ "/~"
+ "*~"
+ "%~"
+ "%%~"
+
+ ">>"
+ "<<"
+ ">>~"
+ "<<~"
+
+ "=="
+ "!="
+ ">"
+ "<"
+ ">="
+ "<="
+] @operator
+
+;; Types
+(entity name: (identifier) @type)
+(nominal_type name: (identifier) @type)
+(typeparams (typeparam name: (identifier) @type))
+
+;; constructors / methods / behaviors
+(constructor name: (identifier) @constructor)
+(method name: (identifier) @function.method)
+(behavior name: (identifier) @function.method)
+
+;; method calls
+; TODO: be more specific about what is the actual function reference
+(call callee: (field_access field: (identifier) @function.method))
+(call callee: (_) @function.method)
+(ffi_call name: (_) @function)
+(partial_application function: (identifier) @function.method)
+(chain function: (identifier) @function.method)
+
+;; fields and params
+(field name: (identifier) @variable.other.member)
+(param (identifier) @variable.parameter)
+(lambdaparam (identifier) @variable.parameter)
+
+;; this.field is considered a member access
+(field_access base: (this) field: (identifier) @variable.other.member)
+
+;; annotations
+(annotations (identifier) @attribute)
+
+;; variables
+;; references to upper case things are considered constructors
+(
+ (identifier) @constructor
+ (#match @constructor "^[A-Z]")
+)
+(identifier) @variable
+