Skip to content

template-no-unnecessary-component-helper is not hbs-only - #2842

Merged
NullVoxPopuli merged 1 commit into
masterfrom
nvp/component-helper-rule-is-not-hbs-only
Aug 17, 2026
Merged

template-no-unnecessary-component-helper is not hbs-only#2842
NullVoxPopuli merged 1 commit into
masterfrom
nvp/component-helper-rule-is-not-hbs-only

Conversation

@NullVoxPopuli

Copy link
Copy Markdown
Contributor

templateMode: 'loose' contradicts the rule's own implementation. It has a strict-mode branch (isStrictMode) that picks the noUnnecessaryComponentKebab message and skips the autofix when the component name is not a valid JS identifier, and the test file already asserts reports for test.gjs and test.gts.

Verified by linting a .gjs file with only this rule on:

<template>{{component "myComponent" foo=123}}</template>
ember/template-no-unnecessary-component-helper

Changes templateMode to both, which drops the "HBS Only" note. No behavior change; the note was just wrong.

Found while implementing RFC #1217 in #2840, which puts this rule in Appendix A. The RFC is right.

🤖 Generated with Claude Code

The rule has a dedicated strict-mode code path and gjs/gts tests, so the
hbs-only marker contradicts its own behavior.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

🏎️ Benchmark Comparison

Benchmark Control (p50) Experiment (p50) Δ
js small 14.71 ms 14.81 ms +0.7%
🟢 js medium 7.58 ms 7.36 ms -2.9%
🟢 js large 2.95 ms 2.79 ms -5.5%
gjs small 1.29 ms 1.27 ms -1.1%
gjs medium 634.54 µs 634.90 µs +0.1%
gjs large 253.88 µs 253.68 µs -0.1%
gts small 1.28 ms 1.27 ms -0.5%
gts medium 638.97 µs 634.41 µs -0.7%
gts large 254.25 µs 252.43 µs -0.7%

🟢 faster · 🔴 slower · 🟠 slightly slower · ⚪ within 2%

Full mitata output
clk: ~3.09 GHz
cpu: AMD EPYC 7763 64-Core Processor
runtime: node 24.19.0 (x64-linux)

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
js small (control)            17.65 ms/iter  18.24 ms ▅ █                  
                      (13.16 ms … 32.45 ms)  30.09 ms ███   ▃       ▃      
                    (  5.34 mb …  10.19 mb)   7.34 mb ████▄██▁▄▁▁█▁▁█▁▁▄▁▁▄

js small (experiment)         15.70 ms/iter  16.25 ms  █                   
                      (13.81 ms … 22.82 ms)  22.22 ms  █▄                  
                    (  6.00 mb …   8.37 mb)   6.89 mb ▅██▅█▃█▁▁▅▅▁▁▁▁▁▁▁▁▃▃

                             ┌                                            ┐
                             ╷ ┌─────────┬─┐                              ╷
          js small (control) ├─┤         │ ├──────────────────────────────┤
                             ╵ └─────────┴─┘                              ╵
                               ╷┌───┬┐               ╷
       js small (experiment)   ├┤   │├───────────────┤
                               ╵└───┴┘               ╵
                             └                                            ┘
                             13.16 ms           21.62 ms           30.09 ms

summary
  js small (experiment)
   1.12x faster than js small (control)

------------------------------------------- -------------------------------
js medium (control)            8.27 ms/iter   8.28 ms ▄█                   
                       (7.13 ms … 14.87 ms)  13.24 ms ██                   
                    (  2.89 mb …   4.63 mb)   3.56 mb ████▃▄▃▅▃▁▂▂▁▂▁▂▁▂▁▂▃

js medium (experiment)         7.94 ms/iter   7.92 ms ██                   
                       (6.97 ms … 15.09 ms)  14.78 ms ██                   
                    (  2.26 mb …   4.79 mb)   3.55 mb ██▇▄▃▅▃▃▂▂▁▁▂▁▁▁▁▂▁▁▂

                             ┌                                            ┐
                              ╷┌─────┬                           ╷
         js medium (control)  ├┤     │───────────────────────────┤
                              ╵└─────┴                           ╵
                             ╷┌────┬                                      ╷
      js medium (experiment) ├┤    │──────────────────────────────────────┤
                             ╵└────┴                                      ╵
                             └                                            ┘
                             6.97 ms           10.87 ms            14.78 ms

summary
  js medium (experiment)
   1.04x faster than js medium (control)

------------------------------------------- -------------------------------
js large (control)             3.31 ms/iter   3.12 ms  █                   
                        (2.78 ms … 8.50 ms)   7.46 ms ▅█                   
                    ( 52.59 kb …   3.43 mb)   1.45 mb ██▃▄▂▂▂▁▂▁▁▁▁▁▁▁▁▁▁▁▂

js large (experiment)          3.20 ms/iter   2.98 ms ▂█                   
                        (2.65 ms … 9.88 ms)   6.55 ms ██                   
                    (485.20 kb …   2.32 mb)   1.44 mb ██▅▃▂▂▁▂▁▂▁▂▁▂▂▁▁▂▁▁▁

                             ┌                                            ┐
                              ╷┌───┬                                      ╷
          js large (control)  ├┤   │──────────────────────────────────────┤
                              ╵└───┴                                      ╵
                             ╷┌───┬                               ╷
       js large (experiment) ├┤   │───────────────────────────────┤
                             ╵└───┴                               ╵
                             └                                            ┘
                             2.65 ms            5.05 ms             7.46 ms

summary
  js large (experiment)
   1.04x faster than js large (control)

------------------------------------------- -------------------------------
gjs small (control)            1.42 ms/iter   1.39 ms █                    
                        (1.24 ms … 6.50 ms)   4.89 ms █▃                   
                    (241.02 kb …   1.66 mb)   1.06 mb ██▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs small (experiment)         1.38 ms/iter   1.31 ms █                    
                        (1.22 ms … 5.45 ms)   5.00 ms █                    
                    (624.95 kb …   1.62 mb)   1.06 mb █▆▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌┬                                         ╷
         gjs small (control) ├┤│─────────────────────────────────────────┤
                             ╵└┴                                         ╵
                             ┌─┬                                          ╷
      gjs small (experiment) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             └                                            ┘
                             1.22 ms            3.11 ms             5.00 ms

summary
  gjs small (experiment)
   1.03x faster than gjs small (control)

------------------------------------------- -------------------------------
gjs medium (control)         682.68 µs/iter 652.61 µs █                    
                      (603.50 µs … 5.10 ms)   3.07 ms █                    
                    ( 42.73 kb …   1.06 mb) 541.25 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs medium (experiment)      678.39 µs/iter 649.95 µs  █                   
                      (603.09 µs … 4.98 ms)   1.49 ms ▂█                   
                    (303.42 kb …   1.25 mb) 541.71 kb ██▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌┬                                           ╷
        gjs medium (control) ││───────────────────────────────────────────┤
                             └┴                                           ╵
                             ┌┬              ╷
     gjs medium (experiment) ││──────────────┤
                             └┴              ╵
                             └                                            ┘
                             603.09 µs           1.84 ms            3.07 ms

summary
  gjs medium (experiment)
   1.01x faster than gjs medium (control)

------------------------------------------- -------------------------------
gjs large (control)          279.11 µs/iter 269.83 µs ▇█                   
                      (243.34 µs … 4.47 ms) 552.41 µs ██▇                  
                    (216.10 kb … 953.28 kb) 217.77 kb ███▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs large (experiment)       276.10 µs/iter 269.49 µs ▆█                   
                      (243.49 µs … 4.04 ms) 469.82 µs ██▂                  
                    (181.39 kb … 776.97 kb) 216.55 kb ████▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌───┬                                       ╷
         gjs large (control) ├┤   │───────────────────────────────────────┤
                             ╵└───┴                                       ╵
                             ╷┌───┬                           ╷
      gjs large (experiment) ├┤   │───────────────────────────┤
                             ╵└───┴                           ╵
                             └                                            ┘
                             243.34 µs         397.88 µs          552.41 µs

summary
  gjs large (experiment)
   1.01x faster than gjs large (control)

------------------------------------------- -------------------------------
gts small (control)            1.37 ms/iter   1.30 ms █                    
                        (1.24 ms … 5.60 ms)   4.85 ms █                    
                    (518.80 kb …   1.63 mb)   1.06 mb █▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts small (experiment)         1.37 ms/iter   1.30 ms █                    
                        (1.23 ms … 6.11 ms)   4.92 ms █                    
                    (614.78 kb …   1.57 mb)   1.05 mb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                         ╷
         gts small (control) │ │─────────────────────────────────────────┤
                             └─┴                                         ╵
                             ┌─┬                                          ╷
      gts small (experiment) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             └                                            ┘
                             1.23 ms            3.08 ms             4.92 ms

summary
  gts small (experiment)
   1x faster than gts small (control)

------------------------------------------- -------------------------------
gts medium (control)         690.59 µs/iter 654.92 µs █                    
                      (607.84 µs … 5.32 ms)   3.09 ms █                    
                    (124.73 kb …   1.79 mb) 542.36 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts medium (experiment)      673.39 µs/iter 647.21 µs  █                   
                      (604.61 µs … 4.93 ms)   1.37 ms ▂█                   
                    ( 74.75 kb …   1.08 mb) 540.45 kb ██▄▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
        gts medium (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌┬            ╷
     gts medium (experiment) ││────────────┤
                             └┴            ╵
                             └                                            ┘
                             604.61 µs           1.85 ms            3.09 ms

summary
  gts medium (experiment)
   1.03x faster than gts medium (control)

------------------------------------------- -------------------------------
gts large (control)          276.71 µs/iter 267.69 µs  █                   
                      (241.40 µs … 4.85 ms) 345.43 µs  █▄▄                 
                    (216.09 kb … 957.67 kb) 216.98 kb ▅███▅█▄▆▃▂▂▁▁▁▁▁▁▁▁▁▁

gts large (experiment)       272.59 µs/iter 267.27 µs  █▂                  
                      (241.17 µs … 4.39 ms) 360.14 µs  ██                  
                    (215.70 kb … 901.09 kb) 216.77 kb ▆██▆▇█▆▃▂▂▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌──────────┬                         ╷
         gts large (control) ├─┤          │─────────────────────────┤
                             ╵ └──────────┴                         ╵
                             ╷ ┌─────────┬                                ╷
      gts large (experiment) ├─┤         │────────────────────────────────┤
                             ╵ └─────────┴                                ╵
                             └                                            ┘
                             241.17 µs         300.66 µs          360.14 µs

summary
  gts large (experiment)
   1.02x faster than gts large (control)

@NullVoxPopuli
NullVoxPopuli merged commit 2208c66 into master Aug 17, 2026
11 checks passed
@NullVoxPopuli
NullVoxPopuli deleted the nvp/component-helper-rule-is-not-hbs-only branch August 17, 2026 21:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant