Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Improve comparison operators type checking to disallow unions containing numbers as an operand#52048

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Conversation

Andarist
Copy link
Contributor

fixes#52036

at this moment this is just a spike to check if this is even a desired change

@typescript-bottypescript-bot added the For Uncommitted BugPR for untriaged, rejected, closed or missing bug labelDec 29, 2022
Comment on lines +35646 to +35647
return leftAssignableToNumber && rightAssignableToNumber ||
!leftAssignableToNumber && !rightAssignableToNumber && areTypesComparable(left, right);
Copy link
ContributorAuthor

Choose a reason for hiding this comment

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

essentially, when one of the operands is assignable to a number (or big int) then we require the other one to be assignable to it too.areTypesComparable kicks in only when both sides are not assignable tonumberOrBigIntType

@@ -6,9 +6,41 @@ tests/cases/conformance/expressions/binaryOperators/comparisonOperator/compariso
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipTypeParameter.ts(17,14): error TS2367: This comparison appears to be unintentional because the types 'T' and 'U' have no overlap.
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipTypeParameter.ts(18,14): error TS2367: This comparison appears to be unintentional because the types 'T' and 'U' have no overlap.
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipTypeParameter.ts(19,14): error TS2367: This comparison appears to be unintentional because the types 'T' and 'U' have no overlap.
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNoRelationshipTypeParameter.ts(23,16): error TS2365: Operator '<' cannot be applied to types 'T' and 'number'.
Copy link
ContributorAuthor

Choose a reason for hiding this comment

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

To bring back the old behavior we should probably also allow unconstrained generics - but I wasn't sure what's the best check for them. Should I just checksomeType with a predicate testing if the type is aTypeParameter without a constraint?

@@ -0,0 +1,113 @@
tests/cases/conformance/controlFlow/controlFlowWhileStatement.ts(81,12): error TS2365: Operator '>' cannot be applied to types 'string | number' and 'number'.
Copy link
ContributorAuthor

Choose a reason for hiding this comment

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

Perhaps this indicated that the improvement requires some more work - or maybe that it's not a good improvement after all, as maybe "swallowing" non-numbers in unions is desired? Kinda easy to miss a mistake because of this behavior but some existing code can depend on it

Comment on lines +84 to +87
x = "";
while (x > 1) {
~~~~~
!!! error TS2365: Operator '>' cannot be applied to types 'string | number' and 'number'.
Copy link
ContributorAuthor

Choose a reason for hiding this comment

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

I feel like perhaps the error here is actually desirable - since the initial CFA type isstring and for such thiswhile loop is ignored at runtime (and could be ignored by the CFA analysis). We never enter the body of this loop

@RyanCavanaugh
Copy link
Member

@typescript-bot test this
@typescript-bot test top100
@typescript-bot user test this
@typescript-bot user test tsserver
@typescript-bot test tsserver top100
@typescript-bot run dt
@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commentedJan 4, 2023
edited
Loading

Heya@RyanCavanaugh, I've started to run the perf test suite on this PR at7996bcb. You can monitor the buildhere.

Update:The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commentedJan 4, 2023
edited
Loading

Heya@RyanCavanaugh, I've started to run the diff-based top-repos suite (tsserver) on this PR at7996bcb. You can monitor the buildhere.

Update:The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commentedJan 4, 2023
edited
Loading

Heya@RyanCavanaugh, I've started to run the parallelized Definitely Typed test suite on this PR at7996bcb. You can monitor the buildhere.

@typescript-bot
Copy link
Collaborator

typescript-bot commentedJan 4, 2023
edited
Loading

Heya@RyanCavanaugh, I've started to run the extended test suite on this PR at7996bcb. You can monitor the buildhere.

@typescript-bot
Copy link
Collaborator

typescript-bot commentedJan 4, 2023
edited
Loading

Heya@RyanCavanaugh, I've started to run the diff-based top-repos suite on this PR at7996bcb. You can monitor the buildhere.

Update:The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commentedJan 4, 2023
edited
Loading

Heya@RyanCavanaugh, I've started to run the diff-based user code test suite on this PR at7996bcb. You can monitor the buildhere.

Update:The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commentedJan 4, 2023
edited
Loading

Heya@RyanCavanaugh, I've started to run the diff-based user code test suite (tsserver) on this PR at7996bcb. You can monitor the buildhere.

Update:The results are in!

@typescript-bot
Copy link
Collaborator

@RyanCavanaugh Here are the results of running the user test suite comparingmain andrefs/pull/52048/merge:

Everything looks good!

@typescript-bot
Copy link
Collaborator

@RyanCavanaugh Here are the results of running the user test suite comparingmain andrefs/pull/52048/merge:

Something interesting changed - please have a look.

Details

webpack

tsconfig.json

tsconfig.types.json

@typescript-bot
Copy link
Collaborator

Heya@RyanCavanaugh, I've run the RWC suite on this PR - assuming you're on the TS core team, you can view the resulting diffhere.

@RyanCavanaugh
Copy link
Member

Breaks from an internal codebase (an ancient snapshot FWIW):

                animateOverlayPanel: (deltaY?: Number) => {                    if (typeof(deltaY) !== 'undefined' && deltaY < 0 && !!this.state.currentItem.url) {                                                          ~~~~~~~~~~!!! error TS2365: Operator '<' cannot be applied to types 'Number' and 'number'.
        if (item && item.redacted && item.redacted > 0) {                                            ~~~~~~~~~~~~~~~~~~~~~~~~!!! error TS2365: Operator '>' cannot be applied to types 'string | number' and 'number'.
                } else if (latin1ToGsm[codePoint] < -1) {                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~!!! error TS2365: Operator '<' cannot be applied to types 'string | number' and 'number'.                    scalarGsmEncodedLength.push(2);                } else {
                    urlPreviewInfo.content_type === FileTypeHelper.imageContentTypes.gif                        && urlPreviewInfo.size                        && urlPreviewInfo.size > this._maxGifFileSizeForIOs;                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!! error TS2365: Operator '>' cannot be applied to types 'string | number' and 'number'.

@Andarist
Copy link
ContributorAuthor

Most of the breaks here look very desirable to me. The Number vs number one should probably be corrected though.

@typescript-bot
Copy link
Collaborator

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

Here they are:

Compiler

Comparison Report - main..52048
Metricmain52048DeltaBestWorst
Angular - node (v18.10.0, x64)
Memory used372,498k (± 0.01%)372,489k (± 0.01%)-9k (- 0.00%)372,440k372,562k
Parse Time3.96s (± 0.81%)3.98s (± 1.24%)+0.01s (+ 0.34%)3.90s4.03s
Bind Time1.20s (± 0.73%)1.19s (± 0.74%)-0.01s (- 0.42%)1.18s1.21s
Check Time8.62s (± 0.75%)8.61s (± 0.50%)-0.01s (- 0.08%)8.58s8.70s
Emit Time7.55s (± 0.92%)7.55s (± 0.75%)+0.00s (+ 0.04%)7.48s7.62s
Total Time21.33s (± 0.59%)21.33s (± 0.54%)+0.00s (+ 0.02%)21.21s21.48s
Compiler-Unions - node (v18.10.0, x64)
Memory used199,110k (± 1.16%)200,978k (± 1.54%)+1,869k (+ 0.94%)198,088k203,883k
Parse Time1.65s (± 1.75%)1.64s (± 1.55%)-0.01s (- 0.40%)1.59s1.67s
Bind Time0.79s (± 0.72%)0.79s (± 0.66%)-0.00s (- 0.31%)0.78s0.80s
Check Time9.45s (± 0.66%)9.37s (± 0.75%)-0.07s (- 0.78%)9.26s9.44s
Emit Time2.75s (± 1.04%)2.75s (± 0.72%)-0.00s (- 0.10%)2.72s2.77s
Total Time14.64s (± 0.64%)14.55s (± 0.55%)-0.09s (- 0.59%)14.43s14.64s
Monaco - node (v18.10.0, x64)
Memory used353,963k (± 0.01%)353,904k (± 0.01%)-59k (- 0.02%)353,867k353,946k
Parse Time2.96s (± 1.34%)2.94s (± 0.80%)-0.01s (- 0.47%)2.92s2.98s
Bind Time1.04s (± 1.06%)1.04s (± 1.47%)-0.00s (- 0.13%)1.02s1.06s
Check Time7.24s (± 0.66%)7.20s (± 0.34%)-0.04s (- 0.61%)7.16s7.23s
Emit Time4.31s (± 0.98%)4.25s (± 1.10%)-0.06s (- 1.44%)4.20s4.31s
Total Time15.55s (± 0.70%)15.43s (± 0.44%)-0.12s (- 0.75%)15.37s15.55s
TFS - node (v18.10.0, x64)
Memory used309,869k (± 0.01%)309,856k (± 0.00%)-14k (- 0.00%)309,838k309,873k
Parse Time2.25s (± 0.76%)2.26s (± 1.19%)+0.00s (+ 0.22%)2.23s2.31s
Bind Time1.17s (± 0.88%)1.15s (± 0.32%)-0.01s (- 1.00%)1.15s1.16s
Check Time6.81s (± 0.75%)6.81s (± 0.67%)-0.01s (- 0.10%)6.75s6.87s
Emit Time3.94s (± 0.88%)3.90s (± 0.50%)-0.03s (- 0.89%)3.87s3.92s
Total Time14.17s (± 0.57%)14.12s (± 0.55%)-0.05s (- 0.33%)14.02s14.23s
material-ui - node (v18.10.0, x64)
Memory used485,044k (± 0.01%)485,119k (± 0.01%)+74k (+ 0.02%)485,067k485,149k
Parse Time3.52s (± 0.31%)3.52s (± 0.46%)-0.00s (- 0.14%)3.50s3.55s
Bind Time0.96s (± 0.55%)0.96s (± 0.88%)+0.00s (+ 0.52%)0.95s0.98s
Check Time16.96s (± 0.74%)16.90s (± 0.99%)-0.06s (- 0.33%)16.76s17.23s
Emit Time0.00s (± 0.00%)0.00s (± 0.00%)0.00s ( NaN%)0.00s0.00s
Total Time21.44s (± 0.62%)21.38s (± 0.80%)-0.06s (- 0.27%)21.21s21.71s
xstate - node (v18.10.0, x64)
Memory used569,822k (± 0.02%)569,793k (± 0.03%)-29k (- 0.01%)569,602k569,959k
Parse Time4.41s (± 0.87%)4.42s (± 0.77%)+0.00s (+ 0.06%)4.38s4.46s
Bind Time1.70s (± 0.74%)1.69s (± 0.75%)-0.01s (- 0.30%)1.68s1.71s
Check Time2.59s (± 0.75%)2.60s (± 0.59%)+0.01s (+ 0.25%)2.57s2.62s
Emit Time0.08s (± 0.11%)0.08s (± 0.11%)-0.00s (- 0.20%)0.08s0.08s
Total Time8.79s (± 0.47%)8.79s (± 0.45%)+0.01s (+ 0.07%)8.75s8.85s
Angular - node (v16.17.1, x64)
Memory used371,802k (± 0.01%)371,861k (± 0.01%)+59k (+ 0.02%)371,830k371,909k
Parse Time4.14s (± 0.68%)4.14s (± 0.24%)+0.00s (+ 0.08%)4.13s4.16s
Bind Time1.27s (± 0.54%)1.27s (± 0.79%)-0.01s (- 0.44%)1.25s1.28s
Check Time9.28s (± 0.61%)9.30s (± 0.39%)+0.02s (+ 0.21%)9.27s9.37s
Emit Time7.96s (± 0.17%)7.97s (± 0.74%)+0.01s (+ 0.15%)7.90s8.05s
Total Time22.66s (± 0.34%)22.68s (± 0.46%)+0.03s (+ 0.12%)22.54s22.80s
Compiler-Unions - node (v16.17.1, x64)
Memory used200,839k (± 0.92%)199,826k (± 0.08%)-1,013k (- 0.50%)199,500k199,933k
Parse Time1.82s (± 0.51%)1.82s (± 0.41%)-0.00s (- 0.23%)1.81s1.83s
Bind Time0.84s (± 1.00%)0.84s (± 0.79%)-0.01s (- 0.82%)0.83s0.85s
Check Time10.11s (± 0.83%)10.10s (± 1.29%)-0.01s (- 0.12%)9.94s10.28s
Emit Time3.14s (± 6.00%)3.04s (± 4.32%)🟩-0.10s (- 3.09%)2.96s3.29s
Total Time15.92s (± 1.43%)15.80s (± 1.46%)-0.12s (- 0.73%)15.56s16.24s
Monaco - node (v16.17.1, x64)
Memory used353,248k (± 0.01%)353,231k (± 0.01%)-18k (- 0.00%)353,199k353,267k
Parse Time3.19s (± 1.20%)3.17s (± 0.53%)-0.02s (- 0.55%)3.15s3.19s
Bind Time1.11s (± 1.22%)1.11s (± 1.33%)+0.00s (+ 0.02%)1.09s1.14s
Check Time7.85s (± 0.36%)7.85s (± 0.38%)+0.00s (+ 0.06%)7.82s7.90s
Emit Time4.48s (± 0.48%)4.48s (± 0.40%)-0.00s (- 0.10%)4.45s4.50s
Total Time16.63s (± 0.36%)16.62s (± 0.37%)-0.02s (- 0.10%)16.54s16.72s
TFS - node (v16.17.1, x64)
Memory used309,212k (± 0.01%)309,216k (± 0.00%)+4k (+ 0.00%)309,210k309,225k
Parse Time2.62s (± 1.14%)2.61s (± 0.95%)-0.01s (- 0.30%)2.58s2.65s
Bind Time1.07s (± 1.43%)1.04s (± 0.72%)-0.03s (- 2.53%)1.04s1.06s
Check Time7.42s (± 0.49%)7.38s (± 0.29%)-0.04s (- 0.52%)7.36s7.41s
Emit Time4.24s (± 0.58%)4.20s (± 0.79%)-0.04s (- 0.87%)4.15s4.24s
Total Time15.34s (± 0.39%)15.23s (± 0.35%)-0.11s (- 0.74%)15.16s15.30s
material-ui - node (v16.17.1, x64)
Memory used484,374k (± 0.00%)484,398k (± 0.01%)+24k (+ 0.00%)484,358k484,429k
Parse Time3.68s (± 0.39%)3.67s (± 0.29%)-0.01s (- 0.20%)3.66s3.68s
Bind Time1.02s (± 0.71%)1.01s (± 0.64%)-0.00s (- 0.26%)1.00s1.02s
Check Time17.86s (± 0.59%)17.89s (± 0.51%)+0.03s (+ 0.15%)17.79s18.00s
Emit Time0.00s (± 0.00%)0.00s (± 0.00%)0.00s ( NaN%)0.00s0.00s
Total Time22.56s (± 0.45%)22.57s (± 0.45%)+0.01s (+ 0.04%)22.46s22.70s
xstate - node (v16.17.1, x64)
Memory used567,338k (± 0.02%)567,334k (± 0.01%)-4k (- 0.00%)567,274k567,429k
Parse Time4.77s (± 0.73%)4.75s (± 0.43%)-0.01s (- 0.31%)4.74s4.79s
Bind Time1.66s (± 0.66%)1.65s (± 0.74%)-0.01s (- 0.64%)1.62s1.66s
Check Time2.83s (± 0.57%)2.83s (± 0.43%)-0.00s (- 0.03%)2.81s2.84s
Emit Time0.09s (± 4.66%)0.09s (± 4.56%)-0.00s (- 0.04%)0.08s0.09s
Total Time9.34s (± 0.37%)9.32s (± 0.37%)-0.02s (- 0.25%)9.27s9.37s
Angular - node (v14.15.1, x64)
Memory used365,502k (± 0.00%)365,498k (± 0.00%)-4k (- 0.00%)365,479k365,521k
Parse Time4.16s (± 0.79%)4.15s (± 0.40%)-0.01s (- 0.18%)4.12s4.17s
Bind Time1.30s (± 0.49%)1.30s (± 0.30%)+0.00s (+ 0.23%)1.30s1.31s
Check Time9.66s (± 0.34%)9.70s (± 0.46%)+0.04s (+ 0.41%)9.64s9.78s
Emit Time8.21s (± 0.83%)8.19s (± 0.60%)-0.02s (- 0.25%)8.10s8.25s
Total Time23.32s (± 0.33%)23.33s (± 0.25%)+0.01s (+ 0.06%)23.24s23.40s
Compiler-Unions - node (v14.15.1, x64)
Memory used194,956k (± 0.01%)195,016k (± 0.03%)+60k (+ 0.03%)194,954k195,085k
Parse Time1.86s (± 0.21%)1.84s (± 0.62%)-0.01s (- 0.75%)1.83s1.86s
Bind Time0.87s (± 0.56%)0.87s (± 0.89%)-0.00s (- 0.41%)0.87s0.89s
Check Time10.14s (± 0.48%)10.09s (± 0.54%)-0.05s (- 0.46%)10.01s10.14s
Emit Time3.12s (± 0.96%)3.13s (± 0.40%)+0.00s (+ 0.13%)3.11s3.14s
Total Time15.99s (± 0.38%)15.94s (± 0.41%)-0.05s (- 0.32%)15.85s16.00s
Monaco - node (v14.15.1, x64)
Memory used348,122k (± 0.01%)348,076k (± 0.01%)-46k (- 0.01%)348,050k348,116k
Parse Time3.26s (± 1.01%)3.24s (± 0.89%)-0.02s (- 0.65%)3.21s3.28s
Bind Time1.13s (± 0.57%)1.12s (± 0.94%)-0.01s (- 0.62%)1.11s1.14s
Check Time8.13s (± 0.46%)8.15s (± 0.39%)+0.02s (+ 0.29%)8.12s8.21s
Emit Time4.70s (± 0.46%)4.71s (± 0.83%)+0.02s (+ 0.32%)4.67s4.78s
Total Time17.21s (± 0.41%)17.22s (± 0.38%)+0.01s (+ 0.07%)17.13s17.32s
TFS - node (v14.15.1, x64)
Memory used304,140k (± 0.00%)304,140k (± 0.00%)0k ( 0.00%)304,121k304,152k
Parse Time2.73s (± 0.83%)2.71s (± 0.93%)-0.03s (- 0.95%)2.67s2.75s
Bind Time1.09s (± 0.60%)1.07s (± 0.48%)-0.01s (- 1.23%)1.06s1.08s
Check Time7.70s (± 0.38%)7.75s (± 0.35%)+0.05s (+ 0.65%)7.73s7.80s
Emit Time4.60s (± 1.00%)4.56s (± 1.36%)-0.05s (- 1.00%)4.50s4.66s
Total Time16.13s (± 0.45%)16.09s (± 0.63%)-0.04s (- 0.23%)16.01s16.28s
material-ui - node (v14.15.1, x64)
Memory used479,809k (± 0.00%)479,786k (± 0.00%)-23k (- 0.00%)479,771k479,806k
Parse Time3.91s (± 0.44%)3.88s (± 0.52%)-0.02s (- 0.59%)3.86s3.91s
Bind Time1.05s (± 0.68%)1.05s (± 0.61%)-0.00s (- 0.32%)1.04s1.06s
Check Time18.99s (± 0.56%)18.93s (± 0.54%)-0.05s (- 0.29%)18.78s19.08s
Emit Time0.00s (± 0.00%)0.00s (± 0.00%)0.00s ( NaN%)0.00s0.00s
Total Time23.95s (± 0.45%)23.87s (± 0.40%)-0.08s (- 0.34%)23.71s23.99s
xstate - node (v14.15.1, x64)
Memory used555,710k (± 0.01%)555,695k (± 0.01%)-15k (- 0.00%)555,652k555,731k
Parse Time5.12s (± 0.70%)5.11s (± 0.98%)-0.02s (- 0.30%)5.06s5.19s
Bind Time1.60s (± 1.36%)1.57s (± 0.54%)-0.02s (- 1.45%)1.56s1.59s
Check Time2.99s (± 0.44%)2.97s (± 0.56%)-0.02s (- 0.71%)2.95s2.99s
Emit Time0.10s (± 0.16%)0.10s (± 0.23%)-0.00s (- 0.10%)0.10s0.10s
Total Time9.81s (± 0.64%)9.76s (± 0.56%)-0.06s (- 0.57%)9.70s9.84s
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.15.1, x64)
Scenarios
  • Angular - node (v18.10.0, x64)
  • Angular - node (v16.17.1, x64)
  • Angular - node (v14.15.1, x64)
  • Compiler-Unions - node (v18.10.0, x64)
  • Compiler-Unions - node (v16.17.1, x64)
  • Compiler-Unions - node (v14.15.1, x64)
  • Monaco - node (v18.10.0, x64)
  • Monaco - node (v16.17.1, x64)
  • Monaco - node (v14.15.1, x64)
  • TFS - node (v18.10.0, x64)
  • TFS - node (v16.17.1, x64)
  • TFS - node (v14.15.1, x64)
  • material-ui - node (v18.10.0, x64)
  • material-ui - node (v16.17.1, x64)
  • material-ui - node (v14.15.1, x64)
  • xstate - node (v18.10.0, x64)
  • xstate - node (v16.17.1, x64)
  • xstate - node (v14.15.1, x64)
BenchmarkNameIterations
Current520486
Baselinemain6

TSServer

Comparison Report - main..52048
Metricmain52048DeltaBestWorst
Compiler-UnionsTSServer - node (v18.10.0, x64)
Req 1 - updateOpen2,537ms (± 1.73%)2,554ms (± 1.30%)+16ms (+ 0.64%)2,508ms2,603ms
Req 2 - geterr5,646ms (± 1.20%)5,650ms (± 1.02%)+4ms (+ 0.06%)5,578ms5,710ms
Req 3 - references362ms (± 2.69%)362ms (± 2.13%)+0ms (+ 0.04%)353ms376ms
Req 4 - navto291ms (± 1.50%)292ms (± 2.23%)+2ms (+ 0.62%)284ms302ms
Req 5 - completionInfo count1,356 (± 0.00%)1,356 (± 0.00%)0 ( 0.00%)1,3561,356
Req 5 - completionInfo84ms (± 5.43%)80ms (± 8.09%)🟩-4ms (- 5.14%)71ms87ms
CompilerTSServer - node (v18.10.0, x64)
Req 1 - updateOpen2,696ms (± 1.05%)2,713ms (± 1.60%)+17ms (+ 0.62%)2,675ms2,774ms
Req 2 - geterr4,131ms (± 0.18%)4,137ms (± 0.98%)+6ms (+ 0.14%)4,096ms4,191ms
Req 3 - references357ms (± 0.76%)357ms (± 0.75%)-1ms (- 0.21%)352ms360ms
Req 4 - navto290ms (± 0.74%)291ms (± 1.10%)+1ms (+ 0.21%)289ms297ms
Req 5 - completionInfo count1,518 (± 0.00%)1,518 (± 0.00%)0 ( 0.00%)1,5181,518
Req 5 - completionInfo65ms (± 1.36%)65ms (± 1.22%)+0ms (+ 0.43%)64ms66ms
xstateTSServer - node (v18.10.0, x64)
Req 1 - updateOpen3,625ms (± 0.71%)3,598ms (± 0.60%)-26ms (- 0.73%)3,562ms3,620ms
Req 2 - geterr1,331ms (± 1.32%)1,336ms (± 1.20%)+5ms (+ 0.34%)1,318ms1,356ms
Req 3 - references104ms (± 3.33%)105ms (± 2.37%)+1ms (+ 1.17%)103ms110ms
Req 4 - navto360ms (± 1.93%)357ms (± 1.92%)-3ms (- 0.88%)349ms368ms
Req 5 - completionInfo count3,154 (± 0.00%)3,154 (± 0.00%)0 ( 0.00%)3,1543,154
Req 5 - completionInfo435ms (± 1.46%)429ms (± 1.07%)-5ms (- 1.24%)423ms436ms
Compiler-UnionsTSServer - node (v16.17.1, x64)
Req 1 - updateOpen2,792ms (± 0.59%)2,542ms (±21.65%)🟩-249ms (- 8.93%)1,419ms2,797ms
Req 2 - geterr6,035ms (± 0.81%)5,508ms (±21.97%)🟩-526ms (- 8.72%)3,037ms6,070ms
Req 3 - references363ms (± 1.11%)335ms (±22.14%)🟩-28ms (- 7.65%)184ms370ms
Req 4 - navto280ms (± 0.35%)256ms (±21.84%)🟩-24ms (- 8.69%)142ms281ms
Req 5 - completionInfo count1,356 (± 0.00%)1,356 (± 0.00%)0 ( 0.00%)1,3561,356
Req 5 - completionInfo85ms (± 9.64%)80ms (±21.27%)🟩-5ms (- 6.17%)48ms95ms
CompilerTSServer - node (v16.17.1, x64)
Req 1 - updateOpen2,910ms (± 0.73%)2,899ms (± 0.47%)-11ms (- 0.37%)2,876ms2,915ms
Req 2 - geterr4,494ms (± 0.27%)4,493ms (± 0.38%)-0ms (- 0.01%)4,474ms4,520ms
Req 3 - references383ms (± 1.06%)383ms (± 0.32%)-0ms (- 0.04%)381ms384ms
Req 4 - navto296ms (± 1.09%)297ms (± 1.38%)+1ms (+ 0.45%)292ms304ms
Req 5 - completionInfo count1,518 (± 0.00%)1,518 (± 0.00%)0 ( 0.00%)1,5181,518
Req 5 - completionInfo74ms (± 3.97%)72ms (± 3.01%)-2ms (- 2.74%)70ms76ms
xstateTSServer - node (v16.17.1, x64)
Req 1 - updateOpen3,762ms (± 0.30%)3,755ms (± 0.28%)-7ms (- 0.19%)3,744ms3,773ms
Req 2 - geterr1,444ms (± 1.11%)1,456ms (± 0.78%)+12ms (+ 0.82%)1,444ms1,472ms
Req 3 - references108ms (± 1.00%)109ms (± 3.15%)+1ms (+ 0.54%)107ms116ms
Req 4 - navto352ms (± 0.70%)346ms (± 1.14%)-6ms (- 1.63%)341ms351ms
Req 5 - completionInfo count3,154 (± 0.00%)3,154 (± 0.00%)0 ( 0.00%)3,1543,154
Req 5 - completionInfo455ms (± 1.93%)454ms (± 0.51%)-2ms (- 0.37%)450ms456ms
Compiler-UnionsTSServer - node (v14.15.1, x64)
Req 1 - updateOpen3,056ms (± 0.40%)3,050ms (± 0.38%)-6ms (- 0.19%)3,037ms3,066ms
Req 2 - geterr5,907ms (± 0.66%)5,878ms (± 0.94%)-29ms (- 0.49%)5,800ms5,950ms
Req 3 - references383ms (± 1.03%)384ms (± 1.34%)+1ms (+ 0.38%)375ms389ms
Req 4 - navto288ms (± 0.44%)292ms (± 1.21%)+3ms (+ 1.18%)286ms296ms
Req 5 - completionInfo count1,356 (± 0.00%)1,356 (± 0.00%)0 ( 0.00%)1,3561,356
Req 5 - completionInfo82ms (± 1.20%)80ms (± 3.17%)-2ms (- 2.78%)77ms85ms
CompilerTSServer - node (v14.15.1, x64)
Req 1 - updateOpen3,199ms (± 1.02%)3,205ms (± 0.59%)+5ms (+ 0.17%)3,183ms3,239ms
Req 2 - geterr4,392ms (± 1.16%)4,366ms (± 0.76%)-27ms (- 0.61%)4,305ms4,406ms
Req 3 - references408ms (± 1.63%)410ms (± 0.74%)+2ms (+ 0.47%)408ms414ms
Req 4 - navto308ms (± 2.47%)303ms (± 2.37%)-5ms (- 1.63%)295ms312ms
Req 5 - completionInfo count1,518 (± 0.00%)1,518 (± 0.00%)0 ( 0.00%)1,5181,518
Req 5 - completionInfo82ms (± 7.39%)85ms (±10.35%)+3ms (+ 4.04%)76ms96ms
xstateTSServer - node (v14.15.1, x64)
Req 1 - updateOpen3,783ms (± 0.50%)3,788ms (± 0.80%)+5ms (+ 0.14%)3,756ms3,842ms
Req 2 - geterr1,460ms (± 0.95%)1,463ms (± 0.68%)+3ms (+ 0.20%)1,452ms1,476ms
Req 3 - references132ms (± 2.26%)131ms (± 2.49%)-1ms (- 1.01%)128ms134ms
Req 4 - navto395ms (± 0.66%)395ms (± 0.13%)-1ms (- 0.14%)394ms395ms
Req 5 - completionInfo count3,154 (± 0.00%)3,154 (± 0.00%)0 ( 0.00%)3,1543,154
Req 5 - completionInfo498ms (± 1.34%)496ms (± 1.47%)-2ms (- 0.42%)486ms502ms
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.15.1, x64)
Scenarios
  • Compiler-UnionsTSServer - node (v18.10.0, x64)
  • Compiler-UnionsTSServer - node (v16.17.1, x64)
  • Compiler-UnionsTSServer - node (v14.15.1, x64)
  • CompilerTSServer - node (v18.10.0, x64)
  • CompilerTSServer - node (v16.17.1, x64)
  • CompilerTSServer - node (v14.15.1, x64)
  • xstateTSServer - node (v18.10.0, x64)
  • xstateTSServer - node (v16.17.1, x64)
  • xstateTSServer - node (v14.15.1, x64)
BenchmarkNameIterations
Current520486
Baselinemain6

Startup

Comparison Report - main..52048
Metricmain52048DeltaBestWorst
tsc-startup - node (v16.17.1, x64)
Execution time138.42ms (± 0.27%)138.37ms (± 0.23%)-0.05ms (- 0.04%)137.50ms141.25ms
tsserver-startup - node (v16.17.1, x64)
Execution time222.62ms (± 0.19%)222.46ms (± 0.18%)-0.16ms (- 0.07%)220.89ms226.13ms
tsserverlibrary-startup - node (v16.17.1, x64)
Execution time224.03ms (± 0.19%)224.02ms (± 0.16%)-0.01ms (- 0.00%)223.04ms231.72ms
typescript-startup - node (v16.17.1, x64)
Execution time207.69ms (± 0.20%)207.37ms (± 0.18%)-0.32ms (- 0.15%)205.72ms210.62ms
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)
BenchmarkNameIterations
Current520486
Baselinemain6

Developer Information:

Download Benchmark

@typescript-bot
Copy link
Collaborator

@RyanCavanaugh Here are the results of running the top-repos suite comparingmain andrefs/pull/52048/merge:

Something interesting changed - please have a look.

Details

directus/directus

⚠️ Note that built also had errors⚠️
Req #2133 - completionInfo    at hasCovariantVoidArgument (/typescript-main/built/local/tsserver.js:60119:91)    at relateVariances (/typescript-main/built/local/tsserver.js:59369:64)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59038:32)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at eachTypeRelatedToType (/typescript-main/built/local/tsserver.js:58798:28)    at unionOrIntersectionRelatedTo (/typescript-main/built/local/tsserver.js:58697:171)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59026:23)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-main/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-main/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-main/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at checkTypeRelatedTo (/typescript-main/built/local/tsserver.js:58219:20)    at isTypeRelatedTo (/typescript-main/built/local/tsserver.js:58174:14)    at isTypeAssignableTo (/typescript-main/built/local/tsserver.js:57525:12)    at getVariancesWorker (/typescript-main/built/local/tsserver.js:60079:23)    at getAliasVariances (/typescript-main/built/local/tsserver.js:60060:12)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59034:27)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at indexInfoRelatedTo (/typescript-main/built/local/tsserver.js:59904:23)    at typeRelatedToIndexInfo (/typescript-main/built/local/tsserver.js:59933:16)    at indexSignaturesRelatedTo (/typescript-main/built/local/tsserver.js:59922:280)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59334:28)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at checkTypeRelatedTo (/typescript-main/built/local/tsserver.js:58219:20)    at isTypeRelatedTo (/typescript-main/built/local/tsserver.js:58174:14)    at isTypeAssignableTo (/typescript-main/built/local/tsserver.js:57525:12)    at getVariancesWorker (/typescript-main/built/local/tsserver.js:60079:23)    at getAliasVariances (/typescript-main/built/local/tsserver.js:60060:12)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59034:27)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-main/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-main/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-main/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at checkTypeRelatedTo (/typescript-main/built/local/tsserver.js:58219:20)    at isTypeRelatedTo (/typescript-main/built/local/tsserver.js:58174:14)    at isTypeAssignableTo (/typescript-main/built/local/tsserver.js:57525:12)    at getVariancesWorker (/typescript-main/built/local/tsserver.js:60079:23)    at getVariances (/typescript-main/built/local/tsserver.js:60057:128)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59309:29)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at eachTypeRelatedToType (/typescript-main/built/local/tsserver.js:58798:28)    at unionOrIntersectionRelatedTo (/typescript-main/built/local/tsserver.js:58697:171)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59026:23)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at isRelatedToWorker (/typescript-main/built/local/tsserver.js:58463:14)    at compareSignaturesRelated (/typescript-main/built/local/tsserver.js:57998:119)    at signatureRelatedTo (/typescript-main/built/local/tsserver.js:59844:14)    at signaturesRelatedTo (/typescript-main/built/local/tsserver.js:59776:27)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59330:24)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-main/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-main/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-main/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at eachTypeRelatedToType (/typescript-main/built/local/tsserver.js:58798:28)    at unionOrIntersectionRelatedTo (/typescript-main/built/local/tsserver.js:58697:171)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59026:23)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at isRelatedToWorker (/typescript-main/built/local/tsserver.js:58463:14)    at compareSignaturesRelated (/typescript-main/built/local/tsserver.js:57998:119)    at signatureRelatedTo (/typescript-main/built/local/tsserver.js:59844:14)    at signaturesRelatedTo (/typescript-main/built/local/tsserver.js:59776:27)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59330:24)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-main/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-main/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-main/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-main/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-main/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-main/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-main/built/local/tsserver.js:58956:21)
Req #2133 - completionInfo    at hasCovariantVoidArgument (/typescript-52048/built/local/tsserver.js:60119:91)    at relateVariances (/typescript-52048/built/local/tsserver.js:59369:64)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59038:32)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at eachTypeRelatedToType (/typescript-52048/built/local/tsserver.js:58798:28)    at unionOrIntersectionRelatedTo (/typescript-52048/built/local/tsserver.js:58697:171)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59026:23)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-52048/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-52048/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-52048/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at checkTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58219:20)    at isTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58174:14)    at isTypeAssignableTo (/typescript-52048/built/local/tsserver.js:57525:12)    at getVariancesWorker (/typescript-52048/built/local/tsserver.js:60079:23)    at getAliasVariances (/typescript-52048/built/local/tsserver.js:60060:12)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59034:27)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at indexInfoRelatedTo (/typescript-52048/built/local/tsserver.js:59904:23)    at typeRelatedToIndexInfo (/typescript-52048/built/local/tsserver.js:59933:16)    at indexSignaturesRelatedTo (/typescript-52048/built/local/tsserver.js:59922:280)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59334:28)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at checkTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58219:20)    at isTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58174:14)    at isTypeAssignableTo (/typescript-52048/built/local/tsserver.js:57525:12)    at getVariancesWorker (/typescript-52048/built/local/tsserver.js:60079:23)    at getAliasVariances (/typescript-52048/built/local/tsserver.js:60060:12)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59034:27)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-52048/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-52048/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-52048/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at checkTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58219:20)    at isTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58174:14)    at isTypeAssignableTo (/typescript-52048/built/local/tsserver.js:57525:12)    at getVariancesWorker (/typescript-52048/built/local/tsserver.js:60079:23)    at getVariances (/typescript-52048/built/local/tsserver.js:60057:128)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59309:29)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at eachTypeRelatedToType (/typescript-52048/built/local/tsserver.js:58798:28)    at unionOrIntersectionRelatedTo (/typescript-52048/built/local/tsserver.js:58697:171)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59026:23)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at isRelatedToWorker (/typescript-52048/built/local/tsserver.js:58463:14)    at compareSignaturesRelated (/typescript-52048/built/local/tsserver.js:57998:119)    at signatureRelatedTo (/typescript-52048/built/local/tsserver.js:59844:14)    at signaturesRelatedTo (/typescript-52048/built/local/tsserver.js:59776:27)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59330:24)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-52048/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-52048/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-52048/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at eachTypeRelatedToType (/typescript-52048/built/local/tsserver.js:58798:28)    at unionOrIntersectionRelatedTo (/typescript-52048/built/local/tsserver.js:58697:171)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59026:23)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at isRelatedToWorker (/typescript-52048/built/local/tsserver.js:58463:14)    at compareSignaturesRelated (/typescript-52048/built/local/tsserver.js:57998:119)    at signatureRelatedTo (/typescript-52048/built/local/tsserver.js:59844:14)    at signaturesRelatedTo (/typescript-52048/built/local/tsserver.js:59776:27)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59330:24)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)    at recursiveTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58926:19)    at isRelatedTo (/typescript-52048/built/local/tsserver.js:58529:122)    at isPropertySymbolTypeRelated (/typescript-52048/built/local/tsserver.js:59479:14)    at propertyRelatedTo (/typescript-52048/built/local/tsserver.js:59526:23)    at propertiesRelatedTo (/typescript-52048/built/local/tsserver.js:59712:29)    at structuredTypeRelatedToWorker (/typescript-52048/built/local/tsserver.js:59328:21)    at structuredTypeRelatedTo (/typescript-52048/built/local/tsserver.js:58956:21)

That is a filtered view of the text. To see the raw error text, go to RepoResults4/directus.directus.rawError.txt in theartifact folder

Last few requests

{"seq":2130,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/api/src/services/graphql/index.ts","line":338,"offset":21,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}{"seq":2131,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/api/src/services/graphql/index.ts","line":367,"offset":1,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}{"seq":2132,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/api/src/services/graphql/index.ts","line":367,"offset":1,"entryNames":["_convertObjectType"]}}{"seq":2133,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/api/src/services/graphql/index.ts","line":386,"offset":60,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}

Repro Steps

  1. git clone https://github.com/directus/directus --recurse-submodules
  2. In dirdirectus, rungit reset --hard cbd2af050b0fe68b8d9a395da469597aec2b41a9
  3. In dirdirectus, runpnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
  4. Back in the initial folder, downloadRepoResults4/directus.directus.replay.txt from theartifact folder
  5. npm install --no-save @typescript/server-replay
  6. npx tsreplay ./directus ./directus.directus.replay.txt path/to/tsserver.js
  7. npx tsreplay --help to learn about helpful switches for debugging, logging, etc

felixrieseberg/windows95

⚠️ Note that built also had errors⚠️
Req #297 - references    at formatMessage2 (/typescript-main/built/local/tsserver.js:159403:21)    at IOSession.writeMessage (/typescript-main/built/local/tsserver.js:160410:21)    at IOSession.send (/typescript-main/built/local/tsserver.js:160407:10)    at IOSession.doOutput (/typescript-main/built/local/tsserver.js:160454:10)    at IOSession.onMessage (/typescript-main/built/local/tsserver.js:162065:14)    at Interface.<anonymous> (/typescript-main/built/local/tsserver.js:163451:14)
Req #297 - references    at formatMessage2 (/typescript-52048/built/local/tsserver.js:159410:21)    at IOSession.writeMessage (/typescript-52048/built/local/tsserver.js:160417:21)    at IOSession.send (/typescript-52048/built/local/tsserver.js:160414:10)    at IOSession.doOutput (/typescript-52048/built/local/tsserver.js:160461:10)    at IOSession.onMessage (/typescript-52048/built/local/tsserver.js:162072:14)    at Interface.<anonymous> (/typescript-52048/built/local/tsserver.js:163458:14)

That is a filtered view of the text. To see the raw error text, go to RepoResults4/felixrieseberg.windows95.rawError.txt in theartifact folder

Last few requests

{"seq":294,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":29694,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}{"seq":295,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":29694,"entryNames":["_"]}}{"seq":296,"type":"request","command":"definitionAndBoundSpan","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":31046}}{"seq":297,"type":"request","command":"references","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":31059}}

Repro Steps

  1. git clone https://github.com/felixrieseberg/windows95 --recurse-submodules
  2. In dirwindows95, rungit reset --hard 17a81393467e2668eb2eea291ab4b6a749756dad
  3. In dirwindows95, runyarn install --ignore-engines --ignore-scripts --silent
  4. Back in the initial folder, downloadRepoResults4/felixrieseberg.windows95.replay.txt from theartifact folder
  5. npm install --no-save @typescript/server-replay
  6. npx tsreplay ./windows95 ./felixrieseberg.windows95.replay.txt path/to/tsserver.js
  7. npx tsreplay --help to learn about helpful switches for debugging, logging, etc

palantir/blueprint

⚠️ Note that built also had errors⚠️
Req #13114 - references    at formatMessage2 (/typescript-main/built/local/tsserver.js:159403:21)    at IOSession.writeMessage (/typescript-main/built/local/tsserver.js:160410:21)    at IOSession.send (/typescript-main/built/local/tsserver.js:160407:10)    at IOSession.doOutput (/typescript-main/built/local/tsserver.js:160454:10)    at IOSession.onMessage (/typescript-main/built/local/tsserver.js:162065:14)    at Interface.<anonymous> (/typescript-main/built/local/tsserver.js:163451:14)
Req #13114 - references    at formatMessage2 (/typescript-52048/built/local/tsserver.js:159410:21)    at IOSession.writeMessage (/typescript-52048/built/local/tsserver.js:160417:21)    at IOSession.send (/typescript-52048/built/local/tsserver.js:160414:10)    at IOSession.doOutput (/typescript-52048/built/local/tsserver.js:160461:10)    at IOSession.onMessage (/typescript-52048/built/local/tsserver.js:162072:14)    at Interface.<anonymous> (/typescript-52048/built/local/tsserver.js:163458:14)

