# analysis_phases

URL: /kida/api/compiler/analysis_phases/
Section: compiler
Description: Template-structure validation and block/region discovery for compilation.

---

> For a complete page index, fetch /kida/llms.txt.

Open LLM text
(/kida/api/compiler/analysis_phases/index.txt)

Share with AI

Ask Claude
(https://claude.ai/new?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fkida%2Fapi%2Fcompiler%2Fanalysis_phases%2Findex.txt)

Ask ChatGPT
(https://chatgpt.com/?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fkida%2Fapi%2Fcompiler%2Fanalysis_phases%2Findex.txt)

Ask Gemini
(https://gemini.google.com/app?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fkida%2Fapi%2Fcompiler%2Fanalysis_phases%2Findex.txt)

Ask Copilot
(https://copilot.microsoft.com/?q=Please%20help%20me%20understand%20this%20documentation%3A%20%2Fkida%2Fapi%2Fcompiler%2Fanalysis_phases%2Findex.txt)

Module

#
`compiler.analysis_phases`

Template-structure validation and block/region discovery for compilation.

3Classes5Functions

## Classes

`JinjaSetReadFinding`

4

▼

One proven Jinja ``if`` assignment read outside its Kida block.

One proven Jinja`if`assignment read outside its Kida block.

#### Attributes

Name
Type
Description

`name`

`str`

—

`lineno`

`int`

—

`suggestion`

`str`

—

`shadow`

`bool`

—

`_JinjaSetOrigin`

5

▼

#### Attributes

Name
Type
Description

`name`

`str`

—

`lineno`

`int`

—

`suggestion`

`str`

—

`shadow`

`bool`

—

`identity`

`tuple[int, str]`

—

`_OriginFlow`

2

▼

#### Attributes

Name
Type
Description

`origin`

`_JinjaSetOrigin | None`

—

`parents`

`tuple[_OriginFlow, ...]`

—

## Functions

`collect_jinja_set_read_findings`

1

`tuple[JinjaSetReadFindin…`

▼

Find proven Jinja ``if`` assignment flow that Kida block scope breaks.

`def collect_jinja_set_read_findings(nodes: Sequence[Node]) -> tuple[JinjaSetReadFinding, ...]`

##### Parameters

Name
Type
Description

`nodes`
`Sequence[Node]`

##### Returns

`tuple[JinjaSetReadFinding, ...]`

`collect_template_blocks`

3

`dict[str, Block | Region]`

▼

Validate identifiers and collect all compile-time block/region owners.

`def collect_template_blocks(nodes: Sequence[Node], *, template_name: str | None, filename: str | None) -> dict[str, Block | Region]`

##### Parameters

Name
Type
Description

`nodes`
`Sequence[Node]`

`template_name`
`str | None`

`filename`
`str | None`

##### Returns

`dict[str, Block | Region]`

`has_unconditional_expressions`

1

`bool`

▼

Return whether top-level nodes can produce unconditional name refs.

`def has_unconditional_expressions(body: Sequence[Any]) -> bool`

##### Parameters

Name
Type
Description

`body`
`Sequence[Any]`

##### Returns

`bool`

`collect_variable_references`

1

`tuple[dict[str, int], se…`

▼

Collect unconditional name-reference counts and mutations from Kida AST.

`def collect_variable_references(nodes: Any) -> tuple[dict[str, int], set[str]]`

##### Parameters

Name
Type
Description

`nodes`
`Any`

##### Returns

`tuple[dict[str, int], set[str]]`

`analyze_cacheable_names`

2

`set[str]`

▼

Return names safe and profitable to cache as compiler locals.

`def analyze_cacheable_names(body_nodes: Sequence[Any], *, local_names: set[str]) -> set[str]`

##### Parameters

Name
Type
Description

`body_nodes`
`Sequence[Any]`

`local_names`
`set[str]`

##### Returns

`set[str]`
