rubocop-socketry 0.5.0 → 0.6.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: 535ee9879245dcd6059d6ad744862b405ef49eec9203d70c8b07e03ca77b3f47
4
- data.tar.gz: ccd2df428d0cb2652beb7452f0e80952e3dbe0845adb41bcebea5d8d83c0bff6
3
+ metadata.gz: 45d8b27941b7424a315428ba04dd6dc98218896b54551f49f0cdde531c41b1af
4
+ data.tar.gz: d602b39fd19660eb34908a17c0681fd884d7d2fb9b14395e1f2070ee54910ced
5
5
  SHA512:
6
- metadata.gz: 40daa847ae78f73f5c9d2a2521d457a8de458985dded66fb6d06e027c9545ce5dd65eeb3edd38d202fa4c87941ecdc9eee9cacb12d5a231a222acee64ddad889
7
- data.tar.gz: da03f159be23f86eaea8b43fdfba3f80eca079b8e9c410c8a1f9e66d7e3e09f10e784944f8904fd40cd9d28dd5cd9124d79402633079bc637e3a55652b9c8000
6
+ metadata.gz: f3dbbc01b527507b658225ad95dcce305a1c33764636a88d3f83f7772a9c5264e7729d4d554335c4427c13f66b3a7535ef05e11842c0acddfa88d143a9cea83b
7
+ data.tar.gz: a09b66c884a2258df7e9f53010af7fe638ac6454b4c36195406136b694116f9f5cb16465e7d67bdbddfd872b525f10dfc104cd8bcc659c323209b5a4f759c2fe
checksums.yaml.gz.sig CHANGED
Binary file
@@ -14,26 +14,39 @@ module RuboCop
14
14
  # - `foo {bar}` - space when method has no parentheses and is not chained
15
15
  # - `foo(1, 2) {bar}` - space after closing paren for standalone methods
16
16
  # - `array.each{|x| x*2}.reverse` - no space for method chains (even with parens)
17
+ # - `->(foo){foo}` - no space for lambdas (stabby lambda syntax)
18
+ # - `lambda{foo}` - no space for lambda keyword
19
+ # - `proc{foo}` - no space for proc keyword
20
+ # - `Proc.new{foo}` - no space for Proc.new
17
21
  class BlockDelimiterSpacing < RuboCop::Cop::Base
18
22
  extend Cop::AutoCorrector
19
23
 
20
24
  MSG_ADD_SPACE = "Add a space before the opening brace."
21
25
  MSG_REMOVE_SPACE = "Remove space before the opening brace for method chains."
26
+ MSG_REMOVE_SPACE_LAMBDA = "Remove space before the opening brace for lambdas/procs."
22
27
 
23
28
  def on_block(node)
24
29
  return unless node.braces?
25
30
 
26
31
  send_node = node.send_node
27
32
 
28
- # Priority: Check if it's part of a method chain first
33
+ # Priority 1: Check if it's a lambda or proc
34
+ # Lambdas/procs should never have space before {
35
+ if lambda_or_proc?(send_node)
36
+ # ->(foo){foo} - no space (stabby lambda)
37
+ # lambda{foo} - no space (lambda keyword)
38
+ # proc{foo} - no space (proc keyword)
39
+ # Proc.new{foo} - no space (Proc.new)
40
+ check_no_space_for_lambda(node, send_node)
41
+ # Priority 2: Check if it's part of a method chain
29
42
  # Method chains should never have space, even with parentheses
30
- if part_of_method_chain?(node)
43
+ elsif part_of_method_chain?(node)
31
44
  # array.each{|x| x*2}.reverse - no space
32
45
  # obj.method(1, 2){|x| x}.other - also no space
33
46
  check_no_space_before_brace(node, send_node)
34
47
  elsif has_parentheses?(send_node)
35
48
  # foo(1, 2) {bar} - space after ) for standalone methods
36
- check_space_after_paren(node, send_node)
49
+ check_space_after_parentheses(node, send_node)
37
50
  else
38
51
  # foo {bar} - space for standalone methods without parens
39
52
  check_space_before_brace(node, send_node)
@@ -42,6 +55,56 @@ module RuboCop
42
55
 
43
56
  private
44
57
 
58
+ # Check if the send node is a lambda or proc (any form)
59
+ def lambda_or_proc?(send_node)
60
+ return true if send_node.lambda? # stabby lambda: ->{}
61
+ return true if send_node.method_name == :lambda # lambda keyword: lambda{}
62
+ return true if send_node.method_name == :proc # proc keyword: proc{}
63
+
64
+ # Check for Proc.new{}
65
+ if send_node.method_name == :new && send_node.receiver&.const_type?
66
+ # Check if the receiver is the Proc constant
67
+ receiver = send_node.receiver
68
+ return true if receiver.const_name == :Proc && receiver.children.first.nil?
69
+ end
70
+
71
+ false
72
+ end
73
+
74
+ # Check that there's no space before the opening brace for lambdas
75
+ def check_no_space_for_lambda(block_node, send_node)
76
+ brace_begin = block_node.loc.begin
77
+
78
+ # Find the position just before the brace
79
+ char_before_pos = brace_begin.begin_pos - 1
80
+
81
+ return if char_before_pos < 0
82
+
83
+ char_before = processed_source.buffer.source[char_before_pos]
84
+
85
+ # If there's no space before the brace, we're good
86
+ return unless char_before == " "
87
+
88
+ # Find the extent of whitespace before the brace
89
+ start_pos = char_before_pos
90
+ while start_pos > 0 && processed_source.buffer.source[start_pos - 1] =~ /\s/
91
+ start_pos -= 1
92
+ end
93
+
94
+ space_range = Parser::Source::Range.new(
95
+ processed_source.buffer,
96
+ start_pos,
97
+ brace_begin.begin_pos
98
+ )
99
+
100
+ add_offense(
101
+ space_range,
102
+ message: MSG_REMOVE_SPACE_LAMBDA
103
+ ) do |corrector|
104
+ corrector.remove(space_range)
105
+ end
106
+ end
107
+
45
108
  # Check if the block is part of a method chain (e.g., foo{}.bar or foo.bar{}.baz)
46
109
  def part_of_method_chain?(block_node)
47
110
  send_node = block_node.send_node
@@ -63,7 +126,7 @@ module RuboCop
63
126
  end
64
127
 
65
128
  # Check that there's a space between closing paren and opening brace
66
- def check_space_after_paren(block_node, send_node)
129
+ def check_space_after_parentheses(block_node, send_node)
67
130
  paren_end = send_node.loc.end
68
131
  brace_begin = block_node.loc.begin
69
132
 
@@ -36,8 +36,7 @@ module RuboCop
36
36
  # puts error.backtrace.first
37
37
  # end
38
38
  class GlobalExceptionVariables < RuboCop::Cop::Base
39
- MSG = "Avoid using global exception variable `%<variable>s`. " \
40
- "Use explicit exception handling with `rescue => error` instead."
39
+ MSG = "Avoid using global exception variable `%<variable>s`. Use explicit exception handling with `rescue => error` instead."
41
40
 
42
41
  EXCEPTION_VARIABLES = %i[$! $@ $ERROR_INFO $ERROR_POSITION].freeze
43
42
 
@@ -5,6 +5,6 @@
5
5
 
6
6
  module RuboCop
7
7
  module Socketry
8
- VERSION = "0.5.0"
8
+ VERSION = "0.6.0"
9
9
  end
10
10
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-socketry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
metadata.gz.sig CHANGED
Binary file