Comments 2
А что вообще сейчас есть из утилит для сложного рефакторинга?
Чем, например, отличаются возможности golang.org/x/tools/cmd/eg и gogrep -s
?
Я на eg
обращал ранее внимание, но к нему маловато документации и примеров. Выглядит как более простая утилита, чем gogrep
, я так понимаю, там нет фильтров по атрибутам и не построить конвейеры. Использовать отдельный файл с before/after выглядит не так удобно для интерактивной команды (хотя расширение могло бы создавать такой файл самостоятельно).
Есть ещё малоизвестный (?) gofmt -r
, сравнение с которым было в докладе автора gogrep.
Я не знаю, сделано для Go или нет, но в IDE известной компании есть SSR, который работает для нескольких ЯП.
В ruleguard есть возможность описывать quickfix на основе тех же gogrep
шаблонов. Разница в том, что можно хранить правила в отдельном файле, что позволит на сохранении заменять всё, что хочется упрощать автоматически. Вот простой пример:
m.Match(`fmt.Fprint(os.Stdout, $*args)`).Suggest(`fmt.Print($args)`)
m.Match(`fmt.Fprintln(os.Stdout, $*args)`).Suggest(`fmt.Println($args)`)
m.Match(`fmt.Fprintf(os.Stdout, $*args)`).Suggest(`fmt.Printf($args)`)
Находим вызовы Fprintf
с аргументов Stdout
и заменяем на Print*
функции.
gogrep: структурный поиск и замена Go кода