From bfa24c58a9e0abda3d5df47d70a9bdd5b1fa7a43 Mon Sep 17 00:00:00 2001 From: Martin Schwamberger Date: Thu, 4 Apr 2019 17:57:25 +0200 Subject: [PATCH 1/2] Extract severity levels into const --- lib/warnings/const/severity.rb | 17 ++++++++ lib/warnings/helper/severity_util.rb | 24 +++++------ lib/warnings/parser/android_lint_parser.rb | 19 +-------- lib/warnings/parser/checkstyle_parser.rb | 21 +--------- lib/warnings/parser/cppcheck_xml_parser.rb | 29 ++++++------- spec/helper/severity_util_spec.rb | 49 +++++++++++----------- 6 files changed, 68 insertions(+), 91 deletions(-) create mode 100644 lib/warnings/const/severity.rb diff --git a/lib/warnings/const/severity.rb b/lib/warnings/const/severity.rb new file mode 100644 index 0000000..df23301 --- /dev/null +++ b/lib/warnings/const/severity.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Warnings + # Defines severity levels. + module Severity + LOW = :low + MEDIUM = :medium + HIGH = :high + + ERROR = 'error' + WARNING = 'warning' + STYLE = 'style' + PERFORMANCE = 'performance' + PORTABILITY = 'portability' + INFORMATION = 'information' + end +end diff --git a/lib/warnings/helper/severity_util.rb b/lib/warnings/helper/severity_util.rb index ea2c80c..4d0cafd 100644 --- a/lib/warnings/helper/severity_util.rb +++ b/lib/warnings/helper/severity_util.rb @@ -1,12 +1,10 @@ # frozen_string_literal: true +require_relative '../const/severity' + module Warnings - # Defines severity levels and provides helper methods. + # Defines severity helper methods. module SeverityUtil - LOW = :low - MEDIUM = :medium - HIGH = :high - module_function # Map a common shortened severity [R/C/W/E/F0000] to a defined severity level. @@ -17,13 +15,13 @@ def rcwef_short(name) char = name.chars.first.downcase case char when 'r', 'c' - LOW + Severity::LOW when 'w' - MEDIUM + Severity::MEDIUM when 'e', 'f' - HIGH + Severity::HIGH else - LOW + Severity::LOW end end @@ -34,13 +32,13 @@ def rcwef_short(name) def rcwef_full(name) case name.downcase when 'refactor', 'convention' - LOW + Severity::LOW when 'warning' - MEDIUM + Severity::MEDIUM when 'error', 'fatal' - HIGH + Severity::HIGH else - LOW + Severity::LOW end end end diff --git a/lib/warnings/parser/android_lint_parser.rb b/lib/warnings/parser/android_lint_parser.rb index cb0a59f..00b655b 100644 --- a/lib/warnings/parser/android_lint_parser.rb +++ b/lib/warnings/parser/android_lint_parser.rb @@ -7,9 +7,6 @@ module Warnings # Parser class for AndroidLint 'xml' formatted reports. class AndroidLintParser < Parser - SEVERITY_ERROR = 'error' - SEVERITY_WARNING = 'warning' - def parse(file) xml = xml(file) return if xml.nil? @@ -43,25 +40,11 @@ def store_issue(error) def create_issue(error, location) issue = Issue.new issue.file_name = location.file.gsub(working_directory, '') - issue.severity = to_severity(error.severity) + issue.severity = SeverityUtil.rcwef_full(error.severity) issue.line = location.line.to_i if location.attributes.include?(:line) issue.category = "#{error.category} #{error.id}" issue.message = error.message issue end - - # Convert android lint xml severity to danger::warnings severity symbol. - # - # @return [Symbol] Warnings severity symbol. - def to_severity(severity) - case severity.downcase - when SEVERITY_ERROR - SeverityUtil::HIGH - when SEVERITY_WARNING - SeverityUtil::MEDIUM - else - SeverityUtil::LOW - end - end end end diff --git a/lib/warnings/parser/checkstyle_parser.rb b/lib/warnings/parser/checkstyle_parser.rb index ee1204b..31a8013 100644 --- a/lib/warnings/parser/checkstyle_parser.rb +++ b/lib/warnings/parser/checkstyle_parser.rb @@ -5,11 +5,8 @@ require_relative '../helper/severity_util' module Warnings - # Parser class for AndroidLint 'xml' formatted reports. + # Parser class for Checkstyle default formatted reports. class CheckstyleParser < Parser - SEVERITY_ERROR = 'error' - SEVERITY_WARNING = 'warning' - def parse(file) xml = xml(file) return if xml.nil? @@ -43,25 +40,11 @@ def store_file(file) def create_issue(error, file_name) issue = Issue.new issue.file_name = file_name.gsub(working_directory, '') - issue.severity = to_severity(error.severity) + issue.severity = SeverityUtil.rcwef_full(error.severity) issue.line = error.line.to_i issue.category = error.source.split('.').last.to_s issue.message = error.message issue end - - # Convert checkstyle xml severity to danger::warnings severity symbol. - # - # @return [Symbol] Warnings severity symbol. - def to_severity(severity) - case severity.downcase - when SEVERITY_ERROR - SeverityUtil::HIGH - when SEVERITY_WARNING - SeverityUtil::MEDIUM - else - SeverityUtil::LOW - end - end end end diff --git a/lib/warnings/parser/cppcheck_xml_parser.rb b/lib/warnings/parser/cppcheck_xml_parser.rb index 804b25b..b13de18 100644 --- a/lib/warnings/parser/cppcheck_xml_parser.rb +++ b/lib/warnings/parser/cppcheck_xml_parser.rb @@ -3,17 +3,11 @@ require_relative 'parser' require_relative '../reporter/issue' require_relative '../helper/severity_util' +require_relative '../const/severity' module Warnings # Parser class for cppcheck 'xml' formatted reports. class CppcheckXmlParser < Parser - SEVERITY_ERROR = 'error' - SEVERITY_WARNING = 'warning' - SEVERITY_STYLE = 'style' - SEVERITY_PERFORMANCE = 'performance' - SEVERITY_PORTABILITY = 'portability' - SEVERITY_INFORMATION = 'information' - def parse(file) xml = xml(file) return if xml.nil? @@ -50,20 +44,21 @@ def message(error, location) # Convert cppcheck xml severity to danger::warnings severity symbol. # + # @param [String] severity Cppcheck severity level. # @return [Symbol] Warnings severity symbol. def to_severity(severity) case severity.downcase - when SEVERITY_ERROR - SeverityUtil::HIGH - when SEVERITY_WARNING, - SEVERITY_PERFORMANCE, - SEVERITY_PORTABILITY - SeverityUtil::MEDIUM - when SEVERITY_INFORMATION, - SEVERITY_STYLE - SeverityUtil::LOW + when Severity::ERROR + Severity::HIGH + when Severity::WARNING, + Severity::PERFORMANCE, + Severity::PORTABILITY + Severity::MEDIUM + when Severity::INFORMATION, + Severity::STYLE + Severity::LOW else - SeverityUtil::LOW + Severity::LOW end end end diff --git a/spec/helper/severity_util_spec.rb b/spec/helper/severity_util_spec.rb index 08fdcb5..5ea27f7 100644 --- a/spec/helper/severity_util_spec.rb +++ b/spec/helper/severity_util_spec.rb @@ -2,70 +2,71 @@ require_relative '../spec_helper' require_relative '../../lib/warnings/helper/severity_util' +require_relative '../../lib/warnings/const/severity' module Warnings describe SeverityUtil do context 'rcwef_short' do it 'maps unknown to low' do - expect(SeverityUtil.rcwef_short('U000')).to eq(SeverityUtil::LOW) - expect(SeverityUtil.rcwef_short('u000')).to eq(SeverityUtil::LOW) + expect(SeverityUtil.rcwef_short('U000')).to eq(Severity::LOW) + expect(SeverityUtil.rcwef_short('u000')).to eq(Severity::LOW) end it 'maps R/r to low' do - expect(SeverityUtil.rcwef_short('R000')).to eq(SeverityUtil::LOW) - expect(SeverityUtil.rcwef_short('r000')).to eq(SeverityUtil::LOW) + expect(SeverityUtil.rcwef_short('R000')).to eq(Severity::LOW) + expect(SeverityUtil.rcwef_short('r000')).to eq(Severity::LOW) end it 'maps C/c to low' do - expect(SeverityUtil.rcwef_short('C000')).to eq(SeverityUtil::LOW) - expect(SeverityUtil.rcwef_short('c000')).to eq(SeverityUtil::LOW) + expect(SeverityUtil.rcwef_short('C000')).to eq(Severity::LOW) + expect(SeverityUtil.rcwef_short('c000')).to eq(Severity::LOW) end it 'maps W/w to medium' do - expect(SeverityUtil.rcwef_short('W000')).to eq(SeverityUtil::MEDIUM) - expect(SeverityUtil.rcwef_short('w000')).to eq(SeverityUtil::MEDIUM) + expect(SeverityUtil.rcwef_short('W000')).to eq(Severity::MEDIUM) + expect(SeverityUtil.rcwef_short('w000')).to eq(Severity::MEDIUM) end it 'maps E/e to high' do - expect(SeverityUtil.rcwef_short('E000')).to eq(SeverityUtil::HIGH) - expect(SeverityUtil.rcwef_short('e000')).to eq(SeverityUtil::HIGH) + expect(SeverityUtil.rcwef_short('E000')).to eq(Severity::HIGH) + expect(SeverityUtil.rcwef_short('e000')).to eq(Severity::HIGH) end it 'maps F/f to high' do - expect(SeverityUtil.rcwef_short('F000')).to eq(SeverityUtil::HIGH) - expect(SeverityUtil.rcwef_short('f000')).to eq(SeverityUtil::HIGH) + expect(SeverityUtil.rcwef_short('F000')).to eq(Severity::HIGH) + expect(SeverityUtil.rcwef_short('f000')).to eq(Severity::HIGH) end end context 'rcwef_full' do it 'maps unknown to low' do - expect(SeverityUtil.rcwef_short('Unknown')).to eq(SeverityUtil::LOW) - expect(SeverityUtil.rcwef_short('unknown')).to eq(SeverityUtil::LOW) + expect(SeverityUtil.rcwef_short('Unknown')).to eq(Severity::LOW) + expect(SeverityUtil.rcwef_short('unknown')).to eq(Severity::LOW) end it 'maps Refactor/refactor to low' do - expect(SeverityUtil.rcwef_short('Refactor')).to eq(SeverityUtil::LOW) - expect(SeverityUtil.rcwef_short('refactor')).to eq(SeverityUtil::LOW) + expect(SeverityUtil.rcwef_short('Refactor')).to eq(Severity::LOW) + expect(SeverityUtil.rcwef_short('refactor')).to eq(Severity::LOW) end it 'maps Convention/convention to low' do - expect(SeverityUtil.rcwef_short('Convention')).to eq(SeverityUtil::LOW) - expect(SeverityUtil.rcwef_short('convention')).to eq(SeverityUtil::LOW) + expect(SeverityUtil.rcwef_short('Convention')).to eq(Severity::LOW) + expect(SeverityUtil.rcwef_short('convention')).to eq(Severity::LOW) end it 'maps Warning/warning to medium' do - expect(SeverityUtil.rcwef_short('Warning')).to eq(SeverityUtil::MEDIUM) - expect(SeverityUtil.rcwef_short('warning')).to eq(SeverityUtil::MEDIUM) + expect(SeverityUtil.rcwef_short('Warning')).to eq(Severity::MEDIUM) + expect(SeverityUtil.rcwef_short('warning')).to eq(Severity::MEDIUM) end it 'maps Error/error to high' do - expect(SeverityUtil.rcwef_short('Error')).to eq(SeverityUtil::HIGH) - expect(SeverityUtil.rcwef_short('error')).to eq(SeverityUtil::HIGH) + expect(SeverityUtil.rcwef_short('Error')).to eq(Severity::HIGH) + expect(SeverityUtil.rcwef_short('error')).to eq(Severity::HIGH) end it 'maps Fatal/fatal to high' do - expect(SeverityUtil.rcwef_short('Fatal')).to eq(SeverityUtil::HIGH) - expect(SeverityUtil.rcwef_short('fatal')).to eq(SeverityUtil::HIGH) + expect(SeverityUtil.rcwef_short('Fatal')).to eq(Severity::HIGH) + expect(SeverityUtil.rcwef_short('fatal')).to eq(Severity::HIGH) end end end From 1b98554d16142ffc7d567294c48c77ededbe776c Mon Sep 17 00:00:00 2001 From: Martin Schwamberger Date: Thu, 4 Apr 2019 18:02:45 +0200 Subject: [PATCH 2/2] Move current working_directory to parser base method --- lib/warnings/parser/android_lint_parser.rb | 6 +----- lib/warnings/parser/checkstyle_parser.rb | 6 +----- lib/warnings/parser/parser.rb | 7 +++++++ spec/parser/android_lint_parser_spec.rb | 8 +------- spec/parser/checkstyle_parser_spec.rb | 8 +------- 5 files changed, 11 insertions(+), 24 deletions(-) diff --git a/lib/warnings/parser/android_lint_parser.rb b/lib/warnings/parser/android_lint_parser.rb index 00b655b..83aee6d 100644 --- a/lib/warnings/parser/android_lint_parser.rb +++ b/lib/warnings/parser/android_lint_parser.rb @@ -15,10 +15,6 @@ def parse(file) errors.each(&method(:store_issue)) end - def working_directory - "#{Dir.pwd}/" - end - private # Store the issue element. @@ -39,7 +35,7 @@ def store_issue(error) # @return [Issue] New Issue item. def create_issue(error, location) issue = Issue.new - issue.file_name = location.file.gsub(working_directory, '') + issue.file_name = location.file.gsub(work_dir, '') issue.severity = SeverityUtil.rcwef_full(error.severity) issue.line = location.line.to_i if location.attributes.include?(:line) issue.category = "#{error.category} #{error.id}" diff --git a/lib/warnings/parser/checkstyle_parser.rb b/lib/warnings/parser/checkstyle_parser.rb index 31a8013..0dc4962 100644 --- a/lib/warnings/parser/checkstyle_parser.rb +++ b/lib/warnings/parser/checkstyle_parser.rb @@ -15,10 +15,6 @@ def parse(file) files.each(&method(:store_file)) end - def working_directory - "#{Dir.pwd}/" - end - private # Store the file element. @@ -39,7 +35,7 @@ def store_file(file) # @return [Issue] New Issue item. def create_issue(error, file_name) issue = Issue.new - issue.file_name = file_name.gsub(working_directory, '') + issue.file_name = file_name.gsub(work_dir, '') issue.severity = SeverityUtil.rcwef_full(error.severity) issue.line = error.line.to_i issue.category = error.source.split('.').last.to_s diff --git a/lib/warnings/parser/parser.rb b/lib/warnings/parser/parser.rb index 1385a2d..2fda1a9 100644 --- a/lib/warnings/parser/parser.rb +++ b/lib/warnings/parser/parser.rb @@ -81,6 +81,13 @@ def read_lines(file_path) File.readlines(file_path, chomp: true) end + # Return the current working directory. + # + # @return [String] Path of the working directory + def work_dir + "#{Dir.pwd}/" + end + private # Evaluate and read the file into memory. diff --git a/spec/parser/android_lint_parser_spec.rb b/spec/parser/android_lint_parser_spec.rb index abe236e..5a5ac57 100644 --- a/spec/parser/android_lint_parser_spec.rb +++ b/spec/parser/android_lint_parser_spec.rb @@ -9,16 +9,10 @@ module Warnings @parser = AndroidLintParser.new end - describe '#working_directory' do - it 'returns current directory with slash' do - expect(@parser.working_directory).to eq("#{Dir.pwd}/") - end - end - describe '#parse' do context 'filled results' do before do - @parser.stubs(:working_directory).returns('/Users/Martin/Downloads/MyApplication/') + @parser.stubs(:work_dir).returns('/Users/Martin/Downloads/MyApplication/') @parser.parse(Assets::ANDROID_LINT) @issue = @parser.issues[0] expect(@issue).not_to be_nil diff --git a/spec/parser/checkstyle_parser_spec.rb b/spec/parser/checkstyle_parser_spec.rb index 7967a07..9fa5576 100644 --- a/spec/parser/checkstyle_parser_spec.rb +++ b/spec/parser/checkstyle_parser_spec.rb @@ -9,16 +9,10 @@ module Warnings @parser = CheckstyleParser.new end - describe '#working_directory' do - it 'returns current directory with slash' do - expect(@parser.working_directory).to eq("#{Dir.pwd}/") - end - end - describe '#parse' do context 'filled results' do before do - @parser.stubs(:working_directory).returns('/Users/Martin/Desktop/JavaAndroidApplication/') + @parser.stubs(:work_dir).returns('/Users/Martin/Desktop/JavaAndroidApplication/') @parser.parse(Assets::CHECKSTYLE_XML) @issue = @parser.issues[0] expect(@issue).not_to be_nil