templatecop 0.1.0 → 0.2.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 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +13 -1
- data/README.md +7 -1
- data/lib/templatecop/offense.rb +38 -0
- data/lib/templatecop/runner.rb +24 -8
- data/lib/templatecop/version.rb +1 -1
- data/templatecop.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 60c625ec4bf026174039c9a815a1baee6e562fff906a0d07bd77b0c4a0d6f96a
|
4
|
+
data.tar.gz: 4e08952b06bf388c51a91c12efecfce3642e9c73f8d60df0b64f43f1bc068b87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3c60ad4fcd3721fe16324fafeca33352b959ac2c6956283b0e62c03a322e7c95931d4bfa8bd03519e5dbbd2d098cf48551d5ee0f253656eddea26637e30e220
|
7
|
+
data.tar.gz: 904a14de0c89e399a207a25037db8cfb5b7c42a366fe781aa37caf9b4f9141cac6274f980bfad8a5de4901f4e31699a69c0be243fc29d8dec0d62f848d9f5ad9
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
templatecop (0.
|
4
|
+
templatecop (0.2.0)
|
5
|
+
parallel
|
5
6
|
parser
|
6
7
|
rubocop (>= 0.87)
|
7
8
|
|
@@ -44,6 +45,16 @@ GEM
|
|
44
45
|
rubocop-rspec (2.7.0)
|
45
46
|
rubocop (~> 1.19)
|
46
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)
|
47
58
|
unicode-display_width (2.1.0)
|
48
59
|
|
49
60
|
PLATFORMS
|
@@ -54,6 +65,7 @@ DEPENDENCIES
|
|
54
65
|
rspec
|
55
66
|
rubocop
|
56
67
|
rubocop-rspec
|
68
|
+
slimcop
|
57
69
|
templatecop!
|
58
70
|
|
59
71
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Templatecop
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/templatecop)
|
4
|
+
[](https://github.com/r7kamura/templatecop/actions/workflows/test.yml)
|
5
|
+
|
3
6
|
[RuboCop](https://github.com/rubocop/rubocop) runner framework for template language.
|
4
7
|
|
5
8
|
## Installation
|
@@ -24,4 +27,7 @@ gem install templatecop
|
|
24
27
|
|
25
28
|
## Usage
|
26
29
|
|
27
|
-
|
30
|
+
See these examples:
|
31
|
+
|
32
|
+
- <https://github.com/r7kamura/erbcop>
|
33
|
+
- <https://github.com/r7kamura/slimcop>
|
data/lib/templatecop/offense.rb
CHANGED
@@ -50,6 +50,44 @@ module Templatecop
|
|
50
50
|
)
|
51
51
|
end
|
52
52
|
|
53
|
+
# @note For Parallel.
|
54
|
+
# @return [Hash]
|
55
|
+
def marshal_dump
|
56
|
+
{
|
57
|
+
begin_pos: @rubocop_offense.location.begin_pos,
|
58
|
+
cop_name: @rubocop_offense.cop_name,
|
59
|
+
end_pos: @rubocop_offense.location.end_pos,
|
60
|
+
file_path: @file_path,
|
61
|
+
message: @rubocop_offense.message.dup.force_encoding(::Encoding::UTF_8).scrub,
|
62
|
+
offset: @offset,
|
63
|
+
severity: @rubocop_offense.severity.to_s,
|
64
|
+
source: @source,
|
65
|
+
status: @rubocop_offense.status
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
# @note For Parallel.
|
70
|
+
# @param [Hash] hash
|
71
|
+
def marshal_load(hash)
|
72
|
+
@file_path = hash[:file_path]
|
73
|
+
@offset = hash[:offset]
|
74
|
+
@rubocop_offense = ::RuboCop::Cop::Offense.new(
|
75
|
+
hash[:severity],
|
76
|
+
::Parser::Source::Range.new(
|
77
|
+
::Parser::Source::Buffer.new(
|
78
|
+
@file_path,
|
79
|
+
source: @source
|
80
|
+
),
|
81
|
+
hash[:begin_pos],
|
82
|
+
hash[:end_pos]
|
83
|
+
),
|
84
|
+
hash[:message],
|
85
|
+
hash[:cop_name],
|
86
|
+
hash[:status].to_sym
|
87
|
+
)
|
88
|
+
@source = hash[:source]
|
89
|
+
end
|
90
|
+
|
53
91
|
private
|
54
92
|
|
55
93
|
# @return [Parser::Source::Buffer]
|
data/lib/templatecop/runner.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'parallel'
|
4
|
+
require 'stringio'
|
5
|
+
|
3
6
|
module Templatecop
|
4
7
|
# Run investigation and auto-correcttion.
|
5
8
|
class Runner
|
@@ -25,9 +28,11 @@ module Templatecop
|
|
25
28
|
# @return [Array<RuboCop::Cop::Offense>]
|
26
29
|
def call
|
27
30
|
on_started
|
28
|
-
|
29
|
-
on_finished
|
30
|
-
offenses
|
31
|
+
result = run_in_parallel
|
32
|
+
on_finished(result)
|
33
|
+
result.flat_map do |(_, offenses)|
|
34
|
+
offenses
|
35
|
+
end
|
31
36
|
end
|
32
37
|
|
33
38
|
private
|
@@ -59,9 +64,9 @@ module Templatecop
|
|
59
64
|
).call
|
60
65
|
end
|
61
66
|
|
62
|
-
# @return [
|
63
|
-
def
|
64
|
-
@file_paths
|
67
|
+
# @return [Hash]
|
68
|
+
def run_in_parallel
|
69
|
+
::Parallel.map(@file_paths) do |file_path|
|
65
70
|
offenses_per_file = []
|
66
71
|
max_trials_count.times do
|
67
72
|
on_file_started(file_path)
|
@@ -84,7 +89,7 @@ module Templatecop
|
|
84
89
|
)
|
85
90
|
end
|
86
91
|
on_file_finished(file_path, offenses_per_file)
|
87
|
-
offenses_per_file
|
92
|
+
[file_path, offenses_per_file]
|
88
93
|
end
|
89
94
|
end
|
90
95
|
|
@@ -112,7 +117,18 @@ module Templatecop
|
|
112
117
|
@formatter.file_finished(file_path, offenses)
|
113
118
|
end
|
114
119
|
|
115
|
-
|
120
|
+
# We need to adjust @formatter's status (in silently)
|
121
|
+
# because @formatter.on_file_* was called in child process, not in this process.
|
122
|
+
# @param [Array] result
|
123
|
+
def on_finished(result)
|
124
|
+
original = @formatter.output
|
125
|
+
@formatter.instance_variable_set(:@output, ::StringIO.new)
|
126
|
+
result.each do |(file_path, offenses)|
|
127
|
+
on_file_started(file_path)
|
128
|
+
on_file_finished(file_path, offenses)
|
129
|
+
end
|
130
|
+
@formatter.instance_variable_set(:@output, original)
|
131
|
+
|
116
132
|
@formatter.finished(@file_paths)
|
117
133
|
end
|
118
134
|
end
|
data/lib/templatecop/version.rb
CHANGED
data/templatecop.gemspec
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: templatecop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.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-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: parallel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: parser
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|