Skip to content

Commit ce69f31

Browse files
p-ddsignclaude
andcommitted
Fix Steep failures from over-tight type-fill + reinstate scheduler_loop ignore
CI's Steep run flagged 10 errors after the previous "fill in concrete types" commit. Two type-fill changes were too tight, and one steep:ignore removal was unverified locally because libdatadog version mismatch blocked Steep here at the time. CI surfaced all three. 1. Component @logger / initialize logger / environment_supported? logger: revert to `untyped`. The tightened `SymbolDatabase::Logger` type didn't match Uploader's `Datadog::Core::Logger` parameter type, surfacing a long-standing inconsistency between the SymDB Logger wrapper and the downstream component sig declarations. Reverting to `untyped` matches the established cross-component logger-handoff convention (see DI's sigs for the same pattern); fixing the underlying inconsistency in Uploader / Extractor / ScopeBatcher sigs is out of scope for this PR. 2. Remote process_change `change` and receiver block's `changes`: revert to `untyped`. The union type `Repository::Change::Deleted | ::Inserted | ::Updated` looked right but Steep cannot narrow the union by the `case change.type` dispatch the code uses — `.content` exists only on Inserted/Updated, `.previous` only on Deleted/Updated, so every access through the union flagged. The runtime dispatch via `.type` symbol matches what the code does correctly; reverting to `untyped` matches the pattern. (DI's remote.rbs takes the same approach.) 3. scheduler_loop in component.rb:306: reinstate a per-line `# steep:ignore NoMethod` on the `@scheduled_at - Time.get_time` line, with an inline comment explaining that Steep does not narrow nullable instance variables across an `if @scheduled_at.nil?` check. Per-line rather than the previously removed block-level ignore — only one line needs suppression. Verification: - bundle exec steep check → No type error detected. (locally, with libdatadog 33.0.0.1.0 now installed) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 70b18b9 commit ce69f31

3 files changed

Lines changed: 10 additions & 6 deletions

File tree

lib/datadog/symbol_database/component.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,11 @@ def scheduler_loop
303303
@scheduler_signaled = false
304304
@scheduler_cv.wait(@scheduler_mutex)
305305
else
306-
remaining = @scheduled_at - Datadog::Core::Utils::Time.get_time
306+
# steep:ignore NoMethod — Steep does not narrow @scheduled_at from `Float?`
307+
# to `Float` across the `if @scheduled_at.nil?` check above (instance-variable
308+
# narrowing is not tracked). Runtime is safe: the else branch only runs when
309+
# the variable is non-nil.
310+
remaining = @scheduled_at - Datadog::Core::Utils::Time.get_time # steep:ignore NoMethod
307311
if remaining > 0
308312
# Wait until the debounce deadline. Any signal (start_upload,
309313
# stop_upload, shutdown!) wakes us early; we always re-loop

sig/datadog/symbol_database/component.rbs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module Datadog
1515

1616
@settings: Datadog::Core::Configuration::Settings
1717
@agent_settings: Datadog::Core::Configuration::AgentSettings
18-
@logger: SymbolDatabase::Logger
18+
@logger: untyped
1919
@extractor: Extractor
2020
@uploader: Uploader
2121
@scope_batcher: ScopeBatcher
@@ -33,7 +33,7 @@ module Datadog
3333

3434
def self.build: (Datadog::Core::Configuration::Settings settings, Datadog::Core::Configuration::AgentSettings agent_settings, untyped logger) -> Component?
3535

36-
def initialize: (Datadog::Core::Configuration::Settings settings, Datadog::Core::Configuration::AgentSettings agent_settings, SymbolDatabase::Logger logger) -> void
36+
def initialize: (Datadog::Core::Configuration::Settings settings, Datadog::Core::Configuration::AgentSettings agent_settings, untyped logger) -> void
3737

3838
attr_reader settings: Datadog::Core::Configuration::Settings
3939
attr_reader last_upload_time: Time?
@@ -54,7 +54,7 @@ module Datadog
5454

5555
private
5656

57-
def self.environment_supported?: (SymbolDatabase::Logger logger) -> bool
57+
def self.environment_supported?: (untyped logger) -> bool
5858

5959
def ensure_scheduler_thread: () -> void
6060

sig/datadog/symbol_database/remote.rbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ module Datadog
99

1010
def self.receivers: (Datadog::Core::Telemetry::Component telemetry) -> Array[Core::Remote::Dispatcher::Receiver]
1111

12-
def self.receiver: (?Array[String] products) { (Datadog::Core::Remote::Configuration::Repository repository, Array[Datadog::Core::Remote::Configuration::Repository::change] changes) -> void } -> Array[Core::Remote::Dispatcher::Receiver]
12+
def self.receiver: (?Array[String] products) { (Datadog::Core::Remote::Configuration::Repository repository, ::Array[untyped] changes) -> void } -> Array[Core::Remote::Dispatcher::Receiver]
1313

14-
def self.process_change: (Component component, Datadog::Core::Remote::Configuration::Repository::change change) -> void
14+
def self.process_change: (Component component, untyped change) -> void
1515

1616
def self.enable_upload: (Component component, Datadog::Core::Remote::Configuration::Content content) -> void
1717

0 commit comments

Comments
 (0)