rubocop-elegant 0.0.1 → 0.0.3

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: a3a3c039c33e63e1f6f6060c046c611f6930788518f792b8b2207d10565466e0
4
- data.tar.gz: 83efd07a973b2c71c4b1a33306874d0544d9717415b61861a49dc3a4c5415a2d
3
+ metadata.gz: 241a20dbc086ba4e29a5f1b694ff4e044adf15097b4e6669616c911803d6a5cb
4
+ data.tar.gz: 331c440951cbf56be3dbacbf605f98e71a0c00964afe0d00c8829e6b961878b5
5
5
  SHA512:
6
- metadata.gz: 1cf1d9d1521ca0471c0a04c482049db3d1bd6f49eccbdb6effa53e1f316363879b56b95911ee11dbc31de05775f56698f6e2a01eacb9c2e01d565e829eb2829c
7
- data.tar.gz: 003315aa360d8a7f92b6c1f401013c40f23d01d3f22be6781223d96bfc936ed31d95f70a4fe2517e8ad506880d103316182eed3e498ed14352cc7119dfc0ef14
6
+ metadata.gz: fa319c503a325db12419461349d210f9b7039c988da81187dc027368fad3a5d97af72883d331a67ee5d7c895319d6be27e224f327be9d43a2c606a883805548c
7
+ data.tar.gz: 860d3c05d81f9560f45e63f49dc406e9c4faed40098955c4f907edd66c9a4a326b83083c0d91630b589e19b0d58e2bf2d1d5f0f6a195b2317966d529e105e1e1
data/config/default.yml CHANGED
@@ -8,3 +8,7 @@ Elegant/NoComments:
8
8
  Description: 'Disallows comments in source code, except SPDX license comments'
9
9
  Enabled: true
10
10
  VersionAdded: '0.0.1'
11
+ Elegant/NoEmptyLinesInMethods:
12
+ Description: 'Disallows empty lines inside method bodies'
13
+ Enabled: true
14
+ VersionAdded: '0.0.2'
@@ -0,0 +1,64 @@
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 NoEmptyLinesInMethods < Base
10
+ extend AutoCorrector
11
+
12
+ MSG = 'Empty line inside method body is not allowed'
13
+
14
+ def on_def(node)
15
+ check(node)
16
+ end
17
+
18
+ def on_defs(node)
19
+ check(node)
20
+ end
21
+
22
+ private
23
+
24
+ def check(node)
25
+ return if node.body.nil?
26
+ body_range = body_range(node)
27
+ return if body_range.nil?
28
+ find_empty_lines(body_range).each do |line_range|
29
+ register(line_range)
30
+ end
31
+ end
32
+
33
+ def body_range(node)
34
+ first_line = node.body.first_line
35
+ last_line = node.body.last_line
36
+ return nil if first_line == last_line
37
+ (first_line..last_line)
38
+ end
39
+
40
+ def find_empty_lines(line_range)
41
+ empty = []
42
+ line_range.each do |line_num|
43
+ line = processed_source.lines[line_num - 1]
44
+ empty << line_num if line.strip.empty?
45
+ end
46
+ empty
47
+ end
48
+
49
+ def register(line_num)
50
+ range = processed_source.buffer.line_range(line_num)
51
+ add_offense(range) do |corrector|
52
+ corrector.remove(line_with_newline(range))
53
+ end
54
+ end
55
+
56
+ def line_with_newline(range)
57
+ end_pos = range.end_pos
58
+ end_pos += 1 if processed_source.buffer.source[end_pos] == "\n"
59
+ range.with(end_pos: end_pos)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -4,3 +4,4 @@
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'elegant/no_comments'
7
+ require_relative 'elegant/no_empty_lines_in_methods'
@@ -9,11 +9,11 @@ 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.1'
12
+ s.version = '0.0.3'
13
13
  s.license = 'MIT'
14
14
  s.summary = 'Set of custom RuboCop cops for elegant Ruby coding'
15
15
  s.description =
16
- 'Explain it here...'
16
+ 'RuboCop plugin enforcing elegant coding style: no comments (except SPDX and magic), no empty lines in methods'
17
17
  s.authors = ['Yegor Bugayenko']
18
18
  s.email = 'yegor256@gmail.com'
19
19
  s.homepage = 'https://github.com/yegor256/rubocop-elegant'
@@ -21,4 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.rdoc_options = ['--charset=UTF-8']
22
22
  s.extra_rdoc_files = ['README.md']
23
23
  s.metadata['rubygems_mfa_required'] = 'true'
24
+ s.metadata['default_lint_roller_plugin'] = 'RuboCop::Elegant::Plugin'
25
+ s.add_dependency 'lint_roller', '~> 1.1'
26
+ s.add_dependency 'rubocop', '~> 1.75'
24
27
  end
metadata CHANGED
@@ -1,15 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-elegant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
12
- description: Explain it here...
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: lint_roller
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rubocop
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.75'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.75'
40
+ description: 'RuboCop plugin enforcing elegant coding style: no comments (except SPDX
41
+ and magic), no empty lines in methods'
13
42
  email: yegor256@gmail.com
14
43
  executables: []
15
44
  extensions: []
@@ -25,6 +54,7 @@ files:
25
54
  - config/default.yml
26
55
  - lib/rubocop-elegant.rb
27
56
  - lib/rubocop/cop/elegant/no_comments.rb
57
+ - lib/rubocop/cop/elegant/no_empty_lines_in_methods.rb
28
58
  - lib/rubocop/cop/elegant_cops.rb
29
59
  - lib/rubocop/elegant/plugin.rb
30
60
  - lib/rubocop/elegant/version.rb
@@ -34,6 +64,7 @@ licenses:
34
64
  - MIT
35
65
  metadata:
36
66
  rubygems_mfa_required: 'true'
67
+ default_lint_roller_plugin: RuboCop::Elegant::Plugin
37
68
  rdoc_options:
38
69
  - "--charset=UTF-8"
39
70
  require_paths: