Skip to content

template-no-class-bindings applies to strict mode - #2844

Merged
evoactivity merged 1 commit into
masterfrom
nvp/class-bindings-applies-to-strict-mode
Aug 17, 2026
Merged

template-no-class-bindings applies to strict mode#2844
evoactivity merged 1 commit into
masterfrom
nvp/class-bindings-applies-to-strict-mode

Conversation

@NullVoxPopuli

Copy link
Copy Markdown
Contributor

Replaces #2843, which had this backwards.

The rule bailed out on gjs/gts:

const isStrictMode = context.filename.endsWith('.gjs') || context.filename.endsWith('.gts');
if (isStrictMode) {
  return {};
}

@ember/component is still supported, so <SomeThing @classNameBindings="a:b" /> in a gjs template still hits the classic path and still deserves the report. The guard and the hbs-only marker are both wrong.

After this, linting a .gjs and a .gts file both report:

import Legacy from './legacy';
<template><Legacy @classNameBindings="a:b" /></template>
ember/template-no-class-bindings line 2

Two test cases move from valid to invalid, and templateMode becomes both, which drops the "HBS Only" doc note.

Worth knowing: a Glimmer component that happens to name an argument @classBinding now gets reported. That naming is unlikely and would be misleading anyway, but it is the one new false-positive surface.

This makes RFC #1217's Appendix A placement correct, so #2840 needs no change.

🤖 Generated with Claude Code

@ember/component is still supported, so a classic component invoked from a
gjs/gts template still acts on @classBinding / @classNameBindings. Drops
the strict-mode early return and the hbs-only marker.

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 15.54 ms 15.09 ms -2.9%
js medium 7.63 ms 7.53 ms -1.2%
🟢 js large 2.99 ms 2.83 ms -5.4%
gjs small 1.28 ms 1.27 ms -0.5%
gjs medium 632.80 µs 624.44 µs -1.3%
gjs large 253.36 µs 252.99 µs -0.1%
gts small 1.26 ms 1.26 ms +0.0%
gts medium 630.03 µs 628.13 µs -0.3%
gts large 250.04 µs 250.47 µs +0.2%

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

Full mitata output
clk: ~2.99 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)            18.12 ms/iter  19.50 ms █                    
                      (13.30 ms … 31.09 ms)  30.45 ms ██▆                  
                    (  5.74 mb …  10.20 mb)   7.33 mb ████████▁▁▁▄▄▄▁▄▄▁▁▄▄

js small (experiment)         16.00 ms/iter  16.63 ms  █▅                  
                      (14.01 ms … 22.88 ms)  21.59 ms ▃██▆▆▃   ▆           
                    (  6.24 mb …   8.37 mb)   6.94 mb ██████▁▄▄█▁▁▄▁▄▁▁▄▁▁▄

                             ┌                                            ┐
                             ╷ ┌──────────┬──┐                            ╷
          js small (control) ├─┤          │  ├────────────────────────────┤
                             ╵ └──────────┴──┘                            ╵
                               ╷┌───┬─┐            ╷
       js small (experiment)   ├┤   │ ├────────────┤
                               ╵└───┴─┘            ╵
                             └                                            ┘
                             13.30 ms           21.87 ms           30.45 ms

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

------------------------------------------- -------------------------------
js medium (control)            8.39 ms/iter   8.41 ms ▇█                   
                       (7.22 ms … 15.67 ms)  14.48 ms ██                   
                    (  2.13 mb …   4.90 mb)   3.55 mb ██▇▆▄▄▂▂▂▂▂▂▁▄▁▁▂▁▂▁▂

js medium (experiment)         8.04 ms/iter   8.43 ms ██                   
                       (6.97 ms … 13.69 ms)  13.24 ms ███▃                 
                    (  3.02 mb …   4.03 mb)   3.56 mb ████▅▇▅▅▇▁▁▁▂▂▁▁▁▁▁▁▄

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

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

------------------------------------------- -------------------------------
js large (control)             3.25 ms/iter   3.08 ms  █                   
                        (2.82 ms … 7.41 ms)   6.15 ms  █                   
                    (394.23 kb …   2.31 mb)   1.44 mb ██▄▁▂▁▂▂▁▂▁▁▂▁▁▁▁▁▁▁▁

js large (experiment)          3.40 ms/iter   3.05 ms █                    
                       (2.72 ms … 11.37 ms)   9.13 ms █                    
                    (121.17 kb …   3.75 mb)   1.45 mb ██▂▂▂▁▂▁▂▂▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                              ┌──┬                   ╷
          js large (control)  │  │───────────────────┤
                              └──┴                   ╵
                             ┌────┬                                       ╷
       js large (experiment) │    │───────────────────────────────────────┤
                             └────┴                                       ╵
                             └                                            ┘
                             2.72 ms            5.92 ms             9.13 ms

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

