获取 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

可执行规范

whatline.story storytests 自动生成的文档。