Инструменты Javascript: насколько сложный рефакторинг возможен прямо сейчас?
Исходя из Java, где большинство IDE поддерживает сложный рефакторинг, который может охватывать больше файлов исходного кода и проектов, мне интересно, есть ли редакторы Javascript, которые поддерживают то же самое?
Я только что закончил смотреть презентацию о поддержке инструментов Cloud9 AST. Этой презентации более одного года. Интересно, если с тех пор Cloud9 получил сложные функции рефакторинга, которые понимают, например. NodeJs требуют () утверждений? Конечно, этот вопрос не хочет сужаться до Cloud9, у нас есть brackets.io, Orion и т. Д. Это просто презентация, с которой я столкнулся, поэтому я привожу примеры на основе Cloud9.
Скажем, у меня есть модуль Node, который экспортирует прототип объекта, и у меня есть другой модуль, который использует это. Скажем, мне нравится переименовывать функцию в экспортированном прототипе, и я ищу то, что IDE будет реорганизовывать вызовы в другом модуле в соответствии с изменением. Поддерживает ли какой-либо инструмент переименование рефактора в зависимости от модуля?
2 ответа
Я трачу много времени, чтобы найти решение для этого, но...
Я думаю, что не существует приложения, как вы хотите. JavaScript немного странный язык для этого. Например, обзор. Трудно обнаружить вызовы функций, потому что трудно определить, является ли ваша текущая переменная экземпляром / клоном другой или нет, трудно обнаружить изменения в прототипе. У вас есть "класс", вы создаете новый экземпляр, и вы можете изменять свойства только для этого нового экземпляра. Конечно, ключевое слово "this" может стать новой проблемой для областей.
Пример. Если я переименую addNew
функция, что тоже будет переименовано?
var Sample = function() {
this.values = [];
};
Sample.prototype.addNew = function(value) {
this.values.push(value);
};
var s = new Sample();
s.addNew("1");
var s2 = new Sample();
s2.addNew = function(value) {
this.values.push(parseInt(value, 10));
};
s2.addNew("12x");
Sample.prototype.addNewRaw = Sample.prototype.addNew;
Sample.prototype.addNew = function(value) {
this.values.push("x" + value);
};
var s3 = new Sample();
s3.addNew(12);
s3.addNewRaw(12);
console.log(s);
console.log(s2);
console.log(s3);
Хорошо, это ужасный код:) Если я встретил этот код моим коллегой, я думаю, я просто бью их, пока он не будет похож на этот. Да, это интересная тема / вопрос, и я думаю: "Это возможно и может быть полезным?" Вопрос первый, который нам нужно задать. Конечно, возможно, и это может быть полезным.
Кстати, я использую Brackets, sed, grep и jshint в целом и рефакторинг тоже.
В нашей компании мы используем Webstorm для проведения рефакторинга для нашего проекта nodejs.
Webstorm является лучшей IDE для nodejs IMHO.
Причина в том, что он может выполнять анализ кода с использованием Lint и многих других модулей. После анализа кода мы смогли решить множество ошибок кодирования и уменьшить количество ошибок.
Изменения, внесенные в имя файла или метода, вызовут сканирование всего проекта и подскажут, сколько ссылок автоматически исправлено.
Webstorm также поддерживает множество функций Vim, таких как быстрый переход между кодами и множество приятных сочетаний клавиш. На самом деле я прикрепил ярлык быстрого доступа к веб-шторму на своей стене.
Вот ссылка на веб-шторм