From 4ce28d3ef4f99ed6718545a6b8e0e6f40cbe710f Mon Sep 17 00:00:00 2001 From: Ika Date: Sat, 1 Sep 2018 13:14:22 +0800 Subject: [PATCH] fix(markdown): inline footnote def if there's only one 1-line paragraph (#5025) --- src/language-markdown/printer-markdown.js | 41 ++- .../__snapshots__/jsfmt.spec.js.snap | 265 ++++++++++++++++++ .../markdown_footnoteDefinition/jsfmt.spec.js | 2 + tests/markdown_footnoteDefinition/long.md | 2 + 4 files changed, 296 insertions(+), 14 deletions(-) diff --git a/src/language-markdown/printer-markdown.js b/src/language-markdown/printer-markdown.js index b6e66b2f..a65a876f 100644 --- a/src/language-markdown/printer-markdown.js +++ b/src/language-markdown/printer-markdown.js @@ -345,24 +345,37 @@ function genericPrint(path, options, print) { return concat(["[^", node.identifier, "]"]); case "footnoteDefinition": { const nextNode = path.getParentNode().children[path.getName() + 1]; + const shouldInlineFootnote = + node.children.length === 1 && + node.children[0].type === "paragraph" && + (options.proseWrap === "never" || + (options.proseWrap === "preserve" && + node.children[0].position.start.line === + node.children[0].position.end.line)); return concat([ "[^", node.identifier, "]: ", - group( - concat([ - align( - " ".repeat(options.tabWidth), - printChildren(path, options, print, { - processor: (childPath, index) => - index === 0 - ? group(concat([softline, softline, childPath.call(print)])) - : childPath.call(print) - }) - ), - nextNode && nextNode.type === "footnoteDefinition" ? softline : "" - ]) - ) + shouldInlineFootnote + ? printChildren(path, options, print) + : group( + concat([ + align( + " ".repeat(options.tabWidth), + printChildren(path, options, print, { + processor: (childPath, index) => + index === 0 + ? group( + concat([softline, softline, childPath.call(print)]) + ) + : childPath.call(print) + }) + ), + nextNode && nextNode.type === "footnoteDefinition" + ? softline + : "" + ]) + ) ]); } case "table": diff --git a/tests/markdown_footnoteDefinition/__snapshots__/jsfmt.spec.js.snap b/tests/markdown_footnoteDefinition/__snapshots__/jsfmt.spec.js.snap index bb602780..7df73e3e 100644 --- a/tests/markdown_footnoteDefinition/__snapshots__/jsfmt.spec.js.snap +++ b/tests/markdown_footnoteDefinition/__snapshots__/jsfmt.spec.js.snap @@ -2,12 +2,43 @@ exports[`long.md - markdown-verify 1`] = ` [^hello]: this is a long long long long long long long long long long long long long paragraph. +[^world]: this is a long long long long long long long long long long long long long paragraph. + this is a long long long long long long long long long long long long long paragraph. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [^hello]: this is a long long long long long long long long long long long long long paragraph. +[^world]: + + this is a long long long long long long long long long long long long long + paragraph. this is a long long long long long long long long long long long + long long paragraph. + +`; + +exports[`long.md - markdown-verify 2`] = ` +[^hello]: this is a long long long long long long long long long long long long long paragraph. +[^world]: this is a long long long long long long long long long long long long long paragraph. + this is a long long long long long long long long long long long long long paragraph. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^hello]: this is a long long long long long long long long long long long long long paragraph. +[^world]: this is a long long long long long long long long long long long long long paragraph. this is a long long long long long long long long long long long long long paragraph. + +`; + +exports[`long.md - markdown-verify 3`] = ` +[^hello]: this is a long long long long long long long long long long long long long paragraph. +[^world]: this is a long long long long long long long long long long long long long paragraph. + this is a long long long long long long long long long long long long long paragraph. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^hello]: this is a long long long long long long long long long long long long long paragraph. +[^world]: + + this is a long long long long long long long long long long long long long paragraph. + this is a long long long long long long long long long long long long long paragraph. + `; exports[`multiline.md - markdown-verify 1`] = ` @@ -64,6 +95,112 @@ exports[`multiline.md - markdown-verify 1`] = ` `; +exports[`multiline.md - markdown-verify 2`] = ` +[^fn1]: + + > \`\`\`rs + > fn main() { + > println!("this is some Rust!"); + > } + > \`\`\` + +[^fn2]: Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` + +[^fn2]: Here is a footnote which includes code. Here is a footnote which includes code. Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^fn1]: + + > \`\`\`rs + > fn main() { + > println!("this is some Rust!"); + > } + > \`\`\` + +[^fn2]: Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` + +[^fn2]: + + Here is a footnote which includes code. Here is a footnote which includes code. Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` + +`; + +exports[`multiline.md - markdown-verify 3`] = ` +[^fn1]: + + > \`\`\`rs + > fn main() { + > println!("this is some Rust!"); + > } + > \`\`\` + +[^fn2]: Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` + +[^fn2]: Here is a footnote which includes code. Here is a footnote which includes code. Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^fn1]: + + > \`\`\`rs + > fn main() { + > println!("this is some Rust!"); + > } + > \`\`\` + +[^fn2]: Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` + +[^fn2]: + + Here is a footnote which includes code. Here is a footnote which includes code. Here is a footnote which includes code. + + \`\`\`rs + fn main() { + println!("this is some Rust!"); + } + \`\`\` + +`; + exports[`sibling.md - markdown-verify 1`] = ` [^a]: a [^a]: a @@ -121,9 +258,137 @@ exports[`sibling.md - markdown-verify 1`] = ` `; +exports[`sibling.md - markdown-verify 2`] = ` +[^a]: a +[^a]: a +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: a +[^a]: a + +--- + +[^a]: a +[^a]: a +[^a]: a +[^a]: > 123\\ + > 456 +[^a]: a +[^a]: > 123\\ + > 456 +[^a]: a +[^a]: a +[^a]: a +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^a]: a +[^a]: a +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: a +[^a]: a + +--- + +[^a]: a +[^a]: a +[^a]: a +[^a]: + + > 123\\ + > 456 + +[^a]: a +[^a]: + + > 123\\ + > 456 + +[^a]: a +[^a]: a +[^a]: a + +`; + +exports[`sibling.md - markdown-verify 3`] = ` +[^a]: a +[^a]: a +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: a +[^a]: a + +--- + +[^a]: a +[^a]: a +[^a]: a +[^a]: > 123\\ + > 456 +[^a]: a +[^a]: > 123\\ + > 456 +[^a]: a +[^a]: a +[^a]: a +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^a]: a +[^a]: a +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: > 123 +[^a]: a +[^a]: a +[^a]: a + +--- + +[^a]: a +[^a]: a +[^a]: a +[^a]: + + > 123\\ + > 456 + +[^a]: a +[^a]: + + > 123\\ + > 456 + +[^a]: a +[^a]: a +[^a]: a + +`; + exports[`simple.md - markdown-verify 1`] = ` [^hello]: world ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [^hello]: world `; + +exports[`simple.md - markdown-verify 2`] = ` +[^hello]: world +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^hello]: world + +`; + +exports[`simple.md - markdown-verify 3`] = ` +[^hello]: world +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +[^hello]: world + +`; diff --git a/tests/markdown_footnoteDefinition/jsfmt.spec.js b/tests/markdown_footnoteDefinition/jsfmt.spec.js index b62fc584..d15893e6 100644 --- a/tests/markdown_footnoteDefinition/jsfmt.spec.js +++ b/tests/markdown_footnoteDefinition/jsfmt.spec.js @@ -1 +1,3 @@ run_spec(__dirname, ["markdown"], { proseWrap: "always" }); +run_spec(__dirname, ["markdown"], { proseWrap: "never" }); +run_spec(__dirname, ["markdown"], { proseWrap: "preserve" }); diff --git a/tests/markdown_footnoteDefinition/long.md b/tests/markdown_footnoteDefinition/long.md index c764307d..2fa06e18 100644 --- a/tests/markdown_footnoteDefinition/long.md +++ b/tests/markdown_footnoteDefinition/long.md @@ -1 +1,3 @@ [^hello]: this is a long long long long long long long long long long long long long paragraph. +[^world]: this is a long long long long long long long long long long long long long paragraph. + this is a long long long long long long long long long long long long long paragraph.