rubycritic 2.6.0 → 2.7.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/.rubocop.yml +3 -585
- data/.rubocop_todo.yml +36 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +1 -1
- data/Rakefile +9 -9
- data/bin/rubycritic +2 -2
- data/features/command_line_interface/options.feature +1 -0
- data/features/step_definitions/rubycritic_steps.rb +1 -1
- data/features/step_definitions/sample_file_steps.rb +3 -3
- data/features/support/env.rb +6 -6
- data/lib/rubycritic.rb +1 -1
- data/lib/rubycritic/analysers/attributes.rb +6 -7
- data/lib/rubycritic/analysers/churn.rb +4 -6
- data/lib/rubycritic/analysers/complexity.rb +5 -7
- data/lib/rubycritic/analysers/helpers/ast_node.rb +4 -6
- data/lib/rubycritic/analysers/helpers/flay.rb +1 -3
- data/lib/rubycritic/analysers/helpers/flog.rb +5 -7
- data/lib/rubycritic/analysers/helpers/methods_counter.rb +1 -3
- data/lib/rubycritic/analysers/helpers/modules_locator.rb +3 -5
- data/lib/rubycritic/analysers/helpers/parser.rb +2 -2
- data/lib/rubycritic/analysers/helpers/reek.rb +1 -1
- data/lib/rubycritic/analysers/smells/flay.rb +14 -16
- data/lib/rubycritic/analysers/smells/flog.rb +15 -17
- data/lib/rubycritic/analysers/smells/reek.rb +11 -13
- data/lib/rubycritic/analysers_runner.rb +8 -10
- data/lib/rubycritic/browser.rb +17 -0
- data/lib/rubycritic/cli/application.rb +3 -3
- data/lib/rubycritic/cli/options.rb +29 -23
- data/lib/rubycritic/command_factory.rb +5 -5
- data/lib/rubycritic/commands/base.rb +2 -2
- data/lib/rubycritic/commands/ci.rb +4 -4
- data/lib/rubycritic/commands/default.rb +5 -5
- data/lib/rubycritic/commands/help.rb +1 -1
- data/lib/rubycritic/commands/status_reporter.rb +1 -1
- data/lib/rubycritic/commands/version.rb +2 -2
- data/lib/rubycritic/configuration.rb +4 -2
- data/lib/rubycritic/core/analysed_module.rb +15 -17
- data/lib/rubycritic/core/analysed_modules_collection.rb +3 -3
- data/lib/rubycritic/core/location.rb +4 -6
- data/lib/rubycritic/core/rating.rb +5 -7
- data/lib/rubycritic/core/smell.rb +11 -13
- data/lib/rubycritic/generators/console_report.rb +1 -1
- data/lib/rubycritic/generators/html/base.rb +9 -9
- data/lib/rubycritic/generators/html/code_file.rb +5 -7
- data/lib/rubycritic/generators/html/code_index.rb +3 -5
- data/lib/rubycritic/generators/html/line.rb +4 -6
- data/lib/rubycritic/generators/html/overview.rb +4 -6
- data/lib/rubycritic/generators/html/smells_index.rb +3 -5
- data/lib/rubycritic/generators/html/turbulence.rb +4 -6
- data/lib/rubycritic/generators/html/view_helpers.rb +4 -4
- data/lib/rubycritic/generators/html_report.rb +13 -9
- data/lib/rubycritic/generators/json/simple.rb +7 -9
- data/lib/rubycritic/generators/json_report.rb +1 -3
- data/lib/rubycritic/generators/text/list.rb +9 -9
- data/lib/rubycritic/reporter.rb +3 -5
- data/lib/rubycritic/revision_comparator.rb +6 -8
- data/lib/rubycritic/serializer.rb +2 -4
- data/lib/rubycritic/smells_status_setter.rb +2 -4
- data/lib/rubycritic/source_control_systems/base.rb +4 -6
- data/lib/rubycritic/source_control_systems/double.rb +1 -2
- data/lib/rubycritic/source_control_systems/git.rb +1 -3
- data/lib/rubycritic/source_control_systems/mercurial.rb +1 -3
- data/lib/rubycritic/source_locator.rb +5 -6
- data/lib/rubycritic/version.rb +1 -1
- data/rubycritic.gemspec +26 -25
- data/test/analysers_test_helper.rb +1 -1
- data/test/lib/rubycritic/analysers/churn_test.rb +9 -9
- data/test/lib/rubycritic/analysers/complexity_test.rb +5 -5
- data/test/lib/rubycritic/analysers/helpers/methods_counter_test.rb +12 -12
- data/test/lib/rubycritic/analysers/helpers/modules_locator_test.rb +25 -25
- data/test/lib/rubycritic/analysers/smells/flay_test.rb +12 -12
- data/test/lib/rubycritic/analysers/smells/flog_test.rb +7 -7
- data/test/lib/rubycritic/analysers/smells/reek_test.rb +8 -8
- data/test/lib/rubycritic/browser_test.rb +16 -0
- data/test/lib/rubycritic/commands/status_reporter_test.rb +31 -19
- data/test/lib/rubycritic/configuration_test.rb +10 -10
- data/test/lib/rubycritic/core/analysed_module_test.rb +37 -37
- data/test/lib/rubycritic/core/analysed_modules_collection_test.rb +32 -32
- data/test/lib/rubycritic/core/location_test.rb +16 -16
- data/test/lib/rubycritic/core/smell_test.rb +31 -31
- data/test/lib/rubycritic/core/smells_array_test.rb +18 -18
- data/test/lib/rubycritic/generators/console_report_test.rb +26 -26
- data/test/lib/rubycritic/generators/turbulence_test.rb +8 -8
- data/test/lib/rubycritic/generators/view_helpers_test.rb +36 -36
- data/test/lib/rubycritic/smells_status_setter_test.rb +7 -7
- data/test/lib/rubycritic/source_control_systems/base_test.rb +7 -7
- data/test/lib/rubycritic/source_control_systems/double_test.rb +3 -3
- data/test/lib/rubycritic/source_control_systems/git_test.rb +4 -4
- data/test/lib/rubycritic/source_control_systems/mercurial_test.rb +3 -3
- data/test/lib/rubycritic/source_locator_test.rb +30 -30
- data/test/lib/rubycritic/version_test.rb +4 -4
- data/test/test_helper.rb +4 -4
- metadata +30 -17
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# Offense count: 1
|
2
|
+
Metrics/AbcSize:
|
3
|
+
Exclude:
|
4
|
+
- 'lib/rubycritic/analysers/smells/flay.rb'
|
5
|
+
- 'lib/rubycritic/cli/options.rb'
|
6
|
+
|
7
|
+
# Offense count: 6
|
8
|
+
# Configuration parameters: CountComments.
|
9
|
+
Metrics/MethodLength:
|
10
|
+
Exclude:
|
11
|
+
- 'lib/rubycritic/analysers/helpers/ast_node.rb'
|
12
|
+
- 'lib/rubycritic/analysers/smells/flay.rb'
|
13
|
+
- 'lib/rubycritic/command_factory.rb'
|
14
|
+
- 'lib/rubycritic/core/analysed_module.rb'
|
15
|
+
- 'lib/rubycritic/reporter.rb'
|
16
|
+
- 'lib/rubycritic/revision_comparator.rb'
|
17
|
+
- 'lib/rubycritic/platforms/base.rb'
|
18
|
+
|
19
|
+
# Offense count: 4
|
20
|
+
Style/AccessorMethodName:
|
21
|
+
Exclude:
|
22
|
+
- 'lib/rubycritic/analysers/helpers/ast_node.rb'
|
23
|
+
- 'lib/rubycritic/generators/html/base.rb'
|
24
|
+
- 'lib/rubycritic/revision_comparator.rb'
|
25
|
+
|
26
|
+
# Offense count: 1
|
27
|
+
Style/ClassVars:
|
28
|
+
Exclude:
|
29
|
+
- 'lib/rubycritic/source_control_systems/base.rb'
|
30
|
+
|
31
|
+
# Offense count: 3
|
32
|
+
# Cop supports --auto-correct.
|
33
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
34
|
+
# SupportedStyles: use_perl_names, use_english_names
|
35
|
+
Style/SpecialGlobalVars:
|
36
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 2.7.0 / 2015-01-23
|
2
|
+
|
3
|
+
* [FEATURE] Open html report with browser (by YingRui Lu)
|
4
|
+
* [CHANGE] Bump Reek to 3.9.1
|
5
|
+
* [CHANGE] Bump Rubocop to 0.36 and internal cleanup (preparing for Ruby 2.3)
|
6
|
+
|
1
7
|
# 2.6.0 / 2015-01-21
|
2
8
|
|
3
9
|
* [FEATURE] Add a minimum score option to the command line interface (by Roberto Schneider)
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,18 +1,18 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rubocop/rake_task'
|
4
|
+
require 'cucumber/rake/task'
|
5
5
|
|
6
6
|
Rake::TestTask.new do |task|
|
7
|
-
task.libs.push
|
8
|
-
task.libs.push
|
9
|
-
task.pattern =
|
7
|
+
task.libs.push 'lib'
|
8
|
+
task.libs.push 'test'
|
9
|
+
task.pattern = 'test/**/*_test.rb'
|
10
10
|
end
|
11
11
|
|
12
12
|
Cucumber::Rake::Task.new(:features) do |t|
|
13
|
-
t.cucumber_opts =
|
13
|
+
t.cucumber_opts = 'features --format progress --color'
|
14
14
|
end
|
15
15
|
|
16
16
|
RuboCop::RakeTask.new
|
17
17
|
|
18
|
-
task :
|
18
|
+
task default: [:test, :features, :rubocop]
|
data/bin/rubycritic
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
# Always look in the lib directory of this gem
|
4
4
|
# first when searching the load path
|
5
|
-
$LOAD_PATH.unshift File.expand_path(
|
5
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
6
6
|
|
7
|
-
require
|
7
|
+
require 'rubycritic/cli/application'
|
8
8
|
|
9
9
|
exit Rubycritic::Cli::Application.new(ARGV).execute
|
@@ -29,6 +29,7 @@ Feature: Rubycritic can be controlled using command-line options
|
|
29
29
|
-m, --mode-ci Use CI mode (faster, but only analyses last commit)
|
30
30
|
--deduplicate-symlinks De-duplicate symlinks based on their final target
|
31
31
|
--suppress-ratings Suppress letter ratings
|
32
|
+
--no-browser Do not open html report with browser
|
32
33
|
-v, --version Show gem's version
|
33
34
|
-h, --help Show this message
|
34
35
|
|
@@ -15,7 +15,7 @@ Then(/^it reports:$/) do |report|
|
|
15
15
|
end
|
16
16
|
|
17
17
|
Then(/^there is no output on stdout$/) do
|
18
|
-
expect(last_command_started).to have_output_on_stdout(
|
18
|
+
expect(last_command_started).to have_output_on_stdout('')
|
19
19
|
end
|
20
20
|
|
21
21
|
Then(/^it reports the current version$/) do
|
@@ -12,7 +12,7 @@ Given(/^the smelly file 'smelly.rb'/) do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
EOS
|
15
|
-
write_file(
|
15
|
+
write_file('smelly.rb', contents)
|
16
16
|
end
|
17
17
|
|
18
18
|
Given(/^the clean file 'clean.rb'/) do
|
@@ -22,9 +22,9 @@ Given(/^the clean file 'clean.rb'/) do
|
|
22
22
|
def foo; end
|
23
23
|
end
|
24
24
|
EOS
|
25
|
-
write_file(
|
25
|
+
write_file('clean.rb', contents)
|
26
26
|
end
|
27
27
|
|
28
28
|
Given(/^the empty file 'empty.rb'/) do
|
29
|
-
write_file(
|
29
|
+
write_file('clean.rb', '')
|
30
30
|
end
|
data/features/support/env.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
3
|
-
require_relative
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require_relative '../../lib/rubycritic'
|
2
|
+
require_relative '../../lib/rubycritic/cli/application'
|
3
|
+
require_relative '../../lib/rubycritic/commands/status_reporter'
|
4
|
+
require 'aruba/cucumber'
|
5
|
+
require 'minitest/spec'
|
6
6
|
|
7
7
|
#
|
8
8
|
# Provides runner methods used in the cucumber steps.
|
@@ -16,7 +16,7 @@ class RubycriticWorld
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def rubycritic(args)
|
19
|
-
run_simple("rubycritic #{args}", false)
|
19
|
+
run_simple("rubycritic #{args} --no-browser", false)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
data/lib/rubycritic.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'rubycritic/analysers/helpers/methods_counter'
|
2
|
+
require 'rubycritic/analysers/helpers/modules_locator'
|
3
|
+
require 'rubycritic/colorize'
|
4
4
|
|
5
5
|
module Rubycritic
|
6
6
|
module Analyser
|
7
|
-
|
8
7
|
class Attributes
|
9
8
|
include Colorize
|
10
9
|
def initialize(analysed_modules)
|
@@ -15,13 +14,13 @@ module Rubycritic
|
|
15
14
|
@analysed_modules.each do |analysed_module|
|
16
15
|
analysed_module.methods_count = MethodsCounter.new(analysed_module).count
|
17
16
|
analysed_module.name = ModulesLocator.new(analysed_module).first_name
|
18
|
-
print green
|
17
|
+
print green '.'
|
19
18
|
end
|
20
|
-
puts
|
19
|
+
puts ''
|
21
20
|
end
|
22
21
|
|
23
22
|
def to_s
|
24
|
-
|
23
|
+
'attributes'
|
25
24
|
end
|
26
25
|
end
|
27
26
|
end
|
@@ -1,8 +1,7 @@
|
|
1
|
-
require
|
1
|
+
require 'rubycritic/colorize'
|
2
2
|
|
3
3
|
module Rubycritic
|
4
4
|
module Analyser
|
5
|
-
|
6
5
|
class Churn
|
7
6
|
include Colorize
|
8
7
|
attr_writer :source_control_system
|
@@ -16,15 +15,14 @@ module Rubycritic
|
|
16
15
|
@analysed_modules.each do |analysed_module|
|
17
16
|
analysed_module.churn = @source_control_system.revisions_count(analysed_module.path)
|
18
17
|
analysed_module.committed_at = @source_control_system.date_of_last_commit(analysed_module.path)
|
19
|
-
print green
|
18
|
+
print green '.'
|
20
19
|
end
|
21
|
-
puts
|
20
|
+
puts ''
|
22
21
|
end
|
23
22
|
|
24
23
|
def to_s
|
25
|
-
|
24
|
+
'churn'
|
26
25
|
end
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
30
28
|
end
|
@@ -1,9 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'rubycritic/analysers/helpers/flog'
|
2
|
+
require 'rubycritic/colorize'
|
3
3
|
|
4
4
|
module Rubycritic
|
5
5
|
module Analyser
|
6
|
-
|
7
6
|
class Complexity
|
8
7
|
include Colorize
|
9
8
|
def initialize(analysed_modules)
|
@@ -16,15 +15,14 @@ module Rubycritic
|
|
16
15
|
@flog.reset
|
17
16
|
@flog.flog(analysed_module.path)
|
18
17
|
analysed_module.complexity = @flog.total_score.round
|
19
|
-
print green
|
18
|
+
print green '.'
|
20
19
|
end
|
21
|
-
puts
|
20
|
+
puts ''
|
22
21
|
end
|
23
22
|
|
24
23
|
def to_s
|
25
|
-
|
24
|
+
'complexity'
|
26
25
|
end
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
30
28
|
end
|
@@ -1,8 +1,7 @@
|
|
1
1
|
module Parser
|
2
2
|
module AST
|
3
|
-
|
4
3
|
class Node
|
5
|
-
MODULE_TYPES = [:module, :class]
|
4
|
+
MODULE_TYPES = [:module, :class].freeze
|
6
5
|
|
7
6
|
def count_nodes_of_type(*types)
|
8
7
|
count = 0
|
@@ -22,8 +21,8 @@ module Parser
|
|
22
21
|
|
23
22
|
def get_module_names
|
24
23
|
children_modules = children
|
25
|
-
|
26
|
-
|
24
|
+
.select { |child| child.is_a?(Parser::AST::Node) }
|
25
|
+
.flat_map(&:get_module_names)
|
27
26
|
|
28
27
|
if MODULE_TYPES.include?(type)
|
29
28
|
if children_modules.empty?
|
@@ -47,7 +46,7 @@ module Parser
|
|
47
46
|
name_segments.unshift(current_node.children[1])
|
48
47
|
current_node = current_node.children[0]
|
49
48
|
end
|
50
|
-
name_segments.join(
|
49
|
+
name_segments.join('::')
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
@@ -64,6 +63,5 @@ module Rubycritic
|
|
64
63
|
[]
|
65
64
|
end
|
66
65
|
end
|
67
|
-
|
68
66
|
end
|
69
67
|
end
|
@@ -1,17 +1,15 @@
|
|
1
|
-
require
|
1
|
+
require 'flog'
|
2
2
|
|
3
3
|
module Rubycritic
|
4
|
-
|
5
4
|
class Flog < ::Flog
|
6
5
|
DEFAULT_OPTIONS = {
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
}
|
6
|
+
all: true,
|
7
|
+
continue: true,
|
8
|
+
methods: true
|
9
|
+
}.freeze
|
11
10
|
|
12
11
|
def initialize
|
13
12
|
super(DEFAULT_OPTIONS)
|
14
13
|
end
|
15
14
|
end
|
16
|
-
|
17
15
|
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require 'rubycritic/analysers/helpers/parser'
|
2
2
|
|
3
3
|
module Rubycritic
|
4
|
-
|
5
4
|
class MethodsCounter
|
6
5
|
def initialize(analysed_module)
|
7
6
|
@analysed_module = analysed_module
|
@@ -21,5 +20,4 @@ module Rubycritic
|
|
21
20
|
File.read(@analysed_module.path)
|
22
21
|
end
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require
|
1
|
+
require 'rubycritic/analysers/helpers/parser'
|
2
2
|
|
3
3
|
module Rubycritic
|
4
|
-
|
5
4
|
class ModulesLocator
|
6
5
|
def initialize(analysed_module)
|
7
6
|
@analysed_module = analysed_module
|
@@ -31,12 +30,11 @@ module Rubycritic
|
|
31
30
|
end
|
32
31
|
|
33
32
|
def name_from_path
|
34
|
-
[file_name.split(
|
33
|
+
[file_name.split('_').map(&:capitalize).join]
|
35
34
|
end
|
36
35
|
|
37
36
|
def file_name
|
38
|
-
@analysed_module.pathname.basename.sub_ext(
|
37
|
+
@analysed_module.pathname.basename.sub_ext('').to_s
|
39
38
|
end
|
40
39
|
end
|
41
|
-
|
42
40
|
end
|
@@ -1,10 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'rubycritic/analysers/helpers/flay'
|
2
|
+
require 'rubycritic/core/smell'
|
3
|
+
require 'rubycritic/colorize'
|
4
4
|
|
5
5
|
module Rubycritic
|
6
6
|
module Analyser
|
7
|
-
|
8
7
|
class FlaySmells
|
9
8
|
include Colorize
|
10
9
|
def initialize(analysed_modules)
|
@@ -22,13 +21,13 @@ module Rubycritic
|
|
22
21
|
nodes.each do |node|
|
23
22
|
@analysed_modules[node.file].duplication += node.mass
|
24
23
|
end
|
25
|
-
print green
|
24
|
+
print green '.'
|
26
25
|
end
|
27
|
-
puts
|
26
|
+
puts ''
|
28
27
|
end
|
29
28
|
|
30
29
|
def to_s
|
31
|
-
|
30
|
+
'flay smells'
|
32
31
|
end
|
33
32
|
|
34
33
|
private
|
@@ -44,12 +43,12 @@ module Rubycritic
|
|
44
43
|
def create_smell(structural_hash, nodes)
|
45
44
|
mass = @flay.masses[structural_hash]
|
46
45
|
Smell.new(
|
47
|
-
:
|
48
|
-
:
|
49
|
-
:
|
50
|
-
:
|
51
|
-
:
|
52
|
-
:
|
46
|
+
locations: smell_locations(nodes),
|
47
|
+
context: similarity(structural_hash),
|
48
|
+
message: "found in #{nodes.size} nodes",
|
49
|
+
score: mass,
|
50
|
+
type: 'DuplicateCode',
|
51
|
+
cost: cost(mass)
|
53
52
|
)
|
54
53
|
end
|
55
54
|
|
@@ -61,9 +60,9 @@ module Rubycritic
|
|
61
60
|
|
62
61
|
def similarity(structural_hash)
|
63
62
|
if @flay.identical[structural_hash]
|
64
|
-
|
63
|
+
'Identical code'
|
65
64
|
else
|
66
|
-
|
65
|
+
'Similar code'
|
67
66
|
end
|
68
67
|
end
|
69
68
|
|
@@ -71,6 +70,5 @@ module Rubycritic
|
|
71
70
|
mass / 25
|
72
71
|
end
|
73
72
|
end
|
74
|
-
|
75
73
|
end
|
76
74
|
end
|