From 67983aee2e6aa10af32518aa0c286cc492b750a7 Mon Sep 17 00:00:00 2001 From: James Westman Date: Sat, 3 May 2025 14:39:02 -0500 Subject: [PATCH] completions: Object names in signal handlers --- blueprintcompiler/completions.py | 22 +++++++------------- blueprintcompiler/completions_utils.py | 17 ++++++++++++++- blueprintcompiler/language/gobject_signal.py | 8 +++++++ 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/blueprintcompiler/completions.py b/blueprintcompiler/completions.py index 73dc27f..ca32eac 100644 --- a/blueprintcompiler/completions.py +++ b/blueprintcompiler/completions.py @@ -23,13 +23,14 @@ from . import annotations, gir, language from .ast_utils import AstNode from .completions_utils import ( CompletionContext, - completers, - completer, - get_sort_key, - new_statement_patterns, - get_property_completion, CompletionItemKind, CompletionPriority, + completer, + completers, + get_object_id_completions, + get_property_completion, + get_sort_key, + new_statement_patterns, ) from .language.types import ClassName from .lsp_utils import Completion, CompletionItemKind, TextEdit, get_docs_section @@ -350,16 +351,7 @@ def prop_value_completer(ctx: CompletionContext): sort_text=get_sort_key(CompletionPriority.KEYWORD, "null"), ) - for id, obj in ctx.ast_node.root.context[language.ScopeCtx].objects.items(): - if obj.gir_class is not None and obj.gir_class.assignable_to( - vt.value_type - ): - yield Completion( - id, - CompletionItemKind.Variable, - signature=" " + obj.signature, - sort_text=get_sort_key(CompletionPriority.NAMED_OBJECT, id), - ) + yield from get_object_id_completions(ctx, vt.value_type) if isinstance(ctx.ast_node, language.Property): yield from _available_namespace_completions(ctx) diff --git a/blueprintcompiler/completions_utils.py b/blueprintcompiler/completions_utils.py index d8bcbc2..970d429 100644 --- a/blueprintcompiler/completions_utils.py +++ b/blueprintcompiler/completions_utils.py @@ -22,7 +22,7 @@ import typing as T from dataclasses import dataclass from enum import Enum -from . import gir +from . import gir, language from .ast_utils import AstNode from .lsp_utils import Completion, CompletionItemKind from .tokenizer import Token, TokenType @@ -163,3 +163,18 @@ def get_property_completion( snippet=snippet, docs=doc, ) + + +def get_object_id_completions( + ctx: CompletionContext, value_type: T.Optional[gir.GirType] = None +): + for id, obj in ctx.ast_node.root.context[language.ScopeCtx].objects.items(): + if value_type is None or ( + obj.gir_class is not None and obj.gir_class.assignable_to(value_type) + ): + yield Completion( + id, + CompletionItemKind.Variable, + signature=" " + obj.signature, + sort_text=get_sort_key(CompletionPriority.NAMED_OBJECT, id), + ) diff --git a/blueprintcompiler/language/gobject_signal.py b/blueprintcompiler/language/gobject_signal.py index 3b4235f..b6afb09 100644 --- a/blueprintcompiler/language/gobject_signal.py +++ b/blueprintcompiler/language/gobject_signal.py @@ -247,3 +247,11 @@ def decompile_signal( line += ";" ctx.print(line) return gir + + +@completer( + [Signal], + [[(TokenType.PUNCTUATION, "(")]], +) +def signal_object_completer(ctx: CompletionContext): + yield from get_object_id_completions(ctx)