Как далеко продвинулся DevExpress с рефакторингом Javascript?
Более года назад я помню, как один из евангелистов DevExpress просматривал или, по крайней мере, продвигал богатый рефакторинг Javascript (за пределами только ограниченного intellisense) в оболочке Visual Studio, я вспоминаю часть линейки продуктов CodeRush/DevExpress. Я был взволнован.
При проверке сегодня (lmgtfy) я могу найти очень очень ограниченную ссылку на нее, только одну небольшую italtic-строку о бета-версии в описании продукта, без видео, без сообщений в блогах, без шума сообщества. Он упал? Vapourware? Плохая реализация, которую они даже не продвигают?
С Javascript, возможно, самым популярным языком программирования когда-либо и с виртуальной машиной для него практически на каждой машине за последние 10 лет, почему редактор так беден? (По сравнению с данными для Java и С#)? Вы видите, как у ScottGu хвастается, что у нас теперь есть jQuery intellisense, но сравниваем это с богатством поддержки С# в среде IDE, это шутка.
Кто-то однажды сказал, так как существует много стилей написания Javascript, богатая среда IDE (за пределами intellisense) с поддержкой рефакторинга сложна, но если несколько движков могут интерпретировать/компилировать JS с таким же результатом, конечно, это должно быть сложно проанализировать, чтобы поддерживать материал как переименовать переменную, извлечь метод, переместиться в другое пространство имен (или его мини-JS) и т.д. Я ошибаюсь?
Ответы
Ответ 1
CodeRush поддерживает пятьдесят два рефакторинга JavaScript:
- Добавить разделители блоков
- Добавить параметр
- Нарушать аргументы
- Параметры разблокировки
- Случай к условному
- Комбинированные условные обозначения (вложенные)
- Комбинированные условные обозначения (параллельные)
- Назначение сжатия
- Сжатие с тернарным выражением
- Конкатенатные строки
- Условный к случаю
- Создать объявление с несколькими переменными
- Создать перегрузку
- Создать метод Setter
- Создать с выражением
- Развернуть присвоение
- Развернуть тернарное выражение
- Метод извлечения
- Сгладить условный
- Для ForEach
- ForEach to
- Инициализировать условно
- Встроенное недавнее назначение
- Встроенный результат
- Inline Temp
- Inline With Statement
- Ввести локальный
- Ввести локальную (заменить все)
- Ввести переменную результата
- Аргументы по цепочке
- Параметры очереди
- Переместить объявление возле ссылки
- Перенос инициализации в декларацию
- Перейти к параметру
- Удалить разделители блоков
- Удалить параметр
- Удалить избыточное условное
- Переименовать локально
- Параметры порядка
- Заменить Temp с запросом
- Заменить локальным
- Обратный условный
- Упрощение выражения
- Сплит условный
- Разделить условный (и дублировать блок else)
- Разделить инициализацию из декларации
- Объявление переменной с разделителями
- Разделить строку
- Разделить временную переменную
- Разделить с выражением
- Расширить область действия
- Расширить область действия (продвигать в поле)
И восемь деклараций потребления и быстрого исправления:
- Добавить контракт
- Добавить Else Statement
- Объявить поле
- Объявить локальный
- Зеркальный код
- Реверс для цикла
- Поворот на 90 градусов
- Проверка орфографии
Кроме того, мы работаем над улучшением поддержки рефакторинга для выпуска 10.2. Мы также недавно улучшили Quick Nav, чтобы сделать навигацию к функциям JavaScript так же просто, как навигация в С# или VB. Это улучшение поступит в 10.2, но теперь доступно для клиентов CodeRush в ежедневной сборке.
Полное раскрытие информации - я возглавляю команду CodeRush в DevExpress.
Ответ 2
Проблема с чем-то вроде Javascript Intellisense заключается в том, что она действительно нуждается в сверхъестественных способностях, чтобы иметь представление о том, что означает часть кода. Как здесь, в этой функции фрагмент:
return function(a) {
var x = a.
Теперь я только что набрал это "." после "a", и я нажимаю "вкладку" для автозаполнения. Что такое IDE?
В некоторых ограниченных случаях вы можете сделать некоторые догадки OK; Редактор может сделать некоторые предположения, если вы сказали, что используете jQuery, например, и он видит
$('something').
Ну, это достойная догадка, что выполнение API jQuery - это правильная вещь. Однако это никогда не будет намного лучше, чем предполагать. Даже с этим примером jQuery редактор по-прежнему будет сталкиваться с какими-то трудными проблемами:
$('something').each(function(_, element) {
if (element.
После этого ".", что должно автообновить меня? Ну, супер-умный редактор может захотеть выйти на конечность и предположить, что "элемент" - это DOM node, но должно быть паранормально знать, какой тип DOM node.
Теперь, еще одна вещь, которую можно было бы сделать, это включить какую-то всеобъемлющую систему подсказок, чтобы программист мог прямо сказать редактору, что. Это потребует от меня немного внимания со стороны Javascript, но я думаю, что некоторые люди могут найти это полезным.
Ответ 3
JS только недавно стал серьезным языком разработки для тяжелых приложений. Java, напротив, много лет используется крупными богатыми корпорациями, что дает компаниям и проектам с открытым исходным кодом намного больше времени, чтобы вкладывать деньги/время в строительные инструменты.
Построение достойного программного обеспечения занимает много времени.