swig/Examples/test-suite/autodoc.i
Vadim Zeitlin 1e22e791ef Always include default parameter values in Python autodoc strings
One of side effects of 15b369028f was that
the default values were only included in Python doc strings if we could
be sure that they could be interpreted as valid Python expressions, but
this change was actually undesirable as it may be useful to see C++
expression for the default value in the doc string even when it isn't
valid in Python.

Undo this part of the change and extend autodoc unit test to check that
this stays fixed.

Closes #1271.
2019-01-21 00:57:02 +01:00

181 lines
4.9 KiB
OpenEdge ABL

%module(docstring="hello.") autodoc
%warnfilter(SWIGWARN_PARSE_KEYWORD) inout;
%feature("autodoc");
// special typemap and its docs
%typemap(in) (int c, int d) "$1 = 0; $2 = 0;";
%typemap(doc,name="hello",type="Tuple") (int c, int d) "hello: int tuple[2]";
// testing for different documentation levels
%feature("autodoc","0") A::func0; // names
%feature("autodoc","1") A::func1; // names + types
%feature("autodoc","2") A::func2; // extended
%feature("autodoc","3") A::func3; // extended + types
%feature("autodoc","0") A::func0default; // names
%feature("autodoc","1") A::func1default; // names + types
%feature("autodoc","2") A::func2default; // extended
%feature("autodoc","3") A::func3default; // extended + types
%feature("autodoc","0") A::func0static; // names
%feature("autodoc","1") A::func1static; // names + types
%feature("autodoc","2") A::func2static; // extended
%feature("autodoc","3") A::func3static; // extended + types
%feature("autodoc","0") A::variable_a; // names
%feature("autodoc","1") A::variable_b; // names + types
%feature("autodoc","2") A::variable_c; // extended
%feature("autodoc","3") A::variable_d; // extended + types
%feature("autodoc","just a string.") A::funk; // names
%inline {
enum Hola {
hi, hello
};
struct A {
A(int a, short b, Hola h) {}
int funk(int a) { return a; }
int func0(short, int c, int d) { return c; }
int func1(short, int c, int d) { return c; }
int func2(short, int c, int d) { return c; }
int func3(short, int c, int d) { return c; }
int func0default(A *e, short, int c, int d, double f = 2) { return 0; }
int func1default(A *e, short, int c, int d, double f = 2) { return 0; }
int func2default(A *e, short, int c, int d, double f = 2) { return 0; }
int func3default(A *e, short, int c, int d, double f = 2) { return 0; }
static int func0static(A *e, short, int c, int d, double f = 2) { return 0; }
static int func1static(A *e, short, int c, int d, double f = 2) { return 0; }
static int func2static(A *e, short, int c, int d, double f = 2) { return 0; }
static int func3static(A *e, short, int c, int d, double f = 2) { return 0; }
int variable_a;
int variable_b;
int variable_c;
int variable_d;
};
}
// deleting typemaps and docs
%typemap(in) (int c, int d) ;
%typemap(doc) (int c, int d);
// docs for some parameters
%typemap(doc) int a "a: special comment for parameter a";
%typemap(doc) int b "b: another special comment for parameter b";
%feature("autodoc","0") C::C(int a, int b, Hola h); // names
%feature("autodoc","1") D::D(int a, int b, Hola h); // names + types
%feature("autodoc","2") E::E(int a, int b, Hola h); // extended
%feature("autodoc","3") F::F(int a, int b, Hola h); // extended + types
%inline {
struct B {
B(int a, int b, Hola h) {}
int funk(int c, int d) { return c; }
};
struct C {
C(int a, int b, Hola h) {}
};
struct D {
D(int a, int b, Hola h) {}
};
struct E {
E(int a, int b, Hola h) {}
};
struct F {
F(int a, int b, Hola h) {}
};
int funk(A *e, short, int c, int d) { return c; }
int funkdefaults(A *e, short, int c, int d, double f = 2) { return c; }
}
%include <typemaps.i>
%inline %{
int func_input(int *INPUT) {
return 1;
}
int func_output(int *OUTPUT) {
*OUTPUT = 2;
return 1;
}
int func_inout(int *INOUT) {
*INOUT += 1;
return 1;
}
%}
%callback("%(uppercase)s_CALLBACK") func_cb;
%inline {
int func_cb(int c, int d) { return c; }
}
// Bug 3310528
%feature("autodoc","1") banana; // names + types
%inline %{
typedef struct tagS {
int a;
char b;
} S;
typedef int Integer;
void banana(S *a, const struct tagS *b, int c, Integer d) {}
%}
// Check docs for a template type
%inline %{
template<typename X> struct T {
T inout(T t) { return t; }
};
%}
%template(TInteger) T<int>;
%inline %{
#ifdef SWIGPYTHON_BUILTIN
bool is_python_builtin() { return true; }
#else
bool is_python_builtin() { return false; }
#endif
%}
// Autodoc language keywords
%feature(autodoc,1) process;
%feature(autodoc,1) process2;
%feature("compactdefaultargs") process;
%feature("compactdefaultargs") process2;
%inline %{
int process(int from, int in, int var) { return from; }
int process2(int from = 0, int _in = 1, int var = 2) { return from; }
%}
%feature(autodoc,1) process3;
%feature(autodoc,1) process4;
%feature("kwargs") process3;
%feature("kwargs") process4;
%inline %{
int process3(int from, int _in, int var) { return from; }
int process4(int from = 0, int _in = 1, int var = 2) { return from; }
%}
// Autodoc for methods with default arguments not directly representable in
// target language.
%feature(autodoc,0) process_complex_defval;
%feature("compactdefaultargs") process_complex_defval;
%inline %{
const int PROCESS_DEFAULT_VALUE = 17;
typedef long int some_type;
int process_complex_defval(int val = PROCESS_DEFAULT_VALUE, int factor = some_type(-1)) { return val*factor; }
%}