fix(markdown): inline footnote def if there's only one 1-line paragraph (#5025)

master
Ika 2018-09-01 13:14:22 +08:00 committed by GitHub
parent 669282e32a
commit 4ce28d3ef4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 296 additions and 14 deletions

View File

@ -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":

View File

@ -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
`;

View File

@ -1 +1,3 @@
run_spec(__dirname, ["markdown"], { proseWrap: "always" });
run_spec(__dirname, ["markdown"], { proseWrap: "never" });
run_spec(__dirname, ["markdown"], { proseWrap: "preserve" });

View File

@ -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.