Add default argument bindings to GDScript annotations
This commit is contained in:
parent
9b3972ad48
commit
316f78a037
3 changed files with 28 additions and 31 deletions
|
@ -285,16 +285,15 @@
|
|||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
<annotation name="@export_exp_easing">
|
||||
<annotation name="@export_exp_easing" qualifiers="vararg">
|
||||
<return type="void" />
|
||||
<argument index="0" name="hint1" type="String" default="null" />
|
||||
<argument index="1" name="hint2" type="String" default="null" />
|
||||
<argument index="0" name="hints" type="String" default="""" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
<annotation name="@export_file" qualifiers="vararg">
|
||||
<return type="void" />
|
||||
<argument index="0" name="filter" type="String" default="null" />
|
||||
<argument index="0" name="filter" type="String" default="""" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
|
@ -341,14 +340,14 @@
|
|||
</annotation>
|
||||
<annotation name="@export_global_file" qualifiers="vararg">
|
||||
<return type="void" />
|
||||
<argument index="0" name="filter" type="String" default="null" />
|
||||
<argument index="0" name="filter" type="String" default="""" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
<annotation name="@export_group">
|
||||
<return type="void" />
|
||||
<argument index="0" name="name" type="String" />
|
||||
<argument index="1" name="prefix" type="String" default="null" />
|
||||
<argument index="1" name="prefix" type="String" default="""" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
|
@ -359,7 +358,7 @@
|
|||
</annotation>
|
||||
<annotation name="@export_node_path" qualifiers="vararg">
|
||||
<return type="void" />
|
||||
<argument index="0" name="type" type="String" default="null" />
|
||||
<argument index="0" name="type" type="String" default="""" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
|
@ -368,21 +367,19 @@
|
|||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
<annotation name="@export_range">
|
||||
<annotation name="@export_range" qualifiers="vararg">
|
||||
<return type="void" />
|
||||
<argument index="0" name="min" type="float" />
|
||||
<argument index="1" name="max" type="float" />
|
||||
<argument index="2" name="step" type="float" default="null" />
|
||||
<argument index="3" name="slider1" type="String" default="null" />
|
||||
<argument index="4" name="slider2" type="String" default="null" />
|
||||
<argument index="5" name="slider3" type="String" default="null" />
|
||||
<argument index="2" name="step" type="float" default="1.0" />
|
||||
<argument index="3" name="extra_hints" type="String" default="""" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
<annotation name="@export_subgroup">
|
||||
<return type="void" />
|
||||
<argument index="0" name="name" type="String" />
|
||||
<argument index="1" name="prefix" type="String" default="null" />
|
||||
<argument index="1" name="prefix" type="String" default="""" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
|
@ -399,10 +396,10 @@
|
|||
</annotation>
|
||||
<annotation name="@rpc" qualifiers="vararg">
|
||||
<return type="void" />
|
||||
<argument index="0" name="mode" type="String" default="null" />
|
||||
<argument index="1" name="sync" type="String" default="null" />
|
||||
<argument index="2" name="transfer_mode" type="String" default="null" />
|
||||
<argument index="3" name="transfer_channel" type="int" default="null" />
|
||||
<argument index="0" name="mode" type="String" default="""" />
|
||||
<argument index="1" name="sync" type="String" default="""" />
|
||||
<argument index="2" name="transfer_mode" type="String" default="""" />
|
||||
<argument index="3" name="transfer_channel" type="int" default="0" />
|
||||
<description>
|
||||
</description>
|
||||
</annotation>
|
||||
|
|
|
@ -117,18 +117,18 @@ GDScriptParser::GDScriptParser() {
|
|||
register_annotation(MethodInfo("@onready"), AnnotationInfo::VARIABLE, &GDScriptParser::onready_annotation);
|
||||
// Export annotations.
|
||||
register_annotation(MethodInfo("@export"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_NONE, Variant::NIL>);
|
||||
register_annotation(MethodInfo("@export_enum", PropertyInfo(Variant::STRING, "names")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_ENUM, Variant::INT>, 0, true);
|
||||
register_annotation(MethodInfo("@export_file", PropertyInfo(Variant::STRING, "filter")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FILE, Variant::STRING>, 1, true);
|
||||
register_annotation(MethodInfo("@export_enum", PropertyInfo(Variant::STRING, "names")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_ENUM, Variant::INT>, varray(), true);
|
||||
register_annotation(MethodInfo("@export_file", PropertyInfo(Variant::STRING, "filter")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FILE, Variant::STRING>, varray(""), true);
|
||||
register_annotation(MethodInfo("@export_dir"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_DIR, Variant::STRING>);
|
||||
register_annotation(MethodInfo("@export_global_file", PropertyInfo(Variant::STRING, "filter")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_GLOBAL_FILE, Variant::STRING>, 1, true);
|
||||
register_annotation(MethodInfo("@export_global_file", PropertyInfo(Variant::STRING, "filter")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_GLOBAL_FILE, Variant::STRING>, varray(""), true);
|
||||
register_annotation(MethodInfo("@export_global_dir"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_GLOBAL_DIR, Variant::STRING>);
|
||||
register_annotation(MethodInfo("@export_multiline"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_MULTILINE_TEXT, Variant::STRING>);
|
||||
register_annotation(MethodInfo("@export_placeholder"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_PLACEHOLDER_TEXT, Variant::STRING>);
|
||||
register_annotation(MethodInfo("@export_range", PropertyInfo(Variant::FLOAT, "min"), PropertyInfo(Variant::FLOAT, "max"), PropertyInfo(Variant::FLOAT, "step"), PropertyInfo(Variant::STRING, "slider1"), PropertyInfo(Variant::STRING, "slider2"), PropertyInfo(Variant::STRING, "slider3")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_RANGE, Variant::FLOAT>, 4);
|
||||
register_annotation(MethodInfo("@export_exp_easing", PropertyInfo(Variant::STRING, "hint1"), PropertyInfo(Variant::STRING, "hint2")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_EXP_EASING, Variant::FLOAT>, 2);
|
||||
register_annotation(MethodInfo("@export_range", PropertyInfo(Variant::FLOAT, "min"), PropertyInfo(Variant::FLOAT, "max"), PropertyInfo(Variant::FLOAT, "step"), PropertyInfo(Variant::STRING, "extra_hints")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_RANGE, Variant::FLOAT>, varray(1.0, ""), true);
|
||||
register_annotation(MethodInfo("@export_exp_easing", PropertyInfo(Variant::STRING, "hints")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_EXP_EASING, Variant::FLOAT>, varray(""), true);
|
||||
register_annotation(MethodInfo("@export_color_no_alpha"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_COLOR_NO_ALPHA, Variant::COLOR>);
|
||||
register_annotation(MethodInfo("@export_node_path", PropertyInfo(Variant::STRING, "type")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_NODE_PATH_VALID_TYPES, Variant::NODE_PATH>, 1, true);
|
||||
register_annotation(MethodInfo("@export_flags", PropertyInfo(Variant::STRING, "names")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FLAGS, Variant::INT>, 0, true);
|
||||
register_annotation(MethodInfo("@export_node_path", PropertyInfo(Variant::STRING, "type")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_NODE_PATH_VALID_TYPES, Variant::NODE_PATH>, varray(""), true);
|
||||
register_annotation(MethodInfo("@export_flags", PropertyInfo(Variant::STRING, "names")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FLAGS, Variant::INT>, varray(), true);
|
||||
register_annotation(MethodInfo("@export_flags_2d_render"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_2D_RENDER, Variant::INT>);
|
||||
register_annotation(MethodInfo("@export_flags_2d_physics"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_2D_PHYSICS, Variant::INT>);
|
||||
register_annotation(MethodInfo("@export_flags_2d_navigation"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_2D_NAVIGATION, Variant::INT>);
|
||||
|
@ -137,12 +137,12 @@ GDScriptParser::GDScriptParser() {
|
|||
register_annotation(MethodInfo("@export_flags_3d_navigation"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_3D_NAVIGATION, Variant::INT>);
|
||||
// Export grouping annotations.
|
||||
register_annotation(MethodInfo("@export_category", PropertyInfo(Variant::STRING, "name")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_CATEGORY>);
|
||||
register_annotation(MethodInfo("@export_group", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::STRING, "prefix")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_GROUP>, 1);
|
||||
register_annotation(MethodInfo("@export_subgroup", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::STRING, "prefix")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_SUBGROUP>, 1);
|
||||
register_annotation(MethodInfo("@export_group", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::STRING, "prefix")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_GROUP>, varray(""));
|
||||
register_annotation(MethodInfo("@export_subgroup", PropertyInfo(Variant::STRING, "name"), PropertyInfo(Variant::STRING, "prefix")), AnnotationInfo::STANDALONE, &GDScriptParser::export_group_annotations<PROPERTY_USAGE_SUBGROUP>, varray(""));
|
||||
// Warning annotations.
|
||||
register_annotation(MethodInfo("@warning_ignore", PropertyInfo(Variant::STRING, "warning")), AnnotationInfo::CLASS | AnnotationInfo::VARIABLE | AnnotationInfo::SIGNAL | AnnotationInfo::CONSTANT | AnnotationInfo::FUNCTION | AnnotationInfo::STATEMENT, &GDScriptParser::warning_annotations, 0, true);
|
||||
register_annotation(MethodInfo("@warning_ignore", PropertyInfo(Variant::STRING, "warning")), AnnotationInfo::CLASS | AnnotationInfo::VARIABLE | AnnotationInfo::SIGNAL | AnnotationInfo::CONSTANT | AnnotationInfo::FUNCTION | AnnotationInfo::STATEMENT, &GDScriptParser::warning_annotations, varray(), true);
|
||||
// Networking.
|
||||
register_annotation(MethodInfo("@rpc", PropertyInfo(Variant::STRING, "mode"), PropertyInfo(Variant::STRING, "sync"), PropertyInfo(Variant::STRING, "transfer_mode"), PropertyInfo(Variant::INT, "transfer_channel")), AnnotationInfo::FUNCTION, &GDScriptParser::network_annotations<Multiplayer::RPC_MODE_AUTHORITY>, 4, true);
|
||||
register_annotation(MethodInfo("@rpc", PropertyInfo(Variant::STRING, "mode"), PropertyInfo(Variant::STRING, "sync"), PropertyInfo(Variant::STRING, "transfer_mode"), PropertyInfo(Variant::INT, "transfer_channel")), AnnotationInfo::FUNCTION, &GDScriptParser::network_annotations<Multiplayer::RPC_MODE_AUTHORITY>, varray("", "", "", 0), true);
|
||||
}
|
||||
|
||||
GDScriptParser::~GDScriptParser() {
|
||||
|
@ -1449,12 +1449,12 @@ void GDScriptParser::clear_unused_annotations() {
|
|||
annotation_stack.clear();
|
||||
}
|
||||
|
||||
bool GDScriptParser::register_annotation(const MethodInfo &p_info, uint32_t p_target_kinds, AnnotationAction p_apply, int p_optional_arguments, bool p_is_vararg) {
|
||||
bool GDScriptParser::register_annotation(const MethodInfo &p_info, uint32_t p_target_kinds, AnnotationAction p_apply, const Vector<Variant> &p_default_arguments, bool p_is_vararg) {
|
||||
ERR_FAIL_COND_V_MSG(valid_annotations.has(p_info.name), false, vformat(R"(Annotation "%s" already registered.)", p_info.name));
|
||||
|
||||
AnnotationInfo new_annotation;
|
||||
new_annotation.info = p_info;
|
||||
new_annotation.info.default_arguments.resize(p_optional_arguments);
|
||||
new_annotation.info.default_arguments = p_default_arguments;
|
||||
if (p_is_vararg) {
|
||||
new_annotation.info.flags |= METHOD_FLAG_VARARG;
|
||||
}
|
||||
|
|
|
@ -1359,7 +1359,7 @@ private:
|
|||
SuiteNode *parse_suite(const String &p_context, SuiteNode *p_suite = nullptr, bool p_for_lambda = false);
|
||||
// Annotations
|
||||
AnnotationNode *parse_annotation(uint32_t p_valid_targets);
|
||||
bool register_annotation(const MethodInfo &p_info, uint32_t p_target_kinds, AnnotationAction p_apply, int p_optional_arguments = 0, bool p_is_vararg = false);
|
||||
bool register_annotation(const MethodInfo &p_info, uint32_t p_target_kinds, AnnotationAction p_apply, const Vector<Variant> &p_default_arguments = Vector<Variant>(), bool p_is_vararg = false);
|
||||
bool validate_annotation_arguments(AnnotationNode *p_annotation);
|
||||
void clear_unused_annotations();
|
||||
bool tool_annotation(const AnnotationNode *p_annotation, Node *p_target);
|
||||
|
|
Loading…
Reference in a new issue