Ver código fonte

GDScript: Allow multiple lines in signal parameters declaration

George Marques 4 anos atrás
pai
commit
bab0afc821

+ 4 - 1
modules/gdscript/gdscript_parser.cpp

@@ -1053,7 +1053,9 @@ GDScriptParser::SignalNode *GDScriptParser::parse_signal() {
 	SignalNode *signal = alloc_node<SignalNode>();
 	signal->identifier = parse_identifier();
 
-	if (match(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) {
+	if (check(GDScriptTokenizer::Token::PARENTHESIS_OPEN)) {
+		push_multiline(true);
+		advance();
 		do {
 			if (check(GDScriptTokenizer::Token::PARENTHESIS_CLOSE)) {
 				// Allow for trailing comma.
@@ -1076,6 +1078,7 @@ GDScriptParser::SignalNode *GDScriptParser::parse_signal() {
 			}
 		} while (match(GDScriptTokenizer::Token::COMMA) && !is_at_end());
 
+		pop_multiline();
 		consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected closing ")" after signal parameters.)*");
 	}
 

+ 20 - 0
modules/gdscript/tests/scripts/parser/features/signal_declaration.gd

@@ -0,0 +1,20 @@
+#GDTEST_OK
+
+# No parentheses.
+signal a
+
+# No parameters.
+signal b()
+
+# With paramters.
+signal c(a, b, c)
+
+# With parameters multiline.
+signal d(
+	a,
+	b,
+	c,
+)
+
+func test():
+	print("Ok")

+ 2 - 0
modules/gdscript/tests/scripts/parser/features/signal_declaration.out

@@ -0,0 +1,2 @@
+GDTEST_OK
+Ok