diff options
author | Christian Clason <c.clason@uni-graz.at> | 2023-09-17 19:19:33 +0200 |
---|---|---|
committer | Christian Clason <c.clason@uni-graz.at> | 2023-09-17 22:52:56 +0200 |
commit | 1b74d2bf0aceed1866f8a6f07403617fb37a0aa7 (patch) | |
tree | d80a93f91ec655c47ea0828338c6a3e0fcc31d5f /runtime/indent | |
parent | ed45aa835c31408947acda08f605949bcea6b99d (diff) | |
download | rneovim-1b74d2bf0aceed1866f8a6f07403617fb37a0aa7.tar.gz rneovim-1b74d2bf0aceed1866f8a6f07403617fb37a0aa7.tar.bz2 rneovim-1b74d2bf0aceed1866f8a6f07403617fb37a0aa7.zip |
vim-patch:e30d8e4ce01d
runtime(kotlin): Add Kotlin runtime files (vim/vim#13110)
Closes udalov/kotlin-vimvim/vim#39
https://github.com/vim/vim/commit/e30d8e4ce01dc1aca95d25be9fd27c09855fd4be
Co-authored-by: dkearns <dougkearns@gmail.com>
Diffstat (limited to 'runtime/indent')
-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 |