Skip to content

Extract to ember-estree#181

Merged
NullVoxPopuli merged 35 commits intoember-tooling:mainfrom
NullVoxPopuli-ai-agent:extract-to-ember-estree
Mar 19, 2026
Merged

Extract to ember-estree#181
NullVoxPopuli merged 35 commits intoember-tooling:mainfrom
NullVoxPopuli-ai-agent:extract-to-ember-estree

Conversation

@NullVoxPopuli-ai-agent
Copy link
Copy Markdown

No description provided.

NullVoxPopuli and others added 9 commits March 17, 2026 23:57
- Use toTree({ templateOnly: true }) instead of processGlimmerTemplate
- Pass inner content (not full <template> tags) fixing 10-col offset
- Removes spurious GlimmerElementNode(tag: "template") wrapper
- Keep local traverse for convertAst scope management
- blockParamNodes now have parent refs (fixes template-no-let-reference)
- Update snapshots for corrected AST structure

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
- ember-estree now uses VarHead nodes for accurate block param positions
- Guard against undefined result.ast.comments (pre-existing bug)
- Update snapshots for corrected AST structure

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
preprocessGlimmerTemplates now extracts contentRange and passes
inner template content (without <template>/<template> tags) to
toTree. Fixes the 10-column position offset that caused
eslint-plugin-ember test failures. Template root range is fixed
up to cover the full <template>...</template> range afterward.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Two fixes for ESLint autofix compatibility:

1. When replacing JS nodes (TemplateLiteral/StaticBlock) with
   GlimmerTemplate via Object.assign, delete leftover properties
   (quasis, expressions, etc.) that confuse ESLint rules.

2. Add tokens for <template> and </template> tags to the token
   stream so ESLint's SourceCode has full token coverage over
   the template range. Without these, autofixes like
   arrow-body-style produced mangled output.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
ember-estree uses GlimmerBlockParam (not BlockParam) for consistency
with all other Glimmer-prefixed node types. Patch the downstream
assertion in the integration test until eslint-plugin-ember updates.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Avoids shell quoting issues with execaCommand by using
fse.readFile/writeFile for the string replacement.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
NullVoxPopuli and others added 2 commits March 18, 2026 00:06
Clone from NullVoxPopuli-ai-agent/eslint-plugin-ember#update-blockparam-nodetype
which has the nodeType assertion updated. Revert to upstream once
ember-cli/eslint-plugin-ember#2577 merges.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

This isn't toooo different, i suppose from normal PRs:


Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 1.94 ms 1.75 ms -9.9%
🟡 gts medium 6.49 ms 6.30 ms -2.9%
🟢 gts large 16.55 ms 14.56 ms -12.0%
🟡 gjs small 1.36 ms 1.31 ms -3.8%
🟡 gjs medium 5.54 ms 5.28 ms -4.7%
🔴 gjs large 12.38 ms 13.15 ms +6.3%
🟡 hbs small 196.21 µs 191.26 µs -2.5%
🟡 hbs medium 2.42 ms 2.34 ms -3.2%
🟢 hbs large 13.05 ms 11.96 ms -8.3%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

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

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            1.94 ms/iter   2.20 ms █▇                   
                     (982.27 µs … 18.05 ms)   6.57 ms ██▆                  
                    ( 32.62 kb …   2.94 mb) 625.08 kb ████▅▆▄▂▄▄▄▃▂▁▂▁▁▁▁▁▁

gts small (experiment)         1.75 ms/iter   1.77 ms ██                   
                     (942.77 µs … 16.36 ms)   5.65 ms ██▄▃                 
                    ( 12.20 kb …   2.70 mb) 596.12 kb ████▃▅▃▂▂▃▂▂▂▃▁▂▁▂▁▁▁

                             ┌                                            ┐
                             ╷┌──────┬─┐                                  ╷
         gts small (control) ├┤      │ ├──────────────────────────────────┤
                             ╵└──────┴─┘                                  ╵
                             ╷┌────┬┐                              ╷
      gts small (experiment) ├┤    │├──────────────────────────────┤
                             ╵└────┴┘                              ╵
                             └                                            ┘
                             942.77 µs           3.76 ms            6.57 ms

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

------------------------------------------- -------------------------------
gts medium (control)           6.49 ms/iter   7.14 ms ▄█                   
                       (3.37 ms … 26.42 ms)  24.88 ms ██▇                  
                    (342.39 kb …  12.57 mb)   2.73 mb █████▃▅▅▃▁▁▂▁▁▁▁▁▂▁▁▂

gts medium (experiment)        6.30 ms/iter   6.97 ms █▃                   
                       (3.48 ms … 27.84 ms)  14.89 ms ████  ▃              
                    (166.97 kb …  13.30 mb)   2.73 mb █████▇█▆▆▂▃▆▂▂▃▃▁▂▁▁▂

                             ┌                                            ┐
                             ╷ ┌────┬┐                                    ╷
        gts medium (control) ├─┤    │├────────────────────────────────────┤
                             ╵ └────┴┘                                    ╵
                             ╷┌────┬─┐               ╷
     gts medium (experiment) ├┤    │ ├───────────────┤
                             ╵└────┴─┘               ╵
                             └                                            ┘
                             3.37 ms           14.12 ms            24.88 ms

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

------------------------------------------- -------------------------------
gts large (control)           16.55 ms/iter  19.90 ms  ▃██   ▃             
                       (8.19 ms … 35.20 ms)  34.97 ms ▂███▇▇ █   ▇        ▂
                    (  5.64 mb …  18.50 mb)   7.57 mb ██████▁█▆▆▁█▆▆▆▁▁▁▁▁█

gts large (experiment)        14.56 ms/iter  15.73 ms ▄▄▄█                 
                       (7.94 ms … 33.61 ms)  33.49 ms █████▅▅ █            
                    (  4.68 mb …   7.20 mb)   6.26 mb ███████▅█▁▁▁▁█▅▁▁▁▅▁▅

                             ┌                                            ┐
                             ╷    ┌────────┬─────┐                        ╷
         gts large (control) ├────┤        │     ├────────────────────────┤
                             ╵    └────────┴─────┘                        ╵
                             ╷   ┌──────┬─┐                             ╷
      gts large (experiment) ├───┤      │ ├─────────────────────────────┤
                             ╵   └──────┴─┘                             ╵
                             └                                            ┘
                             7.94 ms           21.46 ms            34.97 ms

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

------------------------------------------- -------------------------------
gjs small (control)            1.36 ms/iter   1.14 ms █                    
                     (786.90 µs … 20.98 ms)   5.81 ms █                    
                    ( 38.58 kb …   1.74 mb) 547.90 kb █▇▃▂▂▂▁▂▂▁▁▁▂▁▁▁▁▁▁▁▁

gjs small (experiment)         1.31 ms/iter   1.12 ms █                    
                     (744.29 µs … 16.72 ms)   5.04 ms ██                   
                    (912.00  b …   7.29 mb) 540.22 kb ██▄▃▃▂▂▁▁▂▂▂▂▁▂▂▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌───┬                                       ╷
         gjs small (control) ├┤   │───────────────────────────────────────┤
                             ╵└───┴                                       ╵
                             ╷┌───┬                                ╷
      gjs small (experiment) ├┤   │────────────────────────────────┤
                             ╵└───┴                                ╵
                             └                                            ┘
                             744.29 µs           3.28 ms            5.81 ms

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

------------------------------------------- -------------------------------
gjs medium (control)           5.54 ms/iter   6.36 ms █                    
                       (2.86 ms … 25.18 ms)  24.70 ms █▇ ▄                 
                    (649.18 kb …  10.71 mb)   2.34 mb ████▃▆▄▁▂▂▁▁▁▁▁▁▁▁▁▁▂

gjs medium (experiment)        5.28 ms/iter   6.02 ms ▇█                   
                       (2.82 ms … 31.48 ms)  20.11 ms ██                   
                    (193.05 kb …   3.76 mb)   2.14 mb ██▇▇▅▇▂▁▅▂▂▁▁▁▂▁▁▁▁▁▂

                             ┌                                            ┐
                             ╷┌────┬┐                                     ╷
        gjs medium (control) ├┤    │├─────────────────────────────────────┤
                             ╵└────┴┘                                     ╵
                             ╷┌───┬─┐                            ╷
     gjs medium (experiment) ├┤   │ ├────────────────────────────┤
                             ╵└───┴─┘                            ╵
                             └                                            ┘
                             2.82 ms           13.76 ms            24.70 ms

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

------------------------------------------- -------------------------------
gjs large (control)           12.38 ms/iter  13.21 ms  ▆█                  
                       (6.66 ms … 34.05 ms)  32.87 ms ▇██▅▇   ▂            
                    (  4.66 mb …   7.71 mb)   6.12 mb █████▃█▁█▁▃▃��▁▁▁▃▃▁▁▃

gjs large (experiment)        13.15 ms/iter  15.39 ms █▅▅                  
                       (6.59 ms … 33.81 ms)  32.77 ms ███▂▂▅ ▅ ▂           
                    (  2.98 mb …   7.62 mb)   5.70 mb ██████▇█▄█▁▁▄▁▁▁▇▄▁▁▄

                             ┌                                            ┐
                             ╷  ┌──────┬┐                                 ╷
         gjs large (control) ├──┤      │├─────────────────────────────────┤
                             ╵  └──────┴┘                                 ╵
                             ╷ ┌────────┬───┐                             ╷
      gjs large (experiment) ├─┤        │   ├─────────────────────────────┤
                             ╵ └────────┴───┘                             ╵
                             └                                            ┘
                             6.59 ms           19.73 ms            32.87 ms

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

------------------------------------------- -------------------------------
hbs small (control)          196.21 µs/iter 130.88 µs █                    
                      (94.29 µs … 21.44 ms)   2.52 ms █                    
                    (  4.45 kb …   1.81 mb) 139.56 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       191.26 µs/iter 127.95 µs █                    
                      (91.99 µs … 20.06 ms)   2.17 ms █                    
                    ( 49.36 kb …   2.75 mb) 129.11 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         hbs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                    ╷
      hbs small (experiment) │ │────────────────────────────────────┤
                             └─┴                                    ╵
                             └                                            ┘
                             91.99 µs            1.31 ms            2.52 ms

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

------------------------------------------- -------------------------------
hbs medium (control)           2.42 ms/iter   1.82 ms █                    
                       (1.18 ms … 18.61 ms)  16.73 ms █                    
                    (274.18 kb …   4.21 mb)   1.97 mb █▅▃▂▃▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        2.34 ms/iter   1.73 ms █                    
                       (1.21 ms … 17.60 ms)  17.06 ms █                    
                    (460.74 kb …   4.71 mb)   1.85 mb █▆▂▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌──┬                                        ╷
        hbs medium (control) │  │────────────────────────────────────────┤
                             └──┴                                        ╵
                             ┌──┬                                         ╷
     hbs medium (experiment) │  │─────────────────────────────────────────┤
                             └──┴                                         ╵
                             └                                            ┘
                             1.18 ms            9.12 ms            17.06 ms

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

------------------------------------------- -------------------------------
hbs large (control)           13.05 ms/iter  15.29 ms █                    
                       (7.84 ms … 31.31 ms)  26.24 ms █▇▂                  
                    (  6.55 mb …  10.11 mb)   9.01 mb ███▃█▅▃▅▃▁▃▁▃▁▁▃█▃▃▃▃

hbs large (experiment)        11.96 ms/iter  15.14 ms  █                   
                       (7.38 ms … 26.67 ms)  26.21 ms  █                   
                    (  5.67 mb …  10.66 mb)   8.20 mb ▆█▃▂▆▁▂▂▂▃▃▃▁▁▁▂▂▂▃▁▂

                             ┌                                            ┐
                              ╷┌───────────┬────┐                         ╷
         hbs large (control)  ├┤           │    ├─────────────────────────┤
                              ╵└───────────┴────┘                         ╵
                             ╷┌─────────┬───────┐                         ╷
      hbs large (experiment) ├┤         │       ├─────────────────────────┤
                             ╵└─────────┴───────┘                         ╵
                             └                                            ┘
                             7.38 ms           16.81 ms            26.24 ms

summary
  hbs large (experiment)
   1.09x faster than hbs large (control)

@NullVoxPopuli
Copy link
Copy Markdown
Member

second run:


Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.16 ms 1.97 ms -9.1%
gts medium 6.96 ms 6.99 ms +0.4%
🟢 gts large 19.55 ms 17.14 ms -12.3%
🟢 gjs small 1.55 ms 1.43 ms -7.7%
🟡 gjs medium 5.65 ms 5.55 ms -1.7%
🟡 gjs large 13.74 ms 13.49 ms -1.8%
🟡 hbs small 198.69 µs 206.69 µs +4.0%
🟡 hbs medium 2.63 ms 2.67 ms +1.6%
🟢 hbs large 14.81 ms 13.62 ms -8.0%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

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

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.16 ms/iter   2.58 ms █▂                   
                       (1.11 ms … 10.28 ms)   7.14 ms ██▅                  
                    ( 16.53 kb …   2.98 mb) 651.31 kb ████▅▅▃▃▃▃▅▃▂▂▂▁▁▁▁▁▁

gts small (experiment)         1.97 ms/iter   2.18 ms █▃                   
                       (1.06 ms … 18.75 ms)   5.47 ms ██▄                  
                    (140.45 kb …   2.17 mb) 588.32 kb ███▇▆▅▄▂▃▂▂▅▃▂▃▂▂▁▁▂▁

                             ┌                                            ┐
                             ╷┌──────┬──┐                                 ╷
         gts small (control) ├┤      │  ├─────────────────────────────────┤
                             ╵└──────┴──┘                                 ╵
                             ╷┌─────┬┐                        ╷
      gts small (experiment) ├┤     │├────────────────────────┤
                             ╵└─────┴┘                        ╵
                             └                                            ┘
                             1.06 ms            4.10 ms             7.14 ms

summary
  gts small (experiment)
   1.1x faster than gts small (control)
                    (880.00  b …   6.04 mb) 583.44 kb ██▅▄▂▂▁▂▂▂▂▂▃▂▁▁▁▁▁▁▁

gjs small (experiment)         1.43 ms/iter   1.25 ms █▆                   
                     (827.89 µs … 17.97 ms)   4.86 ms ██                   
                    ( 38.74 kb …   6.79 mb) 539.73 kb ██▄▃▂▂▃▂▂▂▁▂▁▂▁▂▂▁▁▁▁

                             ┌                                            ┐
                             ╷┌────┬                                      ╷
         gjs small (control) ├┤    │──────────────────────────────────────┤
                             ╵└────┴                                      ╵
                             ╷┌───┬                            ╷
      gjs small (experiment) ├┤   │────────────────────────────┤
                             ╵└───┴                            ╵
                             └                                            ┘
                             827.89 µs           3.46 ms            6.10 ms

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

------------------------------------------- -------------------------------
gjs medium (control)           5.65 ms/iter   6.22 ms █▅                   
                       (3.18 ms … 28.82 ms)  22.67 ms ██▂▇                 
                    (343.28 kb …   8.17 mb)   2.35 mb ████▄▃▂▂▂▁▁▂▁▁▂▁▁▁▁▁▂

gjs medium (experiment)        5.55 ms/iter   6.32 ms █▄                   
                       (3.13 ms … 28.88 ms)  19.81 ms ██  ▃                
                    (554.52 kb …   3.58 mb)   2.11 mb █████▄▄▂▂▂▂▁▁▁▂▁▁▁▁▁▂

                             ┌                                            ┐
                             ╷┌────┬┐                                     ╷
        gjs medium (control) ├┤    │├─────────────────────────────────────┤
                             ╵└────┴┘                                     ╵
                             ╷┌────┬┐                              ╷
     gjs medium (experiment) ├┤    │├──────────────────────────────┤
                             ╵└────┴┘                              ╵
                             └                                            ┘
                             3.13 ms           12.90 ms            22.67 ms

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

------------------------------------------- -------------------------------
gjs large (control)           13.74 ms/iter  14.45 ms  █ █                 
                       (7.44 ms … 35.31 ms)  35.29 ms ▃█▆█▆                
                    (  4.51 mb …   8.15 mb)   6.19 mb ██████▆▄▄▄▄▁▁▁▁▁▁▆▁▁▄

gjs large (experiment)        13.49 ms/iter  15.87 ms   █                  
                       (6.86 ms … 34.79 ms)  33.57 ms  ███  ▆▃             
                    (  3.88 mb …  13.89 mb)   5.94 mb ████▆▆██▄█▁▁▁▁▄▁▁▄▁▁▄

                             ┌                                            ┐
                              ╷  ┌──────┬┐                                ╷
         gjs large (control)  ├──┤      │├────────────────────────────────┤
                              ╵  └──────┴┘                                ╵
                             ╷   ┌──────┬──┐                           ╷
      gjs large (experiment) ├───┤      │  ├───────────────────────────┤
                             ╵   └──────┴──┘                           ╵
                             └                                            ┘
                             6.86 ms           21.07 ms            35.29 ms

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

------------------------------------------- -------------------------------
hbs small (control)          198.69 µs/iter 135.17 µs █                    
                      (96.49 µs … 20.80 ms)   2.44 ms █                    
                    ( 14.69 kb …   1.65 mb) 139.22 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       206.69 µs/iter 138.14 µs █                    
                      (96.20 µs … 20.27 ms)   2.50 ms █                    
                    ( 19.30 kb …   1.97 mb) 130.30 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                         ╷
         hbs small (control) │ │─────────────────────────────────────────┤
                             └─┴                                         ╵
                             ┌─┬                                          ╷
      hbs small (experiment) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             └                                            ┘
                             96.20 µs            1.30 ms            2.50 ms

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

------------------------------------------- -------------------------------
hbs medium (control)           2.63 ms/iter   2.22 ms █                    
                       (1.35 ms … 18.90 ms)  18.51 ms █                    
                    (379.41 kb …   3.39 mb)   1.97 mb █▅▂▃▃▁▁▁▂▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        2.67 ms/iter   1.91 ms █                    
                       (1.40 ms … 23.82 ms)  20.24 ms █                    
                    (152.59 kb …   4.63 mb)   1.85 mb █▄▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌──┬                                     ╷
        hbs medium (control) │  │─────────────────────────────────────┤
                             └──┴                                     ╵
                             ┌──┬                                         ╷
     hbs medium (experiment) │  │─────────────────────────────────────────┤
                             └──┴                                         ╵
                             └                                            ┘
                             1.35 ms           10.80 ms            20.24 ms

summary
  hbs medium (control)
   1.02x faster than hbs medium (experiment)

------------------------------------------- -------------------------------
hbs large (control)           14.81 ms/iter  18.09 ms █                    
                       (8.52 ms … 31.31 ms)  28.93 ms █▂▂   ▂              
                    (  6.40 mb …  11.54 mb)   9.07 mb ████▆▁█▁▆▆█▁▁▁▃▁▆▆▃▁▃

hbs large (experiment)        13.62 ms/iter  17.15 ms █                    
                       (8.35 ms … 27.98 ms)  25.65 ms █▄                   
                    (  5.55 mb …  10.61 mb)   8.26 mb ██▅▃█▆▁▁▁▅▅▃▅▃▁▁▃▁▁█▃

                             ┌                                            ┐
                             ╷ ┌───────────┬──────┐                       ╷
         hbs large (control) ├─┤           │      ├───────────────────────┤
                             ╵ └───────────┴──────┘                       ╵
                             ╷┌──────────┬──────┐                  ╷
      hbs large (experiment) ├┤          │      ├──────────────────┤
                             ╵└──────────┴──────┘                  ╵
                             └                                            ┘
                             8.35 ms           18.64 ms            28.93 ms

summary
  hbs large (experiment)
   1.09x faster than hbs large (control)

NullVoxPopuli and others added 3 commits March 18, 2026 08:51
- gjs-gts-parser uses toTree({ parser }) instead of separate
  transformForLint + preprocessGlimmerTemplates + convertAst pipeline
- transforms.js reduced to registerGlimmerScopes + transformForLint
  (transformForLint still needed for ts-patch.js and TS placeholder format)
