ollie/contrib/tools/lsp_diagnostics

44 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python3
# ollie:parallel read
# args_json: {"type":"object","required":["path"],"properties":{"path":{"type":"string","description":"Absolute file path"}}}
# ollie:prompt
# ## lsp_diagnostics
#
# Errors and warnings for a file.
#
# **Args**: `[path]`
#
# ```
# lsp_diagnostics(path="/abs/path.go")
# ```
# 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"))
result = request("diagnostics", file=filepath)
if not result:
print("(no diagnostics)")
sys.exit(0)
SEVERITY = {1: "error", 2: "warning", 3: "info", 4: "hint"}
for diag in result:
sev = SEVERITY.get(diag.get("severity", 3), "info")
ln = diag.get("range", {}).get("start", {}).get("line", 0) + 1
col = diag.get("range", {}).get("start", {}).get("character", 0) + 1
msg = diag.get("message", "")
src = diag.get("source", "")
prefix = f"{src}: " if src else ""
print(f"{ln}:{col} {sev}: {prefix}{msg}")
print(f"\n({len(result)} diagnostics)")