From 88ac78940d47f03937b5c4c5eafef62e6425fcab Mon Sep 17 00:00:00 2001 From: Kevin Clark Date: Sat, 14 Mar 2009 20:27:58 -0700 Subject: [PATCH] Handle &block better in ArgumentDuster --- lib/dust/argument_duster.rb | 7 +++++++ spec/argument_duster_spec.rb | 19 +++++++++++++++++++ spec/fixtures/local_variable_badness.rb | 12 ++++++++++++ 3 files changed, 38 insertions(+) diff --git a/lib/dust/argument_duster.rb b/lib/dust/argument_duster.rb index 0680d2c..497be06 100644 --- a/lib/dust/argument_duster.rb +++ b/lib/dust/argument_duster.rb @@ -20,5 +20,12 @@ def process_args(args) s(:args, *args) end + + def process_block_arg(exp) + name = exp.shift + @args << name + use name + s(:block_arg, name) + end end end diff --git a/spec/argument_duster_spec.rb b/spec/argument_duster_spec.rb index fee9bd0..d4c737f 100644 --- a/spec/argument_duster_spec.rb +++ b/spec/argument_duster_spec.rb @@ -1,5 +1,6 @@ require File.dirname(__FILE__) + '/spec_helper' require 'fixtures/local_variable_badness' +require 'fixtures/block_badness' include Fixtures @@ -33,4 +34,22 @@ duster.dust! duster.warnings.should == [] end + + it "should handle &block in args when called" do + duster = Dust::ArgumentDuster.new(LocalVariableBadness, :block_arg_called) + duster.dust! + duster.warnings.should == [] + end + + it "should handle &block in args when curried" do + duster = Dust::ArgumentDuster.new(LocalVariableBadness, :block_arg_curried) + duster.dust! + duster.warnings.should == [] + end + + it "should warn when &block in args is unused" do + duster = Dust::ArgumentDuster.new(LocalVariableBadness, :block_arg_unused) + duster.dust! + duster.warnings.should == [Dust::Warnings::UnusedArgument.new(:block)] + end end diff --git a/spec/fixtures/local_variable_badness.rb b/spec/fixtures/local_variable_badness.rb index 801257c..ccce272 100644 --- a/spec/fixtures/local_variable_badness.rb +++ b/spec/fixtures/local_variable_badness.rb @@ -72,5 +72,17 @@ def args_used_with_splats(args) def default_args(args=false) args end + + def block_arg_unused(&block) + 1 + 2 + end + + def block_arg_called(&block) + block.call + end + + def block_arg_curried(&block) + respond(&block) + end end end