completions: Simplify token matching code

This commit is contained in:
James Westman 2025-05-03 19:21:55 -05:00
parent c7a61d2227
commit 610d9c85a5
No known key found for this signature in database
GPG key ID: CE2DBA0ADB654EA6
4 changed files with 27 additions and 24 deletions

View file

@ -212,8 +212,7 @@ def namespace(ctx: CompletionContext):
language.BracketedTypeName,
],
matches=[
[(TokenType.IDENT, None), (TokenType.OP, "."), (TokenType.IDENT, None)],
[(TokenType.IDENT, None), (TokenType.OP, ".")],
[TokenType.IDENT, "."],
],
)
def object_completer(ctx: CompletionContext):
@ -301,9 +300,9 @@ def property_completer(ctx: CompletionContext):
@completer(
applies_in=[language.Property, language.A11yProperty],
matches=[
[(TokenType.IDENT, None), (TokenType.OP, ":")],
[(TokenType.PUNCTUATION, ",")],
[(TokenType.PUNCTUATION, "[")],
[TokenType.IDENT, ":"],
[","],
["["],
],
)
def prop_value_completer(ctx: CompletionContext):
@ -424,7 +423,7 @@ def template_completer(_ctx: CompletionContext):
@completer(
applies_in=[language.ObjectContent, language.ChildType],
matches=[[(TokenType.PUNCTUATION, "[")]],
matches=[["["]],
applies_in_subclass=[("Gtk", "Dialog"), ("Gtk", "InfoBar")],
)
def response_id_completer(ctx: CompletionContext):
@ -438,7 +437,7 @@ def response_id_completer(ctx: CompletionContext):
@completer(
[language.ChildAnnotation, language.ExtResponse],
[[(TokenType.IDENT, "action"), (TokenType.IDENT, "response"), (TokenType.OP, "=")]],
[["action", "response", "="]],
)
def complete_response_id(ctx: CompletionContext):
gir = ctx.ast_node.root.gir
@ -457,16 +456,16 @@ def complete_response_id(ctx: CompletionContext):
[language.ChildAnnotation, language.ExtResponse],
[
[
(TokenType.IDENT, "action"),
(TokenType.IDENT, "response"),
(TokenType.OP, "="),
(TokenType.IDENT, None),
"action",
"response",
"=",
TokenType.IDENT,
],
[
(TokenType.IDENT, "action"),
(TokenType.IDENT, "response"),
(TokenType.OP, "="),
(TokenType.NUMBER, None),
"action",
"response",
"=",
TokenType.NUMBER,
],
],
)

View file

@ -53,11 +53,11 @@ class CompletionContext:
new_statement_patterns = [
[(TokenType.PUNCTUATION, "{")],
[(TokenType.PUNCTUATION, "}")],
[(TokenType.PUNCTUATION, "]")],
[(TokenType.PUNCTUATION, ";")],
[(TokenType.OP, "<")],
["{"],
["}"],
["]"],
[";"],
["<"],
]
@ -101,9 +101,13 @@ def completer(applies_in: T.List, matches: T.List = [], applies_in_subclass=None
if len(pattern) <= len(prev_tokens):
for i in range(0, len(pattern)):
type, value = pattern[i]
if isinstance(pattern[i], str):
type, value = None, pattern[i]
elif isinstance(pattern[i], TokenType):
type, value = pattern[i], None
token = prev_tokens[i - len(pattern)]
if token.type != type or (
if (type is not None and token.type != type) or (
value is not None and str(token) != value
):
break

View file

@ -251,7 +251,7 @@ def decompile_signal(
@completer(
[Signal],
[[(TokenType.PUNCTUATION, "(")]],
[["("]],
)
def signal_object_completer(ctx: CompletionContext):
yield from get_object_id_completions(ctx)

View file

@ -153,7 +153,7 @@ def complete_mark(_ctx: CompletionContext):
@completer(
applies_in=[ExtScaleMark],
matches=[[(TokenType.NUMBER, None), (TokenType.PUNCTUATION, ",")]],
matches=[[TokenType.NUMBER, ","]],
)
def complete_mark_position(ctx: CompletionContext):
gir = ctx.ast_node.root.gir