strict_ivars 1.0.0.rc1 → 1.0.0.rc3

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: b910c7decefccc4495a320886042153d9178c12f76cda7ccb549c304be2b6725
4
- data.tar.gz: 8af1c060ed4ad3b1eef1b306c336a5bac415018f19bc73954e056bb47f9d86ce
3
+ metadata.gz: 937599360a03f578b3d440efc2d58eede817bc6ec71727f4ba74c1c0fb11dc0d
4
+ data.tar.gz: cb212c70dab8bcf3a9d163f80f864ddf81c8f0a0e3e2ae6781f2bcff37590b88
5
5
  SHA512:
6
- metadata.gz: 957162900af7f34fe4e111065f8af1886327a3a3ae5ebdc8de4529869b02d4d71b1d2b27fdbf21ac5aba316e150463d990bdb4c065658b7381d599c520026a9b
7
- data.tar.gz: 7748495c8e7a2e7cdddbd39b46bcb4e4d217db9b1f4f070fb810445f17b2fcd260356376ee5a7e936790410f83017dc0fdc232a69bdd1da8515204d39e8401ff
6
+ metadata.gz: 53fdba71a8e909d0afc5b797b1b4b7658a5ab956fab7946e1ead3e59be9298c5928a1b788c2be3781c46df3e2bb28505b5ca911357026aa0992c9f57a45e81e5
7
+ data.tar.gz: 86d26b307d4697843d10216e7c783a5db2207945ed3bb7a9e70959dd120e9652249dfef523b2803905728c1e4f4ed1de180a50c472f983068fbb38147367996a
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "securerandom"
4
-
5
3
  class StrictIvars::BaseProcessor < Prism::Visitor
6
4
  EVAL_METHODS = Set[:class_eval, :module_eval, :instance_eval, :eval].freeze
7
5
 
@@ -34,6 +32,12 @@ class StrictIvars::BaseProcessor < Prism::Visitor
34
32
  if EVAL_METHODS.include?(name) && (arguments = node.arguments)
35
33
  location = arguments.location
36
34
 
35
+ closing = if arguments.contains_forwarding?
36
+ ")), &(::StrictIvars.__eval_block_from_forwarding__(...))"
37
+ else
38
+ "))"
39
+ end
40
+
37
41
  if node.receiver
38
42
  receiver_local = "__eval_receiver_#{SecureRandom.hex(8)}__"
39
43
  receiver_location = node.receiver.location
@@ -42,12 +46,12 @@ class StrictIvars::BaseProcessor < Prism::Visitor
42
46
  [receiver_location.start_character_offset, "(#{receiver_local} = "],
43
47
  [receiver_location.end_character_offset, ")"],
44
48
  [location.start_character_offset, "*(::StrictIvars.__process_eval_args__(#{receiver_local}, :#{name}, "],
45
- [location.end_character_offset, "))"]
49
+ [location.end_character_offset, closing]
46
50
  )
47
51
  else
48
52
  @annotations.push(
49
53
  [location.start_character_offset, "*(::StrictIvars.__process_eval_args__(self, :#{name}, "],
50
- [location.end_character_offset, "))"]
54
+ [location.end_character_offset, closing]
51
55
  )
52
56
  end
53
57
  end
@@ -45,6 +45,15 @@ class StrictIvars::Processor < StrictIvars::BaseProcessor
45
45
  branch { visit(node.else_clause) }
46
46
  end
47
47
 
48
+ #: (Prism::DefinedNode) -> void
49
+ def visit_defined_node(node)
50
+ value = node.value
51
+
52
+ return if Prism::InstanceVariableReadNode === value
53
+
54
+ super
55
+ end
56
+
48
57
  #: (Prism::InstanceVariableReadNode) -> void
49
58
  def visit_instance_variable_read_node(node)
50
59
  name = node.name
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StrictIvars
4
- VERSION = "1.0.0.rc1"
4
+ VERSION = "1.0.0.rc3"
5
5
  end
data/lib/strict_ivars.rb CHANGED
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "set"
3
4
  require "prism"
5
+ require "securerandom"
6
+
4
7
  require "require-hooks/setup"
8
+
5
9
  require "strict_ivars/version"
6
10
  require "strict_ivars/base_processor"
7
11
  require "strict_ivars/processor"
@@ -82,4 +86,9 @@ module StrictIvars
82
86
 
83
87
  args
84
88
  end
89
+
90
+ #: () { () -> void } -> Proc
91
+ def self.__eval_block_from_forwarding__(*, &block)
92
+ block
93
+ end
85
94
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: strict_ivars
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
4
+ version: 1.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Drapper