Skip to content

Commit

Permalink
feat: add support for package.yaml config
Browse files Browse the repository at this point in the history
  • Loading branch information
danielbayley committed Apr 1, 2024
1 parent 6d2418f commit bb96162
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 5 deletions.
19 changes: 19 additions & 0 deletions changelog_unreleased/yaml/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).

<!-- prettier-ignore -->
```yaml
# package.yaml
prettier:
semi: false
singleQuote: true
```

```js
// Input
console.log("pretty");

// Prettier
console.log("pretty");
```
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
15 changes: 14 additions & 1 deletion 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",
Expand Down Expand Up @@ -31,6 +36,14 @@ async function filter({ name, path: file }) {
}
}

if (/^package.ya?ml$/.test(name)) {
try {
return Boolean(await loadConfigFromPackageYaml(file));
} catch {
return false;
}
}

Check warning on line 45 in src/config/prettier-config/config-searcher.js

View check run for this annotation

Codecov / codecov/patch

src/config/prettier-config/config-searcher.js#L40-L45

Added lines #L40 - L45 were not covered by tests

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];
: /^package.ya?ml$/.test(fileName)
? 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;
}

Check warning on line 33 in src/config/prettier-config/loaders.js

View check run for this annotation

Codecov / codecov/patch

src/config/prettier-config/loaders.js#L30-L33

Added lines #L30 - L33 were not covered by tests

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 };

0 comments on commit bb96162

Please sign in to comment.