runtime(sh): better function support for bash/zsh in indent script
Commit:
https://github.com/vim/vim/commit/0acd3abfadf54a97a3cad999791603aa6a8b2248
Author: Lukas Zapletal <[email protected]>
Date: Thu Nov 14 21:50:15 2024 +0100
runtime(sh): better function support for bash/zsh in indent script
closes: https://github.com/vim/vim/issues/16052
Signed-off-by: Lukas Zapletal <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim
index aa47c6d1b..184e82987 100644
--- a/runtime/indent/sh.vim
+++ b/runtime/indent/sh.vim
@@ -7,6 +7,8 @@
" License: Vim (see :h license)
" Repository: https://github.com/chrisbra/vim-sh-indent
" Changelog:
+" 20241411 - Detect dash character in function keyword for
+" bash mode (issue #16049)
" 20190726 - Correctly skip if keywords in syntax comments
" (issue #17)
" 20190603 - Do not indent in zsh filetypes with an `if` in comments
@@ -195,7 +197,9 @@ endfunction
function! s:is_function_definition(line)
return a:line =~ '^\s*\<\k\+\>\s*()\s*{' ||
\ a:line =~ '^\s*{' ||
- \ a:line =~ '^\s*function\s*\k\+\s*\%(()\)\?\s*{'
+ \ a:line =~ '^\s*function\s*\k\+\s*\%(()\)\?\s*{' ||
+ \ ((&ft is# 'zsh' || s:is_bash()) &&
+ \ a:line =~ '^\s*function\s*\S\+\s*\%(()\)\?\s*{' )
endfunction
function! s:is_array(line)
diff --git a/runtime/indent/testdir/bash.in b/runtime/indent/testdir/bash.in
new file mode 100644
index 000000000..7ffcfc7a9
--- /dev/null
+++ b/runtime/indent/testdir/bash.in
@@ -0,0 +1,22 @@
+#!/bin/bash
+# vim: set ft=bash sw=2 noet:
+
+# START_INDENT
+a = 10
+b = 20
+
+function add() {
+c = $((a + b))
+}
+
+function print {
+# do nothing
+}
+
+if [[ $c -ge 15 ]];
+then
+print("ok")
+else
+print("not ok")
+fi
+# END_INDENT
diff --git a/runtime/indent/testdir/bash.ok b/runtime/indent/testdir/bash.ok
new file mode 100644
index 000000000..93d5b33c3
--- /dev/null
+++ b/runtime/indent/testdir/bash.ok
@@ -0,0 +1,22 @@
+#!/bin/bash
+# vim: set ft=bash sw=2 noet:
+
+# START_INDENT
+a = 10
+b = 20
+
+function add() {
+ c = $((a + b))
+}
+
+function print {
+ # do nothing
+}
+
+if [[ $c -ge 15 ]];
+then
+ print("ok")
+else
+ print("not ok")
+fi
+# END_INDENT
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1tBgwe-005DnW-GG%40256bit.org.