From f6d05be10ba7db95c518d57ad839346db5ad2d01 Mon Sep 17 00:00:00 2001 From: James Westman Date: Sat, 19 Oct 2024 20:44:34 -0500 Subject: [PATCH] lsp: Add more "go to reference" implementations --- blueprintcompiler/language/adw_breakpoint.py | 11 +++++++++++ blueprintcompiler/language/gobject_signal.py | 10 ++++++++++ blueprintcompiler/language/gtk_size_group.py | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/blueprintcompiler/language/adw_breakpoint.py b/blueprintcompiler/language/adw_breakpoint.py index eec7c7e..e7716e6 100644 --- a/blueprintcompiler/language/adw_breakpoint.py +++ b/blueprintcompiler/language/adw_breakpoint.py @@ -115,6 +115,17 @@ class AdwBreakpointSetter(AstNode): self.value.range.text, ) + def get_reference(self, idx: int) -> T.Optional[LocationLink]: + if idx in self.group.tokens["object"].range: + if self.object is not None: + return LocationLink( + self.group.tokens["object"].range, + self.object.range, + self.object.ranges["id"], + ) + + return None + @context(ValueTypeCtx) def value_type(self) -> ValueTypeCtx: if self.gir_property is not None: diff --git a/blueprintcompiler/language/gobject_signal.py b/blueprintcompiler/language/gobject_signal.py index 9348321..8da59a5 100644 --- a/blueprintcompiler/language/gobject_signal.py +++ b/blueprintcompiler/language/gobject_signal.py @@ -117,6 +117,16 @@ class Signal(AstNode): self.ranges["detail_start", "detail_end"].text, ) + def get_reference(self, idx: int) -> T.Optional[LocationLink]: + if idx in self.group.tokens["object"].range: + obj = self.context[ScopeCtx].objects.get(self.object_id) + if obj is not None: + return LocationLink( + self.group.tokens["object"].range, obj.range, obj.ranges["id"] + ) + + return None + @validate("handler") def old_extern(self): if not self.tokens["extern"]: diff --git a/blueprintcompiler/language/gtk_size_group.py b/blueprintcompiler/language/gtk_size_group.py index 0945e69..fd23738 100644 --- a/blueprintcompiler/language/gtk_size_group.py +++ b/blueprintcompiler/language/gtk_size_group.py @@ -39,6 +39,12 @@ class Widget(AstNode): self.group.tokens["name"].range, ) + def get_reference(self, _idx: int) -> T.Optional[LocationLink]: + if obj := self.context[ScopeCtx].objects.get(self.name): + return LocationLink(self.range, obj.range, obj.ranges["id"]) + else: + return None + @validate("name") def obj_widget(self): object = self.context[ScopeCtx].objects.get(self.tokens["name"])