Skip to content

Commit

Permalink
Merge pull request #409 from Shopify/at-rbs
Browse files Browse the repository at this point in the history
Migrate to RBS signatures supported by Sorbet
  • Loading branch information
Morriar authored Feb 21, 2025
2 parents e803b2c + a221bc2 commit 65dd068
Show file tree
Hide file tree
Showing 41 changed files with 3,934 additions and 16,916 deletions.
7 changes: 7 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@ AllCops:
Exclude:
- 'vendor/**/*'

Layout/LeadingCommentSpace:
AllowRBSInlineAnnotation: true

Layout/LineLength:
Max: 120
AllowedPatterns: ['\A\s*#:']

Sorbet:
Enabled: true

Expand Down
18 changes: 9 additions & 9 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,15 @@ GEM
rubocop-sorbet (0.8.7)
rubocop (>= 1)
ruby-progressbar (1.13.0)
sorbet (0.5.11834)
sorbet-static (= 0.5.11834)
sorbet-runtime (0.5.11834)
sorbet-static (0.5.11834-universal-darwin)
sorbet-static (0.5.11834-x86_64-linux)
sorbet-static-and-runtime (0.5.11834)
sorbet (= 0.5.11834)
sorbet-runtime (= 0.5.11834)
spoom (1.5.3)
sorbet (0.5.11842)
sorbet-static (= 0.5.11842)
sorbet-runtime (0.5.11842)
sorbet-static (0.5.11842-universal-darwin)
sorbet-static (0.5.11842-x86_64-linux)
sorbet-static-and-runtime (0.5.11842)
sorbet (= 0.5.11842)
sorbet-runtime (= 0.5.11842)
spoom (1.5.4)
erubi (>= 1.10.0)
prism (>= 0.28.0)
rbi (>= 0.2.3)
Expand Down
19 changes: 5 additions & 14 deletions lib/rbi/formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,10 @@ module RBI
class Formatter
extend T::Sig

sig { returns(T.nilable(Integer)) }
#: Integer?
attr_accessor :max_line_length

