mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
vim-patch:9.1.0386: filetype: stylus files not recognized
Problem: filetype: stylus files not recognized
Solution: Detect '*.styl' and '*.stylus' as stylus filetype,
include indent, filetype and syntax plugin
(Philip H)
closes: vim/vim#14656
2d919d2744
Co-authored-by: Philip H <47042125+pheiduck@users.noreply.github.com>
This commit is contained in:
parent
e778e01161
commit
9e2f378b6d
54
runtime/ftplugin/stylus.vim
Normal file
54
runtime/ftplugin/stylus.vim
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
" Vim filetype plugin
|
||||||
|
" Language: Stylus
|
||||||
|
" Maintainer: Marc Harter
|
||||||
|
" Credits: Tim Pope
|
||||||
|
|
||||||
|
" Only do this when not done yet for this buffer
|
||||||
|
if exists("b:did_ftplugin")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:save_cpo = &cpo
|
||||||
|
set cpo-=C
|
||||||
|
|
||||||
|
" Define some defaults in case the included ftplugins don't set them.
|
||||||
|
let s:undo_ftplugin = ""
|
||||||
|
let s:browsefilter = "All Files (*.*)\t*.*\n"
|
||||||
|
|
||||||
|
runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
|
||||||
|
unlet! b:did_ftplugin
|
||||||
|
|
||||||
|
" Override our defaults if these were set by an included ftplugin.
|
||||||
|
if exists("b:undo_ftplugin")
|
||||||
|
let s:undo_ftplugin = b:undo_ftplugin
|
||||||
|
unlet b:undo_ftplugin
|
||||||
|
endif
|
||||||
|
if exists("b:browsefilter")
|
||||||
|
let s:browsefilter = b:browsefilter
|
||||||
|
unlet b:browsefilter
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Change the browse dialog on Win32 to show mainly Styl-related files
|
||||||
|
if has("gui_win32")
|
||||||
|
let b:browsefilter="Stylus Files (*.styl)\t*.styl\n" . s:browsefilter
|
||||||
|
endif
|
||||||
|
|
||||||
|
setlocal comments= commentstring=//\ %s
|
||||||
|
setlocal suffixesadd=.styl
|
||||||
|
setlocal formatoptions+=r
|
||||||
|
|
||||||
|
" Add '-' and '#' to the what makes up a keyword.
|
||||||
|
" This means that 'e' and 'w' work properly now, for properties
|
||||||
|
" and valid variable names.
|
||||||
|
setl iskeyword+=#,-
|
||||||
|
|
||||||
|
" Add a Stylus command (to see if it's valid)
|
||||||
|
command -buffer Stylus !clear; cat % |stylus
|
||||||
|
|
||||||
|
|
||||||
|
let b:undo_ftplugin = "setl sua< isk< cms< com< fo< "
|
||||||
|
\ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
|
||||||
|
|
||||||
|
let &cpo = s:save_cpo
|
||||||
|
|
||||||
|
" vim:set sw=2:
|
121
runtime/indent/stylus.vim
Normal file
121
runtime/indent/stylus.vim
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: Stylus
|
||||||
|
" Maintainer: Marc Harter
|
||||||
|
" Last Change: 2010 May 21
|
||||||
|
" Based On: sass.vim from Tim Pope
|
||||||
|
"
|
||||||
|
if exists("b:did_indent")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal indentexpr=GetStylusIndent()
|
||||||
|
setlocal indentkeys=o,O,*<Return>,},],0),!^F
|
||||||
|
let b:undo_indent = "setl indentexpr< indentkeys<"
|
||||||
|
|
||||||
|
if exists("*GetStylusIndent") " only define once
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
function s:prevnonblanknoncomment(lnum)
|
||||||
|
let lnum = a:lnum
|
||||||
|
while lnum > 1
|
||||||
|
let lnum = prevnonblank(lnum)
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~ '\*/'
|
||||||
|
while lnum > 1 && line !~ '/\*'
|
||||||
|
let lnum -= 1
|
||||||
|
endwhile
|
||||||
|
if line =~ '^\s*/\*'
|
||||||
|
let lnum -= 1
|
||||||
|
else
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endwhile
|
||||||
|
return lnum
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function s:count_braces(lnum, count_open)
|
||||||
|
let n_open = 0
|
||||||
|
let n_close = 0
|
||||||
|
let line = getline(a:lnum)
|
||||||
|
let pattern = '[{}]'
|
||||||
|
let i = match(line, pattern)
|
||||||
|
while i != -1
|
||||||
|
if synIDattr(synID(a:lnum, i + 1, 0), 'name') !~ 'css\%(Comment\|StringQ\{1,2}\)'
|
||||||
|
if line[i] == '{'
|
||||||
|
let n_open += 1
|
||||||
|
elseif line[i] == '}'
|
||||||
|
if n_open > 0
|
||||||
|
let n_open -= 1
|
||||||
|
else
|
||||||
|
let n_close += 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let i = match(line, pattern, i + 1)
|
||||||
|
endwhile
|
||||||
|
return a:count_open ? n_open : n_close
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" function CheckCSSIndent()
|
||||||
|
" let line = getline(v:lnum)
|
||||||
|
" if line =~ '^\s*\*'
|
||||||
|
" return cindent(v:lnum)
|
||||||
|
" endif
|
||||||
|
"
|
||||||
|
" let pnum = s:prevnonblanknoncomment(v:lnum - 1)
|
||||||
|
" if pnum == 0
|
||||||
|
" return 0
|
||||||
|
" endif
|
||||||
|
|
||||||
|
function! GetStylusIndent()
|
||||||
|
let line = getline(v:lnum)
|
||||||
|
if line =~ '^\s*\*'
|
||||||
|
return cindent(v:lnum)
|
||||||
|
endif
|
||||||
|
|
||||||
|
let pnum = s:prevnonblanknoncomment(v:lnum - 1)
|
||||||
|
if pnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let lnum = prevnonblank(v:lnum-1)
|
||||||
|
if lnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
let pline = getline(pnum)
|
||||||
|
|
||||||
|
if pline =~ '[}{]'
|
||||||
|
return indent(pnum) + s:count_braces(pnum, 1) * &sw - s:count_braces(v:lnum, 0) * &sw
|
||||||
|
endif
|
||||||
|
|
||||||
|
let line = substitute(getline(lnum),'[\s()]\+$','','') " get last line strip ending whitespace
|
||||||
|
let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','') " get current line, trimmed
|
||||||
|
let lastcol = strlen(line) " get last col in prev line
|
||||||
|
let line = substitute(line,'^\s\+','','') " then remove preceeding whitespace
|
||||||
|
let indent = indent(lnum) " get indent on prev line
|
||||||
|
let cindent = indent(v:lnum) " get indent on current line
|
||||||
|
let increase = indent + &sw " increase indent by the shift width
|
||||||
|
if indent == indent(lnum)
|
||||||
|
let indent = cindent <= indent ? indent : increase
|
||||||
|
endif
|
||||||
|
|
||||||
|
let group = synIDattr(synID(lnum,lastcol,1),'name')
|
||||||
|
|
||||||
|
" if group !~? 'css.*' && line =~? ')\s*$' " match user functions
|
||||||
|
" return increase
|
||||||
|
if group =~? '\v^%(cssTagName|cssClassName|cssIdentifier|cssSelectorOp|cssSelectorOp2|cssBraces|cssAttributeSelector|cssPseudo|stylusId|stylusClass)$'
|
||||||
|
return increase
|
||||||
|
elseif (group == 'stylusUserFunction') && (indent(lnum) == '0') " mixin definition
|
||||||
|
return increase
|
||||||
|
else
|
||||||
|
return indent
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" vim:set sw=2;
|
@ -1015,6 +1015,8 @@ local extension = {
|
|||||||
mata = 'stata',
|
mata = 'stata',
|
||||||
ado = 'stata',
|
ado = 'stata',
|
||||||
stp = 'stp',
|
stp = 'stp',
|
||||||
|
styl = 'stylus',
|
||||||
|
stylus = 'stylus',
|
||||||
quark = 'supercollider',
|
quark = 'supercollider',
|
||||||
sface = 'surface',
|
sface = 'surface',
|
||||||
svelte = 'svelte',
|
svelte = 'svelte',
|
||||||
|
61
runtime/syntax/stylus.vim
Normal file
61
runtime/syntax/stylus.vim
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
" Language: Stylus
|
||||||
|
" Maintainer: Hsiaoming Yang <lepture@me.com>, Marc Harter
|
||||||
|
" Filenames: *.styl, *.stylus
|
||||||
|
" Based On: Tim Pope (sass.vim)
|
||||||
|
" Created: Dec 14, 2011
|
||||||
|
" Modified: Apr 29, 2024
|
||||||
|
|
||||||
|
if main_syntax == "css"
|
||||||
|
syn sync minlines=10
|
||||||
|
endif
|
||||||
|
|
||||||
|
" let b:current_syntax = "css"
|
||||||
|
"
|
||||||
|
if main_syntax == 'css'
|
||||||
|
unlet main_syntax
|
||||||
|
endif
|
||||||
|
|
||||||
|
syn case ignore
|
||||||
|
|
||||||
|
syn cluster stylusCssSelectors contains=cssTagName,cssSelector,cssPseudo
|
||||||
|
syn cluster stylusCssValues contains=cssValueLength,cssValueInteger,cssValueNumber,cssValueAngle,cssValueTime,cssValueFrequency,cssColorVal,cssCommonVal,cssFontVal,cssListVal,cssTextVal,cssVisualVal,cssBorderVal,cssBackgroundVal,cssFuncVal,cssAdvancedVal
|
||||||
|
syn cluster stylusCssProperties contains=cssProp,cssBackgroundProp,cssTableProp,cssBorderProp,cssFontProp,cssColorProp,cssBoxProp,cssTextProp,cssListProp,cssVisualProp,cssAdvancedProp,cssCommonProp,cssSpecialProp
|
||||||
|
|
||||||
|
syn match stylusVariable "$\?[[:alnum:]_-]\+"
|
||||||
|
syn match stylusVariableAssignment "\%([[:alnum:]_-]\+\s*\)\@<==" nextgroup=stylusCssAttribute,stylusVariable skipwhite
|
||||||
|
|
||||||
|
syn match stylusProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+:" contains=@stylusCssProperties,@stylusCssSelectors skipwhite nextgroup=stylusCssAttribute contained containedin=cssDefineBlock
|
||||||
|
syn match stylusProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+[ :]\|:[[:alnum:]-]\+\)"hs=s+1 contains=@stylusCssProperties,@stylusCssSelectors skipwhite nextgroup=stylusCssAttribute
|
||||||
|
syn match stylusProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=@stylusCssProperties,@stylusCssSelectors skipwhite nextgroup=stylusCssAttribute
|
||||||
|
|
||||||
|
syn match stylusCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@stylusCssValues,cssImportant,stylusFunction,stylusVariable,stylusControl,stylusUserFunction,stylusInterpolation,cssString,stylusComment,cssComment
|
||||||
|
|
||||||
|
syn match stylusInterpolation %{[[:alnum:]_-]\+}%
|
||||||
|
|
||||||
|
syn match stylusFunction "\<\%(red\|green\|blue\|alpha\|dark\|light\)\>(\@=" contained
|
||||||
|
syn match stylusFunction "\<\%(hue\|saturation\|lightness\|push\|unshift\|typeof\|unit\|match\)\>(\@=" contained
|
||||||
|
syn match stylusFunction "\<\%(hsla\|hsl\|rgba\|rgb\|lighten\|darken\)\>(\@=" contained
|
||||||
|
syn match stylusFunction "\<\%(abs\|ceil\|floor\|round\|min\|max\|even\|odd\|sum\|avg\|sin\|cos\|join\)\>(\@=" contained
|
||||||
|
syn match stylusFunction "\<\%(desaturate\|saturate\|invert\|unquote\|quote\|s\)\>(\@=" contained
|
||||||
|
syn match stylusFunction "\<\%(operate\|length\|warn\|error\|last\|p\|\)\>(\@=" contained
|
||||||
|
syn match stylusFunction "\<\%(opposite-position\|image-size\|add-property\)\>(\@=" contained
|
||||||
|
|
||||||
|
syn keyword stylusVariable null true false arguments
|
||||||
|
syn keyword stylusControl if else unless for in return
|
||||||
|
|
||||||
|
syn match stylusImport "@\%(import\|require\)" nextgroup=stylusImportList
|
||||||
|
syn match stylusImportList "[^;]\+" contained contains=cssString.*,cssMediaType,cssURL
|
||||||
|
|
||||||
|
syn match stylusAmpersand "&"
|
||||||
|
syn match stylusClass "[[:alnum:]_-]\+" contained
|
||||||
|
syn match stylusClassChar "\.[[:alnum:]_-]\@=" nextgroup=stylusClass
|
||||||
|
syn match stylusEscape "^\s*\zs\\"
|
||||||
|
syn match stylusId "[[:alnum:]_-]\+" contained
|
||||||
|
syn match stylusIdChar "#[[:alnum:]_-]\@=" nextgroup=stylusId
|
||||||
|
|
||||||
|
syn region stylusComment start="//" end="$" contains=cssTodo,@Spell fold
|
||||||
|
|
||||||
|
let b:current_syntax = "stylus"
|
||||||
|
|
||||||
|
" vim:set sw=2:
|
@ -687,6 +687,7 @@ func s:GetFilenameChecks() abort
|
|||||||
\ 'starlark': ['file.ipd', 'file.star', 'file.starlark'],
|
\ 'starlark': ['file.ipd', 'file.star', 'file.starlark'],
|
||||||
\ 'stata': ['file.ado', 'file.do', 'file.imata', 'file.mata'],
|
\ 'stata': ['file.ado', 'file.do', 'file.imata', 'file.mata'],
|
||||||
\ 'stp': ['file.stp'],
|
\ 'stp': ['file.stp'],
|
||||||
|
\ 'stylus': ['a.styl', 'file.stylus'],
|
||||||
\ 'sudoers': ['any/etc/sudoers', 'sudoers.tmp', '/etc/sudoers', 'any/etc/sudoers.d/file'],
|
\ 'sudoers': ['any/etc/sudoers', 'sudoers.tmp', '/etc/sudoers', 'any/etc/sudoers.d/file'],
|
||||||
\ 'supercollider': ['file.quark'],
|
\ 'supercollider': ['file.quark'],
|
||||||
\ 'surface': ['file.sface'],
|
\ 'surface': ['file.sface'],
|
||||||
|
Loading…
Reference in New Issue
Block a user