From 6095a37d64f0cc85ebf0c5c3d30be0cc4411639a Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sun, 8 Dec 2024 15:34:01 +0100 Subject: [PATCH] Tweak unknown annotation GDScript error for `@deprecated`/`@experimental`/`@tutorial` These annotations don't exist at a source level, so the error messages point to the documentation comment syntax. --- modules/gdscript/gdscript_parser.cpp | 10 +++++++++- .../scripts/parser/errors/annotation_deprecated.gd | 5 +++++ .../scripts/parser/errors/annotation_deprecated.out | 2 ++ .../scripts/parser/errors/annotation_experimental.gd | 6 ++++++ .../scripts/parser/errors/annotation_experimental.out | 2 ++ .../tests/scripts/parser/errors/annotation_tutorial.gd | 5 +++++ .../scripts/parser/errors/annotation_tutorial.out | 2 ++ 7 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.gd create mode 100644 modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.out create mode 100644 modules/gdscript/tests/scripts/parser/errors/annotation_experimental.gd create mode 100644 modules/gdscript/tests/scripts/parser/errors/annotation_experimental.out create mode 100644 modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.gd create mode 100644 modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.out diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 12e71004dbd..b636dd08289 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -1624,7 +1624,15 @@ GDScriptParser::AnnotationNode *GDScriptParser::parse_annotation(uint32_t p_vali bool valid = true; if (!valid_annotations.has(annotation->name)) { - push_error(vformat(R"(Unrecognized annotation: "%s".)", annotation->name)); + if (annotation->name == "@deprecated") { + push_error(R"("@deprecated" annotation does not exist. Use "## @deprecated: Reason here." instead.)"); + } else if (annotation->name == "@experimental") { + push_error(R"("@experimental" annotation does not exist. Use "## @experimental: Reason here." instead.)"); + } else if (annotation->name == "@tutorial") { + push_error(R"("@tutorial" annotation does not exist. Use "## @tutorial(Title): https://example.com" instead.)"); + } else { + push_error(vformat(R"(Unrecognized annotation: "%s".)", annotation->name)); + } valid = false; } diff --git a/modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.gd b/modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.gd new file mode 100644 index 00000000000..95569c48de7 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.gd @@ -0,0 +1,5 @@ +# This annotation should be used within a documentation comment instead: +# ## @deprecated: Reason here. + +@deprecated +var some_variable = "value" diff --git a/modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.out b/modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.out new file mode 100644 index 00000000000..a9960889020 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/annotation_deprecated.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +"@deprecated" annotation does not exist. Use "## @deprecated: Reason here." instead. diff --git a/modules/gdscript/tests/scripts/parser/errors/annotation_experimental.gd b/modules/gdscript/tests/scripts/parser/errors/annotation_experimental.gd new file mode 100644 index 00000000000..ce00639de6d --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/annotation_experimental.gd @@ -0,0 +1,6 @@ +# This annotation should be used within a documentation comment instead: +# ## @experimental: Reason here. + +@experimental("This function isn't implemented yet.") +func say_hello(): + pass diff --git a/modules/gdscript/tests/scripts/parser/errors/annotation_experimental.out b/modules/gdscript/tests/scripts/parser/errors/annotation_experimental.out new file mode 100644 index 00000000000..d7e1c2eb2f2 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/annotation_experimental.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +"@experimental" annotation does not exist. Use "## @experimental: Reason here." instead. diff --git a/modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.gd b/modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.gd new file mode 100644 index 00000000000..ccd995bb501 --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.gd @@ -0,0 +1,5 @@ +# This annotation should be used within a documentation comment instead: +# ## @tutorial(Title): https://example.com + +@tutorial("https://example.com") +const SOME_CONSTANT = "value" diff --git a/modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.out b/modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.out new file mode 100644 index 00000000000..7d8be3567bf --- /dev/null +++ b/modules/gdscript/tests/scripts/parser/errors/annotation_tutorial.out @@ -0,0 +1,2 @@ +GDTEST_PARSER_ERROR +"@tutorial" annotation does not exist. Use "## @tutorial(Title): https://example.com" instead.