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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -585
  3. data/.rubocop_todo.yml +36 -0
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +1 -1
  6. data/Rakefile +9 -9
  7. data/bin/rubycritic +2 -2
  8. data/features/command_line_interface/options.feature +1 -0
  9. data/features/step_definitions/rubycritic_steps.rb +1 -1
  10. data/features/step_definitions/sample_file_steps.rb +3 -3
  11. data/features/support/env.rb +6 -6
  12. data/lib/rubycritic.rb +1 -1
  13. data/lib/rubycritic/analysers/attributes.rb +6 -7
  14. data/lib/rubycritic/analysers/churn.rb +4 -6
  15. data/lib/rubycritic/analysers/complexity.rb +5 -7
  16. data/lib/rubycritic/analysers/helpers/ast_node.rb +4 -6
  17. data/lib/rubycritic/analysers/helpers/flay.rb +1 -3
  18. data/lib/rubycritic/analysers/helpers/flog.rb +5 -7
  19. data/lib/rubycritic/analysers/helpers/methods_counter.rb +1 -3
  20. data/lib/rubycritic/analysers/helpers/modules_locator.rb +3 -5
  21. data/lib/rubycritic/analysers/helpers/parser.rb +2 -2
  22. data/lib/rubycritic/analysers/helpers/reek.rb +1 -1
  23. data/lib/rubycritic/analysers/smells/flay.rb +14 -16
  24. data/lib/rubycritic/analysers/smells/flog.rb +15 -17
  25. data/lib/rubycritic/analysers/smells/reek.rb +11 -13
  26. data/lib/rubycritic/analysers_runner.rb +8 -10
  27. data/lib/rubycritic/browser.rb +17 -0
  28. data/lib/rubycritic/cli/application.rb +3 -3
  29. data/lib/rubycritic/cli/options.rb +29 -23
  30. data/lib/rubycritic/command_factory.rb +5 -5
  31. data/lib/rubycritic/commands/base.rb +2 -2
  32. data/lib/rubycritic/commands/ci.rb +4 -4
  33. data/lib/rubycritic/commands/default.rb +5 -5
  34. data/lib/rubycritic/commands/help.rb +1 -1
  35. data/lib/rubycritic/commands/status_reporter.rb +1 -1
  36. data/lib/rubycritic/commands/version.rb +2 -2
  37. data/lib/rubycritic/configuration.rb +4 -2
  38. data/lib/rubycritic/core/analysed_module.rb +15 -17
  39. data/lib/rubycritic/core/analysed_modules_collection.rb +3 -3
  40. data/lib/rubycritic/core/location.rb +4 -6
  41. data/lib/rubycritic/core/rating.rb +5 -7
  42. data/lib/rubycritic/core/smell.rb +11 -13
  43. data/lib/rubycritic/generators/console_report.rb +1 -1
  44. data/lib/rubycritic/generators/html/base.rb +9 -9
  45. data/lib/rubycritic/generators/html/code_file.rb +5 -7
  46. data/lib/rubycritic/generators/html/code_index.rb +3 -5
  47. data/lib/rubycritic/generators/html/line.rb +4 -6
  48. data/lib/rubycritic/generators/html/overview.rb +4 -6
  49. data/lib/rubycritic/generators/html/smells_index.rb +3 -5
  50. data/lib/rubycritic/generators/html/turbulence.rb +4 -6
  51. data/lib/rubycritic/generators/html/view_helpers.rb +4 -4
  52. data/lib/rubycritic/generators/html_report.rb +13 -9
  53. data/lib/rubycritic/generators/json/simple.rb +7 -9
  54. data/lib/rubycritic/generators/json_report.rb +1 -3
  55. data/lib/rubycritic/generators/text/list.rb +9 -9
  56. data/lib/rubycritic/reporter.rb +3 -5
  57. data/lib/rubycritic/revision_comparator.rb +6 -8
  58. data/lib/rubycritic/serializer.rb +2 -4
  59. data/lib/rubycritic/smells_status_setter.rb +2 -4
  60. data/lib/rubycritic/source_control_systems/base.rb +4 -6
  61. data/lib/rubycritic/source_control_systems/double.rb +1 -2
  62. data/lib/rubycritic/source_control_systems/git.rb +1 -3
  63. data/lib/rubycritic/source_control_systems/mercurial.rb +1 -3
  64. data/lib/rubycritic/source_locator.rb +5 -6
  65. data/lib/rubycritic/version.rb +1 -1
  66. data/rubycritic.gemspec +26 -25
  67. data/test/analysers_test_helper.rb +1 -1
  68. data/test/lib/rubycritic/analysers/churn_test.rb +9 -9
  69. data/test/lib/rubycritic/analysers/complexity_test.rb +5 -5
  70. data/test/lib/rubycritic/analysers/helpers/methods_counter_test.rb +12 -12
  71. data/test/lib/rubycritic/analysers/helpers/modules_locator_test.rb +25 -25
  72. data/test/lib/rubycritic/analysers/smells/flay_test.rb +12 -12
  73. data/test/lib/rubycritic/analysers/smells/flog_test.rb +7 -7
  74. data/test/lib/rubycritic/analysers/smells/reek_test.rb +8 -8
  75. data/test/lib/rubycritic/browser_test.rb +16 -0
  76. data/test/lib/rubycritic/commands/status_reporter_test.rb +31 -19
  77. data/test/lib/rubycritic/configuration_test.rb +10 -10
  78. data/test/lib/rubycritic/core/analysed_module_test.rb +37 -37
  79. data/test/lib/rubycritic/core/analysed_modules_collection_test.rb +32 -32
  80. data/test/lib/rubycritic/core/location_test.rb +16 -16
  81. data/test/lib/rubycritic/core/smell_test.rb +31 -31
  82. data/test/lib/rubycritic/core/smells_array_test.rb +18 -18
  83. data/test/lib/rubycritic/generators/console_report_test.rb +26 -26
  84. data/test/lib/rubycritic/generators/turbulence_test.rb +8 -8
  85. data/test/lib/rubycritic/generators/view_helpers_test.rb +36 -36
  86. data/test/lib/rubycritic/smells_status_setter_test.rb +7 -7
  87. data/test/lib/rubycritic/source_control_systems/base_test.rb +7 -7
  88. data/test/lib/rubycritic/source_control_systems/double_test.rb +3 -3
  89. data/test/lib/rubycritic/source_control_systems/git_test.rb +4 -4
  90. data/test/lib/rubycritic/source_control_systems/mercurial_test.rb +3 -3
  91. data/test/lib/rubycritic/source_locator_test.rb +30 -30
  92. data/test/lib/rubycritic/version_test.rb +4 -4
  93. data/test/test_helper.rb +4 -4
  94. metadata +30 -17
