# @TODO

## CI-building optimization
- compiled & cached templates should not contain references to local filesystem paths. Add an optional rootpath param
  to `(add|set)TemplateDir` or as a separate method. Make it default to `getcwd()`. If a relative path is passed to
  `(add|set)TemplateDir`, prefix it with the rootpath at runtime, but do not store the path.

## Review direct variable property access
- review ->value{$index} in ForTag

## include inline
- Re-introduce merge_compiled_includes and the {include inline} attribute?

## Output buffering (major)
- Fix ob_ output buffering commands being scattered around the codebase: Smarty's output model is fundamentally "echo everything, wrap in a buffer to capture". An alternative that would be where rendering returns a string rather than echoing — but that touches the entire compiled template format (the unifunc functions all echo) and is a large change.

## Review public static vars (major)
- such as _CHARSET and _IS_WINDOWS

## Block / inheritance
- Consider phasing out $smarty.block.child as this reverses the inheritance hierarchy and might cause infinite loops
  when combined with $smarty.block.parent

## Plugin system
- fix template security checks in one place in compiler

## Beatify output (major)
- compiled templates could be proper classes, possibly using [nette/php-generator](https://packagist.org/packages/nette/php-generator)

## Unrelated / other
- review (and avoid) use of 'clone' keyword
