X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=vim%2Fmoose_snippets.vim;h=eb5260d19b22e076be1163c5e064f1d2a6f98d64;hb=ec985a7b4fa6d27117020e427d0f462152791186;hp=4f9a8c1b20cfd8299b8f18f24927c4a165a271fd;hpb=a55ef8276f4969ab07641f8cb569bf863b2c4786;p=gitmo%2Fmoose-dev-utils.git diff --git a/vim/moose_snippets.vim b/vim/moose_snippets.vim index 4f9a8c1..eb5260d 100644 --- a/vim/moose_snippets.vim +++ b/vim/moose_snippets.vim @@ -1,21 +1,32 @@ " See http://www.vim.org/scripts/script.php?script_id=1318 -" Written by Sartak, feel free to add your own! +" Written by Sartak and doy, feel free to add your own! if !exists('loaded_snippet') || &cp 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) +function! Snippet(abbr, str) if type(a:str) == type([]) return Snippet(a:abbr, join(a:str, "\n")) endif @@ -28,17 +39,29 @@ function Snippet(abbr, str) exec 'Snippet '.a:abbr.' '.str endfunction -function SnippetFile(filename) +function! SnippetFile(filename) let abbr = fnamemodify(a:filename, ':t:r') let str = readfile(a:filename) 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()}>';", \"", \"<{}>", \"", @@ -46,18 +69,27 @@ call Snippet('class', [ \"no Moose;", \"", \"1;"]) +call Snippet('role', [ + \"package ".ParameterizedModule().";", + \"use Moose::Role;", + \"", + \"<{}>", + \"", + \"no Moose::Role;", + \"", + \"1;"]) call Snippet('has', [ \"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}> {", @@ -67,11 +99,12 @@ call Snippet('hasl', [ call Snippet('sub', [ \"sub <{name}> {", \ "my $self = shift;", + \ "my (<{arg:RemoveUnchangedLine()}>) = @_;", \ "<{}>", \"}"]) call Snippet('around', [ \"around <{name}> => sub {", - \ "my $orig = shift;", + \ "my $<{next}> = shift;", \ "my $self = shift;", \ "<{}>", \"};"]) @@ -85,6 +118,29 @@ call Snippet('after', [ \ "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)