finish
endif
-function! RemoveEmptySuperClass()
- s/^extends '<{}>';\n//e
- return @z
+function! RemoveUnchangedLine()
+ if match(getline('.'), "<{}>") >= 0
+ normal! dd
+ return ''
+ else
+ return @z
+ endif
endfun
-function! RemoveEmptyLine()
- s/^\s*<{}>\s*\n//e
- return @z
+function! RemoveUnchangedLineSemicolon()
+ if match(getline('.'), "<{}>") >= 0
+ normal! ddkA;
+ normal! o
+ return ''
+ else
+ normal! A;
+ "normal! o " we can't actually change what line we're on :/
+ return @z
+ endif
endfun
function! Snippet(abbr, str)
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:RemoveUnchangedLine()}>';",
\"",
\"<{}>",
\"",
\"",
\"1;"])
call Snippet('role', [
- \"package <{RoleName}>;",
+ \"package ".ParameterizedModule().";",
\"use Moose::Role;",
\"",
\"<{}>",
\"has <{attr}> => (",
\ "is => '<{rw}>',",
\ "isa => '<{Str}>',",
- \ "<{options:RemoveEmptyLine()}>",
+ \ "<{options:RemoveUnchangedLine()}>",
\");"])
call Snippet('hasl', [
\"has <{attr}> => (",
\ "is => '<{rw}>',",
\ "isa => '<{Str}>',",
\ "lazy_build => 1,",
- \ "<{options:RemoveEmptyLine()}>",
+ \ "<{options:RemoveUnchangedLine()}>",
\");",
\"",
\"sub _build_<{attr}> {",
call Snippet('sub', [
\"sub <{name}> {",
\ "my $self = shift;",
+ \ "my (<{arg:RemoveUnchangedLine()}>) = @_;",
\ "<{}>",
\"}"])
call Snippet('around', [
\ "my $self = shift;",
\ "<{}>",
\"};"])
+call Snippet('subtype', [
+ \"subtype '<{name}>'",
+ \ "=> as '<{supertype}>'",
+ \ "=> where { <{predicate:RemoveUnchangedLine()}> }",
+ \ "=> message { \"<{message:RemoveUnchangedLineSemicolon()}>\" }",
+ \""])
+
+" 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)