diff options
author | Aaron Housh | 2022-04-08 18:10:37 +0000 |
---|---|---|
committer | GitHub | 2022-04-08 18:10:37 +0000 |
commit | 9caf7c0d5aae16acd76e39b078ef8a94ed102b65 (patch) | |
tree | 9cf94dac6bf30c766ba3a2558c0c83ae246444d3 /runtime/queries/swift | |
parent | 8e12fd52908ecc7d53d1b456fe3b10e0833f1a63 (diff) |
Add swift language (#2033)
Diffstat (limited to 'runtime/queries/swift')
-rw-r--r-- | runtime/queries/swift/highlights.scm | 158 | ||||
-rw-r--r-- | runtime/queries/swift/locals.scm | 18 |
2 files changed, 176 insertions, 0 deletions
diff --git a/runtime/queries/swift/highlights.scm b/runtime/queries/swift/highlights.scm new file mode 100644 index 00000000..fe240e9d --- /dev/null +++ b/runtime/queries/swift/highlights.scm @@ -0,0 +1,158 @@ +[ "." ";" ":" "," ] @punctuation.delimiter +[ "\\(" "(" ")" "[" "]" "{" "}"] @punctuation.bracket ; TODO: "\\(" ")" in interpolations should be @punctuation.special + +; Identifiers +(attribute) @variable +(type_identifier) @type +(self_expression) @variable.builtin + +; Declarations +"func" @keyword.function +[ + (visibility_modifier) + (member_modifier) + (function_modifier) + (property_modifier) + (parameter_modifier) + (inheritance_modifier) +] @keyword + +(function_declaration (simple_identifier) @function.method) +(function_declaration ["init" @constructor]) +(throws) @keyword +"async" @keyword +(where_keyword) @keyword +(parameter external_name: (simple_identifier) @variable.parameter) +(parameter name: (simple_identifier) @variable.parameter) +(type_parameter (type_identifier) @variable.parameter) +(inheritance_constraint (identifier (simple_identifier) @variable.parameter)) +(equality_constraint (identifier (simple_identifier) @variable.parameter)) +(non_binding_pattern bound_identifier: (simple_identifier)) @variable + +[ + "typealias" + "struct" + "class" + "enum" + "protocol" + "extension" + "indirect" + "some" +] @keyword + +[ + (getter_specifier) + (setter_specifier) + (modify_specifier) +] @keyword + +(class_body (property_declaration (value_binding_pattern (non_binding_pattern (simple_identifier) @variable.other.member)))) +(protocol_property_declaration (value_binding_pattern (non_binding_pattern (simple_identifier) @variable.other.member))) + +(import_declaration ["import" @keyword.control.import]) + +(enum_entry ["case" @keyword]) + +; Function calls +(call_expression (simple_identifier) @function) ; foo() +(call_expression ; foo.bar.baz(): highlight the baz() + (navigation_expression + (navigation_suffix (simple_identifier) @function))) +((navigation_expression + (simple_identifier) @type) ; SomeType.method(): highlight SomeType as a type + (#match? @type "^[A-Z]")) + +(directive) @function.macro +(diagnostic) @function.macro + +; Statements +(for_statement ["for" @keyword.control.repeat]) +(for_statement ["in" @keyword.control.repeat]) +(for_statement item: (simple_identifier) @variable) +(else) @keyword +(as_operator) @keyword + +["while" "repeat" "continue" "break"] @keyword.control.repeat + +["let" "var"] @keyword +(non_binding_pattern (simple_identifier) @variable) + +(guard_statement ["guard" @keyword.control.conditional]) +(if_statement ["if" @keyword.control.conditional]) +(switch_statement ["switch" @keyword.control.conditional]) +(switch_entry ["case" @keyword]) +(switch_entry ["fallthrough" @keyword]) +(switch_entry (default_keyword) @keyword) +"return" @keyword.control.return +(ternary_expression + ["?" ":"] @keyword.control.conditional) + +["do" (throw_keyword) (catch_keyword)] @keyword + +(statement_label) @label + +; Comments +(comment) @comment.line +(multiline_comment) @comment.block + +; String literals +(line_str_text) @string +(str_escaped_char) @string +(multi_line_str_text) @string +(raw_str_part) @string +(raw_str_end_part) @string +(raw_str_interpolation_start) @string.special +["\"" "\"\"\""] @string + +; Lambda literals +(lambda_literal ["in" @keyword.operator]) + +; Basic literals +(integer_literal) @constant.numeric.integer +[ + (hex_literal) + (oct_literal) + (bin_literal) +] @constant.numeric +(real_literal) @constant.numeric.float +(boolean_literal) @constant.builtin.boolean +"nil" @variable.builtin + +; Operators +(custom_operator) @operator +[ + "try" + "try?" + "try!" + "!" + "+" + "-" + "*" + "/" + "%" + "=" + "+=" + "-=" + "*=" + "/=" + "<" + ">" + "<=" + ">=" + "++" + "--" + "&" + "~" + "%=" + "!=" + "!==" + "==" + "===" + "??" + + "->" + + "..<" + "..." +] @operator + diff --git a/runtime/queries/swift/locals.scm b/runtime/queries/swift/locals.scm new file mode 100644 index 00000000..dfe1c83b --- /dev/null +++ b/runtime/queries/swift/locals.scm @@ -0,0 +1,18 @@ +(import_declaration (identifier) @definition.import) +(function_declaration name: (simple_identifier) @definition.function) + +; Scopes +[ + (statements) + (for_statement) + (while_statement) + (repeat_while_statement) + (do_statement) + (if_statement) + (guard_statement) + (switch_statement) + (property_declaration) + (function_declaration) + (class_declaration) + (protocol_declaration) +] @scope |