From d34e48c24a639a3e5f05bc613be2587456bfd475 Mon Sep 17 00:00:00 2001 From: Andrew DeMaria Date: Mon, 1 Mar 2021 00:14:37 -0700 Subject: [PATCH] Prefer literal over folded block scalar when lineWidth=0 is set (#232) --- src/stringify/stringifyString.ts | 6 ++++-- tests/doc/foldFlowLines.js | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/stringify/stringifyString.ts b/src/stringify/stringifyString.ts index 20287cd4..87007774 100644 --- a/src/stringify/stringifyString.ts +++ b/src/stringify/stringifyString.ts @@ -23,7 +23,9 @@ const getFoldOptions = ({ indentAtStart }: StringifyContext) => // presume that's starting a new document. const containsDocumentMarker = (str: string) => /^(%|---|\.\.\.)/m.test(str) -function lineLengthOverLimit(str: string, limit: number) { +function lineLengthOverLimit(str: string, lineWidth: number, indentLength: number) { + if (!lineWidth || lineWidth < 0) return false + const limit = lineWidth - indentLength const strLen = str.length if (strLen <= limit) return false for (let i = 0, start = 0; i < strLen; ++i) { @@ -161,7 +163,7 @@ function blockString( ? false : type === Type.BLOCK_LITERAL ? true - : !lineLengthOverLimit(value, strOptions.fold.lineWidth - indent.length) + : !lineLengthOverLimit(value, strOptions.fold.lineWidth, indent.length) let header = literal ? '|' : '>' if (!value) return header + '\n' let wsStart = '' diff --git a/tests/doc/foldFlowLines.js b/tests/doc/foldFlowLines.js index 237a8c80..80e907e3 100644 --- a/tests/doc/foldFlowLines.js +++ b/tests/doc/foldFlowLines.js @@ -313,4 +313,26 @@ Unfolded paragraph.\n` expect(doc.contents.items[1].value).toBe('plain with comment') expect(String(doc)).toBe(src) }) + + test('long line width', () => { + const src = { + lorem: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In laoreet massa eros, dignissim aliquam nunc elementum sit amet. Mauris pulvinar nunc eget ante sodales viverra. Vivamus quis convallis sapien, ut auctor magna. Cras volutpat erat eu lacus luctus facilisis. Aenean sapien leo, auctor sed tincidunt at, scelerisque a urna. Nunc ullamcorper, libero non mollis aliquet, nulla diam lobortis neque, ac rutrum dui nibh iaculis lectus. Aenean lobortis interdum arcu eget sollicitudin.\n\nDuis quam enim, ultricies a enim non, tincidunt lobortis ipsum. Mauris condimentum ultrices eros rutrum euismod. Fusce et mi eget quam dapibus blandit. Maecenas sodales tempor euismod. Phasellus vulputate purus felis, eleifend ullamcorper tortor semper sit amet. Sed nunc quam, iaculis et neque sit amet, consequat egestas lectus. Aenean dapibus lorem sed accumsan porttitor. Curabitur eu magna congue, mattis urna ac, lacinia eros. In in iaculis justo, nec faucibus enim. Fusce id viverra purus, nec ultricies mi. Aliquam eu risus risus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. \n' + } + + YAML.scalarOptions.str.fold.lineWidth = 1000 + const ysWithLineWidthGreater = YAML.stringify(src) + + YAML.scalarOptions.str.fold.lineWidth = 0 + const ysWithUnlimitedLength = YAML.stringify(src) + + YAML.scalarOptions.str.fold.lineWidth = -1 + const ysWithUnlimitedLength2 = YAML.stringify(src) + + expect(ysWithLineWidthGreater).toBe('lorem: |\n' + + ' Lorem ipsum dolor sit amet, consectetur adipiscing elit. In laoreet massa eros, dignissim aliquam nunc elementum sit amet. Mauris pulvinar nunc eget ante sodales viverra. Vivamus quis convallis sapien, ut auctor magna. Cras volutpat erat eu lacus luctus facilisis. Aenean sapien leo, auctor sed tincidunt at, scelerisque a urna. Nunc ullamcorper, libero non mollis aliquet, nulla diam lobortis neque, ac rutrum dui nibh iaculis lectus. Aenean lobortis interdum arcu eget sollicitudin.\n' + + '\n' + + ' Duis quam enim, ultricies a enim non, tincidunt lobortis ipsum. Mauris condimentum ultrices eros rutrum euismod. Fusce et mi eget quam dapibus blandit. Maecenas sodales tempor euismod. Phasellus vulputate purus felis, eleifend ullamcorper tortor semper sit amet. Sed nunc quam, iaculis et neque sit amet, consequat egestas lectus. Aenean dapibus lorem sed accumsan porttitor. Curabitur eu magna congue, mattis urna ac, lacinia eros. In in iaculis justo, nec faucibus enim. Fusce id viverra purus, nec ultricies mi. Aliquam eu risus risus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. \n') + expect(ysWithUnlimitedLength).toBe(ysWithLineWidthGreater) + expect(ysWithUnlimitedLength2).toBe(ysWithLineWidthGreater) + }) })