slimcop 0.10.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 +7 -0
- data/Gemfile.lock +1 -1
- data/lib/slimcop/ruby_clipper.rb +93 -0
- data/lib/slimcop/ruby_extractor.rb +4 -4
- data/lib/slimcop/slim_offense_collector.rb +1 -1
- 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: 4b967da47ab7a5721d082f4d1a4e9bb84006431c5acb5992a27f8246bdcfd904
|
4
|
+
data.tar.gz: 6e260866461bc31ddef835279d647905f17f87890b63af229bd98557699e0d8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 62cbf9db3a9f0fc741714afdd4f886b61efb4bed1e3f4ca54e6e7caa03b3cf2e8f3141aec2456b3b13f7fe0999e5a7ab9a7578a6700225a220db08200f9b2f96
|
7
|
+
data.tar.gz: c6742245998d9fbd23dca47dbf55be3e8717722daa7515df5afab77baca05d1c2ddc26d80a62bbbc97a7cfa06332a5c6fb3bc078a7d3853479598f7cb86c36ea
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slimcop
|
4
|
+
# Remove unnecessary part (e.g. `if`, `unless`, `do`, ...) from Ruby code.
|
5
|
+
class RubyClipper
|
6
|
+
# @param [String] code
|
7
|
+
def initialize(code)
|
8
|
+
@code = code
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Hash]
|
12
|
+
def call
|
13
|
+
[
|
14
|
+
PrecedingKeywordRemover,
|
15
|
+
TrailingDoRemover
|
16
|
+
].each_with_object(
|
17
|
+
code: @code,
|
18
|
+
offset: 0
|
19
|
+
) do |klass, object|
|
20
|
+
result = klass.new(object[:code]).call
|
21
|
+
object[:code] = result[:code]
|
22
|
+
object[:offset] += result[:offset]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class PrecedingKeywordRemover
|
27
|
+
REGEXP = /
|
28
|
+
\A
|
29
|
+
(?:
|
30
|
+
begin
|
31
|
+
| case
|
32
|
+
| else
|
33
|
+
| elsif
|
34
|
+
| ensure
|
35
|
+
| if
|
36
|
+
| rescue
|
37
|
+
| unless
|
38
|
+
| until
|
39
|
+
| when
|
40
|
+
| while
|
41
|
+
| for[ \t]+\w+[ \t]+in
|
42
|
+
)
|
43
|
+
[ \t]
|
44
|
+
/x.freeze
|
45
|
+
|
46
|
+
# @param [String] code
|
47
|
+
def initialize(code)
|
48
|
+
@code = code
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Hash]
|
52
|
+
def call
|
53
|
+
data = @code.match(REGEXP)
|
54
|
+
if data
|
55
|
+
offset = data[0].length
|
56
|
+
{
|
57
|
+
code: @code[offset..],
|
58
|
+
offset: offset
|
59
|
+
}
|
60
|
+
else
|
61
|
+
{
|
62
|
+
code: @code,
|
63
|
+
offset: 0
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class TrailingDoRemover
|
70
|
+
REGEXP = /
|
71
|
+
[ \t]
|
72
|
+
do
|
73
|
+
[ \t]*
|
74
|
+
(\|[^|]*\|)?
|
75
|
+
[ \t]*
|
76
|
+
\Z
|
77
|
+
/x.freeze
|
78
|
+
|
79
|
+
# @param [String] code
|
80
|
+
def initialize(code)
|
81
|
+
@code = code
|
82
|
+
end
|
83
|
+
|
84
|
+
# @return [Hash]
|
85
|
+
def call
|
86
|
+
{
|
87
|
+
code: @code.sub(REGEXP, ''),
|
88
|
+
offset: 0
|
89
|
+
}
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'slimi'
|
4
4
|
|
5
5
|
module Slimcop
|
6
|
-
# Extract codes from Slim source.
|
6
|
+
# Extract Ruby codes from Slim source.
|
7
7
|
class RubyExtractor
|
8
8
|
# @param [String, nil] file_path
|
9
9
|
# @param [String] source
|
@@ -15,10 +15,10 @@ module Slimcop
|
|
15
15
|
# @return [Array<Hash>]
|
16
16
|
def call
|
17
17
|
ranges.map do |(begin_, end_)|
|
18
|
+
clipped = RubyClipper.new(@source[begin_...end_]).call
|
18
19
|
{
|
19
|
-
|
20
|
-
|
21
|
-
end_: end_
|
20
|
+
code: clipped[:code],
|
21
|
+
offset: begin_ + clipped[:offset]
|
22
22
|
}
|
23
23
|
end
|
24
24
|
end
|
data/lib/slimcop/version.rb
CHANGED
data/lib/slimcop.rb
CHANGED
@@ -7,6 +7,7 @@ module Slimcop
|
|
7
7
|
autoload :Offense, 'slimcop/offense'
|
8
8
|
autoload :PathFinder, 'slimcop/path_finder'
|
9
9
|
autoload :RuboCopConfigGenerator, 'slimcop/rubo_cop_config_generator'
|
10
|
+
autoload :RubyClipper, 'slimcop/ruby_clipper'
|
10
11
|
autoload :RubyExtractor, 'slimcop/ruby_extractor'
|
11
12
|
autoload :RubyOffenseCollector, 'slimcop/ruby_offense_collector'
|
12
13
|
autoload :SlimCorrector, 'slimcop/slim_corrector'
|
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.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-01-
|
11
|
+
date: 2022-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rainbow
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- lib/slimcop/offense.rb
|
79
79
|
- lib/slimcop/path_finder.rb
|
80
80
|
- lib/slimcop/rubo_cop_config_generator.rb
|
81
|
+
- lib/slimcop/ruby_clipper.rb
|
81
82
|
- lib/slimcop/ruby_extractor.rb
|
82
83
|
- lib/slimcop/ruby_offense_collector.rb
|
83
84
|
- lib/slimcop/slim_corrector.rb
|