<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/nitpick/supression.rb</filename>
    </added>
    <added>
      <filename>spec/fixtures/suppressions.yaml</filename>
    </added>
    <added>
      <filename>spec/suppression_file_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,6 @@
+== HEAD / DATE
+ * Suppression file support [NEW]
+
 == 1.0.1 / 3-19-09
  * Typo in runner [FIXED]
 </diff>
      <filename>Changelog</filename>
    </modified>
    <modified>
      <diff>@@ -13,24 +13,28 @@ opts = Trollop.options do
   banner &lt;&lt;-BANNER
 Nitpick is a lint-like static code analyzer for Ruby.
 
-Usage: `nitpick [(--only str | --except str)*|-h] file1.rb file2.rb`
+Usage: `nitpick [(--only str | --except str | --supp file)*|-h] file1.rb file2.rb`
 
 By default, nitpick will analyze *all* loaded code. To reduce the noise:
 
 BANNER
-  opt :only, &quot;Nitpick only classes/modules that match this string.&quot;, :type =&gt; :string, :multi =&gt; true
-  opt :except, &quot;Don't nitpick classes/modules that match this string.&quot;, :type =&gt; :string, :multi =&gt; true
+  opt :only,    &quot;Nitpick only classes/modules that match this string.&quot;, :type =&gt; :string, :multi =&gt; true
+  opt :except,  &quot;Don't nitpick classes/modules that match this string.&quot;, :type =&gt; :string, :multi =&gt; true
+  opt :supp,    &quot;Suppress warnings based on a suppression file&quot;, :type =&gt; :io, :multi =&gt; true
 end
 
 # TODO(kevinclark) 2009-03-19: Figure out how to make this print -h
 Trollop.die &quot;I need something to nitpick. Gimmie a filename or two. Or ten&quot; if ARGV.size == 0
 
-NitpickOptions = { :only =&gt; opts[:only] || [], :except =&gt; opts[:except] || []}
+NitpickOptions = { :only =&gt; opts[:only] || [], :except =&gt; opts[:except] || [], :supp =&gt; opts[:supp] || [] }
+
 Nitpickers = [
   Nitpick::ArgumentNitpicker, Nitpick::BlockNitpicker, Nitpick::BranchNitpicker,
   Nitpick::LocalVariableNitpicker, Nitpick::MethodNitpicker, Nitpick::RescueNitpicker
 ]
 
+SuppressionRules = NitpickOptions[:supp].map {|supp| Nitpick::Suppression.new(supp.read) }
+
 class Module
   # So we don't set off -w
   alias_method :original_method_added, :method_added
@@ -43,6 +47,8 @@ class Module
     # Only means it must match one
     return unless NitpickOptions[:only].find {|namespace|  /#{namespace}/ =~ self.to_s } or
                     NitpickOptions[:only].empty?
+    # skip if any of our rules say so
+    return if SuppressionRules.any? {|rule| rule.suppress?(self.to_s) }
     
     warnings = Nitpickers.map do |nitpicker_class|
       nitpicker = nitpicker_class.new(self, name)</diff>
      <filename>bin/nitpick</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,8 @@ require 'rubygems'
 require 'parse_tree'
 require 'ruby2ruby'
 
+require 'nitpick/supression'
+
 require 'nitpick/warnings/simple_warning'
 require 'nitpick/warnings/unused_variable'
 require 'nitpick/warnings/unprotected_block'</diff>
      <filename>lib/nitpick.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>db88f801b4e0d76766d10e4f93e386e7589d37c3</id>
    </parent>
  </parents>
  <author>
    <name>Kevin Clark</name>
    <email>kevin.clark@gmail.com</email>
  </author>
  <url>http://github.com/kevinclark/nitpick/commit/71710620da084a227c71143ed92d5fcb442866c3</url>
  <id>71710620da084a227c71143ed92d5fcb442866c3</id>
  <committed-date>2009-03-20T01:07:11-07:00</committed-date>
  <authored-date>2009-03-20T00:32:11-07:00</authored-date>
  <message>Add basic suppression support based on matching constants</message>
  <tree>963f0408341a4fc0e2c53cf633307ee6ab9273c6</tree>
  <committer>
    <name>Kevin Clark</name>
    <email>kevin.clark@gmail.com</email>
  </committer>
</commit>
