Class: RubyLsp::Ree::YamlFileParser

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_lsp/ruby_lsp_ree/utils/yaml_file_parser.rb

Class Method Summary collapse

Class Method Details

.deep_transform_keys_in_object!(object, &block) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/ruby_lsp/ruby_lsp_ree/utils/yaml_file_parser.rb', line 37

def self.deep_transform_keys_in_object!(object, &block)
  case object
  when Hash
    object.keys.each do |key|
      value = object.delete(key)
      object[yield(key)] = deep_transform_keys_in_object!(value, &block)
    end
    object
  when Array
    object.map! { |e| deep_transform_keys_in_object!(e, &block) }
  else
    object
  end
end

.find_key_in_node(current_node, key) ⇒ Object



27
28
29
30
31
# File 'lib/ruby_lsp/ruby_lsp_ree/utils/yaml_file_parser.rb', line 27

def self.find_key_in_node(current_node, key)
  matched_key_el = current_node.detect{ _1[0].value == key }
  return [nil, nil] unless matched_key_el
  matched_key_el
end

.normalize_hash_keys(res) ⇒ Object



33
34
35
# File 'lib/ruby_lsp/ruby_lsp_ree/utils/yaml_file_parser.rb', line 33

def self.normalize_hash_keys(res)
  deep_transform_keys_in_object!(res){ |k| k.value }
end

.parse(file_path) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/ruby_lsp/ruby_lsp_ree/utils/yaml_file_parser.rb', line 12

def self.parse(file_path)
  parser = Psych::Parser.new(Psych::TreeBuilder.new)
  parser.parse(File.read(file_path, encoding: 'utf-8'))

  parse_result = NodeVisitor.create.accept(parser.handler.root)
  normalize_hash_keys(parse_result.first)
end

.parse_with_key_coordinates(file_path) ⇒ Object



20
21
22
23
24
25
# File 'lib/ruby_lsp/ruby_lsp_ree/utils/yaml_file_parser.rb', line 20

def self.parse_with_key_coordinates(file_path)
  parser = Psych::Parser.new(Psych::TreeBuilder.new)
  parser.parse(File.read(file_path, encoding: 'utf-8'))

  NodeVisitor.create.accept(parser.handler.root).first
end