First stab at sticking a useful default into the package statement
[gitmo/moose-dev-utils.git] / vim / moose_snippets.vim
index d551e7c..ae377a6 100644 (file)
@@ -6,7 +6,11 @@ if !exists('loaded_snippet') || &cp
 endif
 
 function! RemoveEmptySuperClass()
-    s/^extends '<{}>';\n//e
+    if @z == "SuperClass"
+        s/extends '<{}>';\n\n//e
+        return ""
+    endif
+
     return @z
 endfun
 
@@ -34,11 +38,24 @@ function! SnippetFile(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:RemoveEmptySuperClass()}>';",
             \"",
             \"<{}>",
             \"",
@@ -46,6 +63,15 @@ 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}>',",
@@ -71,7 +97,7 @@ call Snippet('sub', [
             \"}"])
 call Snippet('around', [
             \"around <{name}> => sub {",
-            \    "my $orig = shift;",
+            \    "my $<{next}> = shift;",
             \    "my $self = shift;",
             \    "<{}>",
             \"};"])
@@ -86,6 +112,23 @@ call Snippet('after', [
             \    "<{}>",
             \"};"])
 
+" 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