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