From 24ebdf06940a17807f4a66b7578de0d055d6d67a Mon Sep 17 00:00:00 2001 From: yongholeeme Date: Fri, 14 Mar 2025 17:09:26 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[#97]=20=E2=9C=A8=20auto=20fix=20peer-deps-?= =?UTF-8?q?in-dev-deps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/rules/peer-deps-in-dev-deps.js | 30 +++++++++++++++++-- .../lib/utils/getIndentationLength.js | 13 ++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 packages/eslint-plugin/lib/utils/getIndentationLength.js diff --git a/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js b/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js index 877dcae..20e107a 100644 --- a/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js +++ b/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js @@ -1,5 +1,7 @@ import path from 'path' +import {getIndentationLength} from '../utils/getIndentationLength.js' + /** * @type {import('eslint').Rule.RuleModule} */ @@ -10,7 +12,7 @@ export default { description: 'Ensure that all peerDependencies are also declared in devDependencies.', recommended: false, }, - fixable: null, + fixable: 'code', schema: [], messages: { missingInDevDeps: "'{{packageName}}' is declared in peerDependencies but not in devDependencies.", @@ -46,13 +48,37 @@ export default { (property) => property.key.value === 'devDependencies', ) - for (const [depName] of Object.entries(peerDeps)) { + for (const [depName, depVersion] of Object.entries(peerDeps)) { if (!Object.prototype.hasOwnProperty.call(devDeps, depName)) { context.report({ node, messageId: 'missingInDevDeps', data: {packageName: depName}, loc: devDepsNode?.loc || peerDepsNode?.loc, + fix(fixer) { + const s = ' '.repeat(getIndentationLength(sourceCode.getText())) + const ss = s.repeat(2) + const newDevDep = `"${depName}": "${depVersion}"` + + if (devDepsNode) { + if (devDepsNode.value.properties.length > 0) { + const lastDevDep = + devDepsNode.value.properties[devDepsNode.value.properties.length - 1] + + return fixer.insertTextAfter(lastDevDep, `,\n${ss}${newDevDep}`) + } else { + return fixer.replaceText( + devDepsNode, + `"devDependencies": {\n${ss}${newDevDep}\n${s}}`, + ) + } + } else { + return fixer.insertTextBefore( + peerDepsNode, + `"devDependencies": {\n${ss}${newDevDep}\n${s}},\n${s}`, + ) + } + }, }) } } diff --git a/packages/eslint-plugin/lib/utils/getIndentationLength.js b/packages/eslint-plugin/lib/utils/getIndentationLength.js new file mode 100644 index 0000000..c862a58 --- /dev/null +++ b/packages/eslint-plugin/lib/utils/getIndentationLength.js @@ -0,0 +1,13 @@ +export function getIndentationLength(jsonString) { + const lines = jsonString.split('\n') + + for (const line of lines) { + const trimmedLine = line.trim() + if (trimmedLine.startsWith('"')) { + const leadingWhitespace = line.match(/^\s*/)[0] + return leadingWhitespace.length + } + } + + return 2 +} From 98333588671259cc8e1b666728580d81595d8871 Mon Sep 17 00:00:00 2001 From: yongholeeme Date: Thu, 20 Mar 2025 22:59:03 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[#97]=20=E2=99=BB=EF=B8=8F=20filename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js b/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js index 20e107a..bcab42c 100644 --- a/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js +++ b/packages/eslint-plugin/lib/rules/peer-deps-in-dev-deps.js @@ -1,5 +1,3 @@ -import path from 'path' - import {getIndentationLength} from '../utils/getIndentationLength.js' /** @@ -22,7 +20,7 @@ export default { create(context) { return { Program(node) { - const filename = path.basename(context.getFilename()) + const filename = context.filename.replace(context.cwd, '') if (filename !== 'package.json') { return } From 202319009f89e017772d105ae3d9fd625ce29fa8 Mon Sep 17 00:00:00 2001 From: Yongho Lee Date: Mon, 17 Mar 2025 10:55:32 +0900 Subject: [PATCH 3/3] Create small-dancers-sin.md --- .changeset/small-dancers-sin.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/small-dancers-sin.md diff --git a/.changeset/small-dancers-sin.md b/.changeset/small-dancers-sin.md new file mode 100644 index 0000000..59ce39e --- /dev/null +++ b/.changeset/small-dancers-sin.md @@ -0,0 +1,7 @@ +--- +"@naverpay/eslint-plugin": minor +--- + +auto fix peer-deps-in-dev-deps + +PR: [auto fix peer-deps-in-dev-deps](https://github.com/NaverPayDev/code-style/pull/103)