o
    DDiN                     @   s,   d dl mZ d dlmZ G dd deZdS )    )CodemodTest)RenameCommandc                   @   s  e Zd ZeZdcddZdcddZdcddZdcd	d
ZdcddZ	dcddZ
dcddZdcddZdcddZdcddZdcddZdcddZdcddZdcddZdcdd Zdcd!d"Zdcd#d$Zdcd%d&Zdcd'd(Zdcd)d*Zdcd+d,Zdcd-d.Zdcd/d0Zdcd1d2Zdcd3d4Zdcd5d6Zdcd7d8Zdcd9d:Z dcd;d<Z!dcd=d>Z"dcd?d@Z#dcdAdBZ$dcdCdDZ%dcdEdFZ&dcdGdHZ'dcdIdJZ(dcdKdLZ)dcdMdNZ*dcdOdPZ+dcdQdRZ,dcdSdTZ-dcdUdVZ.dcdWdXZ/dcdYdZZ0dcd[d\Z1dcd]d^Z2dcd_d`Z3dcdadbZ4dS )dTestRenameCommandreturnNc                 C      d}d}| j ||ddd d S )Nza
            from foo import bar

            def test() -> None:
                bar(5)
        a
            from baz import qux

            def test() -> None:
                qux(5)
        foo.barbaz.quxold_namenew_nameassertCodemodselfbeforeafter r   b/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/codemod/commands/tests/test_rename.pytest_rename_name   s   z"TestRenameCommand.test_rename_namec                 C   r   )NzK
            from typing import List
            x: List[int] = []
        z'
            x: list[int] = []
        ztyping.Listzbuiltins.listr
   r   r   r   r   r   test_rename_to_builtin   s
   
z(TestRenameCommand.test_rename_to_builtinc                 C   r   )Nzh
            from foo import bar as bla

            def test() -> None:
                bla(5)
        r   r   r	   r
   r   r   r   r   r   test_rename_name_asname,      
z)TestRenameCommand.test_rename_name_asnamec                 C   r   )Nzl
            from foo import foo as bla

            def test() -> None:
                bla.bla(5)
        ze
            from baz import qux

            def test() -> None:
                qux.bla(5)
        foo.foor	   r
   r   r   r   r   r   %test_rename_repeated_name_with_asnameA      
z7TestRenameCommand.test_rename_repeated_name_with_asnamec                 C   r   )NzZ
            import a.b

            def test() -> None:
                a.b.c(5)
        zZ
            import d.e

            def test() -> None:
                d.e.f(5)
        a.b.czd.e.fr
   r   r   r   r   r   test_rename_attrU   r   z"TestRenameCommand.test_rename_attrc                 C   r   )Nzc
            import foo as bar

            def test() -> None:
                bar.qux(5)
        z]
            import baz

            def test() -> None:
                baz.quux(5)
        foo.quxbaz.quuxr
   r   r   r   r   r   test_rename_attr_asnamej   r   z)TestRenameCommand.test_rename_attr_asnamec                 C   r   )Nze
            import foo.qux as bar

            def test() -> None:
                bar.z(5)
        zd
            import baz.quux

            def test() -> None:
                baz.quux.z(5)
        r   r   r
   r   r   r   r   r   test_rename_attr_asname_2   r   z+TestRenameCommand.test_rename_attr_asname_2c                 C   r   )NT
            import a.b

            class Foo(a.b.C):
                pass
        T
            import c.b

            class Foo(c.b.C):
                pass
        a.bc.br
   r   r   r   r   r   test_rename_module_import   r   z+TestRenameCommand.test_rename_module_importc                 C   r   )Nr"   r#   acr
   r   r   r   r   r   test_rename_module_import_2   r   z-TestRenameCommand.test_rename_module_import_2c                 C      d}| j ||ddd d S )Nr"   br%   r
   r   r   r   r   r   r   #test_rename_module_import_no_change   s   
