From 029c2c08461f6745562047bdadfb0033ad8c7739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20R=C3=B8ed?= Date: Sun, 12 Apr 2026 22:59:16 +0200 Subject: [PATCH 1/6] Fix template-no-obsolete-elements: track element-level block params The rule suppressed obsolete-element reports when the tag name shadows a block param from a GlimmerBlockStatement (e.g. {{#let (...) as |marquee|}}). It did not track element-level block params (), so inside an angle-bracket component the shadowing was ignored and the tag was falsely reported. Push element block params on enter and pop on exit, mirroring the existing GlimmerBlockStatement handling. --- lib/rules/template-no-obsolete-elements.js | 18 ++++++++++++++---- .../lib/rules/template-no-obsolete-elements.js | 9 +++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/rules/template-no-obsolete-elements.js b/lib/rules/template-no-obsolete-elements.js index af82f4e007..c1f4948add 100644 --- a/lib/rules/template-no-obsolete-elements.js +++ b/lib/rules/template-no-obsolete-elements.js @@ -64,12 +64,22 @@ module.exports = { } }, GlimmerElementNode(node) { - if (blockParamsInScope.includes(node.tag)) { - return; - } - if (obsolete.has(node.tag)) { + // Check the element's own tag before pushing its block params, so an + // element's own params don't shadow its own tag name (e.g. + // `` should still flag the outer ). + if (!blockParamsInScope.includes(node.tag) && obsolete.has(node.tag)) { context.report({ node, messageId: 'obsolete', data: { element: node.tag } }); } + // Element-level block params (e.g. ``) are scoped to + // the children, so push them after the obsolete check. Pop on exit. + const elementParams = node.blockParams || []; + blockParamsInScope.push(...elementParams); + }, + 'GlimmerElementNode:exit'(node) { + const elementParams = node.blockParams || []; + for (let i = 0; i < elementParams.length; i++) { + blockParamsInScope.pop(); + } }, }; }, diff --git a/tests/lib/rules/template-no-obsolete-elements.js b/tests/lib/rules/template-no-obsolete-elements.js index 5c995da69b..16221c7ee6 100644 --- a/tests/lib/rules/template-no-obsolete-elements.js +++ b/tests/lib/rules/template-no-obsolete-elements.js @@ -11,6 +11,9 @@ ruleTester.run('template-no-obsolete-elements', rule, { `