microsoft / pyright

Static Type Checker for Python
Other
13.12k stars 1.4k forks source link

Internal error when passing empty tuple to ParamSpec inside TypeAlias #8694

Closed Zomatree closed 1 month ago

Zomatree commented 1 month ago

Describe the bug Pyright has an internal error in the provided code.

Code or Screenshots

from typing import Any, Callable, ParamSpec, TypeAlias

P = ParamSpec("P")

Component: TypeAlias = Callable[P, Any]

Test: Component[()]

Full error:

An internal error occurred while type checking file "/Users/angelo/t.py": TypeError: Cannot read properties of undefined (reading 'node')
    at createSpecializedTypeAlias (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:6817:43)
    at getTypeOfIndexWithBaseType (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:7053:33)
    at getTypeOfIndex (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:6586:33)
    at getTypeOfExpressionCore (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1170:30)
    at getTypeOfExpression (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1079:26)
    at getTypeOfExpressionExpectingType (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:20576:16)
    at getTypeOfAnnotation (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1779:32)
    at getTypeOfParamAnnotation (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1738:16)
    at forEach (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17969:41)
    at Array.forEach (<anonymous>)
    at cb (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17936:27)
    at invalidateTypeCacheIfCanceled (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/cancellationUtils.ts:32:16)
    at getTypeOfFunctionPredecorated (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17876:16)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17732:28)
    at a.getTypeOfFunction [as timeOperation] (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/timing.ts:40:20)
    at K.visitFunction (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:411:52)
    at K.visit (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/parseTreeWalker.ts:451:29)
    at K.visitNode (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/parseTreeWalker.ts:933:21)
    at K.walk (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/parseTreeWalker.ts:915:37)
    at K.walk (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:284:19)
    at K._walkStatementsAndReportUnreachable (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:2850:18)
    at K.check (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:265:14)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/sourceFile.ts:898:29)
    at a.timeOperation (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/timing.ts:44:28)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/sourceFile.ts:889:45)
    at t.LogTracker.log (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/logTracker.ts:49:20)
    at t.SourceFile.check (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/sourceFile.ts:887:33)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:1939:44)
    at t.LogTracker.log (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/logTracker.ts:49:20)
    at N._checkTypes (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:1895:33)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:656:30)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:647:20)
    at a.runWithCancellationToken [as timeOperation] (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/timing.ts:44:28)
    at N._runEvaluatorWithCancellationToken (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:1045:41)
    at N.analyze (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:620:21)
    at analyzeProgram (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/analysis.ts:57:33)
    at t.BackgroundAnalysisProgram.startAnalysis (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/backgroundAnalysisProgram.ts:157:16)
    at Timeout._onTimeout (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/service.ts:1757:67)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)
Error performing analysis: TypeError: Cannot read properties of undefined (reading 'node')
    at createSpecializedTypeAlias (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:6817:43)
    at getTypeOfIndexWithBaseType (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:7053:33)
    at getTypeOfIndex (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:6586:33)
    at getTypeOfExpressionCore (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1170:30)
    at getTypeOfExpression (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1079:26)
    at getTypeOfExpressionExpectingType (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:20576:16)
    at getTypeOfAnnotation (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1779:32)
    at getTypeOfParamAnnotation (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:1738:16)
    at forEach (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17969:41)
    at Array.forEach (<anonymous>)
    at cb (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17936:27)
    at invalidateTypeCacheIfCanceled (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/cancellationUtils.ts:32:16)
    at getTypeOfFunctionPredecorated (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17876:16)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:17732:28)
    at a.getTypeOfFunction [as timeOperation] (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/timing.ts:40:20)
    at K.visitFunction (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:411:52)
    at K.visit (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/parseTreeWalker.ts:451:29)
    at K.visitNode (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/parseTreeWalker.ts:933:21)
    at K.walk (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/parseTreeWalker.ts:915:37)
    at K.walk (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:284:19)
    at K._walkStatementsAndReportUnreachable (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:2850:18)
    at K.check (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/checker.ts:265:14)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/sourceFile.ts:898:29)
    at a.timeOperation (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/timing.ts:44:28)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/sourceFile.ts:889:45)
    at t.LogTracker.log (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/logTracker.ts:49:20)
    at t.SourceFile.check (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/sourceFile.ts:887:33)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:1939:44)
    at t.LogTracker.log (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/logTracker.ts:49:20)
    at N._checkTypes (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:1895:33)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:656:30)
    at callback (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/typeEvaluator.ts:647:20)
    at a.runWithCancellationToken [as timeOperation] (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/common/timing.ts:44:28)
    at N._runEvaluatorWithCancellationToken (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:1045:41)
    at N.analyze (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/program.ts:620:21)
    at analyzeProgram (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/analysis.ts:57:33)
    at t.BackgroundAnalysisProgram.startAnalysis (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/backgroundAnalysisProgram.ts:157:16)
    at Timeout._onTimeout (/Users/angelo/.config/yarn/global/node_modules/pyright/dist/pyright-internal/src/analyzer/service.ts:1757:67)
    at listOnTimeout (node:internal/timers:573:17)
    at processTimers (node:internal/timers:514:7)

VS Code extension or command-line pyright 1.1.375

erictraut commented 1 month ago

Thanks for the bug report. This will be addressed in the next release.

erictraut commented 1 month ago

This is addressed in pyright 1.1.376.