Regex / Unix Tool для вставки новой строки перед началом каждого определения функции в файле C ++ - PullRequest
1 голос
/ 29 ноября 2009

Редактировать:

indent -bap foo.cpp

работает

Есть ли простой способ вставить новую строку или текст перед началом каждого определения функции в файле C ++?

int main() {
  return 0;
}
void foo() {
}

становится

int main() {
  return 0;
}

void foo() {
}

Ответы [ 2 ]

0 голосов
/ 29 ноября 2009

Синтаксический анализ исходного кода C ++ с помощью регулярного выражения гарантированно завершится неудачей в некоторых случаях (которые могут не произойти для вас, в зависимости от вашего исходного кода / стиля кодирования), поэтому какой-то синтаксический анализ всегда является лучшей стратегией.

Я бы начал с изучения исходного кода cproto, чтобы посмотреть, можно ли его просто изменить, добавив пустую строку, когда он найдет функцию.

Обновление: cproto не обрабатывает C ++, но genproto делает.

0 голосов
/ 29 ноября 2009

В Perl:

while(my $line = <>)
{
  $line =~ s/^\}[ \t]*$/}\n/;
  print $line;
}

Это также вставит что-то в конец каждого пространства имен (но не struct или class, так как в конце у них точка с запятой). Возможно, вы могли бы стать более умным, чтобы избежать этого, но я подозреваю, что это может быть излишним.

Это также заметно не будет перехватывать функции, которые определены inline в объявлении класса. Я не уверен, что в твоем случае это важно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...