Remove empty space :)
[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;",
bf6996ff 64 \"extends '<{SuperClass:RemoveUnchangedLine()}>';",
9e14e28f 65 \"",
66 \"<{}>",
67 \"",
68 \"__PACKAGE__->meta->make_immutable;",
69 \"no Moose;",
70 \"",
71 \"1;"])
49ac30b5 72call Snippet('role', [
f26587a1 73 \"package ".ParameterizedModule().";",
49ac30b5 74 \"use Moose::Role;",
75 \"",
76 \"<{}>",
77 \"",
78 \"no Moose::Role;",
79 \"",
80 \"1;"])
9e14e28f 81call Snippet('has', [
82 \"has <{attr}> => (",
83 \ "is => '<{rw}>',",
84 \ "isa => '<{Str}>',",
c7adedbc 85 \ "<{options:RemoveUnchangedLine()}>",
9e14e28f 86 \");"])
87call Snippet('hasl', [
88 \"has <{attr}> => (",
89 \ "is => '<{rw}>',",
90 \ "isa => '<{Str}>',",
91 \ "lazy_build => 1,",
c7adedbc 92 \ "<{options:RemoveUnchangedLine()}>",
9e14e28f 93 \");",
94 \"",
a75bdf8d 95 \"sub _build_<{attr}> {",
9e14e28f 96 \ "my $self = shift;",
97 \ "<{}>",
98 \"}"])
99call Snippet('sub', [
100 \"sub <{name}> {",
101 \ "my $self = shift;",
c7adedbc 102 \ "my (<{arg:RemoveUnchangedLine()}>) = @_;",
9e14e28f 103 \ "<{}>",
104 \"}"])
105call Snippet('around', [
106 \"around <{name}> => sub {",
babbac06 107 \ "my $<{next}> = shift;",
9e14e28f 108 \ "my $self = shift;",
109 \ "<{}>",
110 \"};"])
9ac2672c 111call Snippet('before', [
112 \"before <{name}> => sub {",
113 \ "my $self = shift;",
114 \ "<{}>",
115 \"};"])
116call Snippet('after', [
117 \"after <{name}> => sub {",
118 \ "my $self = shift;",
119 \ "<{}>",
120 \"};"])
6588bf04 121call Snippet('subtype', [
122 \"subtype '<{name}>'",
123 \ "=> as '<{supertype}>'",
124 \ "=> where { <{predicate:RemoveUnchangedLine()}> }",
125 \ "=> message { \"<{message:RemoveUnchangedLineSemicolon()}>\" }",
126 \""])
bb2ea7b7 127
41348999 128" MooseX support
129call Snippet('prole', [
f26587a1 130 \"package ".ParameterizedModule().";",
41348999 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
9e14e28f 145"for file in globpath(&rtp, 'snippets/*')
146 "call SnippetFile(file)
147"endfor