【问题标题】:How to lint YAML files, preferably in Ruby如何 lint YAML 文件,最好在 Ruby 中
【发布时间】:2014-03-04 06:36:19
【问题描述】:

如何检查 YAML 文件,而无需将其上传到 http://yamllint.com

例如,如果我有

people:
  1:
    :name: John Smith
    :name: Jane Smith

如何让它警告我最后一个 :name 会覆盖第一个 :name

我使用的是 Ruby 2.1 和 Ubuntu 12.04。

【问题讨论】:

    标签: ruby yaml


    【解决方案1】:

    yamllint 命令行工具可以满足您的需求 想要:

    sudo pip install yamllint
    

    具体来说,它有一个规则key-duplicates 可以检测重复和键 互相重写:

    $ yamllint test.yml
    test.yml
      1:1       warning  missing document start "---"  (document-start)
      4:5       error    duplication of key ":name" in mapping  (key-duplicates)
    

    (它还有许多其他规则可供您启用/禁用或调整。)

    【讨论】:

      【解决方案2】:

      这就是你所追求的吗?

      require 'yaml'
      
      def check_yaml(filename)
        unless YAML.dump(YAML.load_file(filename)) == File.read(filename).gsub(/\s*#.*/, '')
          raise 'problem' 
        end
      end
      
      check_yaml 'somefile.yml'
      

      【讨论】:

      • 您必须以某种方式从 yaml 文件中删除 cmets,因为它们肯定会在此过程中丢失。
      • 只要字符串中没有任何哈希字符 (#),它可能会起作用。
      【解决方案3】:

      导入1.yaml然后导出到2.yamldiff 1.yaml 2.yaml怎么样?
      无法提供代码——这台机器上没有 nix utils,但你明白了。

      【讨论】:

        猜你喜欢
        • 2011-01-17
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 2015-12-30
        • 2011-12-13
        • 1970-01-01
        • 2010-11-21
        相关资源
        最近更新 更多