#!/usr/bin/env python3 # ollie:parallel read # ollie:prompt # ## lsp_completion # # Completion candidates at cursor position. # # **Args**: `[path, line, col]` # # ``` # call_tool: calls=[{tool: "lsp_completion", args: ["/abs/path.go", "42", "10"]}] # ``` # # **Returns**: up to 20 candidates. # ollie:end import os import sys sys.path.insert(0, os.environ.get('OLLIE_TOOLS_PATH', os.path.dirname(os.path.abspath(__file__)))) from _lib.lsp.client import request if len(sys.argv) < 4: print("usage: lsp_completion ") sys.exit(1) filepath = os.path.abspath(sys.argv[1]) line = int(sys.argv[2]) - 1 col = int(sys.argv[3]) - 1 result = request("completion", file=filepath, line=line, col=col) if not result: sys.exit(0) items = result.get("items", result) if isinstance(result, dict) else result if not isinstance(items, list): sys.exit(0) for item in items[:20]: label = item.get("label", "") detail = item.get("detail", "") if detail: print(f"{label}\t{detail}") else: print(label)