From 0a74937d9091cb3074e692bd8bc431148c8b783b Mon Sep 17 00:00:00 2001 From: Michael Panchenko Date: Mon, 28 Apr 2025 15:10:48 +0200 Subject: [PATCH] Multilspy: gopls - added a horrible hack to compensate for the wrong selectionRange --- src/multilspy/language_servers/gopls/gopls.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/multilspy/language_servers/gopls/gopls.py b/src/multilspy/language_servers/gopls/gopls.py index f3ca2d03..73970cfd 100644 --- a/src/multilspy/language_servers/gopls/gopls.py +++ b/src/multilspy/language_servers/gopls/gopls.py @@ -154,3 +154,18 @@ class Gopls(LanguageServer): await self.server.shutdown() await self.server.stop() + + @override + async def request_references( + self, relative_file_path: str, line: int, column: int + ) -> List[multilspy_types.Location]: + NUM_COLS_TO_TRY = 10 + """selectionRange in Gopls always return the wrong column, + the one at the beginnning of the declaration instead of the symbol. We do a dirty hack here.""" + actual_column = column + for actual_column in range(column, column+NUM_COLS_TO_TRY): + try: + return await super().request_references(relative_file_path, line, actual_column) + except (Error, RuntimeError, MultilspyException) as e: + self.logger.log(f"Cannot find symbol at {line=}, column={actual_column}, trying to bump column by 1", logging.INFO) + raise RuntimeError(f"Failed to find references for symbol at {line=}, {column=}")