@@ -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
@@ -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
@@ -1,4 +1,4 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in rubycritic.gemspec
4
4
  gemspec
data/Rakefile CHANGED
@@ -1,18 +1,18 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
- require "rubocop/rake_task"
4
- require "cucumber/rake/task"
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 "lib"
8
- task.libs.push "test"
9
- task.pattern = "test/**/*_test.rb"
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 = "features --format progress --color"
13
+ t.cucumber_opts = 'features --format progress --color'
14
14
  end
15
15
 
16
16
  RuboCop::RakeTask.new
17
17
 
18
- task :default => [:test, :features, :rubocop]
18
+ task default: [:test, :features, :rubocop]
@@ -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("../../lib", __FILE__)
5
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
6
6
 
7
- require "rubycritic/cli/application"
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("smelly.rb", contents)
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("clean.rb", contents)
25
+ write_file('clean.rb', contents)
26
26
  end
27
27
 
28
28
  Given(/^the empty file 'empty.rb'/) do
29
- write_file("clean.rb", "")
29
+ write_file('clean.rb', '')
30
30
  end
@@ -1,8 +1,8 @@
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"
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
 
@@ -1,4 +1,4 @@
1
- require "rubycritic/command_factory"
1
+ require 'rubycritic/command_factory'
2
2
 
3
3
  module Rubycritic
4
4
  end
@@ -1,10 +1,9 @@
1
- require "rubycritic/analysers/helpers/methods_counter"
2
- require "rubycritic/analysers/helpers/modules_locator"
3
- require "rubycritic/colorize"
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
- "attributes"
23
+ 'attributes'
25
24
  end
26
25
  end
27
26
  end
@@ -1,8 +1,7 @@
1
- require "rubycritic/colorize"
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
- "churn"
24
+ 'churn'
26
25
  end
27
26
  end
28
-
29
27
  end
30
28
  end
@@ -1,9 +1,8 @@
1
- require "rubycritic/analysers/helpers/flog"
2
- require "rubycritic/colorize"
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
- "complexity"
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
- .select { |child| child.is_a?(Parser::AST::Node) }
26
- .flat_map(&:get_module_names)
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,7 +1,6 @@
1
- require "flay"
1
+ require 'flay'
2
2
 
3
3
  module Rubycritic
4
-
5
4
  class Flay < ::Flay
6
5
  def initialize(paths)
7
6
  super()
@@ -9,5 +8,4 @@ module Rubycritic
9
8
  analyze
10
9
  end
11
10
  end
12
-
13
11
  end
@@ -1,17 +1,15 @@
1
- require "flog"
1
+ require 'flog'
2
2
 
3
3
  module Rubycritic
4
-
5
4
  class Flog < ::Flog
6
5
  DEFAULT_OPTIONS = {
7
- :all => true,
8
- :continue => true,
9
- :methods => true
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 "rubycritic/analysers/helpers/parser"
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 "rubycritic/analysers/helpers/parser"
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("_").map(&:capitalize).join]
33
+ [file_name.split('_').map(&:capitalize).join]
35
34
  end
36
35
 
37
36
  def file_name
38
- @analysed_module.pathname.basename.sub_ext("").to_s
37
+ @analysed_module.pathname.basename.sub_ext('').to_s
39
38
  end
40
39
  end
41
-
42
40
  end
@@ -1,5 +1,5 @@
1
- require "parser/current"
2
- require "rubycritic/analysers/helpers/ast_node"
1
+ require 'parser/current'
2
+ require 'rubycritic/analysers/helpers/ast_node'
3
3
 
4
4
  module Rubycritic
5
5
  module Parser
@@ -1,4 +1,4 @@
1
- require "reek"
1
+ require 'reek'
2
2
 
3
3
  module Rubycritic
4
4
  class Reek < ::Reek::Examiner
@@ -1,10 +1,9 @@
1
- require "rubycritic/analysers/helpers/flay"
2
- require "rubycritic/core/smell"
3
- require "rubycritic/colorize"
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
- "flay smells"
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
- :locations => smell_locations(nodes),
48
- :context => similarity(structural_hash),
49
- :message => "found in #{nodes.size} nodes",
50
- :score => mass,
51
- :type => "DuplicateCode",
52
- :cost => cost(mass)
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
- "Identical code"
63
+ 'Identical code'
65
64
  else
66
- "Similar code"
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