1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
---
title: Get line numbers of YAML elements
---
Line numbers, the text of an item and text of surrounding lines
can be grabbed from returned YAML objects - using .start_line,
.end_line, lines(), lines_before(x) and lines_after(x).
Example yaml_snippet:
```yaml
y: p
# Some comment
a: |
x
# Another comment
b: y
c: a
d: b
```
```python
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)
```
If there is preceding comment for an item the start line includes it:
```python
Ensure(snippet["a"].start_line).equals(3)
Ensure(snippet["d"].start_line).equals(9)
```
If there is a trailing comment the end line includes it:
```python
Ensure(snippet["a"].end_line).equals(6)
Ensure(snippet["d"].end_line).equals(10)
```
You can grab the start line of a key:
```python
Ensure(snippet.keys()[1].start_line).equals(3)
```
Start line and end line of whole snippet:
```python
Ensure(snippet.start_line).equals(1)
Ensure(snippet.end_line).equals(10)
```
Grabbing a line before an item:
```python
Ensure(snippet['a'].lines_before(1)).equals("# Some comment")
```
Grabbing a line after an item:
```python
Ensure(snippet['a'].lines_after(4)).equals("b: y\nc: a\n\nd: b")
```
Grabbing the lines of an item including surrounding comments:
```python
print(load(yaml_snippet, schema)['a'].lines())
```
```yaml
a: |
x
# Another comment
```
!!! note "Executable specification"
Documentation automatically generated from
<a href="https://github.com/crdoconnor/strictyaml/blob/master/hitch/story/whatline.story">whatline.story
storytests.
|