rubocop-elegant 0.0.18 → 0.0.20

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: 428395f6329a8a67d9c9eaab7b2ccd7accf953b4e84d8f1998b0979de7f24a8d
4
- data.tar.gz: 9d22137083069baf655d62792de5ef2b52e5a1c4e04f5b17351521b38580902f
3
+ metadata.gz: 68c6e6f486a9804d01f7be2db7087ed14501cec590250e50b89d32511c3cce97
4
+ data.tar.gz: f654452715b5e92d85fe3d3e410aca24858a9f28ce25ece59103d66bd3f27582
5
5
  SHA512:
6
- metadata.gz: 3557adeb02af11e41004fb80c02c6c396990b0926a22d03f6771f9dc7034e0a1dc5edfa831ec16fe74326cafd76d8bbacc03c8a767f2d53f776d5e644c4c3c12
7
- data.tar.gz: 866970ed181656f0e1f854e280042b24f3ed83c903fac827c646c79372d1c83903fd2d5a0eca8215e5e32911f76cd475ed37950b4c489f913729a7c77bd3f252
6
+ metadata.gz: af01d8551f274a0c56e69f3caed9097d7db6ffe55d7be9519ba7ea8fc169c6a484eba3e5d5af64e0788eb690d5bd4d155034d60d1d473de6a86bfa4baba480d9
7
+ data.tar.gz: f58fb9bbbb83617de532b7ac4712d3089fc61548d43040235cef7bbf46e533a6a5b9d0477b6c2c2124bde2a6b1adcb02eac99f8cec5edcbf0e3831c632e3a620
data/config/default.yml CHANGED
@@ -12,6 +12,10 @@ Elegant/NoEmptyLinesInMethods:
12
12
  Description: 'Disallows empty lines inside method bodies'
13
13
  Enabled: true
14
14
  VersionAdded: '0.0.2'
15
+ Elegant/NoEmptyLinesInBlocks:
16
+ Description: 'Disallows empty lines inside blocks (do/end, if/end, while, case, begin, etc.)'
17
+ Enabled: true
18
+ VersionAdded: '0.0.19'
15
19
  Elegant/GoodVariableName:
16
20
  Description: 'Checks that variable names match the configured pattern'
17
21
  Enabled: true
@@ -22,7 +26,7 @@ Elegant/GoodMethodName:
22
26
  Description: 'Checks that method names match the configured pattern'
23
27
  Enabled: true
24
28
  VersionAdded: '0.0.3'
25
- Pattern: '^(((to|fake|the|with|without|on)_)?[a-z]{1,16}[!?]?|test_[a-z_]+)$'
29
+ Pattern: '^(((to|fake|the|with|without)_)?[a-z]{1,16}[!?]?|(on|test)_[a-z_]+)$'
26
30
  AllowedNames: []
27
31
 
28
32
  Style/RedundantException:
@@ -12,13 +12,11 @@ module RuboCop
12
12
  MSG = 'Comment is not allowed, unless it is SPDX, magic, rubocop directive, or docblock'
13
13
  public_constant :MSG
14
14
 
15
- # rubocop:disable Elegant/GoodMethodName
16
15
  def on_new_investigation
17
16
  processed_source.comments.each do |comment|
18
17
  register(comment) unless allowed?(comment)
19
18
  end
20
19
  end
21
- # rubocop:enable Elegant/GoodMethodName
22
20
 
23
21
  private
24
22
 
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SPDX-FileCopyrightText: Copyright (c) 2019-2026 Yegor Bugayenko
4
+ # SPDX-License-Identifier: MIT
5
+
6
+ module RuboCop
7
+ module Cop
8
+ module Elegant
9
+ class NoEmptyLinesInBlocks < Base
10
+ extend AutoCorrector
11
+
12
+ MSG = 'Empty line inside block body is not allowed'
13
+ public_constant :MSG
14
+
15
+ def on_new_investigation
16
+ super
17
+ @reported = []
18
+ @gaps = scan
19
+ end
20
+
21
+ def on_block(node)
22
+ check(node)
23
+ end
24
+
25
+ def on_numblock(node)
26
+ check(node)
27
+ end
28
+
29
+ def on_if(node)
30
+ check(node)
31
+ end
32
+
33
+ def on_while(node)
34
+ check(node)
35
+ end
36
+
37
+ def on_until(node)
38
+ check(node)
39
+ end
40
+
41
+ def on_for(node)
42
+ check(node)
43
+ end
44
+
45
+ def on_case(node)
46
+ check(node)
47
+ end
48
+
49
+ def on_case_match(node)
50
+ check(node)
51
+ end
52
+
53
+ def on_kwbegin(node)
54
+ check(node)
55
+ end
56
+
57
+ private
58
+
59
+ def check(node)
60
+ lines = range(node)
61
+ return if lines.nil?
62
+ empty(lines).each { |num| register(num) }
63
+ end
64
+
65
+ def range(node)
66
+ first = node.first_line + 1
67
+ last = node.last_line - 1
68
+ return if first > last
69
+ (first..last)
70
+ end
71
+
72
+ def empty(lines)
73
+ result = []
74
+ lines.each do |num|
75
+ next if @gaps.include?(num)
76
+ line = processed_source.lines[num - 1]
77
+ result << num if line.strip.empty?
78
+ end
79
+ result
80
+ end
81
+
82
+ def scan
83
+ gaps = []
84
+ ast = processed_source.ast
85
+ return gaps if ast.nil?
86
+ ast.each_node(:def, :defs) do |node|
87
+ nxt = node.right_sibling
88
+ next unless nxt.is_a?(RuboCop::AST::Node)
89
+ next unless %i[def defs].include?(nxt.type)
90
+ first = node.last_line + 1
91
+ last = nxt.first_line - 1
92
+ next if first > last
93
+ (first..last).each { |n| gaps << n }
94
+ end
95
+ gaps
96
+ end
97
+
98
+ def register(num)
99
+ return if @reported.include?(num)
100
+ @reported << num
101
+ target = processed_source.buffer.line_range(num)
102
+ add_offense(target) do |corrector|
103
+ corrector.remove(fullrange(target))
104
+ end
105
+ end
106
+
107
+ def fullrange(target)
108
+ ending = target.end_pos
109
+ ending += 1 if processed_source.buffer.source[ending] == "\n"
110
+ target.with(end_pos: ending)
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -6,4 +6,5 @@ require_relative 'elegant/good_variable_name'
6
6
  # SPDX-License-Identifier: MIT
7
7
 
8
8
  require_relative 'elegant/no_comments'
9
+ require_relative 'elegant/no_empty_lines_in_blocks'
9
10
  require_relative 'elegant/no_empty_lines_in_methods'
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to?(:required_rubygems_version=)
10
10
  s.required_ruby_version = '>=2.2'
11
11
  s.name = 'rubocop-elegant'
12
- s.version = '0.0.18'
12
+ s.version = '0.0.20'
13
13
  s.license = 'MIT'
14
14
  s.summary = 'Set of custom RuboCop cops for elegant Ruby coding'
15
15
  s.description =
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-elegant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -56,6 +56,7 @@ files:
56
56
  - lib/rubocop/cop/elegant/good_method_name.rb
57
57
  - lib/rubocop/cop/elegant/good_variable_name.rb
58
58
  - lib/rubocop/cop/elegant/no_comments.rb
59
+ - lib/rubocop/cop/elegant/no_empty_lines_in_blocks.rb
59
60
  - lib/rubocop/cop/elegant/no_empty_lines_in_methods.rb
60
61
  - lib/rubocop/cop/elegant_cops.rb
61
62
  - lib/rubocop/elegant/plugin.rb