Prettier-vscode: When "prettier.requireConfig" is true and no config exists extension should not try to load Prettier

Created on 23 Dec 2019  ·  7Comments  ·  Source: prettier/prettier-vscode

Issue Type: Bug

Hey there, in a particular scenario the extension is constantly giving me these error notifications with the following message:

Failed to load module. If you have prettier or plugins referenced in package.json, ensure you have run npm install Attempted to load prettier from package.json

The folder I've opened in Code is a subdirectory of a project (an example in the examples folder of https://github.com/zeit/next.js) where the root project has prettier listed in package.json but the example project does not. That's maybe fair -- I can see why you might want to recurse up to find the first relevant package.json.

But more notably, I have prettier.requireConfig set to true in my user settings, and as far as I can see neither the example subproject nor the root project has a .prettierrc or a Prettier config in its package.json. I don't want to install the root project (which has a huge number of dependencies and takes a long time) to make a simple fix to an example, so Prettier indeed isn't installed -- but why should the extension scream about it not being installed in the first place, when I've told it to do nothing unless it finds a config?


Relevant parts of my user settings.json

{
  "editor.formatOnSave": true,
  "prettier.disableLanguages": [
    "markdown",
    "json",
    "jsonc",
    "plaintext"
  ],
  "prettier.requireConfig": true,
  "[json],[jsonc]": {
    "editor.defaultFormatter": "vscode.json-language-features"
  },
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[javascriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}

The subproject package.json in question:

{
  "name": "with-react-intl",
  "version": "1.0.0",
  "scripts": {
    "start": "NODE_ENV=production node --icu-data-dir=node_modules/full-icu server.js",
    "dev": "node --icu-data-dir=node_modules/full-icu server.js",
    "build": "next build && npm run extract && node ./scripts/default-lang",
    "extract": "formatjs extract --messages-dir lang/.messages/ --remove-default-message pages/*.js"
  },
  "dependencies": {
    "@formatjs/cli": "1.1.12",
    "@formatjs/intl-relativetimeformat": "^2.8.2",
    "@formatjs/intl-utils": "^0.6.1",
    "accepts": "^1.3.7",
    "full-icu": "^1.3.0",
    "glob": "^7.1.4",
    "intl": "^1.2.5",
    "next": "latest",
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-intl": "^3.1.12"
  },
  "license": "ISC"
}

The result of running $ npm ls -g --depth=0:

/home/whatever/.nvm/versions/node/v13.1.0/lib
├── [email protected]
└── [email protected]

The error stack I'm getting over and over in VSCode:

["ERROR" - 2:22:53 p.m.] Failed to load prettier from ''
Cannot find module 'prettier' from '/home/whatever/project/package.json'
Error: Cannot find module 'prettier' from '/home/whatever/project/package.json'
    at Function.e.exports [as sync] (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:319843)
    at t.ModuleResolver.findPkg (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:246852)
    at t.ModuleResolver.findPkg (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:246954)
    at t.ModuleResolver.findPkg [as findPkgMem] (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:247210)
    at t.ModuleResolver.requireLocalPkg (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:245330)
    at t.ModuleResolver.getPrettierInstance (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:243969)
    at t.LanguageResolver.getSupportLanguages (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:242420)
    at t.LanguageResolver.allEnabledLanguages (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:242028)
    at t.StatusBarService.toggleStatusBarItem (/home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:85577)
    at /home/whatever/.vscode/extensions/esbenp.prettier-vscode-3.18.0/dist/extension.js:1:85250
    at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
    at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:641:245
    at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
    at f.$acceptDocumentsAndEditorsDelta (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:561:804)
    at p._doInvokeHandler (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:663:275)
    at p._invokeHandler (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:662:971)
    at p._receiveRequest (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:661:639)
    at p._receiveOneMessage (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:660:468)
    at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:658:691
    at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
    at _.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:189:274)
    at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:820:285
    at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
    at _.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:189:274)
    at t.PersistentProtocol._receiveMessage (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:193:629)
    at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:190:824
    at l.fire (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:46:893)
    at p.acceptChunk (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:186:737)
    at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:186:89
    at Socket.t (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:195:68)
    at Socket.emit (events.js:200:13)
    at addChunk (_stream_readable.js:294:12)
    at readableAddChunk (_stream_readable.js:275:11)
    at Socket.Readable.push (_stream_readable.js:210:10)
    at Pipe.onStreamRead (internal/stream_base_commons.js:166:17)

