Merge branch 'vadz-better-param-names'
* vadz-better-param-names: Enable keyword arguments for keyword_rename unit test Update error messages test suite Add more tests for Python parameter renaming Improve handling parameters clashing with language keywords
This commit is contained in:
commit
2e9b270cbb
7 changed files with 25 additions and 18 deletions
|
|
@ -148,3 +148,11 @@ bool is_python_builtin() { return true; }
|
||||||
bool is_python_builtin() { return false; }
|
bool is_python_builtin() { return false; }
|
||||||
#endif
|
#endif
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
// Autodoc Python keywords
|
||||||
|
%warnfilter(SWIGWARN_PARSE_KEYWORD) process;
|
||||||
|
%feature(autodoc,0) process;
|
||||||
|
%feature("compactdefaultargs") process;
|
||||||
|
%inline %{
|
||||||
|
int process(int from) { return from; }
|
||||||
|
%}
|
||||||
|
|
|
||||||
|
|
@ -3,5 +3,7 @@ swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int arg3
|
||||||
swig_typemap_warn.i:7: Warning 1001: Test warning for 'out' typemap for double mmm (result) - name: mmm symname: mmm &1_ltype: double * descriptor: SWIGTYPE_double
|
swig_typemap_warn.i:7: Warning 1001: Test warning for 'out' typemap for double mmm (result) - name: mmm symname: mmm &1_ltype: double * descriptor: SWIGTYPE_double
|
||||||
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int abc (arg1) - argnum: 1 &1_ltype: int * descriptor: SWIGTYPE_int
|
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int abc (arg1) - argnum: 1 &1_ltype: int * descriptor: SWIGTYPE_int
|
||||||
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int arg3 (arg3) - argnum: 3 &1_ltype: int * descriptor: SWIGTYPE_int
|
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int arg3 (arg3) - argnum: 3 &1_ltype: int * descriptor: SWIGTYPE_int
|
||||||
|
swig_typemap_warn.i:7: Warning 314: 'def' is a python keyword, renaming to '_def'
|
||||||
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int abc (arg1) - argnum: 1 &1_ltype: int * descriptor: SWIGTYPE_int
|
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int abc (arg1) - argnum: 1 &1_ltype: int * descriptor: SWIGTYPE_int
|
||||||
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int arg3 (arg3) - argnum: 3 &1_ltype: int * descriptor: SWIGTYPE_int
|
swig_typemap_warn.i:7: Warning 1000: Test warning for 'in' typemap for int arg3 (arg3) - argnum: 3 &1_ltype: int * descriptor: SWIGTYPE_int
|
||||||
|
swig_typemap_warn.i:7: Warning 314: 'def' is a python keyword, renaming to '_def'
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
%module keyword_rename
|
%module keyword_rename
|
||||||
|
|
||||||
|
%feature("kwargs");
|
||||||
|
|
||||||
#pragma SWIG nowarn=SWIGWARN_PARSE_KEYWORD
|
#pragma SWIG nowarn=SWIGWARN_PARSE_KEYWORD
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
|
|
|
||||||
|
|
@ -202,3 +202,5 @@ check(inspect.getdoc(banana), "banana(S a, S b, int c, Integer d)")
|
||||||
check(inspect.getdoc(TInteger), "Proxy of C++ T< int > class.", "::T< int >")
|
check(inspect.getdoc(TInteger), "Proxy of C++ T< int > class.", "::T< int >")
|
||||||
check(inspect.getdoc(TInteger.__init__), "__init__(TInteger self) -> TInteger", None, skip)
|
check(inspect.getdoc(TInteger.__init__), "__init__(TInteger self) -> TInteger", None, skip)
|
||||||
check(inspect.getdoc(TInteger.inout), "inout(TInteger self, TInteger t) -> TInteger")
|
check(inspect.getdoc(TInteger.inout), "inout(TInteger self, TInteger t) -> TInteger")
|
||||||
|
|
||||||
|
check(inspect.getdoc(process), "process(_from) -> int")
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import keyword_rename
|
import keyword_rename
|
||||||
keyword_rename._in(1)
|
keyword_rename._in(1)
|
||||||
|
keyword_rename._in(_except=1)
|
||||||
keyword_rename._except(1)
|
keyword_rename._except(1)
|
||||||
|
keyword_rename._except(_in=1)
|
||||||
|
|
|
||||||
|
|
@ -3602,7 +3602,7 @@ String *Language::makeParameterName(Node *n, Parm *p, int arg_num, bool setter)
|
||||||
String *arg = 0;
|
String *arg = 0;
|
||||||
String *pn = Getattr(p, "name");
|
String *pn = Getattr(p, "name");
|
||||||
|
|
||||||
// Use C parameter name unless it is a duplicate or an empty parameter name
|
// Check if parameter name is a duplicate.
|
||||||
int count = 0;
|
int count = 0;
|
||||||
ParmList *plist = Getattr(n, "parms");
|
ParmList *plist = Getattr(n, "parms");
|
||||||
while (plist) {
|
while (plist) {
|
||||||
|
|
@ -3610,8 +3610,14 @@ String *Language::makeParameterName(Node *n, Parm *p, int arg_num, bool setter)
|
||||||
count++;
|
count++;
|
||||||
plist = nextSibling(plist);
|
plist = nextSibling(plist);
|
||||||
}
|
}
|
||||||
String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0;
|
|
||||||
arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", arg_num) : Copy(pn);
|
// If the parameter has no name at all or has a non-unique name, replace it with "argN".
|
||||||
|
if (!pn || count > 1) {
|
||||||
|
arg = NewStringf("arg%d", arg_num);
|
||||||
|
} else {
|
||||||
|
// Otherwise, try to use the original C name, but modify it if necessary to avoid conflicting with the language keywords.
|
||||||
|
arg = Swig_name_make(p, 0, pn, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (setter && Cmp(arg, "self") != 0) {
|
if (setter && Cmp(arg, "self") != 0) {
|
||||||
// Some languages (C#) insist on calling the input variable "value" while
|
// Some languages (C#) insist on calling the input variable "value" while
|
||||||
|
|
|
||||||
|
|
@ -1591,21 +1591,6 @@ public:
|
||||||
return ds;
|
return ds;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual String *makeParameterName(Node *n, Parm *p, int arg_num, bool = false) const {
|
|
||||||
// For the keyword arguments, we want to preserve the names as much as possible,
|
|
||||||
// so we only minimally rename them in Swig_name_make(), e.g. replacing "keyword"
|
|
||||||
// with "_keyword" if they have any name at all.
|
|
||||||
if (check_kwargs(n)) {
|
|
||||||
String *name = Getattr(p, "name");
|
|
||||||
if (name)
|
|
||||||
return Swig_name_make(p, 0, name, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// For the other cases use the general function which replaces arguments whose
|
|
||||||
// names clash with keywords with (less useful) "argN".
|
|
||||||
return Language::makeParameterName(n, p, arg_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* addMissingParameterNames()
|
* addMissingParameterNames()
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue