瀏覽代碼

Merge pull request #32902 from nekomatata/auto-indent-bracket-fix

Auto-indent after opening bracket and parenthesis in the script editor
Rémi Verschelde 5 年之前
父節點
當前提交
97a4fe79fb
共有 1 個文件被更改,包括 22 次插入11 次删除
  1. 22 11
      scene/gui/text_edit.cpp

+ 22 - 11
scene/gui/text_edit.cpp

@@ -2843,19 +2843,30 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) {
 
 				// No need to indent if we are going upwards.
 				if (auto_indent && !(k->get_command() && k->get_shift())) {
-					// Indent once again if previous line will end with ':' or '{' and the line is not a comment
+					// Indent once again if previous line will end with ':','{','[','(' and the line is not a comment
 					// (i.e. colon/brace precedes current cursor position).
-					if (cursor.column > 0 && (text[cursor.line][cursor.column - 1] == ':' || text[cursor.line][cursor.column - 1] == '{') && !is_line_comment(cursor.line)) {
-						if (indent_using_spaces) {
-							ins += space_indent;
-						} else {
-							ins += "\t";
-						}
+					if (cursor.column > 0) {
+						char prev_char = text[cursor.line][cursor.column - 1];
+						switch (prev_char) {
+							case ':':
+							case '{':
+							case '[':
+							case '(': {
+								if (!is_line_comment(cursor.line)) {
+									if (indent_using_spaces) {
+										ins += space_indent;
+									} else {
+										ins += "\t";
+									}
 
-						// No need to move the brace below if we are not taking the text with us.
-						if (text[cursor.line][cursor.column] == '}' && !k->get_command()) {
-							brace_indent = true;
-							ins += "\n" + ins.substr(1, ins.length() - 2);
+									// No need to move the brace below if we are not taking the text with us.
+									char closing_char = _get_right_pair_symbol(prev_char);
+									if ((closing_char != 0) && (closing_char == text[cursor.line][cursor.column]) && !k->get_command()) {
+										brace_indent = true;
+										ins += "\n" + ins.substr(1, ins.length() - 2);
+									}
+								}
+							} break;
 						}
 					}
 				}