xref: /vim-8.2.3635/runtime/syntax/sass.vim (revision c08ee747)
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