Refactoring algorithm
I want known how PhpStorm do rename refactoring. Sorry, but i can't describe my full question in English. Ony Russian.
Скажите, где найти описание алгоритма работы рефакторинга "rename" (и других)? В документации не нашёл.
Из того, что пришло сейчас в голову, касательно рефакторинга "rename" интсресует следующее:
1. Находятся ли имена функций и методов, вызываемых через call_user_func() и т.п. ф-и, через нотацию $func_name(), а так же через передачу имени ф-и в качестве callback ф-и функциям array_map() и т.п.?
2. Находятся ли функции и классы, для которых созданны отражения (new ReflectionClass(''), new ReflectionFunction('') и т.п.)?
3. Вычисляются ли значения переменных, участвующих в образовании имён классов и функций и разыменовываются ли переменные $$var_name?
4. Вычисляются ли (и как вычисляются) значение переменных при вызове методов и свойств объекта класса. Переименуются ли нижеследующие вызовы методов и свойств?
$obj = new ClassName;
//методы
$obj->test();
$func_name = 'test';
$obj->$func_name();
$func_name = 'static_func';
ClassName::$func_name();
//свойства
$obj->width;
$var_name = 'width';
$obj->$var_name;
$var_name = 'static_var';
ClassName::$$var_name;
5. Где и как ищется упоминание имени файла в проекте при рефакторинге "rename" для файлов?
6. Вычисляются ли значения переменных, учавствующих образовании имён файлов? Например:
$file_postfix = 'qwe.php';
include ($i + $file_postfix);
//значение переменной другом файле
include ($config['controller']);
Очень хочется досканально знать (а не изучать методом тыка) поведение "rename", чтобы знать о возможных ограничениях и заниматься рефакторингом в ручную только там где это необходимо (т.е. где автоматический рефакторинг не возможен).
P.S.: вообще хотелось бы почитать в целом о анализе кода в PhpStorm и о его ограничениях.
Please sign in to leave a comment.
Насколько я знаю, 1-3 еще не реализованы, но запрос в багтрекере висит: http://youtrack.jetbrains.net/issue/WI-899. По поводу остальных вариантов - не думаю, что они могут быть вообще реализованы полностью корректно.
Вот по этому я и хочу, чтобы был какой-нибудь подробный мануал по использованию рефакторинга с описанием принципов его работы. Иначе как можно использовать инструмент, у которого есть ограничения, о которых не известно (пользователю естественно)?
Basically, all suitable references that are found by Search | Find Usages will be involved in refactoring.
Learn by example current state of things in refactoring support: use Preview button on rename dialog.
Each build/release will also contain description of added features.
BTW, "search for text occurrences" can help handle call_user_func().
All other dynamic calls are not yet supported.