【问题标题】:Inline commenting in YAML filesYAML 文件中的内联注释
【发布时间】:2017-06-16 07:43:21
【问题描述】:

我正在使用以下 linter 来检查我的 yml 是否有效:http://www.yamllint.com/

我尝试放置内联 cmets,但它们已被删除。我在这里阅读了规范http://www.yaml.org/spec/1.2/spec.html#id2780069

我是否通过删除 cmets 来纠正以下内容实际上是有效的,以及 linting 网站是错误的?

cache: 
  paths: 
    - node_modules/ # some comment here

【问题讨论】:

  • linter 说 yml 是有效的。默认情况下,linter 可能只是删除了 cmets。它并没有说它无效。
  • @KodosJohnson 你确实是对的,我改写了这句话。但是,您不认为 linter 不应该移除 cmets 吗?
  • 我的理论是解析器读取 yml 以确定其有效性,然后重建 yml 以显示给您。作为该过程的一部分,解析器会丢弃任何 cmets,因为它们没有任何作用(它们只是 cmets,并不打算被解析器使用)。所以我认为这只是一个副作用。

标签: yaml


【解决方案1】:

您的来源是正确的。如果您想在保留 cmets 的情况下运行此类检查,或重新格式化保留 cmets,则使用基于ruamel.yaml 的小型 Python 程序,它可以在往返过程中保留您的 cmets 并规范缩进(免责声明:我是ruamel.yaml的作者):

import sys
from ruamel.yaml import YAML
from ruamel.yaml.util import load_yaml_guess_indent
    
with open(sys.argv[1]) as fp:
    data, ind, offset = load_yaml_guess_indent(fp)
yaml = YAML()
yaml.indent(mapping=ind, sequence=ind, offset=offset)
yaml.dump(data, sys.stdout)

只需在命令行中提供输入文件作为参数。

所有基于网络的检查器相比,这具有优势,即您可能的敏感数据不会被“发布”。 与yamllint.com 和其他一些网站相比,它还具有支持 YAML 1.2 的优势。 yamllint.com 仅支持 YAML 1.1,如果您尝试使用显式 YAML 文档指令,您会看到什么:

%YAML 1.2
--- 
a: 0o7
...

该站点抛出该版本不受支持的错误。哪个比什么更好。 http://yaml-online-parser.appspot.com/ 确实(忽略指令,像 YAML 1.1 一样解析,八进制整数标量就像它在字符串标量的位置)或 http://beautifytools.com/yaml-validator.php 的半成熟 YAML 实现(错误:无法解析))

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 2012-10-19
    • 2019-02-16
    • 2012-03-18
    • 2012-11-13
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多