diff --git a/changelog_unreleased/markdown/pr-9654.md b/changelog_unreleased/markdown/pr-9654.md new file mode 100644 index 000000000..5028ba8b9 --- /dev/null +++ b/changelog_unreleased/markdown/pr-9654.md @@ -0,0 +1,29 @@ +#### Fix extra empty line added after empty table (#9654 by @fisker) + + +```markdown + +Test line 1 + +| Specify the selected option : | Option 1 | +| ----------------------------- | -------- | + +Test line 6 + + +Test line 1 + +| Specify the selected option : | Option 1 | +| ----------------------------- | -------- | + + +Test line 6 + + +Test line 1 + +| Specify the selected option : | Option 1 | +| ----------------------------- | -------- | + +Test line 6 +``` diff --git a/src/language-markdown/printer-markdown.js b/src/language-markdown/printer-markdown.js index e95006c58..dad7bbec8 100644 --- a/src/language-markdown/printer-markdown.js +++ b/src/language-markdown/printer-markdown.js @@ -595,33 +595,32 @@ function printTable(path, options, print) { ), contents[0].map(() => 3) // minimum width = 3 (---, :--, :-:, --:) ); - const alignedTable = join(hardlineWithoutBreakParent, [ - printRow(contents[0]), - printSeparator(), - join( - hardlineWithoutBreakParent, - contents.slice(1).map((rowContents) => printRow(rowContents)) - ), - ]); + const alignedTable = printTableContents(/* isCompact */ false); if (options.proseWrap !== "never") { return concat([breakParent, alignedTable]); } // Only if the --prose-wrap never is set and it exceeds the print width. - const compactTable = join(hardlineWithoutBreakParent, [ - printRow(contents[0], /* isCompact */ true), - printSeparator(/* isCompact */ true), - join( - hardlineWithoutBreakParent, - contents - .slice(1) - .map((rowContents) => printRow(rowContents, /* isCompact */ true)) - ), - ]); + const compactTable = printTableContents(/* isCompact */ true); return concat([breakParent, group(ifBreak(compactTable, alignedTable))]); + function printTableContents(isCompact) { + const parts = [printRow(contents[0], isCompact), printSeparator(isCompact)]; + if (contents.length > 1) { + parts.push( + join( + hardlineWithoutBreakParent, + contents + .slice(1) + .map((rowContents) => printRow(rowContents, isCompact)) + ) + ); + } + return join(hardlineWithoutBreakParent, parts); + } + function printSeparator(isCompact) { return concat([ "| ", diff --git a/tests/markdown/table/empty-table/__snapshots__/jsfmt.spec.js.snap b/tests/markdown/table/empty-table/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..747deca3f --- /dev/null +++ b/tests/markdown/table/empty-table/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,140 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`empty-table.md - {"proseWrap":"always"} format 1`] = ` +====================================options===================================== +parsers: ["markdown"] +printWidth: 80 +proseWrap: "always" + | printWidth +=====================================input====================================== +Text + +| Specify the selected option : | Option 1 | +|:--| --- | + +Text + +| Should print as compact table when --proseWrap=never|a long long long long long long long long long long long long long head| +|---|--:| + +Text + +=====================================output===================================== +Text + +| Specify the selected option : | Option 1 | +| :---------------------------- | -------- | + +Text + +| Should print as compact table when --proseWrap=never | a long long long long long long long long long long long long long head | +| ---------------------------------------------------- | ----------------------------------------------------------------------: | + +Text + +================================================================================ +`; + +exports[`empty-table.md - {"proseWrap":"never"} format 1`] = ` +====================================options===================================== +parsers: ["markdown"] +printWidth: 80 +proseWrap: "never" + | printWidth +=====================================input====================================== +Text + +| Specify the selected option : | Option 1 | +|:--| --- | + +Text + +| Should print as compact table when --proseWrap=never|a long long long long long long long long long long long long long head| +|---|--:| + +Text + +=====================================output===================================== +Text + +| Specify the selected option : | Option 1 | +| :---------------------------- | -------- | + +Text + +| Should print as compact table when --proseWrap=never | a long long long long long long long long long long long long long head | +| --- | --: | + +Text + +================================================================================ +`; + +exports[`empty-table.md - {"proseWrap":"preserve"} format 1`] = ` +====================================options===================================== +parsers: ["markdown"] +printWidth: 80 +proseWrap: "preserve" + | printWidth +=====================================input====================================== +Text + +| Specify the selected option : | Option 1 | +|:--| --- | + +Text + +| Should print as compact table when --proseWrap=never|a long long long long long long long long long long long long long head| +|---|--:| + +Text + +=====================================output===================================== +Text + +| Specify the selected option : | Option 1 | +| :---------------------------- | -------- | + +Text + +| Should print as compact table when --proseWrap=never | a long long long long long long long long long long long long long head | +| ---------------------------------------------------- | ----------------------------------------------------------------------: | + +Text + +================================================================================ +`; + +exports[`empty-table.md format 1`] = ` +====================================options===================================== +parsers: ["markdown"] +printWidth: 80 + | printWidth +=====================================input====================================== +Text + +| Specify the selected option : | Option 1 | +|:--| --- | + +Text + +| Should print as compact table when --proseWrap=never|a long long long long long long long long long long long long long head| +|---|--:| + +Text + +=====================================output===================================== +Text + +| Specify the selected option : | Option 1 | +| :---------------------------- | -------- | + +Text + +| Should print as compact table when --proseWrap=never | a long long long long long long long long long long long long long head | +| ---------------------------------------------------- | ----------------------------------------------------------------------: | + +Text + +================================================================================ +`; diff --git a/tests/markdown/table/empty-table/empty-table.md b/tests/markdown/table/empty-table/empty-table.md new file mode 100644 index 000000000..3765cc404 --- /dev/null +++ b/tests/markdown/table/empty-table/empty-table.md @@ -0,0 +1,11 @@ +Text + +| Specify the selected option : | Option 1 | +|:--| --- | + +Text + +| Should print as compact table when --proseWrap=never|a long long long long long long long long long long long long long head| +|---|--:| + +Text diff --git a/tests/markdown/table/empty-table/jsfmt.spec.js b/tests/markdown/table/empty-table/jsfmt.spec.js new file mode 100644 index 000000000..54dea461f --- /dev/null +++ b/tests/markdown/table/empty-table/jsfmt.spec.js @@ -0,0 +1,4 @@ +run_spec(__dirname, ["markdown"]); +run_spec(__dirname, ["markdown"], { proseWrap: "never" }); +run_spec(__dirname, ["markdown"], { proseWrap: "always" }); +run_spec(__dirname, ["markdown"], { proseWrap: "preserve" });