2 голоса 825 просмотров 16.01.2017 / 17:26
Ginosaji
Вопрос интересующимся парсингом. git diff и утилита diff (с некоторой опцией) в выводе показывает первую строчку объявления функции. В C точно, в Java - не проверял. Пример: добавили строчку в довольно большую функцию и посмотрели git diff
Мне лень по исходникам гита лазить, может здесь быстрее ответят. Желательно шустрый алгоритм и без загрузки всего исходника в память для последующей обработки. Работать должно, если объявление функции занимает и одну, и несколько строчек. Ответы
0 голосов
17.01.2017 / 00:07
Ginosaji
Минусы: чтобы такой дифф сработал, надо соблюдать строго такой стиль оформления. А если принято восемь отступов? А если не пробелами, а табуляцией? А если изменение было в блоке if, вложенном в цикл for? А если изменение было не в функции, а макрос поменяли, то что нам такой код "найдёт"? Решение должно быть универсальным.
0 голосов Если же тебе нужен diff AST, то на данный момент это нужно делать ручками (но использовать имеющиеся парсеры), хотя есть академические проекты, которые занимаются таким, но они не production-ready.
Изм. Ксакеп
от 16.01.2017 / 17:59
16.01.2017 / 20:04
Ginosaji
тот факт, что он выдал сигнатуру — это следствие того, что ты изменил строчку с сигнатурой функцииНет, сигнатуру я не менял. Я в примере добавил только "LOG(...)" в большой функции.Посмотрел в исходниках diff: там балуются с регекспами при опции show-c-function, как я и думал. Вопрос закрыт. Всего: 2
|
Реклама |