diff --git a/src/rules/no-duplicate-imports.js b/src/rules/no-duplicate-imports.js index 0580156..d16a247 100644 --- a/src/rules/no-duplicate-imports.js +++ b/src/rules/no-duplicate-imports.js @@ -52,9 +52,19 @@ export default { data: { url }, fix(fixer) { const [start, end] = sourceCode.getRange(node); + const text = sourceCode.text; // Remove the node, and also remove a following newline if present - const removeEnd = - sourceCode.text[end] === "\n" ? end + 1 : end; + let removeEnd = end; + if (text[removeEnd] === "\r") { + removeEnd += + text[removeEnd + 1] === "\n" ? 2 : 1; + } else if ( + text[removeEnd] === "\n" || + text[removeEnd] === "\f" + ) { + removeEnd += 1; + } + return fixer.removeRange([start, removeEnd]); }, }); diff --git a/src/rules/no-important.js b/src/rules/no-important.js index a9a3b56..07e0435 100644 --- a/src/rules/no-important.js +++ b/src/rules/no-important.js @@ -55,7 +55,7 @@ export default { const textWithoutComments = declarationText.replace( commentPattern, /* eslint-disable-next-line require-unicode-regexp -- we want to replace each code unit with a space */ - match => match.replace(/[^\n]/g, " "), + match => match.replace(/[^\r\n\f]/g, " "), ); const importantMatch = importantPattern.exec(textWithoutComments); diff --git a/tests/rules/no-duplicate-imports.test.js b/tests/rules/no-duplicate-imports.test.js index f670bb8..6b2bb3c 100644 --- a/tests/rules/no-duplicate-imports.test.js +++ b/tests/rules/no-duplicate-imports.test.js @@ -238,5 +238,47 @@ ruleTester.run("no-duplicate-imports", rule, { }, ], }, + { + code: "@import url('a.css');\r\n@import url('a.css');\r\n@import url('b.css');", + output: "@import url('a.css');\r\n@import url('b.css');", + errors: [ + { + messageId: "duplicateImport", + data: { url: "a.css" }, + line: 2, + column: 1, + endLine: 2, + endColumn: 22, + }, + ], + }, + { + code: "@import url('a.css');\r@import url('a.css');\r@import url('b.css');", + output: "@import url('a.css');\r@import url('b.css');", + errors: [ + { + messageId: "duplicateImport", + data: { url: "a.css" }, + line: 2, + column: 1, + endLine: 2, + endColumn: 22, + }, + ], + }, + { + code: "@import url('a.css');\f@import url('a.css');\f@import url('b.css');", + output: "@import url('a.css');\f@import url('b.css');", + errors: [ + { + messageId: "duplicateImport", + data: { url: "a.css" }, + line: 2, + column: 1, + endLine: 2, + endColumn: 22, + }, + ], + }, ], }); diff --git a/tests/rules/no-important.test.js b/tests/rules/no-important.test.js index 86fe10d..be6ee62 100644 --- a/tests/rules/no-important.test.js +++ b/tests/rules/no-important.test.js @@ -200,6 +200,60 @@ ruleTester.run("no-important", rule, { }, ], }, + { + code: "a { color: red\r\n!important; }", + errors: [ + { + messageId: "unexpectedImportant", + line: 2, + column: 1, + endLine: 2, + endColumn: 11, + suggestions: [ + { + messageId: "removeImportant", + output: "a { color: red; }", + }, + ], + }, + ], + }, + { + code: "a { color: red\r!important; }", + errors: [ + { + messageId: "unexpectedImportant", + line: 2, + column: 1, + endLine: 2, + endColumn: 11, + suggestions: [ + { + messageId: "removeImportant", + output: "a { color: red; }", + }, + ], + }, + ], + }, + { + code: "a { color: red\f!important; }", + errors: [ + { + messageId: "unexpectedImportant", + line: 2, + column: 1, + endLine: 2, + endColumn: 11, + suggestions: [ + { + messageId: "removeImportant", + output: "a { color: red; }", + }, + ], + }, + ], + }, { code: dedent` a {