Я пытаюсь написать команду в elisp, чтобы автоматически перенумеровать юнит-тесты в заданном файле.Чтобы помочь мне легко найти неудачные тесты, я обычно использую следующий синтаксис (используя GoogleTest):
TEST (testCaseName, T0XX_Test_Description)
Я смогнаписать рабочую команду, используя цикл while с повторным поиском-пересылкой / заменой-соответствием:
(defun renumber-tests-auto(&optional num)
"Automatically renumber the tests from the current location in
the active buffer. Optional argument sets the current test
number (instead of 1). This function automatically updates
all test numbers from the current location until the end of
the buffer without querying the user for each test."
(interactive "NStarting test number: ")
(save-excursion
(setq num (or num 1 ))
(while (re-search-forward ", +T0[0-9]+" nil t )
(replace-match
(concat ", T" (format "%03d" num )))
(setq num (+ 1 num))
)
)
)
Однако я бы также хотел иметь интерактивную версию этой функции с использованием execute-replaceинтерактивно запрашивать пользователя для каждого теста.Конечно, я мог бы просто обработать запрос в своем коде вручную, однако, учитывая, что эта функциональность уже присутствует, я не хочу, чтобы она была реализована заново.Кроме того, я хотел бы убедиться, что эта команда имеет тот же интерфейс, что и другие встроенные функции замены запросов.
Моя последняя неудачная попытка следующая:
(defun renumber-tests(&optional num)
(interactive "NStarting test number: ")
(save-excursion
(setq num (or num 1 ))
(perform-replace ", +T0[0-9]+"
(concat ", T" (format "%03d" (+ 1 num )
))
t t nil)
)
)
Однако этане обновляет значение num каждый раз, когда он запускается (я также пытался (setq num (+ 1 num)) и получал тот же результат.
Я был бы очень признателен за помощь от тех, кто более опытен в elisp- если есть какой-то способ заставить его работать так, как я собираюсь.