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