Jelajahi Sumber

Merge pull request #96160 from HolonProduction/dict-fix

Autocompletion: Enable string literal completion in subscripts
Rémi Verschelde 1 tahun lalu
induk
melakukan
3eba191c9e
19 mengubah file dengan 181 tambahan dan 0 penghapusan
  1. 6 0
      modules/gdscript/gdscript_parser.cpp
  2. 9 0
      modules/gdscript/tests/scripts/completion/index/array_type.cfg
  3. 10 0
      modules/gdscript/tests/scripts/completion/index/array_type.gd
  4. 9 0
      modules/gdscript/tests/scripts/completion/index/array_value.cfg
  5. 10 0
      modules/gdscript/tests/scripts/completion/index/array_value.gd
  6. 11 0
      modules/gdscript/tests/scripts/completion/index/const_dictionary_keys.cfg
  7. 13 0
      modules/gdscript/tests/scripts/completion/index/const_dictionary_keys.gd
  8. 9 0
      modules/gdscript/tests/scripts/completion/index/dictionary_type.cfg
  9. 10 0
      modules/gdscript/tests/scripts/completion/index/dictionary_type.gd
  10. 9 0
      modules/gdscript/tests/scripts/completion/index/dictionary_value.cfg
  11. 10 0
      modules/gdscript/tests/scripts/completion/index/dictionary_value.gd
  12. 11 0
      modules/gdscript/tests/scripts/completion/index/local_dictionary_keys.cfg
  13. 13 0
      modules/gdscript/tests/scripts/completion/index/local_dictionary_keys.gd
  14. 9 0
      modules/gdscript/tests/scripts/completion/index/property_dictionary_keys.cfg
  15. 13 0
      modules/gdscript/tests/scripts/completion/index/property_dictionary_keys.gd
  16. 5 0
      modules/gdscript/tests/scripts/completion/index/untyped_local.cfg
  17. 10 0
      modules/gdscript/tests/scripts/completion/index/untyped_local.gd
  18. 5 0
      modules/gdscript/tests/scripts/completion/index/untyped_property.cfg
  19. 9 0
      modules/gdscript/tests/scripts/completion/index/untyped_property.gd

+ 6 - 0
modules/gdscript/gdscript_parser.cpp

@@ -3122,6 +3122,12 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_subscript(ExpressionNode *
 	subscript->base = p_previous_operand;
 	subscript->index = parse_expression(false);
 
+#ifdef TOOLS_ENABLED
+	if (subscript->index != nullptr && subscript->index->type == Node::LITERAL) {
+		override_completion_context(subscript->index, COMPLETION_SUBSCRIPT, subscript);
+	}
+#endif
+
 	if (subscript->index == nullptr) {
 		push_error(R"(Expected expression after "[".)");
 	}

+ 9 - 0
modules/gdscript/tests/scripts/completion/index/array_type.cfg

@@ -0,0 +1,9 @@
+[output]
+include=[
+    {"display": "outer"},
+    {"display": "inner"},
+]
+exclude=[
+    {"display": "append"},
+    {"display": "\"append\""},
+]

+ 10 - 0
modules/gdscript/tests/scripts/completion/index/array_type.gd

@@ -0,0 +1,10 @@
+extends Node
+
+var outer
+
+func _ready() -> void:
+    var inner
+
+    var array: Array
+
+    array[i➡]

+ 9 - 0
modules/gdscript/tests/scripts/completion/index/array_value.cfg

@@ -0,0 +1,9 @@
+[output]
+include=[
+    {"display": "outer"},
+    {"display": "inner"},
+]
+exclude=[
+    {"display": "append"},
+    {"display": "\"append\""},
+]

+ 10 - 0
modules/gdscript/tests/scripts/completion/index/array_value.gd

@@ -0,0 +1,10 @@
+extends Node
+
+var outer
+
+func _ready() -> void:
+    var inner
+
+    var array = []
+
+    array[i➡]

+ 11 - 0
modules/gdscript/tests/scripts/completion/index/const_dictionary_keys.cfg

@@ -0,0 +1,11 @@
+[output]
+include=[
+    {"display": "\"key1\""},
+    {"display": "\"key2\""},
+]
+exclude=[
+    {"display": "keys"},
+    {"display": "\"keys\""},
+    {"display": "key1"},
+    {"display": "key2"},
+]

+ 13 - 0
modules/gdscript/tests/scripts/completion/index/const_dictionary_keys.gd

@@ -0,0 +1,13 @@
+extends Node
+
+var outer
+
+const dict = {
+    "key1": "value",
+    "key2": null,
+}
+
+func _ready() -> void:
+    var inner
+
+    dict["➡"]

+ 9 - 0
modules/gdscript/tests/scripts/completion/index/dictionary_type.cfg

@@ -0,0 +1,9 @@
+[output]
+include=[
+    {"display": "outer"},
+    {"display": "inner"},
+]
+exclude=[
+    {"display": "keys"},
+    {"display": "\"keys\""},
+]

+ 10 - 0
modules/gdscript/tests/scripts/completion/index/dictionary_type.gd

@@ -0,0 +1,10 @@
+extends Node
+
+var outer
+
+func _ready() -> void:
+    var inner
+
+    var dict: Dictionary
+
+    dict[i➡]

+ 9 - 0
modules/gdscript/tests/scripts/completion/index/dictionary_value.cfg

@@ -0,0 +1,9 @@
+[output]
+include=[
+    {"display": "outer"},
+    {"display": "inner"},
+]
+exclude=[
+    {"display": "keys"},
+    {"display": "\"keys\""},
+]

+ 10 - 0
modules/gdscript/tests/scripts/completion/index/dictionary_value.gd

@@ -0,0 +1,10 @@
+extends Node
+
+var outer
+
+func _ready() -> void:
+    var inner
+
+    var dict = {}
+
+    dict[i➡]

+ 11 - 0
modules/gdscript/tests/scripts/completion/index/local_dictionary_keys.cfg

@@ -0,0 +1,11 @@
+[output]
+include=[
+    {"display": "\"key1\""},
+    {"display": "\"key2\""},
+]
+exclude=[
+    {"display": "keys"},
+    {"display": "\"keys\""},
+    {"display": "key1"},
+    {"display": "key2"},
+]

+ 13 - 0
modules/gdscript/tests/scripts/completion/index/local_dictionary_keys.gd

@@ -0,0 +1,13 @@
+extends Node
+
+var outer
+
+func _ready() -> void:
+    var inner
+
+    var dict: Dictionary = {
+        "key1": "value",
+        "key2": null,
+    }
+
+    dict["➡"]

+ 9 - 0
modules/gdscript/tests/scripts/completion/index/property_dictionary_keys.cfg

@@ -0,0 +1,9 @@
+[output]
+exclude=[
+    {"display": "keys"},
+    {"display": "\"keys\""},
+    {"display": "key1"},
+    {"display": "key2"},
+    {"display": "\"key1\""},
+    {"display": "\"key2\""},
+]

+ 13 - 0
modules/gdscript/tests/scripts/completion/index/property_dictionary_keys.gd

@@ -0,0 +1,13 @@
+extends Node
+
+var outer
+
+var dict = {
+    "key1": "value",
+    "key2": null,
+}
+
+func _ready() -> void:
+    var inner
+
+    dict["➡"]

+ 5 - 0
modules/gdscript/tests/scripts/completion/index/untyped_local.cfg

@@ -0,0 +1,5 @@
+[output]
+include=[
+    {"display": "outer"},
+    {"display": "inner"},
+]

+ 10 - 0
modules/gdscript/tests/scripts/completion/index/untyped_local.gd

@@ -0,0 +1,10 @@
+extends Node
+
+var outer
+
+func _ready() -> void:
+    var inner
+
+    var array
+
+    array[i➡]

+ 5 - 0
modules/gdscript/tests/scripts/completion/index/untyped_property.cfg

@@ -0,0 +1,5 @@
+[output]
+include=[
+    {"display": "outer"},
+    {"display": "inner"},
+]

+ 9 - 0
modules/gdscript/tests/scripts/completion/index/untyped_property.gd

@@ -0,0 +1,9 @@
+extends Node
+
+var outer
+var array
+
+func _ready() -> void:
+    var inner
+
+    array[i➡]