ChatGPT解决这个技术问题 Extra ChatGPT

Why does Prettier not format code in VS Code?

In my Nuxt application where ESlint and Prettier are installed and enabled, I switched to Visual Studio Code.

When I open a .vue file and press CMD+ Shift + P and choose Format Document, my file does not get formatted at all.

My .prettierrc settings:

{
  "tabWidth": 2,
  "semi": false,
  "singleQuote": true
}

I have so many source code lines, so I cannot format them manually. What am I doing wrong?

Seems that prettier by default has prettier.disableLanguages set to ["vue"]
I'd add to .prettierrc line "disableLanguages": []. Docs says that this change requires restart
There's also issue for v1.27.2 with note that the same config worked for v.1.23
Upvoted b/c just pressing CMD+ Shift + P then Format Document, then choosing Prettier as my default formatter helped me :D
For me, it was not working even after making all the configuration setting changes. Then, I realized I was trying to format a code fragment var x = "test"; written in HTML file when I should have written it in a *.JS file. When I wrote the JS code into a JS file it got formatted to var x = 'test'.

R
RobC

How I've sorted it after having super huge frustrations with Prettier stopping working in VSCode.

Select VS Code -> View -> Command Palette, and type: Format Document With Then Configure Default Formatter... and then choose Prettier - Code formatter.

This sorted the problem for me magically.

Depending on your case this might help you...


I did configure Prettier as std formatter in settings but it just would not work. This worked. Made my day!
Same here, but I had to de-select my default formatter and then perform the action you mention again for this to work.
Not sure where to find Configure Default Formatter but I used File->Settings->Text Editor->Default Formatter
When I select the default formatter as Prettier, it formats that file but after that it does not work on save. I have my save option checked but still. I had to select the default formatter again and again. Any Solution
@HimanshuTariyal This should work for you, but feel free to check out my solution: stackoverflow.com/a/64273353/4298115
l
lbragile

If doing what @Simin Maleki mentioned does not solve it for you, there is a chance that your default formatter is not set:

File > Preferences > Settings > Search for "default formatter" 

Make sure your Editor: Default Formatter field is not null but rather esbenp.prettier-vscode and that all the languages below are ticked. This fixed my issue.

STEP BY STEP WALKTHROUGH

https://i.stack.imgur.com/DINkP.png

Also make sure that your format on save is enabled:

https://i.stack.imgur.com/xBmiH.png


Spot on should be the answer
Randomly my vscode stop working with prettier after months of working correctly, don't know why this fixes it :pray:
I did this and also tried the solution from @miha to no avail. Finally uninstalled/reinstalled and it worked
Yup, this is the answers is
Must be the accepted answer
F
FacePalm

Sometimes, prettier stops working when there are syntactic errors in the code. You can view the errors by clicking on the x button on the bottom right corner beside Prettier

https://i.stack.imgur.com/Zd03Y.png


Sometimes Prettier won't show at the bottom, but another extension (eg. ESLint) will, and if you click on it there's a drop-down to pick other tools ... including Prettier. Pick it to see Prettier's log (and after that Prettier should show in the tray).
Thank you so much! This took me two hours to try and figure out to no avail until I saw your answer. Something so simple.
You saved my life. I forgot to put a dot before my config file so it was using VS Code configuration by default.
I do not see prettier at the bottom right. I have "editor.defaultFormatter": "esbenp.prettier-vscode", and installed the ext. Want powershell format.
N
Norbert Bartko

Prettier could also format your files on save.

However, installing and enabling does not result in working.

You have to check "format on Save" in VSCode: Setting >> User >> Text Editor >> Formatting

https://i.stack.imgur.com/unii7.png


also alt (command) + shift + f is for formatting without save.
Note that, in addition to Format On Save being enabled, you also often have to have a default formatter specified.
Following every solution from the top, it worked at this point : ) , thanks a lot
Using alt (command) + shift + f helped me. A pop up came up to select default formatter since there were multiple present.
Also alt + shift + f, give me an easy way to choice default Formatter
L
Levent Divilioglu

You only have to configure your Default Formatter and check the checkbox in Format On Save in the settings, after installing prettier to make it work. Don't mess with other configuration files.

1 - Select Default Formatter

Open Files -> Preferences -> Settings (or Ctrl + , in Windows). Search for Editor: Default Formatter Select your default formatter as Prettier - Code Formatter;

See the image below;

https://i.stack.imgur.com/gsqh8.png

2 - Save On Format

Open Files -> Preferences -> Settings (or Ctrl + , in Windows). Search for Editor: Format on Save Click the check box under Format On Save;

See the image below;

https://i.stack.imgur.com/7jMCf.png


Y
Ymin Hu

disable and enable prettier extension solves my problem


If all the other configs are right, this will do the trick.
Can't believe this was it... Was trying to fix this for almost an HOUR. Had vs extensions installed, npm packages installed, settings.json setup, eslintrc was good to go, tried toggling settings, going in settings panel, everything... I'm just amazed this was it, since I tried "turning it off and on again" in every other regard and the settings seemed to be applied instantly...
It looks like my issue was caused by upgrading my version of node. Doing this fixed the problem.
Using Developer: Reload Window from the command palette worked for me too.
This worked for me when I'm configuring formatting for Solidity files, and I spent 2 weeks trying to make it work again only to find up a simple "have you tried turning it off and on" would have worked. :/
J
Juan Castano

I am not using Vue, but had the same problem.

I already had the settings

Editor: default formatter to prettier

Editor: Format on Save to true

I already had .eslintrc.js and .prettierrc files But nothing worked.

The solution to my problem was that I had all set properly, except I needed to:

Command + Shift + p

type format document with

select Configure Default Formatter...

select Prettier as default.

I don't know why the Editor: Format on Save set to true was not enough. I needed to select default formatter using the above steps so it worked.

https://i.stack.imgur.com/6uamN.png


If you do have an ESlint config already, you should probably use Prettier via ESlint. Here is my answer on how to achieve such thing.
i
iPzard

can you try to add this section to your VS Code settings.json file?

"[javascript]": {
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
},

That was also my case. The default formatter was set to the correct one by formatting on save was disabled.
This worked for me
That's my case!! Thanks, It didn't work because formatOnSave was set to false in json
A
Arsham Arya

https://i.stack.imgur.com/3Euic.png


Thank you, I could not find this in the sea of options.
s
supi

you can still have issues in spite of all these settings. In this case, as pointed out in an earlier answer, then it would be a good point to check the prettier notification at bottom status bar in VSCode.

https://i.stack.imgur.com/S5buS.png

When clicking on that status, the output panel should report the issue in the HTML file. For me, the issue was I had a div inside a p tag which I assume prettier/VSCode conventions are against. When I removed it (and combined with all the settings above, namely default formatter and format on save) I got prettier working.

.prettierrc is not required unless you want to override VSCode settings


Thanks, you saved my day.
This was my case! Thank you so much.
none of the other answers worked for me, this was my problem..
M
Manohar Reddy Poreddy

On Windows:

We can open the below file using:

Start > Run 

File Path:

%AppData%\Code\User\settings.json

Change From:

"[javascript]": {
    "editor.defaultFormatter": "vscode.typescript-language-features"
},

To:

"[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
},

Note:

If the above is not present, add it instead of changing.

You should already have installed the "Prettier - code formatter" to see the effect of the above change - https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode


Thank you. The accepted solution worked for me. But maybe your feedback can work for the others. Thank you for sharing the information
@BillalBegueradj True, accepted didn't work for me, and I wasted about 1 hour, so posted this one. Maybe this is a more recent issue that we face in 2020.
How to add in macos?
@MalithKuruppu This also works on macOS. You just need to press cmd+p and select "Preferences: Open Settings (JSON)" to get to the settings.json file.
This worked for me, thanks!
L
Lucas

This is not a problem with Prettier itself, but prettier-vscode, the VSCode extension. According to its documentation, Vue formatting is disabled by default:

prettier.disableLanguages (default: ["vue"]) A list of languages IDs to disable this extension on. Restart required. Note: Disabling a language enabled in a parent folder will prevent formatting instead of letting any other formatter to run

In this case, to enable you should set "prettier.disableLanguages": []. And since this is an extension configuration, you should do it in VSCode settings file, not .prettierrc.


This setting has been removed.
Yep, OP should update or remove it or downvotes will flow... :p
S
Skocdopole

For me the problem was with HTML files where formatting stopped working one day. I had Format On Save configured, which worked in all files except HTML.

I then realized that I experimentally set Format On Save Mode to modification instead of file and forgot about it. This had an effect of not formatting anything in HTML files, surprisingly not even my changes. Setting it back to file solved the issue.

https://i.stack.imgur.com/NZ1dI.png


This was the only answer which worked for me! Thanks!
D
Devesh

