tapioca 0.10.1 → 0.10.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -3
  3. data/lib/tapioca/cli.rb +24 -12
  4. data/lib/tapioca/commands/annotations.rb +2 -2
  5. data/lib/tapioca/commands/check_shims.rb +13 -21
  6. data/lib/tapioca/commands/command.rb +2 -2
  7. data/lib/tapioca/commands/command_without_tracker.rb +18 -0
  8. data/lib/tapioca/commands/configure.rb +3 -3
  9. data/lib/tapioca/commands/dsl.rb +16 -11
  10. data/lib/tapioca/commands/gem.rb +5 -5
  11. data/lib/tapioca/commands/require.rb +2 -2
  12. data/lib/tapioca/commands/todo.rb +2 -2
  13. data/lib/tapioca/commands.rb +1 -0
  14. data/lib/tapioca/dsl/compiler.rb +3 -3
  15. data/lib/tapioca/dsl/compilers/aasm.rb +4 -4
  16. data/lib/tapioca/dsl/compilers/action_controller_helpers.rb +1 -1
  17. data/lib/tapioca/dsl/compilers/action_mailer.rb +1 -1
  18. data/lib/tapioca/dsl/compilers/active_job.rb +2 -2
  19. data/lib/tapioca/dsl/compilers/active_model_attributes.rb +1 -1
  20. data/lib/tapioca/dsl/compilers/active_record_associations.rb +48 -13
  21. data/lib/tapioca/dsl/compilers/active_record_columns.rb +22 -22
  22. data/lib/tapioca/dsl/compilers/active_record_fixtures.rb +1 -1
  23. data/lib/tapioca/dsl/compilers/active_record_relations.rb +52 -48
  24. data/lib/tapioca/dsl/compilers/active_record_scope.rb +3 -3
  25. data/lib/tapioca/dsl/compilers/active_record_typed_store.rb +2 -2
  26. data/lib/tapioca/dsl/compilers/active_storage.rb +2 -2
  27. data/lib/tapioca/dsl/compilers/active_support_current_attributes.rb +1 -1
  28. data/lib/tapioca/dsl/compilers/config.rb +2 -2
  29. data/lib/tapioca/dsl/compilers/graphql_input_object.rb +1 -0
  30. data/lib/tapioca/dsl/compilers/graphql_mutation.rb +1 -0
  31. data/lib/tapioca/dsl/compilers/identity_cache.rb +12 -12
  32. data/lib/tapioca/dsl/compilers/protobuf.rb +21 -10
  33. data/lib/tapioca/dsl/compilers/rails_generators.rb +2 -2
  34. data/lib/tapioca/dsl/compilers/sidekiq_worker.rb +1 -1
  35. data/lib/tapioca/dsl/compilers/smart_properties.rb +2 -2
  36. data/lib/tapioca/dsl/compilers/state_machines.rb +24 -24
  37. data/lib/tapioca/dsl/compilers/url_helpers.rb +1 -1
  38. data/lib/tapioca/dsl/compilers.rb +1 -1
  39. data/lib/tapioca/dsl/helpers/active_record_column_type_helper.rb +19 -0
  40. data/lib/tapioca/dsl/helpers/graphql_type_helper.rb +1 -1
  41. data/lib/tapioca/dsl/pipeline.rb +5 -4
  42. data/lib/tapioca/executor.rb +2 -2
  43. data/lib/tapioca/gem/events.rb +1 -1
  44. data/lib/tapioca/gem/listeners/foreign_constants.rb +3 -2
  45. data/lib/tapioca/gem/listeners/methods.rb +3 -3
  46. data/lib/tapioca/gem/listeners/mixins.rb +3 -7
  47. data/lib/tapioca/gem/listeners/source_location.rb +1 -1
  48. data/lib/tapioca/gem/listeners/subconstants.rb +1 -1
  49. data/lib/tapioca/gem/listeners/yard_doc.rb +1 -1
  50. data/lib/tapioca/gem/pipeline.rb +11 -9
  51. data/lib/tapioca/gemfile.rb +4 -4
  52. data/lib/tapioca/helpers/config_helper.rb +4 -4
  53. data/lib/tapioca/helpers/env_helper.rb +1 -0
  54. data/lib/tapioca/helpers/gem_helper.rb +17 -5
  55. data/lib/tapioca/helpers/rbi_files_helper.rb +3 -3
  56. data/lib/tapioca/helpers/rbi_helper.rb +5 -13
  57. data/lib/tapioca/helpers/sorbet_helper.rb +3 -5
  58. data/lib/tapioca/helpers/source_uri.rb +1 -1
  59. data/lib/tapioca/helpers/test/dsl_compiler.rb +1 -1
  60. data/lib/tapioca/loaders/dsl.rb +9 -7
  61. data/lib/tapioca/loaders/gem.rb +2 -2
  62. data/lib/tapioca/loaders/loader.rb +6 -6
  63. data/lib/tapioca/rbi_ext/model.rb +8 -5
  64. data/lib/tapioca/rbi_formatter.rb +2 -2
  65. data/lib/tapioca/runtime/generic_type_registry.rb +22 -2
  66. data/lib/tapioca/runtime/reflection.rb +63 -2
  67. data/lib/tapioca/runtime/trackers/autoload.rb +3 -0
  68. data/lib/tapioca/runtime/trackers/constant_definition.rb +13 -5
  69. data/lib/tapioca/runtime/trackers/mixin.rb +37 -36
  70. data/lib/tapioca/runtime/trackers/required_ancestor.rb +17 -4
  71. data/lib/tapioca/runtime/trackers/tracker.rb +45 -0
  72. data/lib/tapioca/runtime/trackers.rb +27 -1
  73. data/lib/tapioca/sorbet_ext/generic_name_patch.rb +17 -6
  74. data/lib/tapioca/static/symbol_loader.rb +3 -3
  75. data/lib/tapioca/static/symbol_table_parser.rb +6 -0
  76. data/lib/tapioca/version.rb +1 -1
  77. data/lib/tapioca.rb +0 -10
  78. metadata +8 -20
