yamllint
yamllint copied to clipboard
empty-lines rule and multilines strings
The empty-lines
rule fails if it finds more empty lines than necessary in a multiline string. In my opinion, it should not.
Examples with maximum 1 empty line:
[empty-lines] too many blank lines (2 > 1)
value: |
ee
ee
value1: >
ee
ee
Hello,
This is on purpose: yamllint lints the YAML form, not the embedded content (here, a string with multiple \n
).
You're probably already aware of this, but here is another way to write your example:
value: "ee\n\n\nee\n"
value1: "ee\n\nee\n"
Yes, of course, but on long strings it's not the most readable thing. But if you think it shouldn't make a difference between a string and the rest, I wouldn't object. Thanks for the quick answer!
I don't have much experience with YAML but looking at https://github.com/nodejs/node/pull/42036, my understanding is that the only way to produce strings of the form "long paragraph\n\nlong paragraph"
without either violating this rule or producing extremely long lines is using double-quoted strings, which might be less readable than block scalars.
>
block scalars require two empty lines:
example: >
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus semper
lobortis neque, eget consectetur lectus porttitor eget. Nulla facilisi. Proin nec leo
eget ipsum suscipit vulputate quis et dolor. Quisque suscipit lorem eget ipsum
auctor, eget facilisis purus faucibus. Nam auctor dui vel est euismod porttitor.
Fusce pharetra aliquam lectus, et accumsan ligula venenatis sit amet. Donec ac
sapien dapibus, sollicitudin ligula ac, ultricies erat. Aliquam quis dolor neque.
Sed at nisl eu sem posuere auctor. Morbi interdum quis leo vitae rutrum. Donec
elementum, diam vel aliquam malesuada, odio augue sollicitudin dolor, ut semper sem
orci non risus. Nam at sem a est egestas bibendum sed ac odio. Ut ut arcu ut
tortor elementum vehicula id in eros. Sed ut metus ultricies, gravida arcu nec,
laoreet risus. Nunc eget ante eu justo hendrerit pharetra. Aenean et nunc sed dui
tincidunt fringilla.
Sed metus neque, fermentum ac lacinia sit amet, fermentum vitae nisi.
Vestibulum ut ante commodo, aliquet ante sit amet, viverra neque. Duis purus odio,
congue pulvinar rutrum sit amet, interdum tempor mauris. Vestibulum consectetur in
elit ac consectetur. Vivamus dictum tellus ut libero malesuada rhoncus. Nulla
vehicula non lacus ac dignissim. Aliquam nec blandit mauris. Phasellus fermentum
ultrices ipsum, non imperdiet diam tempor a. Donec varius neque varius felis
efficitur vulputate. Cras cursus ac est vitae sagittis.
|
block scalars result in long lines:
example: |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus semper lobortis neque, eget consectetur lectus porttitor eget. Nulla facilisi. Proin nec leo eget ipsum suscipit vulputate quis et dolor. Quisque suscipit lorem eget ipsum auctor, eget facilisis purus faucibus. Nam auctor dui vel est euismod porttitor. Fusce pharetra aliquam lectus, et accumsan ligula venenatis sit amet. Donec ac sapien dapibus, sollicitudin ligula ac, ultricies erat. Aliquam quis dolor neque. Sed at nisl eu sem posuere auctor. Morbi interdum quis leo vitae rutrum. Donec elementum, diam vel aliquam malesuada, odio augue sollicitudin dolor, ut semper sem orci non risus. Nam at sem a est egestas bibendum sed ac odio. Ut ut arcu ut tortor elementum vehicula id in eros. Sed ut metus ultricies, gravida arcu nec, laoreet risus. Nunc eget ante eu justo hendrerit pharetra. Aenean et nunc sed dui tincidunt fringilla.
Sed metus neque, fermentum ac lacinia sit amet, fermentum vitae nisi. Vestibulum ut ante commodo, aliquet ante sit amet, viverra neque. Duis purus odio, congue pulvinar rutrum sit amet, interdum tempor mauris. Vestibulum consectetur in elit ac consectetur. Vivamus dictum tellus ut libero malesuada rhoncus. Nulla vehicula non lacus ac dignissim. Aliquam nec blandit mauris. Phasellus fermentum ultrices ipsum, non imperdiet diam tempor a. Donec varius neque varius felis efficitur vulputate. Cras cursus ac est vitae sagittis.
Single-quoted strings require two empty lines again:
example:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus semper
lobortis neque, eget consectetur lectus porttitor eget. Nulla facilisi. Proin nec
leo eget ipsum suscipit vulputate quis et dolor. Quisque suscipit lorem eget
ipsum auctor, eget facilisis purus faucibus. Nam auctor dui vel est euismod
porttitor. Fusce pharetra aliquam lectus, et accumsan ligula venenatis sit amet. Donec
ac sapien dapibus, sollicitudin ligula ac, ultricies erat. Aliquam quis dolor
neque. Sed at nisl eu sem posuere auctor. Morbi interdum quis leo vitae rutrum.
Donec elementum, diam vel aliquam malesuada, odio augue sollicitudin dolor, ut
semper sem orci non risus. Nam at sem a est egestas bibendum sed ac odio. Ut ut
arcu ut tortor elementum vehicula id in eros. Sed ut metus ultricies, gravida
arcu nec, laoreet risus. Nunc eget ante eu justo hendrerit pharetra. Aenean et
nunc sed dui tincidunt fringilla.
Sed metus neque, fermentum ac lacinia sit amet, fermentum vitae nisi.
Vestibulum ut ante commodo, aliquet ante sit amet, viverra neque. Duis purus odio,
congue pulvinar rutrum sit amet, interdum tempor mauris. Vestibulum consectetur in
elit ac consectetur. Vivamus dictum tellus ut libero malesuada rhoncus. Nulla
vehicula non lacus ac dignissim. Aliquam nec blandit mauris. Phasellus fermentum
ultrices ipsum, non imperdiet diam tempor a. Donec varius neque varius felis
efficitur vulputate. Cras cursus ac est vitae sagittis.'
Double-quoted strings seem to require at least one \n
:
example:
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus semper
lobortis neque, eget consectetur lectus porttitor eget. Nulla facilisi. Proin nec
leo eget ipsum suscipit vulputate quis et dolor. Quisque suscipit lorem eget
ipsum auctor, eget facilisis purus faucibus. Nam auctor dui vel est euismod
porttitor. Fusce pharetra aliquam lectus, et accumsan ligula venenatis sit amet. Donec
ac sapien dapibus, sollicitudin ligula ac, ultricies erat. Aliquam quis dolor
neque. Sed at nisl eu sem posuere auctor. Morbi interdum quis leo vitae rutrum.
Donec elementum, diam vel aliquam malesuada, odio augue sollicitudin dolor, ut
semper sem orci non risus. Nam at sem a est egestas bibendum sed ac odio. Ut ut
arcu ut tortor elementum vehicula id in eros. Sed ut metus ultricies, gravida
arcu nec, laoreet risus. Nunc eget ante eu justo hendrerit pharetra. Aenean et
nunc sed dui tincidunt fringilla.\n
Sed metus neque, fermentum ac lacinia sit amet, fermentum vitae nisi.
Vestibulum ut ante commodo, aliquet ante sit amet, viverra neque. Duis purus odio,
congue pulvinar rutrum sit amet, interdum tempor mauris. Vestibulum consectetur in
elit ac consectetur. Vivamus dictum tellus ut libero malesuada rhoncus. Nulla
vehicula non lacus ac dignissim. Aliquam nec blandit mauris. Phasellus fermentum
ultrices ipsum, non imperdiet diam tempor a. Donec varius neque varius felis
efficitur vulputate. Cras cursus ac est vitae sagittis."
Plain strings seem to require two empty lines:
example:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus semper
lobortis neque, eget consectetur lectus porttitor eget. Nulla facilisi. Proin nec leo
eget ipsum suscipit vulputate quis et dolor. Quisque suscipit lorem eget ipsum
auctor, eget facilisis purus faucibus. Nam auctor dui vel est euismod porttitor.
Fusce pharetra aliquam lectus, et accumsan ligula venenatis sit amet. Donec ac
sapien dapibus, sollicitudin ligula ac, ultricies erat. Aliquam quis dolor neque.
Sed at nisl eu sem posuere auctor. Morbi interdum quis leo vitae rutrum. Donec
elementum, diam vel aliquam malesuada, odio augue sollicitudin dolor, ut semper sem
orci non risus. Nam at sem a est egestas bibendum sed ac odio. Ut ut arcu ut
tortor elementum vehicula id in eros. Sed ut metus ultricies, gravida arcu nec,
laoreet risus. Nunc eget ante eu justo hendrerit pharetra. Aenean et nunc sed dui
tincidunt fringilla.
Sed metus neque, fermentum ac lacinia sit amet, fermentum vitae nisi.
Vestibulum ut ante commodo, aliquet ante sit amet, viverra neque. Duis purus odio,
congue pulvinar rutrum sit amet, interdum tempor mauris. Vestibulum consectetur in
elit ac consectetur. Vivamus dictum tellus ut libero malesuada rhoncus. Nulla
vehicula non lacus ac dignissim. Aliquam nec blandit mauris. Phasellus fermentum
ultrices ipsum, non imperdiet diam tempor a. Donec varius neque varius felis
efficitur vulputate. Cras cursus ac est vitae sagittis.
Of all these options, I think I personally prefer the first. Would it be feasible to add an option to max-lines
to allow more empty lines in block scalars? I see that there are already max-start
and max-end
options.
This is on purpose: yamllint lints the YAML form, not the embedded content (here, a string with multiple
\n
).
Then I'm confused why it's even linting block scalars, isn't that "embedded content"? I actually don't mind that it's flagging multiple newlines here, since they could make it ambiguous where the block scalar ends. My problem is that it's flagging single lines with trailing whitespace, which I think it shouldn't since these are just (indented) parts of the included scalar. There is currently no way to fix this when including content in a go template via indent
(and it needs an indentation of at least 1 to be be a valid block scalar).
Disabling the trailing-spaces
rule completely would mean disabling one of the most useful features of yamllint
though, so I think it should be possible to just disable it for block scalars.
Maybe a new option could be added to both rules empty-lines
and trailing-spaces
, to enable/disable detection of these errors in embedded strings?