TypeScript icon indicating copy to clipboard operation
TypeScript copied to clipboard

Assert in assignParameterType during completionEntryDetails in reduxjs/redux-devtools

Open amcasey opened this issue 3 years ago • 3 comments

reduxjs/redux-devtools "Parameter symbol already has a cached type [any] which differs from newly assigned type [an empty array/tuple, AFAICT]" while asking about the completion entry details of the rest parameter args here.

Originally posted by @amcasey in https://github.com/microsoft/TypeScript/issues/50835#issuecomment-1252997885

amcasey avatar Sep 20 '22 23:09 amcasey

reduxjs/redux-devtools

:warning: Note that typescript-4.8.3 also had errors :warning:
Req #1557 - completionEntryDetails
    at assignParameterType (/typescript-4.8.3/lib/tsserver.js:78572:26)
    at assignContextualParameterTypes (/typescript-4.8.3/lib/tsserver.js:78545:21)
    at contextuallyCheckFunctionExpressionOrObjectLiteralMethod (/typescript-4.8.3/lib/tsserver.js:78991:29)
    at checkFunctionExpressionOrObjectLiteralMethod (/typescript-4.8.3/lib/tsserver.js:78961:13)
    at checkExpressionWorker (/typescript-4.8.3/lib/tsserver.js:80771:28)
    at checkExpression (/typescript-4.8.3/lib/tsserver.js:80666:38)
    at checkExpressionWithContextualType (/typescript-4.8.3/lib/tsserver.js:80296:28)
    at getSignatureApplicabilityError (/typescript-4.8.3/lib/tsserver.js:76566:35)
    at chooseOverload (/typescript-4.8.3/lib/tsserver.js:77140:29)
    at resolveCall (/typescript-4.8.3/lib/tsserver.js:76944:26)
    at resolveCallExpression (/typescript-4.8.3/lib/tsserver.js:77358:20)
    at resolveSignature (/typescript-4.8.3/lib/tsserver.js:77741:28)
    at getResolvedSignature (/typescript-4.8.3/lib/tsserver.js:77772:26)
    at getContextualTypeForArgumentAtIndex (/typescript-4.8.3/lib/tsserver.js:73394:118)
    at getContextualTypeForArgument (/typescript-4.8.3/lib/tsserver.js:73384:50)
    at getContextualType (/typescript-4.8.3/lib/tsserver.js:73814:28)
    at getApparentTypeOfContextualType (/typescript-4.8.3/lib/tsserver.js:73723:17)
    at getContextualSignature (/typescript-4.8.3/lib/tsserver.js:74108:24)
    at getContextuallyTypedParameterType (/typescript-4.8.3/lib/tsserver.js:73215:39)
    at getTypeForVariableLikeDeclaration (/typescript-4.8.3/lib/tsserver.js:56587:141)
    at getWidenedTypeForVariableLikeDeclaration (/typescript-4.8.3/lib/tsserver.js:57072:56)
    at getTypeOfVariableOrParameterOrPropertyWorker (/typescript-4.8.3/lib/tsserver.js:57230:24)
    at getTypeOfVariableOrParameterOrProperty (/typescript-4.8.3/lib/tsserver.js:57118:28)
    at getTypeOfSymbol (/typescript-4.8.3/lib/tsserver.js:57490:24)
    at getNonMissingTypeOfSymbol (/typescript-4.8.3/lib/tsserver.js:57507:38)
    at getTypeOfSymbolAtLocation (/typescript-4.8.3/lib/tsserver.js:72198:20)
    at Object.getTypeOfSymbolAtLocation (/typescript-4.8.3/lib/tsserver.js:48802:35)
    at Object.getSymbolDisplayPartsDocumentationAndSymbolKind (/typescript-4.8.3/lib/tsserver.js:146861:97)
    at /typescript-4.8.3/lib/tsserver.js:134856:41
    at Object.runWithCancellationToken (/typescript-4.8.3/lib/tsserver.js:49088:28)
    at createCompletionDetailsForSymbol (/typescript-4.8.3/lib/tsserver.js:134855:30)
    at Object.getCompletionEntryDetails (/typescript-4.8.3/lib/tsserver.js:134837:28)
    at Object.getCompletionEntryDetails (/typescript-4.8.3/lib/tsserver.js:167306:35)
    at /typescript-4.8.3/lib/tsserver.js:179480:57
    at Object.mapDefined (/typescript-4.8.3/lib/tsserver.js:622:30)
    at IOSession.Session.getCompletionEntryDetails (/typescript-4.8.3/lib/tsserver.js:179478:33)
    at Session.handlers.ts.Map.ts.getEntries._a.<computed> (/typescript-4.8.3/lib/tsserver.js:178115:61)
    at /typescript-4.8.3/lib/tsserver.js:180166:96
    at IOSession.Session.executeWithRequestId (/typescript-4.8.3/lib/tsserver.js:180157:28)
    at IOSession.Session.executeCommand (/typescript-4.8.3/lib/tsserver.js:180166:41)
    at IOSession.Session.onMessage (/typescript-4.8.3/lib/tsserver.js:180194:35)
    at Interface.<anonymous> (/typescript-4.8.3/lib/tsserver.js:184330:31)