Extension version: 3.18.0
VS Code version: Code 1.41.1 (26076a4de974ead31f97692a0d32f90d735645c0, 2019-12-18T15:04:31.999Z)
OS version: Linux x64 4.15.0-72-generic

enhancement locked

Most helpful comment

Good point, will fix shortly.

All 7 comments

Good point, will fix shortly.

Also, even if prettier is installed globally and "Resolve Global Modules" is enabled, the extension still shows this error.

I ran into the same issue. My teammates didn't have this issue in previous versions.

I was looking into this and realized there is a bit of a chicken and egg problem here. In order to detect if the config is present, we need to load prettier - we also need to know what file you are formatting because of the way prettier config resolution works. So requireConfig doesn't actually mean the config is required in the root of the VS Code project - it means it is required for the file being formatted.

Fixed in version 3.20.0

@ntotten sorry to bother you, but I'm not sure I get the status of this issue -- is this actually resolved by a fix or is it a limitation of the extension? I just discovered that I'm still affected by this, in the exact same scenario as the one I had opening the issue.

To wit: I'm in a subdirectory of a repository (same as the original, next.js's examples folder, which contains example projects that a user can install on an individual basis without needing to install all the the development dependencies for the full monorepo as declared in the root of the repo), and I'm installing the dependencies for _only_ that subproject (which does not declare a dependency on prettier, nor does it contain a .prettierrc or .prettierignore).

I've opened _only_ that project in Code, so that the root in my editor is the folder containing this specific example. And yet prettier-vscode seems to be recursing upwards outside of the subproject and then complaining that prettier is not installed, spamming error notifications on every paste or save, I assume because prettier is declared as a devDependency of the containing project (which again, I stress to add _isn't open in Code_).

Maybe it's a regression? This is with version 4.4.0 of the extension. Here's the error log/stacktrace:

["INFO" - 5:59:20 p.m.] Extension Name: esbenp.prettier-vscode.
["INFO" - 5:59:20 p.m.] Extension Version: 4.4.0.
["ERROR" - 5:59:20 p.m.] Failed to load local module prettier.
["ERROR" - 5:59:20 p.m.] Cannot find module 'prettier' from '/<redacted>/next.js'
Error: Cannot find module 'prettier' from '/<redacted>/next.js'
    at Function.e.exports [as sync] (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:43767)
    at t.ModuleResolver.findPkg (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:30269)
    at t.ModuleResolver.findPkg [as findPkgMem] (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:33444)
    at t.ModuleResolver.requireLocalPkg (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:28402)
    at t.ModuleResolver.getPrettierInstance (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:27101)
    at t.LanguageResolver.getSupportLanguages (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:25384)
    at t.LanguageResolver.allEnabledLanguages (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:24992)
    at t.default.selectors (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:54172)
    at t.default.registerFormatter (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:53474)
    at t.activate (/<redacted>/.vscode/extensions/esbenp.prettier-vscode-4.4.0/dist/extension.js:1:21432)
    at Function._callActivateOptional (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:788:244)
    at Function._callActivate (/usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:787:909)
    at /usr/share/code/resources/app/out/vs/workbench/services/extensions/node/extensionHostProcess.js:786:960
    at async Promise.all (index 8)

@lostfictions Can you open this as a new issue and provide a simple reproduction. THis may be a regression.

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Connorelsea picture Connorelsea  ·  4Comments

Tanmccuin picture Tanmccuin  ·  3Comments

SkeLLLa picture SkeLLLa  ·  4Comments

PetrykowskiM picture PetrykowskiM  ·  3Comments

bluemoehre picture bluemoehre  ·  3Comments