Inline method refactoring changes variables names after applying the transformation

Abierto
#759 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 7 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
34/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
python
Área
tooling

Línea de trabajo

Start from the Inline Method refactoring applied to the nested RL function in the reproduction snippet. The output renames locals with a __0__ and __1__ prefix and drops the parameter binding, so look at how the inliner renames and substitutes local names. Reproduce by running the refactoring on the snippet. Done means the output matches the expected code, with no prefixed names and the loop variables kept intact.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug inline-refactor

Inline method refactoring changes field signatures and generates uninitialized variables

Steps to reproduce the behavior:

  1. Code before refactoring:
def _calculate_tk(source):
    def RL(a, b):
        for c in range(0, len(b) - 2, 3):
            xa = a & ((1 << 32) - 1)
            d = ord(b[c + 2]) - 87 if b[c + 2] >= 'a' else int(b[c + 2])
            d = xa >> d if b[c + 1] == '+' else xa << d
            a = a + d & 4294967295 if b[c] == '+' else a ^ d
        return (a & ((1 << (32 - 1)) - 1)) - (a & (1 << (32 - 1)))

    b = 406398
    d = source.encode('utf-8')
    a = b

    for di in d:
        a = RL(a + di, "+-a^+6")

    a = RL(a, "+-3^+b+-f")
    
    return '{0:d}.{1:d}'.format(a, a ^ b)

  1. Apply the Inline Method refactoring to '_calculate_tk.RL'

  2. Expected code after refactoring:

def _calculate_tk(source):
    b = 406398
    d = source.encode('utf-8')
    a = b

    for di in d:
        for c in range(0, len("+-a^+6") - 2, 3):
            xa = a + di & ((1 << 32) - 1)
            d = ord("+-a^+6"[c + 2]) - 87 if "+-a^+6"[c + 2] >= 'a' else int("+-a^+6"[c + 2])
            d = xa >> d if "+-a^+6"[c + 1] == '+' else xa << d
            a = a + di + d & 4294967295 if "+-a^+6"[c] == '+' else a + di ^ d
        a = (a + di & ((1 << (32 - 1)) - 1)) - (a + di & (1 << (32 - 1)))

    for c in range(0, len("+-3^+b+-f") - 2, 3):
        xa = a & ((1 << 32) - 1)
        d = ord("+-3^+b+-f"[c + 2]) - 87 if "+-3^+b+-f"[c + 2] >= 'a' else int("+-3^+b+-f"[c + 2])
        d = xa >> d if "+-3^+b+-f"[c + 1] == '+' else xa << d
        a = a + d & 4294967295 if "+-3^+b+-f"[c] == '+' else a ^ d
    a = (a & ((1 << (32 - 1)) - 1)) - (a & (1 << (32 - 1)))

    return '{0:d}.{1:d}'.format(a, a ^ b)

  1. The result of the program after applied transformation:
def _calculate_tk(source):
    b = 406398
    d = source.encode('utf-8')
    a = b

    for di in d:
        for __0__c in range(0, len("+-a^+6") - 2, 3):
            __0__xa = __0__a + di & ((1 << 32) - 1)
            __0__d = ord("+-a^+6"[__0__c + 2]) - 87 if "+-a^+6"[__0__c + 2] >= 'a' else int("+-a^+6"[__0__c + 2])
            __0__d = __0__xa >> __0__d if "+-a^+6"[__0__c + 1] == '+' else __0__xa << __0__d
            __0__a = __0__a + di + __0__d & 4294967295 if "+-a^+6"[__0__c] == '+' else __0__a + di ^ __0__d
        a = (__0__a + di & ((1 << (32 - 1)) - 1)) - (__0__a + di & (1 << (32 - 1)))

    for __1__c in range(0, len("+-3^+b+-f") - 2, 3):
        __1__xa = __1__a & ((1 << 32) - 1)
        __1__d = ord("+-3^+b+-f"[__1__c + 2]) - 87 if "+-3^+b+-f"[__1__c + 2] >= 'a' else int("+-3^+b+-f"[__1__c + 2])
        __1__d = __1__xa >> __1__d if "+-3^+b+-f"[__1__c + 1] == '+' else __1__xa << __1__d
        __1__a = __1__a + __1__d & 4294967295 if "+-3^+b+-f"[__1__c] == '+' else __1__a ^ __1__d
    a = (__1__a & ((1 << (32 - 1)) - 1)) - (__1__a & (1 << (32 - 1)))
    
    return '{0:d}.{1:d}'.format(a, a ^ b)

Lenguaje dominante
Python
Estrellas
2.2k
Forks
197
Merge medio
2 d 13 h
PR fusionados (30 d)
5

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de python-rope/rope

Todos los issues de python-rope/rope

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.