Skip to content

Commit

Permalink
TMP
Browse files Browse the repository at this point in the history
  • Loading branch information
Morriar committed Feb 10, 2025
1 parent ab7bd60 commit f762059
Show file tree
Hide file tree
Showing 30 changed files with 979 additions and 1,114 deletions.
9 changes: 9 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ AllCops:
Exclude:
- 'vendor/**/*'

Layout/LeadingCommentSpace:
Enabled: true
AllowRBSInlineAnnotation: true

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

Sorbet:
Enabled: true

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
62 changes: 39 additions & 23 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 @@ -81,15 +82,17 @@ module Indexable
#
# Some nodes can have multiple ids, for example an attribute accessor matches the ID of the
# getter and the setter.
sig { abstract.returns(T::Array[String]) }
# @abstract
#: -> Array[String]
def index_ids; end
end

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 +102,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 +113,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 +124,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 +135,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 +146,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 +157,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 +168,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 +179,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 +190,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 +201,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 +212,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 +223,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 +234,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 f762059

Please sign in to comment.