Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(53736): Switch statement over a union of literals is not exhaustive when checking against enum members #53751

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

a-tarasyuk
Copy link
Contributor

Fixes #53736

@typescript-bot typescript-bot added the For Backlog Bug PRs that fix a backlog bug label Apr 12, 2023
@sandersn sandersn added this to Not started in PR Backlog Apr 25, 2023
@sandersn sandersn moved this from Not started to Waiting on reviewers in PR Backlog Apr 25, 2023
@sandersn
Copy link
Member

@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented Apr 25, 2023

Heya @sandersn, I've started to run the perf test suite on this PR at 5c3104f. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

@sandersn
The results of the perf run you requested are in!

Here they are:

Compiler

Comparison Report - main..53751
Metric main 53751 Delta Best Worst p-value
Angular - node (v18.10.0, x64)
Memory used 365,783k (± 0.01%) 365,794k (± 0.01%) ~ 365,763k 365,829k p=0.378 n=6
Parse Time 3.38s (± 0.64%) 3.40s (± 0.71%) ~ 3.39s 3.45s p=0.081 n=6
Bind Time 1.11s (± 1.23%) 1.11s (± 0.73%) ~ 1.10s 1.12s p=0.383 n=6
Check Time 8.74s (± 0.34%) 8.74s (± 0.49%) ~ 8.68s 8.81s p=0.746 n=6
Emit Time 7.42s (± 0.62%) 7.41s (± 0.30%) ~ 7.38s 7.44s p=0.806 n=6
Total Time 20.64s (± 0.39%) 20.66s (± 0.30%) ~ 20.61s 20.78s p=0.810 n=6
Compiler-Unions - node (v18.10.0, x64)
Memory used 193,778k (± 1.59%) 191,900k (± 1.19%) ~ 190,862k 196,568k p=0.810 n=6
Parse Time 1.49s (± 0.56%) 1.50s (± 1.07%) ~ 1.48s 1.52s p=0.065 n=6
Bind Time 0.77s (± 0.53%) 0.78s (± 0.71%) ~ 0.77s 0.78s p=0.054 n=6
Check Time 9.57s (± 0.56%) 9.59s (± 0.44%) ~ 9.55s 9.64s p=0.329 n=6
Emit Time 2.75s (± 0.73%) 2.77s (± 1.11%) ~ 2.72s 2.80s p=0.373 n=6
Total Time 14.56s (± 0.42%) 14.63s (± 0.47%) ~ 14.54s 14.73s p=0.173 n=6
Monaco - node (v18.10.0, x64)
Memory used 346,510k (± 0.01%) 346,501k (± 0.01%) ~ 346,458k 346,559k p=1.000 n=6
Parse Time 2.57s (± 0.80%) 2.60s (± 0.67%) +0.03s (+ 1.17%) 2.58s 2.63s p=0.027 n=6
Bind Time 1.00s (± 0.75%) 1.01s (± 0.88%) ~ 1.00s 1.02s p=0.149 n=6
Check Time 7.13s (± 0.17%) 7.23s (± 0.44%) +0.09s (+ 1.31%) 7.20s 7.27s p=0.004 n=6
Emit Time 4.23s (± 0.35%) 4.25s (± 0.89%) ~ 4.20s 4.30s p=0.683 n=6
Total Time 14.94s (± 0.17%) 15.09s (± 0.39%) +0.14s (+ 0.96%) 15.01s 15.15s p=0.005 n=6
TFS - node (v18.10.0, x64)
Memory used 300,697k (± 0.01%) 300,729k (± 0.01%) ~ 300,703k 300,756k p=0.054 n=6
Parse Time 2.05s (± 1.23%) 2.07s (± 1.04%) ~ 2.04s 2.10s p=0.293 n=6
Bind Time 1.14s (± 0.36%) 1.14s (± 0.71%) ~ 1.13s 1.15s p=0.206 n=6
Check Time 6.59s (± 0.45%) 6.63s (± 0.40%) +0.05s (+ 0.71%) 6.59s 6.66s p=0.036 n=6
Emit Time 3.88s (± 0.78%) 3.93s (± 1.09%) ~ 3.88s 4.01s p=0.060 n=6
Total Time 13.66s (± 0.27%) 13.77s (± 0.65%) +0.12s (+ 0.84%) 13.64s 13.92s p=0.019 n=6
material-ui - node (v18.10.0, x64)
Memory used 482,345k (± 0.02%) 482,322k (± 0.01%) ~ 482,261k 482,417k p=0.810 n=6
Parse Time 3.10s (± 0.86%) 3.11s (± 0.26%) ~ 3.10s 3.12s p=0.061 n=6
Bind Time 0.91s (± 1.20%) 0.92s (± 0.44%) ~ 0.91s 0.92s p=0.100 n=6
Check Time 16.79s (± 0.45%) 16.86s (± 0.85%) ~ 16.78s 17.15s p=0.377 n=6
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) ~ 0.00s 0.00s p=1.000 n=6
Total Time 20.80s (± 0.45%) 20.89s (± 0.71%) ~ 20.80s 21.19s p=0.109 n=6
xstate - node (v18.10.0, x64)
Memory used 563,058k (± 0.02%) 562,968k (± 0.02%) ~ 562,839k 563,058k p=0.230 n=6
Parse Time 3.83s (± 0.69%) 3.84s (± 0.96%) ~ 3.79s 3.88s p=0.629 n=6
Bind Time 1.64s (± 1.00%) 1.64s (± 0.31%) ~ 1.64s 1.65s p=0.285 n=6
Check Time 2.81s (± 0.57%) 2.80s (± 0.54%) ~ 2.78s 2.82s p=1.000 n=6
Emit Time 0.08s (± 0.00%) 0.08s (± 0.00%) ~ 0.08s 0.08s p=1.000 n=6
Total Time 8.35s (± 0.49%) 8.36s (± 0.56%) ~ 8.32s 8.43s p=0.936 n=6
Angular - node (v16.17.1, x64)
Memory used 365,212k (± 0.01%) 365,202k (± 0.01%) ~ 365,171k 365,263k p=0.575 n=6
Parse Time 3.54s (± 0.40%) 3.53s (± 0.36%) ~ 3.51s 3.55s p=0.243 n=6
Bind Time 1.18s (± 0.44%) 1.18s (± 0.44%) ~ 1.17s 1.18s p=1.000 n=6
Check Time 9.53s (± 0.38%) 9.56s (± 0.56%) ~ 9.48s 9.62s p=0.376 n=6
Emit Time 7.91s (± 0.59%) 7.91s (± 0.40%) ~ 7.88s 7.96s p=1.000 n=6
Total Time 22.16s (± 0.37%) 22.18s (± 0.39%) ~ 22.07s 22.29s p=0.873 n=6
Compiler-Unions - node (v16.17.1, x64)
Memory used 192,664k (± 0.04%) 192,603k (± 0.05%) ~ 192,521k 192,766k p=0.199 n=6
Parse Time 1.58s (± 1.11%) 1.61s (± 0.51%) +0.02s (+ 1.37%) 1.60s 1.62s p=0.008 n=6
Bind Time 0.82s (± 0.92%) 0.83s (± 0.62%) ~ 0.82s 0.83s p=0.247 n=6
Check Time 10.26s (± 0.41%) 10.25s (± 0.83%) ~ 10.13s 10.34s p=0.810 n=6
Emit Time 3.01s (± 0.76%) 3.04s (± 1.12%) ~ 3.00s 3.09s p=0.106 n=6
Total Time 15.68s (± 0.23%) 15.73s (± 0.62%) ~ 15.61s 15.83s p=0.466 n=6
Monaco - node (v16.17.1, x64)
Memory used 345,776k (± 0.01%) 345,783k (± 0.01%) ~ 345,742k 345,805k p=0.521 n=6
Parse Time 2.71s (± 0.38%) 2.72s (± 0.28%) ~ 2.71s 2.73s p=0.530 n=6
Bind Time 1.09s (± 1.00%) 1.08s (± 0.50%) ~ 1.08s 1.09s p=0.476 n=6
Check Time 7.83s (± 0.38%) 7.86s (± 0.36%) ~ 7.83s 7.91s p=0.197 n=6
Emit Time 4.44s (± 0.47%) 4.45s (± 0.65%) ~ 4.40s 4.47s p=0.867 n=6
Total Time 16.08s (± 0.32%) 16.11s (± 0.33%) ~ 16.02s 16.18s p=0.335 n=6
TFS - node (v16.17.1, x64)
Memory used 300,059k (± 0.01%) 300,050k (± 0.01%) ~ 300,011k 300,112k p=0.810 n=6
Parse Time 2.16s (± 0.90%) 2.16s (± 0.68%) ~ 2.14s 2.18s p=0.870 n=6
Bind Time 1.24s (± 0.66%) 1.24s (± 0.66%) ~ 1.23s 1.25s p=1.000 n=6
Check Time 7.23s (± 0.15%) 7.24s (± 0.18%) ~ 7.23s 7.26s p=0.230 n=6
Emit Time 4.37s (± 1.17%) 4.38s (± 1.07%) ~ 4.32s 4.45s p=0.747 n=6
Total Time 15.00s (± 0.49%) 15.02s (± 0.44%) ~ 14.93s 15.10s p=0.936 n=6
material-ui - node (v16.17.1, x64)
Memory used 481,608k (± 0.00%) 481,568k (± 0.01%) ~ 481,502k 481,646k p=0.423 n=6
Parse Time 3.24s (± 0.36%) 3.24s (± 0.42%) ~ 3.22s 3.26s p=0.315 n=6
Bind Time 0.93s (± 0.00%) 0.94s (± 0.43%) +0.01s (+ 1.25%) 0.94s 0.95s p=0.002 n=6
Check Time 17.97s (± 1.10%) 17.84s (± 0.44%) ~ 17.69s 17.90s p=0.228 n=6
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) ~ 0.00s 0.00s p=1.000 n=6
Total Time 22.14s (± 0.89%) 22.03s (± 0.42%) ~ 21.85s 22.09s p=0.573 n=6
xstate - node (v16.17.1, x64)
Memory used 560,680k (± 0.03%) 560,605k (± 0.01%) ~ 560,511k 560,700k p=0.471 n=6
Parse Time 3.98s (± 0.41%) 4.00s (± 0.46%) ~ 3.98s 4.03s p=0.164 n=6
Bind Time 1.77s (± 0.46%) 1.78s (± 0.46%) ~ 1.76s 1.78s p=0.389 n=6
Check Time 3.05s (± 0.29%) 3.06s (± 0.48%) ~ 3.05s 3.09s p=0.149 n=6
Emit Time 0.09s (± 0.00%) 0.09s (± 0.00%) ~ 0.09s 0.09s p=1.000 n=6
Total Time 8.90s (± 0.20%) 8.94s (± 0.18%) +0.04s (+ 0.45%) 8.92s 8.96s p=0.015 n=6
Angular - node (v14.21.3, x64)
Memory used 359,209k (± 0.00%) 359,212k (± 0.01%) ~ 359,189k 359,245k p=0.687 n=6
Parse Time 3.67s (± 0.59%) 3.69s (± 0.82%) ~ 3.66s 3.74s p=0.332 n=6
Bind Time 1.21s (± 0.43%) 1.22s (± 0.33%) ~ 1.21s 1.22s p=0.112 n=6
Check Time 9.95s (± 0.51%) 9.99s (± 0.40%) ~ 9.93s 10.03s p=0.145 n=6
Emit Time 8.28s (± 0.61%) 8.29s (± 0.60%) ~ 8.25s 8.39s p=0.520 n=6
Total Time 23.10s (± 0.41%) 23.19s (± 0.25%) ~ 23.08s 23.23s p=0.147 n=6
Compiler-Unions - node (v14.21.3, x64)
Memory used 188,060k (± 0.02%) 188,060k (± 0.01%) ~ 188,028k 188,102k p=0.936 n=6
Parse Time 1.60s (± 0.56%) 1.61s (± 0.73%) ~ 1.60s 1.63s p=0.270 n=6
Bind Time 0.84s (± 0.65%) 0.86s (± 0.60%) +0.01s (+ 1.38%) 0.85s 0.86s p=0.013 n=6
Check Time 10.33s (± 0.52%) 10.40s (± 0.36%) +0.07s (+ 0.66%) 10.36s 10.47s p=0.036 n=6
Emit Time 3.17s (± 1.25%) 3.16s (± 0.76%) ~ 3.12s 3.18s p=0.935 n=6
Total Time 15.95s (± 0.49%) 16.03s (± 0.27%) +0.08s (+ 0.51%) 16.01s 16.12s p=0.016 n=6
Monaco - node (v14.21.3, x64)
Memory used 340,898k (± 0.01%) 340,880k (± 0.01%) ~ 340,856k 340,901k p=0.173 n=6
Parse Time 2.81s (± 0.61%) 2.80s (± 0.57%) ~ 2.78s 2.82s p=0.459 n=6
Bind Time 1.11s (± 0.74%) 1.12s (± 1.78%) ~ 1.11s 1.16s p=0.120 n=6
Check Time 8.18s (± 0.36%) 8.21s (± 0.49%) ~ 8.16s 8.27s p=0.145 n=6
Emit Time 4.69s (± 0.37%) 4.72s (± 0.48%) +0.03s (+ 0.68%) 4.68s 4.75s p=0.035 n=6
Total Time 16.79s (± 0.30%) 16.85s (± 0.16%) +0.07s (+ 0.39%) 16.81s 16.88s p=0.035 n=6
TFS - node (v14.21.3, x64)
Memory used 295,252k (± 0.00%) 295,248k (± 0.00%) ~ 295,242k 295,256k p=0.574 n=6
Parse Time 2.40s (± 0.49%) 2.39s (± 1.06%) ~ 2.35s 2.42s p=0.465 n=6
Bind Time 1.06s (± 0.49%) 1.07s (± 0.92%) ~ 1.06s 1.08s p=0.417 n=6
Check Time 7.52s (± 0.23%) 7.55s (± 0.20%) +0.02s (+ 0.29%) 7.52s 7.56s p=0.040 n=6
Emit Time 4.33s (± 0.90%) 4.34s (± 0.71%) ~ 4.29s 4.38s p=0.371 n=6
Total Time 15.31s (± 0.30%) 15.35s (± 0.16%) ~ 15.32s 15.38s p=0.197 n=6
material-ui - node (v14.21.3, x64)
Memory used 477,140k (± 0.01%) 477,157k (± 0.01%) ~ 477,121k 477,189k p=0.471 n=6
Parse Time 3.32s (± 0.41%) 3.33s (± 0.75%) ~ 3.30s 3.36s p=0.569 n=6
Bind Time 1.00s (± 0.75%) 1.01s (± 0.81%) ~ 0.99s 1.01s p=0.082 n=6
Check Time 18.73s (± 0.61%) 18.84s (± 0.60%) ~ 18.70s 18.98s p=0.078 n=6
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) ~ 0.00s 0.00s p=1.000 n=6
Total Time 23.04s (± 0.47%) 23.17s (± 0.48%) ~ 23.03s 23.34s p=0.066 n=6
xstate - node (v14.21.3, x64)
Memory used 549,557k (± 0.01%) 549,568k (± 0.00%) ~ 549,542k 549,602k p=0.422 n=6
Parse Time 4.25s (± 1.43%) 4.21s (± 0.84%) ~ 4.19s 4.28s p=0.406 n=6
Bind Time 1.60s (± 4.66%) 1.65s (± 2.02%) ~ 1.58s 1.67s p=0.287 n=6
Check Time 3.19s (± 0.46%) 3.21s (± 0.55%) ~ 3.18s 3.23s p=0.164 n=6
Emit Time 0.09s (± 5.53%) 0.09s (± 0.00%) ~ 0.09s 0.09s p=0.174 n=6
Total Time 9.13s (± 0.49%) 9.16s (± 0.44%) ~ 9.11s 9.23s p=0.464 n=6
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-135-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v18.10.0, x64)
  • node (v16.17.1, x64)
  • node (v14.21.3, x64)
Scenarios
  • Angular - node (v18.10.0, x64)
  • Angular - node (v16.17.1, x64)
  • Angular - node (v14.21.3, x64)
  • Compiler-Unions - node (v18.10.0, x64)
  • Compiler-Unions - node (v16.17.1, x64)
  • Compiler-Unions - node (v14.21.3, x64)
  • Monaco - node (v18.10.0, x64)
  • Monaco - node (v16.17.1, x64)
  • Monaco - node (v14.21.3, x64)
  • TFS - node (v18.10.0, x64)
  • TFS - node (v16.17.1, x64)
  • TFS - node (v14.21.3, x64)
  • material-ui - node (v18.10.0, x64)
  • material-ui - node (v16.17.1, x64)
  • material-ui - node (v14.21.3, x64)
  • xstate - node (v18.10.0, x64)
  • xstate - node (v16.17.1, x64)
  • xstate - node (v14.21.3, x64)
Benchmark Name Iterations
Current 53751 6
Baseline main 6

TSServer

Comparison Report - main..53751
Metric main 53751 Delta Best Worst p-value
Compiler-UnionsTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 2,527ms (± 0.46%) 2,543ms (± 0.70%) ~ 2,517ms 2,569ms p=0.066 n=6
Req 2 - geterr 5,666ms (± 0.30%) 5,695ms (± 0.28%) +29ms (+ 0.51%) 5,674ms 5,722ms p=0.031 n=6
Req 3 - references 342ms (± 0.44%) 343ms (± 0.49%) ~ 341ms 345ms p=0.219 n=6
Req 4 - navto 282ms (± 0.41%) 284ms (± 0.36%) +2ms (+ 0.65%) 283ms 285ms p=0.021 n=6
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) ~ 1,356 1,356 p=1.000 n=6
Req 5 - completionInfo 84ms (± 1.06%) 85ms (± 0.65%) ~ 84ms 85ms p=0.341 n=6
CompilerTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 2,641ms (± 0.66%) 2,653ms (± 1.38%) ~ 2,619ms 2,720ms p=0.748 n=6
Req 2 - geterr 4,291ms (± 0.50%) 4,280ms (± 1.76%) ~ 4,132ms 4,331ms p=0.423 n=6
Req 3 - references 350ms (± 1.12%) 351ms (± 0.98%) ~ 347ms 357ms p=0.421 n=6
Req 4 - navto 289ms (± 0.52%) 292ms (± 0.53%) +3ms (+ 1.15%) 290ms 294ms p=0.009 n=6
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) ~ 1,518 1,518 p=1.000 n=6
Req 5 - completionInfo 63ms (± 1.20%) 64ms (± 4.79%) ~ 62ms 70ms p=1.000 n=6
xstateTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 3,064ms (± 0.43%) 3,079ms (± 0.65%) ~ 3,060ms 3,103ms p=0.147 n=6
Req 2 - geterr 1,606ms (± 1.55%) 1,602ms (± 1.45%) ~ 1,569ms 1,640ms p=0.810 n=6
Req 3 - references 108ms (± 2.40%) 110ms (± 2.65%) ~ 106ms 113ms p=0.144 n=6
Req 4 - navto 362ms (± 0.23%) 363ms (± 0.30%) +1ms (+ 0.37%) 362ms 365ms p=0.045 n=6
Req 5 - completionInfo count 2,862 (± 0.00%) 2,862 (± 0.00%) ~ 2,862 2,862 p=1.000 n=6
Req 5 - completionInfo 377ms (± 2.10%) 377ms (± 1.75%) ~ 368ms 388ms p=1.000 n=6
Compiler-UnionsTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 2,662ms (± 0.29%) 2,677ms (± 0.56%) ~ 2,648ms 2,688ms p=0.065 n=6
Req 2 - geterr 6,130ms (± 0.50%) 6,177ms (± 0.72%) ~ 6,105ms 6,233ms p=0.093 n=6
Req 3 - references 353ms (± 1.20%) 353ms (± 0.64%) ~ 351ms 357ms p=0.561 n=6
Req 4 - navto 286ms (± 1.06%) 286ms (± 0.37%) ~ 284ms 287ms p=0.679 n=6
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) ~ 1,356 1,356 p=1.000 n=6
Req 5 - completionInfo 83ms (± 5.55%) 83ms (± 4.97%) ~ 80ms 91ms p=0.858 n=6
CompilerTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 2,820ms (± 0.63%) 2,819ms (± 0.71%) ~ 2,787ms 2,838ms p=0.936 n=6
Req 2 - geterr 4,691ms (± 0.56%) 4,657ms (± 0.31%) -34ms (- 0.72%) 4,639ms 4,672ms p=0.020 n=6
Req 3 - references 363ms (± 0.45%) 364ms (± 0.45%) ~ 361ms 366ms p=0.737 n=6
Req 4 - navto 285ms (± 1.03%) 287ms (± 0.61%) ~ 284ms 289ms p=0.069 n=6
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) ~ 1,518 1,518 p=1.000 n=6
Req 5 - completionInfo 67ms (± 0.61%) 68ms (± 2.77%) ~ 66ms 71ms p=0.858 n=6
xstateTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 3,212ms (± 0.36%) 3,223ms (± 0.19%) ~ 3,217ms 3,231ms p=0.065 n=6
Req 2 - geterr 1,749ms (± 0.45%) 1,764ms (± 1.00%) ~ 1,746ms 1,786ms p=0.173 n=6
Req 3 - references 126ms (± 7.24%) 127ms (± 6.87%) ~ 120ms 144ms p=1.000 n=6
Req 4 - navto 343ms (± 1.10%) 343ms (± 0.91%) ~ 341ms 349ms p=0.936 n=6
Req 5 - completionInfo count 2,862 (± 0.00%) 2,862 (± 0.00%) ~ 2,862 2,862 p=1.000 n=6
Req 5 - completionInfo 397ms (± 1.75%) 401ms (± 0.62%) ~ 398ms 405ms p=0.376 n=6
Compiler-UnionsTSServer - node (v14.21.3, x64)
Req 1 - updateOpen 2,765ms (± 0.31%) 2,796ms (± 0.18%) +31ms (+ 1.12%) 2,792ms 2,805ms p=0.005 n=6
Req 2 - geterr 6,337ms (± 1.10%) 6,303ms (± 0.72%) ~ 6,229ms 6,342ms p=0.521 n=6
Req 3 - references 366ms (± 0.51%) 367ms (± 0.57%) ~ 363ms 368ms p=0.802 n=6
Req 4 - navto 289ms (± 0.38%) 291ms (± 0.47%) +2ms (+ 0.81%) 289ms 293ms p=0.018 n=6
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) ~ 1,356 1,356 p=1.000 n=6
Req 5 - completionInfo 102ms (± 2.40%) 102ms (± 3.94%) ~ 94ms 104ms p=0.549 n=6
CompilerTSServer - node (v14.21.3, x64)
Req 1 - updateOpen 2,957ms (± 0.44%) 2,965ms (± 1.21%) ~ 2,900ms 2,999ms p=0.229 n=6
Req 2 - geterr 4,534ms (± 0.40%) 4,542ms (± 0.70%) ~ 4,489ms 4,572ms p=0.378 n=6
Req 3 - references 375ms (± 0.72%) 376ms (± 0.39%) ~ 373ms 377ms p=0.222 n=6
Req 4 - navto 296ms (± 0.69%) 296ms (± 0.97%) ~ 293ms 300ms p=0.935 n=6
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) ~ 1,518 1,518 p=1.000 n=6
Req 5 - completionInfo 77ms (± 1.58%) 76ms (± 2.27%) ~ 74ms 78ms p=0.318 n=6
xstateTSServer - node (v14.21.3, x64)
Req 1 - updateOpen 3,459ms (± 0.93%) 3,511ms (± 1.22%) +52ms (+ 1.51%) 3,442ms 3,561ms p=0.045 n=6
Req 2 - geterr 1,878ms (± 0.95%) 1,883ms (± 0.83%) ~ 1,854ms 1,902ms p=0.575 n=6
Req 3 - references 138ms (± 5.92%) 148ms (± 7.79%) +10ms (+ 7.00%) 137ms 159ms p=0.041 n=6
Req 4 - navto 400ms (± 1.21%) 401ms (± 1.86%) ~ 393ms 412ms p=0.807 n=6
Req 5 - completionInfo count 2,862 (± 0.00%) 2,862 (± 0.00%) ~ 2,862 2,862 p=1.000 n=6
Req 5 - completionInfo 426ms (± 1.70%) 436ms (± 0.89%) +9ms (+ 2.19%) 431ms 440ms p=0.023 n=6
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-135-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v18.10.0, x64)
  • node (v16.17.1, x64)
  • node (v14.21.3, x64)
Scenarios
  • Compiler-UnionsTSServer - node (v18.10.0, x64)
  • Compiler-UnionsTSServer - node (v16.17.1, x64)
  • Compiler-UnionsTSServer - node (v14.21.3, x64)
  • CompilerTSServer - node (v18.10.0, x64)
  • CompilerTSServer - node (v16.17.1, x64)
  • CompilerTSServer - node (v14.21.3, x64)
  • xstateTSServer - node (v18.10.0, x64)
  • xstateTSServer - node (v16.17.1, x64)
  • xstateTSServer - node (v14.21.3, x64)
Benchmark Name Iterations
Current 53751 6
Baseline main 6

Startup

Comparison Report - main..53751
Metric main 53751 Delta Best Worst p-value
tsc-startup - node (v16.17.1, x64)
Execution time 141.79ms (± 0.21%) 142.73ms (± 0.23%) +0.94ms (+ 0.66%) 141.51ms 147.95ms p=0.000 n=600
tsserver-startup - node (v16.17.1, x64)
Execution time 220.24ms (± 0.19%) 225.45ms (± 0.51%) +5.21ms (+ 2.37%) 221.02ms 233.10ms p=0.000 n=600
tsserverlibrary-startup - node (v16.17.1, x64)
Execution time 221.89ms (± 0.18%) 223.84ms (± 0.33%) +1.95ms (+ 0.88%) 221.91ms 232.99ms p=0.000 n=600
typescript-startup - node (v16.17.1, x64)
Execution time 203.81ms (± 0.20%) 205.50ms (± 0.30%) +1.70ms (+ 0.83%) 203.66ms 211.85ms p=0.000 n=600
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-135-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v16.17.1, x64)
Scenarios
  • tsc-startup - node (v16.17.1, x64)
  • tsserver-startup - node (v16.17.1, x64)
  • tsserverlibrary-startup - node (v16.17.1, x64)
  • typescript-startup - node (v16.17.1, x64)
Benchmark Name Iterations
Current 53751 6
Baseline main 6

Developer Information:

Download Benchmark

@@ -26021,7 +26021,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
}

function eachTypeContainedIn(source: Type, types: Type[]) {
return source.flags & TypeFlags.Union ? !forEach((source as UnionType).types, t => !contains(types, t)) : contains(types, source);
const equalityComparer = (sourceType: Type, targetType: Type) =>
sourceType === targetType || !!(sourceType.flags & TypeFlags.Literal && targetType.flags & TypeFlags.Literal && (sourceType as LiteralType).value === (targetType as LiteralType).value);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not a total expert, but my gut tells that this isn't the right place to do this, given this is presumably a hot function that previously did something very simple (check if one type is in another by reference only), but now also encodes some niche literal equality behavior.

I feel like I would need to debug and see who's calling this to understand why this is the function to change and not something else...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, this isn't the function I was thinking of; it's named generically but is only used once in switch case checking. Maybe it hasn't always been that way?

Doing some sleuthing, and this was introduced in #9163 and all references but one were removed in #9407 (280b27e), then never touched again. So, it has been this way for a very long time, it seems.

Not sure what that means for this, but I still somewhat feel like this isn't quite the right place. Maybe the caller's mapType would be better off mapping things differently? Unsure.

@ahejlsberg probably knows better or maybe @weswigham

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd maybe rename eachTypeContainedIn to reflect its' specialized equality comparison (or pass the specialized equality comparison in at the callsite), just for clarity of purpose. But it definitely makes sense for switch narrowing to check the runtime representation of the types for equality and not consider the nominal branding for its narrowing, so.... yeah.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The thing I wonder is that the linked PRs showed code that used this function and then switched away to another method of checking things, which makes me feel like there's some other more-robust-and-consistent way that this would be done if it were reimplemented today, e.g. without this simple exact equality check.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the LiteralType be handled differently for the enums? I'm just trying to figure out in which direction to investigate this issue...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Handled where?

I think the thing I was hoping was that this function could be dropped entirely in place of some relation + getUnionType(switchTypes) calls in computeExhaustiveSwitchStatement, but I'm having trouble getting it to work by flailing around.

Mainly, I'm just trying to figure out if there's existing code which can already do this narrowing e.g. used by plain ol if statements or something.

@jakebailey jakebailey moved this from Waiting on reviewers to Waiting on author in PR Backlog Aug 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
For Backlog Bug PRs that fix a backlog bug
Projects
Status: Waiting on author
PR Backlog
  
Waiting on author
Development

Successfully merging this pull request may close these issues.

Switch statement over a union of literals is not exhaustive when checking against enum members
5 participants