Set indentation only locally, fixes #564

This commit is contained in:
Adam Stankiewicz
2020-09-27 12:05:29 +02:00
parent 33b86476b6
commit 7ec499c19f
7 changed files with 36 additions and 15 deletions

View File

@@ -276,12 +276,14 @@ function! elixir#indent#handle_inside_block(context)
" hack - handle do: better " hack - handle do: better
let block_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip() || getline(line('.')) =~ 'do:'", max([0, a:context.lnum - g:elixir_indent_max_lookbehind])) let block_info = searchpairpos(start_pattern, '', end_pattern, 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip() || getline(line('.')) =~ 'do:'", max([0, a:context.lnum - g:elixir_indent_max_lookbehind]))
let block_start_lnum = block_info[0] let block_start_lnum = block_info[0]
call s:debug("block_start_lnum=" . block_start_lnum)
let block_start_col = block_info[1] let block_start_col = block_info[1]
if block_start_lnum != 0 || block_start_col != 0 if block_start_lnum != 0 || block_start_col != 0
let block_text = getline(block_start_lnum) let block_text = getline(block_start_lnum)
let block_start_char = block_text[block_start_col - 1] let block_start_char = block_text[block_start_col - 1]
call s:debug("block_start_char=" . block_start_char)
let never_match = '\(a\)\@=b' let never_match = ''
let config = { let config = {
\'f': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match}, \'f': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match},
\'c': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match}, \'c': {'aligned_clauses': s:keyword('end'), 'pattern_match_clauses': never_match},
@@ -293,17 +295,25 @@ function! elixir#indent#handle_inside_block(context)
\'(': {'aligned_clauses': ')', 'pattern_match_clauses': never_match} \'(': {'aligned_clauses': ')', 'pattern_match_clauses': never_match}
\} \}
" if `with` clause...
if block_start_char == 'w' if block_start_char == 'w'
call s:debug("testing s:handle_with") call s:debug("testing s:handle_with")
return s:handle_with(block_start_lnum, block_start_col, a:context) return s:handle_with(block_start_lnum, block_start_col, a:context)
else else
let block_config = config[block_start_char] let block_config = config[block_start_char]
" if aligned clause (closing tag/`else` clause/etc...) then indent this
" at the same level as the block open tag (e.g. `if`/`case`/etc...)
if s:starts_with(a:context, block_config.aligned_clauses) if s:starts_with(a:context, block_config.aligned_clauses)
call s:debug("clause") call s:debug("clause")
return indent(block_start_lnum) return indent(block_start_lnum)
else
if block_config.pattern_match_clauses == never_match
let relative_lnum = block_start_lnum
else else
let clause_lnum = searchpair(block_config.pattern_match_clauses, '', '*', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", block_start_lnum) let clause_lnum = searchpair(block_config.pattern_match_clauses, '', '*', 'bnW', "line('.') == " . line('.') . " || elixir#indent#searchpair_back_skip()", block_start_lnum)
call s:debug("clause_lum=" . clause_lnum)
let relative_lnum = max([clause_lnum, block_start_lnum]) let relative_lnum = max([clause_lnum, block_start_lnum])
end
call s:debug("pattern matching relative to lnum " . relative_lnum) call s:debug("pattern matching relative to lnum " . relative_lnum)
return s:do_handle_pattern_match_block(relative_lnum, a:context) return s:do_handle_pattern_match_block(relative_lnum, a:context)
endif endif

View File

@@ -596,7 +596,7 @@ if !has_key(s:disabled_packages, 'autoindent')
if line[0] == "\t" if line[0] == "\t"
setlocal noexpandtab setlocal noexpandtab
let &shiftwidth=&tabstop let &l:shiftwidth=&tabstop
let b:sleuth_culprit .= ':' . i let b:sleuth_culprit .= ':' . i
return 1 return 1
elseif line[0] == " " elseif line[0] == " "
@@ -609,7 +609,7 @@ if !has_key(s:disabled_packages, 'autoindent')
if minindent < 10 if minindent < 10
setlocal expandtab setlocal expandtab
let &shiftwidth=minindent let &l:shiftwidth=minindent
let b:sleuth_culprit .= ':' . i let b:sleuth_culprit .= ':' . i
return 1 return 1
endif endif

View File

@@ -2132,7 +2132,7 @@ if !has_key(s:disabled_packages, 'autoindent')
if line[0] == "\t" if line[0] == "\t"
setlocal noexpandtab setlocal noexpandtab
let &shiftwidth=&tabstop let &l:shiftwidth=&tabstop
let b:sleuth_culprit .= ':' . i let b:sleuth_culprit .= ':' . i
return 1 return 1
elseif line[0] == " " elseif line[0] == " "
@@ -2145,7 +2145,7 @@ if !has_key(s:disabled_packages, 'autoindent')
if minindent < 10 if minindent < 10
setlocal expandtab setlocal expandtab
let &shiftwidth=minindent let &l:shiftwidth=minindent
let b:sleuth_culprit .= ':' . i let b:sleuth_culprit .= ':' . i
return 1 return 1
endif endif

View File

@@ -268,7 +268,7 @@ if !has_key(s:disabled_packages, 'autoindent')
if line[0] == "\t" if line[0] == "\t"
setlocal noexpandtab setlocal noexpandtab
let &shiftwidth=&tabstop let &l:shiftwidth=&tabstop
let b:sleuth_culprit .= ':' . i let b:sleuth_culprit .= ':' . i
return 1 return 1
elseif line[0] == " " elseif line[0] == " "
@@ -281,7 +281,7 @@ if !has_key(s:disabled_packages, 'autoindent')
if minindent < 10 if minindent < 10
setlocal expandtab setlocal expandtab
let &shiftwidth=minindent let &l:shiftwidth=minindent
let b:sleuth_culprit .= ':' . i let b:sleuth_culprit .= ':' . i
return 1 return 1
endif endif

View File

@@ -56,6 +56,7 @@ syntax cluster typescriptPrimaryType contains=
\ typescriptTupleType, \ typescriptTupleType,
\ typescriptTypeQuery, \ typescriptTypeQuery,
\ typescriptStringLiteralType, \ typescriptStringLiteralType,
\ typescriptTemplateLiteralType,
\ typescriptReadonlyArrayKeyword, \ typescriptReadonlyArrayKeyword,
\ typescriptAssertType \ typescriptAssertType
@@ -64,6 +65,17 @@ syntax region typescriptStringLiteralType contained
\ nextgroup=typescriptUnion \ nextgroup=typescriptUnion
\ skipwhite skipempty \ skipwhite skipempty
syntax region typescriptTemplateLiteralType contained
\ start=/`/ skip=/\\\\\|\\`\|\n/ end=/`\|$/
\ contains=typescriptTemplateSubstitutionType
\ nextgroup=typescriptTypeOperator
\ skipwhite skipempty
syntax region typescriptTemplateSubstitutionType matchgroup=typescriptTemplateSB
\ start=/\${/ end=/}/
\ contains=@typescriptType
\ contained
syntax region typescriptParenthesizedType matchgroup=typescriptParens syntax region typescriptParenthesizedType matchgroup=typescriptParens
\ start=/(/ end=/)/ \ start=/(/ end=/)/
\ contains=@typescriptType \ contains=@typescriptType
@@ -103,10 +115,12 @@ syntax region typescriptTupleType matchgroup=typescriptBraces
\ contained skipwhite \ contained skipwhite
syntax cluster typescriptTypeOperator syntax cluster typescriptTypeOperator
\ contains=typescriptUnion,typescriptTypeBracket \ contains=typescriptUnion,typescriptTypeBracket,typescriptConstraint,typescriptConditionalType
syntax match typescriptUnion /|\|&/ contained nextgroup=@typescriptPrimaryType skipwhite skipempty syntax match typescriptUnion /|\|&/ contained nextgroup=@typescriptPrimaryType skipwhite skipempty
syntax match typescriptConditionalType /?\|:/ contained nextgroup=@typescriptPrimaryType skipwhite skipempty
syntax cluster typescriptFunctionType contains=typescriptGenericFunc,typescriptFuncType syntax cluster typescriptFunctionType contains=typescriptGenericFunc,typescriptFuncType
syntax region typescriptGenericFunc matchgroup=typescriptTypeBrackets syntax region typescriptGenericFunc matchgroup=typescriptTypeBrackets
\ start=/</ end=/>/ \ start=/</ end=/>/

View File

@@ -71,6 +71,7 @@ if exists("did_typescript_hilink")
HiLink typescriptString String HiLink typescriptString String
HiLink typescriptSpecial Special HiLink typescriptSpecial Special
HiLink typescriptStringLiteralType String HiLink typescriptStringLiteralType String
HiLink typescriptTemplateLiteralType String
HiLink typescriptStringMember String HiLink typescriptStringMember String
HiLink typescriptTemplate String HiLink typescriptTemplate String
HiLink typescriptEventString String HiLink typescriptEventString String

View File

@@ -20,10 +20,6 @@ syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
syn match elixirId '\<[_a-zA-Z]\w*[!?]\?\>' contains=elixirUnusedVariable syn match elixirId '\<[_a-zA-Z]\w*[!?]\?\>' contains=elixirUnusedVariable
syn match elixirFunctionCall '\<[a-z_]\w*[!?]\?\(\s*\.\?\s*(\|\s\+[a-zA-Z0-9@:\'\"\[]\)\@='
syn match elixirFunctionCall '\(:\w\+\s*\.\s*\|[A-Z]\w*\s*\.\s*\)\@<=[a-z_]\w*[!?]\?'
syn match elixirFunctionCall '\(>\s+\)\<[a-z_]\w*[!?]\?'
syn match elixirKeyword '\(\.\)\@<!\<\(for\|case\|when\|with\|cond\|if\|unless\|try\|receive\|after\|raise\|rescue\|catch\|else\|quote\|unquote\|super\|unquote_splicing\)\>:\@!' syn match elixirKeyword '\(\.\)\@<!\<\(for\|case\|when\|with\|cond\|if\|unless\|try\|receive\|after\|raise\|rescue\|catch\|else\|quote\|unquote\|super\|unquote_splicing\)\>:\@!'
syn keyword elixirInclude import require alias use syn keyword elixirInclude import require alias use
@@ -48,7 +44,7 @@ syn match elixirOperator '\~>\|\~>>\|<\~\|<<\~\|<\~>'
syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*\%(\.[A-Z]\w*\)*' syn match elixirAlias '\([a-z]\)\@<![A-Z]\w*\%(\.[A-Z]\w*\)*'
syn match elixirAtom '\(:\)\@<!:\%([a-zA-Z_]\w*\%([?!]\|=[>=]\@!\)\?\|<>\|===\?\|>=\?\|<=\?\)' syn match elixirAtom '\(:\)\@<!:\%([a-zA-Z_*]\w*\%([?!]\|=[>=]\@!\)\?\|<>\|===\?\|>=\?\|<=\?\)'
syn match elixirAtom '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)' syn match elixirAtom '\(:\)\@<!:\%(<=>\|&&\?\|%\(()\|\[\]\|{}\)\|++\?\|--\?\|||\?\|!\|//\|[%&`/|]\)'
syn match elixirAtom "\%([a-zA-Z_]\w*[?!]\?\):\(:\)\@!" syn match elixirAtom "\%([a-zA-Z_]\w*[?!]\?\):\(:\)\@!"