more readable moose snippets
[gitmo/moose-dev-utils.git] / vim / moose_snippets.vim
CommitLineData
bb2ea7b7 1" See http://www.vim.org/scripts/script.php?script_id=1318
2" Written by Sartak, feel free to add your own!
3
4if !exists('loaded_snippet') || &cp
5 finish
6endif
7
9e14e28f 8function RemoveEmptySuperClass()
9a5242eb 9 s/^extends '<{}>';\n//e
10 return @z
11endfun
12
9e14e28f 13function LazyBuilder()
14 let pattern = "has\\s\\+\\zs.\\{-}\\ze\\s\\+=>"
15 let lnum = search(pattern, 'bnW')
16 return matchstr(getline(lnum), pattern)
17endfunction
18
19function Snippet(abbr, str)
20 if type(a:str) == type([])
21 return Snippet(a:abbr, join(a:str, "\n"))
22 endif
23 let st = g:snip_start_tag
24 let et = g:snip_end_tag
25 let cd = g:snip_elem_delim
26 let str = substitute(a:str, '<{.\{-}\zs:\ze.\{-}}>', cd, "")
27 let str = substitute(str, '<{', st, "")
28 let str = substitute(str, '}>', et, "")
29 exec 'Snippet '.a:abbr.' '.str
30endfunction
31
32function SnippetFile(filename)
33 let abbr = fnamemodify(a:filename, ':t:r')
34 let str = readfile(a:filename)
35 return Snippet(abbr, str)
36endfunction
37
38call Snippet('class', [
39 \"package <{ClassName}>;",
40 \"use Moose;",
41 \"",
42 \"extends '<{SuperClass:RemoveEmptySuperClass()}>;",
43 \"",
44 \"<{}>",
45 \"",
46 \"__PACKAGE__->meta->make_immutable;",
47 \"no Moose;",
48 \"",
49 \"1;"])
50call Snippet('has', [
51 \"has <{attr}> => (",
52 \ "is => '<{rw}>',",
53 \ "isa => '<{Str}>',",
54 \ "<{}>",
55 \");"])
56call Snippet('hasl', [
57 \"has <{attr}> => (",
58 \ "is => '<{rw}>',",
59 \ "isa => '<{Str}>',",
60 \ "lazy_build => 1,",
61 \ "<{}>",
62 \");",
63 \"",
64 \"sub _build_<{attr:LazyBuilder()}> {",
65 \ "my $self = shift;",
66 \ "<{}>",
67 \"}"])
68call Snippet('sub', [
69 \"sub <{name}> {",
70 \ "my $self = shift;",
71 \ "<{}>",
72 \"}"])
73call Snippet('around', [
74 \"around <{name}> => sub {",
75 \ "my $orig = shift;",
76 \ "my $self = shift;",
77 \ "<{}>",
78 \"};"])
bb2ea7b7 79
9e14e28f 80"for file in globpath(&rtp, 'snippets/*')
81 "call SnippetFile(file)
82"endfor