mirror of
https://github.com/vim/vim
synced 2025-07-16 01:01:58 +00:00
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:
committed by
Christian Brabandt
parent
b9ea0a89fa
commit
6d2efd4920
21
runtime/autoload/dist/vimindent.vim
vendored
21
runtime/autoload/dist/vimindent.vim
vendored
@ -2,11 +2,12 @@ vim9script
|
||||
|
||||
# Language: Vim script
|
||||
# Maintainer: github user lacygoill
|
||||
# Last Change: 2024 Nov 08
|
||||
# Last Change: 2024 Dec 26
|
||||
#
|
||||
# Includes changes from The Vim Project:
|
||||
# - 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 Dec 26: Fix indent for enums (Jim Zhou via #16293)
|
||||
|
||||
# NOTE: Whenever you change the code, make sure the tests are still passing:
|
||||
#
|
||||
@ -172,6 +173,7 @@ const MODIFIERS: dict<string> = {
|
||||
def: ['export', 'static'],
|
||||
class: ['export', 'abstract', 'export abstract'],
|
||||
interface: ['export'],
|
||||
enum: ['export'],
|
||||
}
|
||||
# ...
|
||||
# class: ['export', 'abstract', 'export abstract'],
|
||||
@ -634,6 +636,7 @@ def Offset( # {{{2
|
||||
elseif !line_A.isfirst
|
||||
&& (line_B->EndsWithLineContinuation()
|
||||
|| line_A.text =~ LINE_CONTINUATION_AT_SOL)
|
||||
&& !(line_B->EndsWithComma() && line_A.lnum->IsInside('EnumBlock'))
|
||||
return shiftwidth()
|
||||
endif
|
||||
|
||||
@ -1051,6 +1054,22 @@ def ContinuesBelowBracketBlock( # {{{3
|
||||
enddef
|
||||
|
||||
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')
|
||||
|| !b:vimindent->has_key($'is_{syntax}')
|
||||
return false
|
||||
|
@ -947,6 +947,20 @@ 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
|
||||
" END_INDENT
|
||||
|
||||
" START_INDENT
|
||||
call prop_type_add('indent_after_literal_dict', #{ foo: 'bar' })
|
||||
call prop_type_delete('indent_after_literal_dict')
|
||||
|
@ -940,10 +940,24 @@ endinterface
|
||||
" START_INDENT
|
||||
enum Color
|
||||
White,
|
||||
Red,
|
||||
Green,
|
||||
Blue,
|
||||
Black
|
||||
Red,
|
||||
Green,
|
||||
Blue,
|
||||
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
|
||||
" END_INDENT
|
||||
|
||||
|
Reference in New Issue
Block a user