1
0
forked from aniani/vim

runtime(vim): update indentation plugin for Vim script

Make the indent script aware of enums and ensure those will be correctly
indented.

fixes: #16289
closes: #16293

Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Jim Zhou <csd_189@163.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Jim Zhou 2024-12-26 10:30:37 +01:00 committed by Christian Brabandt
parent b9ea0a89fa
commit 6d2efd4920
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
3 changed files with 52 additions and 5 deletions

View File

@ -2,11 +2,12 @@ vim9script
# Language: Vim script # Language: Vim script
# Maintainer: github user lacygoill # Maintainer: github user lacygoill
# Last Change: 2024 Nov 08 # Last Change: 2024 Dec 26
# #
# Includes changes from The Vim Project: # Includes changes from The Vim Project:
# - 2024 Feb 09: Fix indent after literal Dict (A. Radev via #13966) # - 2024 Feb 09: Fix indent after literal Dict (A. Radev via #13966)
# - 2024 Nov 08: Fix indent after :silent! function (D. Kearns via #16009) # - 2024 Nov 08: Fix indent after :silent! function (D. Kearns via #16009)
# - 2024 Dec 26: Fix indent for enums (Jim Zhou via #16293)
# NOTE: Whenever you change the code, make sure the tests are still passing: # NOTE: Whenever you change the code, make sure the tests are still passing:
# #
@ -172,6 +173,7 @@ const MODIFIERS: dict<string> = {
def: ['export', 'static'], def: ['export', 'static'],
class: ['export', 'abstract', 'export abstract'], class: ['export', 'abstract', 'export abstract'],
interface: ['export'], interface: ['export'],
enum: ['export'],
} }
# ... # ...
# class: ['export', 'abstract', 'export abstract'], # class: ['export', 'abstract', 'export abstract'],
@ -634,6 +636,7 @@ def Offset( # {{{2
elseif !line_A.isfirst elseif !line_A.isfirst
&& (line_B->EndsWithLineContinuation() && (line_B->EndsWithLineContinuation()
|| line_A.text =~ LINE_CONTINUATION_AT_SOL) || line_A.text =~ LINE_CONTINUATION_AT_SOL)
&& !(line_B->EndsWithComma() && line_A.lnum->IsInside('EnumBlock'))
return shiftwidth() return shiftwidth()
endif endif
@ -1051,6 +1054,22 @@ def ContinuesBelowBracketBlock( # {{{3
enddef enddef
def IsInside(lnum: number, syntax: string): bool # {{{3 def IsInside(lnum: number, syntax: string): bool # {{{3
if syntax == 'EnumBlock'
var cur_pos = getpos('.')
cursor(lnum, 1)
var enum_pos = search('^\C\s*\%(export\s\)\=\s*enum\s\+\S\+', 'bnW')
var endenum_pos = search('^\C\s*endenum\>', 'bnW')
setpos('.', cur_pos)
if enum_pos == 0 && endenum_pos == 0
return false
endif
if (enum_pos > 0 && (endenum_pos == 0 || enum_pos > endenum_pos))
return true
endif
return false
endif
if !exists('b:vimindent') if !exists('b:vimindent')
|| !b:vimindent->has_key($'is_{syntax}') || !b:vimindent->has_key($'is_{syntax}')
return false return false

View File

@ -947,6 +947,20 @@ Black
endenum endenum
" END_INDENT " END_INDENT
" START_INDENT
enum Digits
INVALID(v:numbermax), # The null value.
ZERO(0 * v:numbermin), ONE(2 - 1),
TWO(1 + 1), THREE(9 / 3), FOUR(1 * 4),
FIVE(1 + 2 + 2), SIX(36 / 3 / 2), SEVEN(7), EIGHT(2 * 2 * 2),
NINE(3 + 3 + 3)
const value: number
def new(value: number)
this.value = value
enddef
endenum
" END_INDENT
" START_INDENT " START_INDENT
call prop_type_add('indent_after_literal_dict', #{ foo: 'bar' }) call prop_type_add('indent_after_literal_dict', #{ foo: 'bar' })
call prop_type_delete('indent_after_literal_dict') call prop_type_delete('indent_after_literal_dict')

View File

@ -940,10 +940,24 @@ endinterface
" START_INDENT " START_INDENT
enum Color enum Color
White, White,
Red, Red,
Green, Green,
Blue, Blue,
Black Black
endenum
" END_INDENT
" START_INDENT
enum Digits
INVALID(v:numbermax), # The null value.
ZERO(0 * v:numbermin), ONE(2 - 1),
TWO(1 + 1), THREE(9 / 3), FOUR(1 * 4),
FIVE(1 + 2 + 2), SIX(36 / 3 / 2), SEVEN(7), EIGHT(2 * 2 * 2),
NINE(3 + 3 + 3)
const value: number
def new(value: number)
this.value = value
enddef
endenum endenum
" END_INDENT " END_INDENT