" Vim syntax file
" Language: Objective C
" Maintainer: Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
" Ex-maintainer: Anthony Hodsdon <ahodsdon@fastmail.fm>
" First Author: Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
" Last Change: 2007 Feb 21
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
if &filetype != 'objcpp'
" Read the C syntax to start with
if version < 600
source <sfile>:p:h/c.vim
else
runtime! syntax/c.vim
endif
endif
" Objective C extentions follow below
"
" NOTE: Objective C is abbreviated to ObjC/objc
" and uses *.h, *.m as file extensions!
" ObjC keywords, types, type qualifiers etc.
syn keyword objcStatement self super _cmd
syn keyword objcType id Class SEL IMP BOOL objc_property_t Ivar
syn keyword objcType nonnull nullable null_unspecified
syn keyword objcTypeModifier bycopy in out inout oneway OF_GENERIC OF_INLINE
syn keyword objcTypeModifier OF_KINDOF OF_CONST_FUNC OF_NO_RETURN
syn keyword objcTypeModifier OF_RETURNS_INNER_POINTER OF_NULLABLE_PROPERTY
syn keyword objcTypeModifier OF_NULL_RESETTABLE_PROPERTY OF_UNAVAILABLE
syn keyword objcTypeModifier OF_DESIGNATED_INITIALIZER OF_METHOD_FAMILY
syn keyword objcTypeModifier OF_REQUIRES_SUPER OF_ALIGN OF_ALIGNOF OF_ALIGNAS
syn keyword objcTypeModifier OF_SENTINEL OF_SUBCLASSING_RESTRICTED
syn keyword objcTypeModifier OF_DIRECT OF_DIRECT_MEMBERS
syn keyword objcTypeModifier _Nonnull _Nullable _Null_unspecified __kindof
syn keyword objcConstant nil Nil OFNotFound
" Match the ObjC #import directive (like C's #include)
syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
syn match objcImported display contained "<[-_0-9a-zA-Z.\/]*>"
syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
" Match the important ObjC directives
syn match objcScopeDecl "@public\|@private\|@protected"
syn match objcDirective "@interface\|@implementation"
syn match objcDirective "@class\|@end\|@defs"
syn match objcDirective "@encode\|@protocol\|@selector"
syn match objcDirective "@try\|@catch\|@finally\|@throw\|@synchronized"
syn match objcDirective "OF_ASSUME_NONNULL_BEGIN\|OF_ASSUME_NONNULL_END"
" Match the ObjC method types
"
" NOTE: here I match only the indicators, this looks
" much nicer and reduces cluttering color highlightings.
" However, if you prefer full method declaration matching
" append .* at the end of the next two patterns!
"
syn match objcInstMethod "^\s*-\s*"
syn match objcFactMethod "^\s*+\s*"
" To distinguish from a header inclusion from a protocol list.
syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type
" To distinguish labels from the keyword for a method's parameter.
syn region objcKeyForMethodParam display
\ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*("
\ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*"
\ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type
" Objective-C Constant Strings
syn match objcSpecial display "%@" contained
syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial
" Objective-C Message Expressions
syn region objcMessage display start="\[" end="\]" contains=objcMessage,objcStatement,objcType,objcTypeModifier,objcString,objcConstant,objcDirective,cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,Type
syn cluster cParenGroup add=objcMessage
syn cluster cPreProcGroup add=objcMessage
" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_objc_syntax_inits")
if version < 508
let did_objc_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink objcImport Include
HiLink objcImported cString
HiLink objcTypeModifier objcType
HiLink objcType Type
HiLink objcScopeDecl Statement
HiLink objcInstMethod Function
HiLink objcFactMethod Function
HiLink objcStatement Statement
HiLink objcDirective Statement
HiLink objcKeyForMethodParam None
HiLink objcString cString
HiLink objcSpecial Special
HiLink objcProtocol None
HiLink objcConstant cConstant
delcommand HiLink
endif
let b:current_syntax = "objc"
" vim: ts=8
" Author: Michael Sanders (msanders42 [at] gmail [dot] com)
" Some modifications by Jonathan Schleifer <js@webkeks.org>
" Description: Better syntax highlighting for Objective-C files (part of the
" cocoa.vim plugin).
" Last Updated: May 3, 2015
syn match objcDirective '@synthesize\|@dynamic\|@property' display
syn match objcDirective '@optional\|@required\|@autoreleasepool' display
syn keyword objcType IBOutlet IBAction Method __block instancetype
syn keyword objcType __unsafe_unretained __bridge __bridge_retained __bridge_transfer __autoreleasing __strong __weak
syn keyword objcType OFUnichar OFChar16 OFChar32 OFComparisonResult
syn keyword objcType OFComparator OFByteOrder OFRange OFPoint OFRect OFSize
syn keyword objcType OFVector3D OFVector4D
syn keyword objcType OFPlainMutex OFPlainRecursiveMutex
syn keyword objcType OFStringEncoding OFTimeInterval
syn keyword objcType OFResolverResult OFStreamOffset OFSeekWhence
syn keyword objcType OFPlainCondition OFSocketHandle OFSpinlock OFTLSKey
syn keyword objcType OFPlainThread OFOptionsParserOption OFHTTPRequestMethod
syn keyword objcType OFHTTPRequestProtocolVersion OFSocketAddress
syn keyword objcType OFFileAttributeKey OFFileType OFFileAttributes
syn keyword objcType OFMutableFileAttributes OFNotificationName
syn keyword objcConstant YES NO TRUE FALSE
syn region objcImp start='@implementation' end='@end' transparent
syn region objcHeader start='@interface' end='@end' transparent
syn match objcSubclass '\(@implementation\|@interface\)\@<=\s*\k\+' display contained containedin=objcImp,objcHeader
syn match objcSuperclass '\(@\(implementation\|interface\)\s*\k\+\s*:\)\@<=\s*\k*' display contained containedin=objcImp,objcHeader
" Matches "bar" in "[NSObject bar]" or "bar" in "[[NSObject foo: baz] bar]",
" but NOT "bar" in "[NSObject foo: bar]".
syn match objcMessageName '\%#=1\(\[\s*\k\+\s\+\|\]\s*\)\@<=\k*\s*\]'me=e-1 display contained containedin=objcMessage
" Matches "foo:" in "[NSObject foo: bar]" or "[[NSObject new] foo: bar]"
syn match objcMessageColon '\(\_\S\+\_\s\+\)\@<=\k\+\s*:' display contained containedin=objcMessage
" Matches "foo:" in above
syn match objcMessageArg ')\@<=\s*\k\+' contained containedin=objcMessage
" Don't match these in this strange group for edge cases...
syn cluster cMultiGroup add=objcMessageColon,objcMessageName
hi link objcMessageArg Identifier
hi link objcMessageName objcMessageArg
hi link objcMessageColon objcMessageName
hi link objcMessageReceiver Special
hi link objcSubclass objcMethodName
hi link objcSuperclass String
hi link objcError Error