------------------------------------------- -------------------------------
gjs small (control)            1.43 ms/iter   1.38 ms █                    
                        (1.22 ms … 6.25 ms)   5.76 ms █▃                   
                    (164.80 kb …   2.15 mb)   1.06 mb ██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs small (experiment)         1.39 ms/iter   1.31 ms █                    
                        (1.22 ms … 6.36 ms)   5.28 ms █                    
                    (248.34 kb …   1.88 mb)   1.06 mb █▆▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         gjs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                     ╷
      gjs small (experiment) │ │─────────────────────────────────────┤
                             └─┴                                     ╵
                             └                                            ┘
                             1.22 ms            3.49 ms             5.76 ms

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

------------------------------------------- -------------------------------
gjs medium (control)         683.27 µs/iter 654.93 µs  █                   
                      (600.44 µs … 5.25 ms)   1.40 ms  █                   
                    ( 74.84 kb …   1.12 mb) 541.00 kb ██▆▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs medium (experiment)      665.35 µs/iter 643.54 µs  █                   
                      (591.50 µs … 5.36 ms)   1.32 ms  █                   
                    ( 86.63 kb …   1.59 mb) 541.67 kb ███▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌──┬                                       ╷
        gjs medium (control) ├─┤  │───────────────────────────────────────┤
                             ╵ └──┴                                       ╵
                             ╷┌──┬                                    ╷
     gjs medium (experiment) ├┤  │────────────────────────────────────┤
                             ╵└──┴                                    ╵
                             └                                            ┘
                             591.50 µs          994.80 µs           1.40 ms

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

------------------------------------------- -------------------------------
gjs large (control)          278.61 µs/iter 267.85 µs  █                   
                      (238.85 µs … 5.10 ms) 430.12 µs  █▆                  
                    (216.10 kb … 966.14 kb) 217.65 kb ████▇▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gjs large (experiment)       281.96 µs/iter 271.26 µs ▂█                   
                      (238.92 µs … 5.47 ms) 502.75 µs ██▃▃                 
                    (125.69 kb …   1.11 mb) 217.05 kb ████▃▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌─────┬                         ╷
         gjs large (control) ├┤     │─────────────────────────┤
                             ╵└─────┴                         ╵
                             ╷┌─────┬                                     ╷
      gjs large (experiment) ├┤     │─────────────────────────────────────┤
                             ╵└─────┴                                     ╵
                             └                                            ┘
                             238.85 µs         370.80 µs          502.75 µs

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

------------------------------------------- -------------------------------
gts small (control)            1.40 ms/iter   1.29 ms █                    
                        (1.22 ms … 6.68 ms)   5.56 ms █                    
                    (506.75 kb …   1.64 mb)   1.06 mb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts small (experiment)         1.35 ms/iter   1.28 ms █                    
                        (1.21 ms … 6.59 ms)   5.12 ms █                    
                    (180.14 kb …   1.81 mb)   1.05 mb █▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         gts small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌┬                                       ╷
      gts small (experiment) ││───────────────────────────────────────┤
                             └┴                                       ╵
                             └                                            ┘
                             1.21 ms            3.38 ms             5.56 ms

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

------------------------------------------- -------------------------------
gts medium (control)         674.67 µs/iter 644.95 µs  █                   
                      (596.09 µs … 5.55 ms)   1.35 ms  █                   
                    ( 37.25 kb …   1.04 mb) 540.51 kb ██▅▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

gts medium (experiment)      682.02 µs/iter 647.35 µs █▂                   
                      (594.17 µs … 5.83 ms)   2.02 ms ██                   
                    (127.58 kb …   1.20 mb) 540.89 kb ██▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌─┬                    ╷
        gts medium (control) ├┤ │────────────────────┤
                             ╵└─┴                    ╵
                             ╷┌─┬                                         ╷
     gts medium (experiment) ├┤ │─────────────────────────────────────────┤
                             ╵└─┴                                         ╵
                             └                                            ┘
                             594.17 µs           1.31 ms            2.02 ms

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

------------------------------------------- -------------------------------
gts large (control)          275.19 µs/iter 266.13 µs  █                   
                      (238.11 µs … 5.70 ms) 356.18 µs  ██  ▂               
                    (146.00 kb … 901.48 kb) 216.95 kb ▇███▃█▆▄▂▁▂▁▁▁▁▁▁▁▁▁▁

gts large (experiment)       274.43 µs/iter 266.35 µs  █                   
                      (237.84 µs … 5.57 ms) 354.63 µs  ██                  
                    (215.70 kb … 801.78 kb) 216.82 kb ▆███▃█▆▆▂▁▂▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌───────────┬                              ╷
         gts large (control) ├─┤           │──────────────────────────────┤
                             ╵ └───────────┴                              ╵
                             ╷ ┌───────────┬                             ╷
      gts large (experiment) ├─┤           │─────────────────────────────┤
                             ╵ └───────────┴                             ╵
                             └                                            ┘
                             237.84 µs         297.01 µs          356.18 µs

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

@evoactivity
evoactivity merged commit 5052be0 into master Aug 17, 2026
10 checks passed
@evoactivity
evoactivity deleted the nvp/class-bindings-applies-to-strict-mode branch August 17, 2026 21:45
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.

2 participants