comparison runtime/indent/kotlin.vim @ 33282:c9c720360002

runtime(kotlin): Add Kotlin runtime files (#13110) Commit: https://github.com/vim/vim/commit/e30d8e4ce01dc1aca95d25be9fd27c09855fd4be Author: dkearns <dougkearns@gmail.com> Date: Mon Sep 18 02:51:22 2023 +1000 runtime(kotlin): Add Kotlin runtime files (https://github.com/vim/vim/issues/13110) Closes udalov/kotlin-vimhttps://github.com/vim/vim/issues/39 Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sun, 17 Sep 2023 19:00:07 +0200
parents
children
comparison
equal deleted inserted replaced
33281:3e78dea9ad87 33282:c9c720360002
1 " Vim indent file
2 " Language: Kotlin
3 " Maintainer: Alexander Udalov
4 " URL: https://github.com/udalov/kotlin-vim
5 " Last Change: 7 November 2021
6 " 2023 Sep 17 by Vim Project (undo_indent)
7
8 if exists('b:did_indent')
9 finish
10 endif
11 let b:did_indent = 1
12
13 setlocal cinoptions& cinoptions+=j1,L0
14 setlocal indentexpr=GetKotlinIndent()
15 setlocal indentkeys=0},0),!^F,o,O,e,<CR>
16 setlocal autoindent " TODO ?
17
18 let b:undo_indent = "setlocal autoindent< cinoptions< indentexpr< indentkeys<"
19
20 " TODO teach it to count bracket balance, etc.
21 function! GetKotlinIndent()
22 if v:lnum == 0
23 return 0
24 endif
25
26 let prev_num = prevnonblank(v:lnum - 1)
27 let prev = getline(prev_num)
28 let prev_indent = indent(prev_num)
29 let cur = getline(v:lnum)
30
31 if cur =~ '^\s*\*'
32 return cindent(v:lnum)
33 endif
34
35 if prev =~ '^\s*\*/'
36 let st = prev
37 while st > 1
38 if getline(st) =~ '^\s*/\*'
39 break
40 endif
41 let st = st - 1
42 endwhile
43 return indent(st)
44 endif
45
46 let prev_open_paren = prev =~ '^.*(\s*$'
47 let cur_close_paren = cur =~ '^\s*).*$'
48 let prev_open_brace = prev =~ '^.*\({\|->\)\s*$'
49 let cur_close_brace = cur =~ '^\s*}.*$'
50
51 if prev_open_paren && !cur_close_paren || prev_open_brace && !cur_close_brace
52 return prev_indent + shiftwidth()
53 endif
54
55 if cur_close_paren && !prev_open_paren || cur_close_brace && !prev_open_brace
56 return prev_indent - shiftwidth()
57 endif
58
59 return prev_indent
60 endfunction