Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

empty-lines rule and multilines strings #444

Open
Mesteery opened this issue Feb 17, 2022 · 5 comments
Open

empty-lines rule and multilines strings #444

Mesteery opened this issue Feb 17, 2022 · 5 comments

Comments

@Mesteery
Copy link

Mesteery commented Feb 17, 2022

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
@adrienverge
Copy link
Owner

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"

@Mesteery
Copy link
Author

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!

@tniessen
Copy link

I don't have much experience with YAML but looking at nodejs/node#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.

@bitti
Copy link

bitti commented May 20, 2022

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.

@adrienverge
Copy link
Owner

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants