From 428738deb2d34dcdc3d7263cfb18eca08f5d2517 Mon Sep 17 00:00:00 2001 From: Aditya chauhan Date: Mon, 27 Jul 2026 22:47:28 +0530 Subject: [PATCH 1/2] Add rewrite_methods to Redefiner, replacing untyped_methods when type checking is off --- lib/definitions/redefiner.rb | 16 ++++++++++++++-- lib/low_type.rb | 7 +++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/definitions/redefiner.rb b/lib/definitions/redefiner.rb index 4b4a79f..3ef50e6 100644 --- a/lib/definitions/redefiner.rb +++ b/lib/definitions/redefiner.rb @@ -27,11 +27,11 @@ module Low class Redefiner class << self # TODO: Pass in "klass" and use it to class_eval/eval methods in the binding of the class that included LowType. - def redefine(method_proxies:, class_proxy:) + def redefine(method_proxies:, class_proxy:, klass: nil) if LowType.config.type_checking typed_methods(method_proxies:, class_proxy:) else - untyped_methods(method_proxies:, class_proxy:) + rewrite_methods(method_proxies:, class_proxy:, klass:) end end @@ -52,6 +52,18 @@ def untyped_args(args:, kwargs:, method_proxy:) # rubocop:disable Metrics/AbcSiz private + def rewrite_methods(method_proxies:, class_proxy:, klass:) + method_proxies.values.filter(&:expressions?).each do |method_proxy| + method_proxy.rewrite_signature + + klass.class_eval(method_proxy.export, method_proxy.file_path, method_proxy.start_line) + + if class_proxy.private_start_line && method_proxy.start_line > class_proxy.private_start_line + klass.send(:private, method_proxy.name) + end + end + end + def typed_methods(method_proxies:, class_proxy:) # rubocop:disable Metrics Module.new do method_proxies.values.filter(&:expressions?).each do |method_proxy| diff --git a/lib/low_type.rb b/lib/low_type.rb index 304d430..4c98dbd 100644 --- a/lib/low_type.rb +++ b/lib/low_type.rb @@ -52,8 +52,11 @@ def self.included(klass) Low::Evaluator.evaluate(method_proxies: class_proxy.keyed_methods, class_binding: class_proxy.class_binding) - klass.prepend Low::Redefiner.redefine(method_proxies: class_proxy.instance_methods, class_proxy:) - klass.singleton_class.prepend Low::Redefiner.redefine(method_proxies: class_proxy.class_methods, class_proxy:) + result = Low::Redefiner.redefine(method_proxies: class_proxy.instance_methods, class_proxy:, klass:) + klass.prepend result if result + + singleton_result = Low::Redefiner.redefine(method_proxies: class_proxy.class_methods, class_proxy:, klass: klass.singleton_class) + klass.singleton_class.prepend singleton_result if singleton_result Low::Adapter::Loader.load(klass:, class_proxy:) From ceaea17481261beecb58b9467c6bd5f8a5c9c441 Mon Sep 17 00:00:00 2001 From: Aditya chauhan Date: Thu, 30 Jul 2026 03:46:38 +0530 Subject: [PATCH 2/2] Fix rewrite_methods to return nil, preventing Array prepend error --- lib/definitions/redefiner.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/definitions/redefiner.rb b/lib/definitions/redefiner.rb index 3ef50e6..9d721f1 100644 --- a/lib/definitions/redefiner.rb +++ b/lib/definitions/redefiner.rb @@ -62,6 +62,8 @@ def rewrite_methods(method_proxies:, class_proxy:, klass:) klass.send(:private, method_proxy.name) end end + + nil end def typed_methods(method_proxies:, class_proxy:) # rubocop:disable Metrics