]> git.donarmstrong.com Git - perltidy.git/blobdiff - CHANGES
New upstream version 20170521
[perltidy.git] / CHANGES
diff --git a/CHANGES b/CHANGES
index 80ad1d75e325fafbdcc44bdedcc6cf57e744fded..1f6a50a900718be9444e00c9ede2c572f0f5fd07 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,487 @@
 Perltidy Change Log
+  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 +564,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=#
 
@@ -2212,7 +2695,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 +2780,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,