diff --git a/src/etc/vim/syntax/rust.vim b/src/etc/vim/syntax/rust.vim index 26bb0d70417..320f04bb56d 100644 --- a/src/etc/vim/syntax/rust.vim +++ b/src/etc/vim/syntax/rust.vim @@ -15,11 +15,17 @@ if !exists("main_syntax") endif syn keyword rustKeyword alt as assert be bind break -syn keyword rustKeyword check claim cont const copy do else enum export fail -syn keyword rustKeyword fn for if iface impl import in inline lambda let log +syn keyword rustKeyword check claim cont const copy do else export fail +syn keyword rustKeyword for if impl import in inline lambda let log syn keyword rustKeyword loop mod mut mutable native note of prove pure -syn keyword rustKeyword resource ret self syntax to type unchecked +syn keyword rustKeyword ret self syntax to unchecked syn keyword rustKeyword unsafe use while with +" FIXME: Scoped impl's name is also fallen in this category +syn keyword rustKeyword mod iface resource class enum type nextgroup=rustIdentifier skipwhite +syn keyword rustKeyword fn nextgroup=rustFuncName skipwhite + +syn match rustIdentifier "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained +syn match rustFuncName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained " Reserved words syn keyword rustKeyword m32 m64 m128 f80 f16 f128 class trait @@ -33,25 +39,35 @@ syn match rustItemPath "\(\w\|::\)\+" syn region rustString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ -"integer number, or floating point number without a dot and with "f". -syn case ignore -syn match rustNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" -"hex number -syn match rustNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" -syn match rustFloat display contained "\d\+f" -"floating point number, with dot, optional exponent -syn match rustFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" -"floating point number, starting with a dot, optional exponent -syn match rustFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" -"floating point number, without dot, with exponent -syn match rustFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" +" Number literals +syn match rustNumber display "\<[0-9][0-9_]*\>" +syn match rustNumber display "\<[0-9][0-9_]*\(u\|u8\|u16\|u32\|u64\)\>" +syn match rustNumber display "\<[0-9][0-9_]*\(i8\|i16\|i32\|i64\)\>" -syn case match +syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\>" +syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(u\|u8\|u16\|u32\|u64\)\>" +syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(i8\|i16\|i32\|i64\)\>" +syn match rustBinNumber display "\<0b[01_]\+\>" +syn match rustBinNumber display "\<0b[01_]\+\(u\|u8\|u16\|u32\|u64\)\>" +syn match rustBinNumber display "\<0b[01_]\+\(i8\|i16\|i32\|i64\)\>" + +syn match rustFloat display "\<[0-9][0-9_]*\(f\|f32\|f64\)\>" +syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\>" +syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>" +syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\>" +syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\(f\|f32\|f64\)\>" +syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\>" +syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>" syn match rustCharacter "'\([^'\\]\|\\\(['nrt\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'" -syn region rustComment start="/\*" end="\*/" contains=rustComment -syn region rustComment start="//" skip="\\$" end="$" keepend +syn region rustComment start="/\*" end="\*/" contains=rustComment,rustTodo +syn region rustComment start="//" skip="\\$" end="$" contains=rustTodo keepend + +syn keyword rustTodo TODO FIXME XXX NB + +hi def link rustHexNumber rustNumber +hi def link rustBinNumber rustNumber hi def link rustString String hi def link rustCharacter Character @@ -59,9 +75,12 @@ hi def link rustNumber Number hi def link rustBoolean Boolean hi def link rustFloat Float hi def link rustKeyword Keyword +hi def link rustIdentifier Identifier +hi def link rustFuncName Function hi def link rustComment Comment hi def link rustMacro Macro hi def link rustType Type +hi def link rustTodo Todo syn sync minlines=200 syn sync maxlines=500