rubycritic 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -1
- data/CONTRIBUTING.md +2 -1
- data/README.md +1 -0
- data/lib/rubycritic/cli/options.rb +17 -1
- data/lib/rubycritic/commands/ci.rb +2 -3
- data/lib/rubycritic/commands/default.rb +2 -3
- data/lib/rubycritic/configuration.rb +4 -1
- data/lib/rubycritic/core/analysed_module.rb +19 -0
- data/lib/rubycritic/core/location.rb +11 -0
- data/lib/rubycritic/core/rating.rb +8 -0
- data/lib/rubycritic/core/smell.rb +16 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/application.js +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/highcharts.src-4.0.1.js +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery-2.1.0.js +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery.floatThead-v1.2.7.js +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery.scrollTo-1.4.11.js +0 -0
- data/lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.js +2089 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/jquery.timeago-v1.4.1.js +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/javascripts/prettify-4-Mar-2013.js +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/assets/stylesheets/application.css +87 -25
- data/lib/rubycritic/{report_generators → generators/html}/assets/stylesheets/prettify.custom_theme.css +0 -0
- data/lib/rubycritic/generators/html/base.rb +52 -0
- data/lib/rubycritic/generators/html/code_file.rb +40 -0
- data/lib/rubycritic/generators/html/code_index.rb +26 -0
- data/lib/rubycritic/generators/html/line.rb +37 -0
- data/lib/rubycritic/generators/html/overview.rb +27 -0
- data/lib/rubycritic/generators/html/smells_index.rb +38 -0
- data/lib/rubycritic/{report_generators → generators/html}/templates/code_file.html.erb +4 -2
- data/lib/rubycritic/{report_generators → generators/html}/templates/code_index.html.erb +8 -4
- data/lib/rubycritic/{report_generators → generators/html}/templates/layouts/application.html.erb +12 -8
- data/lib/rubycritic/{report_generators → generators/html}/templates/line.html.erb +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/templates/overview.html.erb +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/templates/smells_index.html.erb +4 -4
- data/lib/rubycritic/{report_generators → generators/html}/templates/smelly_line.html.erb +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/turbulence.rb +0 -0
- data/lib/rubycritic/{report_generators → generators/html}/view_helpers.rb +0 -0
- data/lib/rubycritic/generators/html_report.rb +66 -0
- data/lib/rubycritic/generators/json/simple.rb +30 -0
- data/lib/rubycritic/generators/json_report.rb +23 -0
- data/lib/rubycritic/reporter.rb +20 -0
- data/lib/rubycritic/version.rb +1 -1
- data/test/lib/rubycritic/analysers/churn_test.rb +12 -13
- data/test/lib/rubycritic/analysers/complexity_test.rb +9 -5
- data/test/lib/rubycritic/analysers/smells/flay_test.rb +27 -20
- data/test/lib/rubycritic/analysers/smells/flog_test.rb +17 -15
- data/test/lib/rubycritic/analysers/smells/reek_test.rb +2 -2
- data/test/lib/rubycritic/report_generators/turbulence_test.rb +1 -1
- data/test/lib/rubycritic/report_generators/view_helpers_test.rb +1 -1
- data/test/lib/rubycritic/source_control_systems/base_test.rb +2 -2
- data/test/lib/rubycritic/source_locator_test.rb +1 -1
- data/test/samples/flay/smelly.rb +0 -9
- data/test/samples/flay/smelly2.rb +8 -0
- metadata +33 -31
- data/lib/rubycritic/report_generators/assets/javascripts/jquery.tablesorter-2.0.js +0 -1031
- data/lib/rubycritic/report_generators/base.rb +0 -50
- data/lib/rubycritic/report_generators/code_file.rb +0 -38
- data/lib/rubycritic/report_generators/code_index.rb +0 -24
- data/lib/rubycritic/report_generators/current_code_file.rb +0 -17
- data/lib/rubycritic/report_generators/line.rb +0 -31
- data/lib/rubycritic/report_generators/overview.rb +0 -25
- data/lib/rubycritic/report_generators/smells_index.rb +0 -36
- data/lib/rubycritic/reporters/base.rb +0 -24
- data/lib/rubycritic/reporters/main.rb +0 -51
- data/lib/rubycritic/reporters/mini.rb +0 -30
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
require "erb"
|
|
2
|
-
require "pathname"
|
|
3
|
-
require "rubycritic/report_generators/view_helpers"
|
|
4
|
-
|
|
5
|
-
module Rubycritic
|
|
6
|
-
module Generator
|
|
7
|
-
|
|
8
|
-
class Base
|
|
9
|
-
def self.erb_template(template_path)
|
|
10
|
-
ERB.new(File.read(File.join(TEMPLATES_DIR, template_path)))
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
TEMPLATES_DIR = File.expand_path("../templates", __FILE__)
|
|
14
|
-
LAYOUT_TEMPLATE = erb_template(File.join("layouts", "application.html.erb"))
|
|
15
|
-
|
|
16
|
-
include ViewHelpers
|
|
17
|
-
|
|
18
|
-
def file_href
|
|
19
|
-
"file://#{file_pathname}"
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def file_pathname
|
|
23
|
-
File.join(file_directory, file_name)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def file_directory
|
|
27
|
-
@file_directory ||= root_directory
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def file_name
|
|
31
|
-
raise NotImplementedError.new("The #{self.class} class must implement the #{__method__} method.")
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def render
|
|
35
|
-
raise NotImplementedError.new("The #{self.class} class must implement the #{__method__} method.")
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
def root_directory
|
|
41
|
-
@root_directory ||= Pathname.new(Config.root)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def get_binding
|
|
45
|
-
binding
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
end
|
|
50
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require "rubycritic/report_generators/base"
|
|
2
|
-
require "rubycritic/report_generators/line"
|
|
3
|
-
|
|
4
|
-
module Rubycritic
|
|
5
|
-
module Generator
|
|
6
|
-
|
|
7
|
-
class CodeFile < Base
|
|
8
|
-
LINE_NUMBER_OFFSET = 1
|
|
9
|
-
TEMPLATE = erb_template("code_file.html.erb")
|
|
10
|
-
|
|
11
|
-
def initialize(analysed_module)
|
|
12
|
-
@analysed_module = analysed_module
|
|
13
|
-
@pathname = @analysed_module.pathname
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def file_directory
|
|
17
|
-
@file_directory ||= root_directory + @pathname.dirname
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def file_name
|
|
21
|
-
@pathname.basename.sub_ext(".html")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def render
|
|
25
|
-
file_code = ""
|
|
26
|
-
File.readlines(@pathname).each.with_index(LINE_NUMBER_OFFSET) do |line_text, line_number|
|
|
27
|
-
location = Location.new(@pathname, line_number)
|
|
28
|
-
line_smells = @analysed_module.smells_at_location(location)
|
|
29
|
-
file_code << Line.new(file_directory, line_text, line_smells).render
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
file_body = TEMPLATE.result(get_binding { file_code })
|
|
33
|
-
LAYOUT_TEMPLATE.result(get_binding { file_body })
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require "rubycritic/report_generators/base"
|
|
2
|
-
|
|
3
|
-
module Rubycritic
|
|
4
|
-
module Generator
|
|
5
|
-
|
|
6
|
-
class CodeIndex < Base
|
|
7
|
-
TEMPLATE = erb_template("code_index.html.erb")
|
|
8
|
-
|
|
9
|
-
def initialize(analysed_modules)
|
|
10
|
-
@analysed_modules = analysed_modules
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def file_name
|
|
14
|
-
"code_index.html"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def render
|
|
18
|
-
index_body = TEMPLATE.result(get_binding)
|
|
19
|
-
LAYOUT_TEMPLATE.result(get_binding { index_body })
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require "rubycritic/report_generators/code_file"
|
|
2
|
-
|
|
3
|
-
module Rubycritic
|
|
4
|
-
module Generator
|
|
5
|
-
|
|
6
|
-
class CurrentCodeFile < CodeFile
|
|
7
|
-
def file_directory
|
|
8
|
-
@file_directory ||= root_directory
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def file_name
|
|
12
|
-
"current_file.html"
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require "rubycritic/report_generators/base"
|
|
2
|
-
require "cgi"
|
|
3
|
-
|
|
4
|
-
module Rubycritic
|
|
5
|
-
module Generator
|
|
6
|
-
|
|
7
|
-
class Line < Base
|
|
8
|
-
NORMAL_TEMPLATE = erb_template("line.html.erb")
|
|
9
|
-
SMELLY_TEMPLATE = erb_template("smelly_line.html.erb")
|
|
10
|
-
|
|
11
|
-
attr_reader :file_directory
|
|
12
|
-
|
|
13
|
-
def initialize(file_directory, text, smells)
|
|
14
|
-
@file_directory = file_directory
|
|
15
|
-
@text = CGI.escapeHTML(text.chomp)
|
|
16
|
-
@smells = smells
|
|
17
|
-
@template =
|
|
18
|
-
if @smells.empty?
|
|
19
|
-
NORMAL_TEMPLATE
|
|
20
|
-
else
|
|
21
|
-
SMELLY_TEMPLATE
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def render
|
|
26
|
-
@template.result(binding).delete("\n") + "\n"
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require "rubycritic/report_generators/base"
|
|
2
|
-
require "rubycritic/report_generators/turbulence"
|
|
3
|
-
|
|
4
|
-
module Rubycritic
|
|
5
|
-
module Generator
|
|
6
|
-
|
|
7
|
-
class Overview < Base
|
|
8
|
-
TEMPLATE = erb_template("overview.html.erb")
|
|
9
|
-
|
|
10
|
-
def initialize(analysed_modules)
|
|
11
|
-
@turbulence_data = Turbulence.data(analysed_modules)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def file_name
|
|
15
|
-
"overview.html"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def render
|
|
19
|
-
index_body = TEMPLATE.result(get_binding)
|
|
20
|
-
LAYOUT_TEMPLATE.result(get_binding { index_body })
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
end
|
|
25
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require "rubycritic/report_generators/base"
|
|
2
|
-
|
|
3
|
-
module Rubycritic
|
|
4
|
-
module Generator
|
|
5
|
-
|
|
6
|
-
class SmellsIndex < Base
|
|
7
|
-
TEMPLATE = erb_template("smells_index.html.erb")
|
|
8
|
-
|
|
9
|
-
def initialize(analysed_modules)
|
|
10
|
-
@smells = analysed_modules.flat_map(&:smells).uniq
|
|
11
|
-
@analysed_module_names = analysed_module_names(analysed_modules)
|
|
12
|
-
@show_status = (Config.mode == :default)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def file_name
|
|
16
|
-
"smells_index.html"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def render
|
|
20
|
-
index_body = TEMPLATE.result(get_binding)
|
|
21
|
-
LAYOUT_TEMPLATE.result(get_binding { index_body })
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def analysed_module_names(analysed_modules)
|
|
27
|
-
names = {}
|
|
28
|
-
analysed_modules.each do |analysed_module|
|
|
29
|
-
names[analysed_module.pathname] = analysed_module.name
|
|
30
|
-
end
|
|
31
|
-
names
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
require "fileutils"
|
|
2
|
-
|
|
3
|
-
module Rubycritic
|
|
4
|
-
module Reporter
|
|
5
|
-
|
|
6
|
-
class Base
|
|
7
|
-
ASSETS_DIR = File.expand_path("../../report_generators/assets", __FILE__)
|
|
8
|
-
|
|
9
|
-
def create_directories_and_files(generators)
|
|
10
|
-
Array(generators).each do |generator|
|
|
11
|
-
FileUtils.mkdir_p(generator.file_directory)
|
|
12
|
-
File.open(generator.file_pathname, "w+") do |file|
|
|
13
|
-
file.write(generator.render)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def copy_assets_to_report_directory
|
|
19
|
-
FileUtils.cp_r(ASSETS_DIR, Config.root)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
require "rubycritic/reporters/base"
|
|
2
|
-
require "rubycritic/report_generators/overview"
|
|
3
|
-
require "rubycritic/report_generators/smells_index"
|
|
4
|
-
require "rubycritic/report_generators/code_index"
|
|
5
|
-
require "rubycritic/report_generators/code_file"
|
|
6
|
-
|
|
7
|
-
module Rubycritic
|
|
8
|
-
module Reporter
|
|
9
|
-
|
|
10
|
-
class Main < Base
|
|
11
|
-
def initialize(analysed_modules)
|
|
12
|
-
@analysed_modules = analysed_modules
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def generate_report
|
|
16
|
-
create_directories_and_files(generators)
|
|
17
|
-
copy_assets_to_report_directory
|
|
18
|
-
report_location
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
def generators
|
|
24
|
-
[overview_generator, code_index_generator, smells_index_generator] + file_generators
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def overview_generator
|
|
28
|
-
@overview_generator ||= Generator::Overview.new(@analysed_modules)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def code_index_generator
|
|
32
|
-
Generator::CodeIndex.new(@analysed_modules)
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def smells_index_generator
|
|
36
|
-
Generator::SmellsIndex.new(@analysed_modules)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def file_generators
|
|
40
|
-
@analysed_modules.map do |analysed_module|
|
|
41
|
-
Generator::CodeFile.new(analysed_module)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def report_location
|
|
46
|
-
overview_generator.file_href
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
end
|
|
51
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
require "rubycritic/reporters/base"
|
|
2
|
-
require "rubycritic/report_generators/current_code_file"
|
|
3
|
-
|
|
4
|
-
module Rubycritic
|
|
5
|
-
module Reporter
|
|
6
|
-
|
|
7
|
-
class Mini < Base
|
|
8
|
-
def initialize(analysed_modules)
|
|
9
|
-
@analysed_module = analysed_modules.first
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def generate_report
|
|
13
|
-
create_directories_and_files(file_generator)
|
|
14
|
-
copy_assets_to_report_directory
|
|
15
|
-
report_location
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def file_generator
|
|
21
|
-
@file_generator ||= Generator::CurrentCodeFile.new(@analysed_module)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def report_location
|
|
25
|
-
file_generator.file_href
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
end
|
|
30
|
-
end
|