if polyglot#init#is_disabled(expand(':p'), 'solidity', 'syntax/solidity.vim') finish endif " Vim syntax file " Language: Solidity " Maintainer: TovarishFin (tovarishFin@gmail.com) " URL: https://github.com/TovarishFin/vim-solidity if exists("b:current_syntax") finish endif syn sync minlines=50 " Common Groups syn match solComma ',' syn keyword solStorageType contained skipempty skipwhite nextgroup=solStorageType,solStorageConst,solStorageImmutable \ public private internal syn keyword solStorageConst contained skipempty skipwhite nextgroup=solStorageType \ constant syn keyword solStorageImmutable contained skipempty skipwhite nextgroup=solStorageType \ immutable syn keyword solFuncStorageType contained \ storage calldata memory syn keyword solPayableType contained \ payable hi def link solStorageType Keyword hi def link solFuncStorageType Keyword hi def link solStorageConst Keyword hi def link solStorageImmutable Keyword hi def link solPayableType Keyword " Common Groups Highlighting hi def link solParens Normal hi def link solComma Normal " Complex Types syn keyword solMapping skipempty skipwhite nextgroup=solMappingParens \ mapping syn region solMappingParens start='(' end=')' contained contains=solValueType,solMapping nextgroup=solStorageType skipempty skipwhite syn keyword solEnum nextgroup=solEnumBody skipwhite skipempty \ enum syn region solEnumBody start='(' end=')' contained contains=solComma,solValueType syn keyword solStruct nextgroup=solStructBody skipempty skipwhite \ struct syn region solStructBody start='{' end='}' contained contains=solComma,solValueType,solStruct,solEnum,solMapping syn match solCustomType skipempty skipwhite nextgroup=solStorageType,solStorageConst,solStorageImmutable \ '\v[a-zA-Z_][a-zA-Z0-9_]*\s*' hi def link solMapping Define hi def link solEnum Define hi def link solStruct Define " Numbers syntax match solNumber '\v0x\x+>' syntax match solNumber '\v\c<%(\d+%(e[+-]=\d+)=|0b[01]+|0o\o+|0x\x+)>' syntax match solNumber '\v\c<%(\d+.\d+|\d+.|.\d+)%(e[+-]=\d+)=>' " Strings syntax region solString start=/\v"/ skip=/\v\\./ end=/\v"/ syntax region solString start="\v'" skip="\v\\." end="\v'" hi def link solNumber Number hi def link solString String " Operators syn match solOperator '\v\!' syn match solOperator '\v\|' syn match solOperator '\v\&' syn match solOperator '\v\%' syn match solOperator '\v\~' syn match solOperator '\v\^' syn match solOperator '\v\*' syn match solOperator '\v/' syn match solOperator '\v\+' syn match solOperator '\v-' syn match solOperator '\v\?' syn match solOperator '\v\:' syn match solOperator '\v\;' syn match solOperator '\v\>' syn match solOperator '\v\<' syn match solOperator '\v\>\=' syn match solOperator '\v\<\=' syn match solOperator '\v\=' syn match solOperator '\v\*\=' syn match solOperator '\v/\=' syn match solOperator '\v\+\=' syn match solOperator '\v-\=' hi def link solOperator Operator " Functions syn keyword solConstructor nextgroup=solFuncParam skipwhite skipempty \ constructor syn keyword solFunction nextgroup=solFuncName,solFuncParam skipwhite skipempty \ function syn keyword solFallback nextgroup=solFuncParam skipwhite skipempty \ fallback syn keyword solReceive nextgroup=solFuncParam skipwhite skipempty \ receive syn match solFuncName contained nextgroup=solFuncParam skipwhite skipempty \ '\v<[a-zA-Z_][0-9a-zA-Z_]*' syn region solFuncParam \ contained \ contains=solComma,solValueType,solFuncStorageType \ nextgroup=solFuncModCustom,solFuncModifier,solFuncReturn,solFuncBody \ skipempty \ skipwhite \ start='(' \ end=')' syn keyword solFuncModifier contained nextgroup=solFuncModifier,solFuncModCustom,solFuncReturn,solFuncBody skipwhite skipempty \ external internal payable public pure view private constant override virtual syn match solFuncModCustom contained nextgroup=solFuncModifier,solFuncModCustom,solFuncReturn,solFuncBody,solFuncModParens skipempty skipwhite \ '\v<[a-zA-Z_][0-9a-zA-Z_]*' syn region solFuncModParens contained contains=solString,solFuncCall,solConstant,solNumber,solTypeCast,solComma nextgroup=solFuncReturn,solFuncModifier,solFuncModCustom,solFuncBody skipempty skipwhite transparent \ start='(' \ end=')' syn keyword solFuncReturn contained nextgroup=solFuncRetParens skipwhite skipempty returns syn region solFuncRetParens contains=solValueType,solFuncStorageType nextgroup=solFuncBody skipempty skipwhite \ start='(' \ end=')' syn region solFuncBody contained contains=solDestructure,solComment,solAssemblyBlock,solEmitEvent,solTypeCast,solMethod,solValueType,solConstant,solKeyword,solRepeat,solLabel,solException,solStructure,solFuncStorageType,solOperator,solNumber,solString,solFuncCall,solIf,solElse,solLoop skipempty skipwhite \ start='{' \ end='}' syn match solFuncCall contained skipempty skipwhite nextgroup=solCallOptions,solFuncCallParens \ '\v%(%(|||||
||)\s*)@/ containedin=solModifierBody hi def link solModifier Define hi def link solModifierName Function hi def link solModifierInsert Function " Contracts, Libraries, Interfaces syn match solAbstract /\/ nextgroup=SolContract skipwhite syn match solContract /\<\%(contract\|library\|interface\)\>/ nextgroup=solContractName skipwhite syn match solContractName /\<[a-zA-Z_][0-9a-zA-Z_]*/ contained nextgroup=solContractParent skipwhite syn region solContractParent start=/\/ end='{' contained contains=solContractName,solComma,solInheritor syn match solInheritor /\/ contained syn region solLibUsing start=/\/ end=/\/ contains=solLibName syn match solLibName /[a-zA-Z_][0-9a-zA-Z_]*\s*\zefor/ contained hi def link solAbstract Special hi def link solContract Define hi def link solContractName Function hi def link solInheritor Keyword hi def link solLibUsing Special hi def link solLibName Type " Events syn match solEvent /\/ nextgroup=solEventName,solEventParams skipwhite syn match solEventName /\<[a-zA-Z_][0-9a-zA-Z_]*/ nextgroup=solEventParam contained skipwhite syn region solEventParam start='(' end=')' contains=solComma,solValueType,solEventParamMod,other contained skipwhite skipempty syn match solEventParamMod /\(\\|\\)/ contained syn keyword solEmitEvent emit hi def link solEvent Define hi def link solEventName Function hi def link solEventParamMod Keyword hi def link solEmitEvent Special " Constants syn keyword solConstant true false wei szabo finney ether seconds minutes hours days weeks years now super syn keyword solConstant block msg now tx this abi hi def link solConstant Constant " TODO: add syntax for 'override' and 'abstract' 'try' 'immutable' " Reserved keywords https://solidity.readthedocs.io/en/v0.5.7/miscellaneous.html#reserved-keywords syn keyword solReserved after alias apply auto case catch copyof default syn keyword solReserved define final implements in inline let macro match syn keyword solReserved mutable null of partial promise reference relocatable syn keyword solReserved sealed sizeof static supports switch typedef typeof unchecked hi def link solReserved Error " Pragma syn keyword solPragma pragma syn match solPragmaVersion /\(pragma\s*\)\@<=\/ syn match solPragmaExp /\(pragma\s*\)\@<=\/ syn match solPragmaABICoder /\(pragma\s*\)\@<=\/ hi def link solPragma PreProc hi def link solPragmaVersion PreProc hi def link solPragmaExp PreProc hi def link solPragmaABICoder PreProc " Assembly syn keyword solAssemblyName assembly contained syn region solAssemblyBlock start=/\/ contained syn keyword solAssemblyConst pc msize gas address caller callvalue calldatasize codesize contained syn keyword solAssemblyConst returndatasize origin gasprice coinbase timestamp number difficulty gaslimit contained syn keyword solAssemblyCond if else contained syn region solAssmNestedBlock start=/\(assembly\s*\)\@/ nextgroup=solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ nextgroup=solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ nextgroup=solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ nextgroup=solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ nextgroup=solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ nextgroup=solPayableType,solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ nextgroup=solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ nextgroup=solStorageType,solStorageConst,solStorageImmutable skipwhite skipempty syn match solValueType /\/ contained skipwhite skipempty nextgroup=solIfParens syn match solElse /\/ contained skipwhite skipempty nextgroup=solIf,solIfBlock syn region solIfParens start=/(/ end=/)/ contained nextgroup=solIfBlock skipwhite skipempty transparent syn region solIfBlock start=/{/ end=/}/ contained nextgroup=solElse skipwhite skipempty transparent hi def link solIf Keyword hi def link solElse Keyword " Loops syn match solLoop /\(\\|\\)/ contained skipwhite skipempty nextgroup=solLoopParens syn region solLoopParens start=/(/ end=/)/ contained nextgroup=solLoopBlock skipwhite skipempty transparent syn region solLoopBlock start=/{/ end=/}/ contained skipwhite skipempty transparent hi def link solLoop Keyword " Comments syn keyword solTodo TODO FIXME XXX TBD contained syn region solComment start=/\/\// end=/$/ contains=solTodo syn region solComment start=/\/\*/ end=/\*\// contains=solTodo hi def link solTodo Todo hi def link solComment Comment " Natspec syn match solNatspecTag /@dev\>/ contained syn match solNatspecTag /@title\>/ contained syn match solNatspecTag /@author\>/ contained syn match solNatspecTag /@notice\>/ contained syn match solNatspecTag /@param\>/ contained syn match solNatspecTag /@return\>/ contained syn match solNatspecParam /\(@param\s*\)\@<=\<[a-zA-Z_][0-9a-zA-Z_]*/ syn region solNatspecBlock start=/\/\/\// end=/$/ contains=solTodo,solNatspecTag,solNatspecParam syn region solNatspecBlock start=/\/\*\{2}/ end=/\*\// contains=solTodo,solNatspecTag,solNatspecParam hi def link solNatspecTag SpecialComment hi def link solNatspecBlock Comment hi def link solNatspecParam Define