Skip to content
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

feat: Implement caching for FlatESLint #16190

Merged
merged 1 commit into from Aug 14, 2022
Merged

feat: Implement caching for FlatESLint #16190

merged 1 commit into from Aug 14, 2022

Conversation

nzakas
Copy link
Member

@nzakas nzakas commented Aug 10, 2022

Refs #13481

Prerequisites checklist

What is the purpose of this pull request? (put an "X" next to an item)

[ ] Documentation update
[ ] Bug fix (template)
[ ] New rule (template)
[ ] Changes an existing rule (template)
[ ] Add autofix to a rule
[ ] Add a CLI option
[x] Add something to the core
[ ] Other, please explain:

What changes did you make? (Give an overview)

This PR implements caching for FlatESLint by making the following changes:

  1. Enabling cache: true as an option for FlatESLint
  2. Adding back all of the caching functionality that was removed for the first developer preview
  3. Creating a toJSON() method on each config object that will normalize it into a form that is more appropriate for storing in the cache

Is there anything you'd like reviewers to focus on?

For now, I throw an error when trying to serialize a config object where either the parser or the processor are objects instead of strings because it's not clear how best to serialize these. I see the following possible paths forward from here:

  1. We ask that parsers and processors publish a name property that we can use for caching purposes and otherwise throw an error. This seems like the simplest approach.
  2. We disallow objects for processor (same as eslintrc) and parser (different from eslintrc -- problematic for back compat reasons)
  3. We figure out some way to hash a value for objects. Maybe for parser we could hash to toString() of the parse() method, and maybe for processor we could hash the toString() of both preprocess() and postprocess()?

@eslint-github-bot eslint-github-bot bot added triage An ESLint team member will look at this issue soon feature This change adds a new feature to ESLint labels Aug 10, 2022
@netlify
Copy link

netlify bot commented Aug 10, 2022

Deploy Preview for docs-eslint canceled.

Name Link
🔨 Latest commit 0b813ea
🔍 Latest deploy log https://app.netlify.com/sites/docs-eslint/deploys/62f416d3b3d3f5000955fe56

Copy link
Member

@btmills btmills left a comment

Choose a reason for hiding this comment

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

LGTM!

For future serialization, I'm not a big fan of 2, and it sounds like you aren't either. As a variant of option 1, we could call it cacheKey and encourage packages to include version as package-name@1.2.3, making it even more thorough. As a fallback, option 3 seems like a reasonable best effort.

@btmills btmills merged commit 2b97607 into main Aug 14, 2022
@btmills btmills deleted the flat-config-cache branch August 14, 2022 01:12
crapStone pushed a commit to Calciumdibromid/CaBr2 that referenced this pull request Aug 23, 2022
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | minor | [`8.21.0` -> `8.22.0`](https://renovatebot.com/diffs/npm/eslint/8.21.0/8.22.0) |

---

### Release Notes

<details>
<summary>eslint/eslint</summary>

### [`v8.22.0`](https://github.com/eslint/eslint/releases/tag/v8.22.0)

[Compare Source](eslint/eslint@v8.21.0...v8.22.0)

#### Features

-   [`2b97607`](eslint/eslint@2b97607) feat: Implement caching for FlatESLint ([#&#8203;16190](eslint/eslint#16190)) (Nicholas C. Zakas)
-   [`fd5d3d3`](eslint/eslint@fd5d3d3) feat: add `methodsIgnorePattern` option to object-shorthand rule ([#&#8203;16185](eslint/eslint#16185)) (Milos Djermanovic)

#### Documentation

-   [`9f5a752`](eslint/eslint@9f5a752) docs: optimize image assets ([#&#8203;16170](eslint/eslint#16170)) (Sam Chen)
-   [`61b2948`](eslint/eslint@61b2948) docs: add svgo command to pre commit hook ([#&#8203;16178](eslint/eslint#16178)) (Amaresh  S M)
-   [`784096d`](eslint/eslint@784096d) docs: improve search result UI ([#&#8203;16187](eslint/eslint#16187)) (Sam Chen)
-   [`d0f4cb4`](eslint/eslint@d0f4cb4) docs: use shorthand property name in example ([#&#8203;16180](eslint/eslint#16180)) (Kevin Elliott)

#### Chores

-   [`10a6e0e`](eslint/eslint@10a6e0e) chore: remove deploy workflow for playground ([#&#8203;16186](eslint/eslint#16186)) (Milos Djermanovic)

</details>

---

### Configuration

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

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

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

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xNTYuMSIsInVwZGF0ZWRJblZlciI6IjMyLjE1Ni4xIn0=-->

Co-authored-by: cabr2-bot <cabr2.help@gmail.com>
Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1506
Reviewed-by: Epsilon_02 <epsilon_02@noreply.codeberg.org>
Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
@eslint-github-bot eslint-github-bot bot locked and limited conversation to collaborators Feb 11, 2023
@eslint-github-bot eslint-github-bot bot added the archived due to age This issue has been archived; please open a new issue for any further discussion label Feb 11, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
archived due to age This issue has been archived; please open a new issue for any further discussion feature This change adds a new feature to ESLint triage An ESLint team member will look at this issue soon
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants