Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Автоматизированные рефакторинги: AST, FST и все-все-все

1,260 views

Published on

Доклад на PyCon Russia 2015

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Автоматизированные рефакторинги: AST, FST и все-все-все

  1. 1. ya.cc/pyc15
  2. 2. Автоматизируем рефакторинги: 
 AST, FST и все-все- все Кирилл Борисов PyCon Russia 2015, 18-19 сентября 2015
  3. 3. Поддержка старого кода Уменьшение “копипасты” Исправление ошибок Повышение читаемости 4 Рефакторинг? Зачем?
  4. 4. Совершенно согласен, отличный инструмент! Идеален для интерактивного рефакторинга Нет возможностей для массовой обработки Слишком простые инструменты Не все пользуются PyCharm 5 «Почему не PyCharm?»
  5. 5. Отличное решение! Но подходит только в простых случаях: • Малое количество файлов • Небольшие объемы кода (< 5 тысяч срок) • Вносимые изменения элементарны или интуитивны 6 «Я руками быстрее справлюсь!»
  6. 6. Файлов с исходным кодом: 1124 Строчек кода: 253 473 (~ 75% - тесты) Тестов: 10 991 Общий объем: 220 мегабайт 7 Наши цифры: Яндекс.Паспорт
  7. 7. Автоматизируйте это!
  8. 8. Наличие тестов или тестировщиков Есть представление о нужном результате Изменения потенциально стоят затраченного времени Легкое безумие :) 9 Необходимые условия
  9. 9. 1. Преобразуем исходный код в удобную структуру 2. Пропускаем структуру через фильтр 3. Оцениваем контекст 4. Вносим изменения 5. Выгружаем обратно исходный код 10 Методика внесения изменений
  10. 10. “Батарейки”
  11. 11. tokenize - разбиение исходника на токены 12 Стандартная библиотека Python
  12. 12. 13 tokenize: из текста в токены
  13. 13. tokenize - разбиение исходника на токены ast - построение синтаксического дерева 14 Стандартная библиотека Python
  14. 14. 15 ast: из текста в AST
  15. 15. tokenize - разбиение исходника на токены ast - построение синтаксического дерева … - нечем конвертировать исходный код в текст 16 Стандартная библиотека Python
  16. 16. Сторонние средства
  17. 17. astor
 https://github.com/berkerpeksag/astor astmonkey
 https://github.com/konradhalas/astmonkey astunparse
 https://github.com/simonpercivall/astunparse
 Нет возможности влиять на стиль выводимого кода Гарантированно не 100% соответствие даже при отсутствии изменений 18 Из AST в текст
  18. 18. Надстройка над библиотекой baron Удобный механизм запросов Работает с FST (!= AST) Разбирает только Python 2 Сохраняет информацию о стиле:
 RedBaron(source_code).dumps() == source_code 19 redbaron https://github.com/Psycojoker/redbaron
  19. 19. Предназначено для работы с исходным кодом Сохраняет информацию о форматировании узлов Более удобная для восприятия структура “Под капотом” - JSON 20 FST: Full Source Tree
  20. 20. 21 FST: Full Source Tree
  21. 21. Большой набор стандартных рефакторингов Немного статического анализа Документация сильно отстает от кода Требует указания мест применения Отлично работает в связке с IDE / другими библиотеками 22 rope https://github.com/python-rope
  22. 22. Реальный код?
  23. 23. Вопросы?
  24. 24. Кирилл Борисов Спасибо! @lensvol borisov.kir@gmail.com lensvol

×