Преглед изворни кода

For-in loop variable added to autocompletion

Fix for #16494
Rado'sPC\aRaGaR пре 7 година
родитељ
комит
f97ebdcab3
1 измењених фајлова са 13 додато и 3 уклоњено
  1. 13 3
      modules/gdscript/gdscript_editor.cpp

+ 13 - 3
modules/gdscript/gdscript_editor.cpp

@@ -1335,13 +1335,23 @@ static void _find_identifiers_in_block(GDScriptCompletionContext &context, int p
 
 	for (int i = 0; i < context.block->statements.size(); i++) {
 
-		if (context.block->statements[i]->line > p_line)
+		GDScriptParser::Node *statement = context.block->statements[i];
+		if (statement->line > p_line)
 			continue;
 
-		if (context.block->statements[i]->type == GDScriptParser::BlockNode::TYPE_LOCAL_VAR) {
+		GDScriptParser::BlockNode::Type statementType = statement->type;
+		if (statementType == GDScriptParser::BlockNode::TYPE_LOCAL_VAR) {
 
-			const GDScriptParser::LocalVarNode *lv = static_cast<const GDScriptParser::LocalVarNode *>(context.block->statements[i]);
+			const GDScriptParser::LocalVarNode *lv = static_cast<const GDScriptParser::LocalVarNode *>(statement);
 			result.insert(lv->name.operator String());
+		} else if (statementType == GDScriptParser::BlockNode::TYPE_CONTROL_FLOW) {
+
+			const GDScriptParser::ControlFlowNode *cf = static_cast<const GDScriptParser::ControlFlowNode *>(statement);
+			if (cf->cf_type == GDScriptParser::ControlFlowNode::CF_FOR) {
+
+				const GDScriptParser::IdentifierNode *id = static_cast<const GDScriptParser::IdentifierNode *>(cf->arguments[0]);
+				result.insert(id->name.operator String());
+			}
 		}
 	}
 }