]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(vim): update indentation plugin for Vim script
authorJim Zhou <csd_189@163.com>
Thu, 26 Dec 2024 09:30:37 +0000 (10:30 +0100)
committerChristian Brabandt <cb@256bit.org>
Thu, 26 Dec 2024 09:36:56 +0000 (10:36 +0100)
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>
runtime/autoload/dist/vimindent.vim
runtime/indent/testdir/vim.in
runtime/indent/testdir/vim.ok

index 727e98352cc529a0f5f92ab6d697f670955ac319..0681496ae92f7ed4ba01579e35ca0a36e8ac1446 100644 (file)
@@ -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
index ae52f3a94739a45e2755e7ef1c0a8e26f905a90c..431528ee275289394616cc2d5eb5838e7ee11551 100644 (file)
@@ -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')
index 2ab4f39c0c053c24e93aae32bfe39e73fa0ad1e8..03001d525cfdaf7a5a680fd11813eeaa7bb55a65 100644 (file)
@@ -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