mirror of
https://github.com/leafOfTree/vim-vue-plugin.git
synced 2025-12-08 13:44:46 +08:00
Add new 'initial indent' option
This commit is contained in:
@@ -24,7 +24,7 @@ function! s:MergeDefaultWithConfig(user)
|
||||
\'attribute': 0,
|
||||
\'keyword': 0,
|
||||
\'foldexpr': 0,
|
||||
\'init_indent': expand('%:e') == 'wpy',
|
||||
\'initial_indent': [],
|
||||
\'debug': 0,
|
||||
\}
|
||||
|
||||
@@ -131,7 +131,9 @@ endfunction
|
||||
|
||||
function! s:SyntaxAtEnd(lnum)
|
||||
let syns = s:SyntaxListAtEnd(a:lnum)
|
||||
return empty(syns) ? '' : get(syns, 0, '')
|
||||
let syntax_name = empty(syns) ? '' : get(syns, 0, '')
|
||||
let syntax_name = s:RemoveCssPrefix(syntax_name)
|
||||
return syntax_name
|
||||
endfunction
|
||||
|
||||
function! vue#SyntaxSecondAtEnd(lnum)
|
||||
@@ -141,7 +143,9 @@ endfunction
|
||||
|
||||
function! s:GetBlockTag(lnum)
|
||||
let syntax_name = s:SyntaxAtEnd(a:lnum)
|
||||
let tag = tolower(matchstr(syntax_name, '\u\U\+\zeBlock'))
|
||||
let tag = matchstr(syntax_name, '\(\u\U\+\)\+\zeBlock')
|
||||
let tag = substitute(tag, '\U\zs\(\u\)', "-\\1", 'g')
|
||||
let tag = tolower(tag)
|
||||
return tag
|
||||
endfunction
|
||||
|
||||
@@ -157,21 +161,22 @@ function! vue#AlterSyntaxForEmmetVim(name, syntax)
|
||||
endfunction
|
||||
|
||||
" Remove css prefix
|
||||
function! s:RemoveCssPrefix(syntax_name, syntax)
|
||||
let syntax = a:syntax
|
||||
function! s:RemoveCssPrefix(syntax_name)
|
||||
let syntax_name = a:syntax_name
|
||||
let syntax = matchstr(syntax_name, '^\U\+')
|
||||
if syntax == 'css'
|
||||
let next_syntax = tolower(matchstr(a:syntax_name, '^\U\+\zs\u\U\+'))
|
||||
let next_syntax = tolower(matchstr(syntax_name, '^\U\+\zs\u\U\+'))
|
||||
if count(s:style_with_css_prefix, next_syntax)
|
||||
let syntax = next_syntax
|
||||
let syntax_name = matchstr(syntax_name, '^\U\+\zs.*')
|
||||
let syntax_name = tolower(syntax_name[0]).syntax_name[1:]
|
||||
endif
|
||||
endif
|
||||
return syntax
|
||||
return syntax_name
|
||||
endfunction
|
||||
|
||||
function! s:GetBlockSyntax(lnum)
|
||||
let syntax_name = s:SyntaxAtEnd(a:lnum)
|
||||
let syntax = matchstr(syntax_name, '^\U\+')
|
||||
let syntax = s:RemoveCssPrefix(syntax_name, syntax)
|
||||
return syntax
|
||||
endfunction
|
||||
|
||||
@@ -196,9 +201,7 @@ endfunction
|
||||
function! vue#LoadSyntax(group, syntax)
|
||||
let group = a:group
|
||||
let syntax = a:syntax
|
||||
let full_syntax_type = type(s:full_syntax)
|
||||
if (full_syntax_type == v:t_list && count(s:full_syntax, syntax))
|
||||
\ || (full_syntax_type == v:t_string && s:full_syntax == syntax)
|
||||
if s:IncludeOrEqual(s:full_syntax, syntax)
|
||||
call vue#LoadFullSyntax(group, syntax)
|
||||
else
|
||||
let loaded = vue#LoadDefaultSyntax(group, syntax)
|
||||
@@ -272,6 +275,18 @@ function! vue#GetSyntaxList(config_syntax)
|
||||
return syntax_list
|
||||
endfunction
|
||||
|
||||
function! s:IncludeOrEqual(listOrString, item)
|
||||
let listOrString = a:listOrString
|
||||
let item = a:item
|
||||
let type = type(listOrString)
|
||||
return (type == v:t_list && count(listOrString, item))
|
||||
\ || (type == v:t_string && listOrString == item)
|
||||
endfunction
|
||||
|
||||
function! vue#IncludeOrEqual(listOrString, item)
|
||||
return s:IncludeOrEqual(a:listOrString, a:item)
|
||||
endfunction
|
||||
|
||||
function! s:ModifySyntaxOrder(syntax_list)
|
||||
let syntax_list = a:syntax_list
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ function! s:Init()
|
||||
""" Configs
|
||||
let s:config = vue#GetConfig('config', {})
|
||||
let s:config_syntax = s:config.syntax
|
||||
let s:enable_init_indent = s:config.init_indent
|
||||
let s:initial_indent = s:config.initial_indent
|
||||
|
||||
""" Variables
|
||||
let s:indent = {}
|
||||
@@ -131,14 +131,15 @@ function! s:AdjustBlockIndent(syntax, ind)
|
||||
return ind
|
||||
endfunction
|
||||
|
||||
function! s:CheckInitIndent(tag, syntax, ind)
|
||||
function! s:CheckInitialIndent(tag, syntax, ind)
|
||||
let ind = a:ind
|
||||
let curline = getline(v:lnum)
|
||||
let add = 0
|
||||
|
||||
let add = s:enable_init_indent
|
||||
\&& ind == 0
|
||||
\&& count(['style', 'script'], a:tag) == 1
|
||||
\&& curline !~ s:block_tag
|
||||
if ind == 0 && getline(v:lnum) !~ s:block_tag
|
||||
let add = vue#IncludeOrEqual(s:initial_indent, a:tag.'.'.a:syntax)
|
||||
\ || vue#IncludeOrEqual(s:initial_indent, a:tag)
|
||||
\ || vue#IncludeOrEqual(s:initial_indent, a:syntax)
|
||||
endif
|
||||
if add
|
||||
call vue#LogWithLnum('add initial indent')
|
||||
let ind = &sw
|
||||
@@ -284,7 +285,7 @@ function! GetVueIndent()
|
||||
call vue#LogWithLnum('context, ind '.ind)
|
||||
endif
|
||||
|
||||
let ind = s:CheckInitIndent(tag, syntax, ind)
|
||||
let ind = s:CheckInitialIndent(tag, syntax, ind)
|
||||
return ind
|
||||
endfunction
|
||||
|
||||
|
||||
@@ -5,7 +5,15 @@
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
let s:config = vue#GetConfig('config', {})
|
||||
let s:keyword = s:config.keyword
|
||||
let s:init_indent = s:config.init_indent
|
||||
let s:initial_indent = s:config.initial_indent
|
||||
|
||||
let s:enable_initial_indent = 0
|
||||
for item in s:initial_indent
|
||||
if match(item, 'script') != -1
|
||||
let s:enable_initial_indent = 1
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
"}}}
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
@@ -23,7 +31,7 @@ if !s:keyword | finish | endif
|
||||
|
||||
let s:vue_keywords = 'name parent functional delimiters comments components directives filters extends mixins inheritAttrs model props propsData data computed watch methods template render renderError inject provide beforeCreate created beforeMount mounted beforeUpdate updated activated deactivated beforeDestroy destroyed setup beforeUnmount unmounted errorCaptured renderTracked renderTriggered'
|
||||
|
||||
let s:indent = &sw * (1 + s:init_indent)
|
||||
let s:indent = &sw * (1 + s:enable_initial_indent)
|
||||
let s:keywords_regexp = '\v^\s{'.s:indent.'}(async )?<('
|
||||
\.join(split(s:vue_keywords, ' '), '|')
|
||||
\.')\ze'
|
||||
|
||||
Reference in New Issue
Block a user