1" Vim syntax file 2" Language: Sass 3" Maintainer: Tim Pope <[email protected]> 4" Filenames: *.sass 5" Last Change: 2019 Dec 05 6 7if exists("b:current_syntax") 8 finish 9endif 10 11runtime! syntax/css.vim 12 13syn case ignore 14 15syn cluster sassCssProperties contains=cssFontProp,cssFontDescriptorProp,cssColorProp,cssTextProp,cssBoxProp,cssGeneratedContentProp,cssPagingProp,cssUIProp,cssRenderProp,cssAuralProp,cssTableProp 16syn cluster sassCssAttributes contains=css.*Attr,sassEndOfLineComment,scssComment,cssValue.*,cssColor,cssURL,sassDefault,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssRenderProp 17 18syn region sassDefinition matchgroup=cssBraces start="{" end="}" contains=TOP 19 20syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition 21syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute 22syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute 23syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation 24syn match sassFlag "!\%(default\|global\|optional\)\>" contained 25syn match sassVariable "$[[:alnum:]_-]\+" 26syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=\%(||\)\==" nextgroup=sassCssAttribute skipwhite 27syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=:" nextgroup=sassCssAttribute skipwhite 28 29syn match sassFunction "\<\%(rgb\|rgba\|red\|green\|blue\|mix\)\>(\@=" contained 30syn match sassFunction "\<\%(hsl\|hsla\|hue\|saturation\|lightness\|adjust-hue\|lighten\|darken\|saturate\|desaturate\|grayscale\|complement\)\>(\@=" contained 31syn match sassFunction "\<\%(alpha\|opacity\|rgba\|opacify\|fade-in\|transparentize\|fade-out\)\>(\@=" contained 32syn match sassFunction "\<\%(unquote\|quote\)\>(\@=" contained 33syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained 34syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained 35 36syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,cssPseudoClass,sassProperty 37 38syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute 39syn match sassMixin "^=" nextgroup=sassMixinName skipwhite 40syn match sassMixin "\%([{};]\s*\|^\s*\)\@<=@mixin" nextgroup=sassMixinName skipwhite 41syn match sassMixing "^\s\+\zs+" nextgroup=sassMixinName 42syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite 43syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend" 44 45syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute 46syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function" nextgroup=sassFunctionName skipwhite 47syn match sassReturn "\%([{};]\s*\|^\s*\)\@<=@return" 48 49syn match sassEscape "^\s*\zs\\" 50syn match sassIdChar "#[[:alnum:]_-]\@=" nextgroup=sassId 51syn match sassId "[[:alnum:]_-]\+" contained 52syn match sassClassChar "\.[[:alnum:]_-]\@=" nextgroup=sassClass 53syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%" nextgroup=sassClass 54syn match sassClass "[[:alnum:]_-]\+" contained 55syn match sassAmpersand "&" 56 57" TODO: Attribute namespaces 58" TODO: Arithmetic (including strings and concatenation) 59 60syn region sassMediaQuery matchgroup=sassMedia start="@media" end="[{};]\@=\|$" contains=sassMediaOperators 61syn keyword sassMediaOperators and not only contained 62syn region sassCharset start="@charset" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType 63syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType 64syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction 65syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction 66syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction 67syn keyword sassFor from to through in contained 68 69syn keyword sassTodo FIXME NOTE TODO OPTIMIZE XXX contained 70syn region sassComment start="^\z(\s*\)//" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 71syn region sassCssComment start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 72syn match sassEndOfLineComment "//.*" contains=sassComment,sassTodo,@Spell 73 74hi def link sassEndOfLineComment sassComment 75hi def link sassCssComment sassComment 76hi def link sassComment Comment 77hi def link sassFlag cssImportant 78hi def link sassVariable Identifier 79hi def link sassFunction Function 80hi def link sassMixing PreProc 81hi def link sassMixin PreProc 82hi def link sassPlaceholder sassClassChar 83hi def link sassExtend PreProc 84hi def link sassFunctionDecl PreProc 85hi def link sassReturn PreProc 86hi def link sassTodo Todo 87hi def link sassCharset PreProc 88hi def link sassMedia PreProc 89hi def link sassMediaOperators PreProc 90hi def link sassInclude Include 91hi def link sassDebug sassControl 92hi def link sassWarn sassControl 93hi def link sassControl PreProc 94hi def link sassFor PreProc 95hi def link sassEscape Special 96hi def link sassIdChar Special 97hi def link sassClassChar Special 98hi def link sassInterpolationDelimiter Delimiter 99hi def link sassAmpersand Character 100hi def link sassId Identifier 101hi def link sassClass Type 102 103let b:current_syntax = "sass" 104 105" vim:set sw=2: 106