diff --git a/packages/pyright-internal/src/analyzer/binder.ts b/packages/pyright-internal/src/analyzer/binder.ts index cb3a56067f21..8a89b87c3786 100644 --- a/packages/pyright-internal/src/analyzer/binder.ts +++ b/packages/pyright-internal/src/analyzer/binder.ts @@ -286,7 +286,7 @@ export class Binder extends ParseTreeWalker { this._addImplicitSymbolToCurrentScope('__loader__', node, 'Any'); this._addImplicitSymbolToCurrentScope('__package__', node, 'str | None'); this._addImplicitSymbolToCurrentScope('__spec__', node, 'Any'); - this._addImplicitSymbolToCurrentScope('__path__', node, 'Iterable[str]'); + this._addImplicitSymbolToCurrentScope('__path__', node, 'MutableSequence[str]'); this._addImplicitSymbolToCurrentScope('__file__', node, 'str'); this._addImplicitSymbolToCurrentScope('__cached__', node, 'str'); this._addImplicitSymbolToCurrentScope('__dict__', node, 'Dict[str, Any]'); diff --git a/packages/pyright-internal/src/analyzer/declaration.ts b/packages/pyright-internal/src/analyzer/declaration.ts index 9b1220eb5cfb..5c3942810f07 100644 --- a/packages/pyright-internal/src/analyzer/declaration.ts +++ b/packages/pyright-internal/src/analyzer/declaration.ts @@ -46,7 +46,14 @@ export const enum DeclarationType { Alias, } -export type IntrinsicType = 'Any' | 'str' | 'str | None' | 'int' | 'Iterable[str]' | 'type[self]' | 'Dict[str, Any]'; +export type IntrinsicType = + | 'Any' + | 'str' + | 'str | None' + | 'int' + | 'MutableSequence[str]' + | 'type[self]' + | 'Dict[str, Any]'; export interface DeclarationBase { // Category of this symbol (function, variable, etc.). diff --git a/packages/pyright-internal/src/analyzer/typeEvaluator.ts b/packages/pyright-internal/src/analyzer/typeEvaluator.ts index 6518996fb5d4..ce1f878ee06c 100644 --- a/packages/pyright-internal/src/analyzer/typeEvaluator.ts +++ b/packages/pyright-internal/src/analyzer/typeEvaluator.ts @@ -22164,11 +22164,11 @@ export function createTypeEvaluator( return { type: intType }; } - if (declaration.intrinsicType === 'Iterable[str]') { - const iterableType = getBuiltInType(declaration.node, 'Iterable'); - if (isInstantiableClass(iterableType)) { + if (declaration.intrinsicType === 'MutableSequence[str]') { + const sequenceType = getBuiltInType(declaration.node, 'MutableSequence'); + if (isInstantiableClass(sequenceType)) { return { - type: ClassType.cloneAsInstance(ClassType.specialize(iterableType, [strType])), + type: ClassType.cloneAsInstance(ClassType.specialize(sequenceType, [strType])), }; } } diff --git a/packages/pyright-internal/src/tests/samples/import1.py b/packages/pyright-internal/src/tests/samples/import1.py index fbf695fc8e59..380c59fd4d31 100644 --- a/packages/pyright-internal/src/tests/samples/import1.py +++ b/packages/pyright-internal/src/tests/samples/import1.py @@ -1,7 +1,7 @@ # This sample tests the type analyzer's handling of the built-in # __import__ function. -reveal_type(__path__, expected_text="Iterable[str]") +reveal_type(__path__, expected_text="MutableSequence[str]") # This should not generate a type error. __path__ = __import__("pkgutil").extend_path(__path__, __name__) diff --git a/packages/pyright-internal/src/tests/samples/module3.py b/packages/pyright-internal/src/tests/samples/module3.py index d58e363ed4b9..818d8d0c50c4 100644 --- a/packages/pyright-internal/src/tests/samples/module3.py +++ b/packages/pyright-internal/src/tests/samples/module3.py @@ -6,7 +6,7 @@ reveal_type(datetime.__loader__, expected_text="Any") reveal_type(datetime.__package__, expected_text="str | None") reveal_type(datetime.__spec__, expected_text="Any") -reveal_type(datetime.__path__, expected_text="Iterable[str]") +reveal_type(datetime.__path__, expected_text="MutableSequence[str]") reveal_type(datetime.__file__, expected_text="str") reveal_type(datetime.__cached__, expected_text="str") reveal_type(datetime.__dict__, expected_text="dict[str, Any]")