From 44fa242ad090ae3be16e564af0d8aa0966458528 Mon Sep 17 00:00:00 2001 From: alpaca-tc Date: Thu, 23 May 2024 23:46:41 +0900 Subject: [PATCH] Early return nil if source_name is nil --- lib/diver_down/trace/session.rb | 2 ++ spec/diver_down/trace/tracer_spec.rb | 37 ++++++++++++++++++++++++++ spec/fixtures/tracer_nil_name_class.rb | 17 ++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 spec/fixtures/tracer_nil_name_class.rb diff --git a/lib/diver_down/trace/session.rb b/lib/diver_down/trace/session.rb index 0c74a89..c73c2a1 100644 --- a/lib/diver_down/trace/session.rb +++ b/lib/diver_down/trace/session.rb @@ -155,6 +155,8 @@ def normalize_module_name(mod, tp) end def constantizable_source_name(source_name) + return if source_name.nil? + DiverDown::Helper.constantize(source_name) source_name rescue NameError diff --git a/spec/diver_down/trace/tracer_spec.rb b/spec/diver_down/trace/tracer_spec.rb index f725e52..b112b06 100644 --- a/spec/diver_down/trace/tracer_spec.rb +++ b/spec/diver_down/trace/tracer_spec.rb @@ -782,6 +782,43 @@ def self.wrap )) end + it 'traces tracer_nil_name_class.rb' do + definition = trace_fixture( + 'tracer_nil_name_class.rb', + caller_paths: [fixture_path('tracer_nil_name_class.rb')], + module_set: { + paths: [fixture_path('tracer_nil_name_class.rb')], + } + ) + + expect(definition.to_h).to match(fill_default( + title: 'title', + sources: [ + { + source_name: 'AntipollutionModule::A', + dependencies: [ + { + source_name: 'AntipollutionModule::B', + method_ids: [ + { + name: 'call_b', + context: 'class', + paths: [ + match(/tracer_nil_name_class\.rb:\d+/), + ], + }, + ], + }, + ], + }, + { + source_name: 'AntipollutionModule::B', + dependencies: [], + }, + ] + )) + end + it 'traces wrapped in the module to be target before starting the trace' do dir = Dir.mktmpdir File.write(File.join(dir, 'a.rb'), <<~RUBY) diff --git a/spec/fixtures/tracer_nil_name_class.rb b/spec/fixtures/tracer_nil_name_class.rb new file mode 100644 index 0000000..c62541a --- /dev/null +++ b/spec/fixtures/tracer_nil_name_class.rb @@ -0,0 +1,17 @@ +def run + class_a = Class.new(A) do + def self.name = nil + end + + class_a.call_b +end + +class A + def self.call_b + B.call_b + end +end + +class B + def self.call_b = '' +end