Skip to content

Releases: dflook/python-minifier

3.0.0

13 Aug 15:38
Immutable release. Only release title and notes can be modified.
d24f6fe
Compare
Choose a tag to compare

ℹ️ Note that python-minifier depends on the python interpreter for parsing source code,
and will output source code compatible with the version of the interpreter it is run with.

This means that if you minify code written for Python 3.11 using python-minifier running with Python 3.12,
the minified code may only run with Python 3.12.

Fixed

  • Better support of unicode on platforms that do not use UTF-8 as the default encoding.
    This should fix issues with minifying files on Windows, and possibly other platforms with very old Python versions.

    If you are still using Python 2.7 this could be a breaking change - the pyminify command is unchanged, but the minify() function now returns unicode strings.

2.11.3

12 Nov 16:12
Immutable release. Only release title and notes can be modified.
ca4cba5
Compare
Choose a tag to compare

ℹ️ Note that python-minifier depends on the python interpreter for parsing source code,
and will output source code compatible with the version of the interpreter it is run with.

This means that if you minify code written for Python 3.11 using python-minifier running with Python 3.12,
the minified code may only run with Python 3.12.

Fixed

  • The special behaviour of assignment expression target binding inside comprehensions was not correctly implemented.

    This could lead to the analysed scope of these variables being incorrect and the variable being renamed to a name that was
    already in scope.

2.11.2

03 Oct 21:46
Immutable release. Only release title and notes can be modified.
0ada486
Compare
Choose a tag to compare

ℹ️ Note that python-minifier depends on the python interpreter for parsing source code,
and will output source code compatible with the version of the interpreter it is run with.

This means that if you minify code written for Python 3.11 using python-minifier running with Python 3.12,
the minified code may only run with Python 3.12.

Fixed

  • Using the positional only parameter separator / in method definitions could cause the following parameter to be
    incorrectly renamed in place, which could lead to failure if the method was called with that parameter as a keyword argument.
    This has been fixed.

2.11.1

29 Sep 17:45
Immutable release. Only release title and notes can be modified.
7d1c371
Compare
Choose a tag to compare

ℹ️ Note that python-minifier depends on the python interpreter for parsing source code,
and will output source code compatible with the version of the interpreter it is run with.

This means that if you minify code written for Python 3.11 using python-minifier running with Python 3.12,
the minified code may only run with Python 3.12.

Fixed

  • Using the --remove-class-attribute-annotations option together with --rename-globals was incorrectly causing class attributes to be renamed. Both of these options are unsafe for arbitrary code and are disabled by default but this was not the intended behavior, and has been fixed.

2.11.0

26 Sep 22:02
Immutable release. Only release title and notes can be modified.
3daead3
Compare
Choose a tag to compare

ℹ️ Note that python-minifier depends on the python interpreter for parsing source code,
and will output source code compatible with the version of the interpreter it is run with.

This means that if you minify code written for Python 3.11 using python-minifier running with Python 3.12,
the minified code may only run with Python 3.12.

Added

  • Python 3.13 support, including:
    • PEP 696 Type parameter defaults

2.10.0

15 Sep 16:49
Immutable release. Only release title and notes can be modified.
ff09f75
Compare
Choose a tag to compare

ℹ️ Note that python-minifier depends on the python interpreter for parsing source code,
and will output source code compatible with the version of the interpreter it is run with.

This means that if you minify code written for Python 3.11 using python-minifier running with Python 3.12,
the minified code may only run with Python 3.12.

Added

  • Python 3.12 support, including:

    • PEP 695 Type parameter syntax
    • PEP 701 Improved f-strings
  • A new transform to remove the brackets when instantiating and raising built-in exceptions, which is enabled by default.
    e.g.

    def a():
       raise ValueError()

    Will be minified to:

    def a():raise ValueError

    The raise statement automatically instantiates classes derived from Exception, so the brackets are not required.

  • A new constant folding transform, which is enabled by default.
    This will evaluate simple expressions when minifying, e.g.

    SECONDS_IN_A_DAY = 60 * 60 * 24

    Will be minified to:

    SECONDS_IN_A_DAY=86400

Changed

  • Annotation removal is now more configurable, with separate options for:

    • Removal of variable annotations (--no-remove-variable-annotations)
    • Removal of function return annotations (--no-remove-return-annotations)
    • Removal of function argument annotations (--no-remove-argument-annotations)
    • Removal of class attribute annotations (--remove-class-attribute-annotations)

    The default behavior has changed, with class attribute annotations no longer removed by default.
    These are increasingly being used at runtime, and removing them can cause issues.

Fixed

  • Fixed various subtle issues with renaming of names that overlap class scope.

2.9.0

01 May 12:18
Immutable release. Only release title and notes can be modified.
fd3dee4
Compare
Choose a tag to compare

Added

  • A new transform to remove return statements that are not required, which is enabled by default.
    e.g.
def important(a):
   if a > 3:
       return a
   if a < 2:
       return None
   a.adjust(1)
   return None

Will be minified to:

def important(a):
    if a > 3:
        return a
    if a < 2:
        return
    a.adjust(1)
  • The f-string debug specifier will now be used where possible, e.g. f'my_var={my_var!r}' will be minified to f'{my_var=}'.
    The debug specifier should now be preserved where it is used in the input source.

  • Many small improvements to minification to be more precise about where whitespace or parentheses required

    • Thanks luk3yx for improving whitespace in relative import statements.
    • A generator as the sole argument to a function call is no longer wrapped in parentheses
    • float literals can use a more compact scientific notation
    • Many more subtle improvements

2.8.1

15 Mar 23:54
Immutable release. Only release title and notes can be modified.
6698d95
Compare
Choose a tag to compare

Fixed

  • A bug shortening names in the iterable of a comprehension when the original name was also used as a target in the comprehension
    e.g. def f(x): return [x for x in x] would be incorrectly minified to def f(x):return[A for A in A], instead of def f(x):return[A for A in x].

2.8.0

27 Dec 12:12
Immutable release. Only release title and notes can be modified.
2acc4e0
Compare
Choose a tag to compare

Added

  • New transforms that together work similarly to Python's -O option
    • Remove asserts, which removes assert statements and is disabled by default
    • Remove debug, which removes any if block that tests __debug__ is True and is disabled by default

Changed

  • When minifiying a directory, files ending with '.pyw' will now be minified.

2.7.0

27 Oct 17:08
Immutable release. Only release title and notes can be modified.
daea1d4
Compare
Choose a tag to compare

Added

  • Python 3.11 support, including exception groups syntax

Changed

  • Improved detection of dataclasses when using the remove annotations transform, which suppresses removal of annotations for those classes

Fixed

  • Renamed nonlocal names could be incorrect if the name isn't local in the immediate parent function scope.
    (or it was bound in the immediate parent, but after the definition of the nested scope)