@@ -19,20 +19,26 @@ module Tapioca
19
19
  PROTECTED_INSTANCE_METHODS_METHOD = T.let(Module.instance_method(:protected_instance_methods), UnboundMethod)
20
20
  PRIVATE_INSTANCE_METHODS_METHOD = T.let(Module.instance_method(:private_instance_methods), UnboundMethod)
21
21
  METHOD_METHOD = T.let(Kernel.instance_method(:method), UnboundMethod)
22
+ UNDEFINED_CONSTANT = T.let(Module.new.freeze, Module)
22
23
 
23
24
  REQUIRED_FROM_LABELS = T.let(["<top (required)>", "<main>"].freeze, T::Array[String])
24
25
 
26
+ T::Sig::WithoutRuntime.sig { params(constant: BasicObject).returns(T::Boolean) }
27
+ def constant_defined?(constant)
28
+ !UNDEFINED_CONSTANT.eql?(constant)
29
+ end
30
+
25
31
  sig do
26
32
  params(
27
33
  symbol: String,
28
34
  inherit: T::Boolean,
29
- namespace: Module
35
+ namespace: Module,
30
36
  ).returns(BasicObject).checked(:never)
31
37
  end
32
38
  def constantize(symbol, inherit: false, namespace: Object)
33
39
  namespace.const_get(symbol, inherit)
34
40
  rescue NameError, LoadError, RuntimeError, ArgumentError, TypeError
35
- nil
41
+ UNDEFINED_CONSTANT
36
42
  end
37
43
 
38
44
  sig { params(object: BasicObject).returns(Class).checked(:never) }
@@ -177,6 +183,61 @@ module Tapioca
177
183
 
178
184
  T.cast(result, Module)
179
185
  end
186
+
187
+ sig { params(constant: Module).returns(T::Set[String]) }
188
+ def file_candidates_for(constant)
189
+ relevant_methods_for(constant).filter_map do |method|
190
+ method.source_location&.first
191
+ end.to_set
192
+ end
193
+
194
+ private
195
+
196
+ sig { params(constant: Module).returns(T::Array[UnboundMethod]) }
197
+ def relevant_methods_for(constant)
198
+ methods = methods_for(constant).select(&:source_location)
199
+ .reject { |x| method_defined_by_forwardable_module?(x) }
200
+
201
+ return methods unless methods.empty?
202
+
203
+ constants_of(constant).flat_map do |const_name|
204
+ if (mod = child_module_for_parent_with_name(constant, const_name.to_s))
205
+ relevant_methods_for(mod)
206
+ else
207
+ []
208
+ end
209
+ end
210
+ end
211
+
212
+ sig { params(constant: Module).returns(T::Array[UnboundMethod]) }
213
+ def methods_for(constant)
214
+ modules = [constant, singleton_class_of(constant)]
215
+ method_list_methods = [
216
+ PUBLIC_INSTANCE_METHODS_METHOD,
217
+ PROTECTED_INSTANCE_METHODS_METHOD,
218
+ PRIVATE_INSTANCE_METHODS_METHOD,
219
+ ]
220
+
221
+ modules.product(method_list_methods).flat_map do |mod, method_list_method|
222
+ method_list_method.bind_call(mod, false).map { |name| mod.instance_method(name) }
223
+ end
224
+ end
225
+
226
+ sig { params(parent: Module, name: String).returns(T.nilable(Module)) }
227
+ def child_module_for_parent_with_name(parent, name)
228
+ return if parent.autoload?(name)
229
+
230
+ child = constantize(name, inherit: true, namespace: parent)
231
+ return unless Module === child
232
+ return unless name_of(child) == "#{name_of(parent)}::#{name}"
233
+
234
+ child
235
+ end
236
+
237
+ sig { params(method: UnboundMethod).returns(T::Boolean) }
238
+ def method_defined_by_forwardable_module?(method)
239
+ method.source_location&.first == Object.const_source_location(:Forwardable)&.first
240
+ end
180
241
  end
181
242
  end
182
243
  end
@@ -5,6 +5,7 @@ module Tapioca
5
5
  module Runtime
6
6
  module Trackers
7
7
  module Autoload
8
+ extend Tracker
8
9
  extend T::Sig
9
10
 
10
11
  NOOP_METHOD = ->(*_args, **_kwargs, &_block) {}
@@ -28,6 +29,8 @@ module Tapioca
28
29
 
29
30
  sig { params(constant_name: String).void }
30
31
  def register(constant_name)
32
+ return unless enabled?
33
+
31
34
  @constant_names_registered_for_autoload << constant_name
32
35
  end
33
36
 
@@ -9,6 +9,7 @@ module Tapioca
9
9
  # correspondence between classes/modules and files, as this information isn't
10
10
  # available in the ruby runtime without extra accounting.
11
11
  module ConstantDefinition
12
+ extend Tracker
12
13
  extend Reflection
13
14
  extend T::Sig
14
15
 
@@ -20,7 +21,7 @@ module Tapioca
20
21
  @class_files = {}.compare_by_identity
21
22
 
22
23
  # Immediately activated upon load. Observes class/module definition.
23
- Tapioca.register_trace(:class) do |tp|
24
+ @class_tracepoint = TracePoint.trace(:class) do |tp|
24
25
  next if tp.self.singleton_class?
25
26
 
26
27
  key = tp.self
@@ -40,19 +41,26 @@ module Tapioca
40
41
  (@class_files[key] ||= Set.new) << loc
41
42
  end
42
43
 
43
- Tapioca.register_trace(:c_return) do |tp|
44
+ @creturn_tracepoint = TracePoint.trace(:c_return) do |tp|
44
45
  next unless tp.method_id == :new
45
- next unless Module === tp.return_value
46
46
 
47
47
  key = tp.return_value
48
+ next unless Module === key
49
+
48
50
  loc = build_constant_location(tp, caller_locations)
49
51
  (@class_files[key] ||= Set.new) << loc
50
52
  end
51
53
 
52
54
  class << self
55
+ def disable!
56
+ @class_tracepoint.disable
57
+ @creturn_tracepoint.disable
58
+ super
59
+ end
60
+
53
61
  def build_constant_location(tp, locations)
54
- file = resolve_loc(caller_locations)
55
- lineno = file == File.realpath(tp.path) ? tp.lineno : 0
62
+ file = resolve_loc(locations)
63
+ lineno = File.identical?(file, tp.path) ? tp.lineno : 0
56
64
 
