Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring #28

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions lib/warnings/const/severity.rb
Original file line number Diff line number Diff line change
@@ -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
24 changes: 11 additions & 13 deletions lib/warnings/helper/severity_util.rb
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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

Expand All @@ -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
Expand Down
25 changes: 2 additions & 23 deletions lib/warnings/parser/android_lint_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand All @@ -18,10 +15,6 @@ def parse(file)
errors.each(&method(:store_issue))
end

def working_directory
"#{Dir.pwd}/"
end

private

# Store the issue element.
Expand All @@ -42,26 +35,12 @@ 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.severity = to_severity(error.severity)
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}"
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
27 changes: 3 additions & 24 deletions lib/warnings/parser/checkstyle_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand All @@ -18,10 +15,6 @@ def parse(file)
files.each(&method(:store_file))
end

def working_directory
"#{Dir.pwd}/"
end

private

# Store the file element.
Expand All @@ -42,26 +35,12 @@ 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.severity = to_severity(error.severity)
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
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
29 changes: 12 additions & 17 deletions lib/warnings/parser/cppcheck_xml_parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand Down Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions lib/warnings/parser/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
49 changes: 25 additions & 24 deletions spec/helper/severity_util_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 1 addition & 7 deletions spec/parser/android_lint_parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 1 addition & 7 deletions spec/parser/checkstyle_parser_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down