Skip to content

Commit

Permalink
feat: add support for package.yaml config (#16157)
Browse files Browse the repository at this point in the history
Co-authored-by: fisker Cheung <lionkay@gmail.com>
  • Loading branch information
danielbayley and fisker committed May 10, 2024
1 parent a23ea60 commit da772ff
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 5 deletions.
10 changes: 10 additions & 0 deletions changelog_unreleased/api/16157.md
@@ -0,0 +1,10 @@
#### Add support for `package.yaml` config (#16157 by @danielbayley)

Enable support for reading `prettier` configuration from [`package.yaml`](https://github.com/pnpm/pnpm/pull/1799).

```yaml
# package.yaml
prettier:
semi: false
singleQuote: true
```
2 changes: 1 addition & 1 deletion docs/configuration.md
Expand Up @@ -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`).
Expand Down
14 changes: 13 additions & 1 deletion src/config/prettier-config/config-searcher.js
@@ -1,9 +1,13 @@
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",
".prettierrc",
".prettierrc.json",
".prettierrc.yaml",
Expand Down Expand Up @@ -31,6 +35,14 @@ async function filter({ name, path: file }) {
}
}

if (name === "package.yaml") {
try {
return Boolean(await loadConfigFromPackageYaml(file));
} catch {
return false;
}
}

return true;
}

Expand Down
9 changes: 7 additions & 2 deletions 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(
Expand Down
7 changes: 6 additions & 1 deletion src/config/prettier-config/loaders.js
Expand Up @@ -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 {
Expand Down Expand Up @@ -67,4 +72,4 @@ const loaders = {
};

export default loaders;
export { loadConfigFromPackageJson, readJson };
export { loadConfigFromPackageJson, loadConfigFromPackageYaml, readJson };
30 changes: 30 additions & 0 deletions tests/integration/__tests__/config-resolution.js
Expand Up @@ -419,3 +419,33 @@ test("Search from directory, not treat file as directory", async () => {
"directory/.prettierrc",
);
});

test("package.json/package.yaml", async () => {
await expect(
prettier.resolveConfig(
new URL("../cli/config/package/file.js", import.meta.url),
),
).resolves.toMatchInlineSnapshot(`
{
"tabWidth": 3,
}
`);
await expect(
prettier.resolveConfig(
new URL("../cli/config/package/file.ts", import.meta.url),
),
).resolves.toMatchInlineSnapshot(`
{
"tabWidth": 5,
}
`);
await expect(
prettier.resolveConfig(
new URL("../cli/config/package-yaml/file.ts", import.meta.url),
),
).resolves.toMatchInlineSnapshot(`
{
"printWidth": 101,
}
`);
});
4 changes: 4 additions & 0 deletions tests/integration/cli/config/package-yaml/package.yaml
@@ -0,0 +1,4 @@
name: my-package
version: 1.0.0
prettier:
printWidth: 101

0 comments on commit da772ff

Please sign in to comment.