1 .Use the other extension prettier was not working for me i just use the other VSCODE extension named PrettierNow i think this will help, done for me.Checkout the extension here

2 .From Latest Updates of prettier you need to add .prettierrc file in your root of the projects if you want to stick with prettier. An example of .prettierrc is this-

{
  "tabWidth": 4,
  "singleQuote": true,
  "semi": false
}

S
Sonic Soul

in my case it was being hijacked by typescript formatter.

it was driving me crazy because it kept re-formatting my spaces!

to fix i did cmd+. (settings) type -> "default formatter"

and unchecked typescript

https://i.stack.imgur.com/224tE.png


Life saver you are! :)
Z
Zenox

Enabling "format on Save" in VSCode: Setting >> User >> Text Editor >> Formatting worked for me! 🙌

Print


S
Srishti

If Prettier formats all other files except HTML files automatically on save:

Press Cmd + P or Ctrl + P to open the command palette and type the following text in it:

> open settings

Click on Preferences: Open Settings (JSON) from the suggestion dropdown. Inside the settings.json file, Check if "[html]" key exists. If the key exists and its value indicates using another formatting extension installed in Visual Studio Code, you should reset it back to use Prettier.

"[html]": {
    "esbenp.prettier-vscode"
}

For an instance, sometimes, the value of "[html]" key could be "remimarsal.prettier-now" when you would have Prettier Now extension installed.

If you don't have any other formatting extension installed other than Prettier, you can also remove the "[html]" key altogether from settings.json file.


K
Kendra

This is what worked for me (my default formatter was already set to Prettier)

Change default formatter to default Restart vscode Change default formatter back to Prettier.


To restart vscode Open the command palette (Ctrl + Shift + P) and execute the command: Reload Window, thanks!
P
Pankaj Sharma

Go to Manage(located on left-bottom corner) -> Settings -> Users tab -> Text-Editor -> Formatting -> check the format on save

if not working then close and again open your vscode editor


W
Wide Awake

For me - it was to do with ESlint which also works with Prettier. Eslint wasn't working (a local installation vs global installation conflict) which broke Prettier.


How to resolved this. I am having an issue where Eslint is asking for a new line when press enter and save it gets back to the same position and error starts appearing again.
If you do have an ESlint config already, you should probably use Prettier via ESlint. Here is my answer on how to achieve such thing.
j
jaop

Recently I got the same problem, that Prettier does not format code automatically on saving. Checking Prettier, I saw an error: Invalid "arrowParens" value. Expected "always" or "avoid", but received true.

https://i.stack.imgur.com/FeRfA.png

It turned out that I have Prettier Now installed also. This has a boolean value in my config file. After uninstalling Prettier Now, everything works fine.


k
kartick shaw

Some times with auto plugins update Required files used by Prettier might go missing .

Check this path if files are present here or folder is empty

C:\Users\YOURUSERNAME\.vscode\extensions\esbenp.prettier-vscode-2.2.2\out

If missing uninstall and reinstall prettier


> "If missing uninstall and reinstall prettier" is what did it for me. I had all the settings right, and running prettier from an NPM script even worked right, but formatting on save didn't until I uninstalled and reinstalled.
p
piouson

If none of the other answers work, check that a conflicting prettier config .prettierrc does not exist in your working directory or check for .prettierignore to be sure the files/folders are not being ignored.


Yep for me it was an older path... So it doesn't works silently.
T
TrueWill

Check if there is a .vscode/settings.json file in your project directory (workspace). In my case someone had checked in this file:

{
  "editor.formatOnSave": false
}