z5TestRenameCommand.test_rename_module_import_no_changec                 C   r   )NW
            from a import b

            class Foo(b.C):
                pass
        W
            from c import b

            class Foo(b.C):
                pass
        r$   r%   r
   r   r   r   r   r   test_rename_module_import_from   r   z0TestRenameCommand.test_rename_module_import_fromc                 C   r   )Nr.   r/   r'   r(   r
   r   r   r   r   r    test_rename_module_import_from_2   r   z2TestRenameCommand.test_rename_module_import_from_2c                 C   r   )Nzi
            from a.b import some_class

            class Foo(some_class):
                pass
        zi
            from c.b import some_class

            class Foo(some_class):
                pass
        a.b.some_classzc.b.some_classr
   r   r   r   r   r   test_rename_class   r   z#TestRenameCommand.test_rename_classc                 C   r   )Nzl
            from a.b import Class_1, Class_2

            class Foo(Class_1):
                pass
        zl
            from a.b import Class_3, Class_2

            class Foo(Class_3):
                pass
        za.b.Class_1za.b.Class_3r
   r   r   r   r   r   "test_rename_importfrom_same_module  r   z4TestRenameCommand.test_rename_importfrom_same_modulec                 C   r   )Nz
            from a.b import module_1, module_2

            class Foo(module_1.Class_1):
                pass
            class Fooo(module_2.Class_2):
                pass
        z
            from a.b import module_2
            from a.b.module_3 import Class_3

            class Foo(Class_3):
                pass
            class Fooo(module_2.Class_2):
                pass
        za.b.module_1.Class_1za.b.module_3.Class_3r
   r   r   r   r   r   $test_rename_importfrom_same_module_2  s   	
z6TestRenameCommand.test_rename_importfrom_same_module_2c                 C   r   )Nz@
            import logging
            logging.warn(1)
        zC
            import logging
            logging.warning(1)
        zlogging.warnzlogging.warningr
   r   r   r   r   r   test_import_same_module8     
z)TestRenameCommand.test_import_same_modulec                 C   r   )Nz8
            import a.b
            a.b.warn(1)
        z;
            import a.b
            a.b.warning(1)
        za.b.warnza.b.warningr
   r   r   r   r   r   test_import_same_dotted_moduleH  r7   z0TestRenameCommand.test_import_same_dotted_modulec                 C   r   )Nz1
            x = 5
            y = 5 + x
        z1
            z = 5
            y = 5 + z
        xzr
   r   r   r   r   r   test_rename_local_variableX  s   
z,TestRenameCommand.test_rename_local_variablec                 C   r   )NzU
            from a import b

            class Foo(b):
                pass
        zU
            from a import c

            class Foo(c):
                pass
        r$   za.cr
   r   r   r   r   r   test_module_does_not_changei     z-TestRenameCommand.test_module_does_not_changec                 C   r   )Nw
            import a, b, c

            class Foo(a.z):
                bar: b.bar
                baz: c.baz
        zw
            import d, b, c

            class Foo(d.z):
                bar: b.bar
                baz: c.baz
        za.zzd.zr
   r   r   r   r   r   test_other_imports_untouchedx     
z.TestRenameCommand.test_other_imports_untouchedc                 C   r   )Nr>   zw
            import a, b, d

            class Foo(a.z):
                bar: b.bar
                baz: d.baz
        zc.bazzd.bazr
   r   r   r   r   r   test_comma_import  r@   z#TestRenameCommand.test_comma_importc                 C   r   )N|
            from a import b, c, d

            class Foo(b):
                bar: c.bar
                baz: d.baz
        z
            from a import c, d
            from f import b

            class Foo(b):
                bar: c.bar
                baz: d.baz
        r$   zf.br
   r   r   r   r   r   !test_other_import_froms_untouched     
z3TestRenameCommand.test_other_import_froms_untouchedc                 C   r   )NrB   z
            from a import b, c
            from f import d

            class Foo(b):
                bar: c.bar
                baz: d.baz
        a.df.dr
   r   r   r   r   r   test_comma_import_from  rD   z(TestRenameCommand.test_comma_import_fromc                 C   r   )Nz
            from a import (
                b,
                c,
                d,
            )
            from x import (y,)

            class Foo(b):
                bar: c.bar
                baz: d.baz
        z
            from a import (
                b,
                c,
                )
            from x import (y,)
            from f import d

            class Foo(b):
                bar: c.bar
                baz: d.baz
        rE   rF   r
   r   r   r   r   r   test_comma_import_from_parens  s   
