Skip to content

(YAML) Multiline strings don't support empty lines #4090

Open
@dmelikhov

Description

@dmelikhov

Describe the issue
YAML multiline strings break on first empty line even when the rest of the block is properly indented.

Which language seems to have the issue?
YAML

Are you using highlight or highlightAuto?
highlight

Sample Code to Reproduce

foo:
  bar: |
    still: a string

    not: anymore

Additional context
I was able to workaround the issue by replacing this regex with

[\\|>]([1-9]?[+-])?[ ]*\\n+( +)[^ ][^\\n]*\\n+(\\2[^\\n]+\\n*)*

It's not perfect and still has some false positives/negatives but should cover more valid cases.

Activity

joshgoebel

joshgoebel commented on Aug 9, 2024

@joshgoebel
Member

YAML is the worst. :) What are the valid rules for multi-line strings anyways? Is there some chance we could do this better with our own parser rather than a super complex regex?

Did we just change the \n+ to \n*?

dmelikhov

dmelikhov commented on Aug 9, 2024

@dmelikhov
Author

The first thing that came to my mind after seeing the regex is this. :)

I don't have enough knowledge about the library's architecture, but I think it's not possible to properly detect multiline strings using a regex, as it knows nothing about the property's indentation that contains the multiline string.

@joshgoebel In the regex I mentioned \n is replaced by \n+ and \n? is replaced by \n*. But I can't give you any guarantees that it's better than the currently used one.

Dxuian

Dxuian commented on Sep 1, 2024

@Dxuian
Contributor

i believe added a fix for this @joshgoebel pls 🙏🙏🙏 review #4111 (and other prs)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Participants

      @joshgoebel@dmelikhov@Dxuian

      Issue actions

        (YAML) Multiline strings don't support empty lines · Issue #4090 · highlightjs/highlight.js