Correct fit() for fill() (#16899)

* add test for #16897

this test fails at this commit.
snapshots are taken at e3b8a16c7f

* Fix #16897

* add changelog

* omit redundant test case
This commit is contained in:
Seiya authored and GitHub committed 2024-12-01 19:00:35 +09:00
1 parent 10db357c5f
commit e13614ffd8
4 files changed
+90 -1

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
#### Fix non-idempotent formatting (#16899 by @seiyab)
This bug fix is not language-specific. You may see similar change in any languages. This fixes regression in 3.4.0 so change caused by it should yield same formatting as 3.3.3.
<!-- prettier-ignore -->
```jsx
// Input
<div>
foo
<span>longlonglonglonglonglonglonglonglonglonglonglonglonglonglongl foo</span>
, abc
</div>;
// Prettier stable (first)
<div>
foo
<span>
longlonglonglonglonglonglonglonglonglonglonglonglonglonglongl foo
</span>, abc
</div>;
// Prettier stable (second)
<div>
foo
<span>longlonglonglonglonglonglonglonglonglonglonglonglonglonglongl foo</span>
, abc
</div>;
// Prettier main
<div>
foo
<span>longlonglonglonglonglonglonglonglonglonglonglonglonglonglongl foo</span>
, abc
</div>;
```
+2 -1
View File
@@ -234,7 +234,8 @@ function fits(
case DOC_TYPE_ARRAY:
case DOC_TYPE_FILL: {
const parts = docType === DOC_TYPE_ARRAY ? doc : doc.parts;
for (let i = parts.length - 1; i >= 0; i--) {
const end = doc[DOC_FILL_PRINTED_LENGTH] ?? 0;
for (let i = parts.length - 1; i >= end; i--) {
cmds.push({ mode, doc: parts[i] });
}
break;
@@ -1,5 +1,44 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`issue-16897.js format 1`] = `
====================================options=====================================
parsers: ["flow", "typescript"]
printWidth: 80
| printWidth
=====================================input======================================
function HelloWorld( ) {
return (
<div>
<div>
foo
<br />
bar{' '}
<span className="font-semibold">
foobar foobar foobar foobar 12345
</span>, foobar foobar foobar
</div>
</div>
)
}
=====================================output=====================================
function HelloWorld() {
return (
<div>
<div>
foo
<br />
bar{" "}
<span className="font-semibold">foobar foobar foobar foobar 12345</span>
, foobar foobar foobar
</div>
</div>
);
}
================================================================================
`;
exports[`test.js format 1`] = `
====================================options=====================================
parsers: ["flow", "typescript"]
+14
View File
@@ -0,0 +1,14 @@
function HelloWorld( ) {
return (
<div>
<div>
foo
<br />
bar{' '}
<span className="font-semibold">
foobar foobar foobar foobar 12345
</span>, foobar foobar foobar
</div>
</div>
)
}