From 720177ac5c04a7860b953fe2c6b51cf725295d77 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Tue, 25 Aug 2020 19:49:38 +0800 Subject: [PATCH] HTML: Fix format on files with frontMatter (#9043) --- changelog_unreleased/html/pr-9043.md | 23 ++++++++++ src/language-html/parser-html.js | 4 ++ .../__snapshots__/jsfmt.spec.js.snap | 45 +++++++++++++++++++ .../issue-9042-no-empty-line.html | 5 +++ tests/html/front-matter/issue-9042.html | 6 +++ 5 files changed, 83 insertions(+) create mode 100644 changelog_unreleased/html/pr-9043.md create mode 100644 tests/html/front-matter/issue-9042-no-empty-line.html create mode 100644 tests/html/front-matter/issue-9042.html diff --git a/changelog_unreleased/html/pr-9043.md b/changelog_unreleased/html/pr-9043.md new file mode 100644 index 000000000000..89b75eafb40c --- /dev/null +++ b/changelog_unreleased/html/pr-9043.md @@ -0,0 +1,23 @@ +#### Fix format on html with frontMatter ([#9043](https://github.com/prettier/prettier/pull/9043) by [@fisker](https://github.com/fisker)) + + +```html + +--- +layout: foo +--- + +Test abc. + + +TypeError: Cannot read property 'end' of undefined + ... + + +--- +layout: foo +--- + +Test abc. +``` diff --git a/src/language-html/parser-html.js b/src/language-html/parser-html.js index 7b1a93f7db1b..3dcdb4124336 100644 --- a/src/language-html/parser-html.js +++ b/src/language-html/parser-html.js @@ -280,6 +280,10 @@ function _parse(text, options, parserOptions, shouldParseFrontMatter = true) { }; if (frontMatter) { + frontMatter.sourceSpan = { + start: { offset: 0 }, + end: { offset: frontMatter.raw.length }, + }; rawAst.children.unshift(frontMatter); } diff --git a/tests/html/front-matter/__snapshots__/jsfmt.spec.js.snap b/tests/html/front-matter/__snapshots__/jsfmt.spec.js.snap index b79cca5d1846..8a8f1307535a 100644 --- a/tests/html/front-matter/__snapshots__/jsfmt.spec.js.snap +++ b/tests/html/front-matter/__snapshots__/jsfmt.spec.js.snap @@ -28,3 +28,48 @@ slug: home ================================================================================ `; + +exports[`issue-9042.html format 1`] = ` +====================================options===================================== +parsers: ["html"] +printWidth: 80 + | printWidth +=====================================input====================================== +--- +layout: foo +--- + +Test abc. + +=====================================output===================================== +--- +layout: foo +--- + +Test abc. + +================================================================================ +`; + +exports[`issue-9042-no-empty-line.html format 1`] = ` +====================================options===================================== +parsers: ["html"] +printWidth: 80 + | printWidth +=====================================input====================================== +--- +layout: foo +--- +Test abc. + +=====================================output===================================== +--- +layout: foo +--- + +Test abc. + +================================================================================ +`; diff --git a/tests/html/front-matter/issue-9042-no-empty-line.html b/tests/html/front-matter/issue-9042-no-empty-line.html new file mode 100644 index 000000000000..b7f318b23b52 --- /dev/null +++ b/tests/html/front-matter/issue-9042-no-empty-line.html @@ -0,0 +1,5 @@ +--- +layout: foo +--- +Test abc. diff --git a/tests/html/front-matter/issue-9042.html b/tests/html/front-matter/issue-9042.html new file mode 100644 index 000000000000..e93627d7c3ba --- /dev/null +++ b/tests/html/front-matter/issue-9042.html @@ -0,0 +1,6 @@ +--- +layout: foo +--- + +Test abc.