]> git.donarmstrong.com Git - perltidy.git/blobdiff - CHANGES.md
New upstream version 20210717
[perltidy.git] / CHANGES.md
index 83034a5e0e607f18899ec56338afe3e2f82ae816..8c36f5997a42b2fd8612550b0b66727147d5ed4b 100644 (file)
@@ -1,5 +1,444 @@
 # Perltidy Change Log
 
+## 2021 07 17
+
+    - This release is being made mainly because of the next item, in which an
+      error message about an uninitialized value error message could be produced
+      in certain cases when format-skipping is used.  The error message was
+      annoying but harmless to formatting.
+
+    - Fixed an undefined variable message, see git #67. When a format skipping
+      comment '#<<' is placed before the first line of code in a script, a
+      message 'Use of uninitialized value $Ktoken_vars in numeric ...' can
+      occur.
+
+    - A warning will no longer be given if a script has an opening code-skipping
+      comment '#<<V' which is not terminated with a closing comment '#>>V'. This
+      makes code-skipping and format-skipping behave in a similar way: an
+      opening comment without a corresponding closing comment will cause
+      the rest of a file to be skipped.  If there is a question about which lines 
+      are skipped, a .LOG file can be produced with the -g flag and it will have 
+      this information.
+
+    - Removed the limit on -ci=n when -xci is set, reference: rt #136415.
+      This update removes a limit in the previous two versions in which the
+      value of -ci=n was limited to the value of -i=n when -xci was set.
+      This limit had been placed to avoid some formatting instabilities,
+      but recent coding improvements allow the limit to be removed.
+
+    - The -wn and -bbxx=n flags were not working together correctly. This has
+      been fixed.
+
+    - This version may produce occasional differences in formatting compared to
+      previous versions, mainly for lines which are near the specified line
+      length limit.  This is due to ongoing efforts to eliminate edge cases of
+      formatting instability.
+
+    - Numerous minor fixes have been made. A complete list is at:
+
+           https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
+
+## 2021 06 25
+
+    - This release adds several new requested parameters.  No significant bugs have
+      been found since the last release, but a number of minor problems have been
+      corrected.
+
+    - Added a new option '--code-skipping', requested in git #65, in which code
+      between comment lines '#<<V' and '#>>V' is passed verbatim to the output
+      stream without error checking.  It is simmilar to --format-skipping
+      but there is no error checking of the skipped code. This can be useful for
+      skipping past code which employs an extended syntax.
+
+    - Added a new option for closing paren placement, -vtc=3, requested in rt #136417.
+
+    - Added flag -atnl, --add-terminal-newline, to help issue git #58.
+      This flag tells perltidy to terminate the last line of the output stream
+      with a newline character, regardless of whether or not the input stream
+      was terminated with a newline character.  This is the default.
+      If this flag is negated, with -natnl, then perltidy will add a terminal
+      newline character to the the output stream only if the input
+      stream is terminated with a newline.
+
+    - Some nested structures formatted with the -lp indentation option may have
+      some changes in indentation.  This is due to updates which were made to
+      prevent formatting instability when line lengths are limited by the maximum line
+      length. Most scripts will not be affected. If this causes unwanted formatting
+      changes, try increasing the --maximum-line-length by a few characters.
+
+    - Numerous minor fixes have been made. A complete list is at:
+
+           https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
+
+## 2021 04 02
+
+    - This release fixes several non-critical bugs which have been found since the last
+    release.  An effort has been made to keep existing formatting unchanged.
+
+    - Fixed issue git #57 regarding uninitialized warning flag.
+
+    - Added experimental flag -lpxl=s requested in issue git #56 to provide some
+    control over which containers get -lp indentation.
+
+    - Fixed issue git #55 regarding lack of coordination of the --break-before-xxx
+    flags and the --line-up-parens flag.
+
+    - Fixed issue git #54 regarding irregular application of the --break-before-paren
+    and similar --break-before-xxx flags, in which lists without commas were not 
+    being formatted according to these flags.
+
+    - Fixed issue git #53. A flag was added to turn off alignment of spaced function 
+    parens.  If the --space-function-paren, -sfp flag is set, a side-effect is that the
+    spaced function parens may get vertically aligned.  This can be undesirable,
+    so a new parameter '--function-paren-vertical-alignment', or '-fpva', has been
+    added to turn this vertical alignment off. The default is '-fpva', so that 
+    existing formatting is not changed.  Use '-nfpva' to turn off unwanted
+    vertical alignment.  To illustrate the possibilities:
+
+        # perltidy [default]
+        myfun( $aaa, $b, $cc );
+        mylongfun( $a, $b, $c );
+
+        # perltidy -sfp
+        myfun     ( $aaa, $b, $cc );
+        mylongfun ( $a, $b, $c );
+    
+        # perltidy -sfp -nfpva
+        myfun ( $aaa, $b, $cc );
+        mylongfun ( $a, $b, $c );
+
+    - Fixed issue git #51, a closing qw bare paren was not being outdented when
+    the -nodelete-old-newlines flag was set.
+
+    - Fixed numerous edge cases involving unusual parameter combinations which
+      could cause alternating output states.  Most scripts will not be
+      changed by these fixes.
+
+    - A more complete list of updates is at
+
+           https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
+
+## 2021 01 11
+
+    - Fixed issue git #49, -se breaks warnings exit status behavior.
+    The exit status flag was not always being set when the -se flag was set.
+
+    - Some improvements have been made in the method for aligning side comments.
+    One of the problems that was fixed is that there was a tendency for side comment
+    placement to drift to the right in long scripts.  Programs with side comments
+    may have a few changes.
+
+    - Some improvements have been made in formatting qw quoted lists.  This
+    fixes issue git #51, in which closing qw pattern delimiters not always
+    following the settings specified by the --closing-token-indentation=n settings.
+    Now qw closing delimiters ')', '}' and ']' follow these flags, and the
+    delimiter '>' follows the flag for ')'.  Other qw pattern delimiters remain
+    indented as the are now.  This change will cause some small formatting changes
+    in some existing programs.
+
+    - Another change involving qw lists is that they get full indentation,
+    rather than just continuation indentation, if
+
+         (1) the closing delimiter is one of } ) ] > and is on a separate line,
+         (2) the opening delimiter  (i.e. 'qw{' ) is also on a separate line, and
+         (3) the -xci flag (--extended-continuation-indentation) is set.
+
+    This improves formatting when qw lists are contained in other lists. For example,
+
+            # OLD: perltidy
+            foreach $color (
+                qw(
+                AntiqueWhite3 Bisque1 Bisque2 Bisque3 Bisque4
+                SlateBlue3 RoyalBlue1 SteelBlue2 DeepSkyBlue3
+                ),
+                qw(
+                LightBlue1 DarkSlateGray1 Aquamarine2 DarkSeaGreen2
+                SeaGreen1 Yellow1 IndianRed1 IndianRed2 Tan1 Tan4
+                )
+              )
+
+            # NEW, perltidy -xci
+            foreach $color (
+                qw(
+                    AntiqueWhite3 Bisque1 Bisque2 Bisque3 Bisque4
+                    SlateBlue3 RoyalBlue1 SteelBlue2 DeepSkyBlue3
+                ),
+                qw(
+                    LightBlue1 DarkSlateGray1 Aquamarine2 DarkSeaGreen2
+                    SeaGreen1 Yellow1 IndianRed1 IndianRed2 Tan1 Tan4
+                )
+              )
+
+    - Some minor improvements have been made to the rules for formatting
+    some edge vertical alignment cases, usually involving two dissimilar lines.
+
+    - A more complete list of updates is at
+
+           https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
+
+## 2020 12 07
+
+    - Fixed issue git #47, incorrect welding of anonymous subs.
+      An incorrect weld format was being made when the --weld-nested-containers option
+      (-wn) was used in to format a function which returns a list of anonymous subs.
+      For example, the following snippet was incorrectly being welded.
+
+    $promises[$i]->then(
+        sub { $all->resolve(@_); () },
+        sub {
+            $results->[$i] = [@_];
+            $all->reject(@$results) if --$remaining <= 0;
+            return ();
+        }
+    );
+
+    This was due to an error introduced in v20201201 related to parsing sub
+    signatures.  Reformatting with the current version will fix the problem.
+
+## 2020 12 01
+
+    - This release is being made primarily to make available a several new formatting 
+      parameters, in particular -xci, -kbb=s, -kba=s, and -wnxl=s. No significant 
+      bugs have been found since the previous release, but numerous minor issues have 
+      been found and fixed as listed below.
+
+    - This version is about 20% faster than the previous version due to optimizations
+      made with the help of Devel::NYTProf.
+
+    - Added flag -wnxl=s, --weld-nested-exclusion-list=s, to provide control which containers
+      are welded with the --weld-nested-containers parameter.  This is related to issue git #45.
+
+    - Merged pull request git #46 which fixes the docs regarding the -fse flag.
+
+    - Fixed issue git #45, -vtc=n flag was ignored when -wn was set.
+
+    - implement request RT #133649, delete-old-newlines selectively. Two parameters, 
+
+      -kbb=s or --keep-old-breakpoints-before=s, and
+      -kba=s or --keep-old-breakpoints-after=s
+
+      were added to request that old breakpoints be kept before or after
+      selected token types.  For example, -kbb='=>' means that newlines before
+      fat commas should be kept.
+      
+    - Fix git #44, fix exit status for assert-tidy/untidy.  The exit status was
+      always 0 for --assert-tidy if the user had turned off all error messages with
+      the -quiet flag.  This has been fixed.
+
+    - Add flag -maxfs=n, --maximum-file-size-mb=n.  This parameter is provided to
+      avoid causing system problems by accidentally attempting to format an 
+      extremely large data file. The default is n=10.  The command to increase 
+      the limit to 20 MB for example would be  -mfs=20.  This only applies to
+      files specified by filename on the command line.
+
+    - Skip formatting if there are too many indentation level errors.  This is 
+      controlled with -maxle=n, --maximum-level-errors=n.  This means that if 
+      the ending indentation differs from the starting indentation by more than
+      n levels, the file will be output verbatim. The default is n=1. 
+      To skip this check, set n=-1 or set n to a large number.
+
+    - A related new flag, --maximum-unexpected-errors=n, or -maxue=n, is available
+      but is off by default.
+
+    - Add flag -xci, --extended-continuation-indentation, regarding issue git #28
+      This flag causes continuation indentation to "extend" deeper into structures.
+      Since this is a fairly new flag, the default is -nxci to avoid disturbing 
+      existing formatting.  BUT you will probably see some improved formatting
+      in complex data structures by setting this flag if you currently use -ci=n 
+      and -i=n with the same value of 'n' (as is the case if you use -pbp, 
+      --perl-best-practices, where n=4).
+
+    - Fix issue git #42, clarify how --break-at-old-logical-breakpoints works.
+      The man page was updated to note that it does not cause all logical breakpoints
+      to be replicated in the output file.
+
+    - Fix issue git #41, typo in manual regarding -fsb.
+
+    - Fix issue git #40: when using the -bli option, a closing brace followed by 
+      a semicolon was not being indented.  This applies to braces which require 
+      semicolons, such as a 'do' block.
+
+    - Added 'state' as a keyword.
+
+    - A better test for convergence has been added. When iterations are requested,
+      the new test will stop after the first pass if no changes in line break
+      locations are made.  Previously, file checksums were used and required at least two 
+      passes to verify convergence unless no formatting changes were made.  With the new test, 
+      only a single pass is needed when formatting changes are limited to adjustments of 
+      indentation and whitespace on the lines of code.  Extensive testing has been made to
+      verify the correctness of the new convergence test.
+
+    - Line breaks are now automatically placed after 'use overload' to 
+      improve formatting when there are numerous overloaded operators.  For
+      example
+        use overload
+          '+' => sub {
+          ...
+
+    - A number of minor problems with parsing signatures and prototypes have
+      been corrected, particularly multi-line signatures. Some signatures 
+      had previously been parsed as if they were prototypes, which meant the 
+      normal spacing rules were not applied.  For example
+   
+      OLD:
+        sub echo ($message= 'Hello World!' ) {
+            ...;
+        }
+
+      NEW:
+        sub echo ( $message = 'Hello World!' ) {
+            ...;
+        }
+
+    - Numerous minor issues that the average user would not encounter were found
+      and fixed. They can be seen in the more complete list of updates at 
+
+           https://github.com/perltidy/perltidy/blob/master/local-docs/BugLog.pod
+
+## 2020 10 01
+
+    - Robustness of perltidy has been significantly improved.  Updating is recommended. Continual 
+      automated testing runs began about 1 Sep 2020 and numerous issues have been found and fixed. 
+      Many involve references to uninitialized variables when perltidy is fed random text and random
+      control parameters. 
+
+    - Added the token '->' to the list of alignment tokens, as suggested in git
+      #39, so that it can be vertically aligned if a space is placed before them with -wls='->'.
+
+    - Added parameters -bbhb=n (--break-before-hash-brace=n), -bbsb=n (--break-before-square-bracket=n),
+      and -bbp=n (--break-before-paren=n) suggested in git #38.  These provide control over the
+      opening container token of a multiple-line list.  Related new parameters -bbhbi=n, -bbsbi=n, -bbpi=n
+      control indentation of these tokens.
+
+    - Added keyword 'isa'.
+
+## 2020 09 07
+
+    - Fixed bug git #37, an error when the combination -scbb -csc was used.
+      It occurs in perltidy versions 20200110, 20200619, and 20200822.  What happens is
+      that when two consecutive lines with isolated closing braces had new side
+      comments generated by the -csc parameter, a separating newline was missing.
+      The resulting script will not then run, but worse, if it is reformatted with
+      the same parameters then closing side comments could be overwritten and data
+      lost. 
+
+      This problem was found during automated random testing.  The parameter
+      -scbb is rarely used, which is probably why this has not been reported.  Please
+      upgrade your version.
+
+    - Added parameter --non-indenting-braces, or -nib, which prevents
+      code from indenting one level if it follows an opening brace marked 
+      with a special side comment, '#<<<'.  For example,
+
+                    { #<<<   a closure to contain lexical vars
+
+                    my $var;  # this line does not indent
+
+                    }
+
+                    # this line cannot 'see' $var;
+
+      This is on by default.  If your code happens to have some
+      opening braces followed by '#<<<', and you
+      don't want this, you can use -nnib to deactivate it. 
+
+    - Side comment locations reset at a line ending in a level 0 open
+      block, such as when a new multi-line sub begins.  This is intended to 
+      help keep side comments from drifting to far to the right.
+
+## 2020 08 22
+
+    - Fix RT #133166, encoding not set for -st.  Also reported as RT #133171
+      and git #35. 
+
+      This is a significant bug in version 20200616 which can corrupt data if
+      perltidy is run as a filter on encoded text.
+**Please upgrade**
+
+    - Fix issue RT #133161, perltidy -html was not working on pod
+
+    - Fix issue git #33, allow control of space after '->'
+
+    - Vertical alignment has been improved. Numerous minor issues have
+      been fixed.
+
+    - Formatting with the -lp option is improved. 
+
+    - Fixed issue git #32, misparse of bare 'ref' in ternary
+
+    - When --assert-tidy is used and triggers an error, the first difference
+      between input and output files is shown in the error output. This is
+      a partial response to issue git #30.
+
+## 2020 06 19
+
+    - Added support for Switch::Plain syntax, issue git #31.
+
+    - Fixed minor problem where trailing 'unless' clauses were not 
+      getting vertically aligned.
+
+    - Added a parameter --logical-padding or -lop to allow logical padding
+      to be turned off.  Requested by git #29. This flag is on by default.
+      The man pages have examples.
+
+    - Added a parameter -kpit=n to control spaces inside of parens following
+      certain keywords, requested in git#26. This flag is off by default.
+
+    - Added fix for git#25, improve vertical alignment for long lists with
+      varying numbers of items per line.
+
+    - calls to the module Perl::Tidy can now capture any output produced
+      by a debug flag or one of the 'tee' flags through the new 'debugfile' and
+      'teefile' call parameters.  These output streams are rarely used but
+      they are now treated the same as any 'logfile' stream.
+
+    - add option --break-at-old-semicolon-breakpoints', -bos, requested 
+      in RT#131644.  This flag will keep lines beginning with a semicolon.
+
+    - Added --use-unicode-gcstring to control use of Unicode::GCString for
+      evaluating character widths of encoded data.  The default is 
+      not to use this (--nouse-unicode-gcstring). If this flag is set,
+      perltidy will look for Unicode::GCString and, if found, will use it 
+      to evaluate character display widths.  This can improve displayed
+      vertical alignment for files with wide characters.  It is a nice
+      feature but it is off by default to avoid conflicting formatting
+      when there are multiple developers.  Perltidy installation does not 
+      require Unicode::GCString, so users wanting to use this feature need 
+      set this flag and also to install Unicode::GCString separately.
+
+    - Added --character-encoding=guess or -guess to have perltidy guess
+      if a file (or other input stream) is encoded as -utf8 or some 
+      other single-byte encoding. This is useful when processing a mixture 
+      of file types, such as utf8 and latin-1.
+
+      Please Note: The default encoding has been set to be 'guess'
+      instead of 'none'. This seems like the best default, since 
+      it allows perltidy work properly with both
+      utf8 files and older latin-1 files.  The guess mode uses Encode::Guess,
+      which is included in standard perl distributions, and only tries to 
+      guess if a file is utf8 or not, never any other encoding.  If the guess is 
+      utf8, and if the file successfully decodes as utf8, then it the encoding 
+      is assumed to be utf8.  Otherwise, no encoding is assumed. 
+      If you do not want to use this new default guess mode, or have a 
+      problem with it, you can set --character-encoding=none (the previous 
+      default) or --character-encoding=utf8 (if you deal with utf8 files).
+
+    - Specific encodings of input files other than utf8 may now be given, for
+      example --character-encoding=euc-jp.
+
+    - Fix for git#22, Preserve function signature on a single line. An
+      unwanted line break was being introduced when a closing signature paren
+      followed a closing do brace.
+
+    - Fix RT#132059, the -dac parameter was not working and caused an error exit
+
+    - When -utf8 is used, any error output is encoded as utf8
+
+    - Fix for git#19, adjust line break around an 'xor'
+
+    - Fix for git#18, added warning for missing comma before unknown bare word.
+
 ## 2020 01 10
 
     - This release adds a flag to control the feature RT#130394 (allow short nested blocks)