aboutsummaryrefslogtreecommitdiff
path: root/src/server/completion.odin
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-06-17 20:04:29 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-06-17 20:04:29 +0200
commitc388704714dc5797ffa71d0b0119899df006497a (patch)
tree74acd241a491917e52b3a1b6b6416d5c94945553 /src/server/completion.odin
parentc99b080e2dd14e951975206ed5d89d4e4689053e (diff)
Start adding support for enumerated arrays for completion.
Diffstat (limited to 'src/server/completion.odin')
-rw-r--r--src/server/completion.odin36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin
index 2e5689f..a863d5c 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -1283,6 +1283,42 @@ get_implicit_completion :: proc(
}
}
}
+
+ if position_context.index != nil {
+ symbol: Symbol
+ ok := false
+ if position_context.previous_index != nil {
+ symbol, ok = resolve_type_expression(
+ ast_context,
+ position_context.previous_index,
+ )
+ if !ok {
+ return
+ }
+ } else {
+ symbol, ok = resolve_type_expression(
+ ast_context,
+ position_context.index.expr,
+ )
+ }
+
+ if array, ok := symbol.value.(SymbolFixedArrayValue); ok {
+ if enum_value, ok := unwrap_enum(ast_context, array.len); ok {
+ for name in enum_value.names {
+ item := CompletionItem {
+ label = name,
+ kind = .EnumMember,
+ detail = name,
+ }
+
+ append(&items, item)
+ }
+
+ list.items = items[:]
+ return
+ }
+ }
+ }
}
get_identifier_completion :: proc(