diff options
author | dkearns <dougkearns@gmail.com> | 2023-09-18 02:51:22 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-17 18:51:22 +0200 |
commit | e30d8e4ce01dc1aca95d25be9fd27c09855fd4be (patch) | |
tree | a4dee78def4073602b61acf0099ea7c8bdcbddb7 /runtime/indent/kotlin.vim | |
parent | 6b5efcdd8e976d2ab2554b22c4220c5e88de4717 (diff) |
runtime(kotlin): Add Kotlin runtime files (#13110)
Closes udalov/kotlin-vim#39
Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'runtime/indent/kotlin.vim')
-rw-r--r-- | runtime/indent/kotlin.vim | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/runtime/indent/kotlin.vim b/runtime/indent/kotlin.vim new file mode 100644 index 0000000000..590a5074d1 --- /dev/null +++ b/runtime/indent/kotlin.vim @@ -0,0 +1,60 @@ +" Vim indent file +" Language: Kotlin +" Maintainer: Alexander Udalov +" URL: https://github.com/udalov/kotlin-vim +" Last Change: 7 November 2021 +" 2023 Sep 17 by Vim Project (undo_indent) + +if exists('b:did_indent') + finish +endif +let b:did_indent = 1 + +setlocal cinoptions& cinoptions+=j1,L0 +setlocal indentexpr=GetKotlinIndent() +setlocal indentkeys=0},0),!^F,o,O,e,<CR> +setlocal autoindent " TODO ? + +let b:undo_indent = "setlocal autoindent< cinoptions< indentexpr< indentkeys<" + +" TODO teach it to count bracket balance, etc. +function! GetKotlinIndent() + if v:lnum == 0 + return 0 + endif + + let prev_num = prevnonblank(v:lnum - 1) + let prev = getline(prev_num) + let prev_indent = indent(prev_num) + let cur = getline(v:lnum) + + if cur =~ '^\s*\*' + return cindent(v:lnum) + endif + + if prev =~ '^\s*\*/' + let st = prev + while st > 1 + if getline(st) =~ '^\s*/\*' + break + endif + let st = st - 1 + endwhile + return indent(st) + endif + + let prev_open_paren = prev =~ '^.*(\s*$' + let cur_close_paren = cur =~ '^\s*).*$' + let prev_open_brace = prev =~ '^.*\({\|->\)\s*$' + let cur_close_brace = cur =~ '^\s*}.*$' + + if prev_open_paren && !cur_close_paren || prev_open_brace && !cur_close_brace + return prev_indent + shiftwidth() + endif + + if cur_close_paren && !prev_open_paren || cur_close_brace && !prev_open_brace + return prev_indent - shiftwidth() + endif + + return prev_indent +endfunction |