Solution: Delete the file (delete it from source control too) and add .vscode/ to .gitignore (if you're using git).


H
Hayyaun

In some cases where prettier is provided as a dependency, you might need to install it before prettier vscode recognizes it using one of the following commands, depending on the package manager you are using
npm i or yarn


S
Semjon Mössinger

In my case it turned out I had configured prettier to use a configuration file that didn't exist (see screnshot below). That was hard to find since there wasn't any error message but prettier just didn't work. Maybe this helps somebody, too.

https://i.stack.imgur.com/haoOQ.png


A
Ali Monapour

I Rolling back prettier to 1.7.3 and fixed it


R
Randall Flagg

In my case I had to do the following:

Install prettier from the command line(npm install --save-dev --save-exact prettier prettier-plugin-custom) Reload VSCode

and voilà, everything started working.

TIP: To make sure the installation is good I checked for the version:

npx prettier --version

This worked for me. I had prettier installed globally already, but it didn't work. If I had to guess, it might have been a WSL issue.
g
gandharv garg

Check for requirePragma in .prettierrc, it says you need to add a top level comment for that file to be formatted

remove that rule and it should work


k
kissu

How to format your code through VScode's ESlint plugin

Alright, rather than giving a guide on how to use VScode's Prettier extension, I'd rather explain how to rely on ESlint and have both worlds: checking that your code is correct (ESlint), then formatting it (Prettier).

What are the advantages of this?

not forcing your entire team to use VScode with the Prettier extension, maybe some prefer Vim, IntelliJ's Webstorm, Emacs etc... A tool-agnostic solution is IMO always better.

I think that linting your code is more important that formatting it, but if you have both extensions working at the same time, you may have conflicts between the formatting and the linting.

your hardware will struggle less, if you have less extensions running (mainly because it can stop the conflicts)

using an ESlint + Prettier combo will strip the need to have a specific personal configuration aside of the codebase (untracked). You'll also benefit from having Vue/Nuxt specific ESlint rules and a simpler/more universal configuration.

an ESlint configuration can be configured to be run before a commit, in a CI/CD or anywhere really.

How to achieve this kind of setup?

Let's start first by installing the ESlint extension and only it, DO NOT install the Prettier one.

https://i.stack.imgur.com/0F3N6.png

Not installed Vetur yet?

I do heavily recommend it for Vue2 apps (what Nuxt is running as of today), you can find it below. It will allow to quickly and simply ESlint (+ Prettier) any .vue files.

When it's done, access the Command Palette with either ctrl + shift + p (Windows/Linux) or cmd + shift + p (Mac) and type Preferences: Open Default Settings (JSON)

https://i.stack.imgur.com/TP7oY.png

There, you should have something like this

{
  "workbench.colorTheme": "Solarized Dark", // example of some of your own configuration

  "editor.codeActionsOnSave": {
    "source.fixAll": true,
  },
  "eslint.options": {
    "extensions": [
      ".html",
      ".js",
      ".vue",
      ".jsx",
    ]
  },
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    "typescript",
    "typescriptreact",
    "html",
    "vue",
  ],
}

How to try that your configuration is now working?

To see if my solution is working, please download this Github repo, get the latest stable Node version (eg: 14) and run yarn to have it working. Otherwise, simply open VScode.
This repo can also be used to double-check that yours is properly configured by inspecting my files there!

Then, you could access any .js or .vue file and see the problems there (Command Palette: Problems: Focus on Problems View). nuxt.config.js and /pages/index.vue are good examples, here is the index.vue file.

https://i.stack.imgur.com/2oDyc.png

You can see that we do have several things that can be fixed by Prettier but that we do also have an eslint(vue/require-v-for-key) error. The solution is available as a comment just below btw.

PS: if you want to have inline ESlint warnings/errors as in the screenshot, you can install Error Lens, it's a super amazing extension if you want to get rid of errors.

Save this file and you should saw that every auto-fixable things are done for you. Usually it's mainly Prettier issues but it can also sometimes be ESlint too. Since we do have the ESlint rules from Nuxt, you'll get some nice good practices out of the box too!

Tada, it's working! If it's not, read the section at the end of my answer.

If you want to create a brand new project

You can run npx create-nuxt-app my-super-awesome-project and select few things there, the most important being Linting tools: Eslint + Prettier of course (hit space to opt-in for one of them).

https://i.stack.imgur.com/r5Qtc.png

Warning: as of today, there is an additional step to do to have ESlint + Prettier working properly as shown in this Github issue. The fix should be released pretty soon, then the configuration below will not be needed anymore!

To fix this, run yarn add -D eslint-plugin-prettier and double check that your .eslintrc.js file is a follows

module.exports = {
  root: true,
  env: {
    browser: true,
    node: true
  },
  parserOptions: {
    parser: '@babel/eslint-parser',
    requireConfigFile: false
  },
  extends: [
    '@nuxtjs',
    'plugin:prettier/recommended', // this line was updated
    'prettier'
  ],
  plugins: [
  ],
  // add your custom rules here
  rules: {}
}

Then, you can have it working totally fine as above. Save the file and it should run ESlint then Prettier one after the other!

If you still have some issues

try to use the Command Palette again and ESLINT: restart ESLint Server or even Developer: Reload Window

feel free to leave a comment or contact me if you need some help