![](/img/trans.png)
[英]How to force the comment position to be valid with yamllint when load and dump with ruamel.yaml?
[英]ruamel.yaml and yamllint conflict on sequence indentation
我有以下 YAML:
root:
- foo:
- bar: 1
- baz: 2
当我使用ruamel.yaml
(和offset=2, sequence=4
配置)读取/转储时,我得到以下结果:
root:
- foo:
- bar: 1
- baz: 2
这并不理想,但我想这就是ruamel.yaml
的工作方式并且无法更改它(我更愿意将相同的 output 作为输入;如果可能的话那将是最好的)。
无论如何,问题是当我运行yamllint
并且我得到:
error 错误的缩进:预期为 4 但找到了 6(缩进)
我猜这是因为 Python 的yaml
解析器从父连字符的正下方开始计数,而ruamel.yaml
没有。
知道如何使它们都起作用吗?
我试着玩yamllint
配置但没有运气。
您始终需要一个至少比偏移量大两倍的sequence
值(假设这是序列缩进的缩写)。 二,因为需要两个位置:一个用于(块)序列指示符( -
)和后面的必要空格。
当您有一个块序列是映射键“xyz”的值时,您可以放弃通常必需的缩进并将序列指示符与键的第一个字符对齐:
xyz:
- 1
- 2
这就是 ruamel yaml 的默认设置,这也是您使用sequence=2
和offset=0
获得的设置。
您的原件缩进不一致。 key root
的值是一个序列缩进为4
且偏移量为2
的块序列。 但是,键foo
的值是序列缩进2
,偏移量为0
。 这是您无法使用ruamel.yaml
生成的内容,因为它不允许您为不同键的值指定不同的缩进值,从而使缩进保持一致。
您得到的结果对于sequence=4, offset=2
是正确的,因为foo
中的f
在root
中的r
之后的 4 个位置开始,而bar
中的b
也在 foo 中的f
之后的 4 个位置。
如果你使用了默认的或指定的sequence=2, offset=0
你会得到(同样一致):
root:
- foo:
- bar: 1
- baz: 2
( foo
向左移动了 2 个位置, bar
向左移动了 4 个位置(2 个用于它自己,另外两个因为作为root
值的整个序列移动了 2)。
我不知道 yamllint 是如何工作的,但是如果你从四行示例结果中得到那个错误,那么很明显它从r' from root to
f of foo and then starts counting for the
from bar starting at the
foo before
的 - 开始(instead of at the
f` 开始。这是 IMO 不正确的。
如果您在上面给出我的示例,您可以尝试看看yamllint
做了什么。 由于两个缩进都减少了 2,它应该抱怨:
error 错误的缩进:预期为 2 但找到了 4(缩进)
如果它没有抱怨,请使用ruamel.yaml
的设置。 如果它没有或者它接受你的原始和我的sequence=2, offset=0
示例,你可能应该尝试为 YAML 找到一个更一致的 linting 工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.