diff --git a/src/compose/compose-node.ts b/src/compose/compose-node.ts index 6785777d..2aea4383 100644 --- a/src/compose/compose-node.ts +++ b/src/compose/compose-node.ts @@ -22,6 +22,7 @@ interface Props { comment: string anchor: SourceToken | null tag: SourceToken | null + end: number } const CN = { composeNode, composeEmptyNode } @@ -93,7 +94,7 @@ export function composeEmptyNode( offset: number, before: Token[] | undefined, pos: number | null, - { spaceBefore, comment, anchor, tag }: Props, + { spaceBefore, comment, anchor, tag, end }: Props, onError: ComposeErrorHandler ) { const token: FlowScalar = { @@ -109,7 +110,10 @@ export function composeEmptyNode( onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string') } if (spaceBefore) node.spaceBefore = true - if (comment) node.comment = comment + if (comment) { + node.comment = comment + node.range[2] = end + } return node } diff --git a/tests/doc/errors.js b/tests/doc/errors.js index 702bc872..b99ced17 100644 --- a/tests/doc/errors.js +++ b/tests/doc/errors.js @@ -122,6 +122,24 @@ describe('block collections', () => { } ]) }) + + test('key after long comment on empty value (eemeli/yaml#413)', () => { + const doc = YAML.parseDocument(source` + one: + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + # large block of text, large block of text, large block of text, large block of text, large block of text, + two: b + `) + expect(doc.errors).toMatchObject([]) + }) }) describe('flow collections', () => { diff --git a/tests/doc/parse.js b/tests/doc/parse.js index 56ac8ba3..86ea5f7a 100644 --- a/tests/doc/parse.js +++ b/tests/doc/parse.js @@ -324,7 +324,7 @@ describe('empty(ish) nodes', () => { test('empty node position', () => { const doc = YAML.parseDocument('\r\na: # 123\r\n') const empty = doc.contents.items[0].value - expect(empty.range).toEqual([5, 5, 5]) + expect(empty.range).toEqual([5, 5, 12]) }) test('parse an empty string as null', () => {