xref: /vim-8.2.3635/runtime/ftplugin/erlang.vim (revision 82be4849)
16be7f873SBram Moolenaar" Vim ftplugin file
2*82be4849SBram Moolenaar" Language:     Erlang (http://www.erlang.org)
3*82be4849SBram Moolenaar" Maintainer:   Csaba Hoch <[email protected]>
4cb80aa2dSBram Moolenaar" Author:       Oscar Hellström <[email protected]>
5cb80aa2dSBram Moolenaar" Contributors: Ricardo Catalinas Jiménez <[email protected]>
66be7f873SBram Moolenaar"               Eduardo Lopez (http://github.com/tapichu)
7*82be4849SBram Moolenaar"               Arvid Bjurklint (http://github.com/slarwise)
8*82be4849SBram Moolenaar" Last Update:  2021-Jan-08
96be7f873SBram Moolenaar" License:      Vim license
10*82be4849SBram Moolenaar" URL:          https://github.com/vim-erlang/vim-erlang-runtime
116be7f873SBram Moolenaar
126be7f873SBram Moolenaarif exists('b:did_ftplugin')
136be7f873SBram Moolenaar  finish
14*82be4849SBram Moolenaarendif
156be7f873SBram Moolenaarlet b:did_ftplugin = 1
166be7f873SBram Moolenaar
1784f7235bSBram Moolenaarlet s:cpo_save = &cpo
1884f7235bSBram Moolenaarset cpo&vim
1984f7235bSBram Moolenaar
20*82be4849SBram Moolenaarlet &l:keywordprg = get(g:, 'erlang_keywordprg', 'erl -man')
216be7f873SBram Moolenaar
22*82be4849SBram Moolenaarif get(g:, 'erlang_folding', 0)
236be7f873SBram Moolenaar  setlocal foldmethod=expr
246be7f873SBram Moolenaar  setlocal foldexpr=GetErlangFold(v:lnum)
256be7f873SBram Moolenaar  setlocal foldtext=ErlangFoldText()
266be7f873SBram Moolenaarendif
276be7f873SBram Moolenaar
286be7f873SBram Moolenaarsetlocal comments=:%%%,:%%,:%
296be7f873SBram Moolenaarsetlocal commentstring=%%s
306be7f873SBram Moolenaar
316be7f873SBram Moolenaarsetlocal formatoptions+=ro
326be7f873SBram Moolenaar
33*82be4849SBram Moolenaarsetlocal suffixesadd=.erl,.hrl
34*82be4849SBram Moolenaar
35*82be4849SBram Moolenaarlet &l:include = '^\s*-\%(include\|include_lib\)\s*("\zs\f*\ze")'
36*82be4849SBram Moolenaarlet &l:define  = '^\s*-\%(define\|record\|type\|opaque\)'
37*82be4849SBram Moolenaar
38*82be4849SBram Moolenaarlet s:erlang_fun_begin = '^\a\w*(.*$'
39*82be4849SBram Moolenaarlet s:erlang_fun_end   = '^[^%]*\.\s*\(%.*\)\?$'
40*82be4849SBram Moolenaar
41*82be4849SBram Moolenaarif !exists('*GetErlangFold')
426be7f873SBram Moolenaar  function GetErlangFold(lnum)
436be7f873SBram Moolenaar    let lnum = a:lnum
446be7f873SBram Moolenaar    let line = getline(lnum)
456be7f873SBram Moolenaar
466be7f873SBram Moolenaar    if line =~ s:erlang_fun_end
476be7f873SBram Moolenaar      return '<1'
486be7f873SBram Moolenaar    endif
496be7f873SBram Moolenaar
506be7f873SBram Moolenaar    if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
516be7f873SBram Moolenaar      return '1'
526be7f873SBram Moolenaar    endif
536be7f873SBram Moolenaar
546be7f873SBram Moolenaar    if line =~ s:erlang_fun_begin
556be7f873SBram Moolenaar      return '>1'
566be7f873SBram Moolenaar    endif
576be7f873SBram Moolenaar
586be7f873SBram Moolenaar    return '='
596be7f873SBram Moolenaar  endfunction
60*82be4849SBram Moolenaarendif
616be7f873SBram Moolenaar
62*82be4849SBram Moolenaarif !exists('*ErlangFoldText')
636be7f873SBram Moolenaar  function ErlangFoldText()
646be7f873SBram Moolenaar    let line    = getline(v:foldstart)
655dc6252dSBram Moolenaar    let foldlen = v:foldend - v:foldstart + 1
665dc6252dSBram Moolenaar    let lines   = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
675dc6252dSBram Moolenaar    if foldlen < 10
685dc6252dSBram Moolenaar      let lines = ' ' . lines
695dc6252dSBram Moolenaar    endif
705dc6252dSBram Moolenaar    let retval = '+' . v:folddashes . lines
715dc6252dSBram Moolenaar
726be7f873SBram Moolenaar    return retval
736be7f873SBram Moolenaar  endfunction
74*82be4849SBram Moolenaarendif
756be7f873SBram Moolenaar
76*82be4849SBram Moolenaarlet b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<"
77*82be4849SBram Moolenaar      \ . " comments< commentstring< formatoptions< suffixesadd< include<"
78*82be4849SBram Moolenaar      \ . " define<"
7984f7235bSBram Moolenaar
8084f7235bSBram Moolenaarlet &cpo = s:cpo_save
8184f7235bSBram Moolenaarunlet s:cpo_save
82*82be4849SBram Moolenaar
83*82be4849SBram Moolenaar" vim: sw=2 et
84