Module: KramdownRFC::YAMLcheck
- Defined in:
- lib/kramdown-rfc/yamlcheck.rb
Class Method Summary collapse
- .check_dup_keys(data) ⇒ Object
-
.check_dup_keys1(node, path) ⇒ Object
Does not follow aliases.
- .short_name(node) ⇒ Object
Class Method Details
.check_dup_keys(data) ⇒ Object
36 37 38 39 |
# File 'lib/kramdown-rfc/yamlcheck.rb', line 36 def self.check_dup_keys(data) ast = YAML.parse_stream(data) check_dup_keys1(ast, []) end |
.check_dup_keys1(node, path) ⇒ Object
Does not follow aliases.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/kramdown-rfc/yamlcheck.rb', line 15 def self.check_dup_keys1(node, path) if YAML::Nodes::Mapping === node children = node.children.each_slice(2) duplicates = children.map { |key_node, _value_node| key_node }.group_by{|nm| short_name(nm)}.select { |_value, nodes| nodes.size > 1 } duplicates.each do |key, nodes| name = (path + [key]).join("/") lines = nodes.map { |occurrence| occurrence.start_line + 1 }.join(", ") warn "** duplicate map key >#{name}< in YAML, lines #{lines}" end children.each do |key_node, value_node| newname = short_name(key_node) check_dup_keys1(value_node, path + Array(newname)) end else node.children.to_a.each { |child| check_dup_keys1(child, path) } end end |
.short_name(node) ⇒ Object
6 7 8 9 10 11 12 |
# File 'lib/kramdown-rfc/yamlcheck.rb', line 6 def self.short_name(node) if node.scalar? node.value else node.children&.map {|nm| short_name(nm)}&.join("_") end end |