Perl-Critic / PPI

54 stars 44 forks source link

Support indented here-doc #209

Closed akiym closed 5 years ago

akiym commented 7 years ago

This p-r supports indented here-doc from perl-5.26 and resolves #203

my $heredoc = <<~HERE
    indented
    HERE

before:

PPI::Document
  PPI::Statement::Variable
    PPI::Token::Word    'my'
    PPI::Token::Whitespace      ' '
    PPI::Token::Symbol          '$heredoc'
    PPI::Token::Whitespace      ' '
    PPI::Token::Operator        '='
    PPI::Token::Whitespace      ' '
    PPI::Token::Operator        '<<'
    PPI::Token::Operator        '~'
    PPI::Token::Word    'HERE'
    PPI::Token::Whitespace      '\n'
    PPI::Token::Whitespace      '    '
    PPI::Token::Word    'indented'
    PPI::Token::Whitespace      '\n'
    PPI::Token::Whitespace      '    '
    PPI::Token::Word    'HERE'
  PPI::Token::Whitespace        '\n'

after:

PPI::Document
  PPI::Statement::Variable
    PPI::Token::Word    'my'
    PPI::Token::Whitespace      ' '
    PPI::Token::Symbol          '$heredoc'
    PPI::Token::Whitespace      ' '
    PPI::Token::Operator        '='
    PPI::Token::Whitespace      ' '
    PPI::Token::HereDoc         '<<~HERE'
  PPI::Token::Whitespace        '\n'

Also indented heredoc removes specified indentation from the result of calling $heredoc->heredoc.

my $content = q(
my $heredoc = <<~HERE
    indented
    HERE
);

my $doc = PPI::Document->new(\$content);
my $heredoc = $doc->find_first('PPI::Token::HereDoc');
print $heredoc->heredoc; # "indented\n"
oschwald commented 6 years ago

I'd love to see this merged and released.

wchristian commented 5 years ago

Thanks for the patch, this is released as https://metacpan.org/release/MITHALDU/PPI-1.246