endif
function! RemoveEmptySuperClass()
- s/^extends '<{}>';\n//e
+ if @z == "SuperClass"
+ s/extends '<{}>';\n\n//e
+ return ""
+ endif
+
return @z
endfun
return Snippet(abbr, str)
endfunction
+function! ParameterizedModule()
+ let current_file = expand("%")
+ let t = substitute(current_file, '\.pm', '', '')
+ let t = substitute(t, 'lib/', '', '')
+
+ " Sadly, this does not work because : is a special character in snippet
+ " tag names. Any ideas?
+ "let module = substitute(t, '/', '::', 'g')
+ let module = substitute(t, '/.*', '', '')
+
+ return '<{' . module . '}>'
+endfun
+
call Snippet('class', [
- \"package <{ClassName}>;",
+ \"package ".ParameterizedModule().";",
\"use Moose;",
\"",
- \"extends '<{SuperClass:RemoveEmptySuperClass()}>;",
+ \"extends '<{SuperClass:RemoveEmptySuperClass()}>';",
\"",
\"<{}>",
\"",
\"no Moose;",
\"",
\"1;"])
+call Snippet('role', [
+ \"package ".ParameterizedModule().";",
+ \"use Moose::Role;",
+ \"",
+ \"<{}>",
+ \"",
+ \"no Moose::Role;",
+ \"",
+ \"1;"])
call Snippet('has', [
\"has <{attr}> => (",
\ "is => '<{rw}>',",
\"}"])
call Snippet('around', [
\"around <{name}> => sub {",
- \ "my $orig = shift;",
+ \ "my $<{next}> = shift;",
\ "my $self = shift;",
\ "<{}>",
\"};"])
\ "<{}>",
\"};"])
+" MooseX support
+call Snippet('prole', [
+ \"package ".ParameterizedModule().";",
+ \"use MooseX::Role::Parameterized;",
+ \"",
+ \"<{}>",
+ \"",
+ \"role {",
+ \"my $p = shift;",
+ \"",
+ \"<{}>",
+ \"};",
+ \"",
+ \"no MooseX::Role::Parameterized;",
+ \"",
+ \"1;"])
+
"for file in globpath(&rtp, 'snippets/*')
"call SnippetFile(file)
"endfor