ollie/tools/lsp_completion

47 lines
1.0 KiB
Python
Executable File

#!/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 <file> <line> <col>")
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)