aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/objc/highlights.scm
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/queries/objc/highlights.scm')
-rw-r--r--runtime/queries/objc/highlights.scm268
1 files changed, 268 insertions, 0 deletions
diff --git a/runtime/queries/objc/highlights.scm b/runtime/queries/objc/highlights.scm
new file mode 100644
index 000000000..0f412404f
--- /dev/null
+++ b/runtime/queries/objc/highlights.scm
@@ -0,0 +1,268 @@
+; inherits: c
+
+; Preprocs
+(preproc_undef
+ name: (_) @constant) @keyword.directive
+
+; Includes
+(module_import
+ "@import" @keyword.import
+ path: (identifier) @module)
+
+((preproc_include
+ _ @keyword.import
+ path: (_))
+ (#any-of? @keyword.import "#include" "#import"))
+
+; Type Qualifiers
+[
+ "@optional"
+ "@required"
+ "__covariant"
+ "__contravariant"
+ (visibility_specification)
+] @keyword.modifier
+
+; Storageclasses
+[
+ "@autoreleasepool"
+ "@synthesize"
+ "@dynamic"
+ "volatile"
+ (protocol_qualifier)
+] @keyword.modifier
+
+; Keywords
+[
+ "@protocol"
+ "@interface"
+ "@implementation"
+ "@compatibility_alias"
+ "@property"
+ "@selector"
+ "@defs"
+ "availability"
+ "@end"
+] @keyword
+
+(class_declaration
+ "@" @keyword.type
+ "class" @keyword.type) ; 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"
+] @keyword.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) @function.method)
+
+(method_declaration
+ (identifier) @function.method)
+
+(method_identifier
+ (identifier)? @function.method
+ ":" @function.method
+ (identifier)? @function.method)
+
+(message_expression
+ method: (identifier) @function.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
+
+[
+ "__real"
+ "__imag"
+] @function.macro
+
+((call_expression
+ function: (identifier) @function.macro)
+ (#eq? @function.macro "testassert"))
+
+; Types
+(class_declaration
+ (identifier) @type)
+
+(class_interface
+ "@interface"
+ .
+ (identifier) @type
+ superclass: _? @type
+ category: _? @module)
+
+(class_implementation
+ "@implementation"
+ .
+ (identifier) @type
+ superclass: _? @type
+ category: _? @module)
+
+(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) @variable.member)
+
+((identifier) @variable.member
+ (#has-ancestor? @variable.member struct_declaration))
+
+; Parameters
+(method_parameter
+ ":" @function.method
+ (identifier) @variable.parameter)
+
+(method_parameter
+ declarator: (identifier) @variable.parameter)
+
+(parameter_declaration
+ declarator: (function_declarator
+ declarator: (parenthesized_declarator
+ (block_pointer_declarator
+ declarator: (identifier) @variable.parameter))))
+
+"..." @variable.parameter.builtin
+
+; Operators
+"^" @operator
+
+; Literals
+(platform) @string.special
+
+(version_number) @string.special
+
+; Punctuation
+"@" @punctuation.special
+
+[
+ "<"
+ ">"
+] @punctuation.bracket