ollie/tools/lsp_hover

45 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python3
# ollie:parallel read
# args_json: {"type":"object","required":["path","line","col"],"properties":{"path":{"type":"string","description":"Absolute file path"},"line":{"type":"string","description":"Line number (1-indexed)"},"col":{"type":"string","description":"Column number (1-indexed)"}}}
# ollie:prompt
# ## lsp_hover
#
# Type signature and documentation for symbol at position.
#
# **Args**: `[path, line, col]`
#
# ```
# lsp_hover(path="/abs/path.go", line="42", col="10")
# ```
# 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.args import parse_args
from _lib.lsp.client import request
args = parse_args()
filepath = os.path.abspath(args.require("path"))
line = int(args.require("line")) - 1
col = int(args.require("col")) - 1
result = request("hover", file=filepath, line=line, col=col)
if not result:
print("(no hover info)")
sys.exit(0)
contents = result.get("contents", "")
if isinstance(contents, dict):
print(contents.get("value", str(contents)))
elif isinstance(contents, list):
for item in contents:
if isinstance(item, dict):
print(item.get("value", str(item)))
else:
print(item)
else:
print(contents)