Skip to content

Commit 93ec969

Browse files
authored
Merge pull request #746 from Shopify/uk-granular-error-handling
Add granular error handling for RBS to RBI translation
2 parents f67912b + 533818f commit 93ec969

2 files changed

Lines changed: 36 additions & 14 deletions

File tree

lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def visit_def_node(node)
5555
signature.location.end_offset,
5656
sig.string,
5757
)
58-
rescue ::RBS::ParsingError
58+
rescue ::RBS::ParsingError, ::RBI::Error
5959
# Ignore signatures with errors
6060
next
6161
end
@@ -106,6 +106,9 @@ def visit_attr(node)
106106
signature.location.end_offset,
107107
sig.string,
108108
)
109+
rescue ::RBS::ParsingError, ::RBI::Error
110+
# Ignore signatures with errors
111+
next
109112
end
110113
end
111114

@@ -154,6 +157,9 @@ def apply_class_annotations(node)
154157

155158
newline = node.body.nil? ? "" : "\n"
156159
@rewriter << Source::Insert.new(insert_pos, "\n#{indent}#{content}#{newline}")
160+
rescue ::RBS::ParsingError, ::RBI::Error
161+
# Ignore annotations with errors
162+
next
157163
end
158164
end
159165

@@ -195,6 +201,9 @@ def apply_class_annotations(node)
195201

196202
newline = node.body.nil? ? "" : "\n"
197203
@rewriter << Source::Insert.new(insert_pos, "\n#{indent}#{type_member}#{newline}")
204+
rescue ::RBS::ParsingError, ::RBI::Error
205+
# Ignore signatures with errors
206+
next
198207
end
199208
end
200209
end

rbi/spoom.rbi

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,12 @@ module Spoom::Context::Sorbet
432432
end
433433

434434
class Spoom::Counters < ::Hash
435+
extend T::Generic
436+
437+
K = type_member { { fixed: String } }
438+
V = type_member { { fixed: Integer } }
439+
Elem = type_member { { fixed: [String, Integer] } }
440+
435441
sig { void }
436442
def initialize; end
437443

@@ -2465,25 +2471,29 @@ end
24652471
class Spoom::ParseError < ::Spoom::Error; end
24662472

24672473
class Spoom::Poset
2474+
extend T::Generic
2475+
2476+
E = type_member { { upper: Object } }
2477+
24682478
sig { void }
24692479
def initialize; end
24702480

2471-
sig { params(value: T.untyped).returns(Spoom::Poset::Element[T.untyped]) }
2481+
sig { params(value: E).returns(Spoom::Poset::Element[E]) }
24722482
def [](value); end
24732483

2474-
sig { params(from: T.untyped, to: T.untyped).void }
2484+
sig { params(from: E, to: E).void }
24752485
def add_direct_edge(from, to); end
24762486

2477-
sig { params(value: T.untyped).returns(Spoom::Poset::Element[T.untyped]) }
2487+
sig { params(value: E).returns(Spoom::Poset::Element[E]) }
24782488
def add_element(value); end
24792489

2480-
sig { params(from: T.untyped, to: T.untyped).returns(T::Boolean) }
2490+
sig { params(from: E, to: E).returns(T::Boolean) }
24812491
def direct_edge?(from, to); end
24822492

2483-
sig { params(from: T.untyped, to: T.untyped).returns(T::Boolean) }
2493+
sig { params(from: E, to: E).returns(T::Boolean) }
24842494
def edge?(from, to); end
24852495

2486-
sig { params(value: T.untyped).returns(T::Boolean) }
2496+
sig { params(value: E).returns(T::Boolean) }
24872497
def element?(value); end
24882498

24892499
sig { params(direct: T::Boolean, transitive: T::Boolean).void }
@@ -2494,36 +2504,39 @@ class Spoom::Poset
24942504
end
24952505

24962506
class Spoom::Poset::Element
2507+
extend T::Generic
24972508
include ::Comparable
24982509

2499-
sig { params(value: T.untyped).void }
2510+
E = type_member { { upper: Object } }
2511+
2512+
sig { params(value: E).void }
25002513
def initialize(value); end
25012514

25022515
sig { params(other: T.untyped).returns(T.nilable(::Integer)) }
25032516
def <=>(other); end
25042517

2505-
sig { returns(T::Array[T.untyped]) }
2518+
sig { returns(T::Array[E]) }
25062519
def ancestors; end
25072520

2508-
sig { returns(T::Array[T.untyped]) }
2521+
sig { returns(T::Array[E]) }
25092522
def children; end
25102523

2511-
sig { returns(T::Array[T.untyped]) }
2524+
sig { returns(T::Array[E]) }
25122525
def descendants; end
25132526

25142527
def dfroms; end
25152528

2516-
sig { returns(T::Set[Spoom::Poset::Element[T.untyped]]) }
2529+
sig { returns(T::Set[Spoom::Poset::Element[E]]) }
25172530
def dtos; end
25182531

25192532
def froms; end
25202533

2521-
sig { returns(T::Array[T.untyped]) }
2534+
sig { returns(T::Array[E]) }
25222535
def parents; end
25232536

25242537
def tos; end
25252538

2526-
sig { returns(T.untyped) }
2539+
sig { returns(E) }
25272540
def value; end
25282541
end
25292542

0 commit comments

Comments
 (0)