diff --git a/Makefile b/Makefile index f11fb3d..cb4fb3e 100644 --- a/Makefile +++ b/Makefile @@ -4,4 +4,4 @@ image: docker build -t codeclimate/codeclimate-csslint . test: image - docker run --rm codeclimate/codeclimate-csslint rake + docker run --rm codeclimate/codeclimate-csslint rspec $(RSPEC_ARGS) diff --git a/lib/cc/engine/csslint.rb b/lib/cc/engine/csslint.rb index bb25c85..00d15e1 100644 --- a/lib/cc/engine/csslint.rb +++ b/lib/cc/engine/csslint.rb @@ -1,11 +1,14 @@ require "json" require "nokogiri" +require "ostruct" require "shellwords" module CC module Engine MissingAttributesError = Class.new(StandardError) + DEFAULT_IDENTIFIER = OpenStruct.new(value: "parse-error") + class CSSlint autoload :CheckDetails, "cc/engine/csslint/check_details" @@ -30,8 +33,9 @@ def run private + # rubocop:disable Metrics/MethodLength def create_issue(node, path) - check_name = node.attributes.fetch("identifier").value + check_name = node.attributes.fetch("identifier", DEFAULT_IDENTIFIER).value check_details = CheckDetails.fetch(check_name) { @@ -57,6 +61,7 @@ def create_issue(node, path) rescue KeyError => ex raise MissingAttributesError, "#{ex.message} on XML '#{node}' when analyzing file '#{path}'" end + # rubocop:enable Metrics/MethodLength def results @results ||= Nokogiri::XML(csslint_xml) diff --git a/lib/cc/engine/csslint/check_details.rb b/lib/cc/engine/csslint/check_details.rb index 04133d5..d268634 100644 --- a/lib/cc/engine/csslint/check_details.rb +++ b/lib/cc/engine/csslint/check_details.rb @@ -19,6 +19,7 @@ class CheckDetails "import" => { categories: "Bug Risk" }, "known-properties" => { categories: "Bug Risk" }, "overqualified-elements" => { categories: "Bug Risk" }, + "parse-error" => { categories: "Bug Risk" }, "regex-selectors" => { categories: "Bug Risk" }, "shorthand" => { categories: "Bug Risk" }, "star-property-hack" => { categories: "Compatibility" }, diff --git a/spec/cc/engine/csslint_spec.rb b/spec/cc/engine/csslint_spec.rb index 356848c..9c4a40e 100644 --- a/spec/cc/engine/csslint_spec.rb +++ b/spec/cc/engine/csslint_spec.rb @@ -18,7 +18,7 @@ module Engine it 'fails on malformed file' do create_source_file('foo.css', '�6�') - expect{ lint.run }.to raise_error(MissingAttributesError) + expect{ lint.run }.to output(/Unexpected token/).to_stdout end it "doesn't analyze *.scss files" do