44 lines
1.1 KiB
Python
Executable File
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)")
|