Class: TreeHaver::Backends::Psych::Language

Inherits:
TreeHaver::Base::Language show all
Defined in:
lib/tree_haver/backends/psych.rb

Overview

Psych language wrapper

Unlike tree-sitter which supports many languages via grammar files, Psych only parses YAML. This class exists for API compatibility with other tree_haver backends.

Examples:

language = TreeHaver::Backends::Psych::Language.yaml
parser.language = language

Instance Attribute Summary

Attributes inherited from TreeHaver::Base::Language

#backend, #name, #options

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from TreeHaver::Base::Language

#<=>, #eql?, #hash, #inspect

Constructor Details

#initialize(name = :yaml) ⇒ Language

Create a new Psych language instance

Parameters:

  • name (Symbol) (defaults to: :yaml)

    Language name (should be :yaml)



85
86
87
# File 'lib/tree_haver/backends/psych.rb', line 85

def initialize(name = :yaml)
  super(name, backend: :psych, options: {})
end

Class Method Details

.from_library(_path = nil, symbol: nil, name: nil) ⇒ Language

Load language from library path (API compatibility)

Psych only supports YAML, so path and symbol parameters are ignored.

Parameters:

  • _path (String) (defaults to: nil)

    Ignored - Psych doesn’t load external grammars

  • symbol (String, nil) (defaults to: nil)

    Ignored - Psych only supports YAML

  • name (String, nil) (defaults to: nil)

    Language name hint (defaults to :yaml)

Returns:

Raises:



106
107
108
109
110
111
112
113
114
115
116
# File 'lib/tree_haver/backends/psych.rb', line 106

def from_library(_path = nil, symbol: nil, name: nil) # rubocop:disable Lint/UnusedMethodArgument
  lang_name = name || :yaml

  unless lang_name == :yaml
    raise TreeHaver::NotAvailable,
      "Psych backend only supports YAML, not #{lang_name}. " \
        "Use a tree-sitter backend for #{lang_name} support."
  end

  yaml
end

.yamlLanguage

Create a YAML language instance

Returns:



93
94
95
# File 'lib/tree_haver/backends/psych.rb', line 93

def yaml
  new(:yaml)
end