rubycritic 2.6.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
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