Mercurial > vim
annotate runtime/indent/eiffel.vim @ 11003:bf484fd6443a
Added tag v8.0.0390 for changeset 35d4975a5bb588773c962fde166f6ff560d4bed4
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 01 Mar 2017 12:30:04 +0100 |
parents | 9cb3a75a20b9 |
children | d0a20101ecb2 |
rev | line source |
---|---|
7 | 1 " Vim indent file |
2 " Language: Eiffel | |
3557 | 3 " Maintainer: Jocelyn Fiat <jfiat@eiffel.com> |
26 | 4 " Previous-Maintainer: David Clarke <gadicath@dishevelled.net> |
3557 | 5 " Contributions from: Thilo Six |
2034 | 6 " $Date: 2004/12/09 21:33:52 $ |
7 " $Revision: 1.3 $ | |
3557 | 8 " URL: https://github.com/eiffelhub/vim-eiffel |
7 | 9 |
10 " Only load this indent file when no other was loaded. | |
11 if exists("b:did_indent") | |
12 finish | |
13 endif | |
14 let b:did_indent = 1 | |
15 | |
16 setlocal indentexpr=GetEiffelIndent() | |
17 setlocal nolisp | |
18 setlocal nosmartindent | |
19 setlocal nocindent | |
20 setlocal autoindent | |
21 setlocal comments=:-- | |
22 setlocal indentkeys+==end,=else,=ensure,=require,=check,=loop,=until | |
23 setlocal indentkeys+==creation,=feature,=inherit,=class,=is,=redefine,=rename,=variant | |
24 setlocal indentkeys+==invariant,=do,=local,=export | |
25 | |
3557 | 26 let b:undo_indent = "setl smartindent< indentkeys< indentexpr< autoindent< comments< " |
27 | |
7 | 28 " Define some stuff |
29 " keywords grouped by indenting | |
30 let s:trust_user_indent = '\(+\)\(\s*\(--\).*\)\=$' | |
31 let s:relative_indent = '^\s*\(deferred\|class\|feature\|creation\|inherit\|loop\|from\|until\|if\|else\|elseif\|ensure\|require\|check\|do\|local\|invariant\|variant\|rename\|redefine\|do\|export\)\>' | |
32 let s:outdent = '^\s*\(else\|invariant\|variant\|do\|require\|until\|loop\|local\)\>' | |
33 let s:no_indent = '^\s*\(class\|feature\|creation\|inherit\)\>' | |
34 let s:single_dent = '^[^-]\+[[:alnum:]]\+ is\(\s*\(--\).*\)\=$' | |
35 let s:inheritance_dent = '\s*\(redefine\|rename\|export\)\>' | |
36 | |
37 | |
38 " Only define the function once. | |
39 if exists("*GetEiffelIndent") | |
40 finish | |
41 endif | |
3557 | 42 |
3526
dd6c2497c997
Fix more 'cpo' issues in runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
43 let s:keepcpo= &cpo |
dd6c2497c997
Fix more 'cpo' issues in runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
44 set cpo&vim |
7 | 45 |
46 function GetEiffelIndent() | |
47 | |
48 " Eiffel Class indenting | |
49 " | |
50 " Find a non-blank line above the current line. | |
51 let lnum = prevnonblank(v:lnum - 1) | |
52 | |
53 " At the start of the file use zero indent. | |
54 if lnum == 0 | |
55 return 0 | |
56 endif | |
57 | |
58 " trust the user's indenting | |
59 if getline(lnum) =~ s:trust_user_indent | |
60 return -1 | |
61 endif | |
62 | |
63 " Add a 'shiftwidth' after lines that start with an indent word | |
64 let ind = indent(lnum) | |
65 if getline(lnum) =~ s:relative_indent | |
66 let ind = ind + &sw | |
67 endif | |
68 | |
69 " Indent to single indent | |
70 if getline(v:lnum) =~ s:single_dent && getline(v:lnum) !~ s:relative_indent | |
71 \ && getline(v:lnum) !~ '\s*\<\(and\|or\|implies\)\>' | |
72 let ind = &sw | |
73 endif | |
74 | |
75 " Indent to double indent | |
76 if getline(v:lnum) =~ s:inheritance_dent | |
77 let ind = 2 * &sw | |
78 endif | |
79 | |
80 " Indent line after the first line of the function definition | |
81 if getline(lnum) =~ s:single_dent | |
82 let ind = ind + &sw | |
83 endif | |
84 | |
85 " The following should always be at the start of a line, no indenting | |
86 if getline(v:lnum) =~ s:no_indent | |
87 let ind = 0 | |
88 endif | |
89 | |
90 " Subtract a 'shiftwidth', if this isn't the first thing after the 'is' | |
91 " or first thing after the 'do' | |
92 if getline(v:lnum) =~ s:outdent && getline(v:lnum - 1) !~ s:single_dent | |
93 \ && getline(v:lnum - 1) !~ '^\s*do\>' | |
94 let ind = ind - &sw | |
95 endif | |
96 | |
97 " Subtract a shiftwidth for end statements | |
98 if getline(v:lnum) =~ '^\s*end\>' | |
99 let ind = ind - &sw | |
100 endif | |
101 | |
102 " set indent of zero end statements that are at an indent of 3, this should | |
103 " only ever be the class's end. | |
26 | 104 if getline(v:lnum) =~ '^\s*end\>' && ind == &sw |
7 | 105 let ind = 0 |
106 endif | |
107 | |
108 return ind | |
109 endfunction | |
110 | |
3526
dd6c2497c997
Fix more 'cpo' issues in runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
111 let &cpo = s:keepcpo |
dd6c2497c997
Fix more 'cpo' issues in runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
112 unlet s:keepcpo |
dd6c2497c997
Fix more 'cpo' issues in runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2034
diff
changeset
|
113 |
7 | 114 " vim:sw=2 |