mirror of
https://github.com/neovim/neovim.git
synced 2024-09-17 20:58:20 -04:00
vim-patch:c0f7505: runtime(lua): add/subtract a 'shiftwidth' after '('/')' in indentexpr
Problem:
- Current lua indentexpr does not indent for '(' ')'.
- Missing indent test for lua.
Solution:
- Match '(', ')' in `function GetLuaIndentIntern`.
- Add an indent test for lua.
closes: vim/vim#15364
c0f7505ede
Co-authored-by: Yinzuo Jiang <jiangyinzuo@foxmail.com>
This commit is contained in:
parent
be9eaac7e8
commit
28e2e8aa04
@ -4,6 +4,7 @@
|
||||
" First Author: Max Ischenko <mfi 'at' ukr.net>
|
||||
" Last Change: 2017 Jun 13
|
||||
" 2022 Sep 07: b:undo_indent added by Doug Kearns
|
||||
" 2024 Jul 27: by Vim project: match '(', ')' in function GetLuaIndentIntern()
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
if exists("b:did_indent")
|
||||
@ -46,12 +47,12 @@ function! GetLuaIndentIntern()
|
||||
endif
|
||||
|
||||
" Add a 'shiftwidth' after lines that start a block:
|
||||
" 'function', 'if', 'for', 'while', 'repeat', 'else', 'elseif', '{'
|
||||
" 'function', 'if', 'for', 'while', 'repeat', 'else', 'elseif', '{', '('
|
||||
let ind = indent(prevlnum)
|
||||
let prevline = getline(prevlnum)
|
||||
let midx = match(prevline, '^\s*\%(if\>\|for\>\|while\>\|repeat\>\|else\>\|elseif\>\|do\>\|then\>\)')
|
||||
if midx == -1
|
||||
let midx = match(prevline, '{\s*\%(--\%([^[].*\)\?\)\?$')
|
||||
let midx = match(prevline, '\%({\|(\)\s*\%(--\%([^[].*\)\?\)\?$')
|
||||
if midx == -1
|
||||
let midx = match(prevline, '\<function\>\s*\%(\k\|[.:]\)\{-}\s*(')
|
||||
endif
|
||||
@ -65,9 +66,9 @@ function! GetLuaIndentIntern()
|
||||
endif
|
||||
endif
|
||||
|
||||
" Subtract a 'shiftwidth' on end, else, elseif, until and '}'
|
||||
" Subtract a 'shiftwidth' on end, else, elseif, until, '}' and ')'
|
||||
" This is the part that requires 'indentkeys'.
|
||||
let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\)')
|
||||
let midx = match(getline(v:lnum), '^\s*\%(end\>\|else\>\|elseif\>\|until\>\|}\|)\)')
|
||||
if midx != -1 && synIDattr(synID(v:lnum, midx + 1, 1), "name") != "luaComment"
|
||||
let ind = ind - shiftwidth()
|
||||
endif
|
||||
|
19
runtime/indent/testdir/lua.in
Normal file
19
runtime/indent/testdir/lua.in
Normal file
@ -0,0 +1,19 @@
|
||||
-- vim: set ft=lua sw=2 noet:
|
||||
|
||||
-- START_INDENT
|
||||
function foo(a, b, c, d)
|
||||
return { a, b, c, d }
|
||||
end
|
||||
|
||||
local a = foo(
|
||||
1,
|
||||
2,
|
||||
"longxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
4
|
||||
)
|
||||
|
||||
local b = {
|
||||
1,
|
||||
2,
|
||||
}
|
||||
-- END_INDENT
|
19
runtime/indent/testdir/lua.ok
Normal file
19
runtime/indent/testdir/lua.ok
Normal file
@ -0,0 +1,19 @@
|
||||
-- vim: set ft=lua sw=2 noet:
|
||||
|
||||
-- START_INDENT
|
||||
function foo(a, b, c, d)
|
||||
return { a, b, c, d }
|
||||
end
|
||||
|
||||
local a = foo(
|
||||
1,
|
||||
2,
|
||||
"longxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
||||
4
|
||||
)
|
||||
|
||||
local b = {
|
||||
1,
|
||||
2,
|
||||
}
|
||||
-- END_INDENT
|
Loading…
Reference in New Issue
Block a user