57
65
  ConstantLocation.new(path: file, lineno: lineno)
58
66
  end
@@ -5,11 +5,11 @@ module Tapioca
5
5
  module Runtime
6
6
  module Trackers
7
7
  module Mixin
8
+ extend Tracker
8
9
  extend T::Sig
9
10
 
10
11
  @constants_to_mixin_locations = {}.compare_by_identity
11
12
  @mixins_to_constants = {}.compare_by_identity
12
- @enabled = true
13
13
 
14
14
  class Type < T::Enum
15
15
  enums do
@@ -28,31 +28,52 @@ module Tapioca
28
28
  .returns(T.type_parameter(:Result))
29
29
  end
30
30
  def with_disabled_registration(&block)
31
- @enabled = false
32
-
33
- block.call
34
- ensure
35
- @enabled = true
31
+ with_disabled_tracker(&block)
36
32
  end
37
33
 
38
- sig do
39
- params(
40
- constant: Module,
41
- mixin: Module,
42
- mixin_type: Type,
43
- ).void
44
- end
34
+ sig { params(constant: Module, mixin: Module, mixin_type: Type).void }
45
35
  def register(constant, mixin, mixin_type)
46
- return unless @enabled
36
+ return unless enabled?
47
37
 
48
38
  location = Reflection.resolve_loc(caller_locations)
49
39
 
50
- constants = constants_with_mixin(mixin)
51
- constants.fetch(mixin_type).store(constant, location)
40
+ register_with_location(constant, mixin, mixin_type, location)
41
+ end
42
+
43
+ def resolve_to_attached_class(constant, mixin, mixin_type)
44
+ attached_class = Reflection.attached_class_of(constant)
45
+ return unless attached_class
46
+
47
+ if mixin_type == Type::Include || mixin_type == Type::Prepend
48
+ location = mixin_location(mixin, mixin_type, constant)
49
+ register_with_location(constant, mixin, Type::Extend, T.must(location))
50
+ end
51
+
52
+ attached_class
52
53
  end
53
54
 
54
55
  sig { params(mixin: Module).returns(T::Hash[Type, T::Hash[Module, String]]) }
55
56
  def constants_with_mixin(mixin)
57
+ find_or_initialize_mixin_lookup(mixin)
58
+ end
59
+
60
+ sig { params(mixin: Module, mixin_type: Type, constant: Module).returns(T.nilable(String)) }
61
+ def mixin_location(mixin, mixin_type, constant)
62
+ find_or_initialize_mixin_lookup(mixin).dig(mixin_type, constant)
63
+ end
64
+
65
+ private
66
+
67
+ sig { params(constant: Module, mixin: Module, mixin_type: Type, location: String).void }
68
+ def register_with_location(constant, mixin, mixin_type, location)
69
+ return unless @enabled
70
+
71
+ constants = find_or_initialize_mixin_lookup(mixin)
72
+ constants.fetch(mixin_type).store(constant, location)
73
+ end
74
+
75
+ sig { params(mixin: Module).returns(T::Hash[Type, T::Hash[Module, String]]) }
76
+ def find_or_initialize_mixin_lookup(mixin)
56
77
  @mixins_to_constants[mixin] ||= {
57
78
  Type::Prepend => {}.compare_by_identity,
58
79
  Type::Include => {}.compare_by_identity,
@@ -74,8 +95,6 @@ class Module
74
95
  Tapioca::Runtime::Trackers::Mixin::Type::Prepend,
75
96
  )
76
97
 
77
- register_extend_on_attached_class(constant) if constant.singleton_class?
78
-
79
98
  super
80
99
  end
81
100
 
@@ -86,8 +105,6 @@ class Module
86
105
  Tapioca::Runtime::Trackers::Mixin::Type::Include,
87
106
  )
88
107
 
89
- register_extend_on_attached_class(constant) if constant.singleton_class?
90
-
91
108
  super
92
109
  end
93
110
 
@@ -99,21 +116,5 @@ class Module
99
116
  ) if Module === obj
100
117
  super
101
118
  end