- @babel/eslint-parser no longer used in the parsing pipeline
  (JS files use ember-estree's default oxc parser + eslint-scope)

Still TODO: token stream tests fail due to TS placeholder format
mismatch — the TS parser produces backtick tokens but toTree adds
<template> tag tokens. Need to bridge token formats.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Major refactor of gjs-gts-parser to use ember-estree's toTree with
a custom parser option:

- toTree handles template extraction, placeholder JS, and AST splicing
- gjs-gts-parser provides TS parser as callback; JS uses oxc default
- Eliminated preprocessGlimmerTemplates and convertAst's splicing logic
- transforms.js reduced to registerGlimmerScopes + transformForLint
  (transformForLint still needed for ts-patch.js virtual FS)
- toTSPlaceholderJS builds TS-compatible placeholders from parseResults
  without calling content-tag twice
- @babel/eslint-parser no longer used in the parsing pipeline
- Error formatting for content-tag parse errors

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…holderJS

- TS path uses toTree's visitor API for scope registration during
  traversal, eliminating the second registerGlimmerScopes pass
- buildGlimmerVisitors() creates visitors that close over scopeManager
- toTSPlaceholderJS removed — ember-estree's backtick placeholders
  work directly with @typescript-eslint/parser
- transformForLint simplified to use ember-estree's toPlaceholderJS
- JS/oxc path still uses registerGlimmerScopes as fallback
- Benchmark: ~9% regression from baseline (improved from ~15%)

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.55 ms 2.15 ms -15.6%
🟡 gts medium 8.68 ms 9.06 ms +4.4%
🟡 gts large 22.08 ms 21.24 ms -3.8%
🟡 gjs small 1.67 ms 1.73 ms +3.2%
gjs medium 6.62 ms 6.67 ms +0.7%
🟢 gjs large 17.43 ms 15.08 ms -13.4%
🟡 hbs small 237.34 µs 230.92 µs -2.7%
🔴 hbs medium 2.86 ms 3.22 ms +12.4%
🟡 hbs large 15.25 ms 15.81 ms +3.7%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

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

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.55 ms/iter   2.98 ms  █▆                  
                       (1.19 ms … 13.07 ms)   6.58 ms ▆███▆▇               
                    ( 11.38 kb …   2.47 mb) 644.85 kb ██████▇▄▅▄▃▇▆▄▂▂▃▂▂▂▂

gts small (experiment)         2.15 ms/iter   2.28 ms  █                   
                       (1.15 ms … 11.33 ms)   6.60 ms ▅█▂▃                 
                    ( 39.53 kb …   1.86 mb) 609.16 kb ████▅▅▃▂▄▂▂▂▂▂▂▂▂▁▂▁▁

                             ┌                                            ┐
                             ╷  ┌────────┬──┐                             ╷
         gts small (control) ├──┤        │  ├─────────────────────────────┤
                             ╵  └────────┴──┘                             ╵
                             ╷ ┌─────┬┐                                   ╷
      gts small (experiment) ├─┤     │├───────────────────────────────────┤
                             ╵ └─────┴┘                                   ╵
                             └                                            ┘
                             1.15 ms            3.87 ms             6.60 ms

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

------------------------------------------- -------------------------------
gts medium (control)           8.68 ms/iter   9.99 ms  █ ▃                 
                       (4.91 ms … 27.39 ms)  22.69 ms ██▅█   ▃             
                    (862.94 kb …  11.77 mb)   2.71 mb █████████▃▁▁▁▁▁▁▁▁▃▁▄

gts medium (experiment)        9.06 ms/iter  10.29 ms  █                   
                       (4.49 ms … 35.51 ms)  27.99 ms  █▇▇                 
                    (899.95 kb …  11.51 mb)   2.67 mb ████▆▂▅▇▄▁▄▄▂▁▁▁▁▁▁▁▂

                             ┌                                            ┐
                              ╷┌─────┬──┐                       ╷
        gts medium (control)  ├┤     │  ├───────────────────────┤
                              ╵└─────┴──┘                       ╵
                             ╷ ┌──────┬─┐                                 ╷
     gts medium (experiment) ├─┤      │ ├─────────────────────────────────┤
                             ╵ └──────┴─┘                                 ╵
                             └                                            ┘
                             4.49 ms           16.24 ms            27.99 ms

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

------------------------------------------- -------------------------------
gts large (control)           22.08 ms/iter  25.27 ms          ██          
                      (11.97 ms … 39.86 ms)  38.73 ms ██████  ███          
                    (  3.79 mb …   8.71 mb)   6.92 mb ███████████▁▁▁██▁█▁▁█

gts large (experiment)        21.24 ms/iter  23.01 ms  ▂█ ▂                
                      (11.74 ms … 40.59 ms)  39.47 ms  ██▅█▅▅▅▅            
                    (  4.95 mb …  17.66 mb)   7.21 mb ▇████████▁▇▇▇▁▁▁▁▁▇▇▇

                             ┌                                            ┐
                             ╷      ┌─────────┬────┐                     ╷
         gts large (control) ├──────┤         │    ├─────────────────────┤
                             ╵      └─────────┴────┘                     ╵
                             ╷   ┌──────────┬──┐                          ╷
      gts large (experiment) ├───┤          │  ├──────────────────────────┤
                             ╵   └──────────┴──┘                          ╵
                             └                                            ┘
                             11.74 ms           25.61 ms           39.47 ms

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

------------------------------------------- -------------------------------
gjs small (control)            1.67 ms/iter   1.55 ms ▄█                   
                     (872.01 µs … 20.77 ms)   7.21 ms ██                   
                    (141.50 kb …   5.80 mb) 574.76 kb ██▇▄▃▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁▁

gjs small (experiment)         1.73 ms/iter   1.58 ms ▇█                   
                     (924.06 µs … 19.25 ms)   6.63 ms ██                   
                    ( 29.97 kb …   1.52 mb) 522.86 kb ███▄▃▂▁▂▂▂▂▂▂▂▁▂▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌────┬                                      ╷
         gjs small (control) ├┤    │──────────────────────────────────────┤
                             ╵└────┴                                      ╵
                             ╷┌────┬                                  ╷
      gjs small (experiment) ├┤    │──────────────────────────────────┤
                             ╵└────┴                                  ╵
                             └                                            ┘
                             872.01 µs           4.04 ms            7.21 ms

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

------------------------------------------- -------------------------------
gjs medium (control)           6.62 ms/iter   7.08 ms  █                   
                       (3.66 ms … 32.08 ms)  25.67 ms ▇█▄                  
                    (340.34 kb …   3.38 mb)   2.25 mb ████▅▆▅▂▁▃▂▁▁▁▁▁▁▁▁▁▂

gjs medium (experiment)        6.67 ms/iter   6.95 ms █▆                   
                       (3.91 ms … 33.48 ms)  28.21 ms ██▅                  
                    (  1.34 mb …   8.56 mb)   2.30 mb ████▄▃▄▃▂▁▁▂▁▁▁▁▁▁▁▁▂

                             ┌                                            ┐
                             ╷┌───┬┐                                 ╷
        gjs medium (control) ├┤   │├─────────────────────────────────┤
                             ╵└───┴┘                                 ╵
                             ╷┌────┬                                      ╷
     gjs medium (experiment) ├┤    │──────────────────────────────────────┤
                             ╵└────┴                                      ╵
                             └                                            ┘
                             3.66 ms           15.94 ms            28.21 ms

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

------------------------------------------- -------------------------------
gjs large (control)           17.43 ms/iter  18.56 ms  █▄                  
                       (9.17 ms … 49.01 ms)  40.26 ms  ███ ██ ▅            
                    (  3.34 mb …   7.74 mb)   6.20 mb ████▅██▁█▅▅▁▁▁▁▁▁▁▅▁▅

gjs large (experiment)        15.08 ms/iter  16.06 ms  █                   
                       (8.55 ms … 37.59 ms)  37.09 ms  █  ▃                
                    (  4.01 mb …   7.29 mb)   5.98 mb ▇████▅▇▁▁▅▃▃▁▁▁▁▁▁▁▃▃

                             ┌                                            ┐
                              ╷  ┌────────┬┐                              ╷
         gjs large (control)  ├──┤        │├──────────────────────────────┤
                              ╵  └────────┴┘                              ╵
                             ╷ ┌──────┬─┐                             ╷
      gjs large (experiment) ├─┤      │ ├─────────────────────────────┤
                             ╵ └──────┴─┘                             ╵
                             └                                            ┘
                             8.55 ms           24.41 ms            40.26 ms

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

------------------------------------------- -------------------------------
hbs small (control)          237.34 µs/iter 154.50 µs █                    
                     (102.98 µs … 24.94 ms)   3.15 ms █                    
                    (  7.18 kb …   1.55 mb) 139.19 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       230.92 µs/iter 159.71 µs █                    
                     (111.63 µs … 21.42 ms)   2.50 ms █                    
                    ( 24.85 kb …   3.41 mb) 140.78 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         hbs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                ╷
      hbs small (experiment) │ │────────────────────────────────┤
                             └─┴                                ╵
                             └                                            ┘
                             102.98 µs           1.63 ms            3.15 ms

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

------------------------------------------- -------------------------------
hbs medium (control)           2.86 ms/iter   3.13 ms █                    
                       (1.38 ms … 20.51 ms)  19.93 ms █                    
                    (382.77 kb …   5.14 mb)   1.97 mb █▆▃▅▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        3.22 ms/iter   2.98 ms █                    
                       (1.65 ms … 25.80 ms)  21.57 ms █                    
                    ( 23.24 kb …   4.52 mb)   1.97 mb █▇▃▄▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌──┬┐                                    ╷
        hbs medium (control) │  │├────────────────────────────────────┤
                             └──┴┘                                    ╵
                              ┌──┬                                        ╷
     hbs medium (experiment)  │  │────────────────────────────────────────┤
                              └──┴                                        ╵
                             └                                            ┘
                             1.38 ms           11.47 ms            21.57 ms

summary
  hbs medium (control)
   1.12x faster than hbs medium (experiment)

------------------------------------------- -------------------------------
hbs large (control)           15.25 ms/iter  20.57 ms █▅                   
                       (8.58 ms … 31.65 ms)  29.45 ms ██  ▃                
                    (  6.70 mb …  10.74 mb)   9.04 mb ██▄▄█▄▆▁▁▄▆▄▄▄▆▁▁█▁▁▆

hbs large (experiment)        15.81 ms/iter  19.08 ms ██                   
                       (9.57 ms … 32.22 ms)  31.21 ms ██▆ ▆                
                    (  8.05 mb …  10.92 mb)   8.76 mb ██████▄▁▁█▁▁▁▄█▁▄█▄▁▄

                             ┌                                            ┐
                             ╷┌───────────┬──────────┐                 ╷
         hbs large (control) ├┤           │          ├─────────────────┤
                             ╵└───────────┴──────────┘                 ╵
                               ╷ ┌─────────┬──────┐                       ╷
      hbs large (experiment)   ├─┤         │      ├───────────────────────┤
                               ╵ └─────────┴──────┘                       ╵
                             └                                            ┘
                             8.58 ms           19.89 ms            31.21 ms

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

NullVoxPopuli and others added 3 commits March 18, 2026 10:21
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
…olderJS

- Import glimmerVisitorKeys (const) instead of buildGlimmerVisitorKeys (fn)
- transformForLint builds placeholders inline instead of importing toPlaceholderJS
- Fewer imports from ember-estree = cleaner dependency surface

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.14 ms 1.92 ms -10.2%
🟡 gts medium 7.04 ms 7.17 ms +1.9%
🟢 gts large 19.06 ms 16.63 ms -12.7%
🟡 gjs small 1.47 ms 1.44 ms -1.6%
🟢 gjs medium 5.56 ms 5.14 ms -7.5%
🟢 gjs large 13.12 ms 12.45 ms -5.1%
🟡 hbs small 200.38 µs 192.39 µs -4.0%
🟡 hbs medium 2.56 ms 2.61 ms +2.0%
🟡 hbs large 14.43 ms 15.02 ms +4.1%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

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

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.14 ms/iter   2.42 ms █▅                   
                       (1.07 ms … 19.81 ms)   6.44 ms ██▆▂                 
                    ( 25.75 kb …   2.78 mb) 638.05 kb █████▅▅▃▄▄▂▄▄▃▂▂▂▁▁▁▁

gts small (experiment)         1.92 ms/iter   2.07 ms █▄                   
                       (1.03 ms … 21.52 ms)   5.56 ms ██▂                  
                    ( 30.91 kb …   1.79 mb) 579.99 kb ████▅▅▄▃▃▂▂▃▄▂▃▂▁▁▁▂▂

                             ┌                                            ┐
                             ╷ ┌──────┬──┐                                ╷
         gts small (control) ├─┤      │  ├────────────────────────────────┤
                             ╵ └──────┴──┘                                ╵
                             ╷┌─────┬─┐                            ╷
      gts small (experiment) ├┤     │ ├────────────────────────────┤
                             ╵└─────┴─┘                            ╵
                             └                                            ┘
                             1.03 ms            3.73 ms             6.44 ms

summary
  gts small (experiment)
   1.11x faster than gts small (control)
        hbs medium (control) │  │───────────────────────────────────────┤
                             └──┴                                       ╵
                             ┌──┬                                         ╷
     hbs medium (experiment) │  │─────────────────────────────────────────┤
                             └──┴                                         ╵
                             └                                            ┘
                             1.30 ms           10.09 ms            18.87 ms

summary
  hbs medium (control)
   1.02x faster than hbs medium (experiment)

------------------------------------------- -------------------------------
hbs large (control)           14.43 ms/iter  17.38 ms █                    
                       (8.07 ms … 36.73 ms)  29.97 ms █▅                   
                    (  6.47 mb …  11.49 mb)   9.08 mb ██▃▅▅█▃▃▅▁▁▅▃▃▅▃▁▃▃▁▃

hbs large (experiment)        15.02 ms/iter  18.71 ms █                    
                       (8.41 ms … 38.48 ms)  36.84 ms █                    
                    (  2.75 mb …  12.61 mb)   8.18 mb █▅▂▅▇▅▁▂▂▂▂▁▅▂▁▂▁▁▁▁▂

                             ┌                                            ┐
                             ╷┌────────┬────┐                  ╷
         hbs large (control) ├┤        │    ├──────────────────┤
                             ╵└────────┴────┘                  ╵
                              ┌─────────┬─────┐                           ╷
      hbs large (experiment)  │         │     ├───────────────────────────┤
                              └─────────┴─────┘                           ╵
                             └                                            ┘
                             8.07 ms           22.46 ms            36.84 ms

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

NullVoxPopuli and others added 3 commits March 18, 2026 20:31
Replace toBeLessThanOrEqual with exact toBe check to verify
all traversed nodes are covered by snapshot assertions.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Consumer now owns the visitor key merge before returning to ESLint.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
NullVoxPopuli and others added 3 commits March 18, 2026 21:11
Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Both TS and JS paths now create scopeManager inside the parser
callback (before visitors run), enabling single-pass scope
registration via buildGlimmerVisitors for all file types.

- JS path uses oxc-parser + eslint-scope in the parser callback
- Remove registerGlimmerScopes import (no longer used)
- Drop @babel/eslint-parser dependency and @babel/core peer dep
- Add oxc-parser as direct dependency

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
These test projects use babelParser for plain .js files in their
ESLint configs. Previously resolved through the root dependency
which was removed. Now listed as direct devDependencies.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.19 ms 2.00 ms -8.6%
🟢 gts medium 7.10 ms 6.69 ms -5.9%
🟢 gts large 18.69 ms 17.03 ms -8.9%
🟢 gjs small 1.55 ms 1.46 ms -5.7%
🟢 gjs medium 5.79 ms 5.18 ms -10.5%
🟡 gjs large 13.33 ms 12.73 ms -4.5%
🟡 hbs small 173.84 µs 167.85 µs -3.4%
🔴 hbs medium 2.51 ms 2.64 ms +5.3%
hbs large 13.81 ms 13.89 ms +0.5%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

Full mitata output
clk: ~3.35 GHz
cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
runtime: node 24.14.0 (x64-linux)

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.19 ms/iter   2.41 ms █▅                   
                       (1.13 ms … 12.77 ms)   6.97 ms ██▇                  
                    ( 47.48 kb …   2.40 mb) 630.38 kb █████▅▃▄▄▃▂▅▂▂▁▁▂▁▂▂▁

gts small (experiment)         2.00 ms/iter   2.20 ms █▃                   
                       (1.08 ms … 18.61 ms)   6.23 ms ██▅                  
                    ( 22.25 kb …   3.23 mb) 590.92 kb ████▅▆▃▃▂▃▂▃▂▂▂▂▂▁▁▁▁

                             ┌                                            ┐
                             ╷ ┌──────┬┐                                  ╷
         gts small (control) ├─┤      │├──────────────────────────────────┤
                             ╵ └──────┴┘                                  ╵
                             ╷┌─────┬─┐                             ╷
      gts small (experiment) ├┤     │ ├─────────────────────────────┤
                             ╵└─────┴─┘                             ╵
                             └                                            ┘
                             1.08 ms            4.03 ms             6.97 ms

summary
  gts small (experiment)
   1.09x faster than gts small (control)
                    ( 46.90 kb …   3.44 mb) 561.26 kb ██▅▃▂▂▂▁▂▁▁▂▂▂▁▁▁▁▁▁▁

gjs small (experiment)         1.46 ms/iter   1.23 ms █                    
                     (854.65 µs … 17.48 ms)   6.07 ms █▆                   
                    ( 41.59 kb …   7.11 mb) 534.08 kb ██▃▃▁▂▂▂▁▂▂▂▂▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                              ┌────┬                                  ╷
         gjs small (control)  │    │──────────────────────────────────┤
                              └────┴                                  ╵
                             ╷┌───┬                                       ╷
      gjs small (experiment) ├┤   │───────────────────────────────────────┤
                             ╵└───┴                                       ╵
                             └                                            ┘
                             854.65 µs           3.46 ms            6.07 ms

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

------------------------------------------- -------------------------------
gjs medium (control)           5.79 ms/iter   6.32 ms █▆                   
                       (3.15 ms … 29.00 ms)  24.28 ms ██▆▂                 
                    (647.27 kb …  11.61 mb)   2.36 mb ████▅▄▄▅▁▁▂▁▁▁▁▁▁▁▁▁▂

gjs medium (experiment)        5.18 ms/iter   5.82 ms █                    
                       (3.01 ms … 27.76 ms)  20.75 ms ██                   
                    ( 37.98 kb …   3.48 mb)   2.07 mb ██▇▅█▃▃▂▁▃▁▁▁▂▁▁▁▁▁▁▂

                             ┌                                            ┐
                             ╷┌────┬┐                                     ╷
        gjs medium (control) ├┤    │├─────────────────────────────────────┤
                             ╵└────┴┘                                     ╵
                             ┌────┬┐                               ╷
     gjs medium (experiment) │    │├───────────────────────────────┤
                             └────┴┘                               ╵
                             └                                            ┘
                             3.01 ms           13.65 ms            24.28 ms

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

------------------------------------------- -------------------------------
gjs large (control)           13.33 ms/iter  13.75 ms ▅▅ █▅                
                       (6.97 ms … 38.67 ms)  35.55 ms ██▅██▂               
                    (  3.99 mb …   9.12 mb)   6.13 mb ██████▇▇▁▄▁▄▁▁▁▁▄▄▁▁▄

gjs large (experiment)        12.73 ms/iter  13.91 ms ▆█ ▃                 
                       (6.96 ms … 36.82 ms)  33.17 ms ██▅█                 
                    (  2.51 mb …  14.36 mb)   5.81 mb ████▆█▆▆▁▆▁▁▃▁▁▃▃▁▁▁▆

                             ┌                                            ┐
                             ╷  ┌──────┬┐                                 ╷
         gjs large (control) ├──┤      │├─────────────────────────────────┤
                             ╵  └──────┴┘                                 ╵
                             ╷┌───────┬─┐                             ╷
      gjs large (experiment) ├┤       │ ├─────────────────────────────┤
                             ╵└───────┴─┘                             ╵
                             └                                            ┘
                             6.96 ms           21.25 ms            35.55 ms

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

------------------------------------------- -------------------------------
hbs small (control)          173.84 µs/iter 103.11 µs █                    
                      (77.33 µs … 22.92 ms)   1.98 ms █                    
                    (  3.59 kb …   1.61 mb) 137.59 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       167.85 µs/iter 103.35 µs █                    
                      (76.06 µs … 21.10 ms)   2.34 ms █                    
                    ( 31.35 kb …   2.71 mb) 127.70 kb █▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                   ╷
         hbs small (control) │ │───────────────────────────────────┤
                             └─┴                                   ╵
                             ┌─┬                                          ╷
      hbs small (experiment) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             └                                            ┘
                             76.06 µs            1.21 ms            2.34 ms

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

------------------------------------------- -------------------------------
hbs medium (control)           2.51 ms/iter   2.17 ms █                    
                       (1.26 ms … 19.48 ms)  18.59 ms █                    
                    (374.09 kb …   3.59 mb)   1.95 mb █▅▃▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        2.64 ms/iter   2.20 ms █                    
                       (1.30 ms … 21.23 ms)  20.61 ms █                    
                    ( 33.11 kb …   3.85 mb)   1.82 mb █▆▂▄▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌──┬                                    ╷
        hbs medium (control) │  │────────────────────────────────────┤
                             └──┴                                    ╵
                             ┌──┬                                         ╷
     hbs medium (experiment) │  │─────────────────────────────────────────┤
                             └──┴                                         ╵
                             └                                            ┘
                             1.26 ms           10.93 ms            20.61 ms

summary
  hbs medium (control)
   1.05x faster than hbs medium (experiment)

------------------------------------------- -------------------------------
hbs large (control)           13.81 ms/iter  17.73 ms █                    
                       (7.82 ms … 28.63 ms)  27.34 ms █                    
                    (  6.65 mb …  11.18 mb)   9.13 mb ██▅█▅▅▅▁▃▅▅▃▁▅▃▃▁▅▃▃▃

hbs large (experiment)        13.89 ms/iter  17.00 ms █ ▅                  
                       (7.84 ms … 32.29 ms)  28.63 ms █▇█▂   ▂ ▂           
                    (  5.84 mb …  10.46 mb)   8.13 mb ████▄▇▄█▁█▄▁▁▇▁▄▁▇▄▁▄

                             ┌                                            ┐
                             ╷┌───────────┬───────┐                    ╷
         hbs large (control) ├┤           │       ├────────────────────┤
                             ╵└───────────┴───────┘                    ╵
                             ╷ ┌──────────┬──────┐                        ╷
      hbs large (experiment) ├─┤          │      ├────────────────────────┤
                             ╵ └──────────┴──────┘                        ╵
                             └                                            ┘
                             7.82 ms           18.22 ms            28.63 ms

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

@NullVoxPopuli
Copy link
Copy Markdown
Member

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.14 ms 1.89 ms -11.6%
🟢 gts medium 6.97 ms 6.43 ms -7.7%
🟢 gts large 17.78 ms 15.62 ms -12.1%
🟢 gjs small 1.51 ms 1.41 ms -6.3%
🟡 gjs medium 5.25 ms 5.07 ms -3.4%
🟢 gjs large 13.05 ms 11.75 ms -10.0%
🟡 hbs small 174.54 µs 171.67 µs -1.6%
🟡 hbs medium 2.49 ms 2.53 ms +1.3%
🟡 hbs large 13.45 ms 13.05 ms -3.0%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

Full mitata output
clk: ~3.37 GHz
cpu: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz
runtime: node 24.14.0 (x64-linux)

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.14 ms/iter   2.35 ms █                    
                       (1.12 ms … 18.75 ms)   6.89 ms ██▃                  
                    (  8.80 kb …   2.34 mb) 639.07 kb ████▅▄▃▂▃▄▃▃▃▂▁▁▁▁▁▁▁

gts small (experiment)         1.89 ms/iter   2.01 ms █                    
                       (1.06 ms … 18.42 ms)   5.32 ms █▇▃                  
                    ( 77.16 kb …   2.07 mb) 578.31 kb ████▆▅▃▂▁▂▂▃▂▂▂▃▂▁▁▁▂

                             ┌                                            ┐
                             ╷┌──────┬─┐                                  ╷
         gts small (control) ├┤      │ ├──────────────────────────────────┤
                             ╵└──────┴─┘                                  ╵
                             ╷┌────┬┐                         ╷
      gts small (experiment) ├┤    │├─────────────────────────┤
                             ╵└────┴┘                         ╵
                             └                                            ┘
                             1.06 ms            3.98 ms             6.89 ms

summary
  gts small (experiment)
   1.13x faster than gts small (control)
                    ( 41.83 kb …   2.01 mb) 552.37 kb ██▄▄▂▂▂▂▁▂▂▂▂▂▁▁▁▁▁▁▁

gjs small (experiment)         1.41 ms/iter   1.23 ms █▇                   
                     (842.72 µs … 16.59 ms)   4.68 ms ██                   
                    ( 42.29 kb …   7.80 mb) 527.51 kb ██▅▃▂▃▂▂▂▂▂▁▂▂▂▂▂▁▁▁▁

                             ┌                                            ┐
                             ╷┌────┬                                      ╷
         gjs small (control) ├┤    │──────────────────────────────────────┤
                             ╵└────┴                                      ╵
                             ╷┌───┬                            ╷
      gjs small (experiment) ├┤   │────────────────────────────┤
                             ╵└───┴                            ╵
                             └                                            ┘
                             842.72 µs           3.35 ms            5.85 ms

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

------------------------------------------- -------------------------------
gjs medium (control)           5.25 ms/iter   5.75 ms █                    
                       (3.00 ms … 30.55 ms)  16.29 ms █▇  ▃                
                    (307.78 kb …   4.44 mb)   2.24 mb ██▅███▂▂▂▄▂▂▁▁▁▁▁▁▁▁▂

gjs medium (experiment)        5.07 ms/iter   5.52 ms █                    
                       (3.04 ms … 28.55 ms)  22.26 ms ██ ▃                 
                    (443.05 kb …   3.70 mb)   2.06 mb ████▂▂▃▃▂▁▁▁▁▁▁▁▁▁▁▁▂

                             ┌                                            ┐
                             ╷┌───┬┐                        ╷
        gjs medium (control) ├┤   │├────────────────────────┤
                             ╵└───┴┘                        ╵
                             ╷┌───┬┐                                      ╷
     gjs medium (experiment) ├┤   │├──────────────────────────────────────┤
                             ╵└───┴┘                                      ╵
                             └                                            ┘
                             3.00 ms           12.63 ms            22.26 ms

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

------------------------------------------- -------------------------------
gjs large (control)           13.05 ms/iter  15.02 ms ██▂     ▂            
                       (6.75 ms … 38.18 ms)  33.03 ms ███▇▅   █            
                    (  3.13 mb …   8.72 mb)   6.21 mb █████▇▇▁█▄▁▁▁▁▄▁▁▁▁▇▄

gjs large (experiment)        11.75 ms/iter  10.85 ms  ▆█▂                 
                       (6.49 ms … 39.85 ms)  34.41 ms ▆███                 
                    (  4.15 mb …   6.93 mb)   5.53 mb ████▅▅▅▁▁▃▁▁▁▁▁▃▁▅▁▁▃

                             ┌                                            ┐
                             ╷  ┌───────┬──┐                            ╷
         gjs large (control) ├──┤       │  ├────────────────────────────┤
                             ╵  └───────┴──┘                            ╵
                             ╷ ┌─────┬                                    ╷
      gjs large (experiment) ├─┤     │────────────────────────────────────┤
                             ╵ └─────┴                                    ╵
                             └                                            ┘
                             6.49 ms           20.45 ms            34.41 ms

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

------------------------------------------- -------------------------------
hbs small (control)          174.54 µs/iter 106.27 µs █                    
                      (80.68 µs … 22.37 ms)   2.42 ms █                    
                    ( 29.56 kb …   2.63 mb) 138.07 kb █▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       171.67 µs/iter 102.63 µs █                    
                      (77.46 µs … 20.45 ms)   1.93 ms █                    
                    ( 44.71 kb …   2.09 mb) 127.99 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         hbs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                 ╷
      hbs small (experiment) │ │─────────────────────────────────┤
                             └─┴                                 ╵
                             └                                            ┘
                             77.46 µs            1.25 ms            2.42 ms

summary
  hbs small (experiment)
   1.02x faster than hbs small (control)

------------------------------------------- -------------------------------
hbs medium (control)           2.49 ms/iter   2.12 ms █                    
                       (1.27 ms … 18.92 ms)  18.52 ms █                    
                    (414.73 kb …   4.25 mb)   1.98 mb █▆▂▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        2.53 ms/iter   1.95 ms █                    
                       (1.27 ms … 20.41 ms)  19.62 ms █                    
                    (135.62 kb …   4.86 mb)   1.84 mb █▅▂▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌──┬                                      ╷
        hbs medium (control) │  │──────────────────────────────────────┤
                             └──┴                                      ╵
                             ┌──┬                                         ╷
     hbs medium (experiment) │  │─────────────────────────────────────────┤
                             └──┴                                         ╵
                             └                                            ┘
                             1.27 ms           10.44 ms            19.62 ms

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

------------------------------------------- -------------------------------
hbs large (control)           13.45 ms/iter  17.40 ms █                    
                       (7.90 ms … 29.71 ms)  29.65 ms █▅                   
                    (  6.70 mb …  10.82 mb)   9.05 mb ███▆▅▅▁▅▁▆▁▅▃▁▁█▁▁▁▃▃

hbs large (experiment)        13.05 ms/iter  16.29 ms █                    
                       (7.74 ms … 26.99 ms)  26.02 ms █▂                   
                    (  2.83 mb …  12.09 mb)   8.10 mb ██▄▂▅▅▁▂▄▂▁▁▁▂▅▄▁▁▂▄▄

                             ┌                                            ┐
                             ╷┌──────────┬───────┐                        ╷
         hbs large (control) ├┤          │       ├────────────────────────┤
                             ╵└──────────┴───────┘                        ╵
                             ┌──────────┬──────┐                   ╷
      hbs large (experiment) │          │      ├───────────────────┤
                             └──────────┴──────┘                   ╵
                             └                                            ┘
                             7.74 ms           18.70 ms            29.65 ms

summary
  hbs large (experiment)
   1.03x faster than hbs large (control)

…ntReferences)

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.20 ms 1.97 ms -10.5%
🟢 gts medium 7.19 ms 6.68 ms -7.1%
🟢 gts large 19.91 ms 17.02 ms -14.5%
🟢 gjs small 1.48 ms 1.36 ms -8.3%
🟢 gjs medium 6.25 ms 5.54 ms -11.3%
🟢 gjs large 13.96 ms 12.60 ms -9.7%
🟡 hbs small 211.24 µs 200.69 µs -5.0%
🟡 hbs medium 2.66 ms 2.61 ms -1.8%
🟢 hbs large 15.56 ms 13.48 ms -13.4%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

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

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.20 ms/iter   2.63 ms █▃                   
                       (1.09 ms … 10.43 ms)   7.36 ms ██▄                  
                    (  6.77 kb …   2.01 mb) 633.72 kb ████▆▄▅▂▄▄▅▅▁▂▁▁▁▁▁▁▁

gts small (experiment)         1.97 ms/iter   2.05 ms █                    
                       (1.04 ms … 19.91 ms)   6.73 ms ██▂                  
                    (126.32 kb …   1.65 mb) 585.11 kb ███▇▃▄▃▃▂▂▃▃▂▃▁▁▂▁▁▁▁

                             ┌                                            ┐
                             ╷┌──────┬──┐                                 ╷
         gts small (control) ├┤      │  ├─────────────────────────────────┤
                             ╵└──────┴──┘                                 ╵
                             ╷┌─────┬                                 ╷
      gts small (experiment) ├┤     │─────────────────────────────────┤
                             ╵└─────┴                                 ╵
                             └                                            ┘
                             1.04 ms            4.20 ms             7.36 ms

summary
  gts small (experiment)
   1.12x faster than gts small (control)
                    ( 58.70 kb …   6.83 mb) 569.25 kb ██▄▃▃▂▂▁▂▁▁▂▂▁▂▃▁▁▁▁▁

gjs small (experiment)         1.36 ms/iter   1.15 ms █▃                   
                     (798.85 µs … 18.81 ms)   5.03 ms ██                   
                    (103.49 kb …   6.61 mb) 508.68 kb ██▄▃▃▂▁▂▁▁▁▂▂▂▂▂▂▁▁▁▁

                             ┌                                            ┐
                             ╷┌─────┬                                     ╷
         gjs small (control) ├┤     │─────────────────────────────────────┤
                             ╵└─────┴                                     ╵
                             ╷┌────┬                                      ╷
      gjs small (experiment) ├┤    │──────────────────────────────────────┤
                             ╵└────┴                                      ╵
                             └                                            ┘
                             798.85 µs           2.91 ms            5.03 ms

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

------------------------------------------- -------------------------------
gjs medium (control)           6.25 ms/iter   7.23 ms ▆█                   
                       (3.15 ms … 30.26 ms)  26.87 ms ██▆ ▂                
                    ( 54.76 kb …  12.42 mb)   2.36 mb ███▅█▄▃▂▃▂▂▁▁▁▁▁▁▁▁▁▂

gjs medium (experiment)        5.54 ms/iter   5.93 ms █                    
                       (3.16 ms … 29.43 ms)  21.84 ms █▅▄                  
                    (106.95 kb …   4.08 mb)   2.07 mb ███▆▄▅▃▂▂▂▁▂▁▁▁▁▁▁▁▁▂

                             ┌                                            ┐
                             ╷┌────┬─┐                                    ╷
        gjs medium (control) ├┤    │ ├────────────────────────────────────┤
                             ╵└────┴─┘                                    ╵
                             ╷┌───┬                             ╷
     gjs medium (experiment) ├┤   │─────────────────────────────┤
                             ╵└───┴                             ╵
                             └                                            ┘
                             3.15 ms           15.01 ms            26.87 ms

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

------------------------------------------- -------------------------------
gjs large (control)           13.96 ms/iter  14.97 ms  █                   
                       (7.16 ms … 37.22 ms)  32.70 ms  █ █▆▃▃              
                    (  5.19 mb …   7.86 mb)   6.24 mb ███████▄▄▄▆▄▁▁▁▁▁▁▁▁█

gjs large (experiment)        12.60 ms/iter  12.42 ms ▂▂▂█                 
                       (7.08 ms … 36.37 ms)  34.62 ms ████                 
                    (  3.70 mb …   7.87 mb)   5.57 mb ████▇▅▇▁▁▁▁▁▃▃▁▃▁▁▃▁▃

                             ┌                                            ┐
                             ╷  ┌───────┬─┐                            ╷
         gjs large (control) ├──┤       │ ├────────────────────────────┤
                             ╵  └───────┴─┘                            ╵
                             ╷  ┌─────┬                                   ╷
      gjs large (experiment) ├──┤     │───────────────────────────────────┤
                             ╵  └─────┴                                   ╵
                             └                                            ┘
                             7.08 ms           20.85 ms            34.62 ms

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

------------------------------------------- -------------------------------
hbs small (control)          211.24 µs/iter 136.37 µs █                    
                      (93.61 µs … 22.96 ms)   2.64 ms █                    
                    (  3.49 kb …   1.97 mb) 139.08 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       200.69 µs/iter 138.42 µs █                    
                      (96.56 µs … 23.34 ms)   2.28 ms █                    
                    ( 14.77 kb …   3.30 mb) 128.74 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         hbs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                    ╷
      hbs small (experiment) │ │────────────────────────────────────┤
                             └─┴                                    ╵
                             └                                            ┘
                             93.61 µs            1.37 ms            2.64 ms

summary
  hbs small (experiment)
   1.05x faster than hbs small (control)

------------------------------------------- -------------------------------
hbs medium (control)           2.66 ms/iter   2.31 ms █                    
                       (1.35 ms … 19.62 ms)  19.04 ms █                    
                    (623.89 kb …   3.98 mb)   1.97 mb █▄▃▃▂▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        2.61 ms/iter   2.16 ms █                    
                       (1.40 ms … 21.64 ms)  19.98 ms █                    
                    ( 12.28 kb …   4.12 mb)   1.83 mb █▅▂▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌──┬                                       ╷
        hbs medium (control) │  │───────────────────────────────────────┤
                             └──┴                                       ╵
                             ┌──┬                                         ╷
     hbs medium (experiment) │  │─────────────────────────────────────────┤
                             └──┴                                         ╵
                             └                                            ┘
                             1.35 ms           10.66 ms            19.98 ms

summary
  hbs medium (experiment)
   1.02x faster than hbs medium (control)

------------------------------------------- -------------------------------
hbs large (control)           15.56 ms/iter  20.43 ms █ ▂                  
                       (8.25 ms … 33.26 ms)  31.13 ms █▂█▂           ▂     
                    (  5.96 mb …  13.62 mb)   9.03 mb ████▇▇▇▄▇▁▁▄▄▁▁█▇▄▁▄▄

hbs large (experiment)        13.48 ms/iter  16.73 ms █                    
                       (8.02 ms … 31.34 ms)  29.84 ms █▃                   
                    (  4.13 mb …  11.34 mb)   8.20 mb ██▄▂▄▁▄▂▄▄▁▁▂▄▂▁▁▅▁▁▂

                             ┌                                            ┐
                             ╷ ┌────────────┬────────┐                    ╷
         hbs large (control) ├─┤            │        ├────────────────────┤
                             ╵ └────────────┴────────┘                    ╵
                             ╷┌─────────┬─────┐                        ╷
      hbs large (experiment) ├┤         │     ├────────────────────────┤
                             ╵└─────────┴─────┘                        ╵
                             └                                            ┘
                             8.02 ms           19.58 ms            31.13 ms

summary
  hbs large (experiment)
   1.15x faster than hbs large (control)

NullVoxPopuli and others added 2 commits March 18, 2026 23:52
- JS path passes no parser to toTree (falsey = use ember-estree's oxc)
- scopeManager created after toTree returns via eslint-scope.analyze
- registerGlimmerScopes handles Glimmer scope registration for JS path
- TS path unchanged (parser callback + visitors for single-pass scoping)
- Remove oxc-parser from direct dependencies

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
eslint-scope's esrecurse traverses all enumerable properties,
which crashes on Glimmer nodes' getter chains. Use the fallback
option to return [] for Glimmer-prefixed types, skipping them
during JS scope analysis. Glimmer scopes are registered
separately via registerGlimmerScopes.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

NullVoxPopuli commented Mar 19, 2026

🏎️ Benchmark Comparison

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.15 ms 1.91 ms -11.2%
gts medium 6.90 ms 6.94 ms +0.6%
🟢 gts large 19.87 ms 17.52 ms -11.8%
🟢 gjs small 1.59 ms 1.48 ms -7.1%
🟢 gjs medium 5.96 ms 5.62 ms -5.7%
🟢 gjs large 14.23 ms 12.97 ms -8.9%
🟢 hbs small 217.69 µs 196.78 µs -9.6%
hbs medium 2.68 ms 2.68 ms -0.0%
🟢 hbs large 14.65 ms 12.48 ms -14.8%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

Full mitata output ``` clk: ~3.10 GHz cpu: AMD EPYC 7763 64-Core Processor runtime: node 24.14.0 (x64-linux) benchmark avg (min … max) p75 / p99 (min … top 1%) ------------------------------------------- ------------------------------- gts small (control) 2.15 ms/iter 2.44 ms █▃ (1.10 ms … 20.38 ms) 5.54 ms ██▇ ( 30.91 kb … 2.05 mb) 639.39 kb ████▇▆▇▄▂▂▄▄▂▃▇▂▂▁▂▂▂ gts small (experiment) 1.91 ms/iter 1.96 ms █ (1.04 ms … 22.10 ms) 7.23 ms ██▄ ( 34.99 kb … 1.74 mb) 575.53 kb ████▄▃▃▂▂▃▂▂▁▂▁▁▁▁▁▁▁ ┌ ┐ ╷┌──────┬─┐ ╷ gts small (control) ├┤ │ ├──────────────────────┤ ╵└──────┴─┘ ╵ ╷┌────┬┐ ╷ gts small (experiment) ├┤ │├─────────────────────────────────────┤ ╵└────┴┘ ╵ └ ┘ 1.04 ms 4.14 ms 7.23 ms summary gts small (experiment) 1.13x faster than gts small (control) ------------------------------------------- ------------------------------- gts medium (control) 6.90 ms/iter 7.56 ms ▂██ (3.73 ms … 28.50 ms) 28.37 ms ███▂ (889.77 kb … 8.57 mb) 2.61 mb ████▇▄▄▄▃▁▁▁▁▁▁▁▁▁▁▁▂ gts medium (experiment) 6.94 ms/iter 7.69 ms █ (3.68 ms … 28.19 ms) 23.38 ms ▄█▇▄▂ (498.00 kb … 12.73 mb) 2.70 mb █████▇▆▅▂▁▂▂▂▁▁▁▁▁▁▁▂ ┌ ┐ ╷ ┌───┬┐ ╷ gts medium (control) ├─┤ │├─────────────────────────────────────┤ ╵ └───┴┘ ╵ ╷ ┌───┬┐ ╷ gts medium (experiment) ├─┤ │├────────────────────────────┤ ╵ └───┴┘ ╵ └ ┘ 3.68 ms 16.02 ms 28.37 ms summary gts medium (control) 1.01x faster than gts medium (experiment) ------------------------------------------- ------------------------------- gts large (control) 19.87 ms/iter 21.85 ms █ █ (10.95 ms … 40.77 ms) 40.64 ms ▇▇▂ █ █▇▇ ▂ ( 4.80 mb … 18.11 mb) 7.28 mb ███▆█▆███▁▁█▁▁▁▁▆▁▁▁▆ gts large (experiment) 17.52 ms/iter 18.73 ms ▄ █ (10.52 ms … 39.32 ms) 38.52 ms █▅██ █▅ ( 4.37 mb … 17.11 mb) 6.69 mb ████▅██▅▅▅▅▅▁▁▅▁▁▁▁▁▅ ┌ ┐ ╷ ┌────────┬──┐ ╷ gts large (control) ├───┤ │ ├───────────────────────────┤ ╵ └────────┴──┘ ╵ ╷ ┌──────┬─┐ ╷ gts large (experiment) ├──┤ │ ├─────────────────────────────┤ ╵ └──────┴─┘ ╵ └ ┘ 10.52 ms 25.58 ms 40.64 ms summary gts large (experiment) 1.13x faster than gts large (control) ------------------------------------------- ------------------------------- gjs small (control) 1.59 ms/iter 1.48 ms █▆ (864.10 µs … 20.12 ms) 5.30 ms ██ ( 70.60 kb … 7.52 mb) 579.66 kb ██▅▆▃▂▂▂▂▁▂▂▃▂▃▁▁▁▁▁▁ gjs small (experiment) 1.48 ms/iter 1.24 ms █ (842.35 µs … 19.56 ms) 6.09 ms █▄ ( 21.48 kb … 5.94 mb) 521.53 kb ██▄▂▂▂▂▂▂▂▂▂▂▁▁▁▁▁▁▁▁ ┌ ┐ ╷┌────┬ ╷ gjs small (control) ├┤ │───────────────────────────────┤ ╵└────┴ ╵ ┌────┬ ╷ gjs small (experiment) │ │───────────────────────────────────────┤ └────┴ ╵ └ ┘ 842.35 µs 3.47 ms 6.09 ms summary gjs small (experiment) 1.08x faster than gjs small (control) ------------------------------------------- ------------------------------- gjs medium (control) 5.96 ms/iter 6.11 ms ▆█ (3.26 ms … 32.34 ms) 23.35 ms ██▇ (730.70 kb … 8.71 mb) 2.35 mb ███▆▃▆▄▅▁▂▂▁▁▁▁▁▁▁▁▁▂ gjs medium (experiment) 5.62 ms/iter 5.95 ms █▅ (3.12 ms … 31.28 ms) 25.51 ms ██▅▂ (577.51 kb … 4.53 mb) 2.07 mb ████▄▅▄▂▁▁▁▁▁▁▁▁▁▁▁▁▂ ┌ ┐ ╷┌────┬ ╷ gjs medium (control) ├┤ │──────────────────────────────────┤ ╵└────┴ ╵ ╷┌───┬┐ ╷ gjs medium (experiment) ├┤ │├──────────────────────────────────────┤ ╵└───┴┘ ╵ └ ┘ 3.12 ms 14.32 ms 25.51 ms summary gjs medium (experiment) 1.06x faster than gjs medium (control) ------------------------------------------- ------------------------------- gjs large (control) 14.23 ms/iter 15.49 ms ▅ ▂█ (7.46 ms … 38.68 ms) 35.89 ms ▇█▅██ ▂▂ ( 4.69 mb … 7.63 mb) 6.17 mb █████▇██▇▁▁▁▁▁▁▁▁▄▁▄▄ gjs large (experiment) 12.97 ms/iter 12.65 ms █▂ (7.65 ms … 39.43 ms) 39.04 ms ▆██▅ ( 4.43 mb … 15.57 mb) 5.86 mb █████▅▁▃▃▃▁▁▁▁▁▁▁▃▁▁▃ ┌ ┐ ╷ ┌───────┬┐ ╷ gjs large (control) ├─┤ │├─────────────────────────────┤ ╵ └───────┴┘ ╵ ╷ ┌─────┬ ╷ gjs large (experiment) ├─┤ │────────────────────────────────────┤ ╵ └─────┴ ╵ └ ┘ 7.46 ms 23.25 ms 39.04 ms summary gjs large (experiment) 1.1x faster than gjs large (control) ------------------------------------------- ------------------------------- hbs small (control) 217.69 µs/iter 136.44 µs █ (96.15 µs … 23.11 ms) 2.90 ms █ ( 3.81 kb … 2.58 mb) 139.50 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ hbs small (experiment) 196.78 µs/iter 134.12 µs █ (93.58 µs … 22.22 ms) 2.11 ms █ ( 21.20 kb … 2.87 mb) 128.57 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ┌ ┐ ┌─┬ ╷ hbs small (control) │ │──────────────────────────────────────────┤ └─┴ ╵ ┌─┬ ╷ hbs small (experiment) │ │─────────────────────────────┤ └─┴ ╵ └ ┘ 93.58 µs 1.49 ms 2.90 ms summary hbs small (experiment) 1.11x faster than hbs small (control) ------------------------------------------- ------------------------------- hbs medium (control) 2.68 ms/iter 2.16 ms █ (1.37 ms … 20.39 ms) 19.14 ms █ (374.17 kb … 4.58 mb) 1.97 mb █▅▃▂▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ hbs medium (experiment) 2.68 ms/iter 2.16 ms █ (1.46 ms … 20.70 ms) 19.81 ms █ ( 87.51 kb … 3.96 mb) 1.82 mb █▅▂▃▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ ┌ ┐ ┌──┬ ╷ hbs medium (control) │ │───────────────────────────────────────┤ └──┴ ╵ ┌──┬ ╷ hbs medium (experiment) │ │─────────────────────────────────────────┤ └──┴ ╵ └ ┘ 1.37 ms 10.59 ms 19.81 ms summary hbs medium (experiment) 1x faster than hbs medium (control) ------------------------------------------- ------------------------------- hbs large (control) 14.65 ms/iter 20.03 ms █ ▂ (8.17 ms … 29.76 ms) 27.97 ms █▇█▅ ▂ ▂ ▂ ( 7.23 mb … 10.73 mb) 9.07 mb ████▄▇▄▄▁▄▄▁▇█▁▁▁▁█▁█ hbs large (experiment) 12.48 ms/iter 13.05 ms █ (7.99 ms … 29.70 ms) 27.42 ms █▅ ( 6.47 mb … 9.83 mb) 8.14 mb ██▅▄▇▅▁▄▁▁▂▄▁▂▁▂▁▁▄▂▂ ┌ ┐ ╷ ┌────────────┬───────────┐ ╷ hbs large (control) ├─┤ │ ├─────────────────┤ ╵ └────────────┴───────────┘ ╵ ┌─────────┬┐ ╷ hbs large (experiment) │ │├────────────────────────────────┤ └─────────┴┘ ╵ └ ┘ 7.99 ms 17.98 ms 27.97 ms summary hbs large (experiment) 1.17x faster than hbs large (control) ```

NullVoxPopuli and others added 4 commits March 19, 2026 08:29
ember-estree now produces plain objects for all Glimmer nodes, so
eslint-scope's esrecurse can traverse them safely. Remove the
fallback workaround that skipped Glimmer nodes during scope analysis.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Use templateNode.loc.end for Program end position instead of
creating a duplicate DocumentLines. Only create it for error
formatting (rare path).

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
Replace git reference with published npm version.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
JS path now also passes a parser callback (oxc + eslint-scope) so
scopeManager is available when toTree invokes visitors during splice.
Eliminates the separate registerGlimmerScopes traversal.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.20 ms 1.98 ms -9.6%
🟡 gts medium 7.35 ms 7.58 ms +3.2%
🟢 gts large 19.89 ms 18.52 ms -6.9%
🟡 gjs small 1.62 ms 1.59 ms -1.9%
🟡 gjs medium 6.33 ms 6.12 ms -3.3%
🟡 gjs large 14.70 ms 15.14 ms +3.0%
🔴 hbs small 211.00 µs 221.81 µs +5.1%
🟢 hbs medium 2.95 ms 2.61 ms -11.5%
🟢 hbs large 15.56 ms 13.83 ms -11.1%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

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

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.20 ms/iter   2.51 ms █                    
                       (1.12 ms … 11.31 ms)   6.53 ms █▇▇▂                 
                    ( 51.95 kb …   1.82 mb) 628.49 kb █████▅▃▃▂▃▃▄▅▂▂▁▁▂▁▁▁

gts small (experiment)         1.98 ms/iter   2.03 ms █▃                   
                       (1.06 ms … 20.10 ms)   7.45 ms ██▄                  
                    (139.30 kb …   1.45 mb) 572.26 kb ███▆▆▂▂▂▃▃▃▂▂▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ╷┌──────┬─┐                            ╷
         gts small (control) ├┤      │ ├────────────────────────────┤
                             ╵└──────┴─┘                            ╵
                             ╷┌─────┬                                     ╷
      gts small (experiment) ├┤     │─────────────────────────────────────┤
                             ╵└─────┴                                     ╵
                             └                                            ┘
                             1.06 ms            4.25 ms             7.45 ms

summary
  gts small (experiment)
   1.11x faster than gts small (control)
                    (  3.09 mb …   8.32 mb)   5.62 mb █████▄█▄▁▁▁▄▄▁▁▁▄▁▁▄▄

                             ┌                                            ┐
                             ╷  ┌──────┬────┐                    ╷
         gjs large (control) ├──┤      │    ├────────────────────┤
                             ╵  └──────┴────┘                    ╵
                             ╷  ┌───────┬─┐                               ╷
      gjs large (experiment) ├──┤       │ ├───────────────────────────────┤
                             ╵  └───────┴─┘                               ╵
                             └                                            ┘
                             7.97 ms           23.10 ms            38.23 ms

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

------------------------------------------- -------------------------------
hbs small (control)          211.00 µs/iter 142.22 µs █                    
                     (102.02 µs … 24.18 ms)   2.61 ms █                    
                    (  5.61 kb …   1.69 mb) 139.03 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       221.81 µs/iter 154.14 µs █                    
                      (97.11 µs … 23.82 ms)   2.70 ms █                    
                    ( 17.84 kb …   2.59 mb) 131.70 kb █▆▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                        ╷
         hbs small (control) │ │────────────────────────────────────────┤
                             └─┴                                        ╵
                             ┌─┬                                          ╷
      hbs small (experiment) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             └                                            ┘
                             97.11 µs            1.40 ms            2.70 ms

summary
  hbs small (control)
   1.05x faster than hbs small (experiment)

------------------------------------------- -------------------------------
hbs medium (control)           2.95 ms/iter   2.78 ms █                    
                       (1.37 ms … 23.05 ms)  20.80 ms █                    
                    (238.48 kb …   4.02 mb)   1.98 mb █▄▃▃▃▂▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        2.61 ms/iter   2.14 ms █                    
                       (1.40 ms … 21.66 ms)  21.21 ms █                    
                    (184.61 kb …   4.14 mb)   1.83 mb █▅▂▃▁▂▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌───┬                                       ╷
        hbs medium (control) │   │───────────────────────────────────────┤
                             └───┴                                       ╵
                             ┌──┬                                         ╷
     hbs medium (experiment) │  │─────────────────────────────────────────┤
                             └──┴                                         ╵
                             └                                            ┘
                             1.37 ms           11.29 ms            21.21 ms

summary
  hbs medium (experiment)
   1.13x faster than hbs medium (control)

------------------------------------------- -------------------------------
hbs large (control)           15.56 ms/iter  18.13 ms █                    
                       (8.40 ms … 32.92 ms)  30.34 ms █▇▅  ▂▂              
                    (  7.13 mb …  11.04 mb)   9.08 mb ███▄▇██▁▄▇▁▁▄▄▁▄▄▇▁▄▇

hbs large (experiment)        13.83 ms/iter  14.71 ms ▄█                   
                       (8.18 ms … 34.47 ms)  27.98 ms ██                   
                    (  5.21 mb …   9.93 mb)   8.18 mb ██▅▃▇▇▃▃▁▃▃▁▁▁▅▁▃▃▃▅▃

                             ┌                                            ┐
                             ╷ ┌────────────┬────┐                        ╷
         hbs large (control) ├─┤            │    ├────────────────────────┤
                             ╵ └────────────┴────┘                        ╵
                             ╷┌─────────┬─┐                          ╷
      hbs large (experiment) ├┤         │ ├──────────────────────────┤
                             ╵└─────────┴─┘                          ╵
                             └                                            ┘
                             8.18 ms           19.26 ms            30.34 ms

summary
  hbs large (experiment)
   1.13x faster than hbs large (control)

NullVoxPopuli and others added 2 commits March 19, 2026 11:41
eslint-plugin-ember now handles GlimmerBlockParam nodeType natively.

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
@NullVoxPopuli
Copy link
Copy Markdown
Member

Benchmark Control (avg) Experiment (avg) Δ
🟢 gts small 2.13 ms 1.88 ms -11.6%
🟡 gts medium 6.98 ms 6.74 ms -3.5%
🟢 gts large 18.40 ms 16.31 ms -11.4%
🟢 gjs small 1.51 ms 1.38 ms -8.6%
🟡 gjs medium 5.47 ms 5.65 ms +3.3%
gjs large 12.44 ms 12.54 ms +0.8%
🟡 hbs small 210.91 µs 202.35 µs -4.1%
🟡 hbs medium 2.56 ms 2.62 ms +2.5%
🟡 hbs large 14.02 ms 13.76 ms -1.8%

🟢 faster · 🔴 slower · 🟡 within 5% · ⚪ within 1%

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

benchmark                   avg (min … max) p75 / p99    (min … top 1%)
------------------------------------------- -------------------------------
gts small (control)            2.13 ms/iter   2.39 ms ██                   
                       (1.08 ms … 18.62 ms)   6.28 ms ██▅▄                 
                    ( 30.27 kb …   2.69 mb) 636.81 kb ████▇▅▄▂▃▅▃▃▅▄▂▂▂▁▁▁▁

gts small (experiment)         1.88 ms/iter   1.99 ms █                    
                       (1.01 ms … 17.68 ms)   5.60 ms ██▃                  
                    (160.27 kb …   2.38 mb) 589.10 kb ███▆▄▃▄▂▂▂▂▃▂▃▂▁▁▂▁▁▁

                             ┌                                            ┐
                              ╷┌───────┬─┐                                ╷
         gts small (control)  ├┤       │ ├────────────────────────────────┤
                              ╵└───────┴─┘                                ╵
                             ╷┌─────┬┐                              ╷
      gts small (experiment) ├┤     │├──────────────────────────────┤
                             ╵└─────┴┘                              ╵
                             └                                            ┘
                             1.01 ms            3.64 ms             6.28 ms

summary
  gts small (experiment)
   1.13x faster than gts small (control)
                    (  2.30 mb …  15.26 mb)   5.84 mb ██▇████▅▃▃▁▁▃▁▁▁▅▁▁▃▃

                             ┌                                            ┐
                             ╷ ┌───────┬──┐                               ╷
         gjs large (control) ├─┤       │  ├───────────────────────────────┤
                             ╵ └───────┴──┘                               ╵
                             ╷  ┌───────┬──┐                            ╷
      gjs large (experiment) ├──┤       │  ├────────────────────────────┤
                             ╵  └───────┴──┘                            ╵
                             └                                            ┘
                             6.90 ms           18.78 ms            30.65 ms

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

------------------------------------------- -------------------------------
hbs small (control)          210.91 µs/iter 138.15 µs █                    
                     (100.77 µs … 21.17 ms)   2.60 ms █                    
                    ( 27.55 kb …   1.68 mb) 139.33 kb █▄▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs small (experiment)       202.35 µs/iter 135.95 µs █                    
                      (95.28 µs … 21.57 ms)   2.36 ms █                    
                    (168.00  b …   2.25 mb) 129.94 kb █▅▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌─┬                                          ╷
         hbs small (control) │ │──────────────────────────────────────────┤
                             └─┴                                          ╵
                             ┌─┬                                      ╷
      hbs small (experiment) │ │──────────────────────────────────────┤
                             └─┴                                      ╵
                             └                                            ┘
                             95.28 µs            1.35 ms            2.60 ms

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

------------------------------------------- -------------------------------
hbs medium (control)           2.56 ms/iter   2.07 ms █                    
                       (1.30 ms … 20.04 ms)  17.43 ms █                    
                    (630.84 kb …   3.43 mb)   1.95 mb █▆▃▂▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

hbs medium (experiment)        2.62 ms/iter   2.27 ms █                    
                       (1.41 ms … 21.83 ms)  17.80 ms █                    
                    (269.52 kb …   5.00 mb)   1.85 mb █▆▃▃▃▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁

                             ┌                                            ┐
                             ┌──┬                                        ╷
        hbs medium (control) │  │────────────────────────────────────────┤
                             └──┴                                        ╵
                             ┌───┬                                        ╷
     hbs medium (experiment) │   │────────────────────────────────────────┤
                             └───┴                                        ╵
                             └                                            ┘
                             1.30 ms            9.55 ms            17.80 ms

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

------------------------------------------- -------------------------------
hbs large (control)           14.02 ms/iter  15.96 ms █▂                   
                       (8.52 ms … 32.42 ms)  28.86 ms ██                   
                    (  8.05 mb …  10.14 mb)   9.11 mb ████▅▃▃▅▁▃▁▁▁▅▁▇▅▁▃▁▃

hbs large (experiment)        13.76 ms/iter  17.54 ms █                    
                       (8.39 ms … 32.69 ms)  27.84 ms █▄                   
                    (  4.77 mb …  10.64 mb)   8.19 mb ██▃▁▇▁▇▃▁▄▄▁▁▃▄▃▃▄▁▁▃

                             ┌                                            ┐
                             ╷┌──────────┬────┐                           ╷
         hbs large (control) ├┤          │    ├───────────────────────────┤
                             ╵└──────────┴────┘                           ╵
                             ╷┌──────────┬───────┐                      ╷
      hbs large (experiment) ├┤          │       ├──────────────────────┤
                             ╵└──────────┴───────┘                      ╵
                             └                                            ┘
                             8.39 ms           18.63 ms            28.86 ms

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

@NullVoxPopuli NullVoxPopuli added the enhancement New feature or request label Mar 19, 2026
@NullVoxPopuli NullVoxPopuli merged commit 4d5b1e9 into ember-tooling:main Mar 19, 2026
36 checks passed
@github-actions github-actions Bot mentioned this pull request Mar 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants