diff --git a/.config/kak/scripts/lsp-diags.py b/.config/kak/scripts/lsp-diags.py index 77a628dd..5f8a2032 100755 --- a/.config/kak/scripts/lsp-diags.py +++ b/.config/kak/scripts/lsp-diags.py @@ -1,11 +1,16 @@ #!/usr/bin/env python +import sys +import os + Position = tuple[int, int] SpecList = list[tuple[Position, Position]] +diagnostics: SpecList = [] + def parse_specs(data: str): - diagnostics: SpecList = [] + parsed: SpecList = [] for entry in data.strip().split(): if not entry or len(entry) < 9: continue @@ -13,8 +18,8 @@ def parse_specs(data: str): start_str, end_str = range_part.split(",") sl, sc = map(int, start_str.split(".")) el, ec = map(int, end_str.split(".")) - diagnostics.append(((sl, sc), (el, ec))) - return diagnostics + parsed.append(((sl, sc), (el, ec))) + return parsed def is_cursor_in_any(cursor: Position, diagnostics: SpecList) -> bool: @@ -31,9 +36,35 @@ def is_cursor_in_any(cursor: Position, diagnostics: SpecList) -> bool: return False -if __name__ == "__main__": +def test(): test_data = "1 10.21,10.30|DiagnosticHint 33.43,33.47|DiagnosticHint 34.7,34.10|DiagnosticHint 57.8,57.17|DiagnosticHint 68.9,68.18|DiagnosticHint 69.14,69.23|DiagnosticHint 72.7,72.11|DiagnosticHint 73.70,73.79|DiagnosticHint 75.7,75.11|DiagnosticHint 77.47,77.56|DiagnosticHint 79.27,79.28|DiagnosticHint 81.61,81.70|DiagnosticHint 84.66,84.75|DiagnosticHint 96.4,96.13|DiagnosticHint 97.3,97.12|DiagnosticHint 101.8,101.20|DiagnosticHint 145.28,145.43|DiagnosticHint 153.13,153.21|DiagnosticHint 155.13,155.21|DiagnosticHint 158.5,158.14|DiagnosticHint 164.56,164.61|DiagnosticHint 203.21,203.21|DiagnosticHint 204.28,204.28|DiagnosticHint 206.16,206.16|DiagnosticHint 209.5,209.5|DiagnosticHint 210.5,210.5|DiagnosticHint 216.25,216.25|DiagnosticHint 219.21,219.21|DiagnosticHint 225.27,225.27|DiagnosticHint 234.59,234.59|DiagnosticHint 263.37,263.39|DiagnosticHint 268.55,268.57|DiagnosticHint 287.46,287.47|DiagnosticHint 326.16,326.25|DiagnosticHint 337.34,337.36|DiagnosticHint 339.33,339.35|DiagnosticHint 364.63,364.71|DiagnosticHint 366.46,366.54|DiagnosticHint" out = parse_specs(test_data) print(out) test_cursor = (10, 24) print(is_cursor_in_any(test_cursor, out)) + + +def main(): + in_path = "/tmp/diag-in" + out_path = "/tmp/diag-out" + + with open(in_path, "r") as infile, open(out_path, "w") as outfile: + diagnostics = [] + while True: + line = infile.readline() + if not line: + continue + assert isinstance(line, str) + if line.startswith("set "): + _, payload = line.split(" ", 1) + diagnostics = parse_specs(payload) + _ = outfile.write("ok\n") + outfile.flush() + elif line.startswith("query "): + _, pos = line.split(" ", 1) + l, c = map(int, pos.strip().split()) + result = is_cursor_in_any((l, c), diagnostics) + _ = outfile.write("true\n" if result else "false\n") + outfile.flush() + elif line == "exit": + break