Slow IntelliSense with react-hook-form resolvers on commands `completionInfo`, `completionEntryDetails`, and, `encodedSemanticClassifications-full`
See original GitHub issueBug Report
When adding react-hook-form with their resolver library and zod, the IntelliSense time blows up on three commands: completionInfo
, completionEntryDetails
, and, encodedSemanticClassifications-full
.
Before adding the resolver the logs output:
Info 139 [22:19:17.358] getCompletionData: Get current token: 0.021499991416931152
Info 140 [22:19:17.358] getCompletionData: Is inside comment: 0.057999998331069946
Info 141 [22:19:17.358] getCompletionData: Get previous token: 0.05949999392032623
Info 142 [22:19:17.358] getCompletionsAtPosition: isCompletionListBlocker: 0.26919999718666077
Info 143 [22:19:17.369] getExportInfoMap: cache miss or empty; calculating new results
Info 144 [22:19:17.382] getExportInfoMap: done in 19.083700001239777 ms
Info 145 [22:19:17.394] collectAutoImports: resolved 4 module specifiers, plus 0 ambient and -3 from cache
Info 146 [22:19:17.394] collectAutoImports: response is complete
Info 147 [22:19:17.394] collectAutoImports: 4.513700008392334
Info 148 [22:19:17.394] getCompletionData: Semantic work: 35.378199994564056
Info 149 [22:19:17.413] getCompletionsAtPosition: getCompletionEntriesFromSymbols: 19.212099999189377
Perf 150 [22:19:17.422] 27::completionInfo: elapsed time (in milliseconds) 70.9448
Info 159 [22:19:17.525] getCompletionData: Get current token: 0.03389999270439148
Info 160 [22:19:17.525] getCompletionData: Is inside comment: 0.008000001311302185
Info 161 [22:19:17.526] getCompletionData: Get previous token: 0.07129999995231628
Info 162 [22:19:17.526] getCompletionsAtPosition: isCompletionListBlocker: 0.010899990797042847
Info 163 [22:19:17.528] getCompletionData: Semantic work: 2.452999994158745
Perf 164 [22:19:17.732] 29::completionEntryDetails: elapsed time (in milliseconds) 212.3927
Perf 179 [22:19:17.974] 34::encodedSemanticClassifications-full: elapsed time (in milliseconds) 163.9209
After adding the resolver the logs output:
Info 323 [22:22:49.786] getCompletionData: Get current token: 0.04549999535083771
Info 324 [22:22:49.786] getCompletionData: Is inside comment: 0.009299993515014648
Info 325 [22:22:49.786] getCompletionData: Get previous token: 0.12800000607967377
Info 326 [22:22:49.787] getCompletionsAtPosition: isCompletionListBlocker: 0.23919999599456787
Info 327 [22:22:49.803] getExportInfoMap: cache hit
Info 328 [22:22:49.815] collectAutoImports: resolved 7 module specifiers, plus 0 ambient and -38 from cache
Info 329 [22:22:49.815] collectAutoImports: response is complete
Info 330 [22:22:49.815] collectAutoImports: 6.50730000436306
Info 331 [22:22:49.815] getCompletionData: Semantic work: 28.06919999420643
Info 332 [22:22:50.599] getCompletionsAtPosition: getCompletionEntriesFromSymbols: 14.070700004696846
Perf 333 [22:22:50.602] 74::completionInfo: elapsed time (in milliseconds) 822.7960
Info 344 [22:22:50.762] getCompletionData: Get current token: 0.05060000717639923
Info 345 [22:22:50.762] getCompletionData: Is inside comment: 0.010499998927116394
Info 346 [22:22:50.762] getCompletionData: Get previous token: 0.10969999432563782
Info 347 [22:22:50.762] getCompletionsAtPosition: isCompletionListBlocker: 0.008100003004074097
Info 348 [22:22:50.764] getCompletionData: Semantic work: 1.965599998831749
Perf 349 [22:22:51.360] 83::completionEntryDetails: elapsed time (in milliseconds) 598.5825
Perf 444 [22:22:59.443] 108::encodedSemanticClassifications-full: elapsed time (in milliseconds) 670.2304
What seems to be an identical issue was previously reported in a now closed ticket (https://github.com/microsoft/TypeScript/issues/44851).
🔎 Search Terms
🕗 Version & Regression Information
As noted in the ticket Typescript 4.3 introduced the regression. When downgrading to Typescript 4.2, I do not see this issue. The issue persists when using the PR (https://github.com/microsoft/TypeScript/pull/46429) that closed the previously reported issue (https://github.com/microsoft/TypeScript/issues/44851). The PR landed in Typescript 4.5.1-rc.
⏯ Playground Link
Example repo can be found:
https://github.com/JSin/type-resolve-bug
💻 Code
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod/dist/zod";
import { z } from "zod";
const schema = z.object({
first: z.string().nonempty(),
second: z.number().gte(0),
});
const Index = () => {
/*
If you were to pass no parameters to useForm, IntelliSense is still quick.
Once you add the object with the resolver property with a zodResolver... IntelliSense speed blows up.
*/
const { register } = useForm<z.infer<typeof schema>>({
resolver: zodResolver(schema),
});
};
🙁 Actual behavior
Extremely Slow IntelliSense
🙂 Expected behavior
Fast IntelliSense
Issue Analytics
- State:
- Created 2 years ago
- Reactions:4
- Comments:5 (3 by maintainers)
No, 800ms is pretty bad for
completionEntryDetails
, it’s worth a look. Thanks!Apologies that is my misunderstanding with the commands. The “signature help” perf log is always sub 10 ms so I didn’t see it as a culprit.
For
completionInfo
, the subsequent calls are fast and only the first time was it slow.completionEntryDetails
andencodedSemanticClassifications-full
calls are still around 800 ms in the repo (around 150 ms in 4.2.4).The detailed instructions:
(
Exactly what I noticed as the problem was the signature helper above taking a long time to show (4.4.4 could take seconds) which previously in 4.2.4 felt immediate. Honestly 800 ms isn’t the end of the world and this issue was greatly improved in 4.5.1-rc. Let me know your thoughts if I am being nitpicky here.