eslint-plugin-prettier
Advanced tools
Comparing version 4.2.1 to 5.1.2
@@ -6,2 +6,14 @@ /** | ||
// @ts-check | ||
/** | ||
* @typedef {import('eslint').AST.Range} Range | ||
* @typedef {import('eslint').AST.SourceLocation} SourceLocation | ||
* @typedef {import('eslint').ESLint.Plugin} Plugin | ||
* @typedef {import('eslint').ESLint.ObjectMetaProperties} ObjectMetaProperties | ||
* @typedef {import('prettier').FileInfoOptions} FileInfoOptions | ||
* @typedef {import('prettier').Options} PrettierOptions | ||
* @typedef {PrettierOptions & { onDiskFilepath: string, parserMeta?: ObjectMetaProperties['meta'], parserPath?: string, usePrettierrc?: boolean }} Options | ||
*/ | ||
'use strict'; | ||
@@ -17,2 +29,3 @@ | ||
} = require('prettier-linter-helpers'); | ||
const { name, version } = require('./package.json'); | ||
@@ -31,5 +44,5 @@ // ------------------------------------------------------------------------------ | ||
/** | ||
* @type {import('prettier')} | ||
* @type {(source: string, options: Options, fileInfoOptions: FileInfoOptions) => string} | ||
*/ | ||
let prettier; | ||
let prettierFormat; | ||
@@ -49,5 +62,8 @@ // ------------------------------------------------------------------------------ | ||
const { operation, offset, deleteText = '', insertText = '' } = difference; | ||
const range = [offset, offset + deleteText.length]; | ||
const range = /** @type {Range} */ ([offset, offset + deleteText.length]); | ||
// `context.getSourceCode()` was deprecated in ESLint v8.40.0 and replaced | ||
// with the `sourceCode` property. | ||
// TODO: Only use property when our eslint peerDependency is >=8.40.0. | ||
const [start, end] = range.map(index => | ||
context.getSourceCode().getLocFromIndex(index), | ||
(context.sourceCode ?? context.getSourceCode()).getLocFromIndex(index), | ||
); | ||
@@ -70,3 +86,7 @@ | ||
module.exports = { | ||
/** | ||
* @type {Plugin} | ||
*/ | ||
const eslintPluginPrettier = { | ||
meta: { name, version }, | ||
configs: { | ||
@@ -120,6 +140,17 @@ recommended: { | ||
!context.options[1] || context.options[1].usePrettierrc !== false; | ||
const eslintFileInfoOptions = | ||
/** | ||
* @type {FileInfoOptions} | ||
*/ | ||
const fileInfoOptions = | ||
(context.options[1] && context.options[1].fileInfoOptions) || {}; | ||
const sourceCode = context.getSourceCode(); | ||
const filepath = context.getFilename(); | ||
// `context.getSourceCode()` was deprecated in ESLint v8.40.0 and replaced | ||
// with the `sourceCode` property. | ||
// TODO: Only use property when our eslint peerDependency is >=8.40.0. | ||
const sourceCode = context.sourceCode ?? context.getSourceCode(); | ||
// `context.getFilename()` was deprecated in ESLint v8.40.0 and replaced | ||
// with the `filename` property. | ||
// TODO: Only use property when our eslint peerDependency is >=8.40.0. | ||
const filepath = context.filename ?? context.getFilename(); | ||
// Processors that extract content from a file, such as the markdown | ||
@@ -130,134 +161,25 @@ // plugin extracting fenced code blocks may choose to specify virtual | ||
// path. | ||
const onDiskFilepath = context.getPhysicalFilename(); | ||
// `context.getPhysicalFilename()` was deprecated in ESLint v8.40.0 and replaced | ||
// with the `physicalFilename` property. | ||
// TODO: Only use property when our eslint peerDependency is >=8.40.0. | ||
const onDiskFilepath = | ||
context.physicalFilename ?? context.getPhysicalFilename(); | ||
const source = sourceCode.text; | ||
return { | ||
// eslint-disable-next-line sonarjs/cognitive-complexity | ||
Program() { | ||
if (!prettier) { | ||
if (!prettierFormat) { | ||
// Prettier is expensive to load, so only load it if needed. | ||
prettier = require('prettier'); | ||
prettierFormat = require('synckit').createSyncFn( | ||
require.resolve('./worker'), | ||
); | ||
} | ||
/** | ||
* @type {PrettierOptions} | ||
*/ | ||
const eslintPrettierOptions = context.options[0] || {}; | ||
const prettierRcOptions = usePrettierrc | ||
? prettier.resolveConfig.sync(onDiskFilepath, { | ||
editorconfig: true, | ||
}) | ||
: null; | ||
const parser = context.languageOptions?.parser; | ||
const { ignored, inferredParser } = prettier.getFileInfo.sync( | ||
onDiskFilepath, | ||
{ | ||
resolveConfig: false, | ||
withNodeModules: false, | ||
ignorePath: '.prettierignore', | ||
plugins: prettierRcOptions ? prettierRcOptions.plugins : null, | ||
...eslintFileInfoOptions, | ||
}, | ||
); | ||
// Skip if file is ignored using a .prettierignore file | ||
if (ignored) { | ||
return; | ||
} | ||
const initialOptions = {}; | ||
// ESLint supports processors that let you extract and lint JS | ||
// fragments within a non-JS language. In the cases where prettier | ||
// supports the same language as a processor, we want to process | ||
// the provided source code as javascript (as ESLint provides the | ||
// rules with fragments of JS) instead of guessing the parser | ||
// based off the filename. Otherwise, for instance, on a .md file we | ||
// end up trying to run prettier over a fragment of JS using the | ||
// markdown parser, which throws an error. | ||
// Processors may set virtual filenames for these extracted blocks. | ||
// If they do so then we want to trust the file extension they | ||
// provide, and no override is needed. | ||
// If the processor does not set any virtual filename (signified by | ||
// `filepath` and `onDiskFilepath` being equal) AND we can't | ||
// infer the parser from the filename, either because no filename | ||
// was provided or because there is no parser found for the | ||
// filename, use javascript. | ||
// This is added to the options first, so that | ||
// prettierRcOptions and eslintPrettierOptions can still override | ||
// the parser. | ||
// | ||
// `parserBlocklist` should contain the list of prettier parser | ||
// names for file types where: | ||
// * Prettier supports parsing the file type | ||
// * There is an ESLint processor that extracts JavaScript snippets | ||
// from the file type. | ||
if (filepath === onDiskFilepath) { | ||
// The following list means the plugin process source into js content | ||
// but with same filename, so we need to change the parser to `babel` | ||
// by default. | ||
// Related ESLint plugins are: | ||
// 1. `eslint-plugin-graphql` (replacement: `@graphql-eslint/eslint-plugin`) | ||
// 2. `eslint-plugin-html` | ||
// 3. `eslint-plugin-markdown@1` (replacement: `eslint-plugin-markdown@2+`) | ||
// 4. `eslint-plugin-svelte3` (replacement: `eslint-plugin-svelte@2+`) | ||
const parserBlocklist = [null, 'markdown', 'html']; | ||
let inferParserToBabel = parserBlocklist.includes(inferredParser); | ||
switch (inferredParser) { | ||
// it could be processed by `@graphql-eslint/eslint-plugin` or `eslint-plugin-graphql` | ||
case 'graphql': { | ||
if ( | ||
// for `eslint-plugin-graphql`, see https://github.com/apollographql/eslint-plugin-graphql/blob/master/src/index.js#L416 | ||
source.startsWith('ESLintPluginGraphQLFile`') | ||
) { | ||
inferParserToBabel = true; | ||
} | ||
break; | ||
} | ||
// it could be processed by `@ota-meshi/eslint-plugin-svelte`, `eslint-plugin-svelte` or `eslint-plugin-svelte3` | ||
case 'svelte': { | ||
// The `source` would be modified by `eslint-plugin-svelte3` | ||
if (!context.parserPath.includes('svelte-eslint-parser')) { | ||
// We do not support `eslint-plugin-svelte3`, | ||
// the users should run `prettier` on `.svelte` files manually | ||
return; | ||
} | ||
} | ||
} | ||
if (inferParserToBabel) { | ||
initialOptions.parser = 'babel'; | ||
} | ||
} else { | ||
// Similar to https://github.com/prettier/stylelint-prettier/pull/22 | ||
// In all of the following cases ESLint extracts a part of a file to | ||
// be formatted and there exists a prettier parser for the whole file. | ||
// If you're interested in prettier you'll want a fully formatted file so | ||
// you're about to run prettier over the whole file anyway. | ||
// Therefore running prettier over just the style section is wasteful, so | ||
// skip it. | ||
const parserBlocklist = [ | ||
'babel', | ||
'babylon', | ||
'flow', | ||
'typescript', | ||
'vue', | ||
'markdown', | ||
'html', | ||
'mdx', | ||
'angular', | ||
'svelte', | ||
]; | ||
if (parserBlocklist.includes(inferredParser)) { | ||
return; | ||
} | ||
} | ||
const prettierOptions = { | ||
...initialOptions, | ||
...prettierRcOptions, | ||
...eslintPrettierOptions, | ||
filepath, | ||
}; | ||
// prettier.format() may throw a SyntaxError if it cannot parse the | ||
@@ -271,5 +193,24 @@ // source code it is given. Usually for JS files this isn't a | ||
// point at which parsing failed. | ||
/** | ||
* @type {string} | ||
*/ | ||
let prettierSource; | ||
try { | ||
prettierSource = prettier.format(source, prettierOptions); | ||
prettierSource = prettierFormat( | ||
source, | ||
{ | ||
...eslintPrettierOptions, | ||
filepath, | ||
onDiskFilepath, | ||
parserMeta: | ||
parser && | ||
(parser.meta ?? { | ||
name: parser.name, | ||
version: parser.version, | ||
}), | ||
parserPath: context.parserPath, | ||
usePrettierrc, | ||
}, | ||
fileInfoOptions, | ||
); | ||
} catch (err) { | ||
@@ -282,2 +223,7 @@ if (!(err instanceof SyntaxError)) { | ||
const error = | ||
/** @type {SyntaxError & {codeFrame: string; loc: SourceLocation}} */ ( | ||
err | ||
); | ||
// Prettier's message contains a codeframe style preview of the | ||
@@ -287,10 +233,10 @@ // invalid code and the line/column at which the error occurred. | ||
// remove them from the message | ||
if (err.codeFrame) { | ||
message = message.replace(`\n${err.codeFrame}`, ''); | ||
if (error.codeFrame) { | ||
message = message.replace(`\n${error.codeFrame}`, ''); | ||
} | ||
if (err.loc) { | ||
if (error.loc) { | ||
message = message.replace(/ \(\d+:\d+\)$/, ''); | ||
} | ||
context.report({ message, loc: err.loc }); | ||
context.report({ message, loc: error.loc }); | ||
@@ -300,2 +246,6 @@ return; | ||
if (prettierSource == null) { | ||
return; | ||
} | ||
if (source !== prettierSource) { | ||
@@ -314,1 +264,3 @@ const differences = generateDifferences(source, prettierSource); | ||
}; | ||
module.exports = eslintPluginPrettier; |
104
package.json
{ | ||
"name": "eslint-plugin-prettier", | ||
"version": "4.2.1", | ||
"version": "5.1.2", | ||
"description": "Runs prettier as an eslint rule", | ||
@@ -11,9 +11,26 @@ "repository": "git+https://github.com/prettier/eslint-plugin-prettier.git", | ||
], | ||
"funding": "https://opencollective.com/eslint-plugin-prettier", | ||
"license": "MIT", | ||
"packageManager": "pnpm@7.33.5", | ||
"engines": { | ||
"node": ">=12.0.0" | ||
"node": "^14.18.0 || >=16.0.0" | ||
}, | ||
"main": "eslint-plugin-prettier.js", | ||
"exports": { | ||
".": { | ||
"types": "./eslint-plugin-prettier.d.ts", | ||
"default": "./eslint-plugin-prettier.js" | ||
}, | ||
"./recommended": { | ||
"types": "./recommended.d.ts", | ||
"default": "./recommended.js" | ||
} | ||
}, | ||
"types": "eslint-plugin-prettier.d.ts", | ||
"files": [ | ||
"eslint-plugin-prettier.js" | ||
"eslint-plugin-prettier.d.ts", | ||
"eslint-plugin-prettier.js", | ||
"recommended.d.ts", | ||
"recommended.js", | ||
"worker.js" | ||
], | ||
@@ -26,15 +43,12 @@ "keywords": [ | ||
], | ||
"scripts": { | ||
"format": "yarn prettier '**/*.{js,json,md,yml}' --write && yarn lint --fix", | ||
"lint": "eslint . --cache -f friendly --max-warnings 10", | ||
"prepare": "patch-package && simple-git-hooks && yarn-deduplicate --strategy fewer || exit 0", | ||
"prerelease": "yarn format && yarn test", | ||
"release": "changeset publish", | ||
"test": "yarn lint && mocha" | ||
}, | ||
"peerDependencies": { | ||
"eslint": ">=7.28.0", | ||
"prettier": ">=2.0.0" | ||
"@types/eslint": ">=8.0.0", | ||
"eslint": ">=8.0.0", | ||
"eslint-config-prettier": "*", | ||
"prettier": ">=3.0.0" | ||
}, | ||
"peerDependenciesMeta": { | ||
"@types/eslint": { | ||
"optional": true | ||
}, | ||
"eslint-config-prettier": { | ||
@@ -45,30 +59,44 @@ "optional": true | ||
"dependencies": { | ||
"prettier-linter-helpers": "^1.0.0" | ||
"prettier-linter-helpers": "^1.0.0", | ||
"synckit": "^0.8.6" | ||
}, | ||
"devDependencies": { | ||
"@1stg/common-config": "~3.0.0", | ||
"@1stg/eslint-config": "~3.0.0", | ||
"@changesets/changelog-github": "^0.4.5", | ||
"@changesets/cli": "^2.23.0", | ||
"@graphql-eslint/eslint-plugin": "^2.5.0", | ||
"@ota-meshi/eslint-plugin-svelte": "^0.34.1", | ||
"@typescript-eslint/parser": "^5.29.0", | ||
"eslint-config-prettier": "^8.5.0", | ||
"eslint-mdx": "^1.17.0", | ||
"eslint-plugin-eslint-plugin": "^4.3.0", | ||
"eslint-plugin-mdx": "^1.17.0", | ||
"eslint-plugin-self": "^1.2.1", | ||
"eslint-plugin-utils": "^0.1.0", | ||
"graphql": "^16.5.0", | ||
"mocha": "^9.2.2", | ||
"patch-package": "^6.4.7", | ||
"svelte": "^3.48.0", | ||
"vue-eslint-parser": "^8.3.0" | ||
}, | ||
"resolutions": { | ||
"@babel/traverse": "^7.18.5", | ||
"@1stg/remark-preset": "^2.0.0", | ||
"@changesets/changelog-github": "^0.5.0", | ||
"@changesets/cli": "^2.27.1", | ||
"@commitlint/config-conventional": "^18.4.3", | ||
"@eslint-community/eslint-plugin-eslint-comments": "^4.1.0", | ||
"@eslint/js": "^8.56.0", | ||
"@graphql-eslint/eslint-plugin": "^3.20.1", | ||
"@prettier/plugin-pug": "^3.0.0", | ||
"@types/eslint": "^8.56.0", | ||
"@types/prettier-linter-helpers": "^1.0.4", | ||
"commitlint": "^18.4.3", | ||
"eslint": "^8.56.0", | ||
"eslint-config-prettier": "^9.1.0", | ||
"eslint-formatter-friendly": "^7.0.0", | ||
"eslint-mdx": "^2.2.1", | ||
"eslint-plugin-eslint-plugin": "^5.2.1", | ||
"eslint-plugin-mdx": "^2.2.1", | ||
"eslint-plugin-n": "^16.5.0", | ||
"eslint-plugin-prettier": "link:.", | ||
"prettier": "^2.7.1" | ||
"eslint-plugin-pug": "^1.2.5", | ||
"eslint-plugin-svelte": "^2.35.1", | ||
"eslint-plugin-svelte3": "^4.0.0", | ||
"graphql": "^16.8.1", | ||
"lint-staged": "^15.2.0", | ||
"mocha": "^10.2.0", | ||
"prettier": "^3.1.1", | ||
"prettier-plugin-pkg": "^0.18.0", | ||
"simple-git-hooks": "^2.9.0", | ||
"svelte": "^4.2.8", | ||
"vue-eslint-parser": "^9.3.2" | ||
}, | ||
"packageManager": "yarn@1.22.19" | ||
} | ||
"scripts": { | ||
"format": "prettier --write . && pnpm lint --fix", | ||
"lint": "eslint . --cache -f friendly --max-warnings 10", | ||
"prerelease": "pnpm format && pnpm test", | ||
"release": "changeset publish", | ||
"test": "pnpm lint && mocha" | ||
} | ||
} |
106
README.md
@@ -9,2 +9,17 @@ # eslint-plugin-prettier [![Build Status](https://github.com/prettier/eslint-plugin-prettier/workflows/CI/badge.svg?branch=master)](https://github.com/prettier/eslint-plugin-prettier/actions?query=workflow%3ACI+branch%3Amaster) | ||
## TOC <!-- omit in toc --> | ||
- [Sample](#sample) | ||
- [Installation](#installation) | ||
- [Configuration (legacy: `.eslintrc*`)](#configuration-legacy-eslintrc) | ||
- [Configuration (new: `eslint.config.js`)](#configuration-new-eslintconfigjs) | ||
- [`Svelte` support](#svelte-support) | ||
- [`arrow-body-style` and `prefer-arrow-callback` issue](#arrow-body-style-and-prefer-arrow-callback-issue) | ||
- [Options](#options) | ||
- [Sponsors](#sponsors) | ||
- [Backers](#backers) | ||
- [Contributing](#contributing) | ||
- [Changelog](#changelog) | ||
- [License](#license) | ||
## Sample | ||
@@ -41,3 +56,3 @@ | ||
```sh | ||
npm install --save-dev eslint-plugin-prettier | ||
npm install --save-dev eslint-plugin-prettier eslint-config-prettier | ||
npm install --save-dev --save-exact prettier | ||
@@ -48,57 +63,50 @@ ``` | ||
Then, in your `.eslintrc.json`: | ||
This plugin works best if you disable all other ESLint rules relating to code formatting, and only enable rules that detect potential bugs. If another active ESLint rule disagrees with `prettier` about how code should be formatted, it will be impossible to avoid lint errors. Our recommended configuration automatically enables [`eslint-config-prettier`](https://github.com/prettier/eslint-config-prettier) to disable all formatting-related ESLint rules. | ||
## Configuration (legacy: `.eslintrc*`) | ||
For [legacy configuration](https://eslint.org/docs/latest/use/configure/configuration-files), this plugin ships with a `plugin:prettier/recommended` config that sets up both `eslint-plugin-prettier` and [`eslint-config-prettier`](https://github.com/prettier/eslint-config-prettier) in one go. | ||
Add `plugin:prettier/recommended` as the _last_ item in the extends array in your `.eslintrc*` config file, so that `eslint-config-prettier` has the opportunity to override other configs: | ||
```json | ||
{ | ||
"plugins": ["prettier"], | ||
"rules": { | ||
"prettier/prettier": "error" | ||
} | ||
"extends": ["plugin:prettier/recommended"] | ||
} | ||
``` | ||
## Recommended Configuration | ||
This will: | ||
This plugin works best if you disable all other ESLint rules relating to code formatting, and only enable rules that detect potential bugs. (If another active ESLint rule disagrees with `prettier` about how code should be formatted, it will be impossible to avoid lint errors.) You can use [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) to disable all formatting-related ESLint rules. | ||
- Enable the `prettier/prettier` rule. | ||
- Disable the `arrow-body-style` and `prefer-arrow-callback` rules which are problematic with this plugin - see the below for why. | ||
- Enable the `eslint-config-prettier` config which will turn off ESLint rules that conflict with Prettier. | ||
This plugin ships with a `plugin:prettier/recommended` config that sets up both the plugin and `eslint-config-prettier` in one go. | ||
## Configuration (new: `eslint.config.js`) | ||
1. In addition to the above installation instructions, install `eslint-config-prettier`: | ||
For [flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new), this plugin ships with an `eslint-plugin-prettier/recommended` config that sets up both `eslint-plugin-prettier` and [`eslint-config-prettier`](https://github.com/prettier/eslint-config-prettier) in one go. | ||
```sh | ||
npm install --save-dev eslint-config-prettier | ||
``` | ||
Import `eslint-plugin-prettier/recommended` and add it as the _last_ item in the configuration array in your `eslint.config.js` file so that `eslint-config-prettier` has the opportunity to override other configs: | ||
2. Then you need to add `plugin:prettier/recommended` as the _last_ extension in your `.eslintrc.json`: | ||
```js | ||
const eslintPluginPrettierRecommended = require('eslint-plugin-prettier/recommended'); | ||
```json | ||
{ | ||
"extends": ["plugin:prettier/recommended"] | ||
} | ||
``` | ||
module.exports = [ | ||
// Any other config imports go at the top | ||
eslintPluginPrettierRecommended, | ||
]; | ||
``` | ||
You can then set Prettier's own options inside a `.prettierrc` file. | ||
This will: | ||
Exactly what does `plugin:prettier/recommended` do? Well, this is what it expands to: | ||
- Enable the `prettier/prettier` rule. | ||
- Disable the `arrow-body-style` and `prefer-arrow-callback` rules which are problematic with this plugin - see the below for why. | ||
- Enable the `eslint-config-prettier` config which will turn off ESLint rules that conflict with Prettier. | ||
```json | ||
{ | ||
"extends": ["prettier"], | ||
"plugins": ["prettier"], | ||
"rules": { | ||
"prettier/prettier": "error", | ||
"arrow-body-style": "off", | ||
"prefer-arrow-callback": "off" | ||
} | ||
} | ||
``` | ||
## `Svelte` support | ||
- `"extends": ["prettier"]` enables the config from `eslint-config-prettier`, which turns off some ESLint rules that conflict with Prettier. | ||
- `"plugins": ["prettier"]` registers this plugin. | ||
- `"prettier/prettier": "error"` turns on the rule provided by this plugin, which runs Prettier from within ESLint. | ||
- `"arrow-body-style": "off"` and `"prefer-arrow-callback": "off"` turns off two ESLint core rules that unfortunately are problematic with this plugin – see the next section. | ||
We recommend to use [`eslint-plugin-svelte`](https://github.com/ota-meshi/eslint-plugin-svelte) instead of [`eslint-plugin-svelte3`](https://github.com/sveltejs/eslint-plugin-svelte3) because `eslint-plugin-svelte` has a correct [`eslint-svelte-parser`](https://github.com/ota-meshi/svelte-eslint-parser) instead of hacking. | ||
## `Svelte` support | ||
When use with `eslint-plugin-svelte3`, `eslint-plugin-prettier` will just ignore the text passed by `eslint-plugin-svelte3`, because the text has been modified. | ||
We recommend to use [`eslint-plugin-svelte`](https://github.com/ota-meshi/eslint-plugin-svelte) instead of [`eslint-plugin-svelte3`](https://github.com/sveltejs/eslint-plugin-svelte3) because `eslint-plugin-svelte` has a correct [`eslint-svelte-parser`](https://github.com/ota-meshi/svelte-eslint-parser) instead of hacking, when use with `eslint-plugin-svelte3`, `eslint-plugin-prettier` will just ignore the text passed by `eslint-plugin-svelte3`, because the text they has been modified. | ||
If you still decide to use `eslint-plugin-svelte3`, you'll need to run `prettier --write *.svelte` manually. | ||
@@ -125,3 +133,9 @@ ## `arrow-body-style` and `prefer-arrow-callback` issue | ||
{ | ||
"prettier/prettier": ["error", { "singleQuote": true, "parser": "flow" }] | ||
"prettier/prettier": [ | ||
"error", | ||
{ | ||
"singleQuote": true, | ||
"parser": "flow" | ||
} | ||
] | ||
} | ||
@@ -136,3 +150,3 @@ ``` | ||
- `usePrettierrc`: Enables loading of the Prettier configuration file, (default: `true`). May be useful if you are using multiple tools that conflict with each other, or do not wish to mix your ESLint settings with your Prettier configuration. | ||
- `usePrettierrc`: Enables loading of the Prettier configuration file, (default: `true`). May be useful if you are using multiple tools that conflict with each other, or do not wish to mix your ESLint settings with your Prettier configuration. And also, it is possible to run prettier without loading the prettierrc config file [via the CLI's --no-config option](https://prettier.io/docs/en/cli.html#--no-config) or through the API by [calling prettier.format() without passing through the options generated by calling resolveConfig](https://prettier.io/docs/en/api.html#prettierresolveconfigfilepath--options). | ||
@@ -171,2 +185,14 @@ ```json | ||
## Sponsors | ||
| @prettier/plugin-eslint | eslint-config-prettier | eslint-plugin-prettier | prettier-eslint | prettier-eslint-cli | | ||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | ||
| [![@prettier/plugin-eslint Open Collective sponsors](https://opencollective.com/prettier-plugin-eslint/tiers/sponsors.svg)](https://opencollective.com/prettier-plugin-eslint) | [![eslint-config-prettier Open Collective backers](https://opencollective.com/eslint-config-prettier/tiers/sponsors.svg)](https://opencollective.com/eslint-config-prettier) | [![eslint-plugin-prettier Open Collective backers](https://opencollective.com/eslint-plugin-prettier/tiers/sponsors.svg)](https://opencollective.com/rxts) | [![prettier-eslint Open Collective sponsors](https://opencollective.com/prettier-eslint/tiers/sponsors.svg)](https://opencollective.com/prettier-eslint) | [![prettier-eslint-cli Open Collective backers](https://opencollective.com/prettier-eslint-cli/tiers/sponsors.svg)](https://opencollective.com/prettier-eslint-cli) | | ||
## Backers | ||
| @prettier/plugin-eslint | eslint-config-prettier | eslint-plugin-prettier | prettier-eslint | prettier-eslint-cli | | ||
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | ||
| [![@prettier/plugin-eslint Open Collective backers](https://opencollective.com/prettier-plugin-eslint/tiers/backers.svg)](https://opencollective.com/prettier-plugin-eslint) | [![eslint-config-prettier Open Collective backers](https://opencollective.com/eslint-config-prettier/tiers/backers.svg)](https://opencollective.com/eslint-config-prettier) | [![eslint-plugin-prettier Open Collective backers](https://opencollective.com/eslint-plugin-prettier/tiers/backers.svg)](https://opencollective.com/rxts) | [![prettier-eslint Open Collective backers](https://opencollective.com/prettier-eslint/tiers/backers.svg)](https://opencollective.com/prettier-eslint) | [![prettier-eslint-cli Open Collective backers](https://opencollective.com/prettier-eslint-cli/tiers/backers.svg)](https://opencollective.com/prettier-eslint-cli) | | ||
## Contributing | ||
@@ -173,0 +199,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
8
414
203
33788
6
30
+ Addedsynckit@^0.8.6
+ Added@humanwhocodes/retry@0.4.1(transitive)
+ Added@pkgr/core@0.1.1(transitive)
+ Added@types/eslint@9.6.1(transitive)
+ Addedeslint-config-prettier@9.1.0(transitive)
+ Addedsynckit@0.8.8(transitive)
+ Addedtslib@2.8.1(transitive)
- Removed@humanwhocodes/retry@0.4.0(transitive)