Class: Rbs::Merge::Backends::RbsBackend::Parser
- Inherits:
-
TreeHaver::Base::Parser
- Object
- TreeHaver::Base::Parser
- Rbs::Merge::Backends::RbsBackend::Parser
- Defined in:
- lib/rbs/merge/backends/rbs_backend.rb
Overview
RBS parser wrapper
Wraps the RBS gem parser to provide a TreeHaver-compatible API.
Instance Method Summary collapse
-
#initialize ⇒ Parser
constructor
Create a new RBS parser instance.
-
#language=(lang) ⇒ void
Set the language for this parser.
-
#parse(source) ⇒ Tree
Parse source code.
Constructor Details
#initialize ⇒ Parser
Create a new RBS parser instance
164 165 166 167 |
# File 'lib/rbs/merge/backends/rbs_backend.rb', line 164 def initialize super() raise TreeHaver::NotAvailable, "rbs gem not available" unless RbsBackend.available? end |
Instance Method Details
#language=(lang) ⇒ void
This method returns an undefined value.
Set the language for this parser
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/rbs/merge/backends/rbs_backend.rb', line 173 def language=(lang) case lang when Language @language = lang when Symbol, String if lang.to_sym == :rbs @language = Language.rbs else raise ArgumentError, "RBS backend only supports RBS parsing. Got: #{lang.inspect}" end else raise ArgumentError, "Expected RbsBackend::Language or :rbs, got #{lang.class}" end end |
#parse(source) ⇒ Tree
Parse source code
195 196 197 198 199 200 201 202 203 204 |
# File 'lib/rbs/merge/backends/rbs_backend.rb', line 195 def parse(source) raise TreeHaver::NotAvailable, "No language loaded (use parser.language = :rbs)" unless @language buffer = ::RBS::Buffer.new(name: "merge.rbs", content: source) _buffer, directives, declarations = ::RBS::Parser.parse_signature(buffer) Tree.new(declarations, source: source, directives: directives) rescue ::RBS::ParsingError => e # Return a tree with errors instead of raising Tree.new([], source: source, directives: [], errors: [e]) end |