Add missing '
[gitmo/moose-dev-utils.git] / vim / moose_snippets.vim
CommitLineData
bb2ea7b7 1" See http://www.vim.org/scripts/script.php?script_id=1318
9f4e6b22 2" Written by Sartak and doy, feel free to add your own!
bb2ea7b7 3
4if !exists('loaded_snippet') || &cp
5 finish
6endif
7
c7adedbc 8function! RemoveUnchangedLine()
9 if match(getline('.'), "<{}>") >= 0
10 normal! dd
11 return ''
12 else
13 return @z
4c82fd0d 14 endif
a55ef827 15endfun
16
6588bf04 17function! 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
27endfun
28
f93358a2 29function! Snippet(abbr, str)
9e14e28f 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
40endfunction
41
f93358a2 42function! SnippetFile(filename)
9e14e28f 43 let abbr = fnamemodify(a:filename, ':t:r')
44 let str = readfile(a:filename)
45 return Snippet(abbr, str)
46endfunction
47
f26587a1 48function! 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 . '}>'
59endfun
60
9e14e28f 61call Snippet('class', [
f26587a1 62 \"package ".ParameterizedModule().";",
9e14e28f 63 \"use Moose;",
64 \"",
bf6996ff 65 \"extends '<{SuperClass:RemoveUnchangedLine()}>';",
9e14e28f 66 \"",
67 \"<{}>",
68 \"",
69 \"__PACKAGE__->meta->make_immutable;",
70 \"no Moose;",
71 \"",
72 \"1;"])
49ac30b5 73call Snippet('role', [
f26587a1 74 \"package ".ParameterizedModule().";",
49ac30b5 75 \"use Moose::Role;",
76 \"",
77 \"<{}>",
78 \"",
79 \"no Moose::Role;",
80 \"",
81 \"1;"])
9e14e28f 82call Snippet('has', [
83 \"has <{attr}> => (",
84 \ "is => '<{rw}>',",
85 \ "isa => '<{Str}>',",
c7adedbc 86 \ "<{options:RemoveUnchangedLine()}>",
9e14e28f 87 \");"])
88call Snippet('hasl', [
89 \"has <{attr}> => (",
90 \ "is => '<{rw}>',",
91 \ "isa => '<{Str}>',",
92 \ "lazy_build => 1,",
c7adedbc 93 \ "<{options:RemoveUnchangedLine()}>",
9e14e28f 94 \");",
95 \"",
a75bdf8d 96 \"sub _build_<{attr}> {",
9e14e28f 97 \ "my $self = shift;",
98 \ "<{}>",
99 \"}"])
100call Snippet('sub', [
101 \"sub <{name}> {",
102 \ "my $self = shift;",
c7adedbc 103 \ "my (<{arg:RemoveUnchangedLine()}>) = @_;",
9e14e28f 104 \ "<{}>",
105 \"}"])
106call Snippet('around', [
107 \"around <{name}> => sub {",
babbac06 108 \ "my $<{next}> = shift;",
9e14e28f 109 \ "my $self = shift;",
110 \ "<{}>",
111 \"};"])
9ac2672c 112call Snippet('before', [
113 \"before <{name}> => sub {",
114 \ "my $self = shift;",
115 \ "<{}>",
116 \"};"])
117call Snippet('after', [
118 \"after <{name}> => sub {",
119 \ "my $self = shift;",
120 \ "<{}>",
121 \"};"])
6588bf04 122call Snippet('subtype', [
123 \"subtype '<{name}>'",
124 \ "=> as '<{supertype}>'",
125 \ "=> where { <{predicate:RemoveUnchangedLine()}> }",
126 \ "=> message { \"<{message:RemoveUnchangedLineSemicolon()}>\" }",
127 \""])
bb2ea7b7 128
41348999 129" MooseX support
130call Snippet('prole', [
f26587a1 131 \"package ".ParameterizedModule().";",
41348999 132 \"use MooseX::Role::Parameterized;",
133 \"",
134 \"<{}>",
135 \"",
136 \"role {",
137 \"my $p = shift;",
138 \"",
139 \"<{}>",
140 \"};",
141 \"",
142 \"no MooseX::Role::Parameterized;",
143 \"",
144 \"1;"])
145
9e14e28f 146"for file in globpath(&rtp, 'snippets/*')
147 "call SnippetFile(file)
148"endfor