Commit | Line | Data |
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 | |
4 | if !exists('loaded_snippet') || &cp |
5 | finish |
6 | endif |
7 | |
c7adedbc |
8 | function! RemoveUnchangedLine() |
9 | if match(getline('.'), "<{}>") >= 0 |
10 | normal! dd |
11 | return '' |
12 | else |
13 | return @z |
4c82fd0d |
14 | endif |
a55ef827 |
15 | endfun |
16 | |
6588bf04 |
17 | function! 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 |
27 | endfun |
28 | |
f93358a2 |
29 | function! 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 |
40 | endfunction |
41 | |
f93358a2 |
42 | function! SnippetFile(filename) |
9e14e28f |
43 | let abbr = fnamemodify(a:filename, ':t:r') |
44 | let str = readfile(a:filename) |
45 | return Snippet(abbr, str) |
46 | endfunction |
47 | |
f26587a1 |
48 | function! 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 . '}>' |
59 | endfun |
60 | |
9e14e28f |
61 | call 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 |
73 | call Snippet('role', [ |
f26587a1 |
74 | \"package ".ParameterizedModule().";", |
49ac30b5 |
75 | \"use Moose::Role;", |
76 | \"", |
77 | \"<{}>", |
78 | \"", |
79 | \"no Moose::Role;", |
80 | \"", |
81 | \"1;"]) |
9e14e28f |
82 | call Snippet('has', [ |
83 | \"has <{attr}> => (", |
84 | \ "is => '<{rw}>',", |
85 | \ "isa => '<{Str}>',", |
c7adedbc |
86 | \ "<{options:RemoveUnchangedLine()}>", |
9e14e28f |
87 | \");"]) |
88 | call 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 | \"}"]) |
100 | call Snippet('sub', [ |
101 | \"sub <{name}> {", |
102 | \ "my $self = shift;", |
c7adedbc |
103 | \ "my (<{arg:RemoveUnchangedLine()}>) = @_;", |
9e14e28f |
104 | \ "<{}>", |
105 | \"}"]) |
106 | call Snippet('around', [ |
107 | \"around <{name}> => sub {", |
babbac06 |
108 | \ "my $<{next}> = shift;", |
9e14e28f |
109 | \ "my $self = shift;", |
110 | \ "<{}>", |
111 | \"};"]) |
9ac2672c |
112 | call Snippet('before', [ |
113 | \"before <{name}> => sub {", |
114 | \ "my $self = shift;", |
115 | \ "<{}>", |
116 | \"};"]) |
117 | call Snippet('after', [ |
118 | \"after <{name}> => sub {", |
119 | \ "my $self = shift;", |
120 | \ "<{}>", |
121 | \"};"]) |
6588bf04 |
122 | call Snippet('subtype', [ |
123 | \"subtype '<{name}>'", |
124 | \ "=> as '<{supertype}>'", |
125 | \ "=> where { <{predicate:RemoveUnchangedLine()}> }", |
126 | \ "=> message { \"<{message:RemoveUnchangedLineSemicolon()}>\" }", |
127 | \""]) |
bb2ea7b7 |
128 | |
41348999 |
129 | " MooseX support |
130 | call 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 |