Переформатировать PHP-код с помощью Perl - PullRequest
3 голосов
/ 15 сентября 2011

Представьте, что у нас есть следующий код PHP:

if (true)
{
    doSomething();
}

Но мы хотим иметь:

if (true) {
    doSomething();
}

Я думаю, мы можем использовать средство массового редактирования на Perl, чтобы сделать этоКакое-то изменение во всей кодовой базе.

Но я просто не могу заставить его соответствовать символу новой строки, за которым следует пробел, затем фигурная скобка.

Вот что я пытаюсь

perl -pi -w -e 's/if(.*)\n\s+\{/if$1 \{/g'  testfile.php

Я в полной растерянности;это соответствует, если я не включаю пробелы и скобки.Но это не очень полезно.

Ответы [ 3 ]

3 голосов
/ 15 сентября 2011

Использование -p заставляет Perl зацикливать строки файла, по одной строке за раз, тем самым предотвращая сопоставление содержимого по нескольким строкам.

Вы можете использовать -0 для установки входной записиразделитель, чтобы обнулить и заставить Perl читать весь файл сразу.(См. perlrun .)

Вы можете попробовать что-то вроде этого:

perl -p0iwe 's/\bif\b(.*)\n\s*\{/if$1 \{/g' test.php

Обратите внимание, что это не лучшее решение для редактирования PHP.Строки, комментарии и текстовое содержимое файла - это всего лишь несколько вещей, которые могут легко сломать такое упрощенное решение.Я предлагаю найти правильный инструмент для работы.Некоторые редакторы / IDE поддерживают (пере) форматирование вашего кода, возможно, вы можете попробовать один из них.

1 голос
/ 15 сентября 2011

Если вы хотите изменить базу кода Perl, я настоятельно рекомендую использовать Perl :: Tidy . Но я предполагаю, что есть похожий инструмент для PHP.

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

Это имеет два больших преимущества перед любыми регулярными выражениями:

  1. Вы экономите время, потому что вы определяете все свои предпочтения стиля за один проход. Допустим, это занимает два часа. Я не вижу, чтобы вы писали регулярные выражения, охватывающие одинаковое количество вариантов в одно и то же время.
  2. И даже более важно (хотя вы можете сказать, что этого никогда не произойдет, но это наверняка произойдет): Рано или поздно у вас будет какой-то исключительный код, который не охватывается вашим регулярным выражением. Может быть if, который не обнаружен, или другая конструкция, которая соответствует регулярному выражению, но не должна быть заменена. В лучшем случае ваш реформатор падает, и вы должны настроить регулярное выражение. В худшем случае преобразователь вносит ошибки в ваш код, и вы даже не замечаете этого - пока код не запустится.
0 голосов
/ 15 сентября 2011

Используйте Perl :: Tidy или его утилиту командной строки perltidy.

Я рекомендую вам взять ваш код PHP и переформатировать исходный код один раз за раз.Скопируйте и вставьте его в виде пустого текстового файла (чтобы фрагменты PHP оставались синтаксически действительным Perl-кодом), а затем выполните perl-tidy этот файл.Если достаточно, замените его обратно в файл кода PHP.

Таким образом, вы можете использовать Perl :: Tidy для форматирования сложных, вложенных структур данных PHP (лучше, чем ничего).

perltidy не можетиспользоваться для форматирования универсального кода PHP (например, многострочные комментарии в стиле PHP / * * / C являются проблемой для perltidy)

AFAIK знает, что не существует такого прекрасного средства PHP, как perltidy.Я искал это несколько лет назад;тем временем все могло измениться.

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