From 33e59c671a882fac5a1ac40106c5174900574609 Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Sun, 18 Jan 2026 02:47:34 +0100 Subject: [PATCH] Linter: Allow `style` elements inside `svg` for `html-head-only-elements` --- .../src/rules/html-head-only-elements.ts | 1 + .../rules/html-head-only-elements.test.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/javascript/packages/linter/src/rules/html-head-only-elements.ts b/javascript/packages/linter/src/rules/html-head-only-elements.ts index c5c624da3..ac2cfcdff 100644 --- a/javascript/packages/linter/src/rules/html-head-only-elements.ts +++ b/javascript/packages/linter/src/rules/html-head-only-elements.ts @@ -23,6 +23,7 @@ class HeadOnlyElementsVisitor extends BaseRuleVisitor { if (!this.insideBody) return if (!isHeadOnlyTag(tagName)) return if (tagName === "title" && this.insideSVG) return + if (tagName === "style" && this.insideSVG) return if (tagName === "meta" && this.hasItempropAttribute(node)) return this.addOffense( diff --git a/javascript/packages/linter/test/rules/html-head-only-elements.test.ts b/javascript/packages/linter/test/rules/html-head-only-elements.test.ts index 8d1a68e45..fe083b886 100644 --- a/javascript/packages/linter/test/rules/html-head-only-elements.test.ts +++ b/javascript/packages/linter/test/rules/html-head-only-elements.test.ts @@ -332,6 +332,26 @@ describe("html-head-only-elements", () => { `) }) + test("allows style element inside SVG", () => { + expectNoOffenses(dedent` + + + + Hi + + + + + + + + + + `) + }) + test("still fails for other head-only elements inside SVG", () => { expectError("Element `` must be placed inside the `` tag.") expectError("Element `` must be placed inside the `` tag.")