X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=CHANGES;h=8415f570d11440b2568b62df42e8a18919e84b6a;hb=7f0d4e4cf8cde72a1e9ea5c3ddc5fb71fc0d7651;hp=80ad1d75e325fafbdcc44bdedcc6cf57e744fded;hpb=4107c18ce17515557235b1ac91ab586b46098727;p=perltidy.git diff --git a/CHANGES b/CHANGES index 80ad1d7..8415f57 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,663 @@ Perltidy Change Log + 2018 02 20 + - RT #124469, #124494, perltidy often making empty files. The previous had + an index error causing it to fail, particularly in version 5.18 of Perl. + + Please avoid version 20180219. + + 2018 02 19 + - RT #79947, cuddled-else generalization. A new flag -cb provides + 'cuddled-else' type formatting for an arbitrary type of block chain. The + default is try-catch-finally, but this can be modified with the + parameter -cbl. + + - Fixed RT #124298: add space after ! operator without breaking !! secret + operator + + - RT #123749: numerous minor improvements to the -wn flag were made. + + - Fixed a problem with convergence tests in which iterations were stopping + prematurely. + + - Here doc targets for <<~ type here-docs may now have leading whitespace. + + - Fixed RT #124354. The '-indent-only' flag was not working correctly in the + previous release. A bug in version 20180101 caused extra blank lines + to be output. + + - Issue RT #124114. Some improvements were made in vertical alignment + involving 'fat commas'. + + 2018 01 01 + - Added new flag -wn (--weld-nested-containers) which addresses these issues: + RT #123749: Problem with promises; + RT #119970: opening token stacking strange behavior; + RT #81853: Can't stack block braces + + This option causes closely nested pairs of opening and closing containers + to be "welded" together and essentially be formatted as a single unit, + with just one level of indentation. + + Since this is a new flag it is set to be "off" by default but it has given + excellent results in testing. + + EXAMPLE 1, multiple blocks, default formatting: + do { + { + next if $x == $y; # do something here + } + } until $x++ > $z; + + perltidy -wn + do { { + next if $x == $y; + } } until $x++ > $z; + + EXAMPLE 2, three levels of wrapped function calls, default formatting: + p( + em( + conjug( + translate( param('verb') ), param('tense'), + param('person') + ) + ) + ); + + # perltidy -wn + p( em( conjug( + translate( param('verb') ), + param('tense'), param('person') + ) ) ); + + # EXAMPLE 3, chained method calls, default formatting: + get('http://mojolicious.org')->then( + sub { + my $mojo = shift; + say $mojo->res->code; + return get('http://metacpan.org'); + } + )->then( + sub { + my $cpan = shift; + say $cpan->res->code; + } + )->catch( + sub { + my $err = shift; + warn "Something went wrong: $err"; + } + )->wait; + + # perltidy -wn + get('http://mojolicious.org')->then( sub { + my $mojo = shift; + say $mojo->res->code; + return get('http://metacpan.org'); + } )->then( sub { + my $cpan = shift; + say $cpan->res->code; + } )->catch( sub { + my $err = shift; + warn "Something went wrong: $err"; + } )->wait; + + + - Fixed RT #114359: Missparsing of "print $x ** 0.5; + + - Deactivated the --check-syntax flag for better security. It will be + ignored if set. + + - Corrected minimum perl version from 5.004 to 5.008 based on perlver + report. The change is required for coding involving wide characters. + + - For certain severe errors, the source file will be copied directly to the + output without formatting. These include ending in a quote, ending in a + here doc, and encountering an unidentified character. + + 2017 12 14 + - RT #123749, partial fix. "Continuation indentation" is removed from lines + with leading closing parens which are part of a call chain. + For example, the call to pack() is is now outdented to the starting + indentation in the following experession: + + # OLD + $mw->Button( + -text => "New Document", + -command => \&new_document + )->pack( + -side => 'bottom', + -anchor => 'e' + ); + + # NEW + $mw->Button( + -text => "New Document", + -command => \&new_document + )->pack( + -side => 'bottom', + -anchor => 'e' + ); + + This modification improves readability of complex expressions, especially + when the user uses the same value for continuation indentation (-ci=n) and + normal indentation (-i=n). Perltidy was already programmed to + do this but a minor bug was preventing it. + + - RT #123774, added flag to control space between a backslash and a single or + double quote, requested by Robert Rothenberg. The issue is that lines like + + $str1=\"string1"; + $str2=\'string2'; + + confuse syntax highlighters unless a space is left between the backslash and + the quote. + + The new flag to control this is -sbq=n (--space-backslash-quote=n), + where n=0 means no space, n=1 means follow existing code, n=2 means always + space. The default is n=1, meaning that a space will be retained if there + is one in the source code. + + - Fixed RT #123492, support added for indented here doc operator <<~ added + in v5.26. Thanks to Chris Weyl for the report. + + - Fixed docs; --closing-side-comment-list-string should have been just + --closing-side-comment-list. Thanks to F.Li. + + - Added patch RT #122030] Perl::Tidy sometimes does not call binmode. + Thanks to Irilis Aelae. + + - Fixed RT #121959, PERLTIDY doesn't honor the 'three dot' notation for + locating a config file using environment variables. Thanks to John + Wittkowski. + + - Minor improvements to formatting, in which some additional vertical + aligmnemt is done. Thanks to Keith Neargarder. + + - RT #119588. Vertical alignment is no longer done for // operator. + + 2017 05 21 + - Fixed debian #862667: failure to check for perltidy.ERR deletion can lead + to overwriting abritrary files by symlink attack. Perltidy was continuing + to write files after an unlink failure. Thanks to Don Armstrong + for a patch. + + - Fixed RT #116344, perltidy fails on certain anonymous hash references: + in the following code snippet the '?' was misparsed as a pattern + delimiter rather than a ternary operator. + return ref {} ? 1 : 0; + + - Fixed RT #113792: misparsing of a fat comma (=>) right after + the __END__ or __DATA__ tokens. These keywords were getting + incorrectly quoted by the following => operator. + + - Fixed RT #118558. Custom Getopt::Long configuration breaks parsing + of perltidyrc. Perltidy was resetting the users configuration too soon. + + - Fixed RT #119140, failure to parse double diamond operator. Code to + handle this new operator has been added. + + - Fixed RT #120968. Fixed problem where -enc=utf8 didn't work + with --backup-and-modify-in-place. Thanks to Heinz Knutzen for this patch. + + - Fixed minor formatting issue where one-line blocks for subs with signatures + were unnecesarily broken + + - RT #32905, patch to fix utf-8 error when output was STDOUT. + + - RT #79947, improved spacing of try/catch/finally blocks. Thanks to qsimpleq + for a patch. + + - Fixed #114909, Anonymous subs with signatures and prototypes misparsed as + broken ternaries, in which a statement such as this was not being parsed + correctly: + return sub ( $fh, $out ) : prototype(*$) { ... } + + - Implemented RT #113689, option to introduces spaces after an opening block + brace and before a closing block brace. Four new optional controls are + added. The first two define the minimum number of blank lines to be + inserted + + -blao=i or --blank-lines-after-opening-block=i + -blbc=i or --blank-lines-before-closing-block=i + + where i is an integer, the number of lines (the default is 0). + + The second two define the types of blocks to which the first two apply + + -blaol=s or --blank-lines-after-opening-block-list=s + -blbcl=s or --blank-lines-before-closing-block-list=s + + where s is a string of possible block keywords (default is just 'sub', + meaning a named subroutine). + + For more information please see the documentation. + + - The method for specifying block types for certain input parameters has + been generalized to distinguish between normal named subroutines and + anonymous subs. The keyword for normal subroutines remains 'sub', and + the new keyword for anonymous subs is 'asub'. + + - Minor documentation changes. The BUGS sections now have a link + to CPAN where most open bugs and issues can be reviewed and bug reports + can be submitted. The information in the AUTHOR and CREDITS sections of + the man pages have been removed from the man pages to streamline the + documentation. This information is still in the source code. + + 2016 03 02 + - RT #112534. Corrected a minor problem in which an unwanted newline + was placed before the closing brace of an anonymous sub with + a signature, if it was in a list. Thanks to Dmytro Zagashev. + + - Corrected a minor problem in which occasional extra indentation was + given to the closing brace of an anonymous sub in a list when the -lp + parameter was set. + + 2016 03 01 + - RT #104427. Added support for signatures. + + - RT #111512. Changed global warning flag $^W = 1 to use warnings; + Thanks to Dmytro Zagashev. + + - RT #110297, added support for new regexp modifier /n + Thanks to Dmytro Zagashev. + + - RT #111519. The -io (--indent-only) and -dac (--delete-all-comments) + can now both be used in one pass. Thanks to Dmitry Veltishev. + + - Patch to avoid error message with 'catch' used by TryCatch, as in + catch($err){ + # do something + } + Thanks to Nick Tonkin. + + - RT #32905, UTF-8 coding is now more robust. Thanks to qsimpleq + and Dmytro for patches. + + - RT #106885. Added string bitwise operators ^. &. |. ~. ^.= &.= |.= + + - Fixed RT #107832 and #106492, lack of vertical alignment of two lines + when -boc flag (break at old commas) is set. This bug was + inadvertantly introduced in previous bug fix RT #98902. + + - Some common extensions to Perl syntax are handled better. + In particular, the following snippet is now foratted cleanly: + + method deposit( Num $amount) { + $self->balance( $self->balance + $amount ); + } + + A new flag -xs (--extended-syntax) was added to enable this, and the default + is to use -xs. + + In previous versions, and now only when -nxs is set, this snippet of code + generates the following error message: + + "syntax error at ') {', didn't see one of: case elsif for foreach given if switch unless until when while" + + 2015 08 15 + - Fixed RT# 105484, Invalid warning about 'else' in 'switch' statement. The + warning happened if a 'case' statement did not use parens. + + - Fixed RT# 101547, misparse of // caused error message. Also.. + + - Fixed RT# 102371, misparse of // caused unwated space in //= + + - Fixed RT# 100871, "silent failure of HTML Output on Windows". + Changed calls to tempfile() from: + my ( $fh_tmp, $tmpfile ) = tempfile(); + to have the full path name: + my ( $fh_tmp, $tmpfile ) = File::Temp::tempfile() + because of problems in the Windows version reported by Dean Pearce. + + - Fixed RT# 99514, calling the perltidy module multiple times with + a .perltidyrc file containing the parameter --output-line-ending + caused a crash. This was a glitch in the memoization logic. + + - Fixed RT#99961, multiple lines inside a cast block caused unwanted + continuation indentation. + + - RT# 32905, broken handling of UTF-8 strings. + A new flag -utf8 causes perltidy assume UTF-8 encoding for input and + output of an io stream. Thanks to Sebastian Podjasek for a patch. + This feature may not work correctly in older versions of Perl. + It worked in a linux version 5.10.1 but not in a Windows version 5.8.3 (but + otherwise perltidy ran correctly). + + - Warning files now report perltidy VERSION. Suggested by John Karr. + + - Fixed long flag --nostack-closing-tokens (-nsct has always worked though). + This was due to a typo. This also fixed --nostack-opening-tokens to + behave correctly. Thanks to Rob Dixon. + + 2014 07 11 + - Fixed RT #94902: abbreviation parsing in .perltidyrc files was not + working for multi-line abbreviations. Thanks to Eric Fung for + supplying a patch. + + - Fixed RT #95708, misparsing of a hash when the first key was a perl + keyword, causing a semicolon to be incorrectly added. + + - Fixed RT #94338 for-loop in a parenthesized block-map. A code block within + parentheses of a map, sort, or grep function was being mistokenized. In + rare cases this could produce in an incorrect error message. The fix will + produce some minor formatting changes. Thanks to Daniel Trizen + discovering and documenting this. + + - Fixed RT #94354, excess indentation for stacked tokens. Thanks to + Colin Williams for supplying a patch. + + - Added support for experimental postfix dereferencing notation introduced in + perl 5.20. RT #96021. + + - Updated documentation to clarify the behavior of the -io flag + in response to RT #95709. You can add -noll or -l=0 to prevent + long comments from being outdented when -io is used. + + - Added a check to prevent a problem reported in RT #81866, where large + scripts which had been compressed to a single line could not be formatted + because of a check for VERSION for MakeMaker. The workaround was to + use -nvpl, but this shouldn't be necessary now. + + - Fixed RT #96101; Closing brace of anonymous sub in a list was being + indented. For example, the closing brace of the anonymous sub below + will now be lined up with the word 'callback'. This problem + occured if there was no comma after the closing brace of the anonymous sub. + This update may cause minor changes to formatting of code with lists + of anonymous subs, especially TK code. + + # OLD + my @menu_items = ( + + #... + { + path => '/_Operate/Transcode and split', + callback => sub { + return 1 if not $self->project_opened; + $self->comp('project')->transcode( split => 1 ); + } + } + ); + + # NEW + my @menu_items = ( + + #... + { + path => '/_Operate/Transcode and split', + callback => sub { + return 1 if not $self->project_opened; + $self->comp('project')->transcode( split => 1 ); + } + } + ); + + 2014 03 28 + - Fixed RT #94190 and debian Bug #742004: perltidy.LOG file left behind. + Thanks to George Hartzell for debugging this. The problem was + caused by the memoization speedup patch in version 20121207. An + unwanted flag was being set which caused a LOG to be written if + perltidy was called multiple times. + + - New default behavior for LOG files: If the source is from an array or + string (through a call to the perltidy module) then a LOG output is only + possible if a logfile stream is specified. This is to prevent + unexpected perltidy.LOG files. + + - Fixed debian Bug #740670, insecure temporary file usage. File::Temp is now + used to get a temporary file. Thanks to Don Anderson for a patch. + + - Any -b (--backup-and-modify-in-place) flag is silently ignored when a + source stream, destination stream, or standard output is used. + This is because the -b flag may have been in a .perltidyrc file and + warnings break Test::NoWarnings. Thanks to Marijn Brand. + + 2013 09 22 + - Fixed RT #88020. --converge was not working with wide characters. + + - Fixed RT #78156. package NAMESPACE VERSION syntax not accepted. + + - First attempt to fix RT #88588. INDEX END tag change in pod2html breaks + perltidy -html. I put in a patch which should work but I don't yet have + a way of testing it. + + 2013 08 06 + - Fixed RT #87107, spelling + + 2013 08 05 + - Fixed RT #87502, incorrect of parsing of smartmatch before hash brace + + - Added feature request RT #87330, trim whitespace after POD. + The flag -trp (--trim-pod) will trim trailing whitespace from lines of POD + + 2013 07 17 + - Fixed RT #86929, #86930, missing lhs of assignment. + + - Fixed RT #84922, moved pod from Tidy.pm into Tidy.pod + + 2012 12 07 + - The flag -cab=n or --comma-arrow-breakpoints=n has been generalized + to give better control over breaking open short containers. The + possible values are now: + + n=0 break at all commas after => + n=1 stable: break at all commas after => if container is open, + EXCEPT FOR one-line containers + n=2 break at all commas after =>, BUT try to form the maximum + maximum one-line container lengths + n=3 do not treat commas after => specially at all + n=4 break everything: like n=0 but also break a short container with + a => not followed by a comma + n=5 stable: like n=1 but ALSO break at open one-line containers (default) + + New values n=4 and n=5 have been added to allow short blocks to be + broken open. The new default is n=5, stable. It should more closely + follow the breaks in the input file, and previously formatted code + should remain unchanged. If this causes problems use -cab=1 to recover + the former behavior. Thanks to Tony Maszeroski for the suggestion. + + To illustrate the need for the new options, if perltidy is given + the following code, then the old default (-cab=1) was to close up + the 'index' container even if it was open in the source. The new + default (-cab=5) will keep it open if it was open in the source. + + our $fancypkg = { + 'ALL' => { + 'index' => { + 'key' => 'value', + }, + 'alpine' => { + 'one' => '+', + 'two' => '+', + 'three' => '+', + }, + } + }; + + - New debug flag --memoize (-mem). This version contains a + patch supplied by Jonathan Swartz which can significantly speed up + repeated calls to Perl::Tidy::perltidy in a single process by caching + the result of parsing the formatting parameters. A factor of up to 10 + speedup was achieved for masontidy (https://metacpan.org/module/masontidy). + The memoization patch is on by default but can be deactivated for + testing with -nmem (or --no-memoize). + + - New flag -tso (--tight-secret-operators) causes certain perl operator + sequences (secret operators) to be formatted "tightly" (without spaces). + The most common of these are 0 + and + 0 which become 0+ and +0. The + operators currently modified by this flag are: + =( )= 0+ +0 ()x!! ~~<> ,=> + Suggested by by Philippe Bruhat. See https://metacpan.org/module/perlsecret + This flag is off by default. + + - New flag -vmll (--variable-maximum-line-length) makes the maximum + line length increase with the nesting depth of a line of code. + Basically, it causes the length of leading whitespace to be ignored when + setting line breaks, so the formatting of a block of code is independent + of its nesting depth. Try this option if you have deeply nested + code or data structures, perhaps in conjunction with the -wc flag + described next. The default is not todo this. + + - New flag -wc=n (--whitespace-cycle=n) also addresses problems with + very deeply nested code and data structures. When this parameter is + used and the nesting depth exceeds the value n, the leading whitespace + will be reduced and start at 1 again. The result is that deeply + nested blocks of code will shift back to the left. This occurs cyclically + to any nesting depth. This flag may be used either with or without -vmll. + The default is not to use this (-wc=0). + + - Fixed RT #78764, error parsing smartmatch operator followed by anonymous + hash or array and then a ternary operator; two examples: + + qr/3/ ~~ ['1234'] ? 1 : 0; + map { $_ ~~ [ '0', '1' ] ? 'x' : 'o' } @a; + + - Fixed problem with specifying spaces around arrows using -wls='->' + and -wrs='->'. Thanks to Alain Valleton for documenting this problem. + + - Implemented RT #53183, wishlist, lines of code with the same indentation + level which are contained with multiple stacked opening and closing tokens + (requested with flags -sot -sct) now have reduced indentation. + + # Default + $sender->MailMsg( + { + to => $addr, + subject => $subject, + msg => $body + } + ); + + # OLD: perltidy -sot -sct + $sender->MailMsg( { + to => $addr, + subject => $subject, + msg => $body + } ); + + # NEW: perltidy -sot -sct + $sender->MailMsg( { + to => $addr, + subject => $subject, + msg => $body + } ); + + - New flag -act=n (--all-containers-tightness=n) is an abbreviation for + -pt=n -sbt=n -bt=n -bbt=n, where n=0,1, or 2. It simplifies input when all + containers have the same tightness. Using the same example: + + # NEW: perltidy -sot -sct -act=2 + $sender->MailMsg({ + to => $addr, + subject => $subject, + msg => $body + }); + + - New flag -sac (--stack-all-containers) is an abbreviation for -sot -sct + This is part of wishlist item RT #53183. Using the same example again: + + # NEW: perltidy -sac -act=2 + $sender->MailMsg({ + to => $addr, + subject => $subject, + msg => $body + }); + + - new flag -scbb (--stack-closing-block-brace) causes isolated closing + block braces to stack as in the following example. (Wishlist item RT#73788) + + DEFAULT: + for $w1 (@w1) { + for $w2 (@w2) { + for $w3 (@w3) { + for $w4 (@w4) { + push( @lines, "$w1 $w2 $w3 $w4\n" ); + } + } + } + } + + perltidy -scbb: + for $w1 (@w1) { + for $w2 (@w2) { + for $w3 (@w3) { + for $w4 (@w4) { + push( @lines, "$w1 $w2 $w3 $w4\n" ); + } } } } + + There is, at present, no flag to place these closing braces at the end + of the previous line. It seems difficult to develop good rules for + doing this for a wide variety of code and data structures. + + - Parameters defining block types may use a wildcard '*' to indicate + all block types. Previously it was not possible to include bare blocks. + + - A flag -sobb (--stack-opening-block-brace) has been introduced as an + alias for -bbvt=2 -bbvtl='*'. So for example the following test code: + + {{{{{{{ $testing }}}}}}} + + cannot be formatted as above but can at least be kept vertically compact + using perltidy -sobb -scbb + + { { { { { { { $testing + } } } } } } } + + Or even, perltidy -sobb -scbb -i=1 -bbt=2 + {{{{{{{$testing + }}}}}}} + + + - Error message improved for conflicts due to -pbp; thanks to Djun Kim. + + - Fixed RT #80645, error parsing special array name '@$' when used as + @{$} or $#{$} + + - Eliminated the -chk debug flag which was included in version 20010406 to + do a one-time check for a bug with multi-line quotes. It has not been + needed since then. + + - Numerous other minor formatting improvements. + + 2012 07 14 + - Added flag -iscl (--ignore-side-comment-lengths) which causes perltidy + to ignore the length of side comments when setting line breaks, + RT #71848. The default is to include the length of side comments when + breaking lines to stay within the length prescribed by the -l=n + maximum line length parameter. For example, + + Default behavior on a single line with long side comment: + $vmsfile =~ s/;[\d\-]*$// + ; # Clip off version number; we can use a newer version as well + + perltidy -iscl leaves the line intact: + + $vmsfile =~ s/;[\d\-]*$//; # Clip off version number; we can use a newer version as well + + - Fixed RT #78182, side effects with STDERR. Error handling has been + revised and the documentation has been updated. STDERR can now be + redirected to a string reference, and perltidy now returns an + error flag instead of calling die when input errors are detected. + If the error flag is set then no tidied output was produced. + See man Perl::Tidy for an example. + + - Fixed RT #78156, erroneous warning message for package VERSION syntax. + + - Added abbreviations -conv (--converge) to simplify iteration control. + -conv is equivalent to -it=4 and will insure that the tidied code is + converged to its final state with the minimum number of iterations. + + - Minor formatting modifications have been made to insure convergence. + + - Simplified and hopefully improved the method for guessing the starting + indentation level of entabbed code. Added flag -dt=n (--default_tabsize=n) + which might be helpful if the guessing method does not work well for + some editors. + + - Added support for stacked labels, upper case X/B in hex and binary, and + CORE:: namespace. + + - Eliminated warning messages for using keyword names as constants. + 2012 07 01 - Corrected problem introduced by using a chomp on scalar references, RT #77978 @@ -81,7 +740,7 @@ Perltidy Change Log parameter is quoted. For example, to define -sphb=# it used to be necessary to write -sbcp='#' - to keep the # from becomming part of a comment. This was causing + to keep the # from becoming part of a comment. This was causing trouble for new users. Now it can also be written without quotes: -sbcp=# @@ -830,8 +1489,8 @@ Perltidy Change Log -improved breakpoint choices involving '->' - -Corrected tokenization of things like ${#} or ${©}. For example, - ${©} is valid, but ${© } is a syntax error. + -Corrected tokenization of things like ${#}. For example, + ${#} is valid, but ${# } is a syntax error. -Corrected minor tokenization errors with indirect object notation. For example, 'new A::()' works now. @@ -2212,7 +2871,7 @@ Perltidy Change Log -Corrected minor, uncommon bug found during routine testing, in which a blank got inserted between a function name and its opening paren after a file test operator, but only in the case that the function had not - been previously seen. Perl uses the existance (or lack thereof) of + been previously seen. Perl uses the existence (or lack thereof) of the blank to guess if it is a function call. That is, if (-l pid_filename()) { became @@ -2297,7 +2956,7 @@ Perltidy Change Log braces, while a new parameter -bbt (block-brace-tightness) applies to curly braces which contain code BLOCKS. The default value is -bbt=0. - -added flag -icp (--indent-closing-paren) which leaves a statment + -added flag -icp (--indent-closing-paren) which leaves a statement termination of the form );, };, or ]; indented with the same indentation as the previous line. For example,