slimcop 0.11.0 → 0.12.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 +6 -1
- data/Gemfile.lock +1 -1
- data/lib/slimcop/cli.rb +7 -47
- data/lib/slimcop/runner.rb +115 -0
- data/lib/slimcop/version.rb +1 -1
- data/lib/slimcop.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd949a834535638a785282759fe46fb6fd368282d3030d17a113fa5253755bd7
|
4
|
+
data.tar.gz: 70be88bc581d8ba538879cffabcef3c58e21bbddda4ce8c7812c32e465ab5108
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 377b550717a43db56aefd5c66eb78622e2945c93436a45de5c50b8c9a61312a9d62d3e37d25108238788a5c08e0a4964dcc0401bd34531a620f02e62917091d3
|
7
|
+
data.tar.gz: db3cb5e5f9bf3ea5cf56d0a3e15bd430907721b2d33dd7d0e59bb2bd65e2d1fe78d8e51aee8ada603c8b92142694dc415921ce16e7e08e70633f918ef8ea830f
|
data/CHANGELOG.md
CHANGED
@@ -2,11 +2,16 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## 0.12.0 - 2022-01-12
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
- Keep trying auto-correction up to 7 times until no offense detected.
|
10
|
+
|
5
11
|
## 0.11.0 - 2022-01-10
|
6
12
|
|
7
13
|
### Changed
|
8
14
|
|
9
|
-
- Use :offset instead of :begin_ at RubyExtractor.
|
10
15
|
- Detect offenses from code that containing `if`, `unless`, `do`, etc.
|
11
16
|
|
12
17
|
## 0.10.0 - 2022-01-06
|
data/Gemfile.lock
CHANGED
data/lib/slimcop/cli.rb
CHANGED
@@ -15,58 +15,18 @@ module Slimcop
|
|
15
15
|
rubocop_config = RuboCopConfigGenerator.new(additional_config_file_path: options[:additional_config_file_path]).call
|
16
16
|
file_paths = PathFinder.new(patterns: @argv).call
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
rubocop_config: rubocop_config,
|
26
|
-
source: source
|
27
|
-
)
|
28
|
-
if options[:auto_correct]
|
29
|
-
correct(
|
30
|
-
file_path: file_path,
|
31
|
-
offenses: offenses_,
|
32
|
-
source: source
|
33
|
-
)
|
34
|
-
end
|
35
|
-
formatter.file_finished(file_path, offenses_)
|
36
|
-
offenses_
|
37
|
-
end
|
38
|
-
formatter.finished(file_paths)
|
18
|
+
offenses = Runner.new(
|
19
|
+
auto_correct: options[:auto_correct],
|
20
|
+
file_paths: file_paths,
|
21
|
+
formatter: formatter,
|
22
|
+
rubocop_config: rubocop_config
|
23
|
+
).call
|
24
|
+
|
39
25
|
exit(offenses.empty? ? 0 : 1)
|
40
26
|
end
|
41
27
|
|
42
28
|
private
|
43
29
|
|
44
|
-
# @param [String] file_path
|
45
|
-
# @param [Array<Slimcop::Offense>] offenses
|
46
|
-
# @param [String] source
|
47
|
-
def correct(file_path:, offenses:, source:)
|
48
|
-
rewritten_source = SlimCorrector.new(
|
49
|
-
file_path: file_path,
|
50
|
-
offenses: offenses,
|
51
|
-
source: source
|
52
|
-
).call
|
53
|
-
::File.write(file_path, rewritten_source)
|
54
|
-
end
|
55
|
-
|
56
|
-
# @param [Boolean] auto_correct
|
57
|
-
# @param [String] file_path
|
58
|
-
# @param [String] rubocop_config
|
59
|
-
# @param [String] source
|
60
|
-
# @return [Array<Slimcop::Offense>]
|
61
|
-
def investigate(auto_correct:, file_path:, rubocop_config:, source:)
|
62
|
-
SlimOffenseCollector.new(
|
63
|
-
auto_correct: auto_correct,
|
64
|
-
file_path: file_path,
|
65
|
-
rubocop_config: rubocop_config,
|
66
|
-
source: source
|
67
|
-
).call
|
68
|
-
end
|
69
|
-
|
70
30
|
# @return [Hash]
|
71
31
|
def parse!
|
72
32
|
options = {}
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slimcop
|
4
|
+
# Run investigation and auto-correcttion.
|
5
|
+
class Runner
|
6
|
+
# @param [Boolean] auto_correct
|
7
|
+
# @param [Array<String>] file_paths
|
8
|
+
# @param [Object] formatter
|
9
|
+
# @param [RuboCop::Config] rubocop_config
|
10
|
+
def initialize(
|
11
|
+
auto_correct:,
|
12
|
+
file_paths:,
|
13
|
+
formatter:,
|
14
|
+
rubocop_config:
|
15
|
+
)
|
16
|
+
@auto_correct = auto_correct
|
17
|
+
@file_paths = file_paths
|
18
|
+
@formatter = formatter
|
19
|
+
@rubocop_config = rubocop_config
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Array<RuboCop::Cop::Offense>]
|
23
|
+
def call
|
24
|
+
on_started
|
25
|
+
offenses = investigate_and_correct
|
26
|
+
on_finished
|
27
|
+
offenses
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# @param [String] file_path
|
33
|
+
# @param [Array<Slimcop::Offense>] offenses
|
34
|
+
# @param [String] source
|
35
|
+
def correct(file_path:, offenses:, source:)
|
36
|
+
rewritten_source = SlimCorrector.new(
|
37
|
+
file_path: file_path,
|
38
|
+
offenses: offenses,
|
39
|
+
source: source
|
40
|
+
).call
|
41
|
+
::File.write(file_path, rewritten_source)
|
42
|
+
end
|
43
|
+
|
44
|
+
# @param [Boolean] auto_correct
|
45
|
+
# @param [String] file_path
|
46
|
+
# @param [String] rubocop_config
|
47
|
+
# @param [String] source
|
48
|
+
# @return [Array<Slimcop::Offense>]
|
49
|
+
def investigate(auto_correct:, file_path:, rubocop_config:, source:)
|
50
|
+
SlimOffenseCollector.new(
|
51
|
+
auto_correct: auto_correct,
|
52
|
+
file_path: file_path,
|
53
|
+
rubocop_config: rubocop_config,
|
54
|
+
source: source
|
55
|
+
).call
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Array<RuboCop::Cop::Offense>]
|
59
|
+
def investigate_and_correct
|
60
|
+
@file_paths.flat_map do |file_path|
|
61
|
+
offenses_per_file = []
|
62
|
+
max_trials_count.times do
|
63
|
+
on_file_started(file_path)
|
64
|
+
source = ::File.read(file_path)
|
65
|
+
offenses = investigate(
|
66
|
+
auto_correct: @auto_correct,
|
67
|
+
file_path: file_path,
|
68
|
+
rubocop_config: @rubocop_config,
|
69
|
+
source: source
|
70
|
+
)
|
71
|
+
offenses_per_file += offenses
|
72
|
+
break if offenses.empty?
|
73
|
+
|
74
|
+
next unless @auto_correct
|
75
|
+
|
76
|
+
correct(
|
77
|
+
file_path: file_path,
|
78
|
+
offenses: offenses,
|
79
|
+
source: source
|
80
|
+
)
|
81
|
+
end
|
82
|
+
on_file_finished(file_path, offenses_per_file)
|
83
|
+
offenses_per_file
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [Integer]
|
88
|
+
def max_trials_count
|
89
|
+
if @auto_correct
|
90
|
+
7 # What a heuristic number.
|
91
|
+
else
|
92
|
+
1
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def on_started
|
97
|
+
@formatter.started(@file_paths)
|
98
|
+
end
|
99
|
+
|
100
|
+
# @param [String] file_path
|
101
|
+
def on_file_started(file_path)
|
102
|
+
@formatter.file_started(file_path, {})
|
103
|
+
end
|
104
|
+
|
105
|
+
# @param [String] file_path
|
106
|
+
# @param [Array<RuboCop::Cop::Offenses]
|
107
|
+
def on_file_finished(file_path, offenses)
|
108
|
+
@formatter.file_finished(file_path, offenses)
|
109
|
+
end
|
110
|
+
|
111
|
+
def on_finished
|
112
|
+
@formatter.finished(@file_paths)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
data/lib/slimcop/version.rb
CHANGED
data/lib/slimcop.rb
CHANGED
@@ -10,6 +10,7 @@ module Slimcop
|
|
10
10
|
autoload :RubyClipper, 'slimcop/ruby_clipper'
|
11
11
|
autoload :RubyExtractor, 'slimcop/ruby_extractor'
|
12
12
|
autoload :RubyOffenseCollector, 'slimcop/ruby_offense_collector'
|
13
|
+
autoload :Runner, 'slimcop/runner'
|
13
14
|
autoload :SlimCorrector, 'slimcop/slim_corrector'
|
14
15
|
autoload :SlimOffenseCollector, 'slimcop/slim_offense_collector'
|
15
16
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slimcop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.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-01-
|
11
|
+
date: 2022-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rainbow
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- lib/slimcop/ruby_clipper.rb
|
82
82
|
- lib/slimcop/ruby_extractor.rb
|
83
83
|
- lib/slimcop/ruby_offense_collector.rb
|
84
|
+
- lib/slimcop/runner.rb
|
84
85
|
- lib/slimcop/slim_corrector.rb
|
85
86
|
- lib/slimcop/slim_offense_collector.rb
|
86
87
|
- lib/slimcop/version.rb
|