aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/objc/folds.scm20
-rw-r--r--queries/objc/highlights.scm216
-rw-r--r--queries/objc/indents.scm1
-rw-r--r--queries/objc/injections.scm10
-rw-r--r--queries/objc/locals.scm1
8 files changed, 260 insertions, 0 deletions
diff --git a/README.md b/README.md
index 3b9f577cc..d8b274ca7 100644
--- a/README.md
+++ b/README.md
@@ -281,6 +281,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [ninja](https://github.com/alemuller/tree-sitter-ninja) (maintained by @alemuller)
- [x] [nix](https://github.com/cstrahan/tree-sitter-nix) (maintained by @leo60228)
- [x] [norg](https://github.com/nvim-neorg/tree-sitter-norg) (maintained by @JoeyGrajciar, @vhyrro)
+- [x] [objc](https://github.com/amaanq/tree-sitter-objc) (maintained by @amaanq)
- [x] [ocaml](https://github.com/tree-sitter/tree-sitter-ocaml) (maintained by @undu)
- [x] [ocaml_interface](https://github.com/tree-sitter/tree-sitter-ocaml) (maintained by @undu)
- [x] [ocamllex](https://github.com/atom-ocaml/tree-sitter-ocamllex) (maintained by @undu)
diff --git a/lockfile.json b/lockfile.json
index 2e7893005..f0543a1fc 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -323,6 +323,9 @@
"norg": {
"revision": "1a305093569632de50f9a316ff843dcda25b4ef5"
},
+ "objc": {
+ "revision": "90773a72d84d3c9a6eb8e373980e9b6b0bb665a0"
+ },
"ocaml": {
"revision": "f1106bf834703f1f2f795da1a3b5f8f40174ffcc"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index 852ee735e..22bb616a0 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -982,6 +982,14 @@ list.norg = {
maintainers = { "@JoeyGrajciar", "@vhyrro" },
}
+list.objc = {
+ install_info = {
+ url = "https://github.com/amaanq/tree-sitter-objc",
+ files = { "src/parser.c" },
+ },
+ maintainers = { "@amaanq" },
+}
+
list.ocaml = {
install_info = {
url = "https://github.com/tree-sitter/tree-sitter-ocaml",
diff --git a/queries/objc/folds.scm b/queries/objc/folds.scm
new file mode 100644
index 000000000..43ffc78e9
--- /dev/null
+++ b/queries/objc/folds.scm
@@ -0,0 +1,20 @@
+; inherits: c
+
+[
+ (class_declaration)
+ (class_interface)
+ (class_implementation)
+ (protocol_declaration)
+ (property_declaration)
+ (method_declaration)
+ (struct_declaration)
+ (struct_declarator)
+ (try_statement)
+ (catch_statement)
+ (finally_statement)
+ (throw_statement)
+ (block_literal)
+ (ms_asm_block)
+ (dictionary_literal)
+ (array_literal)
+] @fold
diff --git a/queries/objc/highlights.scm b/queries/objc/highlights.scm
new file mode 100644
index 000000000..c636895f6
--- /dev/null
+++ b/queries/objc/highlights.scm
@@ -0,0 +1,216 @@
+; inherits: c
+
+; Preprocs
+
+(preproc_undef
+ name: (_) @constant) @preproc
+
+; Includes
+
+(module_import "@import" @include path: (identifier) @namespace)
+
+((preproc_include
+ _ @include path: (_))
+ (#any-of? @include "#include" "#import"))
+
+; Type Qualifiers
+
+[
+ "@optional"
+ "@required"
+ "__covariant"
+ "__contravariant"
+ (visibility_specification)
+] @type.qualifier
+
+; Storageclasses
+
+[
+ "@autoreleasepool"
+ "@synthesize"
+ "@dynamic"
+ "volatile"
+ (protocol_qualifier)
+] @storageclass
+
+; Keywords
+
+[
+ "@protocol"
+ "@interface"
+ "@implementation"
+ "@compatibility_alias"
+ "@property"
+ "@selector"
+ "@defs"
+ "availability"
+ "@end"
+] @keyword
+
+(class_declaration "@" @keyword "class" @keyword) ; I hate Obj-C for allowing "@ class" :)
+
+(method_definition ["+" "-"] @keyword.function)
+(method_declaration ["+" "-"] @keyword.function)
+
+[
+ "__typeof__"
+ "__typeof"
+ "typeof"
+ "in"
+] @keyword.operator
+
+[
+ "@synchronized"
+ "oneway"
+] @keyword.coroutine
+
+; Exceptions
+
+[
+ "@try"
+ "__try"
+ "@catch"
+ "__catch"
+ "@finally"
+ "__finally"
+ "@throw"
+] @exception
+
+; Variables
+
+((identifier) @variable.builtin
+ (#any-of? @variable.builtin "self" "super"))
+
+; Functions & Methods
+
+[
+ "objc_bridge_related"
+ "@available"
+ "__builtin_available"
+ "va_arg"
+ "asm"
+] @function.builtin
+
+(method_definition (identifier) @method)
+
+(method_declaration (identifier) @method)
+
+(method_identifier (identifier)? @method ":" @method (identifier)? @method)
+
+(message_expression method: (identifier) @method.call)
+
+; Constructors
+
+((message_expression method: (identifier) @constructor)
+ (#eq? @constructor "init"))
+
+; Attributes
+
+(availability_attribute_specifier
+ [
+ "CF_FORMAT_FUNCTION" "NS_AVAILABLE" "__IOS_AVAILABLE" "NS_AVAILABLE_IOS"
+ "API_AVAILABLE" "API_UNAVAILABLE" "API_DEPRECATED" "NS_ENUM_AVAILABLE_IOS"
+ "NS_DEPRECATED_IOS" "NS_ENUM_DEPRECATED_IOS" "NS_FORMAT_FUNCTION" "DEPRECATED_MSG_ATTRIBUTE"
+ "__deprecated_msg" "__deprecated_enum_msg" "NS_SWIFT_NAME" "NS_SWIFT_UNAVAILABLE"
+ "NS_EXTENSION_UNAVAILABLE_IOS" "NS_CLASS_AVAILABLE_IOS" "NS_CLASS_DEPRECATED_IOS" "__OSX_AVAILABLE_STARTING"
+ "NS_ROOT_CLASS" "NS_UNAVAILABLE" "NS_REQUIRES_NIL_TERMINATION" "CF_RETURNS_RETAINED"
+ "CF_RETURNS_NOT_RETAINED" "DEPRECATED_ATTRIBUTE" "UI_APPEARANCE_SELECTOR" "UNAVAILABLE_ATTRIBUTE"
+ ]) @attribute
+
+; Macros
+
+(type_qualifier
+ [
+ "_Complex"
+ "_Nonnull"
+ "_Nullable"
+ "_Nullable_result"
+ "_Null_unspecified"
+ "__autoreleasing"
+ "__block"
+ "__bridge"
+ "__bridge_retained"
+ "__bridge_transfer"
+ "__complex"
+ "__kindof"
+ "__nonnull"
+ "__nullable"
+ "__ptrauth_objc_class_ro"
+ "__ptrauth_objc_isa_pointer"
+ "__ptrauth_objc_super_pointer"
+ "__strong"
+ "__thread"
+ "__unsafe_unretained"
+ "__unused"
+ "__weak"
+ ]) @function.macro.builtin
+
+[ "__real" "__imag" ] @function.macro.builtin
+
+((call_expression function: (identifier) @function.macro)
+ (#eq? @function.macro "testassert"))
+
+; Types
+
+(class_declaration (identifier) @type)
+
+(class_interface "@interface" . (identifier) @type superclass: _? @type category: _? @namespace)
+
+(class_implementation "@implementation" . (identifier) @type superclass: _? @type category: _? @namespace)
+
+(protocol_forward_declaration (identifier) @type) ; @interface :(
+
+(protocol_reference_list (identifier) @type) ; ^
+
+[
+ "BOOL"
+ "IMP"
+ "SEL"
+ "Class"
+ "id"
+] @type.builtin
+
+; Constants
+
+(property_attribute (identifier) @constant "="?)
+
+[ "__asm" "__asm__" ] @constant.macro
+
+; Properties
+
+(property_implementation "@synthesize" (identifier) @property)
+
+((identifier) @property
+ (#has-ancestor? @property struct_declaration))
+
+; Parameters
+
+(method_parameter ":" @method (identifier) @parameter)
+
+(method_parameter declarator: (identifier) @parameter)
+
+(parameter_declaration
+ declarator: (function_declarator
+ declarator: (parenthesized_declarator
+ (block_pointer_declarator
+ declarator: (identifier) @parameter))))
+
+"..." @parameter.builtin
+
+; Operators
+
+[
+ "^"
+] @operator
+
+; Literals
+
+(platform) @string.special
+
+(version_number) @text.uri @number
+
+; Punctuation
+
+"@" @punctuation.special
+
+[ "<" ">" ] @punctuation.bracket
diff --git a/queries/objc/indents.scm b/queries/objc/indents.scm
new file mode 100644
index 000000000..a5a5208ca
--- /dev/null
+++ b/queries/objc/indents.scm
@@ -0,0 +1 @@
+; inherits: c
diff --git a/queries/objc/injections.scm b/queries/objc/injections.scm
new file mode 100644
index 000000000..359420d10
--- /dev/null
+++ b/queries/objc/injections.scm
@@ -0,0 +1,10 @@
+; inherits: c
+
+; TODO(amaanq): uncomment/add when I add asm support
+; (ms_asm_block "{" _ @asm "}")
+;
+; ((asm_specifier (string_literal) @asm)
+; (#offset! @asm 0 1 0 -1))
+;
+; ((asm_statement (string_literal) @asm)
+; (#offset! @asm 0 1 0 -1))
diff --git a/queries/objc/locals.scm b/queries/objc/locals.scm
new file mode 100644
index 000000000..a5a5208ca
--- /dev/null
+++ b/queries/objc/locals.scm
@@ -0,0 +1 @@
+; inherits: c