Skip to content

Invalidate outdated cache file #17100

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 12, 2025
Merged

Invalidate outdated cache file #17100

merged 7 commits into from
Feb 12, 2025

Conversation

sosukesuzuki
Copy link
Member

@sosukesuzuki sosukesuzuki commented Feb 11, 2025

Description

Fixes #17092

Prettier 3.5 uses a different cache format than previous versions.
Since loading an old cache file in Prettier 3.5 would cause a runtime error outdated cache files are removed.

Checklist

  • I’ve added tests to confirm my change works.
  • (If changing the API or CLI) I’ve documented the changes I’ve made (in the docs/ directory).
  • (If the change is user-facing) I’ve added my changes to changelog_unreleased/*/XXXX.md file following changelog_unreleased/TEMPLATE.md.
  • I’ve read the contributing guidelines.

Try the playground for this PR

Copy link

github-actions bot commented Feb 11, 2025

Size Change: +325 B (0%)

Total Size: 7.89 MB

Filename Size Change
./dist/internal/cli.mjs 146 kB +325 B (+0.22%)
ℹ️ View Unchanged
Filename Size
./dist/bin 4.1 kB
./dist/bin/prettier.cjs 2.24 kB
./dist/doc.d.ts 7.42 kB
./dist/doc.js 53.8 kB
./dist/doc.mjs 50.2 kB
./dist/index.cjs 36.9 kB
./dist/index.d.ts 27.1 kB
./dist/index.mjs 744 kB
./dist/internal 4.1 kB
./dist/LICENSE 1.06 kB
./dist/package.json 7.03 kB
./dist/plugins 4.1 kB
./dist/plugins/acorn.d.ts 109 B
./dist/plugins/acorn.js 152 kB
./dist/plugins/acorn.mjs 152 kB
./dist/plugins/angular.d.ts 177 B
./dist/plugins/angular.js 85.9 kB
./dist/plugins/angular.mjs 85.2 kB
./dist/plugins/babel.d.ts 419 B
./dist/plugins/babel.js 316 kB
./dist/plugins/babel.mjs 316 kB
./dist/plugins/estree.d.ts 11 B
./dist/plugins/estree.js 202 kB
./dist/plugins/estree.mjs 201 kB
./dist/plugins/flow.d.ts 90 B
./dist/plugins/flow.js 680 kB
./dist/plugins/flow.mjs 680 kB
./dist/plugins/glimmer.d.ts 93 B
./dist/plugins/glimmer.js 138 kB
./dist/plugins/glimmer.mjs 137 kB
./dist/plugins/graphql.d.ts 93 B
./dist/plugins/graphql.js 44.1 kB
./dist/plugins/graphql.mjs 43.4 kB
./dist/plugins/html.d.ts 139 B
./dist/plugins/html.js 152 kB
./dist/plugins/html.mjs 151 kB
./dist/plugins/markdown.d.ts 127 B
./dist/plugins/markdown.js 149 kB
./dist/plugins/markdown.mjs 149 kB
./dist/plugins/meriyah.d.ts 93 B
./dist/plugins/meriyah.js 132 kB
./dist/plugins/meriyah.mjs 131 kB
./dist/plugins/postcss.d.ts 121 B
./dist/plugins/postcss.js 154 kB
./dist/plugins/postcss.mjs 153 kB
./dist/plugins/typescript.d.ts 96 B
./dist/plugins/typescript.js 889 kB
./dist/plugins/typescript.mjs 888 kB
./dist/plugins/yaml.d.ts 90 B
./dist/plugins/yaml.js 122 kB
./dist/plugins/yaml.mjs 122 kB
./dist/README.md 3.94 kB
./dist/standalone.d.ts 1.37 kB
./dist/standalone.js 82.1 kB
./dist/standalone.mjs 81.9 kB
./dist/THIRD-PARTY-NOTICES.md 208 kB

compressed-size-action

Copy link

pkg-pr-new bot commented Feb 11, 2025

Open in Stackblitz

npm i https://pkg.pr.new/prettier@17100

commit: f042f00

@sosukesuzuki sosukesuzuki marked this pull request as ready for review February 11, 2025 09:33
@sosukesuzuki
Copy link
Member Author

@fisker What do you think about this approach?

@sosukesuzuki sosukesuzuki requested a review from fisker February 11, 2025 09:38
@fisker
Copy link
Member

fisker commented Feb 11, 2025

When does it fails? createFromFile() or getFileDescriptor()? can't we try/catch?

@sosukesuzuki
Copy link
Member Author

createFromFile fails. Of course, we could do a try-catch. But that would mean that the error would be thrown after all cache files have been read. We chose this approach for performance reasons.

@fisker
Copy link
Member

fisker commented Feb 12, 2025

We chose this approach for performance reasons.

I have to say that it's not better, current approach reads the cache file every time before createFromFile, and the odds of invalid cache file is low(even almost impossible after first update from old version), but if we choose try/catch it will only reload if the cache file is created from old version.

@sosukesuzuki
Copy link
Member Author

@fisker I've updated to just use try-catch

Comment on lines 55 to 56
// Prettier 3.5 uses a different cache format than previous versions.
// If the cache file is not in the expected format, delete it and retry.
Copy link
Member

@fisker fisker Feb 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Prettier 3.5 uses a different cache format than previous versions.
// If the cache file is not in the expected format, delete it and retry.
// If `createFromFile()` fails, it's probably because the format of cache file changed, it happened when we release v3.5.0

Comment on lines 1 to 4
#### Invalidate outdated cache file (#17100 by @sosukesuzuki)

Prettier 3.5 uses a different cache format than previous versions.
Since loading an old cache file in Prettier 3.5 would cause a runtime error outdated cache files are removed.
Copy link
Member

@fisker fisker Feb 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not good at English, feel free to ignore.

I guess this can be improved, maybe something like

#### Fix CLI crash when cache for old version exists (#17100 by @sosukesuzuki)

Prettier 3.5 uses a different cache format than previous versions, Prettier stable crashes when reading existing cache file, Prettier main fixed the problem.

Copy link
Member

@fisker fisker left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The logic looks good to me, two comments.

@sosukesuzuki sosukesuzuki merged commit 61c0129 into main Feb 12, 2025
30 of 31 checks passed
@sosukesuzuki sosukesuzuki deleted the invalidate-outdated-cache branch February 12, 2025 07:32
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Feb 14, 2025
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.4.2 | 3.5.1 |


## [v3.5.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#351)

[diff](prettier/prettier@3.5.0...3.5.1)

##### Fix CLI crash when cache for old version exists ([#17100](prettier/prettier#17100) by [@sosukesuzuki](https://github.com/sosukesuzuki))

Prettier 3.5 uses a different cache format than previous versions, Prettier 3.5.0 crashes when reading existing cache file, Prettier 3.5.1 fixed the problem.

##### Support dockercompose and github-actions-workflow in VSCode ([#17101](prettier/prettier#17101) by [@remcohaszing](https://github.com/remcohaszing))

Prettier now supports the `dockercompose` and `github-actions-workflow` languages in Visual Studio Code.


## [v3.5.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#350)

[diff](prettier/prettier@3.4.2...3.5.0)

🔗 [Release Notes](https://prettier.io/blog/2025/02/09/3.5.0.html)
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Feb 14, 2025
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.4.2 | 3.5.1 |


## [v3.5.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#351)

[diff](prettier/prettier@3.5.0...3.5.1)

##### Fix CLI crash when cache for old version exists ([#17100](prettier/prettier#17100) by [@sosukesuzuki](https://github.com/sosukesuzuki))

Prettier 3.5 uses a different cache format than previous versions, Prettier 3.5.0 crashes when reading existing cache file, Prettier 3.5.1 fixed the problem.

##### Support dockercompose and github-actions-workflow in VSCode ([#17101](prettier/prettier#17101) by [@remcohaszing](https://github.com/remcohaszing))

Prettier now supports the `dockercompose` and `github-actions-workflow` languages in Visual Studio Code.


## [v3.5.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#350)

[diff](prettier/prettier@3.4.2...3.5.0)

🔗 [Release Notes](https://prettier.io/blog/2025/02/09/3.5.0.html)
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Feb 15, 2025
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.4.2 | 3.5.1 |


## [v3.5.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#351)

[diff](prettier/prettier@3.5.0...3.5.1)

##### Fix CLI crash when cache for old version exists ([#17100](prettier/prettier#17100) by [@sosukesuzuki](https://github.com/sosukesuzuki))

Prettier 3.5 uses a different cache format than previous versions, Prettier 3.5.0 crashes when reading existing cache file, Prettier 3.5.1 fixed the problem.

##### Support dockercompose and github-actions-workflow in VSCode ([#17101](prettier/prettier#17101) by [@remcohaszing](https://github.com/remcohaszing))

Prettier now supports the `dockercompose` and `github-actions-workflow` languages in Visual Studio Code.


## [v3.5.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#350)

[diff](prettier/prettier@3.4.2...3.5.0)

🔗 [Release Notes](https://prettier.io/blog/2025/02/09/3.5.0.html)
apricote pushed a commit to hetznercloud/fleeting-plugin-hetzner that referenced this pull request Jul 4, 2025
…fleeting-plugin-hetzner!256)

This MR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | `3.3.3` -> `3.6.2` | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.3.3/3.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://github.com/renovatebot/renovate/discussions/new) if you have any questions.

---

### Release Notes

<details>
<summary>prettier/prettier (prettier)</summary>

### [`v3.6.2`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#362)

[Compare Source](prettier/prettier@3.6.1...3.6.2)

[diff](prettier/prettier@3.6.1...3.6.2)

##### Markdown: Add missing blank line around code block ([#&#8203;17675](prettier/prettier#17675) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

````md
<!-- Input -->
1. Some text, and code block below, with newline after code block

   ```yaml
   ---
   foo: bar
   ```

   1. Another
   2. List

<!-- Prettier 3.6.1 -->
1. Some text, and code block below, with newline after code block

   ```yaml
   ---
   foo: bar
   ```
   1. Another
   2. List

<!-- Prettier 3.6.2 -->
1. Some text, and code block below, with newline after code block

   ```yaml
   ---
   foo: bar
   ```

   1. Another
   2. List
````

### [`v3.6.1`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#361)

[Compare Source](prettier/prettier@3.6.0...3.6.1)

[diff](prettier/prettier@3.6.0...3.6.1)

##### TypeScript: Allow const without initializer ([#&#8203;17650](prettier/prettier#17650), [#&#8203;17654](prettier/prettier#17654) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
export const version: string;

// Prettier 3.6.0 (--parser=babel-ts)
SyntaxError: Unexpected token (1:21)
> 1 | export const version: string;
    |                     ^

// Prettier 3.6.0 (--parser=oxc-ts)
SyntaxError: Missing initializer in const declaration (1:14)
> 1 | export const version: string;
    |              ^^^^^^^^^^^^^^^

// Prettier 3.6.1
export const version: string;
```

##### Miscellaneous: Avoid closing files multiple times ([#&#8203;17665](prettier/prettier#17665) by [@&#8203;43081j](https://github.com/43081j))

When reading a file to infer the interpreter from a shebang, we use the
`n-readlines` library to read the first line in order to get the shebang.

This library closes files when it reaches EOF, and we later try close the same
files again. We now close files only if `n-readlines` did not already close
them.

### [`v3.6.0`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#360)

[Compare Source](prettier/prettier@3.5.3...3.6.0)

[diff](prettier/prettier@3.5.3...3.6.0)

🔗 [Release Notes](https://prettier.io/blog/2025/06/23/3.6.0)

### [`v3.5.3`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#353)

[Compare Source](prettier/prettier@3.5.2...3.5.3)

[diff](prettier/prettier@3.5.2...3.5.3)

##### Flow: Fix missing parentheses in `ConditionalTypeAnnotation` ([#&#8203;17196](prettier/prettier#17196) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
type T<U> = 'a' | ('b' extends U ? 'c' : empty);
type T<U> = 'a' & ('b' extends U ? 'c' : empty);

// Prettier 3.5.2
type T<U> = "a" | "b" extends U ? "c" : empty;
type T<U> = "a" & "b" extends U ? "c" : empty;

// Prettier 3.5.3
type T<U> = "a" | ("b" extends U ? "c" : empty);
type T<U> = "a" & ("b" extends U ? "c" : empty);
```

### [`v3.5.2`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#352)

[Compare Source](prettier/prettier@3.5.1...3.5.2)

[diff](prettier/prettier@3.5.1...3.5.2)

##### Remove `module-sync` condition ([#&#8203;17156](prettier/prettier#17156) by [@&#8203;fisker](https://github.com/fisker))

In Prettier 3.5.0, [we added `module-sync` condition to `package.json`](https://prettier.io/blog/2025/02/09/3.5.0#use-esm-entrypoint-for-requireesm-16958-by-tats-u), so that `require("prettier")` can use ESM version, but turns out it doesn't work if CommonJS and ESM plugins both imports builtin plugins. To solve this problem, we decide simply remove the `module-sync` condition, so `require("prettier")` will still use the CommonJS version, we'll revisit until `require(ESM)` feature is more stable.

### [`v3.5.1`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#351)

[Compare Source](prettier/prettier@3.5.0...3.5.1)

[diff](prettier/prettier@3.5.0...3.5.1)

##### Fix CLI crash when cache for old version exists ([#&#8203;17100](prettier/prettier#17100) by [@&#8203;sosukesuzuki](https://github.com/sosukesuzuki))

Prettier 3.5 uses a different cache format than previous versions, Prettier 3.5.0 crashes when reading existing cache file, Prettier 3.5.1 fixed the problem.

##### Support dockercompose and github-actions-workflow in VSCode ([#&#8203;17101](prettier/prettier#17101) by [@&#8203;remcohaszing](https://github.com/remcohaszing))

Prettier now supports the `dockercompose` and `github-actions-workflow` languages in Visual Studio Code.

### [`v3.5.0`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#350)

[Compare Source](prettier/prettier@3.4.2...3.5.0)

[diff](prettier/prettier@3.4.2...3.5.0)

🔗 [Release Notes](https://prettier.io/blog/2025/02/09/3.5.0.html)

### [`v3.4.2`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#342)

[Compare Source](prettier/prettier@3.4.1...3.4.2)

[diff](prettier/prettier@3.4.1...3.4.2)

##### Treat U+30A0 & U+30FB in Katakana Block as CJK ([#&#8203;16796](prettier/prettier#16796) by [@&#8203;tats-u](https://github.com/tats-u))

Prettier doesn't treat U+30A0 & U+30FB as Japanese. U+30FB is commonly used in Japanese to represent the delimitation of first and last names of non-Japanese people or “and”. The following “C言語・C++・Go・Rust” means “C language & C++ & Go & Rust” in Japanese.

<!-- prettier-ignore -->

```md
<!-- Input (--prose-wrap=never) -->

C言
語
・
C++
・
Go
・
Rust

<!-- Prettier 3.4.1 -->
C言語・ C++ ・ Go ・ Rust

<!-- Prettier 3.4.2 -->
C言語・C++・Go・Rust
```

U+30A0 can be used as the replacement of the `-` in non-Japanese names (e.g. “Saint-Saëns” (Charles Camille Saint-Saëns) can be represented as “サン゠サーンス” in Japanese), but substituted by ASCII hyphen (U+002D) or U+FF1D (full width hyphen) in many cases (e.g. “サン=サーンス” or “サン=サーンス”).

##### Fix comments print on class methods with decorators ([#&#8203;16891](prettier/prettier#16891) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
class A {
  @&#8203;decorator
  /** 
   * The method description
   *
  */
  async method(foo: Foo, bar: Bar) {
    console.log(foo);
  }
}

