Class: RDoc::Generator::Markdown::RbsSignatureIndex
- Inherits:
-
Object
- Object
- RDoc::Generator::Markdown::RbsSignatureIndex
- Defined in:
- lib/rdoc/generator/markdown/rbs_signature_index.rb
Overview
Optional lookup of method signatures parsed from RBS files.
Class Method Summary collapse
-
.add_method_signature(signatures, klass:, method:) ⇒ void
Adds one RBS-parsed method signature to the lookup.
-
.build(files) ⇒ RDoc::Generator::Markdown::RbsSignatureIndex
Builds a signature index from RBS files included in an RDoc run.
-
.parsed_classes(file) ⇒ Array<RDoc::Context>
Parses one RBS file into RDoc class/module objects.
-
.signatures_from(files) ⇒ Hash{Array => String}
Builds signatures by reusing RBS’s own RDoc parser.
Instance Method Summary collapse
-
#any? ⇒ Boolean
Checks whether any RBS signatures were parsed.
-
#initialize(signatures) ⇒ RbsSignatureIndex
constructor
A new instance of RbsSignatureIndex.
-
#signature_for(method) ⇒ String?
Looks up the RBS signature for an RDoc method.
Constructor Details
#initialize(signatures) ⇒ RbsSignatureIndex
Returns a new instance of RbsSignatureIndex.
59 60 61 |
# File 'lib/rdoc/generator/markdown/rbs_signature_index.rb', line 59 def initialize(signatures) @signatures = signatures end |
Class Method Details
.add_method_signature(signatures, klass:, method:) ⇒ void
This method returns an undefined value.
Adds one RBS-parsed method signature to the lookup.
50 51 52 53 54 55 56 |
# File 'lib/rdoc/generator/markdown/rbs_signature_index.rb', line 50 def self.add_method_signature(signatures, klass:, method:) signatures[[klass.full_name, method.singleton, method.name]] = method.param_seq return unless method.name == "initialize" && !method.singleton signatures[[klass.full_name, true, "new"]] = method.param_seq end |
.build(files) ⇒ RDoc::Generator::Markdown::RbsSignatureIndex
Builds a signature index from RBS files included in an RDoc run.
10 11 12 13 |
# File 'lib/rdoc/generator/markdown/rbs_signature_index.rb', line 10 def self.build(files) rbs_files = files.select { |file| File.extname(file) == ".rbs" } new(signatures_from(rbs_files)) end |
.parsed_classes(file) ⇒ Array<RDoc::Context>
Parses one RBS file into RDoc class/module objects.
35 36 37 38 39 40 41 |
# File 'lib/rdoc/generator/markdown/rbs_signature_index.rb', line 35 def self.parsed_classes(file) store = RDoc::Store.new(RDoc::Options.new) top_level = store.add_file(file) parser = RDoc::Parser.for(top_level, File.read(file), store., nil) parser.scan store.all_classes_and_modules end |
.signatures_from(files) ⇒ Hash{Array => String}
Builds signatures by reusing RBS’s own RDoc parser.
20 21 22 23 24 25 26 27 28 |
# File 'lib/rdoc/generator/markdown/rbs_signature_index.rb', line 20 def self.signatures_from(files) files.each_with_object({}) do |file, signatures| parsed_classes(file).each do |klass| klass.method_list.each do |method| add_method_signature(signatures, klass: klass, method: method) end end end end |
Instance Method Details
#any? ⇒ Boolean
Checks whether any RBS signatures were parsed.
75 76 77 |
# File 'lib/rdoc/generator/markdown/rbs_signature_index.rb', line 75 def any? @signatures.any? end |
#signature_for(method) ⇒ String?
Looks up the RBS signature for an RDoc method.
68 69 70 |
# File 'lib/rdoc/generator/markdown/rbs_signature_index.rb', line 68 def signature_for(method) @signatures[[method.parent.full_name, method.singleton, method.name]] end |