Class: TreeHaver::Backends::Prism::Parser
- Inherits:
-
Object
- Object
- TreeHaver::Backends::Prism::Parser
- Defined in:
- lib/tree_haver/backends/prism.rb
Overview
Prism parser wrapper
Wraps Prism to provide a tree-sitter-like API for parsing Ruby code.
Instance Method Summary collapse
-
#initialize ⇒ Parser
constructor
Create a new Prism parser instance.
-
#language=(lang) ⇒ void
Set the language for this parser.
-
#parse(source) ⇒ Tree
Parse source code.
-
#parse_string(old_tree, source) ⇒ Tree
Parse source code (compatibility with tree-sitter API).
Constructor Details
#initialize ⇒ Parser
Create a new Prism parser instance
179 180 181 182 183 |
# File 'lib/tree_haver/backends/prism.rb', line 179 def initialize raise TreeHaver::NotAvailable, "prism not available" unless Prism.available? @language = nil @options = {} end |
Instance Method Details
#language=(lang) ⇒ void
This method returns an undefined value.
Set the language for this parser
Note: TreeHaver::Parser unwraps language objects before calling this method. This backend receives the Language wrapper (since Prism::Language stores options).
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/tree_haver/backends/prism.rb', line 192 def language=(lang) case lang when Language @language = lang @options = lang. when Symbol, String if lang.to_sym == :ruby @language = Language.ruby @options = {} else raise ArgumentError, "Prism only supports Ruby parsing. Got: #{lang.inspect}" end else raise ArgumentError, "Expected Prism::Language or :ruby, got #{lang.class}" end end |
#parse(source) ⇒ Tree
Parse source code
216 217 218 219 220 221 222 |
# File 'lib/tree_haver/backends/prism.rb', line 216 def parse(source) raise TreeHaver::NotAvailable, "No language loaded (use parser.language = :ruby)" unless @language # Use Prism.parse with options prism_result = ::Prism.parse(source, **@options) Tree.new(prism_result, source) end |
#parse_string(old_tree, source) ⇒ Tree
Parse source code (compatibility with tree-sitter API)
Prism doesn’t support incremental parsing, so old_tree is ignored.
231 232 233 |
# File 'lib/tree_haver/backends/prism.rb', line 231 def parse_string(old_tree, source) # rubocop:disable Lint/UnusedMethodArgument parse(source) # Prism doesn't support incremental parsing end |