Class: TreeHaver::Backends::Psych::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/tree_haver/backends/psych.rb

Overview

Psych parser wrapper

Wraps Psych.parse_stream to provide TreeHaver-compatible parsing.

Examples:

parser = TreeHaver::Backends::Psych::Parser.new
parser.language = Language.yaml
tree = parser.parse(yaml_source)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeParser

Create a new Psych parser



133
134
135
# File 'lib/tree_haver/backends/psych.rb', line 133

def initialize
  @language = nil
end

Instance Attribute Details

#languageLanguage?

Returns The language to parse.

Returns:

  • (Language, nil)

    The language to parse



130
131
132
# File 'lib/tree_haver/backends/psych.rb', line 130

def language
  @language
end

Instance Method Details

#parse(source) ⇒ Tree

Parse YAML source code

Parameters:

  • source (String)

    YAML source to parse

Returns:

  • (Tree)

    Parsed tree

Raises:

  • (::Psych::SyntaxError)

    on syntax errors



142
143
144
145
146
147
148
# File 'lib/tree_haver/backends/psych.rb', line 142

def parse(source)
  raise "Language not set" unless @language
  Psych.available? or raise "Psych not available"

  ast = ::Psych.parse_stream(source)
  Tree.new(ast, source)
end

#parse_string(_old_tree, source) ⇒ Tree

Alias for compatibility with tree-sitter API

Parameters:

  • _old_tree (nil)

    Ignored (Psych doesn’t support incremental parsing)

  • source (String)

    YAML source to parse

Returns:

  • (Tree)

    Parsed tree



155
156
157
# File 'lib/tree_haver/backends/psych.rb', line 155

def parse_string(_old_tree, source)
  parse(source)
end