z/TestRenameCommand.test_comma_import_from_parensc                 C   r   )Nz
            import a

            class Foo(a.b):
                pass
            class Foo2(a.c):
                pass
        z
            import a, z

            class Foo(z.b):
                pass
            class Foo2(a.c):
                pass
        r$   zz.br
   r   r   r   r   r    test_no_removal_of_import_in_use     
z2TestRenameCommand.test_no_removal_of_import_in_usec                 C   r   )Nz
            import a.b

            class Foo(a.b.c):
                pass
            class Foo2(a.b.d):
                pass
        z
            import a.b, z.b

            class Foo(z.b.c):
                pass
            class Foo2(a.b.d):
                pass
        r   zz.b.cr
   r   r   r   r   r   'test_no_removal_of_dotted_import_in_use
  rJ   z9TestRenameCommand.test_no_removal_of_dotted_import_in_usec                 C   r   )Nzs
            from a import b

            class Foo(b.some_class):
                bar: b.some_other_class
        z
            from a import b
            from blah import some_class

            class Foo(some_class):
                bar: b.some_other_class
        r2   zblah.some_classr
   r   r   r   r   r   %test_no_removal_of_import_from_in_use"  r   z7TestRenameCommand.test_no_removal_of_import_from_in_usec                 C   r   )Nzg
            import a
            import b

            class Foo(a.obj):
                pass
        zg
            import c
            import b

            class Foo(c.obj):
                pass
        za.objzc.objr
   r   r   r   r   r   #test_other_unused_imports_untouched7  r@   z5TestRenameCommand.test_other_unused_imports_untouchedc                 C   r   )N]
            from a.b.c import d

            class Foo(d.e.f):
                pass
        Y
            from g.h.i import j

            class Foo(j):
                pass
        a.b.c.d.e.fg.h.i.jr
   r   r   r   r   r   test_complex_module_renameM  r=   z,TestRenameCommand.test_complex_module_renamec                 C   r   )Nzf
            from a.b.c import d as ddd

            class Foo(ddd.e.f):
                pass
        rO   rP   rQ   r
   r   r   r   r   r   &test_complex_module_rename_with_asname\  r=   z8TestRenameCommand.test_complex_module_rename_with_asnamec                 C   r   )Nz`
            from aa import aaaa

            class Foo(aaaa.Bar):
                pass
        zY
            from b import c

            class Foo(c.Bar):
                pass
        zaa.aaaazb.cr
   r   r   r   r   r   #test_names_with_repeated_substringsk  r   z5TestRenameCommand.test_names_with_repeated_substringsc                 C   r   )NzX
            from foo import foo

            def bar():
                foo(5)
        zX
            from qux import qux

            def bar():
                qux(5)
        r   zqux.quxr
   r   r   r   r   r   test_repeated_name  r   z$TestRenameCommand.test_repeated_namec                 C   r*   )NzX
            from foo import bar

            def baz():
                bar(5)
        barquxr
   r   r,   r   r   r   test_no_codemod  s   
z!TestRenameCommand.test_no_codemodc                 C   r   )Nz$
            import a.b.c.d
        z$
            import x.y.c.d
        r$   x.yr
   r   r   r   r   r   test_rename_import_prefix     
z+TestRenameCommand.test_rename_import_prefixc                 C   r   )Nz-
            from a.b.c.d import foo
        z-
            from x.y.c.d import foo
        r$   rY   r
   r   r   r   r   r   test_rename_import_from_prefix  r[   z0TestRenameCommand.test_rename_import_from_prefixc                 C   r   )Nz
            from a import b

            class Foo(b.some_class):
                pass
            class Foobar(b.some_class):
                pass
        z
            from c.d import some_class

            class Foo(some_class):
                pass
            class Foobar(some_class):
                pass
        r2   zc.d.some_classr
   r   r   r   r   r    test_rename_multiple_occurrences  s
   
z2TestRenameCommand.test_rename_multiple_occurrencesc                 C   r   )Nz
            import a
            from a import b
            from a.c import d

            class Foo(d):
                pass
            class Fooo(b.some_class):
                pass
            class Foooo(a.some_class):
                pass
        z
            import z
            from z import b
            from z.c import d

            class Foo(d):
                pass
            class Fooo(b.some_class):
                pass
            class Foooo(z.some_class):
                pass
        r'   r:   r
   r   r   r   r   r   test_rename_multiple_imports  s   z.TestRenameCommand.test_rename_multiple_importsc                 C   r   )NrN   zY
            from g.h import i

            class Foo(i.j):
                pass
        rP   zg.h:i.jr
   r   r   r   r   r   test_input_with_colon_sep  r=   z+TestRenameCommand.test_input_with_colon_sepc                 C   r   )N[
            from a.b.c import d

            class Foo(d.e):
                pass
        z\
            import g.h.i.j

            class Foo(g.h.i.j.e):
                pass
        a.b.c.dzg.h.i.j:r
   r   r   r   r   r   $test_input_with_colon_sep_at_the_end  r=   z6TestRenameCommand.test_input_with_colon_sep_at_the_endc                 C   r   )Nr`   z[
            from g.h.i import j

            class Foo(j.e):
                pass
        ra   z:g.h.i.jr
   r   r   r   r   r   &test_input_with_colon_sep_at_the_front  s   z8TestRenameCommand.test_input_with_colon_sep_at_the_frontc                 C   r*   )Nz=
            from foo import bar
            bar(42)
        zbaz.barzqux.barr
   r   r,   r   r   r   )test_no_change_because_no_match_was_found  s   z;TestRenameCommand.test_no_change_because_no_match_was_foundc                 C   r   )NzA
            from a.b import qux

            print(qux)
        z?
            from a import b

            print(b.qux)
        za.b.quxza:b.quxr
   r   r   r   r   r   test_rename_single_with_colon"  s   
z/TestRenameCommand.test_rename_single_with_colonc                 C   r   )N9
            import a
            a.b.c(a.b.c.d)
        z9
            from z import c

            c(c.d)
        r   z.cr
   r   r   r   r   r   test_import_parent_module4     z+TestRenameCommand.test_import_parent_modulec                 C   r   )Nz?
            import a.b
            a.b.c.d(a.b.c.d.x)
        zE
            from z import c
            
            c(c.x)
        ra   rg   r
   r   r   r   r   r   test_import_parent_module_2@  ri   z-TestRenameCommand.test_import_parent_module_2c                 C   r   )Nrf   z8
            import z.c

            z.c(z.c.d)
        r   zz.c:r
   r   r   r   r   r   test_import_parent_module_3L  ri   z-TestRenameCommand.test_import_parent_module_3c                 C   r   )NzH
            import a.b as alias
            alias.c(alias.c.d)
        z5
            import z
            z.c(z.c.d)
        r   rg   r
   r   r   r   r   r    test_import_parent_module_asnameX     z2TestRenameCommand.test_import_parent_module_asnamec                 C   r   )Nz6
            import foo
            foo.baz()
        @
            import quux.foo
            quux.foo.baz()
        fooquux.foor
   r   r   r   r   r   test_push_down_toplevel_namesc  rm   z/TestRenameCommand.test_push_down_toplevel_namesc                 C   r   )Nz=
            import foo as bar
            bar.baz()
        rn   ro   rp   r
   r   r   r   r   r   )test_push_down_toplevel_names_with_asnamen  rm   z;TestRenameCommand.test_push_down_toplevel_names_with_asname)r   N)5__name__
__module____qualname__r   	TRANSFORMr   r   r   r   r   r    r!   r&   r)   r-   r0   r1   r3   r4   r5   r6   r8   r;   r<   r?   rA   rC   rG   rH   rI   rK   rL   rM   rR   rS   rT   rU   rX   rZ   r\   r]   r^   r_   rb   rc   rd   re   rh   rj   rk   rl   rq   rr   r   r   r   r   r      sd    
























 





















r   N)libcst.codemodr   libcst.codemod.commands.renamer   r   r   r   r   r   <module>   s   