rubocop_todo_corrector 0.8.0 → 0.11.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 +18 -0
- data/Gemfile.lock +1 -1
- data/README.md +8 -80
- data/lib/rubocop_todo_corrector/cli.rb +14 -0
- data/lib/rubocop_todo_corrector/commands/generate.rb +1 -25
- data/lib/rubocop_todo_corrector/commands/ignore.rb +35 -0
- data/lib/rubocop_todo_corrector/commands/pick.rb +25 -5
- data/lib/rubocop_todo_corrector/commands.rb +1 -0
- data/lib/rubocop_todo_corrector/ignore_file.rb +50 -0
- data/lib/rubocop_todo_corrector/rubocop_todo_parser.rb +1 -11
- data/lib/rubocop_todo_corrector/version.rb +1 -1
- data/lib/rubocop_todo_corrector.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a5761497cb2e78d59de2fed8ce2abc7edd84bc318f6d70483ea1f4f9363a4a4
|
4
|
+
data.tar.gz: 1f310cfb7f1479f454914e3cbe1e40b065851c4e6978b484f2d617cd69df7d6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 227d12206f9b090ba98cae89ac3e960c1f6e1d61a8bcffe501c093ccffca1dd68b7121659977bc7835f1270994c3f63914f0e14bcd5cd040b66d699926339620
|
7
|
+
data.tar.gz: d88f4a1733519d7e0f5659ae62474bd0c37c2b06d0284b64fdd94d3a210ac99655a666ce3ab8bdb67cce6118c7f57edcaba7f83cb5de13e52a30523c4b9957b7
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,24 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## 0.11.0 - 2022-07-29
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
- Use `rubocop --regenerate-todo` option on `generate` command.
|
10
|
+
|
11
|
+
## 0.10.0 - 2022-07-27
|
12
|
+
|
13
|
+
### Added
|
14
|
+
|
15
|
+
- Add `ignore` command.
|
16
|
+
|
17
|
+
## 0.9.0 - 2022-07-27
|
18
|
+
|
19
|
+
### Added
|
20
|
+
|
21
|
+
- Add `.rubocop_todo_corrector_ignore` file support.
|
22
|
+
|
5
23
|
## 0.8.0 - 2022-07-23
|
6
24
|
|
7
25
|
### Added
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -26,96 +26,24 @@ $ rubocop_todo_corrector
|
|
26
26
|
Commands:
|
27
27
|
rubocop_todo_corrector bundle # Run `bundle install` to install RuboCop related gems.
|
28
28
|
rubocop_todo_corrector clean # Remove temporary files.
|
29
|
-
rubocop_todo_corrector correct # Run `rubocop --auto-correct-all`.
|
29
|
+
rubocop_todo_corrector correct # Run `rubocop --auto-correct(-all)`.
|
30
30
|
rubocop_todo_corrector describe --cop-name=COP_NAME # Output Markdown description for specified cop.
|
31
31
|
rubocop_todo_corrector generate # Run `rubocop --auto-gen-config` to generate .rubocop_todo.yml.
|
32
32
|
rubocop_todo_corrector help [COMMAND] # Describe available commands or one specific command
|
33
|
+
rubocop_todo_corrector ignore --cop-name=COP_NAME # Ignore specified cop by appending it to ignore file.
|
33
34
|
rubocop_todo_corrector pick # Output an auto-correctable Cop from .rubocop_todo.yml.
|
34
35
|
rubocop_todo_corrector remove --cop-name=COP_NAME # Remove section with specified cop name from .rubocop_todo.yml.
|
35
36
|
```
|
36
37
|
|
37
|
-
###
|
38
|
+
### .rubocop_todo_corrector_ignore
|
38
39
|
|
39
|
-
|
40
|
-
$ rubocop_todo_corrector help bundle
|
41
|
-
Usage:
|
42
|
-
rubocop_todo_corrector bundle
|
43
|
-
|
44
|
-
Run `bundle install` to install RuboCop related gems.
|
45
|
-
```
|
46
|
-
|
47
|
-
### Clean
|
48
|
-
|
49
|
-
```console
|
50
|
-
$ rubocop_todo_corrector help clean
|
51
|
-
Usage:
|
52
|
-
rubocop_todo_corrector clean
|
53
|
-
|
54
|
-
Remove temporary files.
|
55
|
-
```
|
56
|
-
|
57
|
-
### correct
|
58
|
-
|
59
|
-
```console
|
60
|
-
Usage:
|
61
|
-
rubocop_todo_corrector correct
|
62
|
-
|
63
|
-
Options:
|
64
|
-
[--only-safe], [--no-only-safe]
|
65
|
-
# Default: true
|
66
|
-
|
67
|
-
Run `rubocop --auto-correct(-all)`.
|
68
|
-
```
|
69
|
-
|
70
|
-
### describe
|
71
|
-
|
72
|
-
```console
|
73
|
-
$ rubocop_todo_corrector help describe
|
74
|
-
Usage:
|
75
|
-
rubocop_todo_corrector describe --cop-name=COP_NAME
|
76
|
-
|
77
|
-
Options:
|
78
|
-
--cop-name=COP_NAME
|
79
|
-
|
80
|
-
Output Markdown description for specified cop.
|
81
|
-
```
|
40
|
+
By specifying cop names in `.rubocop_todo_corrector_ignore`, you can exclude them from the selection.
|
82
41
|
|
83
|
-
### generate
|
84
|
-
|
85
|
-
```console
|
86
|
-
$ rubocop_todo_corrector help generate
|
87
|
-
Usage:
|
88
|
-
rubocop_todo_corrector generate
|
89
|
-
|
90
|
-
Run `rubocop --auto-gen-config` to generate .rubocop_todo.yml.
|
91
42
|
```
|
43
|
+
Style/StringConcatenation
|
92
44
|
|
93
|
-
|
94
|
-
|
95
|
-
```console
|
96
|
-
$ rubocop_todo_corrector help pick
|
97
|
-
Usage:
|
98
|
-
rubocop_todo_corrector pick
|
99
|
-
|
100
|
-
Options:
|
101
|
-
[--mode=MODE]
|
102
|
-
# Default: random
|
103
|
-
# Possible values: first, last, least_occurred, most_occurred, random
|
104
|
-
[--only-safe], [--no-only-safe]
|
105
|
-
# Default: true
|
106
|
-
|
107
|
-
Output an auto-correctable Cop from .rubocop_todo.yml.
|
45
|
+
# Comment line is available like this.
|
46
|
+
Style/StringLiterals
|
108
47
|
```
|
109
48
|
|
110
|
-
|
111
|
-
|
112
|
-
```console
|
113
|
-
$ rubocop_todo_corrector help remove
|
114
|
-
Usage:
|
115
|
-
rubocop_todo_corrector remove --cop-name=COP_NAME
|
116
|
-
|
117
|
-
Options:
|
118
|
-
--cop-name=COP_NAME
|
119
|
-
|
120
|
-
Remove section with specified cop name from .rubocop_todo.yml.
|
121
|
-
```
|
49
|
+
This is useful, for example, when you find a cop that cannot be autocorrected.
|
@@ -55,6 +55,19 @@ module RubocopTodoCorrector
|
|
55
55
|
)
|
56
56
|
end
|
57
57
|
|
58
|
+
desc 'ignore', 'Ignore specified cop by appending it to ignore file.'
|
59
|
+
option(
|
60
|
+
:cop_name,
|
61
|
+
type: :string,
|
62
|
+
required: true
|
63
|
+
)
|
64
|
+
def ignore
|
65
|
+
Commands::Ignore.call(
|
66
|
+
ignore_file_path: '.rubocop_todo_corrector_ignore',
|
67
|
+
cop_name: options[:cop_name]
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
58
71
|
desc 'pick', 'Output an auto-correctable Cop from .rubocop_todo.yml.'
|
59
72
|
option(
|
60
73
|
:mode,
|
@@ -75,6 +88,7 @@ module RubocopTodoCorrector
|
|
75
88
|
)
|
76
89
|
def pick
|
77
90
|
Commands::Pick.call(
|
91
|
+
ignore_file_path: '.rubocop_todo_corrector_ignore',
|
78
92
|
mode: options[:mode],
|
79
93
|
only_safe: options[:only_safe],
|
80
94
|
rubocop_todo_path: '.rubocop_todo.yml'
|
@@ -30,33 +30,9 @@ module RubocopTodoCorrector
|
|
30
30
|
def call
|
31
31
|
::Kernel.system(
|
32
32
|
{ 'BUNDLE_GEMFILE' => @temporary_gemfile_path },
|
33
|
-
|
33
|
+
'bundle exec rubocop --regenerate-todo'
|
34
34
|
)
|
35
35
|
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
# @return [String]
|
40
|
-
def rubocop_command
|
41
|
-
rubocop_command_from_todo || 'rubocop --auto-gen-config'
|
42
|
-
end
|
43
|
-
|
44
|
-
# @return [String, nil]
|
45
|
-
def rubocop_command_from_todo
|
46
|
-
return unless rubocop_todo_pathname.exist?
|
47
|
-
|
48
|
-
RubocopTodoParser.call(content: rubocop_todo_content)[:previous_rubocop_command]
|
49
|
-
end
|
50
|
-
|
51
|
-
# @return [String]
|
52
|
-
def rubocop_todo_content
|
53
|
-
rubocop_todo_pathname.read
|
54
|
-
end
|
55
|
-
|
56
|
-
# @return [Pathname]
|
57
|
-
def rubocop_todo_pathname
|
58
|
-
@rubocop_todo_pathname ||= ::Pathname.new(@rubocop_todo_path)
|
59
|
-
end
|
60
36
|
end
|
61
37
|
end
|
62
38
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
module RubocopTodoCorrector
|
6
|
+
module Commands
|
7
|
+
class Ignore
|
8
|
+
class << self
|
9
|
+
# @param [String] cop_name
|
10
|
+
# @param [String] ignore_file_path
|
11
|
+
def call(
|
12
|
+
cop_name:,
|
13
|
+
ignore_file_path:
|
14
|
+
)
|
15
|
+
new(
|
16
|
+
cop_name:,
|
17
|
+
ignore_file_path:
|
18
|
+
).call
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(
|
23
|
+
cop_name:,
|
24
|
+
ignore_file_path:
|
25
|
+
)
|
26
|
+
@cop_name = cop_name
|
27
|
+
@ignore_file_path = ignore_file_path
|
28
|
+
end
|
29
|
+
|
30
|
+
def call
|
31
|
+
IgnoreFile.new(path: @ignore_file_path).append_cop_name(@cop_name)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,20 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'pathname'
|
4
|
+
require 'set'
|
4
5
|
|
5
6
|
module RubocopTodoCorrector
|
6
7
|
module Commands
|
7
8
|
class Pick
|
8
9
|
class << self
|
10
|
+
# @param [String] ignore_file_path
|
9
11
|
# @param [String] mode
|
10
12
|
# @param [Boolean] only_safe
|
11
13
|
# @param [String] rubocop_todo_path
|
12
14
|
def call(
|
15
|
+
ignore_file_path:,
|
13
16
|
mode:,
|
14
17
|
only_safe:,
|
15
18
|
rubocop_todo_path:
|
16
19
|
)
|
17
20
|
new(
|
21
|
+
ignore_file_path:,
|
18
22
|
mode:,
|
19
23
|
only_safe:,
|
20
24
|
rubocop_todo_path:
|
@@ -23,10 +27,12 @@ module RubocopTodoCorrector
|
|
23
27
|
end
|
24
28
|
|
25
29
|
def initialize(
|
30
|
+
ignore_file_path:,
|
26
31
|
mode:,
|
27
32
|
only_safe:,
|
28
33
|
rubocop_todo_path:
|
29
34
|
)
|
35
|
+
@ignore_file_path = ignore_file_path
|
30
36
|
@mode = mode
|
31
37
|
@only_safe = only_safe
|
32
38
|
@rubocop_todo_path = rubocop_todo_path
|
@@ -59,23 +65,37 @@ module RubocopTodoCorrector
|
|
59
65
|
raise "#{rubocop_todo_pathname.to_s.inspect} does not exist." unless rubocop_todo_pathname.exist?
|
60
66
|
end
|
61
67
|
|
68
|
+
# @return [Set<String>]
|
69
|
+
def ignored_cop_names
|
70
|
+
@ignored_cop_names ||= IgnoreFile.new(
|
71
|
+
path: @ignore_file_path
|
72
|
+
).ignored_cop_names.to_set
|
73
|
+
end
|
74
|
+
|
75
|
+
# @return [Array<Hash>]
|
76
|
+
def pickable_cops
|
77
|
+
auto_correctable_cops.reject do |cop|
|
78
|
+
ignored_cop_names.include?(cop[:name])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
62
82
|
# @return [Hash, nil]
|
63
83
|
def picked_cop
|
64
84
|
case @mode
|
65
85
|
when 'first'
|
66
|
-
|
86
|
+
pickable_cops.first
|
67
87
|
when 'last'
|
68
|
-
|
88
|
+
pickable_cops.last
|
69
89
|
when 'least_occurred'
|
70
|
-
|
90
|
+
pickable_cops.min_by do |cop|
|
71
91
|
cop[:offenses_count]
|
72
92
|
end
|
73
93
|
when 'most_occurred'
|
74
|
-
|
94
|
+
pickable_cops.max_by do |cop|
|
75
95
|
cop[:offenses_count]
|
76
96
|
end
|
77
97
|
else
|
78
|
-
|
98
|
+
pickable_cops.sample
|
79
99
|
end
|
80
100
|
end
|
81
101
|
|
@@ -7,6 +7,7 @@ module RubocopTodoCorrector
|
|
7
7
|
autoload :Correct, 'rubocop_todo_corrector/commands/correct'
|
8
8
|
autoload :Describe, 'rubocop_todo_corrector/commands/describe'
|
9
9
|
autoload :Generate, 'rubocop_todo_corrector/commands/generate'
|
10
|
+
autoload :Ignore, 'rubocop_todo_corrector/commands/ignore'
|
10
11
|
autoload :Pick, 'rubocop_todo_corrector/commands/pick'
|
11
12
|
autoload :Remove, 'rubocop_todo_corrector/commands/remove'
|
12
13
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
module RubocopTodoCorrector
|
6
|
+
class IgnoreFile
|
7
|
+
# @param [String] path
|
8
|
+
def initialize(path:)
|
9
|
+
@path = path
|
10
|
+
end
|
11
|
+
|
12
|
+
# @param [String] cop_name
|
13
|
+
def append_cop_name(cop_name)
|
14
|
+
return if include?(cop_name)
|
15
|
+
|
16
|
+
appendix = "#{cop_name}\n"
|
17
|
+
appendix.prepend("\n") if !content.empty? && !content.end_with?("\n")
|
18
|
+
pathname.write("#{content}#{appendix}")
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Array<String>]
|
22
|
+
def ignored_cop_names
|
23
|
+
content.split("\n").map do |line|
|
24
|
+
line.sub(/#.+/, '').strip
|
25
|
+
end.reject(&:empty?)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# @return [String]
|
31
|
+
def content
|
32
|
+
if pathname.exist?
|
33
|
+
pathname.read
|
34
|
+
else
|
35
|
+
''
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# @param [String] cop_name
|
40
|
+
# @return [Boolean]
|
41
|
+
def include?(cop_name)
|
42
|
+
ignored_cop_names.include?(cop_name)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Pathname]
|
46
|
+
def pathname
|
47
|
+
@pathname ||= ::Pathname.new(@path)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -27,10 +27,7 @@ module RubocopTodoCorrector
|
|
27
27
|
|
28
28
|
# @return [Hash]
|
29
29
|
def call
|
30
|
-
{
|
31
|
-
cops:,
|
32
|
-
previous_rubocop_command:
|
33
|
-
}
|
30
|
+
{ cops: }
|
34
31
|
end
|
35
32
|
|
36
33
|
private
|
@@ -42,13 +39,6 @@ module RubocopTodoCorrector
|
|
42
39
|
end
|
43
40
|
end
|
44
41
|
|
45
|
-
def previous_rubocop_command
|
46
|
-
@content[
|
47
|
-
/`(.+)`/,
|
48
|
-
1
|
49
|
-
]
|
50
|
-
end
|
51
|
-
|
52
42
|
# @return [Array<String>]
|
53
43
|
def cop_sections
|
54
44
|
@content.split("\n\n").grep(COP_NAME_LINE_REGEXP)
|
@@ -11,6 +11,7 @@ module RubocopTodoCorrector
|
|
11
11
|
autoload :DescriptionRenderer, 'rubocop_todo_corrector/description_renderer'
|
12
12
|
autoload :GemNamesDetector, 'rubocop_todo_corrector/gem_names_detector'
|
13
13
|
autoload :GemVersionDetector, 'rubocop_todo_corrector/gem_version_detector'
|
14
|
+
autoload :IgnoreFile, 'rubocop_todo_corrector/ignore_file'
|
14
15
|
autoload :RubocopTodoParser, 'rubocop_todo_corrector/rubocop_todo_parser'
|
15
16
|
autoload :RubocopTodoSectionParser, 'rubocop_todo_corrector/rubocop_todo_section_parser'
|
16
17
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop_todo_corrector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-07-
|
11
|
+
date: 2022-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/rubocop_todo_corrector/commands/correct.rb
|
80
80
|
- lib/rubocop_todo_corrector/commands/describe.rb
|
81
81
|
- lib/rubocop_todo_corrector/commands/generate.rb
|
82
|
+
- lib/rubocop_todo_corrector/commands/ignore.rb
|
82
83
|
- lib/rubocop_todo_corrector/commands/pick.rb
|
83
84
|
- lib/rubocop_todo_corrector/commands/remove.rb
|
84
85
|
- lib/rubocop_todo_corrector/cop_document_parser.rb
|
@@ -86,6 +87,7 @@ files:
|
|
86
87
|
- lib/rubocop_todo_corrector/description_renderer.rb
|
87
88
|
- lib/rubocop_todo_corrector/gem_names_detector.rb
|
88
89
|
- lib/rubocop_todo_corrector/gem_version_detector.rb
|
90
|
+
- lib/rubocop_todo_corrector/ignore_file.rb
|
89
91
|
- lib/rubocop_todo_corrector/rubocop_todo_parser.rb
|
90
92
|
- lib/rubocop_todo_corrector/rubocop_todo_section_parser.rb
|
91
93
|
- lib/rubocop_todo_corrector/version.rb
|