That is a filtered view of the text. To see the raw error text, go to RepoResults4/palantir.blueprint.rawError.txt in theartifact folder

Last few requests

{"seq":13111,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":586264,"entryNames":["_"]}}{"seq":13112,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":586580,"includeExternalModuleExports":true,"includeInsertTextCompletions":true,"triggerKind":1}}{"seq":13113,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":586609,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}{"seq":13114,"type":"request","command":"references","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":587766}}

Repro Steps

  1. git clone https://github.com/palantir/blueprint --recurse-submodules
  2. In dirblueprint, rungit reset --hard b8653656018f3a0d08a9fdadd5fd0e2813f9c158
  3. In dirblueprint, runyarn install --ignore-engines --ignore-scripts --silent
  4. Back in the initial folder, downloadRepoResults4/palantir.blueprint.replay.txt from theartifact folder
  5. npm install --no-save @typescript/server-replay
  6. npx tsreplay ./blueprint ./palantir.blueprint.replay.txt path/to/tsserver.js
  7. npx tsreplay --help to learn about helpful switches for debugging, logging, etc

vercel/hyper

⚠️ Note that built also had errors⚠️
Req #12671 - references    at formatMessage2 (/typescript-main/built/local/tsserver.js:159403:21)    at IOSession.writeMessage (/typescript-main/built/local/tsserver.js:160410:21)    at IOSession.send (/typescript-main/built/local/tsserver.js:160407:10)    at IOSession.doOutput (/typescript-main/built/local/tsserver.js:160454:10)    at IOSession.onMessage (/typescript-main/built/local/tsserver.js:162065:14)    at Interface.<anonymous> (/typescript-main/built/local/tsserver.js:163451:14)
Req #12671 - references    at formatMessage2 (/typescript-52048/built/local/tsserver.js:159410:21)    at IOSession.writeMessage (/typescript-52048/built/local/tsserver.js:160417:21)    at IOSession.send (/typescript-52048/built/local/tsserver.js:160414:10)    at IOSession.doOutput (/typescript-52048/built/local/tsserver.js:160461:10)    at IOSession.onMessage (/typescript-52048/built/local/tsserver.js:162072:14)    at Interface.<anonymous> (/typescript-52048/built/local/tsserver.js:163458:14)

That is a filtered view of the text. To see the raw error text, go to RepoResults2/vercel.hyper.rawError.txt in theartifact folder

Last few requests

{"seq":12668,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/bin/yarn-standalone.js","line":84971,"offset":121581,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}{"seq":12669,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/bin/yarn-standalone.js","line":84971,"offset":121581,"entryNames":["__webpack_require__"]}}{"seq":12670,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/bin/yarn-standalone.js","line":84971,"offset":122310,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}{"seq":12671,"type":"request","command":"references","arguments":{"file":"@PROJECT_ROOT@/bin/yarn-standalone.js","line":84971,"offset":123278}}

Repro Steps

  1. git clone https://github.com/vercel/hyper --recurse-submodules
  2. In dirhyper, rungit reset --hard f494781ff22171cb4ab6081dbd6f71b13ae5f9a3
  3. Install packages (exact steps are below, but it might be easier to follow the repo readme)
    1. In dirhyper/app, runyarn install --ignore-engines --ignore-scripts --silent
    2. In dirhyper, runyarn install --ignore-engines --ignore-scripts --silent
  4. Back in the initial folder, downloadRepoResults2/vercel.hyper.replay.txt from theartifact folder
  5. npm install --no-save @typescript/server-replay
  6. npx tsreplay ./hyper ./vercel.hyper.replay.txt path/to/tsserver.js
  7. npx tsreplay --help to learn about helpful switches for debugging, logging, etc

@typescript-bot
Copy link
Collaborator

@RyanCavanaugh Here are the results of running the top-repos suite comparingmain andrefs/pull/52048/merge:

Something interesting changed - please have a look.

Details

microsoft/vscode

5 of 54 projects failed to build with the old tsc and were ignored

src/tsconfig.monaco.json

neoclide/coc.nvim

tsconfig.json

react-hook-form/react-hook-form

2 of 3 projects failed to build with the old tsc and were ignored

tsconfig.json

react-native-elements/react-native-elements

2 of 5 projects failed to build with the old tsc and were ignored

tsconfig.json

recharts/recharts

demo/tsconfig.json

tsconfig.json

sveltejs/svelte

2 of 3 projects failed to build with the old tsc and were ignored

src/runtime/tsconfig.json

@typescript-bot
Copy link
Collaborator

The TypeScript team hasn't accepted the linked issue#52036. If you can get it accepted, this PR will have a better chance of being reviewed.

@Andarist
Copy link
ContributorAuthor

Andarist commentedJan 16, 2023
edited
Loading

@RyanCavanaugh the union cases that you mentioned are conceptually the same as the issue that I'm trying to fix here, so I guess that if we decide to move this PR forward (in some shape) then that would be a breaking change for those situations. I don't see any additional heuristics that would keep those cases working while erroring on the case linked to this PR.

TheNumber case is an edge case but well, conceptually it's a valid one - so this could be fixed here.

Cases discovered by the top are also related to unions and one is related tounknown. There are also some LSP issues reportedhere. It's surprising that this has affected LSP anyhow so I wonder if those are not false positives somehow but I could investigate this further and fix the issues if they are legit.

All in all, it kinda boils down to making a decision about the desired behavior here and only your team can do that. I'm more than happy to work on an adjusted algorithm for this but I'd have to know what that is (if it would be any different from what I have in this PR). It's not that I'm not willing to experiment and propose algorithm adjustments - it's just that the whole thing is very subtle and you have the best idea of what kind of disputable you might want to allow. So at the very least, I could use a little bit of a push from your team's side to explore the improved algorithm.

Let me know what you think, if you want to act on this anyhow or if you prefer to close the PR. From my PoV, most of the new errors are desired - those cases won't throw, so they are "type-safe" but they rely on some implicit coercions~ that are often super easy to miss. This change would require adding some additionaltypeof x === 'number' to codebases but I'd consider the RoI worth it.

@RyanCavanaughRyanCavanaugh added the Breaking ChangeWould introduce errors in existing code labelJan 19, 2023
@Andarist
Copy link
ContributorAuthor

I see inthe latest design notes that:

Conclusion: Feels like this PR is a good start. Want to bring this in for 5.0.

What are the next steps here then? Which cases should I fix and which cases do we want to keep as "broken"? cc@RyanCavanaugh@DanielRosenwasser

@RyanCavanaugh
Copy link
Member

There might be some more corner cases to explore here, but I think this is effectively what we want to "try" in the 5.0 beta to gauge reaction and figure out what to tweak (or if it's just going to have to roll back entirely). I'm leaning toward merge as-is.@DanielRosenwasser good to go?

jakebailey and dvikas reacted with thumbs up emoji

@Andarist
Copy link
ContributorAuthor

While working on this, I initially made a different change but then discovered that TS currently allows this:

classA{foo(){}}classBextendsA{bar(){}}declareconsta:Adeclareconstb:Ba<b// ok?

So I went with a different route, trying to keep this behavior as I thought that it was desired. But given the discussion and an attempt to change the base behavior - should this case (and similar ones) be considered an error? How do we define what TS treats as a valid comparison?

From my PoV, allowing the comparison to be OK based on both types being comparable is not that useful and is a footgun. I'm specifically calling out this part of the check:

!leftAssignableToNumber&&!rightAssignableToNumber&&areTypesComparable(left,right);

@redradist
Copy link

@Andarist
FYI, Regarding this issue with implicit coercion I wrote a libraryhttps://github.com/redradist/SafeScript that completly exclude implicit coersion

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@jakebaileyjakebaileyjakebailey approved these changes

@RyanCavanaughRyanCavanaughAwaiting requested review from RyanCavanaugh

Assignees

@jakebaileyjakebailey

Labels
Breaking ChangeWould introduce errors in existing codeFor Uncommitted BugPR for untriaged, rejected, closed or missing bug
Projects
Archived in project
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

typescript passesnumber | Promise<number> as if it werenumber (or something like that)
5 participants
@Andarist@RyanCavanaugh@typescript-bot@redradist@jakebailey

[8]ページ先頭

©2009-2025 Movatter.jp