Skip to content

Spelling correction fixes should not be case-agnostic for two equally weighed options #39060

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

Merged
merged 37 commits into from
Dec 15, 2020

Conversation

Zzzen
Copy link
Contributor

@Zzzen Zzzen commented Jun 13, 2020

…y weighed options occur.

fixes #17219

@sandersn sandersn changed the title Spelling correction fixes should not be case-agnostic when two equall… Spelling correction fixes should not be case-agnostic for two equally weighed options Jun 16, 2020
@Zzzen Zzzen requested a review from DanielRosenwasser June 17, 2020 15:46
@typescript-bot typescript-bot added the For Backlog Bug PRs that fix a backlog bug label Jul 21, 2020
Copy link
Member

@sandersn sandersn left a comment

Choose a reason for hiding this comment

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

I have a couple of problems with this PR.

  1. I'm not sure the bug occurs in real suggestions. When it was opened, I don't think suggestions were filtered by meaning, but now, Console isn't suggested because it's a type. The camelValue/PascalType distinction is standard in JS so the current algorithm will usually get the right answer.
  2. Instead of tweaking the brittle heuristics to make them case-aware, I'd rather start with Levenshtein distance being case-aware. I guess that a good way to start is to make a difference in case between otherwise-identical characters set the substitution distance to 0.1. So for substituting:
  • a, a, dist=0
  • a, A, dist=0.1
  • a, B, dist=2

However, the first step is to address (1). We need examples as common and clearly wrong as the original bug's Console suggestion for conole.

As for (2), it's still possible that tweaking heuristics is the way to go, but I'd like to try taking case into account for Levenshtein distance first.

@Zzzen
Copy link
Contributor Author

Zzzen commented Jul 24, 2020

And maybe we can use Damerau–Levenshtein distance so that results are more intuitive.

  • le_dst('two','tow') returns a value of 2 (changing the w to an o and the o to a w).
  • dle_dst('two','tow') returns a value of 1 (transposing the w and o).

@DanielRosenwasser
Copy link
Member

DanielRosenwasser commented Aug 21, 2020

When it was opened, I don't think suggestions were filtered by meaning, but now, Console isn't suggested because it's a type. The camelValue/PascalType distinction is standard in JS so the current algorithm will usually get the right answer.

Has it been that long since you used a class @sandersn? 😄

let node = new Node();

nodes

image

I think this is still legitimate and worth fixing.

@DanielRosenwasser
Copy link
Member

DanielRosenwasser commented Aug 21, 2020

I'd also say one of the reasons this is "rarer" is because #40169 was never done.

@sandersn
Copy link
Member

  1. Yes, it has been that long. OR, the semantics of classes are fundamentally unintuitive and irregular and hard to fit in my head.
  2. Hard for No spelling suggestion/quick fix on namespaces #40169 to be the cause of an error becoming rarer if it hasn't ever changed.
  3. Reusing the class name in let c = new C() is pretty common, so it's a good example. (But still not as common as console.log.)
  4. I'm still not convinced transpositions are that common, or that badly handled by the current algorithm, even though the precise number it returns may be unintuitive. This also needs a common, obvious example that would be fixed by switching. (and should start from the existing PR for it: Use damerau-levenshtein algorithm for edit distance #15689.)

@sandersn sandersn self-assigned this Sep 4, 2020
@typescript-bot typescript-bot added For Uncommitted Bug PR for untriaged, rejected, closed or missing bug and removed For Backlog Bug PRs that fix a backlog bug labels Sep 4, 2020
@sandersn
Copy link
Member

@Zzzen do you want to keep working on this?

@Zzzen
Copy link
Contributor Author

Zzzen commented Oct 30, 2020

yeah. I am not sure what to do next though

@sandersn
Copy link
Member

  1. Add a test case with a class named the same as an instance, except for case, like let node = new Node()
  2. Try making the core levenshtein distance check case-aware. Make the substitution cost cheaper for characters that differ only by case. See what the results look like on various examples.

@Zzzen
Copy link
Contributor Author

Zzzen commented Oct 31, 2020

👌 got it.

@typescript-bot typescript-bot removed the For Uncommitted Bug PR for untriaged, rejected, closed or missing bug label Nov 3, 2020
@Zzzen
Copy link
Contributor Author

Zzzen commented Nov 30, 2020

ping @sandersn @sheetalkamat

Copy link
Member

