Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The frontmatter dialect parses inline arrays (
links: [a, b, c]) with asingle-pass state machine in
_split_items. The quote-tracking looptreats any quote character (
'or") as a toggle into/out ofquoted mode, even when the quote appears mid-value rather than at the
value boundary.
An unquoted value containing a quote character —
it'sfor example —enters quote mode on the apostrophe and never exits. Every subsequent
comma is then swallowed as part of the quoted string, so the array
collapses into a single broken item.
The render path always wraps list items in quotes, so the round-trip
via
render → parsehappens to work. The bug surfaces when a front-matter file is edited by hand (which the project encourages — the
files are the source of truth) and an unquoted value contains an
apostrophe or a double-quote character.
Fix
Track whether the cursor is at the start of a new value (right after
the opening bracket, a comma, or leading whitespace). Only enter quote
mode when a quote character appears at that position. A quote in the
middle of an unquoted value is now treated as a regular character.
Testing
Added
tests/unit/test_frontmatter.pycovering the parse / renderround-trip, the unquoted-apostrophe case, a quoted value that contains
the other quote type, and the existing scalar and empty-array paths.