prettier-plugin-tailwindcss
prettier-plugin-tailwindcss copied to clipboard
Incompatibility with other Prettier plugins
To make this plugin work we had to use private Prettier APIs that can only be used by a single plugin at once. This means this plugin is incompatible with other Prettier plugins that are using the same APIs.
This GitHub issue will serve as a place to keep track of which Prettier plugins are incompatible βΒ and hopefully we'll eventually find some workarounds, or even a proper long term solution. π
Known incompatibilities
-
@trivago/prettier-plugin-sort-imports
-
prettier-plugin-organize-imports
-
prettier-plugin-svelte
(see below) -
prettier-plugin-twig-melody
prettier-plugin-svelte
We've bundled the prettier-plugin-svelte
directly into prettier-plugin-tailwindcss
, so if you'd like to use this plugin with Svelte, just uninstall prettier-plugin-svelte
and everything should work as expected.
Workarounds
While I have not tested it yet, @Mattinton provided one possible workaround in this comment.
I originally opened issue #26 about prettier-plugin-organize-imports
- in that specific case, I'm able to work around the incompatibility for now by monkey-patching prettier-plugin-tailwindcss
so that each overlapping parser uses the preprocess
function from prettier-plugin-organize-imports
, like so:
// merged-prettier-plugin.js
const tailwind = require('prettier-plugin-tailwindcss')
const organizeImports = require('prettier-plugin-organize-imports')
const combinedFormatter = {
...tailwind,
parsers: {
...tailwind.parsers,
...Object.keys(organizeImports.parsers).reduce((acc, key) => {
acc[key] = {
...tailwind.parsers[key],
preprocess(code, options) {
return organizeImports.parsers[key].preprocess(code, options)
},
}
return acc
}, {}),
},
}
module.exports = combinedFormatter
// .prettierrc.js
module.exports = {
plugins: [require('./merged-prettier-plugin.js')],
...
}
This works for now because, from what I can tell, prettier-plugin-tailwindcss
doesn't set a preprocessor, and prettier-plugin-organize-imports
does all of its work in the preprocessor.
Looking forward to whatever eventual fix removes the need for the patch!
Might be a bit of an edge case. But I am using Laravel and subsequently Blade template files.
So that prettier runs on these files I am using @shufo/prettier-plugin-blade. But as this issue suggests, Tailwind classes are not sorted when run with this plugin.
Seems this one might be incompatible as well https://github.com/withastro/prettier-plugin-astro
I'm in a vue 3 project where we use pug and the plugin is not really working with my current setup. I'm also using vetur as a vscode extension that is set to format everything with prettier (html, pug, etc).
Something strange is happening because if I add new lines or extra tabs, the formatter will kick in on save and do its job. However it does not format the order of tailwind classes, even in regular html template tags.
The only time I got the tailwind order to work was by doing the npx prettier --write ./some/file.vue
. This only worked in a regular html template tag, not pug.
I tried removing the dependency for the prettier pug plugin and testing it out and it still does not order classes. Is it conflicting with something else?
"dependencies": {
"core-js": "^3.8.3",
"ionicons": "^6.0.1",
"vue": "^3.2.13",
"vue-i18n": "^9.2.0-beta.30",
"vue-router": "^4.0.3",
"vuex": "^4.0.0"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@prettier/plugin-pug": "^1.19.2",
"@vue/cli-plugin-babel": "~5.0.0-rc.2",
"@vue/cli-plugin-eslint": "~5.0.0-rc.2",
"@vue/cli-plugin-router": "~5.0.0-rc.2",
"@vue/cli-plugin-vuex": "~5.0.0-rc.2",
"@vue/cli-service": "~5.0.0-rc.2",
"@vue/eslint-config-airbnb": "^6.0.0",
"autoprefixer": "^10.4.2",
"eslint": "^7.32.0",
"eslint-plugin-import": "^2.25.3",
"eslint-plugin-vue": "^8.0.3",
"eslint-plugin-vuejs-accessibility": "^1.1.0",
"postcss": "^8.4.5",
"prettier": "^2.5.1",
"prettier-plugin-tailwindcss": "^0.1.7",
"pug": "^3.0.2",
"pug-plain-loader": "^1.1.0",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"tailwindcss": "^3.0.18"
}
@rwwagner90 It's not that this plugin is incompatible with prettier-plugin-astro
, but this plugin only works with a few extensions (such as vue
, html
, etc).
Subscribing to this. Working with Craft CMS, it's disappointing to see this is incompatible with prettier-plugin-twig-melody.
@rwwagner90 It's not that this plugin is incompatible with
prettier-plugin-astro
, but this plugin only works with a few extensions (such asvue
,html
, etc).
Would it be possible to add astro support?
plugin not work when i use @apply on .scss file ? :(
Seem to be having problems when parsing Angular HTML files too
I don't know if it is also related to this, but I can't have prettier-plugin-tailwindcss
working alongside @tailwindcss/forms
. It says it doesn't find it.
@nunocasteleira this issue is related to prettier plugins conflicting with each other.
If your system can't find @tailwindcss/forms
try reinstalling it with npm install @tailwindcss/forms
.
If you continue to have problems open an issue on the forms repo.
If your system can't find
@tailwindcss/forms
try reinstalling it withnpm install @tailwindcss/forms
.
Yes, but the problem arises when prettier-plugin-tailwindcss
is installed. If I uninstall it, I'm able to run prettier (with @tailwind/forms also installed), whereas it fails with prettier plugin tailwindcss added to my package.json.
@nunocasteleira Can you share your prettier config file with us?
Might be a bit of an edge case. But I am using Laravel and subsequently Blade template files.
So that prettier runs on these files I am using @shufo/prettier-plugin-blade. But as this issue suggests, Tailwind classes are not sorted when run with this plugin.
Did you find a way to get this working?
@joshmedeski I have a very minimal prettierrc, it's a Vue project:
{
"endOfLine": "lf",
"singleQuote": true,
"printWidth": 120
}
@nunocasteleira I'm stumped. I don't know why @tailwindcss/forms
has any relationship with prettier-plugin-tailwindcss
.
I can share the repo if you want. On 21 Apr 2022, 22:01 +0100, Josh Medeski @.***>, wrote:
@nunocasteleira I'm stumped. I don't know why @tailwindcss/forms has any relationship with prettier-plugin-tailwindcss. β Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>
Also appears to be incompatible with prettier-plugin-jsdoc.
My prettier config:
{
"$schema": "http://json.schemastore.org/prettierrc",
"endOfLine": "lf",
"jsxSingleQuote": true,
"printWidth": 100,
"quoteProps": "consistent",
"singleQuote": true,
"trailingComma": "none",
"useTabs": false,
"overrides": [
{
"files": ["**/*.html"],
"options": {
"singleQuote": false,
"tabWidth": 2
}
}
]
}
what's progress of this issue, i run into this issue, it will break pluginprettier-plugin-organize-imports
,
No one has taken ownership to fix this issue.
For now, I suggest everyone expect prettier-plugin-tailwindcss
can only be used on its own right now, your other prettier plugins aren't compatible.
After reviewing https://github.com/prettier/prettier/issues/10261 it seems like this plugin is highjacking the typescript parser and so any other plugin that also wants to interact with the same parser they are ignored. If someone understands this please feel free to experiment with rewriting this plugin so other plugins continue to work as expected.
Both prettier-plugin-style-order
and prettier-plugin-css-order
do not work with prettier-plugin-tailwindcss.
If you want a workaround, you could use the prettier --config
flag and have two different configs (using the sharing configurations patter for consistent formatting).
This solution won't work with your IDE on saving, but it could work with a lint-stage solution.
prettier --config ./.prettierrc.tailwind.js --write .
prettier --config ./.prettierrc.other.js --write .
It's not a pretty solution, but I think it's possible for those that strongly want multiple plugin support.
I, personally, have decided to use the tailwind prettier plugin on its own for now to avoid adding this much complexity to my projects.
It's not a pretty solution, ...
I see what you did there.
Also appears to be incompatible with https://github.com/prettier/plugin-php
how about this issue
If you want a workaround, you could use the prettier
--config
flag and have two different configs (using the sharing configurations patter for consistent formatting).This solution won't work with your IDE on saving, but it could work with a lint-stage solution.
prettier --config ./.prettierrc.tailwind.js --write . prettier --config ./.prettierrc.other.js --write .
It's not a pretty solution, but I think it's possible for those that strongly want multiple plugin support.
I, personally, have decided to use the tailwind prettier plugin on its own for now to avoid adding this much complexity to my projects.
Thanks for the idea, I made a lintstaged script to run eslint (with prettier tailwindcss) + prettier (with prettier sort imports), here is an example
Also incompatible with prettier-plugin-organize-attributes
Any workarounds @guilhermetod ?
I for one can say that I can install and integrate: @tailwindcss/forms
and it has 0 affect on this Prettier plugin.
I don't particular care for the defaults put forth in the forms extension, so I don't usually use it. Just tried it out when I saw these issues.
As to all of the other plugins, I don't personally use all of those, but other ones such as standard prettier, or prettier for Jest I do use and never had any issue.
@manavm1990 This issue is specifically in regards to those other plugins, not for the standard prettier plugin which this tailwind plugin was built for and can be used in tandem with forms π