d69c740067d994953e10a0dc786b13e4d1222f4e
[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! RemoveEmptySuperClass()
9     s/^extends '<{}>';\n//e
10     return @z
11 endfun
12
13 function! RemoveEmptyLine()
14     s/^\s*<{}>\s*\n//e
15     return @z
16 endfun
17
18 function! Snippet(abbr, str)
19     if type(a:str) == type([])
20         return Snippet(a:abbr, join(a:str, "\n"))
21     endif
22     let st = g:snip_start_tag
23     let et = g:snip_end_tag
24     let cd = g:snip_elem_delim
25     let str = substitute(a:str, '<{.\{-}\zs:\ze.\{-}}>', cd, "")
26     let str = substitute(str, '<{', st, "")
27     let str = substitute(str, '}>', et, "")
28     exec 'Snippet '.a:abbr.' '.str
29 endfunction
30
31 function! SnippetFile(filename)
32     let abbr = fnamemodify(a:filename, ':t:r')
33     let str = readfile(a:filename)
34     return Snippet(abbr, str)
35 endfunction
36
37 call Snippet('class', [
38             \"package <{ClassName}>;",
39             \"use Moose;",
40             \"",
41             \"extends '<{SuperClass:RemoveEmptySuperClass()}>;",
42             \"",
43             \"<{}>",
44             \"",
45             \"__PACKAGE__->meta->make_immutable;",
46             \"no Moose;",
47             \"",
48             \"1;"])
49 call Snippet('role', [
50             \"package <{RoleName}>;",
51             \"use Moose::Role;",
52             \"",
53             \"<{}>",
54             \"",
55             \"no Moose::Role;",
56             \"",
57             \"1;"])
58 call Snippet('has', [
59             \"has <{attr}> => (",
60             \    "is  => '<{rw}>',",
61             \    "isa => '<{Str}>',",
62             \    "<{options:RemoveEmptyLine()}>",
63             \");"])
64 call Snippet('hasl', [
65             \"has <{attr}> => (",
66             \    "is         => '<{rw}>',",
67             \    "isa        => '<{Str}>',",
68             \    "lazy_build => 1,",
69             \    "<{options:RemoveEmptyLine()}>",
70             \");",
71             \"",
72             \"sub _build_<{attr}> {",
73             \    "my $self = shift;",
74             \    "<{}>",
75             \"}"])
76 call Snippet('sub', [
77             \"sub <{name}> {",
78             \    "my $self = shift;",
79             \    "<{}>",
80             \"}"])
81 call Snippet('around', [
82             \"around <{name}> => sub {",
83             \    "my $<{next}> = shift;",
84             \    "my $self = shift;",
85             \    "<{}>",
86             \"};"])
87 call Snippet('before', [
88             \"before <{name}> => sub {",
89             \    "my $self = shift;",
90             \    "<{}>",
91             \"};"])
92 call Snippet('after', [
93             \"after <{name}> => sub {",
94             \    "my $self = shift;",
95             \    "<{}>",
96             \"};"])
97
98 " MooseX support
99 call Snippet('prole', [
100             \"package <{RoleName}>;",
101             \"use MooseX::Role::Parameterized;",
102             \"",
103             \"<{}>",
104             \"",
105             \"role {",
106             \"my $p = shift;",
107             \"",
108             \"<{}>",
109             \"};",
110             \"",
111             \"no MooseX::Role::Parameterized;",
112             \"",
113             \"1;"])
114
115 "for file in globpath(&rtp, 'snippets/*')
116     "call SnippetFile(file)
117 "endfor