Req #1557 - completionEntryDetails
    at assignParameterType (/typescript-4.9.0-dev.20220918/lib/tsserver.js:79157:26)
    at assignContextualParameterTypes (/typescript-4.9.0-dev.20220918/lib/tsserver.js:79130:21)
    at contextuallyCheckFunctionExpressionOrObjectLiteralMethod (/typescript-4.9.0-dev.20220918/lib/tsserver.js:79576:29)
    at checkFunctionExpressionOrObjectLiteralMethod (/typescript-4.9.0-dev.20220918/lib/tsserver.js:79546:13)
    at checkExpressionWorker (/typescript-4.9.0-dev.20220918/lib/tsserver.js:81351:28)
    at checkExpression (/typescript-4.9.0-dev.20220918/lib/tsserver.js:81246:38)
    at checkExpressionWithContextualType (/typescript-4.9.0-dev.20220918/lib/tsserver.js:80876:28)
    at getSignatureApplicabilityError (/typescript-4.9.0-dev.20220918/lib/tsserver.js:77138:35)
    at chooseOverload (/typescript-4.9.0-dev.20220918/lib/tsserver.js:77712:29)
    at resolveCall (/typescript-4.9.0-dev.20220918/lib/tsserver.js:77516:26)
    at resolveCallExpression (/typescript-4.9.0-dev.20220918/lib/tsserver.js:77930:20)
    at resolveSignature (/typescript-4.9.0-dev.20220918/lib/tsserver.js:78313:28)
    at getResolvedSignature (/typescript-4.9.0-dev.20220918/lib/tsserver.js:78344:26)
    at getContextualTypeForArgumentAtIndex (/typescript-4.9.0-dev.20220918/lib/tsserver.js:73899:118)
    at getContextualTypeForArgument (/typescript-4.9.0-dev.20220918/lib/tsserver.js:73889:50)
    at getContextualType (/typescript-4.9.0-dev.20220918/lib/tsserver.js:74321:28)
    at getApparentTypeOfContextualType (/typescript-4.9.0-dev.20220918/lib/tsserver.js:74230:17)
    at getContextualSignature (/typescript-4.9.0-dev.20220918/lib/tsserver.js:74624:24)
    at getContextuallyTypedParameterType (/typescript-4.9.0-dev.20220918/lib/tsserver.js:73720:39)
    at getTypeForVariableLikeDeclaration (/typescript-4.9.0-dev.20220918/lib/tsserver.js:57046:141)
    at getWidenedTypeForVariableLikeDeclaration (/typescript-4.9.0-dev.20220918/lib/tsserver.js:57535:56)
    at getTypeOfVariableOrParameterOrPropertyWorker (/typescript-4.9.0-dev.20220918/lib/tsserver.js:57693:24)
    at getTypeOfVariableOrParameterOrProperty (/typescript-4.9.0-dev.20220918/lib/tsserver.js:57581:28)
    at getTypeOfSymbol (/typescript-4.9.0-dev.20220918/lib/tsserver.js:57967:24)
    at getNonMissingTypeOfSymbol (/typescript-4.9.0-dev.20220918/lib/tsserver.js:57984:38)
    at getTypeOfSymbolAtLocation (/typescript-4.9.0-dev.20220918/lib/tsserver.js:72702:20)
    at Object.getTypeOfSymbolAtLocation (/typescript-4.9.0-dev.20220918/lib/tsserver.js:49246:35)
    at Object.getSymbolDisplayPartsDocumentationAndSymbolKind (/typescript-4.9.0-dev.20220918/lib/tsserver.js:147888:97)
    at /typescript-4.9.0-dev.20220918/lib/tsserver.js:135868:41
    at Object.runWithCancellationToken (/typescript-4.9.0-dev.20220918/lib/tsserver.js:49534:28)
    at createCompletionDetailsForSymbol (/typescript-4.9.0-dev.20220918/lib/tsserver.js:135867:30)
    at Object.getCompletionEntryDetails (/typescript-4.9.0-dev.20220918/lib/tsserver.js:135849:28)
    at Object.getCompletionEntryDetails (/typescript-4.9.0-dev.20220918/lib/tsserver.js:168426:35)
    at /typescript-4.9.0-dev.20220918/lib/tsserver.js:180600:57
    at Object.mapDefined (/typescript-4.9.0-dev.20220918/lib/tsserver.js:621:30)
    at IOSession.Session.getCompletionEntryDetails (/typescript-4.9.0-dev.20220918/lib/tsserver.js:180598:33)
    at Session.handlers.ts.Map.ts.getEntries._a.<computed> (/typescript-4.9.0-dev.20220918/lib/tsserver.js:179235:61)
    at /typescript-4.9.0-dev.20220918/lib/tsserver.js:181286:96
    at IOSession.Session.executeWithRequestId (/typescript-4.9.0-dev.20220918/lib/tsserver.js:181277:28)
    at IOSession.Session.executeCommand (/typescript-4.9.0-dev.20220918/lib/tsserver.js:181286:41)
    at IOSession.Session.onMessage (/typescript-4.9.0-dev.20220918/lib/tsserver.js:181314:35)
    at Interface.<anonymous> (/typescript-4.9.0-dev.20220918/lib/tsserver.js:185436:31)

Last few requests

{"seq":1554,"type":"request","command":"definitionAndBoundSpan","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","line":202,"offset":41}}
{"seq":1555,"type":"request","command":"definitionAndBoundSpan","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","line":222,"offset":1}}
{"seq":1556,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","line":222,"offset":5,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}
{"seq":1557,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","line":222,"offset":5,"entryNames":["args"]}}

Repro Steps

  1. git clone https://github.com/reduxjs/redux-devtools --recurse-submodules
  2. In dir redux-devtools, run git reset --hard 418a90914417bf3a31fc5fa4b518ae055673aca7
  3. Install packages (exact steps below but probably easier to follow repo readme)
    1. In dir redux-devtools/extension/examples/counter, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    2. In dir redux-devtools/extension/examples/react-counter-messaging, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    3. In dir redux-devtools/extension/examples/router, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    4. In dir redux-devtools/extension/examples/saga-counter, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    5. In dir redux-devtools/extension/examples/todomvc, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    6. In dir redux-devtools/extension, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    7. In dir redux-devtools, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    8. In dir redux-devtools/packages/d3-state-visualizer/examples/tree, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    9. In dir redux-devtools/packages/d3-state-visualizer, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    10. In dir redux-devtools/packages/d3tooltip, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    11. In dir redux-devtools/packages/map2tree, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    12. In dir redux-devtools/packages/react-base16-styling, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    13. In dir redux-devtools/packages/react-dock/demo, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    14. In dir redux-devtools/packages/react-dock, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    15. In dir redux-devtools/packages/react-json-tree/examples, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    16. In dir redux-devtools/packages/react-json-tree, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    17. In dir redux-devtools/packages/redux-devtools-app, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    18. In dir redux-devtools/packages/redux-devtools-chart-monitor, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    19. In dir redux-devtools/packages/redux-devtools-cli/app, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    20. In dir redux-devtools/packages/redux-devtools-cli, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    21. In dir redux-devtools/packages/redux-devtools-dock-monitor, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    22. In dir redux-devtools/packages/redux-devtools-extension, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    23. In dir redux-devtools/packages/redux-devtools-inspector-monitor-test-tab/demo, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    24. In dir redux-devtools/packages/redux-devtools-inspector-monitor-test-tab, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    25. In dir redux-devtools/packages/redux-devtools-inspector-monitor-trace-tab, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    26. In dir redux-devtools/packages/redux-devtools-inspector-monitor/demo, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    27. In dir redux-devtools/packages/redux-devtools-inspector-monitor, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    28. In dir redux-devtools/packages/redux-devtools-instrument, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    29. In dir redux-devtools/packages/redux-devtools-log-monitor, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    30. In dir redux-devtools/packages/redux-devtools-remote/examples/counter, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    31. In dir redux-devtools/packages/redux-devtools-remote/examples/node-counter, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    32. In dir redux-devtools/packages/redux-devtools-remote/examples/router, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    33. In dir redux-devtools/packages/redux-devtools-remote/examples/todomvc, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    34. In dir redux-devtools/packages/redux-devtools-remote/examples/toggle-monitoring, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    35. In dir redux-devtools/packages/redux-devtools-remote, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    36. In dir redux-devtools/packages/redux-devtools-rtk-query-monitor/demo, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    37. In dir redux-devtools/packages/redux-devtools-rtk-query-monitor, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    38. In dir redux-devtools/packages/redux-devtools-serialize, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    39. In dir redux-devtools/packages/redux-devtools-slider-monitor/examples/todomvc, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    40. In dir redux-devtools/packages/redux-devtools-slider-monitor, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    41. In dir redux-devtools/packages/redux-devtools-ui, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    42. In dir redux-devtools/packages/redux-devtools-utils, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    43. In dir redux-devtools/packages/redux-devtools/examples/counter, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    44. In dir redux-devtools/packages/redux-devtools/examples/todomvc, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
    45. In dir redux-devtools/packages/redux-devtools, run pnpm install --no-frozen-lockfile --prefer-offline --ignore-scripts --reporter=silent
  4. Download RepoResults4/reduxjs.redux-devtools.replay.txt from the artifact folder
  5. npm install --no-save @typescript/server-replay
  6. npx tsreplay ./redux-devtools ./reduxjs.redux-devtools.replay.txt path/to/tsserver.js

amcasey avatar Sep 20 '22 23:09 amcasey

This is all the replay file requires to reproduce the issue

{"rootDirPlaceholder":"@PROJECT_ROOT@","serverArgs":["--disableAutomaticTypingAcquisition"]}
{"seq":1,"type":"request","command":"configure","arguments":{"preferences":{"includePackageJsonAutoImports":"off"},"watchOptions":{"excludeDirectories":["**/node_modules"]}}}
{"seq":1537,"type":"request","command":"updateOpen","arguments":{"changedFiles":[],"closedFiles":[],"openFiles":[{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","projectRootPath":"@PROJECT_ROOT@"}]}}
{"seq":1557,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","line":222,"offset":5,"entryNames":["args"]}}

DanielRosenwasser avatar Sep 22 '22 08:09 DanielRosenwasser

You can reliably get it with quick-info too

{"rootDirPlaceholder":"@PROJECT_ROOT@","serverArgs":["--disableAutomaticTypingAcquisition"]}
{"seq":1,"type":"request","command":"configure","arguments":{"preferences":{"includePackageJsonAutoImports":"off"},"watchOptions":{"excludeDirectories":["**/node_modules"]}}}
{"seq":1537,"type":"request","command":"updateOpen","arguments":{"changedFiles":[],"closedFiles":[],"openFiles":[{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","projectRootPath":"@PROJECT_ROOT@"}]}}
{"seq":1557,"type":"request","command":"quickinfo","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","line":254,"offset":57}}

and here's how you avoid getting the error

{"rootDirPlaceholder":"@PROJECT_ROOT@","serverArgs":["--disableAutomaticTypingAcquisition"]}
{"seq":1,"type":"request","command":"configure","arguments":{"preferences":{"includePackageJsonAutoImports":"off"},"watchOptions":{"excludeDirectories":["**/node_modules"]}}}
{"seq":1537,"type":"request","command":"updateOpen","arguments":{"changedFiles":[],"closedFiles":[],"openFiles":[{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","projectRootPath":"@PROJECT_ROOT@"}]}}
{"seq":1556,"type":"request","command":"semanticDiagnosticsSync","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts"}}
{"seq":1557,"type":"request","command":"quickinfo","arguments":{"file":"@PROJECT_ROOT@/packages/react-base16-styling/src/index.ts","line":254,"offset":57}}

DanielRosenwasser avatar Sep 22 '22 09:09 DanielRosenwasser