102
-
103
- private
104
-
105
- # Including or prepending on a singleton class is functionally equivalent to extending the
106
- # attached class. Registering the mixin as an extend on the attached class ensures that
107
- # this mixin can be found whether searching for an include/prepend on the singleton class
108
- # or an extend on the attached class.
109
- def register_extend_on_attached_class(constant)
110
- attached_class = Tapioca::Runtime::Reflection.attached_class_of(constant)
111
-
112
- Tapioca::Runtime::Trackers::Mixin.register(
113
- T.cast(attached_class, Module),
114
- self,
115
- Tapioca::Runtime::Trackers::Mixin::Type::Extend,
116
- ) if attached_class
117
- end
118
119
  end)
119
120
  end
@@ -5,27 +5,40 @@ module Tapioca
5
5
  module Runtime
6
6
  module Trackers
7
7
  module RequiredAncestor
8
+ extend Tracker
8
9
  @required_ancestors_map = {}.compare_by_identity
9
10
 
10
11
  class << self
11
12
  extend T::Sig
12
13
 
13
- sig { params(requiring: T::Helpers, block: T.proc.returns(Module)).void }
14
+ sig { params(requiring: T::Helpers, block: T.proc.void).void }
14
15
  def register(requiring, block)
16
+ return unless enabled?
17
+
15
18
  ancestors = @required_ancestors_map[requiring] ||= []
16
19
  ancestors << block
17
20
  end
18
21
 
19
- sig { params(mod: Module).returns(T::Array[T.proc.returns(Module)]) }
22
+ sig { params(mod: Module).returns(T::Array[T.proc.void]) }
20
23
  def required_ancestors_blocks_by(mod)
21
24
  @required_ancestors_map[mod] || []
22
25
  end
23
26
 
24
- sig { params(mod: Module).returns(T::Array[T.nilable(Module)]) }
27
+ sig { params(mod: Module).returns(T::Array[T.untyped]) }
25
28
  def required_ancestors_by(mod)
26
29
  blocks = required_ancestors_blocks_by(mod)
27
30
  blocks.map do |block|
28
- block.call
31
+ # Common return values of `block.call` here could be a Module or a Sorbet's runtime value for T.class.
32
+ # But in reality it could be whatever the block has that can pass Sorbet's static check. Like
33
+ #
34
+ # ```
35
+ # requires_ancestor { T.class_of(Foo); nil }
36
+ # ```
37
+ #
38
+ # So it's not designed to be used at runtime and it's accidental that just calling `to_s` on the above
39
+ # common values can get us the correct value to generate type signatures. (See SorbetRequiredAncestors)
40
+ # Therefore, the return value `block.call` should be considered unreliable and treated with caution.
41
+ T.unsafe(block.call)
29
42
  rescue NameError
30
43
  # The ancestor required doesn't exist, let's return nil and let the compiler decide what to do.
31
44
  nil
@@ -0,0 +1,45 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module Tapioca
5
+ module Runtime
6
+ module Trackers
7
+ module Tracker
8
+ extend T::Sig
9
+ extend T::Helpers
10
+
11
+ abstract!
12
+
13
+ class << self
14
+ extend T::Sig
15
+
16
+ sig { params(base: T.all(Tracker, Module)).void }
17
+ def extended(base)
18
+ Trackers.register_tracker(base)
19
+ base.instance_exec do
20
+ @enabled = true
21
+ end
22
+ end
23
+ end
24
+
25
+ sig { void }
26
+ def disable!
27
+ @enabled = false
28
+ end
29
+
30
+ def enabled?
31
+ @enabled
32
+ end
33
+
34
+ def with_disabled_tracker(&block)
35
+ original_state = @enabled
36
+ @enabled = false
37
+
38
+ block.call
39
+ ensure
40
+ @enabled = original_state
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,6 +1,32 @@
1
- # typed: strict
1
+ # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
+ require "tapioca/runtime/trackers/tracker"
5
+
6
+ module Tapioca
7
+ module Runtime
8
+ module Trackers
9
+ extend T::Sig
10
+
11
+ @trackers = T.let([], T::Array[Tracker])
12
+
13
+ class << self
14
+ extend T::Sig
15
+
16
+ sig { void }
17
+ def disable_all!
18
+ @trackers.each(&:disable!)
19
+ end
20
+
21
+ sig { params(tracker: Tracker).void }
22
+ def register_tracker(tracker)
23
+ @trackers << tracker
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
4
30
  # The load order below is important:
