Remove empty space :)
[gitmo/moose-dev-utils.git] / vim / moose_snippets.vim
1 " See http://www.vim.org/scripts/script.php?script_id=1318
2 " Written by Sartak and doy, feel free to add your own!
3
4 if !exists('loaded_snippet') || &cp
5     finish
6 endif
7
8 function! RemoveUnchangedLine()
9     if match(getline('.'), "<{}>") >= 0
10         normal! dd
11         return ''
12     else
13         return @z
14     endif
15 endfun
16
17 function! RemoveUnchangedLineSemicolon()
18     if match(getline('.'), "<{}>") >= 0
19         normal! ddkA;
20         normal! o
21         return ''
22     else
23         normal! A;
24         "normal! o " we can't actually change what line we're on :/
25         return @z
26     endif
27 endfun
28
29 function! Snippet(abbr, str)
30     if type(a:str) == type([])
31         return Snippet(a:abbr, join(a:str, "\n"))
32     endif
33     let st = g:snip_start_tag
34     let et = g:snip_end_tag
35     let cd = g:snip_elem_delim
36     let str = substitute(a:str, '<{.\{-}\zs:\ze.\{-}}>', cd, "")
37     let str = substitute(str, '<{', st, "")
38     let str = substitute(str, '}>', et, "")
39     exec 'Snippet '.a:abbr.' '.str
40 endfunction
41
42 function! SnippetFile(filename)
43     let abbr = fnamemodify(a:filename, ':t:r')
44     let str = readfile(a:filename)
45     return Snippet(abbr, str)
46 endfunction
47
48 function! ParameterizedModule()
49     let current_file = expand("%")
50     let t = substitute(current_file, '\.pm', '', '')
51     let t = substitute(t, 'lib/', '', '')
52
53     " Sadly, this does not work because : is a special character in snippet
54     " tag names. Any ideas?
55     "let module = substitute(t, '/', '::', 'g')
56     let module = substitute(t, '/.*', '', '')
57
58     return '<{' . module . '}>'
59 endfun
60
61 call Snippet('class', [
62             \"package ".ParameterizedModule().";",
63             \"use Moose;",
64             \"extends '<{SuperClass:RemoveUnchangedLine()}>';",
65             \"",
66             \"<{}>",
67             \"",
68             \"__PACKAGE__->meta->make_immutable;",
69             \"no Moose;",
70             \"",
71             \"1;"])
72 call Snippet('role', [
73             \"package ".ParameterizedModule().";",
74             \"use Moose::Role;",
75             \"",
76             \"<{}>",
77             \"",
78             \"no Moose::Role;",
79             \"",
80             \"1;"])
81 call Snippet('has', [
82             \"has <{attr}> => (",
83             \    "is  => '<{rw}>',",
84             \    "isa => '<{Str}>',",
85             \    "<{options:RemoveUnchangedLine()}>",
86             \");"])
87 call Snippet('hasl', [
88             \"has <{attr}> => (",
89             \    "is         => '<{rw}>',",
90             \    "isa        => '<{Str}>',",
91             \    "lazy_build => 1,",
92             \    "<{options:RemoveUnchangedLine()}>",
93             \");",
94             \"",
95             \"sub _build_<{attr}> {",
96             \    "my $self = shift;",
97             \    "<{}>",
98             \"}"])
99 call Snippet('sub', [
100             \"sub <{name}> {",
101             \    "my $self = shift;",
102             \    "my (<{arg:RemoveUnchangedLine()}>) = @_;",
103             \    "<{}>",
104             \"}"])
105 call Snippet('around', [
106             \"around <{name}> => sub {",
107             \    "my $<{next}> = shift;",
108             \    "my $self = shift;",
109             \    "<{}>",
110             \"};"])
111 call Snippet('before', [
112             \"before <{name}> => sub {",
113             \    "my $self = shift;",
114             \    "<{}>",
115             \"};"])
116 call Snippet('after', [
117             \"after <{name}> => sub {",
118             \    "my $self = shift;",
119             \    "<{}>",
120             \"};"])
121 call Snippet('subtype', [
122             \"subtype '<{name}>'",
123             \    "=> as '<{supertype}>'",
124             \    "=> where { <{predicate:RemoveUnchangedLine()}> }",
125             \    "=> message { \"<{message:RemoveUnchangedLineSemicolon()}>\" }",
126             \""])
127
128 " MooseX support
129 call Snippet('prole', [
130             \"package ".ParameterizedModule().";",
131             \"use MooseX::Role::Parameterized;",
132             \"",
133             \"<{}>",
134             \"",
135             \"role {",
136             \"my $p = shift;",
137             \"",
138             \"<{}>",
139             \"};",
140             \"",
141             \"no MooseX::Role::Parameterized;",
142             \"",
143             \"1;"])
144
145 "for file in globpath(&rtp, 'snippets/*')
146     "call SnippetFile(file)
147 "endfor