From 225bd4a60493416452559e57e1b88904e947f449 Mon Sep 17 00:00:00 2001 From: Daniel Bayley Date: Thu, 11 Apr 2024 00:17:45 +0100 Subject: [PATCH] feat: add support for `package.yaml` config --- changelog_unreleased/api/16157.md | 19 +++++++++++++++++++ docs/configuration.md | 2 +- src/config/prettier-config/config-searcher.js | 15 ++++++++++++++- src/config/prettier-config/load-config.js | 9 +++++++-- src/config/prettier-config/loaders.js | 7 ++++++- 5 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 changelog_unreleased/api/16157.md diff --git a/changelog_unreleased/api/16157.md b/changelog_unreleased/api/16157.md new file mode 100644 index 000000000000..11f916c1a8f9 --- /dev/null +++ b/changelog_unreleased/api/16157.md @@ -0,0 +1,19 @@ +#### Add support for `package.yaml` config (#16157 by @danielbayley) + +Enable support for reading `prettier` configuration directly from [`package.yaml`](https://github.com/pnpm/pnpm/pull/1799). + + +```yaml +# package.yaml +prettier: + semi: false + singleQuote: true +``` + +```js +// Input +console.log("pretty"); + +// Prettier +console.log("pretty"); +``` diff --git a/docs/configuration.md b/docs/configuration.md index 8655242481dd..7848faf3d2d6 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -5,7 +5,7 @@ title: Configuration File You can configure Prettier via (in order of precedence): -- A `"prettier"` key in your `package.json` file. +- A `"prettier"` key in your `package.json`, or [`package.yaml`](https://github.com/pnpm/pnpm/pull/1799) file. - A `.prettierrc` file written in JSON or YAML. - A `.prettierrc.json`, `.prettierrc.yml`, `.prettierrc.yaml`, or `.prettierrc.json5` file. - A `.prettierrc.js`, or `prettier.config.js` file that exports an object using `export default` or `module.exports` (depends on the [`type`](https://nodejs.org/api/packages.html#type) value in your `package.json`). diff --git a/src/config/prettier-config/config-searcher.js b/src/config/prettier-config/config-searcher.js index 11ca86f80a9e..3ebdf5b811f4 100644 --- a/src/config/prettier-config/config-searcher.js +++ b/src/config/prettier-config/config-searcher.js @@ -1,9 +1,14 @@ import isFile from "../../utils/is-file.js"; import Searcher from "../searcher.js"; -import { loadConfigFromPackageJson } from "./loaders.js"; +import { + loadConfigFromPackageJson, + loadConfigFromPackageYaml, +} from "./loaders.js"; const CONFIG_FILE_NAMES = [ "package.json", + "package.yaml", + "package.yml", ".prettierrc", ".prettierrc.json", ".prettierrc.yaml", @@ -31,6 +36,14 @@ async function filter({ name, path: file }) { } } + if (name === "package.yaml") { + try { + return Boolean(await loadConfigFromPackageYaml(file)); + } catch { + return false; + } + } + return true; } diff --git a/src/config/prettier-config/load-config.js b/src/config/prettier-config/load-config.js index 65977eec7e89..d248a717b7a4 100644 --- a/src/config/prettier-config/load-config.js +++ b/src/config/prettier-config/load-config.js @@ -1,14 +1,19 @@ import path from "node:path"; import loadExternalConfig from "./load-external-config.js"; -import loaders, { loadConfigFromPackageJson } from "./loaders.js"; +import loaders, { + loadConfigFromPackageJson, + loadConfigFromPackageYaml, +} from "./loaders.js"; async function loadConfig(configFile) { const { base: fileName, ext: extension } = path.parse(configFile); const load = fileName === "package.json" ? loadConfigFromPackageJson - : loaders[extension]; + : fileName === "package.yaml" + ? loadConfigFromPackageYaml + : loaders[extension]; if (!load) { throw new Error( diff --git a/src/config/prettier-config/loaders.js b/src/config/prettier-config/loaders.js index a5f5f57b2336..876113c5c7ef 100644 --- a/src/config/prettier-config/loaders.js +++ b/src/config/prettier-config/loaders.js @@ -27,6 +27,11 @@ async function loadConfigFromPackageJson(file) { return prettier; } +async function loadConfigFromPackageYaml(file) { + const { prettier } = await loadYaml(file); + return prettier; +} + async function loadYaml(file) { const content = await readFile(file); try { @@ -67,4 +72,4 @@ const loaders = { }; export default loaders; -export { loadConfigFromPackageJson, readJson }; +export { loadConfigFromPackageJson, loadConfigFromPackageYaml, readJson };