diff --git a/src/rules/no-html.js b/src/rules/no-html.js index 94d40982..cc6e9445 100644 --- a/src/rules/no-html.js +++ b/src/rules/no-html.js @@ -24,7 +24,9 @@ import { findOffsets } from "../util.js"; // Helpers //----------------------------------------------------------------------------- -const htmlTagPattern = /<([a-z0-9]+(?:-[a-z0-9]+)*)/giu; +const htmlTagPattern = + /<([a-z0-9]+(?:-[a-z0-9]+)*)(?:\s+(?:[^>"']|"[^"]*"|'[^']*')*)?>/giu; +const lineEndingPattern = /\r\n?|\n/u; //----------------------------------------------------------------------------- // Rule Definition @@ -82,6 +84,7 @@ export default { let match; while ((match = htmlTagPattern.exec(node.value)) !== null) { + const fullMatch = match[0]; const tagName = match[1]; const { lineOffset, columnOffset } = findOffsets( node.value, @@ -91,9 +94,17 @@ export default { line: node.position.start.line + lineOffset, column: node.position.start.column + columnOffset, }; + + const firstNewlineIndex = + fullMatch.search(lineEndingPattern); + const endColumn = + firstNewlineIndex === -1 + ? start.column + fullMatch.length + : start.column + firstNewlineIndex; + const end = { line: start.line, - column: start.column + match[0].length + 1, + column: endColumn, }; const tagToCheck = allowedIgnoreCase diff --git a/tests/rules/no-html.test.js b/tests/rules/no-html.test.js index 99a7099c..92d903cc 100644 --- a/tests/rules/no-html.test.js +++ b/tests/rules/no-html.test.js @@ -222,5 +222,207 @@ ruleTester.run("no-html", rule, { }, ], }, + { + code: "Content", + errors: [ + { + messageId: "disallowedElement", + line: 1, + column: 1, + endLine: 1, + endColumn: 8, + data: { name: "span" }, + }, + ], + }, + { + code: '
Content
', + errors: [ + { + messageId: "disallowedElement", + line: 1, + column: 1, + endLine: 1, + endColumn: 42, + data: { + name: "p", + }, + }, + ], + }, + { + code: 'Text', + errors: [ + { + messageId: "disallowedElement", + line: 1, + column: 1, + endLine: 1, + endColumn: 6, + data: { + name: "span", + }, + }, + ], + }, + { + code: 'Text', + errors: [ + { + messageId: "disallowedElement", + line: 1, + column: 1, + endLine: 1, + endColumn: 6, + data: { + name: "span", + }, + }, + ], + }, + { + code: 'Text', + errors: [ + { + messageId: "disallowedElement", + line: 1, + column: 1, + endLine: 1, + endColumn: 6, + data: { + name: "span", + }, + }, + ], + }, + { + code: '