Хорошо бы выделить нагрузку раскраски кода на отдельный компонент. Кандидатом как раз может стать (компонент)Smart.

Идея выделения с помощью вьюшки со стрелками заслуживает внимания.
Допустим,
→in
←out
↔var