// Prettier 3.4.1
class A {
  @&#8203;decorator
  async /**
   * The method description
   *
   */
  method(foo: Foo, bar: Bar) {
    console.log(foo);
  }
}

// Prettier 3.4.2
class A {
  @&#8203;decorator
  /**
   * The method description
   *
   */
  async method(foo: Foo, bar: Bar) {
    console.log(foo);
  }
}
```

##### Fix non-idempotent formatting ([#&#8203;16899](prettier/prettier#16899) by [@&#8203;seiyab](https://github.com/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 3.4.1 (first)
<div>
  foo
  <span>
    longlonglonglonglonglonglonglonglonglonglonglonglonglonglongl foo
  </span>, abc
</div>;

// Prettier 3.4.1 (second)
<div>
  foo
  <span>longlonglonglonglonglonglonglonglonglonglonglonglonglonglongl foo</span>
  , abc
</div>;

// Prettier 3.4.2
<div>
  foo
  <span>longlonglonglonglonglonglonglonglonglonglonglonglonglonglongl foo</span>
  , abc
</div>;
```

### [`v3.4.1`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#341)

[Compare Source](prettier/prettier@3.4.0...3.4.1)

[diff](prettier/prettier@3.4.0...3.4.1)

##### Remove unnecessary parentheses around assignment in `v-on` ([#&#8203;16887](prettier/prettier#16887) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```vue
<!-- Input -->
<template>
  <button @&#8203;click="foo += 2">Click</button>
</template>

<!-- Prettier 3.4.0 -->
<template>
  <button @&#8203;click="(foo += 2)">Click</button>
</template>

<!-- Prettier 3.4.1 -->
<template>
  <button @&#8203;click="foo += 2">Click</button>
</template>
```

### [`v3.4.0`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#340)

[Compare Source](prettier/prettier@3.3.3...3.4.0)

[diff](prettier/prettier@3.3.3...3.4.0)

🔗 [Release Notes](https://prettier.io/blog/2024/11/26/3.4.0.html)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xOS4wIiwidXBkYXRlZEluVmVyIjoiNDEuMTkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[3.5 regression] [error] Cannot read properties of undefined (reading 'length')
2 participants