5
31
  # ----------------------------------
6
32
  # We want the mixin tracker to be the first thing that is
@@ -28,7 +28,7 @@ module T
28
28
  fixed,
29
29
  lower,
30
30
  upper,
31
- bounds_proc
31
+ bounds_proc,
32
32
  ).tap do |type_variable|
33
33
  Tapioca::Runtime::GenericTypeRegistry.register_type_variable(self, type_variable)
34
34
  end
@@ -44,7 +44,7 @@ module T
44
44
  fixed,
45
45
  lower,
46
46
  upper,
47
- bounds_proc
47
+ bounds_proc,
48
48
  ).tap do |type_variable|
49
49
  Tapioca::Runtime::GenericTypeRegistry.register_type_variable(self, type_variable)
50
50
  end
@@ -82,6 +82,8 @@ module T
82
82
  def coerce(val)
83
83
  if val.is_a?(Tapioca::TypeVariableModule)
84
84
  val.coerce_to_type_variable
85
+ elsif val.respond_to?(:__tapioca_override_type)
86
+ val.__tapioca_override_type
85
87
  else
86
88
  super
87
89
  end
@@ -128,7 +130,7 @@ module Tapioca
128
130
  fixed: T.untyped,
129
131
  lower: T.untyped,
130
132
  upper: T.untyped,
131
- bounds_proc: T.nilable(T.proc.returns(T::Hash[Symbol, T.untyped]))
133
+ bounds_proc: T.nilable(T.proc.returns(T::Hash[Symbol, T.untyped])),
132
134
  ).void
133
135
  end
134
136
  def initialize(context, type, variance, fixed, lower, upper, bounds_proc)
@@ -164,10 +166,14 @@ module Tapioca
164
166
  constant_name&.split("::")&.last
165
167
  end
166
168
 
169
+ sig { returns(T::Boolean) }
170
+ def fixed?
171
+ bounds.key?(:fixed)
172
+ end
173
+
167
174
  sig { returns(String) }
168
175
  def serialize
169
- bounds = @bounds_proc.call
170
- fixed = bounds[:fixed].to_s if bounds.key?(:fixed)
176
+ fixed = bounds[:fixed].to_s if fixed?
171
177
  lower = bounds[:lower].to_s if bounds.key?(:lower)
172
178
  upper = bounds[:upper].to_s if bounds.key?(:upper)
173
179
 
@@ -176,7 +182,7 @@ module Tapioca
176
182
  @variance,
177
183
  fixed,
178
184
  upper,
179
- lower
185
+ lower,
180
186
  )
181
187
  end
182
188
 
@@ -213,5 +219,10 @@ module Tapioca
213
219
  ensure
214
220
  self.class.send(:remove_const, temp_name) if temp_name
215
221
  end
222
+
223
+ sig { returns(T::Hash[Symbol, T.untyped]) }
224
+ def bounds
225
+ @bounds ||= @bounds_proc.call
226
+ end
216
227
  end
217
228
  end
@@ -62,14 +62,14 @@ module Tapioca
62
62
 
63
63
  sig { params(paths: T::Array[Pathname]).returns(T::Set[String]) }
64
64
  def symbols_from_paths(paths)
65
- output = T.cast(Tempfile.create("sorbet") do |file|
65
+ output = Tempfile.create("sorbet") do |file|
66
66
  file.write(Array(paths).join("\n"))
67
67
  file.flush
68
68
 
69
69
  symbol_table_json_from("@#{file.path.shellescape}")
70
- end, T.nilable(String))
70
+ end
71
71
 
72
- return Set.new if output.nil? || output.empty?
72
+ return Set.new if output.empty?
73
73
 
74
74
  SymbolTableParser.parse_json(output)
75
75
  end
@@ -43,6 +43,12 @@ module Tapioca
43
43
 
44
44
  next if name.nil?
45
45
  next unless SKIP_PARSE_KINDS.include?(kind)
