diff options
author | Yves Orton <demerphq@gmail.com> | 2023-03-28 21:57:22 +0200 |
---|---|---|
committer | Yves Orton <demerphq@gmail.com> | 2023-04-05 15:22:55 +0800 |
commit | 67d37c55ddffebbcbf4847408106334b9ad9a6bc (patch) | |
tree | 3ec4fed15f1eae09374bbfc4d97f27ced64155fd /t | |
parent | 0398b69bfddc8738a4788f056a79ba9e4d44fcfb (diff) | |
download | perl-67d37c55ddffebbcbf4847408106334b9ad9a6bc.tar.gz |
regen/HeaderParser.pm - improved expression formatting and wrapping
Karl complained about some of the wrapping logic we use for expressions.
This tweaks the rules in a number of different ways in an attempt to
produce more legible expressions. For instance if we have a complex
expression with different parenthesized sub expressions, then try to put
each sub expression on its own line. A previous patch ensures that we
put shorter sub expressions first, and this patch builds on that to put
each sub expression on its own line.
We also use different logic to wrap the expressions, with the end result
that each line should have the same number of defined() operations on it
(with the exception of the last). We also try harder to line up
logical operators and defined() functions.
Diffstat (limited to 't')
-rw-r--r-- | t/porting/header_parser.t | 127 |
1 files changed, 110 insertions, 17 deletions
diff --git a/t/porting/header_parser.t b/t/porting/header_parser.t index a2a33b8371..6bbf33e6fb 100644 --- a/t/porting/header_parser.t +++ b/t/porting/header_parser.t @@ -26,7 +26,7 @@ sub show_text { print STDERR $as_text=~s/^/" " x 8/mger; } -my $hp= HeaderParser->new; +my $hp= HeaderParser->new(); $hp->parse_text(<<~'EOF'); #ifdef A #ifdef B @@ -129,8 +129,9 @@ is($lines_as_str,<<~'DUMP_EOF', "Simple data structure as expected") or show_tex ] ], "flat" => "#endif", + "inner_lines" => 3, "level" => 1, - "line" => "# endif /* defined(B) */\n", + "line" => "# endif\n", "n_lines" => 1, "raw" => "#endif\n", "source" => "(buffer)", @@ -177,8 +178,9 @@ is($lines_as_str,<<~'DUMP_EOF', "Simple data structure as expected") or show_tex ] ], "flat" => "#endif", + "inner_lines" => 7, "level" => 0, - "line" => "#endif /* defined(A) */\n", + "line" => "#endif\n", "n_lines" => 1, "raw" => "#endif\n", "source" => "(buffer)", @@ -218,10 +220,10 @@ is($normal,<<~'EOF',"Normalized text as expected"); # if defined(B) # define AB content 1 - # endif /* defined(B) */ + # endif content 2 # define A - #endif /* defined(A) */ + #endif /*comment line */ #define C /* this is @@ -232,7 +234,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); my @warn; local $SIG{__WARN__}= sub { push @warn, $_[0]; warn $_[0] }; my $ok= eval { - HeaderParser->new()->parse_text(<<~'EOF'); 1 + HeaderParser->new(add_commented_expr_after=>0)->parse_text(<<~'EOF'); 1 #ifdef A #ifdef B #endif @@ -247,7 +249,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); my @warn; local $SIG{__WARN__}= sub { push @warn, $_[0]; warn $_[0] }; my $ok= eval { - HeaderParser->new()->parse_text(<<~'EOF'); 1 + HeaderParser->new(add_commented_expr_after=>0)->parse_text(<<~'EOF'); 1 #ifdef A #ifdef B #elif C @@ -262,7 +264,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); my @warn; local $SIG{__WARN__}= sub { push @warn, $_[0]; warn $_[0] }; my $ok= eval { - HeaderParser->new()->parse_text(<<~'EOF'); 1 + HeaderParser->new(add_commented_expr_after=>0)->parse_text(<<~'EOF'); 1 #if 1 * * 10 > 5 #elifdef C EOF @@ -277,7 +279,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); "Expected token error") or warn $err; } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #ifdef A @@ -308,7 +310,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); EOF } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if defined(A) && defined(B) # if (defined(C) && defined(D)) @@ -338,7 +340,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); EOF } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if defined(A) #define HAS_A @@ -365,7 +367,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); EOF } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if defined(A) #define HAS_A @@ -399,7 +401,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); EOF } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if defined(A) #define HAS_A @@ -443,7 +445,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); EOF } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if !defined(A) #define NOT_A1 @@ -469,7 +471,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); EOF } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if !!!(defined(A) && defined(B)) #define NOT_A_AND_B @@ -491,7 +493,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); EOF } { - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if defined(A) && !!defined(A) && !!!!defined(A) #define HAS_A @@ -509,7 +511,7 @@ is($normal,<<~'EOF',"Normalized text as expected"); local $::TODO; $::TODO= "Absorbtion not implemented yet"; # currently we don't handle absorbtion: (A && (A || B || C ...)) == A - my $hp= HeaderParser->new(debug=>0); + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); $hp->parse_text(<<~'EOF'); #if defined(X) && (defined(X) || defined(Y)) #define HAS_X @@ -523,5 +525,96 @@ is($normal,<<~'EOF',"Normalized text as expected"); #endif /* defined(X) */ EOF } +{ + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); + $hp->parse_text(<<~'EOF'); + #if defined(A) && (defined(B) && defined(C)) + #define HAS_A + #endif + EOF + my $grouped= $hp->group_content(); + my $as_text= $hp->lines_as_str($grouped); + is($as_text,<<~'EOF',"expression flattening") or show_text($as_text); + #if defined(A) && defined(B) && defined(C) + # define HAS_A + #endif /* defined(A) && defined(B) && defined(C) */ + EOF +} +{ + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>3); + $hp->parse_text(<<~'EOF'); + #if defined(A) + #define HAS_A1 + #define HAS_A2 + #define HAS_A3 + #endif + #if defined(B) + #define HAS_B1 + #else + #define HAS_B1e + #define HAS_B2e + #define HAS_B3e + #endif + #if defined(C) + #if defined(D) + #define HAS_D1 + #endif + #elif defined(CC) + #define HAS_CC1 + #define HAS_CC2 + #define HAS_CC3 + #endif + EOF + my $grouped= $hp->group_content(); + my $as_text= $hp->lines_as_str($grouped); + is($as_text,<<~'EOF',"auto-comments") or show_text($as_text); + #if defined(A) + # define HAS_A1 + # define HAS_A2 + # define HAS_A3 + #endif /* defined(A) */ + #if defined(B) + # define HAS_B1 + #else + # define HAS_B1e + # define HAS_B2e + # define HAS_B3e + #endif /* !defined(B) */ + #if defined(C) + # if defined(D) + # define HAS_D1 + # endif + #elif defined(CC) /* && !defined(C) */ + # define HAS_CC1 + # define HAS_CC2 + # define HAS_CC3 + #endif /* !defined(C) && defined(CC) */ + EOF +} +{ + my $hp= HeaderParser->new(debug=>0,add_commented_expr_after=>0); + $hp->parse_text(<<~'EOF'); + #if defined(DEBUGGING) \ + || (defined(USE_LOCALE) && ( defined(USE_THREADS) \ + || defined(HAS_IGNORED_LOCALE_CATEGORIES)\ + || defined(USE_POSIX_2008_LOCALE) \ + || ! defined(LC_ALL))) + # define X + #endif + EOF + my $grouped= $hp->group_content(); + my $as_text= $hp->lines_as_str($grouped); + is($as_text,<<~'EOF',"Karls example") or show_text($as_text); + #if defined(DEBUGGING) || \ + ( defined(USE_LOCALE) && \ + ( defined(HAS_IGNORED_LOCALE_CATEGORIES) || !defined(LC_ALL) || \ + defined(USE_POSIX_2008_LOCALE) || defined(USE_THREADS) ) ) + # define X + #endif /* defined(DEBUGGING) || + ( defined(USE_LOCALE) && + ( defined(HAS_IGNORED_LOCALE_CATEGORIES) || !defined(LC_ALL) || + defined(USE_POSIX_2008_LOCALE) || defined(USE_THREADS) ) ) */ + EOF +} done_testing(); |