class Prism::Translation::Parser
This class is the entry-point for converting a prism syntax tree into the whitequark/parser gem’s syntax tree. It inherits from the base parser for the parser gem, and overrides the parse* methods to parse with prism and then translate.
Public Instance Methods
default_encoding
()
The default encoding for Ruby files is UTF-8.
# File lib/prism/translation/parser.rb, line 41 def default_encoding Encoding::UTF_8 end
parse
(source_buffer)
Parses a source buffer and returns the AST.
# File lib/prism/translation/parser.rb, line 49 def parse(source_buffer) @source_buffer = source_buffer source = source_buffer.source offset_cache = build_offset_cache(source) result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache) build_ast(result.value, offset_cache) ensure @source_buffer = nil end
parse_with_comments
(source_buffer)
Parses a source buffer and returns the AST and the source code comments.
# File lib/prism/translation/parser.rb, line 62 def parse_with_comments(source_buffer) @source_buffer = source_buffer source = source_buffer.source offset_cache = build_offset_cache(source) result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache) [ build_ast(result.value, offset_cache), build_comments(result.comments, offset_cache) ] ensure @source_buffer = nil end
tokenize
(source_buffer, recover = false)
Parses a source buffer and returns the AST, the source code comments, and the tokens emitted by the lexer.
# File lib/prism/translation/parser.rb, line 79 def tokenize(source_buffer, recover = false) @source_buffer = source_buffer source = source_buffer.source offset_cache = build_offset_cache(source) result = begin unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache) rescue ::Parser::SyntaxError raise if !recover end program, tokens = result.value ast = build_ast(program, offset_cache) if result.success? [ ast, build_comments(result.comments, offset_cache), build_tokens(tokens, offset_cache) ] ensure @source_buffer = nil end
try_declare_numparam
(node)
Since prism resolves num params for us, we don’t need to support this kind of logic here.
# File lib/prism/translation/parser.rb, line 105 def try_declare_numparam(node) node.children[0].match?(/\A_[1-9]\z/) end