dflook / python-minifier

Transform Python source code into its most compact representation
MIT License
553 stars 40 forks source link

Optimizing classes #65

Open thomasahle opened 1 year ago

thomasahle commented 1 year ago

The code

class Test:
    def my_method(self, argument):
        return argument + argument

gets transformed into

class E:
    def my_method(B,argument):A=argument;return A+A

In other words, it seems method names aren't getting replaced, and some (all non-self?) arguments aren't getting renamed either.

I'm sorry if this duplicates issue #7, but I think it's different.

Is the idea that the minifier shouldn't rename "public APIs" like classes? In my case this is not an issue, so maybe there could be a flag? Also, the class itself is getting renamed, so maybe this is not the case at all.

thomasahle commented 1 year ago

Also, this is probably out of scope, but if we consider namedtuples a kind of classes in python, it would be awesome to optimize

from collections import namedtuple
Test = namedtuple('Test', 'arg1 arg2 arg2')
t = Test(1, 2, 3)
print(t.arg1 + t.arg2 + t.arg3)

by renaming the arguments. Currently it gets minified to:

from collections import namedtuple as E
F=E('Test','arg1 arg2 arg2')
B=F(1,2,3)
print(B.arg1+B.arg2+B.arg3)