# analyzer URL: /api/analysis/analyzer/ Section: analysis -------------------------------------------------------------------------------- analyzer - Kida window.BENGAL_THEME_DEFAULTS = { appearance: 'light', palette: 'brown-bengal' }; window.Bengal = window.Bengal || {}; window.Bengal.enhanceBaseUrl = '/kida/assets/js/enhancements'; window.Bengal.watchDom = true; window.Bengal.debug = false; window.Bengal.enhanceUrls = { 'toc': '/kida/assets/js/enhancements/toc.632a9783.js', 'docs-nav': '/kida/assets/js/enhancements/docs-nav.57e4b129.js', 'tabs': '/kida/assets/js/enhancements/tabs.aac9e817.js', 'lightbox': '/kida/assets/js/enhancements/lightbox.1ca22aa1.js', 'interactive': '/kida/assets/js/enhancements/interactive.fc077855.js', 'mobile-nav': '/kida/assets/js/enhancements/mobile-nav.d991657f.js', 'action-bar': '/kida/assets/js/enhancements/action-bar.d62417f4.js', 'copy-link': '/kida/assets/js/enhancements/copy-link.7d9a5c29.js', 'data-table': '/kida/assets/js/enhancements/data-table.1f5bc1eb.js', 'lazy-loaders': '/kida/assets/js/enhancements/lazy-loaders.a5c38245.js', 'holo': '/kida/assets/js/enhancements/holo.ee13c841.js', 'link-previews': '/kida/assets/js/enhancements/link-previews.8d906535.js' }; (function () { try { var defaults = window.BENGAL_THEME_DEFAULTS || { appearance: 'system', palette: '' }; var defaultAppearance = defaults.appearance; if (defaultAppearance === 'system') { defaultAppearance = (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light'; } var storedTheme = localStorage.getItem('bengal-theme'); var storedPalette = localStorage.getItem('bengal-palette'); var theme = storedTheme ? (storedTheme === 'system' ? defaultAppearance : storedTheme) : defaultAppearance; var palette = storedPalette ?? defaults.palette; document.documentElement.setAttribute('data-theme', theme); if (palette) { document.documentElement.setAttribute('data-palette', palette); } } catch (e) { document.documentElement.setAttribute('data-theme', 'light'); } })(); { "prerender": [ { "where": { "and": [ { "href_matches": "/docs/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ], "prefetch": [ { "where": { "and": [ { "href_matches": "/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ] } Skip to main content Magnifying Glass ESC Recent Clear Magnifying Glass No results for "" Start typing to search... ↑↓ Navigate ↵ Open ESC Close Powered by Lunr )彡 DocumentationInfoAboutArrow ClockwiseGet StartedCodeSyntaxTerminalUsageNoteTutorialsStarburstExtendingBookmarkReferenceTroubleshootingReleasesDevGitHubKida API Reference Magnifying Glass Search ⌘K Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal List )彡 Magnifying Glass Search X Close Documentation Caret Down Info About Arrow Clockwise Get Started Code Syntax Terminal Usage Note Tutorials Starburst Extending Bookmark Reference Troubleshooting Releases Dev Caret Down GitHub Kida API Reference Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal Kida API Reference Caret Right Analysis analyzer cache config dependencies landmarks metadata purity roles Caret Right Compiler Caret Right Statements basic control_flow functions special_blocks template_structure variables _protocols coalescing core expressions utils Caret Right Environment core exceptions filters loaders protocols registry tests Caret Right Parser Caret Right Blocks control_flow core functions special_blocks template_structure variables _protocols core errors expressions statements tokens Caret Right Utils html lru_cache workers _types bytecode_cache kida lexer nodes template tstring Kida API ReferenceAnalysis ᗢ Caret Down Link Copy URL External Open LLM text Copy Copy LLM text Share with AI Ask Claude Ask ChatGPT Ask Gemini Ask Copilot Module analysis.analyzer Block analyzer - unified entry point for template analysis. Combines dependency analysis, purity checking, landmark detection, and role classification into a unified analysis pass. 1Class Classes BlockAnalyzer 8 ▼ Analyze template blocks and extract metadata. Combines dependency analysis, purity checking, landm… 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. 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. 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. 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. def _collect_blocks(self, ast: Template) -> list[Block] Parameters Name Type Description ast — Returns list[Block] _collect_blocks_recursive 2 ▼ Recursively find Block nodes. 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… 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. 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. def _check_emits_html(self, node: Any) -> bool Parameters Name Type Description node — Returns bool ← Previous analysis Next → cache List © 2026 Kida built in ᓚᘏᗢ { "linkPreviews": { "enabled": true, "hoverDelay": 200, "hideDelay": 150, "showSection": true, "showReadingTime": true, "showWordCount": true, "showDate": true, "showTags": true, "maxTags": 3, "includeSelectors": [".prose"], "excludeSelectors": ["nav", ".toc", ".breadcrumb", ".pagination", ".card", "[class*='-card']", ".tab-nav", "[class*='-widget']", ".child-items", ".content-tiles"], "allowedHosts": [], "allowedSchemes": ["https"], "hostFailureThreshold": 3 } } window.BENGAL_LAZY_ASSETS = { tabulator: '/kida/assets/js/tabulator.min.js', dataTable: '/kida/assets/js/data-table.js', mermaidToolbar: '/kida/assets/js/mermaid-toolbar.9de5abba.js', mermaidTheme: '/kida/assets/js/mermaid-theme.344822c5.js', graphMinimap: '/kida/assets/js/graph-minimap.ff04e939.js', graphContextual: '/kida/assets/js/graph-contextual.355458ba.js' }; window.BENGAL_ICONS = { close: '/kida/assets/icons/close.911d4fe1.svg', enlarge: '/kida/assets/icons/enlarge.652035e5.svg', copy: '/kida/assets/icons/copy.3d56e945.svg', 'download-svg': '/kida/assets/icons/download.04f07e1b.svg', 'download-png': '/kida/assets/icons/image.c34dfd40.svg', 'zoom-in': '/kida/assets/icons/zoom-in.237b4a83.svg', 'zoom-out': '/kida/assets/icons/zoom-out.38857c77.svg', reset: '/kida/assets/icons/reset.d26dba29.svg' }; Arrow Up -------------------------------------------------------------------------------- Metadata: - Word Count: 884 - Reading Time: 4 minutes