почему у eclipse-python нет магического рефактора? - PullRequest
4 голосов
/ 14 февраля 2011

Eclipse может использовать скомпилированный байт-код для включения функциональности "магического рефактора" - переименования методов, отслеживания иерархий классов вверх и вниз и отслеживания посредством вызовов методов.

Какие существуют технические барьеры, которые усложняют работу с такими языками, как Python и Javascript?

Ответы [ 2 ]

6 голосов
/ 14 февраля 2011

Из-за динамического связывания.Python - это динамический язык, позволяющий делать практически все с помощью переменных.Вы даже можете получить доступ к globals-dict и ввести новые переменные, состоящие из значений времени выполнения.

Таким образом, среда IDE не может быть уверена, когда и какие переменные существуют.Смотрите этот пример:

#silly.py

import sys

if len(sys.argv) > 1:
    thisNowExists = True

#1

try:
    if thisNowExists:
        print("this existed before")
except NameError:
    print("this _now_ exists")
    thisNowExists = True

Ни один человек или IDE не может знать, определен ли thisNowExists в позиции #1, поэтому, если вы хотите переименовать тупо названное thisNowExists ниже этой точки, этоне определено, если мы должны переименовать внешний вид и до #1.

Вам нужно было бы выполнить расширенный анализ потока управления, чтобы сделать правильное предположение, что thisNowExists определено ниже оператора try / catch, но из-задинамическая загрузка скрипта (thisNowExists = 1; import silly) и сортировка, он может даже существовать до import sys без аргументов.

именование переменных по-разному и поиск / замена - ваш лучший вариант;)

1 голос
/ 19 марта 2011

, так что получается, что отслеживание статической информации, такой как методы и иерархии классов, вполне возможно в python.Плагин PyDev Eclipse делает это.Плагин PyLint пытается выполнять статический анализ даже на таких вещах, как динамические переменные, предполагая, что во время выполнения ничего не происходит, и он делает довольно хорошую работу.

...