"============================================================================= " rescript.vim --- ReScript indent file " Copyright (c) 2016-2023 Wang Shidong & Contributors " Author: Wang Shidong < wsdjeg@outlook.com > " URL: https://spacevim.org " License: GPLv3 "============================================================================= if exists('b:did_indent') finish endif let b:did_indent = 1 setlocal nolisp setlocal indentexpr=RescriptIndent(v:lnum) if exists('*RescriptIndent') finish endif function! s:SkipRescriptBlanksAndComments(startline) let lnum = a:startline while lnum > 1 let lnum = prevnonblank(lnum) if getline(lnum) =~# '\*/\s*$' while getline(lnum) !~ '/\*' && lnum > 1 let lnum = lnum - 1 endwhile if getline(lnum) =~# '^\s*/\*' let lnum = lnum - 1 else break endif elseif getline(lnum) =~# '^\s*//' let lnum = lnum - 1 else break endif endwhile return lnum endfunction function! RescriptIndent(lnum) let l:prevlnum = s:SkipRescriptBlanksAndComments(a:lnum-1) if l:prevlnum == 0 " We're at top of file return 0 endif " Prev and current line with line-comments removed let l:prevl = substitute(getline(l:prevlnum), '//.*$', '', '') let l:thisl = substitute(getline(a:lnum), '//.*$', '', '') let l:previ = indent(l:prevlnum) let l:ind = l:previ if l:prevl =~# '\v(\(|\{|\[|\=|\=\>)\s*$' " Opened a block, assignment, fat arrow let l:ind += shiftwidth() endif if l:thisl =~# '^\s*[)}\]]' " Closed a blocked let l:ind -= shiftwidth() endif return l:ind endfunction