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