获取 YAML 元素的行号
可以使用 .start_line、.end_line、lines()、lines_before(x) 和 lines_after(x) 从返回的 YAML 对象中获取行号、项目文本和周围行的文本。
示例 yaml_snippet
y: p
# Some comment
a: |
x
# Another comment
b: y
c: a
d: b
from strictyaml import Map, Str, YAMLValidationError, load
from ensure import Ensure
schema = Map({"y": Str(), "a": Str(), "b": Str(), "c": Str(), "d": Str()})
snippet = load(yaml_snippet, schema)
如果项目有前导注释,则开始行将包含它
Ensure(snippet["a"].start_line).equals(3)
Ensure(snippet["d"].start_line).equals(9)
如果有尾随注释,则结束行将包含它
Ensure(snippet["a"].end_line).equals(6)
Ensure(snippet["d"].end_line).equals(10)
你可以获取键的开始行
Ensure(snippet.keys()[1].start_line).equals(3)
整个片段的开始行和结束行
Ensure(snippet.start_line).equals(1)
Ensure(snippet.end_line).equals(10)
获取项目之前的行
Ensure(snippet['a'].lines_before(1)).equals("# Some comment")
获取项目之后的行
Ensure(snippet['a'].lines_after(4)).equals("b: y\nc: a\n\nd: b")
获取项目的行,包括周围的注释
print(load(yaml_snippet, schema)['a'].lines())
a: |
x
# Another comment