@@ -380,6 +380,40 @@ def test_infer_sig_from_docstring(self) -> None:
380380 ],
381381 )
382382
383+ def test_infer_sig_from_docstring_overloads (self ) -> None :
384+
385+ assert_equal (
386+ infer_sig_from_docstring ("\n func(x: int=3) -> int\n func(x: str) -> str" , "func" ),
387+ [
388+ FunctionSig (
389+ name = "func" , args = [ArgSig (name = "x" , type = "int" , default = True )], ret_type = "int"
390+ ),
391+ FunctionSig (
392+ name = "func" , args = [ArgSig (name = "x" , type = "str" , default = False )], ret_type = "str"
393+ ),
394+ ],
395+ )
396+
397+ assert_equal (
398+ infer_sig_from_docstring ("func(x: foo.bar)\n func(x: str) -> foo.bar" , "func" ),
399+ [
400+ FunctionSig (name = "func" , args = [ArgSig (name = "x" , type = "foo.bar" )], ret_type = "Any" ),
401+ FunctionSig (name = "func" , args = [ArgSig (name = "x" , type = "str" )], ret_type = "foo.bar" ),
402+ ],
403+ )
404+
405+ assert_equal (
406+ infer_sig_from_docstring (
407+ "\n func(x: int=3) -> int\n func(x: invalid::type<with_template>)" , "func"
408+ ),
409+ [
410+ FunctionSig (
411+ name = "func" , args = [ArgSig (name = "x" , type = "int" , default = True )], ret_type = "int"
412+ ),
413+ FunctionSig (name = "func" , args = [ArgSig (name = "x" , type = None )], ret_type = "Any" ),
414+ ],
415+ )
416+
383417 def test_infer_sig_from_docstring_duplicate_args (self ) -> None :
384418 assert_equal (
385419 infer_sig_from_docstring ("\n func(x, x) -> str\n func(x, y) -> int" , "func" ),
@@ -435,30 +469,36 @@ def test_infer_sig_from_docstring_args_kwargs_errors(self) -> None:
435469 assert_equal (infer_sig_from_docstring ("func(**kwargs, *args) -> int" , "func" ), [])
436470
437471 def test_infer_sig_from_docstring_positional_only_arguments (self ) -> None :
438- assert_equal (
439- infer_sig_from_docstring ("func(self, /) -> str" , "func" ),
440- [FunctionSig (name = "func" , args = [ArgSig (name = "self" )], ret_type = "str" )],
441- )
442472
443473 assert_equal (
444474 infer_sig_from_docstring ("func(self, x, /) -> str" , "func" ),
445475 [
446476 FunctionSig (
447- name = "func" , args = [ArgSig (name = "self" ), ArgSig (name = "x" )], ret_type = "str"
477+ name = "func" ,
478+ args = [ArgSig (name = "self" ), ArgSig (name = "x" ), ArgSig (name = "/" )],
479+ ret_type = "str" ,
448480 )
449481 ],
450482 )
451483
452484 assert_equal (
453485 infer_sig_from_docstring ("func(x, /, y) -> int" , "func" ),
454- [FunctionSig (name = "func" , args = [ArgSig (name = "x" ), ArgSig (name = "y" )], ret_type = "int" )],
486+ [
487+ FunctionSig (
488+ name = "func" ,
489+ args = [ArgSig (name = "x" ), ArgSig (name = "/" ), ArgSig (name = "y" )],
490+ ret_type = "int" ,
491+ )
492+ ],
455493 )
456494
457495 assert_equal (
458496 infer_sig_from_docstring ("func(x, /, *args) -> str" , "func" ),
459497 [
460498 FunctionSig (
461- name = "func" , args = [ArgSig (name = "x" ), ArgSig (name = "*args" )], ret_type = "str"
499+ name = "func" ,
500+ args = [ArgSig (name = "x" ), ArgSig (name = "/" ), ArgSig (name = "*args" )],
501+ ret_type = "str" ,
462502 )
463503 ],
464504 )
@@ -468,51 +508,121 @@ def test_infer_sig_from_docstring_positional_only_arguments(self) -> None:
468508 [
469509 FunctionSig (
470510 name = "func" ,
471- args = [ArgSig (name = "x" ), ArgSig (name = "kwonly" ), ArgSig (name = "**kwargs" )],
511+ args = [
512+ ArgSig (name = "x" ),
513+ ArgSig (name = "/" ),
514+ ArgSig (name = "*" ),
515+ ArgSig (name = "kwonly" ),
516+ ArgSig (name = "**kwargs" ),
517+ ],
472518 ret_type = "str" ,
473519 )
474520 ],
475521 )
476522
523+ assert_equal (
524+ infer_sig_from_docstring ("func(self, /) -> str\n func(self, x, /) -> str" , "func" ),
525+ [
526+ FunctionSig (
527+ name = "func" , args = [ArgSig (name = "self" ), ArgSig (name = "/" )], ret_type = "str"
528+ ),
529+ FunctionSig (
530+ name = "func" ,
531+ args = [ArgSig (name = "self" ), ArgSig (name = "x" ), ArgSig (name = "/" )],
532+ ret_type = "str" ,
533+ ),
534+ ],
535+ )
536+
477537 def test_infer_sig_from_docstring_keyword_only_arguments (self ) -> None :
478538 assert_equal (
479539 infer_sig_from_docstring ("func(*, x) -> str" , "func" ),
480- [FunctionSig (name = "func" , args = [ArgSig (name = "x" )], ret_type = "str" )],
540+ [FunctionSig (name = "func" , args = [ArgSig (name = "*" ), ArgSig ( name = " x" )], ret_type = "str" )],
481541 )
482542
483543 assert_equal (
484544 infer_sig_from_docstring ("func(x, *, y) -> str" , "func" ),
485- [FunctionSig (name = "func" , args = [ArgSig (name = "x" ), ArgSig (name = "y" )], ret_type = "str" )],
545+ [
546+ FunctionSig (
547+ name = "func" ,
548+ args = [ArgSig (name = "x" ), ArgSig (name = "*" ), ArgSig (name = "y" )],
549+ ret_type = "str" ,
550+ )
551+ ],
486552 )
487553
488554 assert_equal (
489555 infer_sig_from_docstring ("func(*, x, y) -> str" , "func" ),
490- [FunctionSig (name = "func" , args = [ArgSig (name = "x" ), ArgSig (name = "y" )], ret_type = "str" )],
556+ [
557+ FunctionSig (
558+ name = "func" ,
559+ args = [ArgSig (name = "*" ), ArgSig (name = "x" ), ArgSig (name = "y" )],
560+ ret_type = "str" ,
561+ )
562+ ],
491563 )
492564
493565 assert_equal (
494566 infer_sig_from_docstring ("func(x, *, kwonly, **kwargs) -> str" , "func" ),
495567 [
496568 FunctionSig (
497569 name = "func" ,
498- args = [ArgSig (name = "x" ), ArgSig (name = "kwonly" ), ArgSig ("**kwargs" )],
570+ args = [
571+ ArgSig (name = "x" ),
572+ ArgSig (name = "*" ),
573+ ArgSig (name = "kwonly" ),
574+ ArgSig ("**kwargs" ),
575+ ],
499576 ret_type = "str" ,
500577 )
501578 ],
502579 )
503580
581+ assert_equal (
582+ infer_sig_from_docstring (
583+ "func(*, x) -> str\n func(x, *, kwonly, **kwargs) -> str" , "func"
584+ ),
585+ [
586+ FunctionSig (
587+ name = "func" , args = [ArgSig (name = "*" ), ArgSig (name = "x" )], ret_type = "str"
588+ ),
589+ FunctionSig (
590+ name = "func" ,
591+ args = [
592+ ArgSig (name = "x" ),
593+ ArgSig (name = "*" ),
594+ ArgSig (name = "kwonly" ),
595+ ArgSig ("**kwargs" ),
596+ ],
597+ ret_type = "str" ,
598+ ),
599+ ],
600+ )
601+
504602 def test_infer_sig_from_docstring_pos_only_and_keyword_only_arguments (self ) -> None :
505603 assert_equal (
506604 infer_sig_from_docstring ("func(x, /, *, y) -> str" , "func" ),
507- [FunctionSig (name = "func" , args = [ArgSig (name = "x" ), ArgSig (name = "y" )], ret_type = "str" )],
605+ [
606+ FunctionSig (
607+ name = "func" ,
608+ args = [ArgSig (name = "x" ), ArgSig (name = "/" ), ArgSig (name = "*" ), ArgSig (name = "y" )],
609+ ret_type = "str" ,
610+ )
611+ ],
508612 )
509613
510614 assert_equal (
511615 infer_sig_from_docstring ("func(x, /, y, *, z) -> str" , "func" ),
512616 [
513617 FunctionSig (
514618 name = "func" ,
515- args = [ArgSig (name = "x" ), ArgSig (name = "y" ), ArgSig (name = "z" )],
619+ args = [
620+ ArgSig (name = "x" ),
621+ ArgSig (name = "/" ),
622+ ArgSig (name = "y" ),
623+ ArgSig (name = "*" ),
624+ ArgSig (name = "z" ),
625+ ],
516626 ret_type = "str" ,
517627 )
518628 ],
@@ -525,7 +635,9 @@ def test_infer_sig_from_docstring_pos_only_and_keyword_only_arguments(self) -> N
525635 name = "func" ,
526636 args = [
527637 ArgSig (name = "x" ),
638+ ArgSig (name = "/" ),
528639 ArgSig (name = "y" ),
640+ ArgSig (name = "*" ),
529641 ArgSig (name = "z" ),
530642 ArgSig ("**kwargs" ),
531643 ],
0 commit comments