Удаление # регион
Я должен был взять на себя проект AC#. Парень, который разработал программное обеспечение, был глубоко влюблен в #region
потому что он завернул все с регионами. Это сводит меня с ума, и я искал инструмент или аддон, чтобы удалить все #region
из проекта. Есть ли что-то вокруг?
8 ответов
Просто используйте встроенную в Visual Studio функцию "Найти и заменить" (или "Заменить в файлах", которую вы можете открыть, нажав Ctrl + Shift + H).
Удалять #region
вам нужно будет включить сопоставление регулярных выражений; в диалоговом окне "Заменить в файлах" установите флажок "Использовать: регулярные выражения". Затем используйте следующий шаблон: "\#region .*\n
", заменяя спички на ""
(пустая строка).
Удалять #endregion
, делай то же самое, но пользуйся\#endregion .*\n
"как ваш шаблон. Регулярные выражения могут быть излишними для #endregion
, но это не повредит (в случае, если предыдущий разработчик когда-либо оставлял комментарии в той же строке, что и #endregion
или что-то).
Примечание: другие опубликовали шаблоны, которые также должны работать для вас, они немного отличаются от моих, но вы поймете общую идею.
Используйте одно регулярное выражение ^[ \t]*\#[ \t]*(region|endregion).*\n
найти и регион, и регион. После замены на пустую строку вся строка с начальными пробелами будет удалена.
[ \t]*
- находит ведущие пробелы
\#[ \t]*(region|endregion)
- находит #region или #endregion (а также очень редкий случай с пробелами после #)
.*\n
- находит все после #region или #endregion (но в той же строке)
РЕДАКТИРОВАТЬ: Ответ изменен, чтобы быть совместимым со старым синтаксисом регулярных выражений Visual Studio. Было: ^[ \t]*\#(end)?region.*\n
(вопросительные знаки не работают для старого синтаксиса)
РЕДАКТИРОВАТЬ 2: Добавлено [ \t]*
после # для обработки очень редкого случая, найденного @Volkirith
В поиске и замене использования {[#]<region[^]*}
за Find what:
и замените его пустой строкой.#EndRegion
достаточно просто заменить.
Для тех, кто использует ReSharper, это просто Atr-Enter в строке региона. После этого у вас будет возможность удалить области в файле, проекте или решении.
Если вам придется сотрудничать с любителями регионов (и не затрагивать регионы), я бы порекомендовал расширение Visual Studio "Я ненавижу #Regions". Это делает регионы терпимыми - все регионы расширяются по умолчанию, а директивы #region отображаются очень маленьким шрифтом.
Как насчет того, чтобы написать для него свою собственную программу, чтобы рекурсивно заменять пустые регионы во всех файлах * .cs в basePath?
(Подсказка: будьте осторожны с чтением файлов как UTF8, если это не так.)
public static void StripRegions(string fileName, System.Text.RegularExpressions.Regex re)
{
string input = System.IO.File.ReadAllText(fileName, System.Text.Encoding.UTF8);
string output = re.Replace(input, "");
System.IO.File.WriteAllText(fileName, output, System.Text.Encoding.UTF8);
}
public static void StripRegions(string basePath)
{
System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex(@"(^[ \t]*\#[ \t]*(region|endregion).*)(\r)?\n", System.Text.RegularExpressions.RegexOptions.Multiline);
foreach (string file in System.IO.Directory.GetFiles(basePath, "*.cs", System.IO.SearchOption.AllDirectories))
{
StripRegions(file, re);
}
}
Использование:
StripRegions(@"C:\sources\TestProject")
Чтобы удалить #region с символом новой строки после него, замените следующий текст пустой строкой:
^(?([^\r\n])\s)*\#region\ ([^\r\n])*\r?\n(?([^\r\n])\s)*\r?\n
Чтобы заменить #endregion на начальную пустую строку, замените следующую на пустую строку:
^(?([^\r\n])\s)*\r?\n(?([^\r\n])\s)*\#endregion([^\r\n])*\r?\n
Вы можете использовать подстановочный знак найти / заменить:
*\#region *
*\#endregion
И заменить без значения. (Обратите внимание #
необходимо экранировать, так как visual stuido использует его для сопоставления с "любым числом")