From 2ffc5bdb58cd7608dfd7df38aec4f5e40ca71635 Mon Sep 17 00:00:00 2001 From: Emily Marigold Klassen Date: Mon, 7 Feb 2022 16:26:17 -0800 Subject: [PATCH] fix: imports should always use posix / http paths, even on win32 --- src/rules/no-relative-packages.js | 8 +++++++- tests/src/rules/no-relative-packages.js | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/rules/no-relative-packages.js b/src/rules/no-relative-packages.js index f56ba8046b..3c9e6f2b6e 100644 --- a/src/rules/no-relative-packages.js +++ b/src/rules/no-relative-packages.js @@ -6,6 +6,12 @@ import moduleVisitor, { makeOptionsSchema } from 'eslint-module-utils/moduleVisi import importType from '../core/importType'; import docsUrl from '../docsUrl'; +/** @type {(filePath: string) => string} */ +const toPosixPath = + path.sep === '\\' + ? (filePath) => filePath.replace(/\\/g, '/') + : (filePath) => filePath; + function findNamedPackage(filePath) { const found = readPkgUp({ cwd: filePath }); if (found.pkg && !found.pkg.name) { @@ -42,7 +48,7 @@ function checkImportForRelativePackage(context, importPath, node) { context.report({ node, message: `Relative import from another package is not allowed. Use \`${properImport}\` instead of \`${importPath}\``, - fix: fixer => fixer.replaceText(node, JSON.stringify(properImport)) + fix: fixer => fixer.replaceText(node, JSON.stringify(toPosixPath(properImport))) , }); } diff --git a/tests/src/rules/no-relative-packages.js b/tests/src/rules/no-relative-packages.js index d3fa754dfd..2d27bcc91e 100644 --- a/tests/src/rules/no-relative-packages.js +++ b/tests/src/rules/no-relative-packages.js @@ -67,7 +67,7 @@ ruleTester.run('no-relative-packages', rule, { line: 1, column: 17, } ], - output: `import foo from "${normalize('@scope/package-named')}"`, + output: `import foo from "@scope/package-named"`, }), test({ code: 'import bar from "../bar"', @@ -77,7 +77,7 @@ ruleTester.run('no-relative-packages', rule, { line: 1, column: 17, } ], - output: `import bar from "${normalize('eslint-plugin-import/tests/files/bar')}"`, + output: `import bar from "eslint-plugin-import/tests/files/bar"`, }), ], });