@@ -63,6 +63,7 @@ from typing import ( # noqa: Y022
63
63
from typing_extensions import ( # noqa: Y023
64
64
Concatenate ,
65
65
Literal ,
66
+ LiteralString ,
66
67
ParamSpec ,
67
68
Self ,
68
69
TypeAlias ,
@@ -437,16 +438,31 @@ class str(Sequence[str]):
437
438
def __new__ (cls , object : object = ...) -> Self : ...
438
439
@overload
439
440
def __new__ (cls , object : ReadableBuffer , encoding : str = ..., errors : str = ...) -> Self : ...
441
+ @overload
442
+ def capitalize (self : LiteralString ) -> LiteralString : ...
443
+ @overload
440
444
def capitalize (self ) -> str : ... # type: ignore[misc]
445
+ @overload
446
+ def casefold (self : LiteralString ) -> LiteralString : ...
447
+ @overload
441
448
def casefold (self ) -> str : ... # type: ignore[misc]
449
+ @overload
450
+ def center (self : LiteralString , width : SupportsIndex , fillchar : LiteralString = " " , / ) -> LiteralString : ...
451
+ @overload
442
452
def center (self , width : SupportsIndex , fillchar : str = " " , / ) -> str : ... # type: ignore[misc]
443
453
def count (self , sub : str , start : SupportsIndex | None = ..., end : SupportsIndex | None = ..., / ) -> int : ...
444
454
def encode (self , encoding : str = "utf-8" , errors : str = "strict" ) -> bytes : ...
445
455
def endswith (
446
456
self , suffix : str | tuple [str , ...], start : SupportsIndex | None = ..., end : SupportsIndex | None = ..., /
447
457
) -> bool : ...
458
+ @overload
459
+ def expandtabs (self : LiteralString , tabsize : SupportsIndex = 8 ) -> LiteralString : ...
460
+ @overload
448
461
def expandtabs (self , tabsize : SupportsIndex = 8 ) -> str : ... # type: ignore[misc]
449
462
def find (self , sub : str , start : SupportsIndex | None = ..., end : SupportsIndex | None = ..., / ) -> int : ...
463
+ @overload
464
+ def format (self : LiteralString , * args : LiteralString , ** kwargs : LiteralString ) -> LiteralString : ...
465
+ @overload
450
466
def format (self , * args : object , ** kwargs : object ) -> str : ...
451
467
def format_map (self , mapping : _FormatMapMapping , / ) -> str : ...
452
468
def index (self , sub : str , start : SupportsIndex | None = ..., end : SupportsIndex | None = ..., / ) -> int : ...
@@ -462,35 +478,99 @@ class str(Sequence[str]):
462
478
def isspace (self ) -> bool : ...
463
479
def istitle (self ) -> bool : ...
464
480
def isupper (self ) -> bool : ...
481
+ @overload
482
+ def join (self : LiteralString , iterable : Iterable [LiteralString ], / ) -> LiteralString : ...
483
+ @overload
465
484
def join (self , iterable : Iterable [str ], / ) -> str : ... # type: ignore[misc]
485
+ @overload
486
+ def ljust (self : LiteralString , width : SupportsIndex , fillchar : LiteralString = " " , / ) -> LiteralString : ...
487
+ @overload
466
488
def ljust (self , width : SupportsIndex , fillchar : str = " " , / ) -> str : ... # type: ignore[misc]
489
+ @overload
490
+ def lower (self : LiteralString ) -> LiteralString : ...
491
+ @overload
467
492
def lower (self ) -> str : ... # type: ignore[misc]
493
+ @overload
494
+ def lstrip (self : LiteralString , chars : LiteralString | None = None , / ) -> LiteralString : ...
495
+ @overload
468
496
def lstrip (self , chars : str | None = None , / ) -> str : ... # type: ignore[misc]
497
+ @overload
498
+ def partition (self : LiteralString , sep : LiteralString , / ) -> tuple [LiteralString , LiteralString , LiteralString ]: ...
499
+ @overload
469
500
def partition (self , sep : str , / ) -> tuple [str , str , str ]: ... # type: ignore[misc]
470
501
if sys .version_info >= (3 , 13 ):
502
+ @overload
503
+ def replace (
504
+ self : LiteralString , old : LiteralString , new : LiteralString , / , count : SupportsIndex = - 1
505
+ ) -> LiteralString : ...
506
+ @overload
471
507
def replace (self , old : str , new : str , / , count : SupportsIndex = - 1 ) -> str : ... # type: ignore[misc]
472
508
else :
509
+ @overload
510
+ def replace (
511
+ self : LiteralString , old : LiteralString , new : LiteralString , count : SupportsIndex = - 1 , /
512
+ ) -> LiteralString : ...
513
+ @overload
473
514
def replace (self , old : str , new : str , count : SupportsIndex = - 1 , / ) -> str : ... # type: ignore[misc]
474
515
if sys .version_info >= (3 , 9 ):
516
+ @overload
517
+ def removeprefix (self : LiteralString , prefix : LiteralString , / ) -> LiteralString : ...
518
+ @overload
475
519
def removeprefix (self , prefix : str , / ) -> str : ... # type: ignore[misc]
520
+ @overload
521
+ def removesuffix (self : LiteralString , suffix : LiteralString , / ) -> LiteralString : ...
522
+ @overload
476
523
def removesuffix (self , suffix : str , / ) -> str : ... # type: ignore[misc]
477
524
478
525
def rfind (self , sub : str , start : SupportsIndex | None = ..., end : SupportsIndex | None = ..., / ) -> int : ...
479
526
def rindex (self , sub : str , start : SupportsIndex | None = ..., end : SupportsIndex | None = ..., / ) -> int : ...
527
+ @overload
528
+ def rjust (self : LiteralString , width : SupportsIndex , fillchar : LiteralString = " " , / ) -> LiteralString : ...
529
+ @overload
480
530
def rjust (self , width : SupportsIndex , fillchar : str = " " , / ) -> str : ... # type: ignore[misc]
531
+ @overload
532
+ def rpartition (self : LiteralString , sep : LiteralString , / ) -> tuple [LiteralString , LiteralString , LiteralString ]: ...
533
+ @overload
481
534
def rpartition (self , sep : str , / ) -> tuple [str , str , str ]: ... # type: ignore[misc]
535
+ @overload
536
+ def rsplit (self : LiteralString , sep : LiteralString | None = None , maxsplit : SupportsIndex = - 1 ) -> list [LiteralString ]: ...
537
+ @overload
482
538
def rsplit (self , sep : str | None = None , maxsplit : SupportsIndex = - 1 ) -> list [str ]: ... # type: ignore[misc]
539
+ @overload
540
+ def rstrip (self : LiteralString , chars : LiteralString | None = None , / ) -> LiteralString : ...
541
+ @overload
483
542
def rstrip (self , chars : str | None = None , / ) -> str : ... # type: ignore[misc]
543
+ @overload
544
+ def split (self : LiteralString , sep : LiteralString | None = None , maxsplit : SupportsIndex = - 1 ) -> list [LiteralString ]: ...
545
+ @overload
484
546
def split (self , sep : str | None = None , maxsplit : SupportsIndex = - 1 ) -> list [str ]: ... # type: ignore[misc]
547
+ @overload
548
+ def splitlines (self : LiteralString , keepends : bool = False ) -> list [LiteralString ]: ...
549
+ @overload
485
550
def splitlines (self , keepends : bool = False ) -> list [str ]: ... # type: ignore[misc]
486
551
def startswith (
487
552
self , prefix : str | tuple [str , ...], start : SupportsIndex | None = ..., end : SupportsIndex | None = ..., /
488
553
) -> bool : ...
554
+ @overload
555
+ def strip (self : LiteralString , chars : LiteralString | None = None , / ) -> LiteralString : ...
556
+ @overload
489
557
def strip (self , chars : str | None = None , / ) -> str : ... # type: ignore[misc]
558
+ @overload
559
+ def swapcase (self : LiteralString ) -> LiteralString : ...
560
+ @overload
490
561
def swapcase (self ) -> str : ... # type: ignore[misc]
562
+ @overload
563
+ def title (self : LiteralString ) -> LiteralString : ...
564
+ @overload
491
565
def title (self ) -> str : ... # type: ignore[misc]
492
566
def translate (self , table : _TranslateTable , / ) -> str : ...
567
+ @overload
568
+ def upper (self : LiteralString ) -> LiteralString : ...
569
+ @overload
493
570
def upper (self ) -> str : ... # type: ignore[misc]
571
+ @overload
572
+ def zfill (self : LiteralString , width : SupportsIndex , / ) -> LiteralString : ...
573
+ @overload
494
574
def zfill (self , width : SupportsIndex , / ) -> str : ... # type: ignore[misc]
495
575
@staticmethod
496
576
@overload
@@ -501,21 +581,39 @@ class str(Sequence[str]):
501
581
@staticmethod
502
582
@overload
503
583
def maketrans (x : str , y : str , z : str , / ) -> dict [int , int | None ]: ...
584
+ @overload
585
+ def __add__ (self : LiteralString , value : LiteralString , / ) -> LiteralString : ...
586
+ @overload
504
587
def __add__ (self , value : str , / ) -> str : ... # type: ignore[misc]
505
588
# Incompatible with Sequence.__contains__
506
589
def __contains__ (self , key : str , / ) -> bool : ... # type: ignore[override]
507
590
def __eq__ (self , value : object , / ) -> bool : ...
508
591
def __ge__ (self , value : str , / ) -> bool : ...
509
- def __getitem__ (self , key : SupportsIndex | slice , / ) -> str : ...
592
+ @overload
593
+ def __getitem__ (self : LiteralString , key : SupportsIndex | slice , / ) -> LiteralString : ...
594
+ @overload
595
+ def __getitem__ (self , key : SupportsIndex | slice , / ) -> str : ... # type: ignore[misc]
510
596
def __gt__ (self , value : str , / ) -> bool : ...
511
597
def __hash__ (self ) -> int : ...
598
+ @overload
599
+ def __iter__ (self : LiteralString ) -> Iterator [LiteralString ]: ...
600
+ @overload
512
601
def __iter__ (self ) -> Iterator [str ]: ... # type: ignore[misc]
513
602
def __le__ (self , value : str , / ) -> bool : ...
514
603
def __len__ (self ) -> int : ...
515
604
def __lt__ (self , value : str , / ) -> bool : ...
605
+ @overload
606
+ def __mod__ (self : LiteralString , value : LiteralString | tuple [LiteralString , ...], / ) -> LiteralString : ...
607
+ @overload
516
608
def __mod__ (self , value : Any , / ) -> str : ...
609
+ @overload
610
+ def __mul__ (self : LiteralString , value : SupportsIndex , / ) -> LiteralString : ...
611
+ @overload
517
612
def __mul__ (self , value : SupportsIndex , / ) -> str : ... # type: ignore[misc]
518
613
def __ne__ (self , value : object , / ) -> bool : ...
614
+ @overload
615
+ def __rmul__ (self : LiteralString , value : SupportsIndex , / ) -> LiteralString : ...
616
+ @overload
519
617
def __rmul__ (self , value : SupportsIndex , / ) -> str : ... # type: ignore[misc]
520
618
def __getnewargs__ (self ) -> tuple [str ]: ...
521
619
@@ -1662,7 +1760,7 @@ _SupportsSumNoDefaultT = TypeVar("_SupportsSumNoDefaultT", bound=_SupportsSumWit
1662
1760
# without creating many false-positive errors (see #7578).
1663
1761
# Instead, we special-case the most common examples of this: bool and literal integers.
1664
1762
@overload
1665
- def sum (iterable : Iterable [bool ], / , start : int = 0 ) -> int : ...
1763
+ def sum (iterable : Iterable [bool | _LiteralInteger ], / , start : int = 0 ) -> int : ...
1666
1764
@overload
1667
1765
def sum (iterable : Iterable [_SupportsSumNoDefaultT ], / ) -> _SupportsSumNoDefaultT | Literal [0 ]: ...
1668
1766
@overload
0 commit comments