xref: /vim-8.2.3635/runtime/syntax/sass.vim (revision c3d2c447)
1" Vim syntax file
2" Language:	Sass
3" Maintainer:	Tim Pope <[email protected]>
4" Filenames:	*.sass
5" Last Change:	2010 Jul 28
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,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:]-]\|#{[^{}]*}\)\+:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
21syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+:\|:[[: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
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,sassCssAttribute,sassProperty
38
39syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
40syn match sassMixin  "^="               nextgroup=sassMixinName
41syn match sassMixin  "^\s*\zs@mixin"    nextgroup=sassMixinName skipwhite
42syn match sassMixing "^\s\+\zs+"        nextgroup=sassMixinName
43syn match sassMixing "^\s\+\zs@include" nextgroup=sassMixinName skipwhite
44syn match sassMixing "\%([{};]\s*\|^\)\@<=@include" nextgroup=sassMixinName skipwhite contained containedin=sassDefinition
45syn match sassExtend "^\s\+\zs@extend"
46
47syn match sassEscape     "^\s*\zs\\"
48syn match sassIdChar     "#[[:alnum:]_-]\@=" nextgroup=sassId
49syn match sassId         "[[:alnum:]_-]\+" contained
50syn match sassClassChar  "\.[[:alnum:]_-]\@=" nextgroup=sassClass
51syn match sassClass      "[[:alnum:]_-]\+" contained
52syn match sassAmpersand  "&"
53
54" TODO: Attribute namespaces
55" TODO: Arithmetic (including strings and concatenation)
56
57syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssURL,cssUnicodeEscape,cssMediaType
58syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction
59syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction
60syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
61syn keyword sassFor from to through contained
62
63syn keyword sassTodo        FIXME NOTE TODO OPTIMIZE XXX contained
64syn region  sassComment     start="^\z(\s*\)//"  end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
65syn region  sassCssComment  start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
66
67hi def link sassCssComment              sassComment
68hi def link sassComment                 Comment
69hi def link sassDefault                 cssImportant
70hi def link sassVariable                Identifier
71hi def link sassFunction                Function
72hi def link sassMixing                  PreProc
73hi def link sassMixin                   PreProc
74hi def link sassExtend                  PreProc
75hi def link sassTodo                    Todo
76hi def link sassInclude                 Include
77hi def link sassDebug                   sassControl
78hi def link sassWarn                    sassControl
79hi def link sassControl                 PreProc
80hi def link sassFor                     PreProc
81hi def link sassEscape                  Special
82hi def link sassIdChar                  Special
83hi def link sassClassChar               Special
84hi def link sassInterpolationDelimiter  Delimiter
85hi def link sassAmpersand               Character
86hi def link sassId                      Identifier
87hi def link sassClass                   Type
88
89let b:current_syntax = "sass"
90
91" vim:set sw=2:
92