Module

diagnostics

Public, surface-neutral diagnostics for Kida tooling.

The functions in this module expose the same immutable facts used by kida checkwithout inheriting CLI stream or exit-code policy. Locations use 1-based lines and 0-based columns; end positions are exclusive when present.

Classes

DiagnosticSeverity 0 ▼
Severity assigned by the diagnostic producer.

Severity assigned by the diagnostic producer.

DiagnosticConfidence 0 ▼
How conclusively Kida can make a diagnostic claim.

How conclusively Kida can make a diagnostic claim.

SourcePosition 3 ▼
One source position using a 1-based line and optional 0-based column.

One source position using a 1-based line and optional 0-based column.

Attributes

Name Type Description
line int —
column int | None —

Methods

Internal Methods 1 ▼
__post_init__ 0 ▼
def __post_init__(self) -> None
SourceSpan 5 ▼
Logical template path and optional half-open source range.

Logical template path and optional half-open source range.

Attributes

Name Type Description
path str | None —
start SourcePosition | None —
end SourcePosition | None —

Methods

is_exact 0 bool ▼
Return whether the span is precise enough for a source edit.
property
def is_exact(self) -> bool
Returns
bool
Internal Methods 1 ▼
__post_init__ 0 ▼
def __post_init__(self) -> None
RelatedLocation 3 ▼
A labeled source location related to the primary finding.

A labeled source location related to the primary finding.

Attributes

Name Type Description
label str —
span SourceSpan —

Methods

Internal Methods 1 ▼
__post_init__ 0 ▼
def __post_init__(self) -> None
SafeEdit 4 ▼
An unambiguous replacement over an exact source span.

An unambiguous replacement over an exact source span.

Attributes

Name Type Description
span SourceSpan —
replacement str —
description str | None —

Methods

Internal Methods 1 ▼
__post_init__ 0 ▼
def __post_init__(self) -> None
DiagnosticSnippet 4 ▼
Plain source lines surrounding a diagnostic.

Plain source lines surrounding a diagnostic.

Attributes

Name Type Description
lines tuple[tuple[int, str], ...] —
error_line int —
column int | None —

Methods

Internal Methods 1 ▼
__post_init__ 0 ▼
def __post_init__(self) -> None
Diagnostic 16 ▼
One immutable Kida finding, independent of its output surface.

One immutable Kida finding, independent of its output surface.

Attributes

Name Type Description
code str —
category str —
severity DiagnosticSeverity —
message str —
span SourceSpan —
title str | None —
kind str | None —
suggestion str | None —
safe_edit SafeEdit | None —
related_locations tuple[RelatedLocation, ...] —
confidence DiagnosticConfidence —
notes tuple[str, ...] —
documentation_url str | None —
source_snippet DiagnosticSnippet | None —
metadata tuple[tuple[str, str], ...] —

Methods

Internal Methods 1 ▼
__post_init__ 0 ▼
def __post_init__(self) -> None
DiagnosticConverter 1 ▼
Pure conversion boundary from one producer record to ``Diagnostic``.

Pure conversion boundary from one producer record toDiagnostic.

Methods

Internal Methods 1 ▼
__call__ 1 Diagnostic ▼
def __call__(self, source: SourceT, /) -> Diagnostic
Parameters
Name Type Description
source —
Returns
Diagnostic
DiagnosticOptions 5 ▼
Opt-in static checks shared by source and directory diagnosis.

Opt-in static checks shared by source and directory diagnosis.

Attributes

Name Type Description
strict bool —
validate_calls bool —
a11y bool —
typed bool —
lint_fragile_paths bool —
DiagnosticReport 2 ▼
Policy-neutral result of one programmatic diagnostic request.

Policy-neutral result of one programmatic diagnostic request.

Attributes

Name Type Description
diagnostics tuple[Diagnostic, ...] —
partial bool —

Functions

diagnose_directory 2 DiagnosticReport ▼
Diagnose templates below *root* with the same collection as ``kida check``.
def diagnose_directory(root: str | PathLike[str], *, options: DiagnosticOptions = _DEFAULT_OPTIONS) -> DiagnosticReport
Parameters
Name Type Description
root str | PathLike[str]
options DiagnosticOptions Default:_DEFAULT_OPTIONS
Returns
DiagnosticReport
diagnose_source 4 DiagnosticReport ▼
Diagnose an in-memory template without adding it to environment caches. A supp…
def diagnose_source(source: str, *, name: str = '<string>', environment: Environment | None = None, options: DiagnosticOptions = _DEFAULT_OPTIONS) -> DiagnosticReport

Diagnose an in-memory template without adding it to environment caches.

A supplied environment contributes lexer/parser configuration, extensions, autoescape selection, and loader-backed imported component metadata. Kida does not mutate its registries; resolving imports may use that environment's existing thread-safe template cache.

Parameters
Name Type Description
source str
name str Default:'<string>'
environment Environment | None Default:None
options DiagnosticOptions Default:_DEFAULT_OPTIONS
Returns
DiagnosticReport
diagnostic_from_exception 2 Diagnostic ▼
Convert a Kida template or lexer exception into one public diagnostic. ``TypeE…
def diagnostic_from_exception(error: Exception, *, path: str | None = None) -> Diagnostic

Convert a Kida template or lexer exception into one public diagnostic.

TypeErroris raised for unrelated Python exceptions so framework adapters cannot accidentally relabel arbitrary application failures as Kida diagnostics.

Parameters
Name Type Description
error Exception
path str | None Default:None
Returns
Diagnostic
apply_safe_edits 3 str ▼
Apply non-overlapping, snapshot-matched safe edits for one template. Diagnosti…
def apply_safe_edits(source: str, diagnostics: Iterable[Diagnostic], *, path: str) -> str

Apply non-overlapping, snapshot-matched safe edits for one template.

Diagnostics for other paths and diagnostics without a safe edit are ignored. AValueErroris raised before any edit is applied when the current source differs from the captured source lines, a snapshot is incomplete, or two selected edits overlap.

Parameters
Name Type Description
source str
diagnostics Iterable[Diagnostic]
path str
Returns
str