blob: 31fa0c3213a48d56034b9bbce49753914cbbb902 [file] [log] [blame]
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001" Vim ftplugin file
Bram Moolenaar82be4842021-01-11 19:40:15 +01002" Language: Erlang (http://www.erlang.org)
3" Maintainer: Csaba Hoch <csaba.hoch@gmail.com>
Bram Moolenaarcb80aa22020-10-26 21:12:46 +01004" Author: Oscar Hellström <oscar@oscarh.net>
5" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
Bram Moolenaar6be7f872012-01-20 21:08:56 +01006" Eduardo Lopez (http://github.com/tapichu)
Bram Moolenaar82be4842021-01-11 19:40:15 +01007" Arvid Bjurklint (http://github.com/slarwise)
Bram Moolenaarf269eab2022-10-03 18:04:35 +01008" Last Update: 2021-Nov-22
Bram Moolenaar6be7f872012-01-20 21:08:56 +01009" License: Vim license
Bram Moolenaar82be4842021-01-11 19:40:15 +010010" URL: https://github.com/vim-erlang/vim-erlang-runtime
Bram Moolenaar6be7f872012-01-20 21:08:56 +010011
12if exists('b:did_ftplugin')
Bram Moolenaar82be4842021-01-11 19:40:15 +010013 finish
Bram Moolenaar6be7f872012-01-20 21:08:56 +010014endif
Bram Moolenaar82be4842021-01-11 19:40:15 +010015let b:did_ftplugin = 1
Bram Moolenaar6be7f872012-01-20 21:08:56 +010016
Bram Moolenaar84f72352012-03-11 15:57:40 +010017let s:cpo_save = &cpo
18set cpo&vim
19
Bram Moolenaar82be4842021-01-11 19:40:15 +010020let &l:keywordprg = get(g:, 'erlang_keywordprg', 'erl -man')
21
22if get(g:, 'erlang_folding', 0)
23 setlocal foldmethod=expr
24 setlocal foldexpr=GetErlangFold(v:lnum)
25 setlocal foldtext=ErlangFoldText()
Bram Moolenaar6be7f872012-01-20 21:08:56 +010026endif
27
Bram Moolenaar82be4842021-01-11 19:40:15 +010028setlocal comments=:%%%,:%%,:%
29setlocal commentstring=%%s
30
31setlocal formatoptions+=ro
32
Bram Moolenaarf269eab2022-10-03 18:04:35 +010033if get(g:, 'erlang_extend_path', 1)
34 " typical erlang.mk paths
35 let &l:path = join([
36 \ 'deps/*/include',
37 \ 'deps/*/src',
38 \ 'deps/*/test',
39 \ 'deps/*/apps/*/include',
40 \ 'deps/*/apps/*/src',
41 \ &g:path], ',')
42 " typical rebar3 paths
43 let &l:path = join([
44 \ 'apps/*/include',
45 \ 'apps/*/src',
46 \ '_build/default/lib/*/src',
47 \ '_build/default/*/include',
48 \ &l:path], ',')
49 " typical erlang paths
50 let &l:path = join(['include', 'src', 'test', &l:path], ',')
51
52 set wildignore+=*/.erlang.mk/*,*.beam
53endif
54
Bram Moolenaar82be4842021-01-11 19:40:15 +010055setlocal suffixesadd=.erl,.hrl
56
57let &l:include = '^\s*-\%(include\|include_lib\)\s*("\zs\f*\ze")'
58let &l:define = '^\s*-\%(define\|record\|type\|opaque\)'
Bram Moolenaar6be7f872012-01-20 21:08:56 +010059
Bram Moolenaar5dc62522012-02-13 00:05:22 +010060let s:erlang_fun_begin = '^\a\w*(.*$'
61let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$'
Bram Moolenaar6be7f872012-01-20 21:08:56 +010062
Bram Moolenaar82be4842021-01-11 19:40:15 +010063if !exists('*GetErlangFold')
64 function GetErlangFold(lnum)
65 let lnum = a:lnum
66 let line = getline(lnum)
Bram Moolenaar6be7f872012-01-20 21:08:56 +010067
Bram Moolenaar82be4842021-01-11 19:40:15 +010068 if line =~ s:erlang_fun_end
69 return '<1'
70 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010071
Bram Moolenaar82be4842021-01-11 19:40:15 +010072 if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
73 return '1'
74 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010075
Bram Moolenaar82be4842021-01-11 19:40:15 +010076 if line =~ s:erlang_fun_begin
77 return '>1'
78 endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010079
Bram Moolenaar82be4842021-01-11 19:40:15 +010080 return '='
81 endfunction
82endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010083
Bram Moolenaar82be4842021-01-11 19:40:15 +010084if !exists('*ErlangFoldText')
85 function ErlangFoldText()
86 let line = getline(v:foldstart)
87 let foldlen = v:foldend - v:foldstart + 1
88 let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
89 if foldlen < 10
90 let lines = ' ' . lines
91 endif
92 let retval = '+' . v:folddashes . lines
Bram Moolenaar6be7f872012-01-20 21:08:56 +010093
Bram Moolenaar82be4842021-01-11 19:40:15 +010094 return retval
95 endfunction
96endif
Bram Moolenaar6be7f872012-01-20 21:08:56 +010097
Bram Moolenaar82be4842021-01-11 19:40:15 +010098let b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<"
99 \ . " comments< commentstring< formatoptions< suffixesadd< include<"
100 \ . " define<"
Bram Moolenaar84f72352012-03-11 15:57:40 +0100101
102let &cpo = s:cpo_save
103unlet s:cpo_save
Bram Moolenaar82be4842021-01-11 19:40:15 +0100104
105" vim: sw=2 et