sig do
params(
add_sig_templates: T::Boolean,
group_nodes: T::Boolean,
max_line_length: T.nilable(Integer),
nest_singleton_methods: T::Boolean,
nest_non_public_members: T::Boolean,
sort_nodes: T::Boolean,
).void
end
#: (?add_sig_templates: bool, ?group_nodes: bool, ?max_line_length: Integer?, ?nest_singleton_methods: bool, ?nest_non_public_members: bool, ?sort_nodes: bool) -> void
def initialize(
add_sig_templates: false,
group_nodes: false,
Expand All @@ -34,18 +25,18 @@ def initialize(
@sort_nodes = sort_nodes
end

sig { params(file: RBI::File).returns(String) }
#: (RBI::File file) -> String
def print_file(file)
format_file(file)
file.string(max_line_length: @max_line_length)
end

sig { params(file: RBI::File).void }
#: (RBI::File file) -> void
def format_file(file)
format_tree(file.root)
end

sig { params(tree: RBI::Tree).void }
#: (RBI::Tree tree) -> void
def format_tree(tree)
tree.add_sig_templates! if @add_sig_templates
tree.nest_singleton_methods! if @nest_singleton_methods
Expand Down
59 changes: 37 additions & 22 deletions lib/rbi/index.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,37 @@ class Index < Visitor
class << self
extend T::Sig

sig { params(node: Node).returns(Index) }
#: (*Node node) -> Index
def index(*node)
index = Index.new
index.visit_all(node)
index
end
end

sig { void }
#: -> void
def initialize
super
@index = T.let({}, T::Hash[String, T::Array[Node]])
end

sig { returns(T::Array[String]) }
#: -> Array[String]
def keys
@index.keys
end

sig { params(id: String).returns(T::Array[Node]) }
#: (String id) -> Array[Node]
def [](id)
@index[id] ||= []
end

sig { params(nodes: Node).void }
#: (*Node nodes) -> void
def index(*nodes)
nodes.each { |node| visit(node) }
end

sig { override.params(node: T.nilable(Node)).void }
# @override
#: (Node? node) -> void
def visit(node)
return unless node

Expand All @@ -55,7 +56,7 @@ def visit(node)

private

sig { params(node: T.all(Indexable, Node)).void }
#: ((Indexable & Node) node) -> void
def index_node(node)
node.index_ids.each { |id| self[id] << node }
end
Expand All @@ -64,7 +65,7 @@ def index_node(node)
class Tree
extend T::Sig

sig { returns(Index) }
#: -> Index
def index
Index.index(self)
end
Expand All @@ -89,7 +90,8 @@ class Scope
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
[fully_qualified_name]
end
Expand All @@ -99,7 +101,8 @@ class Const
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
[fully_qualified_name]
end
Expand All @@ -109,7 +112,8 @@ class Attr
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
fully_qualified_names
end
Expand All @@ -119,7 +123,8 @@ class Method
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
[fully_qualified_name]
end
Expand All @@ -129,7 +134,8 @@ class Include
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
names.map { |name| "#{parent_scope&.fully_qualified_name}.include(#{name})" }
end
Expand All @@ -139,7 +145,8 @@ class Extend
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
names.map { |name| "#{parent_scope&.fully_qualified_name}.extend(#{name})" }
end
Expand All @@ -149,7 +156,8 @@ class MixesInClassMethods
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
names.map { |name| "#{parent_scope&.fully_qualified_name}.mixes_in_class_method(#{name})" }
end
Expand All @@ -159,7 +167,8 @@ class RequiresAncestor
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
[to_s]
end
Expand All @@ -169,7 +178,8 @@ class Helper
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
[to_s]
end
Expand All @@ -179,7 +189,8 @@ class TypeMember
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
[to_s]
end
Expand All @@ -189,7 +200,8 @@ class Send
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
["#{parent_scope&.fully_qualified_name}.#{method}"]
end
Expand All @@ -199,7 +211,8 @@ class TStructConst
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
fully_qualified_names
end
Expand All @@ -209,7 +222,8 @@ class TStructProp
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
fully_qualified_names
end
Expand All @@ -219,7 +233,8 @@ class TEnumBlock
extend T::Sig
include Indexable

sig { override.returns(T::Array[String]) }
# @override
#: -> Array[String]
def index_ids
[to_s]
end
Expand Down
20 changes: 6 additions & 14 deletions lib/rbi/loc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class Loc
class << self
extend T::Sig

sig { params(file: String, prism_location: Prism::Location).returns(Loc) }
#: (String file, Prism::Location prism_location) -> Loc
def from_prism(file, prism_location)
new(
file: file,
Expand All @@ -20,21 +20,13 @@ def from_prism(file, prism_location)
end
end

sig { returns(T.nilable(String)) }
#: String?
attr_reader :file

sig { returns(T.nilable(Integer)) }
#: Integer?
attr_reader :begin_line, :end_line, :begin_column, :end_column

sig do
params(
file: T.nilable(String),
begin_line: T.nilable(Integer),
end_line: T.nilable(Integer),
begin_column: T.nilable(Integer),
end_column: T.nilable(Integer),
).void
end
#: (?file: String?, ?begin_line: Integer?, ?end_line: Integer?, ?begin_column: Integer?, ?end_column: Integer?) -> void
def initialize(file: nil, begin_line: nil, end_line: nil, begin_column: nil, end_column: nil)
@file = file
@begin_line = begin_line
Expand All @@ -43,7 +35,7 @@ def initialize(file: nil, begin_line: nil, end_line: nil, begin_column: nil, end
@end_column = end_column
end

sig { returns(String) }
#: -> String
def to_s
if end_line && end_column
"#{file}:#{begin_line}:#{begin_column}-#{end_line}:#{end_column}"
Expand All @@ -52,7 +44,7 @@ def to_s
end
end

sig { returns(T.nilable(String)) }
#: -> String?
def source
file = self.file
return unless file
Expand Down
Loading

0 comments on commit 65dd068

Please sign in to comment.