46
+
47
+ # Turn singleton class names to attached class names
48
+ if (match_data = name.match(/<Class:(.*)>/))
49
+ name = match_data[1]
50
+ end
51
+
46
52
  next if name.match?(/[<>()$]/)
47
53
  next if name.match?(/^[0-9]+$/)
48
54
  next if name == "T::Helpers"
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Tapioca
5
- VERSION = "0.10.1"
5
+ VERSION = "0.10.3"
6
6
  end
data/lib/tapioca.rb CHANGED
@@ -11,16 +11,6 @@ module Tapioca
11
11
  class << self
12
12
  extend T::Sig
13
13
 
14
- sig { params(trace_name: Symbol, block: T.proc.params(arg0: TracePoint).void).void }
15
- def register_trace(trace_name, &block)
16
- @traces << TracePoint.trace(trace_name, &block)
17
- end
18
-
19
- sig { void }
20
- def disable_traces
21
- @traces.each(&:disable)
22
- end
23
-
24
14
  sig do
25
15
  type_parameters(:Result)
26
16
  .params(blk: T.proc.returns(T.type_parameter(:Result)))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tapioca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ufuk Kayserilioglu
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2022-09-14 00:00:00.000000000 Z
14
+ date: 2022-11-10 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -55,20 +55,6 @@ dependencies:
55
55
  - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: 1.21.0
58
- - !ruby/object:Gem::Dependency
59
- name: pry
60
- requirement: !ruby/object:Gem::Requirement
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- version: 0.12.2
65
- type: :runtime
66
- prerelease: false
67
- version_requirements: !ruby/object:Gem::Requirement
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: 0.12.2
72
58
  - !ruby/object:Gem::Dependency
73
59
  name: rbi
74
60
  requirement: !ruby/object:Gem::Requirement
@@ -78,7 +64,7 @@ dependencies:
78
64
  version: 0.0.0
79
65
  - - ">="
80
66
  - !ruby/object:Gem::Version
81
- version: 0.0.14
67
+ version: 0.0.16
82
68
  type: :runtime
83
69
  prerelease: false
84
70
  version_requirements: !ruby/object:Gem::Requirement
@@ -88,21 +74,21 @@ dependencies:
88
74
  version: 0.0.0
89
75
  - - ">="
90
76
  - !ruby/object:Gem::Version
91
- version: 0.0.14
77
+ version: 0.0.16
92
78
  - !ruby/object:Gem::Dependency
93
79
  name: sorbet-static-and-runtime
94
80
  requirement: !ruby/object:Gem::Requirement
95
81
  requirements:
96
82
  - - ">="
97
83
  - !ruby/object:Gem::Version
98
- version: 0.5.9204
84
+ version: 0.5.9892
99
85
  type: :runtime
100
86
  prerelease: false
101
87
  version_requirements: !ruby/object:Gem::Requirement
102
88
  requirements:
103
89
  - - ">="
104
90
  - !ruby/object:Gem::Version
105
- version: 0.5.9204
91
+ version: 0.5.9892
106
92
  - !ruby/object:Gem::Dependency
107
93
  name: spoom
108
94
  requirement: !ruby/object:Gem::Requirement
@@ -168,6 +154,7 @@ files:
168
154
  - lib/tapioca/commands/annotations.rb
169
155
  - lib/tapioca/commands/check_shims.rb
170
156
  - lib/tapioca/commands/command.rb
157
+ - lib/tapioca/commands/command_without_tracker.rb
171
158
  - lib/tapioca/commands/configure.rb
172
159
  - lib/tapioca/commands/dsl.rb
173
160
  - lib/tapioca/commands/gem.rb
@@ -258,6 +245,7 @@ files:
258
245
  - lib/tapioca/runtime/trackers/constant_definition.rb
259
246
  - lib/tapioca/runtime/trackers/mixin.rb
260
247
  - lib/tapioca/runtime/trackers/required_ancestor.rb
248
+ - lib/tapioca/runtime/trackers/tracker.rb
261
249
  - lib/tapioca/sorbet_ext/fixed_hash_patch.rb
262
250
  - lib/tapioca/sorbet_ext/generic_name_patch.rb
263
251
  - lib/tapioca/sorbet_ext/name_patch.rb