Class: Yamlint::Rules::KeyOrdering::KeyOrderHandler

Inherits:
Psych::Handler
  • Object
show all
Defined in:
lib/yamlint/rules/key_ordering.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeKeyOrderHandler

Returns a new instance of KeyOrderHandler.



37
38
39
40
41
42
# File 'lib/yamlint/rules/key_ordering.rb', line 37

def initialize
  super
  @stack = []
  @problems = []
  @parser = nil
end

Instance Attribute Details

#parserObject

Returns the value of attribute parser.



35
36
37
# File 'lib/yamlint/rules/key_ordering.rb', line 35

def parser
  @parser
end

#problemsObject (readonly)

Returns the value of attribute problems.



34
35
36
# File 'lib/yamlint/rules/key_ordering.rb', line 34

def problems
  @problems
end

Instance Method Details

#end_mappingObject



54
55
56
57
# File 'lib/yamlint/rules/key_ordering.rb', line 54

def end_mapping
  frame = @stack.pop
  close_parent_value(frame)
end

#end_sequenceObject



67
68
69
70
# File 'lib/yamlint/rules/key_ordering.rb', line 67

def end_sequence
  frame = @stack.pop
  close_parent_value(frame)
end

#scalar(value, _anchor, _tag, _plain, _quoted, _style) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/yamlint/rules/key_ordering.rb', line 72

def scalar(value, _anchor, _tag, _plain, _quoted, _style)
  frame = @stack.last
  return unless frame && frame[:type] == :mapping

  if frame[:expecting_key]
    current_keys = frame[:keys]
    mark = @parser&.mark

    if current_keys.any? && value < current_keys.last
      @problems << {
        key: value,
        prev_key: current_keys.last,
        line: mark ? mark.line + 1 : 1,
        column: mark ? mark.column + 1 : 1
      }
    end

    current_keys << value
    frame[:expecting_key] = false
  else
    frame[:expecting_key] = true
  end
end

#start_mappingObject



44
45
46
47
48
49
50
51
52
# File 'lib/yamlint/rules/key_ordering.rb', line 44

def start_mapping(*)
  parent = current_mapping_frame
  @stack << {
    type: :mapping,
    keys: [],
    expecting_key: true,
    close_parent: capture_close_parent(parent)
  }
end

#start_sequenceObject



59
60
61
62
63
64
65
# File 'lib/yamlint/rules/key_ordering.rb', line 59

def start_sequence(*)
  parent = current_mapping_frame
  @stack << {
    type: :sequence,
    close_parent: capture_close_parent(parent)
  }
end