@sandersn sandersn left a comment

Choose a reason for hiding this comment

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

A couple of suggestions, plus some more questions.

@@ -1941,41 +1939,28 @@ namespace ts {
*/
export function getSpellingSuggestion<T>(name: string, candidates: T[], getName: (candidate: T) => string | undefined): T | undefined {
const maximumLengthDifference = Math.min(2, Math.floor(name.length * 0.34));
let bestDistance = Math.floor(name.length * 0.4) + 1; // If the best result isn't better than this, don't bother.
let bestDistance = name.length * 0.4 + 0.1; // If the best result is worse than this, don't bother.
Copy link
Member

Choose a reason for hiding this comment

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

why change this? Reducing the threshold will throw out some otherwise-good suggestions.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Removing Math.floor is a more accurate implementation of Whose levenshtein distance is more than 0.4 of the length of the name. No test is broken by this, so I guess it should be acceptable?

Copy link
Member

Choose a reason for hiding this comment

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

Can you put this in a followup change just like the Math.min/max one? I want this PR to be the minimal change so that future-me has less to read 2 years from now, next time we change this.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

👌

@@ -2022,7 +2011,7 @@ namespace ts {
}

const res = previous[s2.length];
return res > max ? undefined : res;
return res >= max ? undefined : res;
Copy link
Member

Choose a reason for hiding this comment

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

I guess this is the reason bestDistance - 1 turned into bestDistance? Is it also need to support the switch to Math.max and Math.min, or some other reason, like the switch to non-integral values?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

😏 Actually, it's the result of bestDistance - 1 turned into bestDistance. bestDistance - 1 can be replaced with bestDistance - 0.1, but it is very fragile since the minimum of distance could be changed to other values like 0.05 in the future.


for (let i = 0; i <= s2.length; i++) {
previous[i] = i;
}

for (let i = 1; i <= s1.length; i++) {
const c1 = s1.charCodeAt(i - 1);
const minJ = i > max ? i - max : 1;
Copy link
Member

Choose a reason for hiding this comment

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

I think I understand the need for Math.ceil and Math.floor, but why change to Math.max and Math.min?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Math.max/min is more readable for me. Anyway, reverted now.

Copy link
Member

Choose a reason for hiding this comment

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

OK, makes sense. After this PR is in, maybe you can re-submit that change separately where it would be obvious that Math.max/min are equivalent. I thought it was more readable too, but I prefer to reduce code change per PR in complicated functions like this.

current[0] = i;
/** Smallest value of the matrix in the ith column. */
let colMin = i;
for (let j = 1; j < minJ; j++) {
current[j] = big;
}
for (let j = minJ; j <= maxJ; j++) {
// case difference should be insignificant.
const substitutionDistance = s1[i - 1].toLowerCase() === s2[j-1].toLowerCase()
Copy link
Member

Choose a reason for hiding this comment

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

Would it make sense to cache the lowercase versions of s1 and s2 and index into those instead?

This piece of code needs a microbenchmark, since I have no idea. I'm not sure how to do that off the top of my head though.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

How about extracting all symbols from some mostly used type definitions and then apply getSpellingSuggestion randomly?

Copy link
Member

Choose a reason for hiding this comment

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

Maybe? One way to stress the system would be to have a scope that fills in all possible neighbours, so that the algorithm has to run on lots of candidates, all under the maximum distance cutoff.

I'm going to run the perf suite on this too, since all those projects compile with lots of errors now -- maybe enough of them are name resolution errors to notice a slowdown.

@sandersn
Copy link
Member

sandersn commented Dec 15, 2020

@typescript-bot perf test this

If the perf test comes back good, this is ready to go. I'd still like a synthetic benchmark before 4.2 releases in January, but it's not urgent. I'm also going to do a before/after comparison of changes with the scope size limiter turned off, to see what changes show up in suggestions from the global scope.

Edit: Disabling the scope size limiter shows no changes with respect to master.

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 15, 2020

Heya @sandersn, I've started to run the perf test suite on this PR at 99a5074. 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:

Comparison Report - master..39060

Metric master 39060 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 345,027k (± 0.03%) 345,053k (± 0.01%) +26k (+ 0.01%) 344,976k 345,160k
Parse Time 1.98s (± 0.50%) 1.99s (± 0.60%) +0.01s (+ 0.51%) 1.96s 2.01s
Bind Time 0.83s (± 0.85%) 0.84s (± 1.07%) +0.01s (+ 0.84%) 0.82s 0.86s
Check Time 4.99s (± 0.32%) 5.01s (± 0.77%) +0.02s (+ 0.32%) 4.92s 5.07s
Emit Time 5.33s (± 0.44%) 5.37s (± 1.12%) +0.04s (+ 0.75%) 5.26s 5.49s
Total Time 13.13s (± 0.22%) 13.20s (± 0.65%) +0.07s (+ 0.54%) 13.01s 13.39s
Compiler-Unions - node (v10.16.3, x64)
Memory used 205,375k (± 0.08%) 205,362k (± 0.04%) -14k (- 0.01%) 205,043k 205,492k
Parse Time 0.78s (± 0.38%) 0.79s (± 1.03%) +0.01s (+ 1.41%) 0.78s 0.81s
Bind Time 0.50s (± 1.30%) 0.50s (± 0.98%) +0.01s (+ 1.20%) 0.49s 0.51s
Check Time 12.11s (± 0.85%) 12.22s (± 0.92%) +0.11s (+ 0.92%) 11.91s 12.37s
Emit Time 2.34s (± 1.16%) 2.37s (± 1.13%) +0.02s (+ 0.90%) 2.30s 2.42s
Total Time 15.73s (± 0.63%) 15.88s (± 0.74%) +0.15s (+ 0.93%) 15.59s 16.10s
Monaco - node (v10.16.3, x64)
Memory used 354,905k (± 0.02%) 354,870k (± 0.02%) -36k (- 0.01%) 354,728k 355,026k
Parse Time 1.60s (± 0.43%) 1.60s (± 0.35%) -0.00s (- 0.19%) 1.59s 1.61s
Bind Time 0.73s (± 0.68%) 0.73s (± 0.80%) +0.00s (+ 0.14%) 0.71s 0.74s
Check Time 5.11s (± 0.41%) 5.13s (± 0.53%) +0.01s (+ 0.27%) 5.08s 5.21s
Emit Time 2.80s (± 0.40%) 2.82s (± 0.60%) +0.02s (+ 0.75%) 2.80s 2.87s
Total Time 10.25s (± 0.24%) 10.28s (± 0.39%) +0.03s (+ 0.31%) 10.21s 10.42s
TFS - node (v10.16.3, x64)
Memory used 307,912k (± 0.03%) 307,926k (± 0.02%) +14k (+ 0.00%) 307,849k 308,074k
Parse Time 1.24s (± 0.89%) 1.24s (± 0.50%) -0.00s (- 0.08%) 1.23s 1.25s
Bind Time 0.68s (± 1.27%) 0.68s (± 1.00%) +0.00s (+ 0.29%) 0.66s 0.69s
Check Time 4.60s (± 0.48%) 4.59s (± 0.36%) -0.01s (- 0.26%) 4.55s 4.62s
Emit Time 2.94s (± 0.98%) 2.94s (± 0.84%) -0.01s (- 0.20%) 2.86s 2.98s
Total Time 9.47s (± 0.45%) 9.45s (± 0.41%) -0.02s (- 0.22%) 9.37s 9.53s
material-ui - node (v10.16.3, x64)
Memory used 489,834k (± 0.01%) 489,847k (± 0.01%) +13k (+ 0.00%) 489,698k 489,981k
Parse Time 2.06s (± 0.33%) 2.08s (± 0.49%) +0.02s (+ 1.02%) 2.06s 2.10s
Bind Time 0.65s (± 1.19%) 0.65s (± 0.46%) +0.00s (+ 0.15%) 0.65s 0.66s
Check Time 13.62s (± 0.70%) 13.66s (± 1.08%) +0.04s (+ 0.27%) 13.40s 13.97s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 16.33s (± 0.61%) 16.39s (± 0.94%) +0.06s (+ 0.38%) 16.11s 16.71s
Angular - node (v12.1.0, x64)
Memory used 322,826k (± 0.02%) 322,792k (± 0.02%) -34k (- 0.01%) 322,635k 322,920k
Parse Time 1.96s (± 0.49%) 1.97s (± 0.89%) +0.01s (+ 0.66%) 1.93s 2.01s
Bind Time 0.82s (± 0.91%) 0.82s (± 0.70%) +0.00s (+ 0.37%) 0.81s 0.84s
Check Time 4.90s (± 0.33%) 4.89s (± 0.59%) -0.00s (- 0.02%) 4.85s 4.98s
Emit Time 5.48s (± 0.38%) 5.50s (± 0.60%) +0.02s (+ 0.35%) 5.44s 5.56s
Total Time 13.15s (± 0.15%) 13.18s (± 0.40%) +0.03s (+ 0.26%) 13.09s 13.29s
Compiler-Unions - node (v12.1.0, x64)
Memory used 191,566k (± 0.05%) 191,583k (± 0.05%) +17k (+ 0.01%) 191,344k 191,820k
Parse Time 0.77s (± 0.88%) 0.77s (± 0.67%) -0.00s (- 0.39%) 0.76s 0.78s
Bind Time 0.50s (± 1.24%) 0.50s (± 0.80%) 0.00s ( 0.00%) 0.49s 0.51s
Check Time 10.91s (± 1.06%) 10.86s (± 0.86%) -0.04s (- 0.39%) 10.66s 11.03s
Emit Time 2.37s (± 1.38%) 2.37s (± 0.73%) -0.00s (- 0.21%) 2.33s 2.40s
Total Time 14.55s (± 0.80%) 14.50s (± 0.64%) -0.05s (- 0.38%) 14.29s 14.66s
Monaco - node (v12.1.0, x64)
Memory used 337,079k (± 0.01%) 337,073k (± 0.02%) -6k (- 0.00%) 336,979k 337,224k
Parse Time 1.58s (± 0.56%) 1.59s (± 0.66%) +0.00s (+ 0.25%) 1.56s 1.60s
Bind Time 0.71s (± 0.52%) 0.71s (± 1.32%) -0.00s (- 0.28%) 0.70s 0.74s
Check Time 4.92s (± 0.43%) 4.94s (± 0.51%) +0.02s (+ 0.39%) 4.88s 4.99s
Emit Time 2.87s (± 0.63%) 2.88s (± 0.57%) +0.01s (+ 0.49%) 2.86s 2.92s
Total Time 10.08s (± 0.21%) 10.12s (± 0.38%) +0.04s (+ 0.39%) 10.05s 10.21s
TFS - node (v12.1.0, x64)
Memory used 292,120k (± 0.02%) 292,129k (± 0.02%) +9k (+ 0.00%) 292,018k 292,325k
Parse Time 1.25s (± 0.67%) 1.25s (± 0.58%) -0.00s (- 0.24%) 1.24s 1.27s
Bind Time 0.66s (± 0.72%) 0.66s (± 0.91%) -0.00s (- 0.15%) 0.64s 0.67s
Check Time 4.52s (± 0.57%) 4.53s (± 0.58%) +0.02s (+ 0.35%) 4.48s 4.60s
Emit Time 2.96s (± 0.82%) 2.97s (± 0.85%) +0.01s (+ 0.17%) 2.92s 3.03s
Total Time 9.39s (± 0.46%) 9.40s (± 0.43%) +0.02s (+ 0.16%) 9.30s 9.47s
material-ui - node (v12.1.0, x64)
Memory used 467,948k (± 0.01%) 467,833k (± 0.05%) -115k (- 0.02%) 466,883k 468,040k
Parse Time 2.07s (± 0.47%) 2.08s (± 0.51%) +0.01s (+ 0.29%) 2.05s 2.10s
Bind Time 0.65s (± 0.76%) 0.65s (± 0.73%) +0.00s (+ 0.15%) 0.64s 0.66s
Check Time 12.05s (± 0.50%) 12.09s (± 0.84%) +0.04s (+ 0.37%) 11.97s 12.42s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 14.77s (± 0.41%) 14.82s (± 0.63%) +0.05s (+ 0.34%) 14.68s 15.11s
Angular - node (v8.9.0, x64)
Memory used 347,692k (± 0.02%) 347,673k (± 0.02%) -19k (- 0.01%) 347,519k 347,770k
Parse Time 2.51s (± 0.54%) 2.51s (± 0.51%) -0.00s (- 0.04%) 2.49s 2.55s
Bind Time 0.86s (± 0.93%) 0.87s (± 0.84%) +0.01s (+ 0.70%) 0.85s 0.88s
Check Time 5.61s (± 0.38%) 5.64s (± 0.59%) +0.03s (+ 0.52%) 5.58s 5.73s
Emit Time 6.36s (± 0.77%) 6.30s (± 1.19%) -0.06s (- 0.88%) 6.13s 6.47s
Total Time 15.34s (± 0.35%) 15.32s (± 0.59%) -0.02s (- 0.13%) 15.12s 15.49s
Compiler-Unions - node (v8.9.0, x64)
Memory used 213,189k (± 0.02%) 213,204k (± 0.02%) +14k (+ 0.01%) 213,131k 213,328k
Parse Time 0.95s (± 0.63%) 0.95s (± 0.65%) -0.01s (- 0.63%) 0.94s 0.96s
Bind Time 0.57s (± 0.97%) 0.58s (± 0.96%) +0.01s (+ 1.05%) 0.57s 0.59s
Check Time 14.91s (± 1.57%) 14.83s (± 0.83%) -0.08s (- 0.51%) 14.48s 15.04s
Emit Time 2.78s (± 1.40%) 2.75s (± 1.90%) -0.03s (- 1.12%) 2.60s 2.80s
Total Time 19.22s (± 1.33%) 19.11s (± 0.84%) -0.11s (- 0.57%) 18.62s 19.35s
Monaco - node (v8.9.0, x64)
Memory used 358,778k (± 0.01%) 358,796k (± 0.02%) +19k (+ 0.01%) 358,688k 358,976k
Parse Time 1.92s (± 0.42%) 1.92s (± 0.27%) -0.00s (- 0.16%) 1.91s 1.93s
Bind Time 0.91s (± 0.73%) 0.91s (± 0.63%) +0.00s (+ 0.00%) 0.90s 0.92s
Check Time 5.71s (± 0.43%) 5.69s (± 0.37%) -0.02s (- 0.33%) 5.64s 5.72s
Emit Time 3.43s (± 0.43%) 3.42s (± 0.41%) -0.01s (- 0.32%) 3.38s 3.44s
Total Time 11.97s (± 0.30%) 11.93s (± 0.24%) -0.03s (- 0.29%) 11.88s 11.97s
TFS - node (v8.9.0, x64)
Memory used 310,529k (± 0.01%) 310,513k (± 0.02%) -15k (- 0.00%) 310,394k 310,620k
Parse Time 1.57s (± 0.35%) 1.57s (± 0.54%) +0.00s (+ 0.19%) 1.56s 1.60s
Bind Time 0.69s (± 0.50%) 0.69s (± 0.58%) +0.00s (+ 0.29%) 0.68s 0.70s
Check Time 5.31s (± 0.33%) 5.35s (± 0.53%) +0.04s (+ 0.77%) 5.30s 5.42s
Emit Time 2.96s (± 0.70%) 2.95s (± 0.72%) -0.01s (- 0.30%) 2.89s 3.00s
Total Time 10.53s (± 0.25%) 10.57s (± 0.39%) +0.04s (+ 0.34%) 10.47s 10.63s
material-ui - node (v8.9.0, x64)
Memory used 496,995k (± 0.01%) 497,031k (± 0.01%) +36k (+ 0.01%) 496,933k 497,085k
Parse Time 2.48s (± 0.45%) 2.49s (± 0.38%) +0.01s (+ 0.20%) 2.46s 2.50s
Bind Time 0.81s (± 1.16%) 0.81s (± 1.30%) +0.00s (+ 0.00%) 0.79s 0.84s
Check Time 18.34s (± 0.59%) 18.31s (± 0.87%) -0.03s (- 0.16%) 17.91s 18.68s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 21.63s (± 0.51%) 21.60s (± 0.74%) -0.03s (- 0.14%) 21.21s 21.98s
Angular - node (v8.9.0, x86)
Memory used 199,466k (± 0.02%) 199,437k (± 0.01%) -28k (- 0.01%) 199,394k 199,517k
Parse Time 2.44s (± 0.74%) 2.42s (± 0.47%) -0.02s (- 0.74%) 2.40s 2.44s
Bind Time 1.02s (± 1.18%) 1.01s (± 0.88%) -0.00s (- 0.29%) 0.99s 1.03s
Check Time 5.10s (± 0.78%) 5.09s (± 0.41%) -0.01s (- 0.22%) 5.05s 5.12s
Emit Time 6.11s (± 1.03%) 6.06s (± 1.15%) -0.05s (- 0.77%) 5.86s 6.23s
Total Time 14.66s (± 0.62%) 14.59s (± 0.54%) -0.07s (- 0.50%) 14.39s 14.82s
Compiler-Unions - node (v8.9.0, x86)
Memory used 128,159k (± 0.03%) 128,159k (± 0.02%) +0k (+ 0.00%) 128,101k 128,226k
Parse Time 0.96s (± 0.90%) 0.96s (± 0.78%) -0.01s (- 0.52%) 0.95s 0.98s
Bind Time 0.49s (± 1.21%) 0.50s (± 1.34%) +0.00s (+ 0.40%) 0.49s 0.52s
Check Time 13.91s (± 0.59%) 13.94s (± 0.19%) +0.03s (+ 0.20%) 13.87s 13.98s
Emit Time 2.62s (± 1.16%) 2.64s (± 1.14%) +0.02s (+ 0.88%) 2.60s 2.73s
Total Time 17.99s (± 0.45%) 18.04s (± 0.26%) +0.05s (+ 0.27%) 17.95s 18.15s
Monaco - node (v8.9.0, x86)
Memory used 203,290k (± 0.01%) 203,271k (± 0.03%) -19k (- 0.01%) 203,164k 203,423k
Parse Time 1.97s (± 1.01%) 1.98s (± 1.54%) +0.00s (+ 0.15%) 1.94s 2.08s
Bind Time 0.72s (± 0.81%) 0.71s (± 0.83%) -0.00s (- 0.42%) 0.70s 0.73s
Check Time 5.82s (± 1.08%) 5.69s (± 1.65%) -0.13s (- 2.23%) 5.50s 5.85s
Emit Time 2.75s (± 2.27%) 2.91s (± 4.69%) +0.16s (+ 6.01%) 2.71s 3.18s
Total Time 11.26s (± 0.32%) 11.30s (± 0.63%) +0.04s (+ 0.32%) 11.19s 11.52s
TFS - node (v8.9.0, x86)
Memory used 177,643k (± 0.02%) 177,631k (± 0.02%) -12k (- 0.01%) 177,594k 177,748k
Parse Time 1.63s (± 1.37%) 1.59s (± 0.80%) -0.04s (- 2.21%) 1.57s 1.64s
Bind Time 0.65s (± 0.89%) 0.65s (± 0.73%) -0.00s (- 0.46%) 0.64s 0.66s
Check Time 4.86s (± 0.65%) 4.87s (± 0.40%) +0.01s (+ 0.21%) 4.83s 4.91s
Emit Time 2.81s (± 1.11%) 2.85s (± 1.06%) +0.03s (+ 1.17%) 2.80s 2.95s
Total Time 9.95s (± 0.57%) 9.96s (± 0.25%) +0.00s (+ 0.04%) 9.92s 10.03s
material-ui - node (v8.9.0, x86)
Memory used 279,869k (± 0.01%) 279,850k (± 0.01%) -19k (- 0.01%) 279,798k 279,969k
Parse Time 2.55s (± 1.09%) 2.55s (± 0.84%) -0.01s (- 0.31%) 2.50s 2.60s
Bind Time 0.71s (± 4.56%) 0.71s (± 5.11%) -0.01s (- 1.12%) 0.68s 0.85s
Check Time 16.69s (± 0.95%) 16.66s (± 1.00%) -0.03s (- 0.19%) 16.33s 16.98s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 19.96s (± 0.84%) 19.91s (± 0.83%) -0.04s (- 0.22%) 19.56s 20.27s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-197-generic
Architecturex64
Available Memory16 GB
Available Memory10 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Compiler-Unions - node (v10.16.3, x64)
  • Compiler-Unions - node (v12.1.0, x64)
  • Compiler-Unions - node (v8.9.0, x64)
  • Compiler-Unions - node (v8.9.0, x86)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
  • material-ui - node (v10.16.3, x64)
  • material-ui - node (v12.1.0, x64)
  • material-ui - node (v8.9.0, x64)
  • material-ui - node (v8.9.0, x86)
Benchmark Name Iterations
Current 39060 10
Baseline master 10

Copy link
Member

@sandersn sandersn left a comment

Choose a reason for hiding this comment

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

Performance differences are just noise.

Thanks for your patience and perseverance on this @Zzzen!

@sandersn sandersn merged commit 422fd19 into microsoft:master Dec 15, 2020
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
Archived in project
Development

Successfully merging this pull request may close these issues.

Spelling correction fixes should not be case-agnostic for two equally weighted options
4 participants