Sfoglia il codice sorgente

Added yield() signal smart autocompletion.

Juan Linietsky 9 anni fa
parent
commit
6671c6bdc7

+ 17 - 0
modules/gdscript/gd_editor.cpp

@@ -2389,7 +2389,24 @@ Error GDScriptLanguage::complete_code(const String& p_code, const String& p_base
 				}
 			}
 		} break;
+		case GDParser::COMPLETION_YIELD: {
 
+			const GDParser::Node *node = p.get_completion_node();
+
+			GDCompletionIdentifier t;
+			if (!_guess_expression_type(context,node,p.get_completion_line(),t))
+				break;
+
+			if (t.type==Variant::OBJECT && t.obj_type!=StringName()) {
+
+				List<MethodInfo> sigs;
+				ObjectTypeDB::get_signal_list(t.obj_type,&sigs);
+				for (List<MethodInfo>::Element *E=sigs.front();E;E=E->next()) {
+					options.insert("\""+E->get().name+"\"");
+				}
+			}
+
+		} break;
 
 	}
 

+ 15 - 0
modules/gdscript/gd_parser.cpp

@@ -378,6 +378,21 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_
 
 				tokenizer->advance();
 
+				if (tokenizer->get_token()==GDTokenizer::TK_CURSOR) {
+
+
+					completion_cursor=StringName();
+					completion_node=object;
+					completion_type=COMPLETION_YIELD;
+					completion_class=current_class;
+					completion_function=current_function;
+					completion_line=tokenizer->get_token_line();
+					completion_argument=0;
+					completion_block=current_block;
+					completion_found=true;
+					tokenizer->advance();
+				}
+
 				Node *signal = _parse_and_reduce_expression(p_parent,p_static);
 				if (!signal)
 					return NULL;

+ 2 - 1
modules/gdscript/gd_parser.h

@@ -375,7 +375,8 @@ public:
 		COMPLETION_METHOD,
 		COMPLETION_CALL_ARGUMENTS,
 		COMPLETION_INDEX,
-		COMPLETION_VIRTUAL_FUNC
+		COMPLETION_VIRTUAL_FUNC,
+		COMPLETION_YIELD,
 	};