Вот мой метод «грязно, но немного помоги», в основном это регулярные выражения.
! Ответ в процессе, просто экономя время от времени, чтобы избежать пугающей кнопки возврата
1: clean: format
Убедитесь, что все объявления находятся в по одной строке на функцию, IMO, который поможет разобраться в этом.
ввод:
public async Task<IList<AnalysisResult>> GetAnalysis(short year, bool unPlanned = false,
Guid? departmentId = null, Guid? personnelId = null, CollarColor? collarColor = null,Guid? factoryId = null)
{
...
}
public async Task<IList<AnalysisResult>> GetOtherStuff(string foo = "bar", bool foobar = false, Guid? factoryId = null)
{
...
}
REGEX: ,\r\n
REPLACE BY: ,
output :
public async Task<IList<AnalysisResult>> GetAnalysis(short year, bool unPlanned = false, Guid? departmentId = null, Guid? personnelId = null, CollarColor? collarColor = null,Guid? factoryId = null)
{
...
}
public async Task<IList<AnalysisResult>> GetOtherStuff(string foo = "bar", bool foobar = false, Guid? factoryId = null)
{
...
}
2: дополнительная очистка: фильтрация и создание отдельных файлов
Для этого необходимо работать в выделенной папке.
Возьмите исходный файл из результата выше. В приведенном ниже скрипте это «input.cs»
. Возьмем только строки, начинающиеся с «publi c» или «publi c asyn c Task», если они все асинхронные * 1065. *.
Создайте сценарий типа filter.ps1
$regex = "^\s*public async Task[^(]*\s+([^(]+)" #capture the name of the function, i.e. the part before the opening parenthesis and space after Task<... type
get-content input.cs | % { if($_ -match $regex) {Set-Content -Path "$($matches[1])Payload.cs" -Value $_ } }
и выполните его в папке, где присутствуют только сценарий и файл input.cs.
Отказ от ответственности : в приведенном выше коде, я полагаю, у вас нет скобок или пробела в типе возвращаемого значения функции ! Это могло произойти, если у вас есть некий общий метод c с несколькими параметрами типа или кортежи.
вывод: 2 отдельных файла, GetAnalysisPayload.cs
и GetOtherStuffPayload.cs
, каждый со строкой объявления функции.
3: грамотно разделить каждую строку
Разделить на (
и ,
, с некоторым умным форматом, который сначала даст «заголовок класса DTO» и список параметров.
(необходимо указать код regex / powershell)
Это может стать беспорядочным в зависимости от того, что у вас есть на этом этапе, но если функции похожи на ваш пример, это может дать вам довольно близкое приближение к тому, что вам нужно на этом этапе уже ..
Затем
Со временем (пару часов?) я бы отполировал это с помощью сценария Powershell или C# консольного приложения, чтобы сохранить вам часть «неизбежная» оставшаяся ручная работа.
, например, добавьте операторы «using», необходимые в верхней части каждого файла.
Я цитирую «неизбежно», потому что об этом говорят ночью что некоторые мастера Regex эта работа может выполняться только с регулярными выражениями.