@@ -61,6 +61,7 @@ from typing import ( # noqa: Y022
6161from typing_extensions import ( # noqa: Y023
6262 Concatenate ,
6363 Literal ,
64+ LiteralString ,
6465 ParamSpec ,
6566 Self ,
6667 TypeAlias ,
@@ -434,19 +435,31 @@ class str(Sequence[str]):
434435 def __new__ (cls , object : object = ...) -> Self : ...
435436 @overload
436437 def __new__ (cls , object : ReadableBuffer , encoding : str = ..., errors : str = ...) -> Self : ...
438+ @overload
439+ def capitalize (self : LiteralString ) -> LiteralString : ...
440+ @overload
437441 def capitalize (self ) -> str : ... # type: ignore[misc]
442+ @overload
443+ def casefold (self : LiteralString ) -> LiteralString : ...
444+ @overload
438445 def casefold (self ) -> str : ... # type: ignore[misc]
446+ @overload
447+ def center (self : LiteralString , __width : SupportsIndex , __fillchar : LiteralString = " " ) -> LiteralString : ...
448+ @overload
439449 def center (self , __width : SupportsIndex , __fillchar : str = " " ) -> str : ... # type: ignore[misc]
440450 def count (self , x : str , __start : SupportsIndex | None = ..., __end : SupportsIndex | None = ...) -> int : ...
441451 def encode (self , encoding : str = "utf-8" , errors : str = "strict" ) -> bytes : ...
442452 def endswith (
443453 self , __suffix : str | tuple [str , ...], __start : SupportsIndex | None = ..., __end : SupportsIndex | None = ...
444454 ) -> bool : ...
445455 @overload
446- def expandtabs (self : str , tabsize : SupportsIndex = 8 ) -> str : ...
456+ def expandtabs (self : LiteralString , tabsize : SupportsIndex = 8 ) -> LiteralString : ...
447457 @overload
448458 def expandtabs (self , tabsize : SupportsIndex = 8 ) -> str : ... # type: ignore[misc]
449459 def find (self , __sub : str , __start : SupportsIndex | None = ..., __end : SupportsIndex | None = ...) -> int : ...
460+ @overload
461+ def format (self : LiteralString , * args : LiteralString , ** kwargs : LiteralString ) -> LiteralString : ...
462+ @overload
450463 def format (self , * args : object , ** kwargs : object ) -> str : ...
451464 def format_map (self , map : _FormatMapMapping ) -> str : ...
452465 def index (self , __sub : str , __start : SupportsIndex | None = ..., __end : SupportsIndex | None = ...) -> int : ...
@@ -462,32 +475,91 @@ class str(Sequence[str]):
462475 def isspace (self ) -> bool : ...
463476 def istitle (self ) -> bool : ...
464477 def isupper (self ) -> bool : ...
478+ @overload
479+ def join (self : LiteralString , __iterable : Iterable [LiteralString ]) -> LiteralString : ...
480+ @overload
465481 def join (self , __iterable : Iterable [str ]) -> str : ... # type: ignore[misc]
482+ @overload
483+ def ljust (self : LiteralString , __width : SupportsIndex , __fillchar : LiteralString = " " ) -> LiteralString : ...
484+ @overload
466485 def ljust (self , __width : SupportsIndex , __fillchar : str = " " ) -> str : ... # type: ignore[misc]
486+ @overload
487+ def lower (self : LiteralString ) -> LiteralString : ...
488+ @overload
467489 def lower (self ) -> str : ... # type: ignore[misc]
490+ @overload
491+ def lstrip (self : LiteralString , __chars : LiteralString | None = None ) -> LiteralString : ...
492+ @overload
468493 def lstrip (self , __chars : str | None = None ) -> str : ... # type: ignore[misc]
494+ @overload
495+ def partition (self : LiteralString , __sep : LiteralString ) -> tuple [LiteralString , LiteralString , LiteralString ]: ...
496+ @overload
469497 def partition (self , __sep : str ) -> tuple [str , str , str ]: ... # type: ignore[misc]
498+ @overload
499+ def replace (
500+ self : LiteralString , __old : LiteralString , __new : LiteralString , __count : SupportsIndex = - 1
501+ ) -> LiteralString : ...
502+ @overload
470503 def replace (self , __old : str , __new : str , __count : SupportsIndex = - 1 ) -> str : ... # type: ignore[misc]
471504 if sys .version_info >= (3 , 9 ):
505+ @overload
506+ def removeprefix (self : LiteralString , __prefix : LiteralString ) -> LiteralString : ...
507+ @overload
472508 def removeprefix (self , __prefix : str ) -> str : ... # type: ignore[misc]
509+ @overload
510+ def removesuffix (self : LiteralString , __suffix : LiteralString ) -> LiteralString : ...
511+ @overload
473512 def removesuffix (self , __suffix : str ) -> str : ... # type: ignore[misc]
474513
475514 def rfind (self , __sub : str , __start : SupportsIndex | None = ..., __end : SupportsIndex | None = ...) -> int : ...
476515 def rindex (self , __sub : str , __start : SupportsIndex | None = ..., __end : SupportsIndex | None = ...) -> int : ...
516+ @overload
517+ def rjust (self : LiteralString , __width : SupportsIndex , __fillchar : LiteralString = " " ) -> LiteralString : ...
518+ @overload
477519 def rjust (self , __width : SupportsIndex , __fillchar : str = " " ) -> str : ... # type: ignore[misc]
520+ @overload
521+ def rpartition (self : LiteralString , __sep : LiteralString ) -> tuple [LiteralString , LiteralString , LiteralString ]: ...
522+ @overload
478523 def rpartition (self , __sep : str ) -> tuple [str , str , str ]: ... # type: ignore[misc]
524+ @overload
525+ def rsplit (self : LiteralString , sep : LiteralString | None = None , maxsplit : SupportsIndex = - 1 ) -> list [LiteralString ]: ...
526+ @overload
479527 def rsplit (self , sep : str | None = None , maxsplit : SupportsIndex = - 1 ) -> list [str ]: ... # type: ignore[misc]
528+ @overload
529+ def rstrip (self : LiteralString , __chars : LiteralString | None = None ) -> LiteralString : ...
530+ @overload
480531 def rstrip (self , __chars : str | None = None ) -> str : ... # type: ignore[misc]
532+ @overload
533+ def split (self : LiteralString , sep : LiteralString | None = None , maxsplit : SupportsIndex = - 1 ) -> list [LiteralString ]: ...
534+ @overload
481535 def split (self , sep : str | None = None , maxsplit : SupportsIndex = - 1 ) -> list [str ]: ... # type: ignore[misc]
536+ @overload
537+ def splitlines (self : LiteralString , keepends : bool = False ) -> list [LiteralString ]: ...
538+ @overload
482539 def splitlines (self , keepends : bool = False ) -> list [str ]: ... # type: ignore[misc]
483540 def startswith (
484541 self , __prefix : str | tuple [str , ...], __start : SupportsIndex | None = ..., __end : SupportsIndex | None = ...
485542 ) -> bool : ...
543+ @overload
544+ def strip (self : LiteralString , __chars : LiteralString | None = None ) -> LiteralString : ...
545+ @overload
486546 def strip (self , __chars : str | None = None ) -> str : ... # type: ignore[misc]
547+ @overload
548+ def swapcase (self : LiteralString ) -> LiteralString : ...
549+ @overload
487550 def swapcase (self ) -> str : ... # type: ignore[misc]
551+ @overload
552+ def title (self : LiteralString ) -> LiteralString : ...
553+ @overload
488554 def title (self ) -> str : ... # type: ignore[misc]
489555 def translate (self , __table : _TranslateTable ) -> str : ...
556+ @overload
557+ def upper (self : LiteralString ) -> LiteralString : ...
558+ @overload
490559 def upper (self ) -> str : ... # type: ignore[misc]
560+ @overload
561+ def zfill (self : LiteralString , __width : SupportsIndex ) -> LiteralString : ...
562+ @overload
491563 def zfill (self , __width : SupportsIndex ) -> str : ... # type: ignore[misc]
492564 @staticmethod
493565 @overload
@@ -498,6 +570,9 @@ class str(Sequence[str]):
498570 @staticmethod
499571 @overload
500572 def maketrans (__x : str , __y : str , __z : str ) -> dict [int , int | None ]: ...
573+ @overload
574+ def __add__ (self : LiteralString , __value : LiteralString ) -> LiteralString : ...
575+ @overload
501576 def __add__ (self , __value : str ) -> str : ... # type: ignore[misc]
502577 # Incompatible with Sequence.__contains__
503578 def __contains__ (self , __key : str ) -> bool : ... # type: ignore[override]
@@ -506,13 +581,25 @@ class str(Sequence[str]):
506581 def __getitem__ (self , __key : SupportsIndex | slice ) -> str : ...
507582 def __gt__ (self , __value : str ) -> bool : ...
508583 def __hash__ (self ) -> int : ...
584+ @overload
585+ def __iter__ (self : LiteralString ) -> Iterator [LiteralString ]: ...
586+ @overload
509587 def __iter__ (self ) -> Iterator [str ]: ... # type: ignore[misc]
510588 def __le__ (self , __value : str ) -> bool : ...
511589 def __len__ (self ) -> int : ...
512590 def __lt__ (self , __value : str ) -> bool : ...
591+ @overload
592+ def __mod__ (self : LiteralString , __value : LiteralString | tuple [LiteralString , ...]) -> LiteralString : ...
593+ @overload
513594 def __mod__ (self , __value : Any ) -> str : ...
595+ @overload
596+ def __mul__ (self : LiteralString , __value : SupportsIndex ) -> LiteralString : ...
597+ @overload
514598 def __mul__ (self , __value : SupportsIndex ) -> str : ... # type: ignore[misc]
515599 def __ne__ (self , __value : object ) -> bool : ...
600+ @overload
601+ def __rmul__ (self : LiteralString , __value : SupportsIndex ) -> LiteralString : ...
602+ @overload
516603 def __rmul__ (self , __value : SupportsIndex ) -> str : ... # type: ignore[misc]
517604 def __getnewargs__ (self ) -> tuple [str ]: ...
518605
@@ -1593,7 +1680,7 @@ _SupportsSumNoDefaultT = TypeVar("_SupportsSumNoDefaultT", bound=_SupportsSumWit
15931680# without creating many false-positive errors (see #7578).
15941681# Instead, we special-case the most common examples of this: bool and literal integers.
15951682@overload
1596- def sum (__iterable : Iterable [bool ], start : int = 0 ) -> int : ... # type: ignore[overload-overlap]
1683+ def sum (__iterable : Iterable [bool | _LiteralInteger ], start : int = 0 ) -> int : ... # type: ignore[overload-overlap]
15971684@overload
15981685def sum (__iterable : Iterable [_SupportsSumNoDefaultT ]) -> _SupportsSumNoDefaultT | Literal [0 ]: ...
15991686@overload
0 commit comments