rubycritic 3.5.2 → 4.0.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 +15 -1
- data/README.md +19 -0
- data/lib/rubycritic/analysers/helpers/ast_node.rb +19 -12
- data/lib/rubycritic/analysers/helpers/modules_locator.rb +1 -1
- data/lib/rubycritic/analysers/helpers/reek.rb +1 -1
- data/lib/rubycritic/analysers/smells/flay.rb +10 -8
- data/lib/rubycritic/cli/application.rb +3 -2
- data/lib/rubycritic/cli/options.rb +9 -97
- data/lib/rubycritic/cli/options/argv.rb +117 -0
- data/lib/rubycritic/cli/options/file.rb +100 -0
- data/lib/rubycritic/command_factory.rb +6 -13
- data/lib/rubycritic/commands/compare.rb +2 -1
- data/lib/rubycritic/commands/default.rb +2 -2
- data/lib/rubycritic/commands/status_reporter.rb +1 -1
- data/lib/rubycritic/commands/utils/build_number_file.rb +2 -0
- data/lib/rubycritic/configuration.rb +7 -9
- data/lib/rubycritic/core/analysed_modules_collection.rb +11 -5
- data/lib/rubycritic/generators/html/base.rb +1 -1
- data/lib/rubycritic/generators/html/code_file.rb +2 -2
- data/lib/rubycritic/generators/html/code_index.rb +2 -2
- data/lib/rubycritic/generators/html/overview.rb +2 -2
- data/lib/rubycritic/generators/html/smells_index.rb +2 -2
- data/lib/rubycritic/generators/html/templates/overview.html.erb +1 -1
- data/lib/rubycritic/reporter.rb +9 -12
- data/lib/rubycritic/revision_comparator.rb +10 -11
- data/lib/rubycritic/source_control_systems/base.rb +3 -2
- data/lib/rubycritic/source_control_systems/git.rb +3 -2
- data/lib/rubycritic/source_control_systems/mercurial.rb +1 -1
- data/lib/rubycritic/source_control_systems/perforce.rb +1 -0
- data/lib/rubycritic/version.rb +1 -1
- metadata +74 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db2b8e076626a6a29d140f9f6552b6f5829e0f8d258b9cc47afa4fc1f21acbcc
|
4
|
+
data.tar.gz: 6ef348632806a7a388aebadb6d53eec20870f0efc93459433debeda020126f00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b081e071ffad334bb27a1e469f5debe08bd2b3cc563cf1c5196c745539c237eb640297df2936461913a1b1fc4a714a8365786191bbe016725c94a96f80b7dd74
|
7
|
+
data.tar.gz: a937c6a4142b87a414b513492517d4defccdf06d182b1a846fea149142d6bf10d06c42dcf62fad5edd8746d7eb7236d427d12109f0e3b13573577dc6902848c7
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
# master [(unreleased)](https://github.com/whitesmith/rubycritic/compare/
|
1
|
+
# master [(unreleased)](https://github.com/whitesmith/rubycritic/compare/v4.0.0...master)
|
2
|
+
|
3
|
+
# 4.0.0 / 2019-02-27 [(commits)](https://github.com/whitesmith/rubycritic/compare/v3.5.1...v4.0.0)
|
4
|
+
|
5
|
+
* [FEATURE] Allow generating reports in multiple formats in one run (by [@katafrakt])
|
6
|
+
* [FEATURE] Allow to accept a config file (by [@mfbmina])
|
7
|
+
* [CHANGE] Update `reek` to 5.3 (by [@taitran19][] and [@onumis][])
|
8
|
+
* [CHANGE] Update `parser` to 2.6.0 (by [@onumis][])
|
9
|
+
* [CHANGE] Update `tty-which` to 0.4.0 (by [@onumis][])
|
10
|
+
* [CHANGE] Drop support for ruby 2.1 and 2.2 (by [@onumis][])
|
11
|
+
* [CHANGE] Fix rubocop offenses (by [@AllanSiqueira][] and [@harman28][])
|
2
12
|
|
3
13
|
# 3.5.2 / 2018-09-27 [(commits)](https://github.com/whitesmith/rubycritic/compare/v3.5.1...v3.5.2)
|
4
14
|
|
@@ -253,3 +263,7 @@
|
|
253
263
|
[@HemanthMudalaiah]: https://github.com/HemanthMudalaiah
|
254
264
|
[@SuperSandro2000]: https://github.com/SuperSandro2000
|
255
265
|
[@antoineLeclercq]: https://github.com/antoineLeclercq
|
266
|
+
[@mfbmina]: https://github.com/mfbmina
|
267
|
+
[@taitran19]: https://github.com/taitran19
|
268
|
+
[@AllanSiqueira]: https://github.com/AllanSiqueira
|
269
|
+
[@harman28]: https://github.com/harman28
|
data/README.md
CHANGED
@@ -125,6 +125,25 @@ $ rubycritic --help
|
|
125
125
|
| `--suppress-ratings` | Suppress letter ratings |
|
126
126
|
| `--no-browser` | Do not open html report with browser |
|
127
127
|
|
128
|
+
You also can use a config file. Just create a `.rubycritic.yml` on your project root path.
|
129
|
+
|
130
|
+
Here are one example:
|
131
|
+
```
|
132
|
+
mode_ci:
|
133
|
+
enabled: true # default is false
|
134
|
+
branch: 'production' # default is master
|
135
|
+
branch: 'production' # default is master
|
136
|
+
path: '/tmp/mycustompath' # Set path where report will be saved (tmp/rubycritic by default)
|
137
|
+
threshhold_score: 10 # default is 0
|
138
|
+
deduplicate_symlinks: true # default is false
|
139
|
+
suppress_ratings: true # default is false
|
140
|
+
no_browser: true # default is false
|
141
|
+
format: console # Available values are: html, json, console, lint. Default value is html.
|
142
|
+
minimum_score: 95 # default is 0
|
143
|
+
paths: # Files to analyse.
|
144
|
+
- 'app/controllers/'
|
145
|
+
- 'app/models/'
|
146
|
+
```
|
128
147
|
|
129
148
|
### Analyzer Configuration
|
130
149
|
|
@@ -16,24 +16,21 @@ module Parser
|
|
16
16
|
def recursive_children
|
17
17
|
children.each do |child|
|
18
18
|
next unless child.is_a?(Parser::AST::Node)
|
19
|
+
|
19
20
|
yield child
|
20
21
|
child.recursive_children { |grand_child| yield grand_child }
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
def module_names
|
26
|
+
ast_node_children = children.select do |child|
|
27
|
+
child.is_a?(Parser::AST::Node)
|
28
|
+
end
|
29
|
+
|
30
|
+
children_modules = ast_node_children.flat_map(&:module_names)
|
28
31
|
|
29
32
|
if MODULE_TYPES.include?(type)
|
30
|
-
|
31
|
-
[module_name]
|
32
|
-
else
|
33
|
-
children_modules.map do |children_module|
|
34
|
-
"#{module_name}::#{children_module}"
|
35
|
-
end
|
36
|
-
end
|
33
|
+
module_names_with_children children_modules
|
37
34
|
else
|
38
35
|
children_modules
|
39
36
|
end
|
@@ -41,6 +38,16 @@ module Parser
|
|
41
38
|
|
42
39
|
private
|
43
40
|
|
41
|
+
def module_names_with_children(children_modules)
|
42
|
+
if children_modules.empty?
|
43
|
+
[module_name]
|
44
|
+
else
|
45
|
+
children_modules.map do |children_module|
|
46
|
+
"#{module_name}::#{children_module}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
44
51
|
def module_name
|
45
52
|
name_segments = []
|
46
53
|
current_node = children[0]
|
@@ -61,7 +68,7 @@ module RubyCritic
|
|
61
68
|
0
|
62
69
|
end
|
63
70
|
|
64
|
-
def
|
71
|
+
def module_names
|
65
72
|
[]
|
66
73
|
end
|
67
74
|
end
|
@@ -5,7 +5,7 @@ require 'reek'
|
|
5
5
|
module RubyCritic
|
6
6
|
class Reek < ::Reek::Examiner
|
7
7
|
def initialize(analysed_module)
|
8
|
-
super(analysed_module, configuration: ::Reek::Configuration::AppConfiguration.
|
8
|
+
super(analysed_module, configuration: ::Reek::Configuration::AppConfiguration.from_default_path)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -15,14 +15,7 @@ module RubyCritic
|
|
15
15
|
|
16
16
|
def run
|
17
17
|
@flay.hashes.each do |structural_hash, nodes|
|
18
|
-
|
19
|
-
nodes.map(&:file).uniq.each do |file|
|
20
|
-
@analysed_modules[file].smells << smell
|
21
|
-
end
|
22
|
-
|
23
|
-
nodes.each do |node|
|
24
|
-
@analysed_modules[node.file].duplication += node.mass
|
25
|
-
end
|
18
|
+
analyze_modules(structural_hash, nodes)
|
26
19
|
print green '.'
|
27
20
|
end
|
28
21
|
puts ''
|
@@ -72,6 +65,15 @@ module RubyCritic
|
|
72
65
|
def cost(mass)
|
73
66
|
mass / 25
|
74
67
|
end
|
68
|
+
|
69
|
+
def analyze_modules(structural_hash, nodes)
|
70
|
+
nodes.map(&:file).uniq.each do |file|
|
71
|
+
@analysed_modules[file].smells << create_smell(structural_hash, nodes)
|
72
|
+
end
|
73
|
+
nodes.each do |node|
|
74
|
+
@analysed_modules[node.file].duplication += node.mass
|
75
|
+
end
|
76
|
+
end
|
75
77
|
end
|
76
78
|
end
|
77
79
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rubycritic'
|
4
|
+
require 'rubycritic/browser'
|
4
5
|
require 'rubycritic/cli/options'
|
5
6
|
require 'rubycritic/command_factory'
|
6
7
|
|
@@ -15,9 +16,9 @@ module RubyCritic
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def execute
|
18
|
-
parsed_options = @options.parse
|
19
|
+
parsed_options = @options.parse.to_h
|
19
20
|
|
20
|
-
reporter = RubyCritic::CommandFactory.create(parsed_options
|
21
|
+
reporter = RubyCritic::CommandFactory.create(parsed_options).execute
|
21
22
|
print(reporter.status_message)
|
22
23
|
reporter.status
|
23
24
|
rescue OptionParser::InvalidOption => error
|
@@ -1,115 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'rubycritic/
|
3
|
+
require 'rubycritic/cli/options/argv'
|
4
|
+
require 'rubycritic/cli/options/file'
|
5
5
|
|
6
6
|
module RubyCritic
|
7
7
|
module Cli
|
8
8
|
class Options
|
9
|
+
attr_reader :argv_options, :file_options
|
10
|
+
|
9
11
|
def initialize(argv)
|
10
|
-
@
|
11
|
-
|
12
|
+
@argv_options = Argv.new(argv)
|
13
|
+
@file_options = File.new
|
12
14
|
end
|
13
15
|
|
14
|
-
# rubocop:disable Metrics/MethodLength
|
15
16
|
def parse
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
opts.on('-p', '--path [PATH]', 'Set path where report will be saved (tmp/rubycritic by default)') do |path|
|
20
|
-
@root = path
|
21
|
-
end
|
22
|
-
|
23
|
-
opts.on('-b', '--branch BRANCH', 'Set branch to compare') do |branch|
|
24
|
-
self.base_branch = String(branch)
|
25
|
-
set_current_branch
|
26
|
-
self.mode = :compare_branches
|
27
|
-
end
|
28
|
-
|
29
|
-
opts.on('-t', '--maximum-decrease [MAX_DECREASE]',
|
30
|
-
'Set a threshold for score difference between two branches (works only with -b)') do |threshold_score|
|
31
|
-
self.threshold_score = Integer(threshold_score)
|
32
|
-
end
|
33
|
-
|
34
|
-
opts.on(
|
35
|
-
'-f', '--format [FORMAT]',
|
36
|
-
%i[html json console lint],
|
37
|
-
'Report smells in the given format:',
|
38
|
-
' html (default; will open in a browser)',
|
39
|
-
' json',
|
40
|
-
' console',
|
41
|
-
' lint'
|
42
|
-
) do |format|
|
43
|
-
self.format = format
|
44
|
-
end
|
45
|
-
|
46
|
-
opts.on('-s', '--minimum-score [MIN_SCORE]', 'Set a minimum score') do |min_score|
|
47
|
-
self.minimum_score = Float(min_score)
|
48
|
-
end
|
49
|
-
|
50
|
-
opts.on('-m', '--mode-ci [BASE_BRANCH]',
|
51
|
-
'Use CI mode (faster, analyses diffs w.r.t base_branch (default: master))') do |branch|
|
52
|
-
self.base_branch = branch || 'master'
|
53
|
-
set_current_branch
|
54
|
-
self.mode = :ci
|
55
|
-
end
|
56
|
-
|
57
|
-
opts.on('--deduplicate-symlinks', 'De-duplicate symlinks based on their final target') do
|
58
|
-
self.deduplicate_symlinks = true
|
59
|
-
end
|
17
|
+
argv_options.parse
|
18
|
+
file_options.parse
|
60
19
|
|
61
|
-
opts.on('--suppress-ratings', 'Suppress letter ratings') do
|
62
|
-
self.suppress_ratings = true
|
63
|
-
end
|
64
|
-
|
65
|
-
opts.on('--no-browser', 'Do not open html report with browser') do
|
66
|
-
self.no_browser = true
|
67
|
-
end
|
68
|
-
|
69
|
-
opts.on_tail('-v', '--version', "Show gem's version") do
|
70
|
-
self.mode = :version
|
71
|
-
end
|
72
|
-
|
73
|
-
opts.on_tail('-h', '--help', 'Show this message') do
|
74
|
-
self.mode = :help
|
75
|
-
end
|
76
|
-
end.parse!(@argv)
|
77
20
|
self
|
78
21
|
end
|
79
22
|
|
80
23
|
def to_h
|
81
|
-
|
82
|
-
mode: mode,
|
83
|
-
root: root,
|
84
|
-
format: format,
|
85
|
-
deduplicate_symlinks: deduplicate_symlinks,
|
86
|
-
paths: paths,
|
87
|
-
suppress_ratings: suppress_ratings,
|
88
|
-
help_text: parser.help,
|
89
|
-
minimum_score: minimum_score || 0,
|
90
|
-
no_browser: no_browser,
|
91
|
-
base_branch: base_branch,
|
92
|
-
feature_branch: feature_branch,
|
93
|
-
threshold_score: threshold_score || 0
|
94
|
-
}
|
95
|
-
end
|
96
|
-
# rubocop:enable Metrics/MethodLength
|
97
|
-
|
98
|
-
private
|
99
|
-
|
100
|
-
attr_accessor :mode, :root, :format, :deduplicate_symlinks,
|
101
|
-
:suppress_ratings, :minimum_score, :no_browser,
|
102
|
-
:parser, :base_branch, :feature_branch, :threshold_score
|
103
|
-
def paths
|
104
|
-
if @argv.empty?
|
105
|
-
['.']
|
106
|
-
else
|
107
|
-
@argv
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
def set_current_branch
|
112
|
-
self.feature_branch = SourceControlSystem::Git.current_branch
|
24
|
+
file_options.to_h.merge(argv_options.to_h)
|
113
25
|
end
|
114
26
|
end
|
115
27
|
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
module RubyCritic
|
6
|
+
module Cli
|
7
|
+
class Options
|
8
|
+
class Argv
|
9
|
+
def initialize(argv)
|
10
|
+
@argv = argv
|
11
|
+
self.parser = OptionParser.new
|
12
|
+
end
|
13
|
+
|
14
|
+
# rubocop:disable Metrics/MethodLength
|
15
|
+
def parse
|
16
|
+
parser.new do |opts|
|
17
|
+
opts.banner = 'Usage: rubycritic [options] [paths]'
|
18
|
+
|
19
|
+
opts.on('-p', '--path [PATH]', 'Set path where report will be saved (tmp/rubycritic by default)') do |path|
|
20
|
+
@root = path
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on('-b', '--branch BRANCH', 'Set branch to compare') do |branch|
|
24
|
+
self.base_branch = String(branch)
|
25
|
+
set_current_branch
|
26
|
+
self.mode = :compare_branches
|
27
|
+
end
|
28
|
+
|
29
|
+
opts.on(
|
30
|
+
'-t',
|
31
|
+
'--maximum-decrease [MAX_DECREASE]',
|
32
|
+
'Set a threshold for score difference between two branches (works only with -b)'
|
33
|
+
) do |threshold_score|
|
34
|
+
self.threshold_score = Integer(threshold_score)
|
35
|
+
end
|
36
|
+
|
37
|
+
formats = []
|
38
|
+
self.formats = formats
|
39
|
+
opts.on(
|
40
|
+
'-f', '--format [FORMAT]',
|
41
|
+
%i[html json console lint],
|
42
|
+
'Report smells in the given format:',
|
43
|
+
' html (default; will open in a browser)',
|
44
|
+
' json',
|
45
|
+
' console',
|
46
|
+
' lint'
|
47
|
+
) do |format|
|
48
|
+
formats << format
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on('-s', '--minimum-score [MIN_SCORE]', 'Set a minimum score') do |min_score|
|
52
|
+
self.minimum_score = Float(min_score)
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.on('-m', '--mode-ci [BASE_BRANCH]',
|
56
|
+
'Use CI mode (faster, analyses diffs w.r.t base_branch (default: master))') do |branch|
|
57
|
+
self.base_branch = branch || 'master'
|
58
|
+
set_current_branch
|
59
|
+
self.mode = :ci
|
60
|
+
end
|
61
|
+
|
62
|
+
opts.on('--deduplicate-symlinks', 'De-duplicate symlinks based on their final target') do
|
63
|
+
self.deduplicate_symlinks = true
|
64
|
+
end
|
65
|
+
|
66
|
+
opts.on('--suppress-ratings', 'Suppress letter ratings') do
|
67
|
+
self.suppress_ratings = true
|
68
|
+
end
|
69
|
+
|
70
|
+
opts.on('--no-browser', 'Do not open html report with browser') do
|
71
|
+
self.no_browser = true
|
72
|
+
end
|
73
|
+
|
74
|
+
opts.on_tail('-v', '--version', "Show gem's version") do
|
75
|
+
self.mode = :version
|
76
|
+
end
|
77
|
+
|
78
|
+
opts.on_tail('-h', '--help', 'Show this message') do
|
79
|
+
self.mode = :help
|
80
|
+
end
|
81
|
+
end.parse!(@argv)
|
82
|
+
end
|
83
|
+
|
84
|
+
def to_h
|
85
|
+
{
|
86
|
+
mode: mode,
|
87
|
+
root: root,
|
88
|
+
formats: formats,
|
89
|
+
deduplicate_symlinks: deduplicate_symlinks,
|
90
|
+
paths: paths,
|
91
|
+
suppress_ratings: suppress_ratings,
|
92
|
+
help_text: parser.help,
|
93
|
+
minimum_score: minimum_score,
|
94
|
+
no_browser: no_browser,
|
95
|
+
base_branch: base_branch,
|
96
|
+
feature_branch: feature_branch,
|
97
|
+
threshold_score: threshold_score
|
98
|
+
}
|
99
|
+
end
|
100
|
+
# rubocop:enable Metrics/MethodLength
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
attr_accessor :mode, :root, :formats, :deduplicate_symlinks,
|
105
|
+
:suppress_ratings, :minimum_score, :no_browser,
|
106
|
+
:parser, :base_branch, :feature_branch, :threshold_score
|
107
|
+
def paths
|
108
|
+
@argv unless @argv.empty?
|
109
|
+
end
|
110
|
+
|
111
|
+
def set_current_branch
|
112
|
+
self.feature_branch = SourceControlSystem::Git.current_branch
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module RubyCritic
|
6
|
+
module Cli
|
7
|
+
class Options
|
8
|
+
class File
|
9
|
+
attr_reader :filename, :options
|
10
|
+
|
11
|
+
def initialize(filename = './.rubycritic.yml')
|
12
|
+
@filename = filename
|
13
|
+
@options = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse
|
17
|
+
@options = YAML.load_file(filename) if ::File.file?(filename)
|
18
|
+
end
|
19
|
+
|
20
|
+
# rubocop:disable Metrics/MethodLength
|
21
|
+
def to_h
|
22
|
+
{
|
23
|
+
mode: mode,
|
24
|
+
root: root,
|
25
|
+
formats: formats,
|
26
|
+
deduplicate_symlinks: deduplicate_symlinks,
|
27
|
+
paths: paths,
|
28
|
+
suppress_ratings: suppress_ratings,
|
29
|
+
minimum_score: minimum_score,
|
30
|
+
no_browser: no_browser,
|
31
|
+
base_branch: base_branch,
|
32
|
+
feature_branch: feature_branch,
|
33
|
+
threshold_score: threshold_score
|
34
|
+
}
|
35
|
+
end
|
36
|
+
# rubocop:enable Metrics/MethodLength
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def base_branch
|
41
|
+
return options.dig('mode_ci', 'branch') || 'master' if options.dig('mode_ci', 'enabled').to_s == 'true'
|
42
|
+
|
43
|
+
options['branch']
|
44
|
+
end
|
45
|
+
|
46
|
+
def mode
|
47
|
+
if options.dig('mode_ci', 'enabled').to_s == 'true'
|
48
|
+
:ci
|
49
|
+
elsif base_branch
|
50
|
+
:compare_branches
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def feature_branch
|
55
|
+
SourceControlSystem::Git.current_branch if base_branch
|
56
|
+
end
|
57
|
+
|
58
|
+
def root
|
59
|
+
options['path']
|
60
|
+
end
|
61
|
+
|
62
|
+
def threshold_score
|
63
|
+
options['threshold_score']
|
64
|
+
end
|
65
|
+
|
66
|
+
def deduplicate_symlinks
|
67
|
+
value_for(options['deduplicate_symlinks'])
|
68
|
+
end
|
69
|
+
|
70
|
+
def suppress_ratings
|
71
|
+
value_for(options['suppress_ratings'])
|
72
|
+
end
|
73
|
+
|
74
|
+
def no_browser
|
75
|
+
value_for(options['no_browser'])
|
76
|
+
end
|
77
|
+
|
78
|
+
def formats
|
79
|
+
formats = options['formats'] || []
|
80
|
+
formats.select do |format|
|
81
|
+
%w[html json console lint].include?(format)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def minimum_score
|
86
|
+
options['minimum_score']
|
87
|
+
end
|
88
|
+
|
89
|
+
def paths
|
90
|
+
options['paths']
|
91
|
+
end
|
92
|
+
|
93
|
+
def value_for(value)
|
94
|
+
value = value.to_s
|
95
|
+
value == 'true' unless value.empty?
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -4,25 +4,18 @@ require 'rubycritic/configuration'
|
|
4
4
|
|
5
5
|
module RubyCritic
|
6
6
|
class CommandFactory
|
7
|
+
COMMAND_CLASS_MODES = %i[version help ci compare default].freeze
|
8
|
+
|
7
9
|
def self.create(options = {})
|
8
10
|
Config.set(options)
|
9
11
|
command_class(Config.mode).new(options)
|
10
12
|
end
|
11
13
|
|
12
14
|
def self.command_class(mode)
|
13
|
-
|
14
|
-
|
15
|
-
require
|
16
|
-
Command
|
17
|
-
when :help
|
18
|
-
require 'rubycritic/commands/help'
|
19
|
-
Command::Help
|
20
|
-
when :ci
|
21
|
-
require 'rubycritic/commands/ci'
|
22
|
-
Command::Ci
|
23
|
-
when :compare_branches
|
24
|
-
require 'rubycritic/commands/compare'
|
25
|
-
Command::Compare
|
15
|
+
mode = mode.to_s.split('_').first.to_sym
|
16
|
+
if COMMAND_CLASS_MODES.include? mode
|
17
|
+
require "rubycritic/commands/#{mode}"
|
18
|
+
Command.const_get(mode.capitalize)
|
26
19
|
else
|
27
20
|
require 'rubycritic/commands/default'
|
28
21
|
Command::Default
|
@@ -70,6 +70,7 @@ module RubyCritic
|
|
70
70
|
# two branches is greater than threshold value
|
71
71
|
def compare_threshold
|
72
72
|
return unless mark_build_fail?
|
73
|
+
|
73
74
|
print("Threshold: #{Config.threshold_score}\n")
|
74
75
|
print("Difference: #{(Config.base_branch_score - Config.feature_branch_score).abs}\n")
|
75
76
|
abort('The score difference between the two branches is over the threshold.')
|
@@ -98,7 +99,7 @@ module RubyCritic
|
|
98
99
|
def critique(branch)
|
99
100
|
module_collection = AnalysersRunner.new(paths).run
|
100
101
|
Config.send(:"#{branch}_collection=", module_collection)
|
101
|
-
RevisionComparator.new(paths).
|
102
|
+
RevisionComparator.new(paths).statuses = module_collection
|
102
103
|
end
|
103
104
|
end
|
104
105
|
end
|
@@ -11,7 +11,7 @@ module RubyCritic
|
|
11
11
|
class Default < Base
|
12
12
|
def initialize(options)
|
13
13
|
super
|
14
|
-
@paths = options[:paths]
|
14
|
+
@paths = options[:paths] || ['.']
|
15
15
|
Config.source_control_system = SourceControlSystem::Base.create
|
16
16
|
end
|
17
17
|
|
@@ -22,7 +22,7 @@ module RubyCritic
|
|
22
22
|
|
23
23
|
def critique
|
24
24
|
analysed_modules = AnalysersRunner.new(paths).run
|
25
|
-
RevisionComparator.new(paths).
|
25
|
+
RevisionComparator.new(paths).statuses = analysed_modules
|
26
26
|
end
|
27
27
|
|
28
28
|
def report(analysed_modules)
|
@@ -5,7 +5,7 @@ require 'rubycritic/source_control_systems/base'
|
|
5
5
|
module RubyCritic
|
6
6
|
class Configuration
|
7
7
|
attr_reader :root
|
8
|
-
attr_accessor :source_control_system, :mode, :
|
8
|
+
attr_accessor :source_control_system, :mode, :formats, :deduplicate_symlinks,
|
9
9
|
:suppress_ratings, :open_with, :no_browser, :base_branch,
|
10
10
|
:feature_branch, :base_branch_score, :feature_branch_score,
|
11
11
|
:base_root_directory, :feature_root_directory,
|
@@ -15,14 +15,14 @@ module RubyCritic
|
|
15
15
|
def set(options)
|
16
16
|
self.mode = options[:mode] || :default
|
17
17
|
self.root = options[:root] || 'tmp/rubycritic'
|
18
|
-
self.
|
19
|
-
self.deduplicate_symlinks = options[:deduplicate_symlinks]
|
20
|
-
self.suppress_ratings = options[:suppress_ratings]
|
18
|
+
self.formats = options[:formats] || [:html]
|
19
|
+
self.deduplicate_symlinks = options[:deduplicate_symlinks]
|
20
|
+
self.suppress_ratings = options[:suppress_ratings]
|
21
21
|
self.open_with = options[:open_with]
|
22
22
|
self.no_browser = options[:no_browser]
|
23
23
|
self.base_branch = options[:base_branch]
|
24
24
|
self.feature_branch = options[:feature_branch]
|
25
|
-
self.threshold_score = options[:threshold_score]
|
25
|
+
self.threshold_score = options[:threshold_score].to_i
|
26
26
|
end
|
27
27
|
|
28
28
|
def root=(path)
|
@@ -45,13 +45,11 @@ module RubyCritic
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def self.compare_branches_mode?
|
48
|
-
|
49
|
-
mode == :compare_branches || mode == :ci
|
48
|
+
%i[compare_branches ci].include?(Config.mode)
|
50
49
|
end
|
51
50
|
|
52
51
|
def self.build_mode?
|
53
|
-
|
54
|
-
(mode == :compare_branches || mode == :ci) && !Config.no_browser
|
52
|
+
!Config.no_browser && %i[compare_branches ci].include?(Config.mode)
|
55
53
|
end
|
56
54
|
|
57
55
|
def self.method_missing(method, *args, &block)
|
@@ -68,7 +68,7 @@ module RubyCritic
|
|
68
68
|
|
69
69
|
def average_cost
|
70
70
|
num_modules = @modules.size
|
71
|
-
if num_modules
|
71
|
+
if num_modules.positive?
|
72
72
|
map { |mod| limited_cost_for(mod) }.reduce(:+) / num_modules.to_f
|
73
73
|
else
|
74
74
|
0.0
|
@@ -80,10 +80,16 @@ module RubyCritic
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def build_analysed_module(analysed_module)
|
83
|
-
AnalysedModule.new(
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
AnalysedModule.new(
|
84
|
+
pathname: analysed_module.pathname,
|
85
|
+
name: analysed_module.name,
|
86
|
+
smells: analysed_module.smells,
|
87
|
+
churn: analysed_module.churn,
|
88
|
+
committed_at: analysed_module.committed_at,
|
89
|
+
complexity: analysed_module.complexity,
|
90
|
+
duplication: analysed_module.duplication,
|
91
|
+
methods_count: analysed_module.methods_count
|
92
|
+
)
|
87
93
|
end
|
88
94
|
end
|
89
95
|
end
|
@@ -42,8 +42,8 @@ module RubyCritic
|
|
42
42
|
file_code << Line.new(file_directory, line_text, line_smells).render
|
43
43
|
end
|
44
44
|
|
45
|
-
file_body = TEMPLATE.result(
|
46
|
-
LAYOUT_TEMPLATE.result(
|
45
|
+
file_body = TEMPLATE.result(base_binding { file_code.join })
|
46
|
+
LAYOUT_TEMPLATE.result(base_binding { file_body })
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -24,8 +24,8 @@ module RubyCritic
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def render
|
27
|
-
index_body = TEMPLATE.result(
|
28
|
-
LAYOUT_TEMPLATE.result(
|
27
|
+
index_body = TEMPLATE.result(base_binding)
|
28
|
+
LAYOUT_TEMPLATE.result(base_binding { index_body })
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -29,8 +29,8 @@ module RubyCritic
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def render
|
32
|
-
index_body = TEMPLATE.result(
|
33
|
-
LAYOUT_TEMPLATE.result(
|
32
|
+
index_body = TEMPLATE.result(base_binding)
|
33
|
+
LAYOUT_TEMPLATE.result(base_binding { index_body })
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -26,8 +26,8 @@ module RubyCritic
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def render
|
29
|
-
index_body = TEMPLATE.result(
|
30
|
-
LAYOUT_TEMPLATE.result(
|
29
|
+
index_body = TEMPLATE.result(base_binding)
|
30
|
+
LAYOUT_TEMPLATE.result(base_binding { index_body })
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
data/lib/rubycritic/reporter.rb
CHANGED
@@ -2,21 +2,18 @@
|
|
2
2
|
|
3
3
|
module RubyCritic
|
4
4
|
module Reporter
|
5
|
+
REPORT_GENERATOR_CLASS_FORMATS = %i[json console lint].freeze
|
6
|
+
|
5
7
|
def self.generate_report(analysed_modules)
|
6
|
-
|
8
|
+
Config.formats.uniq.each do |format|
|
9
|
+
report_generator_class(format).new(analysed_modules).generate_report
|
10
|
+
end
|
7
11
|
end
|
8
12
|
|
9
|
-
def self.report_generator_class
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
Generator::JsonReport
|
14
|
-
when :console
|
15
|
-
require 'rubycritic/generators/console_report'
|
16
|
-
Generator::ConsoleReport
|
17
|
-
when :lint
|
18
|
-
require 'rubycritic/generators/lint_report'
|
19
|
-
Generator::LintReport
|
13
|
+
def self.report_generator_class(config_format)
|
14
|
+
if REPORT_GENERATOR_CLASS_FORMATS.include? config_format
|
15
|
+
require "rubycritic/generators/#{config_format}_report"
|
16
|
+
Generator.const_get("#{config_format.capitalize}Report")
|
20
17
|
else
|
21
18
|
require 'rubycritic/generators/html_report'
|
22
19
|
Generator::HtmlReport
|
@@ -14,17 +14,16 @@ module RubyCritic
|
|
14
14
|
@paths = paths
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
analysed_modules_now
|
17
|
+
def statuses=(analysed_modules_now)
|
18
|
+
return unless Config.source_control_system.revision?
|
19
|
+
|
20
|
+
analysed_modules_before = load_cached_analysed_modules
|
21
|
+
return unless analysed_modules_before
|
22
|
+
|
23
|
+
SmellsStatusSetter.set(
|
24
|
+
analysed_modules_before.flat_map(&:smells),
|
25
|
+
analysed_modules_now.flat_map(&:smells)
|
26
|
+
)
|
28
27
|
end
|
29
28
|
|
30
29
|
private
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'English'
|
3
4
|
require 'shellwords'
|
4
5
|
|
5
6
|
module RubyCritic
|
@@ -21,8 +22,8 @@ module RubyCritic
|
|
21
22
|
supported_system.new
|
22
23
|
else
|
23
24
|
puts 'RubyCritic can provide more feedback if you use '\
|
24
|
-
|
25
|
-
|
25
|
+
"a #{connected_system_names} repository. "\
|
26
|
+
'Churn will not be calculated.'
|
26
27
|
Double.new
|
27
28
|
end
|
28
29
|
end
|
@@ -21,7 +21,7 @@ module RubyCritic
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.supported?
|
24
|
-
git('branch 2>&1') &&
|
24
|
+
git('branch 2>&1') && $CHILD_STATUS.success?
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.to_s
|
@@ -37,7 +37,7 @@ module RubyCritic
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def revision?
|
40
|
-
head_reference &&
|
40
|
+
head_reference && $CHILD_STATUS.success?
|
41
41
|
end
|
42
42
|
|
43
43
|
def head_reference
|
@@ -63,6 +63,7 @@ module RubyCritic
|
|
63
63
|
modified_files = `git diff --name-status #{Config.base_branch} #{Config.feature_branch}`
|
64
64
|
modified_files.split("\n").map do |line|
|
65
65
|
next if line.start_with?('D')
|
66
|
+
|
66
67
|
file_name = line.split("\t")[1]
|
67
68
|
file_name
|
68
69
|
end.compact
|
data/lib/rubycritic/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubycritic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guilherme Simoes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: flay
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
61
|
+
version: 2.6.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 2.
|
68
|
+
version: 2.6.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rainbow
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 5.3.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 5.3.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: ruby_parser
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
117
|
+
version: 0.4.0
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 0.
|
124
|
+
version: 0.4.0
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: virtus
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,82 +140,82 @@ dependencies:
|
|
140
140
|
name: aruba
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0.12'
|
146
143
|
- - ">="
|
147
144
|
- !ruby/object:Gem::Version
|
148
145
|
version: 0.12.0
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0.12'
|
149
149
|
type: :development
|
150
150
|
prerelease: false
|
151
151
|
version_requirements: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- - "~>"
|
154
|
-
- !ruby/object:Gem::Version
|
155
|
-
version: '0.12'
|
156
153
|
- - ">="
|
157
154
|
- !ruby/object:Gem::Version
|
158
155
|
version: 0.12.0
|
156
|
+
- - "~>"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0.12'
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: bundler
|
161
161
|
requirement: !ruby/object:Gem::Requirement
|
162
162
|
requirements:
|
163
|
-
- - "~>"
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '1.3'
|
166
163
|
- - ">="
|
167
164
|
- !ruby/object:Gem::Version
|
168
|
-
version:
|
165
|
+
version: 2.0.0
|
166
|
+
- - "~>"
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '2.0'
|
169
169
|
type: :development
|
170
170
|
prerelease: false
|
171
171
|
version_requirements: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
|
-
- - "~>"
|
174
|
-
- !ruby/object:Gem::Version
|
175
|
-
version: '1.3'
|
176
173
|
- - ">="
|
177
174
|
- !ruby/object:Gem::Version
|
178
|
-
version:
|
175
|
+
version: 2.0.0
|
176
|
+
- - "~>"
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: '2.0'
|
179
179
|
- !ruby/object:Gem::Dependency
|
180
180
|
name: byebug
|
181
181
|
requirement: !ruby/object:Gem::Requirement
|
182
182
|
requirements:
|
183
|
-
- - "~>"
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
version: '9.0'
|
186
183
|
- - ">="
|
187
184
|
- !ruby/object:Gem::Version
|
188
|
-
version: '
|
185
|
+
version: '10.0'
|
186
|
+
- - "~>"
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '11.0'
|
189
189
|
type: :development
|
190
190
|
prerelease: false
|
191
191
|
version_requirements: !ruby/object:Gem::Requirement
|
192
192
|
requirements:
|
193
|
-
- - "~>"
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
version: '9.0'
|
196
193
|
- - ">="
|
197
194
|
- !ruby/object:Gem::Version
|
198
|
-
version: '
|
195
|
+
version: '10.0'
|
196
|
+
- - "~>"
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '11.0'
|
199
199
|
- !ruby/object:Gem::Dependency
|
200
200
|
name: cucumber
|
201
201
|
requirement: !ruby/object:Gem::Requirement
|
202
202
|
requirements:
|
203
|
-
- - "~>"
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: '3.0'
|
206
203
|
- - ">="
|
207
204
|
- !ruby/object:Gem::Version
|
208
205
|
version: 2.2.0
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '3.0'
|
209
209
|
type: :development
|
210
210
|
prerelease: false
|
211
211
|
version_requirements: !ruby/object:Gem::Requirement
|
212
212
|
requirements:
|
213
|
-
- - "~>"
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: '3.0'
|
216
213
|
- - ">="
|
217
214
|
- !ruby/object:Gem::Version
|
218
215
|
version: 2.2.0
|
216
|
+
- - "~>"
|
217
|
+
- !ruby/object:Gem::Version
|
218
|
+
version: '3.0'
|
219
219
|
- !ruby/object:Gem::Dependency
|
220
220
|
name: diff-lcs
|
221
221
|
requirement: !ruby/object:Gem::Requirement
|
@@ -234,110 +234,116 @@ dependencies:
|
|
234
234
|
name: fakefs
|
235
235
|
requirement: !ruby/object:Gem::Requirement
|
236
236
|
requirements:
|
237
|
-
- - "~>"
|
238
|
-
- !ruby/object:Gem::Version
|
239
|
-
version: '0.10'
|
240
237
|
- - ">="
|
241
238
|
- !ruby/object:Gem::Version
|
242
239
|
version: 0.10.0
|
240
|
+
- - "~>"
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '0.10'
|
243
243
|
type: :development
|
244
244
|
prerelease: false
|
245
245
|
version_requirements: !ruby/object:Gem::Requirement
|
246
246
|
requirements:
|
247
|
-
- - "~>"
|
248
|
-
- !ruby/object:Gem::Version
|
249
|
-
version: '0.10'
|
250
247
|
- - ">="
|
251
248
|
- !ruby/object:Gem::Version
|
252
249
|
version: 0.10.0
|
250
|
+
- - "~>"
|
251
|
+
- !ruby/object:Gem::Version
|
252
|
+
version: '0.10'
|
253
253
|
- !ruby/object:Gem::Dependency
|
254
254
|
name: minitest
|
255
255
|
requirement: !ruby/object:Gem::Requirement
|
256
256
|
requirements:
|
257
|
-
- - "~>"
|
258
|
-
- !ruby/object:Gem::Version
|
259
|
-
version: '5.3'
|
260
257
|
- - ">="
|
261
258
|
- !ruby/object:Gem::Version
|
262
259
|
version: 5.3.0
|
260
|
+
- - "~>"
|
261
|
+
- !ruby/object:Gem::Version
|
262
|
+
version: '5.3'
|
263
263
|
type: :development
|
264
264
|
prerelease: false
|
265
265
|
version_requirements: !ruby/object:Gem::Requirement
|
266
266
|
requirements:
|
267
|
-
- - "~>"
|
268
|
-
- !ruby/object:Gem::Version
|
269
|
-
version: '5.3'
|
270
267
|
- - ">="
|
271
268
|
- !ruby/object:Gem::Version
|
272
269
|
version: 5.3.0
|
270
|
+
- - "~>"
|
271
|
+
- !ruby/object:Gem::Version
|
272
|
+
version: '5.3'
|
273
273
|
- !ruby/object:Gem::Dependency
|
274
274
|
name: minitest-around
|
275
275
|
requirement: !ruby/object:Gem::Requirement
|
276
276
|
requirements:
|
277
|
-
- - "
|
277
|
+
- - ">="
|
278
278
|
- !ruby/object:Gem::Version
|
279
279
|
version: 0.4.0
|
280
|
+
- - "~>"
|
281
|
+
- !ruby/object:Gem::Version
|
282
|
+
version: 0.5.0
|
280
283
|
type: :development
|
281
284
|
prerelease: false
|
282
285
|
version_requirements: !ruby/object:Gem::Requirement
|
283
286
|
requirements:
|
284
|
-
- - "
|
287
|
+
- - ">="
|
285
288
|
- !ruby/object:Gem::Version
|
286
289
|
version: 0.4.0
|
290
|
+
- - "~>"
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: 0.5.0
|
287
293
|
- !ruby/object:Gem::Dependency
|
288
294
|
name: mocha
|
289
295
|
requirement: !ruby/object:Gem::Requirement
|
290
296
|
requirements:
|
291
|
-
- - "~>"
|
292
|
-
- !ruby/object:Gem::Version
|
293
|
-
version: '1.1'
|
294
297
|
- - ">="
|
295
298
|
- !ruby/object:Gem::Version
|
296
299
|
version: 1.1.0
|
300
|
+
- - "~>"
|
301
|
+
- !ruby/object:Gem::Version
|
302
|
+
version: '1.1'
|
297
303
|
type: :development
|
298
304
|
prerelease: false
|
299
305
|
version_requirements: !ruby/object:Gem::Requirement
|
300
306
|
requirements:
|
301
|
-
- - "~>"
|
302
|
-
- !ruby/object:Gem::Version
|
303
|
-
version: '1.1'
|
304
307
|
- - ">="
|
305
308
|
- !ruby/object:Gem::Version
|
306
309
|
version: 1.1.0
|
310
|
+
- - "~>"
|
311
|
+
- !ruby/object:Gem::Version
|
312
|
+
version: '1.1'
|
307
313
|
- !ruby/object:Gem::Dependency
|
308
314
|
name: rake
|
309
315
|
requirement: !ruby/object:Gem::Requirement
|
310
316
|
requirements:
|
311
|
-
- - "~>"
|
312
|
-
- !ruby/object:Gem::Version
|
313
|
-
version: '12.0'
|
314
317
|
- - ">="
|
315
318
|
- !ruby/object:Gem::Version
|
316
319
|
version: 11.0.0
|
320
|
+
- - "~>"
|
321
|
+
- !ruby/object:Gem::Version
|
322
|
+
version: '12.0'
|
317
323
|
type: :development
|
318
324
|
prerelease: false
|
319
325
|
version_requirements: !ruby/object:Gem::Requirement
|
320
326
|
requirements:
|
321
|
-
- - "~>"
|
322
|
-
- !ruby/object:Gem::Version
|
323
|
-
version: '12.0'
|
324
327
|
- - ">="
|
325
328
|
- !ruby/object:Gem::Version
|
326
329
|
version: 11.0.0
|
330
|
+
- - "~>"
|
331
|
+
- !ruby/object:Gem::Version
|
332
|
+
version: '12.0'
|
327
333
|
- !ruby/object:Gem::Dependency
|
328
334
|
name: rubocop
|
329
335
|
requirement: !ruby/object:Gem::Requirement
|
330
336
|
requirements:
|
331
337
|
- - "~>"
|
332
338
|
- !ruby/object:Gem::Version
|
333
|
-
version: 0.
|
339
|
+
version: 0.65.0
|
334
340
|
type: :development
|
335
341
|
prerelease: false
|
336
342
|
version_requirements: !ruby/object:Gem::Requirement
|
337
343
|
requirements:
|
338
344
|
- - "~>"
|
339
345
|
- !ruby/object:Gem::Version
|
340
|
-
version: 0.
|
346
|
+
version: 0.65.0
|
341
347
|
description: RubyCritic is a tool that wraps around various static analysis gems to
|
342
348
|
provide a quality report of your Ruby code.
|
343
349
|
email:
|
@@ -374,6 +380,8 @@ files:
|
|
374
380
|
- lib/rubycritic/browser.rb
|
375
381
|
- lib/rubycritic/cli/application.rb
|
376
382
|
- lib/rubycritic/cli/options.rb
|
383
|
+
- lib/rubycritic/cli/options/argv.rb
|
384
|
+
- lib/rubycritic/cli/options/file.rb
|
377
385
|
- lib/rubycritic/colorize.rb
|
378
386
|
- lib/rubycritic/command_factory.rb
|
379
387
|
- lib/rubycritic/commands/base.rb
|
@@ -467,15 +475,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
467
475
|
requirements:
|
468
476
|
- - ">="
|
469
477
|
- !ruby/object:Gem::Version
|
470
|
-
version: 2.
|
478
|
+
version: 2.3.0
|
471
479
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
472
480
|
requirements:
|
473
481
|
- - ">="
|
474
482
|
- !ruby/object:Gem::Version
|
475
483
|
version: '0'
|
476
484
|
requirements: []
|
477
|
-
|
478
|
-
rubygems_version: 2.7.6
|
485
|
+
rubygems_version: 3.0.2
|
479
486
|
signing_key:
|
480
487
|
specification_version: 4
|
481
488
|
summary: RubyCritic is a Ruby code quality reporter
|