0
0
mirror of https://github.com/vim/vim.git synced 2025-10-19 08:04:27 -04:00

runtime(odin): fix indent for mis-identified case statements

related: habamax/vim-odin#11
closes: #18578

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Maxim Kim
2025-10-16 18:53:19 +00:00
committed by Christian Brabandt
parent 1c9135a362
commit a30cf0b3ac

View File

@@ -4,7 +4,7 @@ vim9script
# Language: Odin # Language: Odin
# Maintainer: Maxim Kim <habamax@gmail.com> # Maintainer: Maxim Kim <habamax@gmail.com>
# Website: https://github.com/habamax/vim-odin # Website: https://github.com/habamax/vim-odin
# Last Change: 2024-01-15 # Last Change: 2025-10-15
if exists("b:did_indent") if exists("b:did_indent")
finish finish
@@ -14,7 +14,7 @@ b:did_indent = 1
b:undo_indent = 'setlocal cindent< cinoptions< cinkeys< indentexpr<' b:undo_indent = 'setlocal cindent< cinoptions< cinkeys< indentexpr<'
setlocal cindent setlocal cindent
setlocal cinoptions=L0,m1,(s,j1,J1,l1,+0,:0,#1 setlocal cinoptions=L0,m1,(s,j1,J1,l1,+0,:0,#3
setlocal cinkeys=0{,0},0),0],!^F,:,o,O setlocal cinkeys=0{,0},0),0],!^F,:,o,O
setlocal indentexpr=GetOdinIndent(v:lnum) setlocal indentexpr=GetOdinIndent(v:lnum)
@@ -67,14 +67,14 @@ def GetOdinIndent(lnum: number): number
else else
indent = pindent indent = pindent
endif endif
elseif pline =~ 'switch\s.*{\s*$' elseif pline =~ '\<switch\>\s.*{\s*$'
indent = pindent indent = pindent
elseif pline =~ 'case\s*.*,\s*\(//.*\)\?$' # https://github.com/habamax/vim-odin/issues/8 elseif pline =~ '\<case\>\s*.*,\s*\(//.*\)\?$' # https://github.com/habamax/vim-odin/issues/8
indent = pindent + matchstr(pline, 'case\s*')->strcharlen() indent = pindent + matchstr(pline, '\<case\s*')->strcharlen()
elseif line =~ '^\s*case\s\+.*,\s*$' elseif line =~ '^\s*case\>\s\+.*,\s*$'
indent = pindent - shiftwidth() indent = pindent - shiftwidth()
elseif pline =~ 'case\s*.*:\s*\(//.*\)\?$' elseif pline =~ '\<case\>\s*.*:\s*\(//.*\)\?$'
if line !~ '^\s*}\s*$' && line !~ '^\s*case[[:space:]:]' if line !~ '^\s*}\s*$' && line !~ '^\s*case\>[[:space:]:]'
indent = pindent + shiftwidth() indent = pindent + shiftwidth()
endif endif
elseif pline =~ '^\s*@.*' && line !~ '^\s*}' elseif pline =~ '^\s*@.*' && line !~ '^\s*}'
@@ -82,7 +82,7 @@ def GetOdinIndent(lnum: number): number
elseif pline =~ ':[:=].*}\s*$' elseif pline =~ ':[:=].*}\s*$'
indent = pindent indent = pindent
elseif pline =~ '^\s*}\s*$' elseif pline =~ '^\s*}\s*$'
if line !~ '^\s*}' && line !~ 'case\s*.*:\s*$' if line !~ '^\s*}' && line !~ '\<case\>\s*.*:\s*$'
indent = pindent indent = pindent
else else
indent = pindent - shiftwidth() indent = pindent - shiftwidth()
@@ -96,7 +96,7 @@ def GetOdinIndent(lnum: number): number
if plnum < 1 if plnum < 1
break break
endif endif
if getline(idx) =~ '^\s*case\s.*,\s*$' if getline(idx) =~ '^\s*case\>\s.*,\s*$'
indent = indent(idx) + shiftwidth() indent = indent(idx) + shiftwidth()
break break
endif endif