Classes
BlockAnalyzer
8
▼
Analyze template blocks and extract metadata.
Combines dependency analysis, purity checking, landm…
BlockAnalyzer
8
▼
Analyze template blocks and extract metadata.
Combines dependency analysis, purity checking, landmark detection, and role classification into a unified analysis pass.
Thread-safe: Stateless analyzers, creates new result objects.
Configuration:
>>> from kida.analysis import AnalysisConfig
>>> config = AnalysisConfig(
... page_prefixes=frozenset({"post.", "item."}),
... site_prefixes=frozenset({"global.", "settings."}),
... )
>>> analyzer = BlockAnalyzer(config=config)
Methods
analyze
1
TemplateMetadata
▼
Analyze a template AST and return metadata.
analyze
1
TemplateMetadata
▼
def analyze(self, ast: Template) -> TemplateMetadata
Parameters
| Name | Type | Description |
|---|---|---|
ast |
— |
Parsed template AST (nodes.Template) |
Returns
TemplateMetadata
TemplateMetadata with block information
Internal Methods 7 ▼
__init__
2
▼
Initialize analyzer with optional configuration.
__init__
2
▼
def __init__(self, config: AnalysisConfig | None = None, template_resolver: Any | None = None) -> None
Parameters
| Name | Type | Description |
|---|---|---|
config |
— |
Analysis configuration. Uses DEFAULT_CONFIG if not provided. Default:None
|
template_resolver |
— |
Optional callback(name: str) -> Template | None to resolve included templates for purity analysis. If None, includes return "unknown" purity. Default:None
|
_analyze_block
1
BlockMetadata
▼
Analyze a single block node.
_analyze_block
1
BlockMetadata
▼
def _analyze_block(self, block_node: Block) -> BlockMetadata
Parameters
| Name | Type | Description |
|---|---|---|
block_node |
— |
Returns
BlockMetadata
_collect_blocks
1
list[Block]
▼
Recursively collect all Block nodes from AST.
_collect_blocks
1
list[Block]
▼
def _collect_blocks(self, ast: Template) -> list[Block]
Parameters
| Name | Type | Description |
|---|---|---|
ast |
— |
Returns
list[Block]
_collect_blocks_recursive
2
▼
Recursively find Block nodes.
_collect_blocks_recursive
2
▼
def _collect_blocks_recursive(self, nodes: Any, blocks: list[Any]) -> None
Parameters
| Name | Type | Description |
|---|---|---|
nodes |
— |
|
blocks |
— |
_analyze_top_level
2
frozenset[str]
▼
Analyze dependencies in top-level code outside blocks.
This captures dependenc…
_analyze_top_level
2
frozenset[str]
▼
def _analyze_top_level(self, ast: Template, block_names: set[str]) -> frozenset[str]
Analyze dependencies in top-level code outside blocks.
This captures dependencies from:
- Code before/after blocks
- Extends expression (e.g., dynamic parent template)
- Context type declarations
Does NOT include dependencies from inside blocks (those are tracked per-block).
Parameters
| Name | Type | Description |
|---|---|---|
ast |
— |
|
block_names |
— |
Returns
frozenset[str]
_analyze_top_level_nodes
3
▼
Walk nodes, collecting dependencies but skipping block bodies.
_analyze_top_level_nodes
3
▼
def _analyze_top_level_nodes(self, nodes: Any, block_names: set[str], deps: set[str]) -> None
Parameters
| Name | Type | Description |
|---|---|---|
nodes |
— |
|
block_names |
— |
|
deps |
— |
_check_emits_html
1
bool
▼
Check if a node produces any output.
_check_emits_html
1
bool
▼
def _check_emits_html(self, node: Any) -> bool
Parameters
| Name | Type | Description |
|---|---|---|
node |
— |
Returns
bool