templatecop 0.3.0 → 0.4.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 +13 -0
- data/lib/templatecop/cli.rb +7 -2
- data/lib/templatecop/path_finder.rb +36 -9
- data/lib/templatecop/ruby_offense_collector.rb +32 -6
- data/lib/templatecop/runner.rb +23 -11
- data/lib/templatecop/template_offense_collector.rb +8 -4
- data/lib/templatecop/version.rb +1 -1
- metadata +7 -8
- data/Gemfile.lock +0 -72
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cec282db3c407d288d9bba6ac5122424c5f52a14096046fb469918821bfbdbc4
|
4
|
+
data.tar.gz: f977c7d4134cd2fa82a2c6b35cba52a6cfaf58eb5a614f58f41224c25abe1b43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25b20e224432836b15eec614aee67fa722ce3dca5a61642f8bba5b52607890db83b230d993a0ed48665427f9eb53a1f7f44a893a0b398fd868e56f0c24516903
|
7
|
+
data.tar.gz: 82b810eae2b1ed05b1d461f249fac065c2129d6f041561926919d8d0fd6d54760a958ea4b8f727c637d57ceba6742abbcf6a256d6cb1fed0219834687e983278
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,19 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## 0.4.0 - 2023-01-10
|
6
|
+
|
7
|
+
### Added
|
8
|
+
|
9
|
+
- Add CLI switches for debug mode.
|
10
|
+
- Add directory support for PathFinder.
|
11
|
+
|
12
|
+
### Fixed
|
13
|
+
|
14
|
+
- Add compatibility for RuboCop v1.38.0 and above.
|
15
|
+
- Display correct label when autocorrecting.
|
16
|
+
- Respect AllCops Exclude pattern.
|
17
|
+
|
5
18
|
## 0.3.0 - 2022-03-14
|
6
19
|
|
7
20
|
### Added
|
data/lib/templatecop/cli.rb
CHANGED
@@ -65,11 +65,13 @@ module Templatecop
|
|
65
65
|
).call
|
66
66
|
file_paths = PathFinder.new(
|
67
67
|
default_patterns: @default_path_patterns,
|
68
|
+
exclude_patterns: rubocop_config.for_all_cops['Exclude'],
|
68
69
|
patterns: @argv
|
69
70
|
).call
|
70
71
|
|
71
72
|
offenses = Runner.new(
|
72
|
-
|
73
|
+
autocorrect: options[:autocorrect],
|
74
|
+
debug: options[:debug],
|
73
75
|
file_paths: file_paths,
|
74
76
|
formatter: formatter,
|
75
77
|
rubocop_config: rubocop_config,
|
@@ -88,7 +90,7 @@ module Templatecop
|
|
88
90
|
parser.banner = "Usage: #{@executable_name} [options] [file1, file2, ...]"
|
89
91
|
parser.version = VERSION
|
90
92
|
parser.on('-a', '--auto-correct', 'Auto-correct offenses.') do
|
91
|
-
options[:
|
93
|
+
options[:autocorrect] = true
|
92
94
|
end
|
93
95
|
parser.on('-c', '--config=', "Specify configuration file. (default: #{@default_configuration_path} or .rubocop.yml)") do |file_path|
|
94
96
|
options[:forced_configuration_path] = file_path
|
@@ -96,6 +98,9 @@ module Templatecop
|
|
96
98
|
parser.on('--[no-]color', 'Force color output on or off.') do |value|
|
97
99
|
options[:color] = value
|
98
100
|
end
|
101
|
+
parser.on('-d', '--debug', 'Display debug info.') do |value|
|
102
|
+
options[:debug] = value
|
103
|
+
end
|
99
104
|
parser.parse!(@argv)
|
100
105
|
options
|
101
106
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'pathname'
|
4
|
+
require 'set'
|
4
5
|
|
5
6
|
module Templatecop
|
6
7
|
# Collect file paths from given path patterns.
|
@@ -9,29 +10,55 @@ module Templatecop
|
|
9
10
|
# @param [Array<String>] patterns Patterns normally given as CLI arguments (e.g. `["app/views/**/*.html.template"]`).
|
10
11
|
def initialize(
|
11
12
|
default_patterns:,
|
13
|
+
exclude_patterns:,
|
12
14
|
patterns:
|
13
15
|
)
|
14
16
|
@default_patterns = default_patterns
|
17
|
+
@exclude_patterns = exclude_patterns || []
|
15
18
|
@patterns = patterns
|
16
19
|
end
|
17
20
|
|
18
21
|
# @return [Array<String>]
|
19
22
|
def call
|
20
|
-
patterns
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
end.uniq.sort
|
23
|
+
matching_paths(patterns) do |path|
|
24
|
+
!excluded?(path)
|
25
|
+
end.sort
|
25
26
|
end
|
26
27
|
|
27
28
|
private
|
28
29
|
|
30
|
+
# @return [Set<String>]
|
31
|
+
def excluded
|
32
|
+
@excluded ||= matching_paths(@exclude_patterns)
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [TrueClass,FalseClass]
|
36
|
+
def excluded?(path)
|
37
|
+
excluded.include?(path)
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Set<String>]
|
41
|
+
def matching_paths(patterns, &block)
|
42
|
+
patterns.each_with_object(Set.new) do |pattern, set|
|
43
|
+
::Pathname.glob(pattern) do |pathname|
|
44
|
+
next unless pathname.file?
|
45
|
+
|
46
|
+
path = pathname.expand_path.to_s
|
47
|
+
set.add(path) if block.nil? || block.call(path)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
29
52
|
# @return [Array<String>]
|
30
53
|
def patterns
|
31
|
-
if @patterns.empty?
|
32
|
-
|
33
|
-
|
34
|
-
|
54
|
+
return @default_patterns if @patterns.empty?
|
55
|
+
|
56
|
+
@patterns.map do |pattern|
|
57
|
+
next pattern unless File.directory?(pattern)
|
58
|
+
|
59
|
+
@default_patterns.map do |default|
|
60
|
+
File.join(pattern, default)
|
61
|
+
end.flatten
|
35
62
|
end
|
36
63
|
end
|
37
64
|
end
|
@@ -5,12 +5,20 @@ require 'rubocop'
|
|
5
5
|
module Templatecop
|
6
6
|
# Collect RuboCop offenses from Ruby code.
|
7
7
|
class RubyOffenseCollector
|
8
|
-
# @param [Boolean]
|
8
|
+
# @param [Boolean] autocorrect
|
9
|
+
# @param [Boolean] debug
|
9
10
|
# @param [String] file_path
|
10
11
|
# @param [RuboCop::Config] rubocop_config
|
11
12
|
# @param [String] source
|
12
|
-
def initialize(
|
13
|
-
|
13
|
+
def initialize(
|
14
|
+
autocorrect:,
|
15
|
+
file_path:,
|
16
|
+
rubocop_config:,
|
17
|
+
source:,
|
18
|
+
debug: false
|
19
|
+
)
|
20
|
+
@autocorrect = autocorrect
|
21
|
+
@debug = debug
|
14
22
|
@file_path = file_path
|
15
23
|
@rubocop_config = rubocop_config
|
16
24
|
@source = source
|
@@ -26,21 +34,39 @@ module Templatecop
|
|
26
34
|
|
27
35
|
private
|
28
36
|
|
37
|
+
# @return [RuboCop::Cop::Registry]
|
38
|
+
def registry
|
39
|
+
@registry ||= begin
|
40
|
+
all_cops = if ::RuboCop::Cop::Registry.respond_to?(:all)
|
41
|
+
::RuboCop::Cop::Registry.all
|
42
|
+
else
|
43
|
+
::RuboCop::Cop::Cop.all
|
44
|
+
end
|
45
|
+
|
46
|
+
::RuboCop::Cop::Registry.new(all_cops)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
29
50
|
# @return [RuboCop::ProcessedSource]
|
30
51
|
def rubocop_processed_source
|
31
52
|
@rubocop_processed_source ||= ::RuboCop::ProcessedSource.new(
|
32
53
|
@source,
|
33
54
|
@rubocop_config.target_ruby_version,
|
34
55
|
@file_path
|
35
|
-
)
|
56
|
+
).tap do |processed_source|
|
57
|
+
processed_source.config = @rubocop_config if processed_source.respond_to?(:config)
|
58
|
+
processed_source.registry = registry if processed_source.respond_to?(:registry)
|
59
|
+
end
|
36
60
|
end
|
37
61
|
|
38
62
|
# @return [RuboCop::Cop::Team]
|
39
63
|
def rubocop_team
|
40
64
|
::RuboCop::Cop::Team.new(
|
41
|
-
|
65
|
+
registry,
|
42
66
|
@rubocop_config,
|
43
|
-
auto_correct: @
|
67
|
+
auto_correct: @autocorrect, # DEPRECATED
|
68
|
+
autocorrect: @autocorrect,
|
69
|
+
debug: @debug,
|
44
70
|
display_cop_names: true,
|
45
71
|
extra_details: true,
|
46
72
|
stdin: ''
|
data/lib/templatecop/runner.rb
CHANGED
@@ -4,21 +4,24 @@ require 'parallel'
|
|
4
4
|
require 'stringio'
|
5
5
|
|
6
6
|
module Templatecop
|
7
|
-
# Run investigation and auto-
|
7
|
+
# Run investigation and auto-correction.
|
8
8
|
class Runner
|
9
|
-
# @param [Boolean]
|
9
|
+
# @param [Boolean] autocorrect
|
10
|
+
# @param [Boolean] debug
|
10
11
|
# @param [Array<String>] file_paths
|
11
12
|
# @param [Object] formatter
|
12
13
|
# @param [RuboCop::Config] rubocop_config
|
13
14
|
# @param [#call] ruby_extractor
|
14
15
|
def initialize(
|
15
|
-
|
16
|
+
autocorrect:,
|
16
17
|
file_paths:,
|
17
18
|
formatter:,
|
18
19
|
rubocop_config:,
|
19
|
-
ruby_extractor
|
20
|
+
ruby_extractor:,
|
21
|
+
debug: false
|
20
22
|
)
|
21
|
-
@
|
23
|
+
@autocorrect = autocorrect
|
24
|
+
@debug = debug
|
22
25
|
@file_paths = file_paths
|
23
26
|
@formatter = formatter
|
24
27
|
@rubocop_config = rubocop_config
|
@@ -49,14 +52,22 @@ module Templatecop
|
|
49
52
|
::File.write(file_path, rewritten_source)
|
50
53
|
end
|
51
54
|
|
52
|
-
# @param [Boolean]
|
55
|
+
# @param [Boolean] autocorrect
|
56
|
+
# @param [Boolean] debug
|
53
57
|
# @param [String] file_path
|
54
58
|
# @param [String] rubocop_config
|
55
59
|
# @param [String] source
|
56
60
|
# @return [Array<Templatecop::Offense>]
|
57
|
-
def investigate(
|
61
|
+
def investigate(
|
62
|
+
autocorrect:,
|
63
|
+
debug:,
|
64
|
+
file_path:,
|
65
|
+
rubocop_config:,
|
66
|
+
source:
|
67
|
+
)
|
58
68
|
TemplateOffenseCollector.new(
|
59
|
-
|
69
|
+
autocorrect: autocorrect,
|
70
|
+
debug: debug,
|
60
71
|
file_path: file_path,
|
61
72
|
rubocop_config: rubocop_config,
|
62
73
|
ruby_extractor: @ruby_extractor,
|
@@ -72,7 +83,8 @@ module Templatecop
|
|
72
83
|
on_file_started(file_path)
|
73
84
|
source = ::File.read(file_path)
|
74
85
|
offenses = investigate(
|
75
|
-
|
86
|
+
autocorrect: @autocorrect,
|
87
|
+
debug: @debug,
|
76
88
|
file_path: file_path,
|
77
89
|
rubocop_config: @rubocop_config,
|
78
90
|
source: source
|
@@ -80,7 +92,7 @@ module Templatecop
|
|
80
92
|
offenses_per_file |= offenses
|
81
93
|
break if offenses.select(&:correctable?).empty?
|
82
94
|
|
83
|
-
next unless @
|
95
|
+
next unless @autocorrect
|
84
96
|
|
85
97
|
correct(
|
86
98
|
file_path: file_path,
|
@@ -95,7 +107,7 @@ module Templatecop
|
|
95
107
|
|
96
108
|
# @return [Integer]
|
97
109
|
def max_trials_count
|
98
|
-
if @
|
110
|
+
if @autocorrect
|
99
111
|
7 # What a heuristic number.
|
100
112
|
else
|
101
113
|
1
|
@@ -3,19 +3,22 @@
|
|
3
3
|
module Templatecop
|
4
4
|
# Collect RuboCop offenses from Template code.
|
5
5
|
class TemplateOffenseCollector
|
6
|
-
# @param [Boolean]
|
6
|
+
# @param [Boolean] autocorrect
|
7
|
+
# @param [Boolean] debug
|
7
8
|
# @param [String] file_path Template file path
|
8
9
|
# @param [RuboCop::Config] rubocop_config
|
9
10
|
# @param [#call] ruby_extractor
|
10
11
|
# @param [String] source Template code
|
11
12
|
def initialize(
|
12
|
-
|
13
|
+
autocorrect:,
|
14
|
+
debug:,
|
13
15
|
file_path:,
|
14
16
|
rubocop_config:,
|
15
17
|
ruby_extractor:,
|
16
18
|
source:
|
17
19
|
)
|
18
|
-
@
|
20
|
+
@autocorrect = autocorrect
|
21
|
+
@debug = debug
|
19
22
|
@file_path = file_path
|
20
23
|
@rubocop_config = rubocop_config
|
21
24
|
@ruby_extractor = ruby_extractor
|
@@ -26,7 +29,8 @@ module Templatecop
|
|
26
29
|
def call
|
27
30
|
snippets.flat_map do |snippet|
|
28
31
|
RubyOffenseCollector.new(
|
29
|
-
|
32
|
+
autocorrect: @autocorrect,
|
33
|
+
debug: @debug,
|
30
34
|
file_path: @file_path,
|
31
35
|
rubocop_config: @rubocop_config,
|
32
36
|
source: snippet[:code]
|
data/lib/templatecop/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: templatecop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parallel
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.87'
|
55
|
-
description:
|
55
|
+
description:
|
56
56
|
email:
|
57
57
|
- r7kamura@gmail.com
|
58
58
|
executables: []
|
@@ -64,7 +64,6 @@ files:
|
|
64
64
|
- CHANGELOG.md
|
65
65
|
- CODE_OF_CONDUCT.md
|
66
66
|
- Gemfile
|
67
|
-
- Gemfile.lock
|
68
67
|
- LICENSE.txt
|
69
68
|
- README.md
|
70
69
|
- Rakefile
|
@@ -88,7 +87,7 @@ metadata:
|
|
88
87
|
source_code_uri: https://github.com/r7kamura/templatecop
|
89
88
|
changelog_uri: https://github.com/r7kamura/templatecop/blob/mainCHANGELOG.md
|
90
89
|
rubygems_mfa_required: 'true'
|
91
|
-
post_install_message:
|
90
|
+
post_install_message:
|
92
91
|
rdoc_options: []
|
93
92
|
require_paths:
|
94
93
|
- lib
|
@@ -103,8 +102,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
102
|
- !ruby/object:Gem::Version
|
104
103
|
version: '0'
|
105
104
|
requirements: []
|
106
|
-
rubygems_version: 3.
|
107
|
-
signing_key:
|
105
|
+
rubygems_version: 3.3.7
|
106
|
+
signing_key:
|
108
107
|
specification_version: 4
|
109
108
|
summary: RuboCop runner framework for template language.
|
110
109
|
test_files: []
|
data/Gemfile.lock
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
templatecop (0.3.0)
|
5
|
-
parallel
|
6
|
-
parser
|
7
|
-
rubocop (>= 0.87)
|
8
|
-
|
9
|
-
GEM
|
10
|
-
remote: https://rubygems.org/
|
11
|
-
specs:
|
12
|
-
ast (2.4.2)
|
13
|
-
diff-lcs (1.5.0)
|
14
|
-
parallel (1.21.0)
|
15
|
-
parser (3.1.0.0)
|
16
|
-
ast (~> 2.4.1)
|
17
|
-
rainbow (3.1.1)
|
18
|
-
rake (13.0.6)
|
19
|
-
regexp_parser (2.2.0)
|
20
|
-
rexml (3.2.5)
|
21
|
-
rspec (3.10.0)
|
22
|
-
rspec-core (~> 3.10.0)
|
23
|
-
rspec-expectations (~> 3.10.0)
|
24
|
-
rspec-mocks (~> 3.10.0)
|
25
|
-
rspec-core (3.10.1)
|
26
|
-
rspec-support (~> 3.10.0)
|
27
|
-
rspec-expectations (3.10.2)
|
28
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
-
rspec-support (~> 3.10.0)
|
30
|
-
rspec-mocks (3.10.2)
|
31
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
-
rspec-support (~> 3.10.0)
|
33
|
-
rspec-support (3.10.3)
|
34
|
-
rubocop (1.24.1)
|
35
|
-
parallel (~> 1.10)
|
36
|
-
parser (>= 3.0.0.0)
|
37
|
-
rainbow (>= 2.2.2, < 4.0)
|
38
|
-
regexp_parser (>= 1.8, < 3.0)
|
39
|
-
rexml
|
40
|
-
rubocop-ast (>= 1.15.1, < 2.0)
|
41
|
-
ruby-progressbar (~> 1.7)
|
42
|
-
unicode-display_width (>= 1.4.0, < 3.0)
|
43
|
-
rubocop-ast (1.15.1)
|
44
|
-
parser (>= 3.0.1.1)
|
45
|
-
rubocop-rspec (2.7.0)
|
46
|
-
rubocop (~> 1.19)
|
47
|
-
ruby-progressbar (1.11.0)
|
48
|
-
slimcop (0.13.1)
|
49
|
-
slimi (>= 0.5.1)
|
50
|
-
templatecop
|
51
|
-
slimi (0.7.1)
|
52
|
-
temple
|
53
|
-
thor
|
54
|
-
tilt
|
55
|
-
temple (0.8.2)
|
56
|
-
thor (1.2.1)
|
57
|
-
tilt (2.0.10)
|
58
|
-
unicode-display_width (2.1.0)
|
59
|
-
|
60
|
-
PLATFORMS
|
61
|
-
x86_64-linux
|
62
|
-
|
63
|
-
DEPENDENCIES
|
64
|
-
rake
|
65
|
-
rspec
|
66
|
-
rubocop
|
67
|
-
rubocop-rspec
|
68
|
-
slimcop
|
69
|
-
templatecop!
|
70
|
-
|
71
|
-
BUNDLED WITH
|
72
|
-
2.3.5
|