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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02e411169bcf03ec8058dab2f6c316188b78cfda2ee5b10839f2bc89e0ffbcb7
4
- data.tar.gz: 3081e815ee3f7ce7a518ab6a7b384042d4d96eda53bb8c5c776f3cbe21cd90e2
3
+ metadata.gz: 4b967da47ab7a5721d082f4d1a4e9bb84006431c5acb5992a27f8246bdcfd904
4
+ data.tar.gz: 6e260866461bc31ddef835279d647905f17f87890b63af229bd98557699e0d8f
5
5
  SHA512:
6
- metadata.gz: adcd201a0fb01c9b40ec857f341bedec643648b463313433558bbc26564b2dc50742d771f68e40d8b9a4a829785e4e49cbbcda2d2ca147b94e8e61a9f5d3f183
7
- data.tar.gz: 484b00bcf0e97e8980216cb70b0cd4badf5075eaf542f59657ceac2aa8de598c0059a58091210ee69c34bc09fdbe6df9ffc5d666169ccfa3da24a7a81bd10d44
6
+ metadata.gz: 62cbf9db3a9f0fc741714afdd4f886b61efb4bed1e3f4ca54e6e7caa03b3cf2e8f3141aec2456b3b13f7fe0999e5a7ab9a7578a6700225a220db08200f9b2f96
7
+ data.tar.gz: c6742245998d9fbd23dca47dbf55be3e8717722daa7515df5afab77baca05d1c2ddc26d80a62bbbc97a7cfa06332a5c6fb3bc078a7d3853479598f7cb86c36ea
data/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.11.0 - 2022-01-10
6
+
7
+ ### Changed
8
+
9
+ - Use :offset instead of :begin_ at RubyExtractor.
10
+ - Detect offenses from code that containing `if`, `unless`, `do`, etc.
11
+
5
12
  ## 0.10.0 - 2022-01-06
6
13
 
7
14
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- slimcop (0.10.0)
4
+ slimcop (0.11.0)
5
5
  rainbow
6
6
  rubocop (>= 0.87)
7
7
  slimi (>= 0.5.1)
@@ -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
- begin_: begin_,
20
- code: @source[begin_...end_],
21
- end_: end_
20
+ code: clipped[:code],
21
+ offset: begin_ + clipped[:offset]
22
22
  }
23
23
  end
24
24
  end
@@ -25,7 +25,7 @@ module Slimcop
25
25
  ).call.map do |rubocop_offense|
26
26
  Offense.new(
27
27
  file_path: @file_path,
28
- offset: snippet[:begin_],
28
+ offset: snippet[:offset],
29
29
  rubocop_offense: rubocop_offense,
30
30
  source: @source
31
31
  )
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Slimcop
4
- VERSION = '0.10.0'
4
+ VERSION = '0.11.0'
5
5
  end
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.10.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-05 00:00:00.000000000 Z
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