For because?
Syntax hilighting editors (scite) usually highlight the matching parens, ... programmers usually add newlines ...
ppi_dumper knows everything, PPI easily gets you a neat tree, and you can easily adjust the whitespace to your liking ( ppix_regexp_strip_comments )
PPI::Statement
PPI::Structure::List ( ... )
PPI::Statement::Expression
PPI::Token::Word 'ab'
PPI::Token::Whitespace ' '
PPI::Token::Operator '+'
PPI::Token::Whitespace ' '
PPI::Structure::List ( ... )
PPI::Statement::Expression
PPI::Token::Word 'fun1'
PPI::Structure::List ( ... )
PPI::Statement::Expression
PPI::Token::Word 'fun2'
PPI::Structure::List ( ... )
PPI::Statement::Expression
PPI::Token::Number '3'
PPI::Token::Whitespace ' '
PPI::Token::Operator '+'
PPI::Token::Whitespace ' '
PPI::Token::Word 'fun3'
PPI::Structure::List ( ... )
PPI::Statement::Expression
PPI::Token::Number '4'
PPI::Token::Whitespace ' '
PPI::Token::Operator '+'
PPI::Token::Whitespace ' '
PPI::Structure::List ( ... )
PPI::Statement::Expression
PPI::Token::Number '5'
PPI::Token::Whitespace ' '
PPI::Token::Operator '+'
PPI::Token::Whitespace ' '
PPI::Token::Number '6'
PPI::Token::Structure ';'