Class: TreeHaver::Backends::Prism::Parser
- Inherits:
-
TreeHaver::Base::Parser
- Object
- TreeHaver::Base::Parser
- 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 Attribute Summary
Attributes inherited from TreeHaver::Base::Parser
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).
Methods inherited from TreeHaver::Base::Parser
Constructor Details
#initialize ⇒ Parser
Create a new Prism parser instance
168 169 170 171 172 173 |
# File 'lib/tree_haver/backends/prism.rb', line 168 def initialize super raise TreeHaver::NotAvailable, 'prism not available' unless TreeHaver::Backends::Prism.available? @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).
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'lib/tree_haver/backends/prism.rb', line 182 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
206 207 208 209 210 211 212 |
# File 'lib/tree_haver/backends/prism.rb', line 206 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.
221 222 223 |
# File 'lib/tree_haver/backends/prism.rb', line 221 def parse_string(old_tree, source) # rubocop:disable Lint/UnusedMethodArgument parse(source) # Prism doesn't support incremental parsing end |