Skip to content

Command-line interface

cli

format_n3_syntax_error

format_n3_syntax_error(error: N3SyntaxError, text: str, label: str = '<input>') -> str

Render syntax errors like the JavaScript Eyeling CLI.

Source code in pyling/cli.py
def format_n3_syntax_error(error: N3SyntaxError, text: str, label: str = "<input>") -> str:
    """Render syntax errors like the JavaScript Eyeling CLI."""
    offset = getattr(error, "offset", None)
    if not isinstance(offset, int):
        return f"Syntax error in {label}: {error}"
    offset = max(0, min(offset, len(text)))
    before = text[:offset]
    line = before.count("\n") + before.count("\r") - before.count("\r\n") + 1
    line_start = max(text.rfind("\n", 0, offset), text.rfind("\r", 0, offset)) + 1
    line_end_candidates = [pos for pos in (text.find("\n", offset), text.find("\r", offset)) if pos >= 0]
    line_end = min(line_end_candidates) if line_end_candidates else len(text)
    column = offset - line_start + 1
    line_text = text[line_start:line_end]
    return f"Syntax error in {label}:{line}:{column}: {error}\n{line_text}\n{' ' * (column - 1)}^"