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] fallback ignorePath to .eslintignore if .prettierignore not found #630

Open
JounQin opened this issue Dec 24, 2023 · 3 comments
Open

Comments

@JounQin
Copy link
Member

JounQin commented Dec 24, 2023

What version of eslint are you using?

8.56.0

What version of prettier are you using?

3.1.1

What version of eslint-plugin-prettier are you using?

5.1.2

Please paste any applicable config files that you're using (e.g. .prettierrc or .eslintrc files)

.prettierrc

What source code are you linting?

N/A

What did you expect to happen?

When .prettierignore not found, .eslintignore should be used as ignorePath

What actually happened?

When .prettierignore not found, .gitignore will be used as ignorePath by prettier itself

@BPScott
Copy link
Member

BPScott commented Dec 26, 2023

I'm strongly opposed to adding new features that allow users to do customizations that diverge from the standard "configure prettier using the .prettierrc / .prettierignore file" behaviour. I would strongly advise against implementing this.

The aim is that you should get identical output if you format a file through prettier's CLI or through eslint with eslint-plugin-prettier. Adding options or additional behaviour to eslint-plugin-prettier is a vector for allowing divergences to happen, which moves us away from that goal, and increases our support burden as there is potential for suprising behaviour that is not what eslint or prettier themselves do.

This proposal introduces plugin-specific behaviour and the critical tenant of "eslint CLI and prettier CLI must produce the same output" breaks.


In cases where a .eslintignore file is present then for files mentioned in that file the prettier/prettier rule (any any other rule) will never be invoked in the first place. If a file is mentioned in the eslintignore then the code that runs prettier would never be invoked in the first place. Can you give an example of when setting this would have an effect?

@JounQin
Copy link
Member Author

JounQin commented Dec 26, 2023

@BPScott prettier will respect .gitignore + .prettierignore by default at the same time on prettier v3.

Tip! Prettier will follow rules specified in .gitignore if it exists in the same directory from which it is run. You can also base your .prettierignore on .eslintignore (if you have one).

See also: https://prettier.io/docs/en/install and

https://github.com/prettier/prettier/blob/f3fff2ef13d11b7952feef4e7180e658fd4809a0/src/cli/cli-options.evaluate.js#L199C27-L199C36

https://github.com/prettier/prettier/blob/f3fff2ef13d11b7952feef4e7180e658fd4809a0/src/index.d.ts#L781

If a file is mentioned in the eslintignore then the code that runs prettier would never be invoked in the first place. Can you give an example of when setting this would have an effect?

That's a good point. ESLint runs different from prettier itself on virtual files.

For instance, I have a plugin extracting JavaScript codes from .txt files, prettier does not support .txt files natively, so it would be passed as .txt/0_xxx.js to prettier.format, and mostly there will be no *.txt/*.js in .prettierignore, but there could be *.txt/*.js in .eslintignore.

So my proposed change would be changing the following

ignorePath: '.prettierignore',

- ignorePath: '.prettierignore',
+ ignorePath: ['.gitignore', '.prettierignore', '.eslintignore'],

@JounQin
Copy link
Member Author

JounQin commented Jan 10, 2024

Friendly ping @BPScott

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants