From e1c5bff390d2378e6eb87eb9a8b79e9cf16eebbc Mon Sep 17 00:00:00 2001 From: Hibariya Date: Sun, 15 Dec 2024 12:13:09 +0000 Subject: [PATCH] Introduce :trace_point_filter option for filtering purpose and re-run rake sig --- known_sig/orthoses/trace.rbs | 6 +++--- known_sig/orthoses/trace/attribute.rbs | 2 +- known_sig/orthoses/trace/method.rbs | 2 +- lib/orthoses/trace/attribute.rb | 3 ++- lib/orthoses/trace/attribute_test.rb | 6 +++--- lib/orthoses/trace/method.rb | 3 ++- lib/orthoses/trace/method_test.rb | 7 +++---- lib/orthoses/trace/targetable.rb | 16 +++++++--------- sig/orthoses/content.rbs | 1 + sig/orthoses/resolve_type_names.rbs | 9 +++++++++ sig/orthoses/trace.rbs | 15 +++++++++------ 11 files changed, 41 insertions(+), 29 deletions(-) diff --git a/known_sig/orthoses/trace.rbs b/known_sig/orthoses/trace.rbs index 456204d..26c93f7 100644 --- a/known_sig/orthoses/trace.rbs +++ b/known_sig/orthoses/trace.rbs @@ -1,10 +1,10 @@ module Orthoses class Trace - interface _CallablePatterns - def call: (String, TracePoint) -> boolish + interface _CallableFilter + def call: (String) -> boolish end - def initialize: (Orthoses::_Call loader, patterns: Array[String] | _CallablePatterns, ?sort_union_types: bool?) -> void + def initialize: (Orthoses::_Call loader, patterns: Array[String], trace_point_filter: _CallableFilter?, ?sort_union_types: bool?) -> void def call: () -> Orthoses::store end end diff --git a/known_sig/orthoses/trace/attribute.rbs b/known_sig/orthoses/trace/attribute.rbs index 0bc2e92..8ca8346 100644 --- a/known_sig/orthoses/trace/attribute.rbs +++ b/known_sig/orthoses/trace/attribute.rbs @@ -3,7 +3,7 @@ module Orthoses class Attribute include Orthoses::Trace::Targetable - def initialize: (Orthoses::_Call loader, patterns: Array[String] | Orthoses::Trace::_CallablePatterns, ?sort_union_types: bool?) -> void + def initialize: (Orthoses::_Call loader, patterns: Array[String], trace_point_filter: Orthoses::Trace::_CallableFilter?, ?sort_union_types: bool?) -> void def call: () -> Orthoses::store end end diff --git a/known_sig/orthoses/trace/method.rbs b/known_sig/orthoses/trace/method.rbs index 08d531a..217b8e0 100644 --- a/known_sig/orthoses/trace/method.rbs +++ b/known_sig/orthoses/trace/method.rbs @@ -3,7 +3,7 @@ module Orthoses class Method include Orthoses::Trace::Targetable - def initialize: (Orthoses::_Call loader, patterns: Array[String] | Orthoses::Trace::_CallablePatterns, ?sort_union_types: bool?) -> void + def initialize: (Orthoses::_Call loader, patterns: Array[String], trace_point_filter: Orthoses::Trace::_CallableFilter?, ?sort_union_types: bool?) -> void def call: () -> Orthoses::store end end diff --git a/lib/orthoses/trace/attribute.rb b/lib/orthoses/trace/attribute.rb index 56ab1b0..2003a1e 100644 --- a/lib/orthoses/trace/attribute.rb +++ b/lib/orthoses/trace/attribute.rb @@ -23,9 +23,10 @@ def attr_writer(*names) include Targetable - def initialize(loader, patterns:, sort_union_types: true) + def initialize(loader, patterns:, trace_point_filter: nil, sort_union_types: true) @loader = loader @patterns = patterns + @trace_point_filter = trace_point_filter @sort_union_types = sort_union_types @captured_dict = Hash.new { |h, k| h[k] = Hash.new { |hh, kk| hh[kk] = [] } } diff --git a/lib/orthoses/trace/attribute_test.rb b/lib/orthoses/trace/attribute_test.rb index abfcfe7..139518b 100644 --- a/lib/orthoses/trace/attribute_test.rb +++ b/lib/orthoses/trace/attribute_test.rb @@ -120,8 +120,8 @@ class TraceAttributeTest::Foo::Baz end end - def test_pattern_proc(t) - patterns = ->(name) { name == "TraceAttributeTest::Foo" } + def test_trace_point_filter(t) + trace_point_filter = ->(name) { name == "TraceAttributeTest::Foo" } store = Orthoses::Trace::Attribute.new(->{ LOADER_ATTRIBUTE.call foo = Foo.new @@ -129,7 +129,7 @@ def test_pattern_proc(t) Foo::Bar.new.attr_acce_publ = /reg/ Orthoses::Utils.new_store - }, patterns: patterns).call + }, patterns: %w[*], trace_point_filter: trace_point_filter).call actual = store.map { |n, c| c.to_rbs }.join("\n") expect = <<~RBS diff --git a/lib/orthoses/trace/method.rb b/lib/orthoses/trace/method.rb index ba84803..3e1dd7a 100644 --- a/lib/orthoses/trace/method.rb +++ b/lib/orthoses/trace/method.rb @@ -7,9 +7,10 @@ class Method Info = Struct.new(:key, :op_name_types, :raised, keyword_init: true) include Targetable - def initialize(loader, patterns:, sort_union_types: true) + def initialize(loader, patterns:, trace_point_filter: nil, sort_union_types: true) @loader = loader @patterns = patterns + @trace_point_filter = trace_point_filter @sort_union_types = sort_union_types @stack = [] diff --git a/lib/orthoses/trace/method_test.rb b/lib/orthoses/trace/method_test.rb index a87ea41..ea1ce4a 100644 --- a/lib/orthoses/trace/method_test.rb +++ b/lib/orthoses/trace/method_test.rb @@ -140,9 +140,8 @@ def self.a: () -> Integer end end - def test_pattern_proc(t) - # only non-private methods - patterns = ->(name) { name == "TraceMethodTest::M" } + def test_trace_point_filter(t) + trace_point_filter = ->(name) { name == "TraceMethodTest::M" } store = Orthoses::Trace::Method.new(-> { LOADER_METHOD.call @@ -151,7 +150,7 @@ def test_pattern_proc(t) m.call_priv(true) Orthoses::Utils.new_store - }, patterns: patterns).call + }, patterns: %w[*], trace_point_filter: trace_point_filter).call actual = store.map { |n, c| c.to_rbs }.join("\n") expect = <<~RBS diff --git a/lib/orthoses/trace/targetable.rb b/lib/orthoses/trace/targetable.rb index a76dd39..1d260c7 100644 --- a/lib/orthoses/trace/targetable.rb +++ b/lib/orthoses/trace/targetable.rb @@ -4,15 +4,13 @@ module Orthoses class Trace module Targetable def target?(name) - if @trace_point_filter - @trace_point_filter.call(name) - else - @patterns.any? do |pattern| - if pattern.end_with?("*") - (name || "").start_with?(pattern.chop) - else - name == pattern - end + return false if @trace_point_filter && !@trace_point_filter.call(name) + + @patterns.any? do |pattern| + if pattern.end_with?("*") + (name || "").start_with?(pattern.chop) + else + name == pattern end end end diff --git a/sig/orthoses/content.rbs b/sig/orthoses/content.rbs index ff635f5..7465a68 100644 --- a/sig/orthoses/content.rbs +++ b/sig/orthoses/content.rbs @@ -86,6 +86,7 @@ class Orthoses::Content::HeaderBuilder @resolver: untyped def initialize: (env: untyped) -> void def build: (entry: untyped, ?name_hint: untyped?) -> untyped + private def resolve_full_name: (entry: untyped) -> untyped private def build_module: (entry: untyped, ?name_hint: untyped?) -> ::String private def build_class: (entry: untyped, ?name_hint: untyped?) -> ::String private def build_super_class: (untyped primary) -> (nil | untyped) diff --git a/sig/orthoses/resolve_type_names.rbs b/sig/orthoses/resolve_type_names.rbs index a80ea96..2816d42 100644 --- a/sig/orthoses/resolve_type_names.rbs +++ b/sig/orthoses/resolve_type_names.rbs @@ -5,4 +5,13 @@ class Orthoses::ResolveTypeNames @loader: untyped def initialize: (untyped loader) -> void def call: () -> untyped + private def content_header: (untyped entry) -> untyped + private def class_header: (untyped decl) -> ::String + private def module_header: (untyped decl) -> ::String +end + +module Orthoses::ResolveTypeNames::WriterCopy + def name_and_args: (untyped name, untyped args) -> (::String | nil) + + def name_and_params: (untyped name, untyped params) -> ::String end diff --git a/sig/orthoses/trace.rbs b/sig/orthoses/trace.rbs index b80d52f..db4cb18 100644 --- a/sig/orthoses/trace.rbs +++ b/sig/orthoses/trace.rbs @@ -3,17 +3,19 @@ class Orthoses::Trace @loader: untyped @patterns: untyped + @trace_point_filter: untyped @sort_union_types: untyped - def initialize: (Orthoses::_Call loader, patterns: Array[String] | _CallablePatterns, ?sort_union_types: bool?) -> void + def initialize: (Orthoses::_Call loader, patterns: Array[String], trace_point_filter: _CallableFilter?, ?sort_union_types: bool?) -> void def call: () -> Orthoses::store end class Orthoses::Trace::Attribute @loader: untyped @patterns: untyped + @trace_point_filter: untyped @sort_union_types: untyped @captured_dict: untyped - def initialize: (Orthoses::_Call loader, patterns: Array[String] | Orthoses::Trace::_CallablePatterns, ?sort_union_types: bool?) -> void + def initialize: (Orthoses::_Call loader, patterns: Array[String], trace_point_filter: Orthoses::Trace::_CallableFilter?, ?sort_union_types: bool?) -> void def call: () -> Orthoses::store private def build_trace_hook: () -> untyped include Orthoses::Trace::Targetable @@ -32,11 +34,12 @@ end class Orthoses::Trace::Method @loader: untyped @patterns: untyped + @trace_point_filter: untyped @sort_union_types: untyped @stack: untyped @args_return_map: untyped @alias_map: untyped - def initialize: (Orthoses::_Call loader, patterns: Array[String] | Orthoses::Trace::_CallablePatterns, ?sort_union_types: bool?) -> void + def initialize: (Orthoses::_Call loader, patterns: Array[String], trace_point_filter: Orthoses::Trace::_CallableFilter?, ?sort_union_types: bool?) -> void def call: () -> Orthoses::store private def build_trace_point: () -> untyped private def build_members: () -> untyped @@ -49,9 +52,9 @@ class Orthoses::Trace::Method::Info < ::Struct[untyped] end module Orthoses::Trace::Targetable - def target?: (untyped name, untyped tp) -> untyped + def target?: (untyped name) -> (false | untyped) end -interface Orthoses::Trace::_CallablePatterns - def call: (String, TracePoint) -> boolish +interface Orthoses::Trace::_CallableFilter + def call: (String) -> boolish end