@@ -3951,28 +3951,33 @@ def getmethparlist(ob):
3951
3951
function definition and the second is suitable for use in function
3952
3952
call. The "self" parameter is not included.
3953
3953
"""
3954
- defText = callText = ""
3954
+ orig_sig = inspect . signature ( ob )
3955
3955
# bit of a hack for methods - turn it into a function
3956
3956
# but we drop the "self" param.
3957
3957
# Try and build one for Python defined functions
3958
- args , varargs , varkw = inspect .getargs (ob .__code__ )
3959
- items2 = args [1 :]
3960
- realArgs = args [1 :]
3961
- defaults = ob .__defaults__ or []
3962
- defaults = ["=%r" % (value ,) for value in defaults ]
3963
- defaults = ["" ] * (len (realArgs )- len (defaults )) + defaults
3964
- items1 = [arg + dflt for arg , dflt in zip (realArgs , defaults )]
3965
- if varargs is not None :
3966
- items1 .append ("*" + varargs )
3967
- items2 .append ("*" + varargs )
3968
- if varkw is not None :
3969
- items1 .append ("**" + varkw )
3970
- items2 .append ("**" + varkw )
3971
- defText = ", " .join (items1 )
3972
- defText = "(%s)" % defText
3973
- callText = ", " .join (items2 )
3974
- callText = "(%s)" % callText
3975
- return defText , callText
3958
+ func_sig = orig_sig .replace (
3959
+ parameters = list (orig_sig .parameters .values ())[1 :],
3960
+ )
3961
+
3962
+ call_args = []
3963
+ for param in func_sig .parameters .values ():
3964
+ match param .kind :
3965
+ case (
3966
+ inspect .Parameter .POSITIONAL_ONLY
3967
+ | inspect .Parameter .POSITIONAL_OR_KEYWORD
3968
+ ):
3969
+ call_args .append (param .name )
3970
+ case inspect .Parameter .VAR_POSITIONAL :
3971
+ call_args .append (f'*{ param .name } ' )
3972
+ case inspect .Parameter .KEYWORD_ONLY :
3973
+ call_args .append (f'{ param .name } ={ param .name } ' )
3974
+ case inspect .Parameter .VAR_KEYWORD :
3975
+ call_args .append (f'**{ param .name } ' )
3976
+ case _:
3977
+ raise RuntimeError ('Unsupported parameter kind' , param .kind )
3978
+ call_text = f'({ ', ' .join (call_args )} )'
3979
+
3980
+ return str (func_sig ), call_text
3976
3981
3977
3982
def _turtle_docrevise (docstr ):
3978
3983
"""To reduce docstrings from RawTurtle class for functions
0 commit comments