runtime(idris2): include filetype,indent+syntax plugins for (L)Idris2 + ipkg
closes: #15993 Co-authored-by: Christian Clason <ch.clason+github@icloud.com> Signed-off-by: Serhii Khoma <srghma@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
f18987caa5
commit
5ca8f223f0
183
runtime/indent/idris2.vim
Normal file
183
runtime/indent/idris2.vim
Normal file
@ -0,0 +1,183 @@
|
||||
" Vim indent file
|
||||
" Language: Idris 2
|
||||
" Maintainer: Idris Hackers (https://github.com/edwinb/idris2-vim), Serhii Khoma <srghma@gmail.com>
|
||||
" Author: raichoo <raichoo@googlemail.com>
|
||||
" Last Change: 2024 Nov 05
|
||||
" License: Vim (see :h license)
|
||||
" Repository: https://github.com/ShinKage/idris2-nvim
|
||||
"
|
||||
" indentation for idris (idris-lang.org)
|
||||
"
|
||||
" Based on haskell indentation by motemen <motemen@gmail.com>
|
||||
"
|
||||
" Indentation configuration variables:
|
||||
"
|
||||
" g:idris2_indent_if (default: 3)
|
||||
" Controls indentation after 'if' statements
|
||||
" Example:
|
||||
" if condition
|
||||
" >>>then expr
|
||||
" >>>else expr
|
||||
"
|
||||
" g:idris2_indent_case (default: 5)
|
||||
" Controls indentation of case expressions
|
||||
" Example:
|
||||
" case x of
|
||||
" >>>>>Left y => ...
|
||||
" >>>>>Right z => ...
|
||||
"
|
||||
" g:idris2_indent_let (default: 4)
|
||||
" Controls indentation after 'let' bindings
|
||||
" Example:
|
||||
" let x = expr in
|
||||
" >>>>body
|
||||
"
|
||||
" g:idris2_indent_rewrite (default: 8)
|
||||
" Controls indentation after 'rewrite' expressions
|
||||
" Example:
|
||||
" rewrite proof in
|
||||
" >>>>>>>>expr
|
||||
"
|
||||
" g:idris2_indent_where (default: 6)
|
||||
" Controls indentation of 'where' blocks
|
||||
" Example:
|
||||
" function args
|
||||
" >>>>>>where helper = expr
|
||||
"
|
||||
" g:idris2_indent_do (default: 3)
|
||||
" Controls indentation in 'do' blocks
|
||||
" Example:
|
||||
" do x <- action
|
||||
" >>>y <- action
|
||||
"
|
||||
" Example configuration in .vimrc:
|
||||
" let g:idris2_indent_if = 2
|
||||
|
||||
if exists('b:did_indent')
|
||||
finish
|
||||
endif
|
||||
|
||||
setlocal indentexpr=GetIdrisIndent()
|
||||
setlocal indentkeys=!^F,o,O,}
|
||||
|
||||
let b:did_indent = 1
|
||||
let b:undo_indent = "setlocal indentexpr< indentkeys<"
|
||||
|
||||
" we want to use line continuations (\) BEGINNING
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" Define defaults for indent configuration
|
||||
let s:indent_defaults = {
|
||||
\ 'idris2_indent_if': 3,
|
||||
\ 'idris2_indent_case': 5,
|
||||
\ 'idris2_indent_let': 4,
|
||||
\ 'idris2_indent_rewrite': 8,
|
||||
\ 'idris2_indent_where': 6,
|
||||
\ 'idris2_indent_do': 3
|
||||
\ }
|
||||
|
||||
" we want to use line continuations (\) END
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
|
||||
" Set up indent settings with user overrides
|
||||
for [key, default] in items(s:indent_defaults)
|
||||
let varname = 'g:' . key
|
||||
if !exists(varname)
|
||||
execute 'let' varname '=' default
|
||||
endif
|
||||
endfor
|
||||
|
||||
if exists("*GetIdrisIndent")
|
||||
finish
|
||||
endif
|
||||
|
||||
function! GetIdrisIndent()
|
||||
let prevline = getline(v:lnum - 1)
|
||||
|
||||
if prevline =~ '\s\+(\s*.\+\s\+:\s\+.\+\s*)\s\+->\s*$'
|
||||
return match(prevline, '(')
|
||||
elseif prevline =~ '\s\+{\s*.\+\s\+:\s\+.\+\s*}\s\+->\s*$'
|
||||
return match(prevline, '{')
|
||||
endif
|
||||
|
||||
if prevline =~ '[!#$%&*+./<>?@\\^|~-]\s*$'
|
||||
let s = match(prevline, '[:=]')
|
||||
if s > 0
|
||||
return s + 2
|
||||
else
|
||||
return match(prevline, '\S')
|
||||
endif
|
||||
endif
|
||||
|
||||
if prevline =~ '[{([][^})\]]\+$'
|
||||
return match(prevline, '[{([]')
|
||||
endif
|
||||
|
||||
if prevline =~ '\<let\>\s\+.\+\<in\>\s*$'
|
||||
return match(prevline, '\<let\>') + g:idris2_indent_let
|
||||
endif
|
||||
|
||||
if prevline =~ '\<rewrite\>\s\+.\+\<in\>\s*$'
|
||||
return match(prevline, '\<rewrite\>') + g:idris2_indent_rewrite
|
||||
endif
|
||||
|
||||
if prevline !~ '\<else\>'
|
||||
let s = match(prevline, '\<if\>.*\&.*\zs\<then\>')
|
||||
if s > 0
|
||||
return s
|
||||
endif
|
||||
|
||||
let s = match(prevline, '\<if\>')
|
||||
if s > 0
|
||||
return s + g:idris2_indent_if
|
||||
endif
|
||||
endif
|
||||
|
||||
if prevline =~ '\(\<where\>\|\<do\>\|=\|[{([]\)\s*$'
|
||||
return match(prevline, '\S') + &shiftwidth
|
||||
endif
|
||||
|
||||
if prevline =~ '\<where\>\s\+\S\+.*$'
|
||||
return match(prevline, '\<where\>') + g:idris2_indent_where
|
||||
endif
|
||||
|
||||
if prevline =~ '\<do\>\s\+\S\+.*$'
|
||||
return match(prevline, '\<do\>') + g:idris2_indent_do
|
||||
endif
|
||||
|
||||
if prevline =~ '^\s*\<\(co\)\?data\>\s\+[^=]\+\s\+=\s\+\S\+.*$'
|
||||
return match(prevline, '=')
|
||||
endif
|
||||
|
||||
if prevline =~ '\<with\>\s\+([^)]*)\s*$'
|
||||
return match(prevline, '\S') + &shiftwidth
|
||||
endif
|
||||
|
||||
if prevline =~ '\<case\>\s\+.\+\<of\>\s*$'
|
||||
return match(prevline, '\<case\>') + g:idris2_indent_case
|
||||
endif
|
||||
|
||||
if prevline =~ '^\s*\(\<namespace\>\|\<\(co\)\?data\>\)\s\+\S\+\s*$'
|
||||
return match(prevline, '\(\<namespace\>\|\<\(co\)\?data\>\)') + &shiftwidth
|
||||
endif
|
||||
|
||||
if prevline =~ '^\s*\(\<using\>\|\<parameters\>\)\s*([^(]*)\s*$'
|
||||
return match(prevline, '\(\<using\>\|\<parameters\>\)') + &shiftwidth
|
||||
endif
|
||||
|
||||
if prevline =~ '^\s*\<mutual\>\s*$'
|
||||
return match(prevline, '\<mutual\>') + &shiftwidth
|
||||
endif
|
||||
|
||||
let line = getline(v:lnum)
|
||||
|
||||
if (line =~ '^\s*}\s*' && prevline !~ '^\s*;')
|
||||
return match(prevline, '\S') - &shiftwidth
|
||||
endif
|
||||
|
||||
return match(prevline, '\S')
|
||||
endfunction
|
||||
|
||||
" vim:et:sw=2:sts=2
|
||||
Reference in New Issue
Block a user