Отформатировать списки параметров по код-стайлу

Больше двух параметров — каждый на отдельной строке (закрывающая
скобка в конце последнего); два и меньше — в одну строку. Правило
добавлено в docs/spec/Код-стайл-Дейл.md; применено к 628 сигнатурам
в 253 файлах.
This commit is contained in:
Rustam Khalimov
2026-09-11 13:22:56 +03:00
parent 410194b0cb
commit 492950bdd0
255 changed files with 2672 additions and 668 deletions
@@ -174,7 +174,11 @@ public static class BudgetNormalizer
// toCurrency: Целевая валюта (код).
// rates: Курсы к рублю либо null.
// Возвращает: Сумма в целевой валюте или null.
private static double? Convert(double amount, string fromCurrency, string toCurrency, IReadOnlyDictionary<string, double>? rates)
private static double? Convert(
double amount,
string fromCurrency,
string toCurrency,
IReadOnlyDictionary<string, double>? rates)
{
return rates is null ? null : RatesService.ConvertAmount(amount, fromCurrency, toCurrency, rates);
}
@@ -101,7 +101,10 @@ public sealed partial class CardsService
/// <param name="fileId">Id записи файла (<c>pf_...</c>).</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Метаданные записи файла либо null (карточка/запись не найдены).</returns>
public async Task<CardFileDto?> GetFileEntryAsync(string cardId, string fileId, CancellationToken ct)
public async Task<CardFileDto?> GetFileEntryAsync(
string cardId,
string fileId,
CancellationToken ct)
{
CardDto? card = await _store.GetCardAsync(cardId, ct);
if (card is null)
@@ -124,7 +127,10 @@ public sealed partial class CardsService
/// <param name="fileId">Id удаляемой записи файла (<c>pf_...</c>).</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Карточка после удаления (без записи) либо null — карточки нет (404-семантика).</returns>
public async Task<CardDto?> RemoveFileAsync(string cardId, string fileId, CancellationToken ct)
public async Task<CardDto?> RemoveFileAsync(
string cardId,
string fileId,
CancellationToken ct)
{
CardDto? card = await _store.GetCardAsync(cardId, ct);
if (card is null)
@@ -152,7 +158,10 @@ public sealed partial class CardsService
// fileId: Id записи файла (pf_...; уникальный суффикс ключа).
// name: Имя файла как прислано (в ключ идёт санитизированная часть).
// Возвращает: Ключ объекта (opaque для хранилища).
private static string BuildObjectKey(string cardId, string fileId, string name)
private static string BuildObjectKey(
string cardId,
string fileId,
string name)
{
return $"{ObjectRootSegment}/{cardId}/{fileId}_{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}_{SanitizeKeyName(name)}";
}
@@ -42,7 +42,12 @@ public sealed partial class CardsService
// hits: matchHits для новой колонки (пересчитаны вызывающим, Ruling 2).
// action: Действие журнала: move/trash.
// ct: Токен отмены.
private async Task MoveToColumnAsync(CardDto card, string toCol, IReadOnlyList<MatchHitDto> hits, string action, CancellationToken ct)
private async Task MoveToColumnAsync(
CardDto card,
string toCol,
IReadOnlyList<MatchHitDto> hits,
string action,
CancellationToken ct)
{
await _store.UpdateColumnAsync(new CardColumnUpdateDto(
CardId: card.Id,
@@ -60,7 +65,12 @@ public sealed partial class CardsService
// fromCol: Прежняя колонка (для comment — null).
// toCol: Новая колонка (для comment — null).
// ct: Токен отмены.
private async Task LogMoveAsync(string cardId, string action, string? fromCol, string? toCol, CancellationToken ct)
private async Task LogMoveAsync(
string cardId,
string action,
string? fromCol,
string? toCol,
CancellationToken ct)
{
await _store.AddMoveAsync(new CardMoveDto(
PrefixId.New(KanbanIdPrefixes.CardMove),
@@ -75,7 +85,10 @@ public sealed partial class CardsService
// text: Текст карточки для правил (source_msg или title).
// ct: Токен отмены.
// Возвращает: Список совпавших критериев; доски нет/правил нет → пусто.
private async Task<IReadOnlyList<MatchHitDto>> ComputeHitsForBoardAsync(string boardId, string text, CancellationToken ct)
private async Task<IReadOnlyList<MatchHitDto>> ComputeHitsForBoardAsync(
string boardId,
string text,
CancellationToken ct)
{
ContainerDto? board = await _store.GetContainerAsync(boardId, ct);
return board is null
@@ -89,7 +102,10 @@ public sealed partial class CardsService
// text: Текст карточки для правил.
// ct: Токен отмены.
// Возвращает: Совпавшие критерии (label/term[/word]); нет активных правил → пусто.
private async Task<IReadOnlyList<MatchHitDto>> ComputeHitsAsync(ContainerRulesDto? rules, string text, CancellationToken ct)
private async Task<IReadOnlyList<MatchHitDto>> ComputeHitsAsync(
ContainerRulesDto? rules,
string text,
CancellationToken ct)
{
// Кэш курсов из типизированного снимка настроек (C30): null → мок-курсы (дефолт RatesService).
IReadOnlyDictionary<string, double> rates =
@@ -66,7 +66,10 @@ public sealed partial class CardsService
/// <param name="toCol">Цель: <c>inbox</c> либо id доски (<c>b_...</c>).</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Результат: Error (400) | Card=null (карточки нет, 404) | Card — карточка после переноса.</returns>
public async Task<CardResultDto> MoveDashboardCardAsync(string cardId, string toCol, CancellationToken ct)
public async Task<CardResultDto> MoveDashboardCardAsync(
string cardId,
string toCol,
CancellationToken ct)
{
ContainerDto? board = null;
if (toCol != CardIds.Inbox)
@@ -138,7 +141,10 @@ public sealed partial class CardsService
/// <param name="teach">True — писать сигнал «спам» (действие пользователя); false — не писать.</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Карточка после переноса (при no-op — как была) либо null — карточки нет (404).</returns>
public async Task<CardDto?> TrashCardAsync(string cardId, bool teach, CancellationToken ct)
public async Task<CardDto?> TrashCardAsync(
string cardId,
bool teach,
CancellationToken ct)
{
CardDto? card = await _store.GetCardAsync(cardId, ct);
if (card is null)
@@ -255,7 +261,10 @@ public sealed partial class CardsService
/// <param name="text">Текст комментария (непустой после Trim).</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Результат: Error (400) | Comments=null (404) | Comments — список после добавления.</returns>
public async Task<AddCommentResultDto> AddCommentAsync(string cardId, string text, CancellationToken ct)
public async Task<AddCommentResultDto> AddCommentAsync(
string cardId,
string text,
CancellationToken ct)
{
string trimmed = (text ?? string.Empty).Trim();
if (trimmed.Length == 0)
@@ -284,7 +293,10 @@ public sealed partial class CardsService
/// <param name="cardId">Id карточки либо null/пусто.</param>
/// <param name="col">Колонка либо null/пусто (используется, когда cardId не задан).</param>
/// <param name="ct">Токен отмены.</param>
public Task MarkSeenAsync(string? cardId, string? col, CancellationToken ct)
public Task MarkSeenAsync(
string? cardId,
string? col,
CancellationToken ct)
{
return _store.UpdateSeenAsync(
string.IsNullOrEmpty(cardId) ? null : cardId,
@@ -48,7 +48,10 @@ public sealed partial class CardsService
/// <param name="ct">Токен отмены.</param>
/// <returns>Результат: Error <see cref="RemindersDisabledDetail"/> (400) | Card=null без Error (404) |
/// Card — карточка с напоминанием.</returns>
public async Task<CardResultDto> SetReminderAsync(string cardId, long atMs, CancellationToken ct)
public async Task<CardResultDto> SetReminderAsync(
string cardId,
long atMs,
CancellationToken ct)
{
CardDto? card = await _store.GetCardAsync(cardId, ct);
if (card is null)
@@ -168,7 +168,10 @@ public sealed partial class CardsService
/// <param name="body">Тело PATCH: ключ → JSON-значение (наличие ключа = поле меняется).</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Обновлённая карточка или null — карточки нет (404).</returns>
public async Task<CardDto?> PatchCardAsync(string cardId, IReadOnlyDictionary<string, JsonElement> body, CancellationToken ct)
public async Task<CardDto?> PatchCardAsync(
string cardId,
IReadOnlyDictionary<string, JsonElement> body,
CancellationToken ct)
{
ArgumentNullException.ThrowIfNull(body);
@@ -190,7 +193,11 @@ public sealed partial class CardsService
/// <param name="url">URL ссылки (без схемы — добавится https://).</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Результат: Error (400 «Пустая ссылка») | Card=null без Error (404) | Card — карточка со ссылкой.</returns>
public async Task<CardResultDto> AddLinkAsync(string cardId, string name, string url, CancellationToken ct)
public async Task<CardResultDto> AddLinkAsync(
string cardId,
string name,
string url,
CancellationToken ct)
{
CardDto? card = await _store.GetCardAsync(cardId, ct);
if (card is null)
@@ -236,7 +243,10 @@ public sealed partial class CardsService
/// <param name="linkId">Id удаляемой ссылки (<c>pl_...</c>).</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Результат: Card=null без Error (404) | Card — карточка без ссылки.</returns>
public async Task<CardResultDto> RemoveLinkAsync(string cardId, string linkId, CancellationToken ct)
public async Task<CardResultDto> RemoveLinkAsync(
string cardId,
string linkId,
CancellationToken ct)
{
if (!await _store.RemoveLinkAsync(cardId, linkId, ct))
{
@@ -262,7 +272,10 @@ public sealed partial class CardsService
/// <param name="ct">Токен отмены.</param>
/// <returns>Результат: Error «Неизвестная стадия» (400) | Card=null без Error (карточки нет, 404) |
/// Card — карточка после переноса.</returns>
public async Task<CardResultDto> MoveStageCardAsync(string cardId, string containerId, CancellationToken ct)
public async Task<CardResultDto> MoveStageCardAsync(
string cardId,
string containerId,
CancellationToken ct)
{
if (!CardsDefaultContainers.Contains(containerId))
{
@@ -52,7 +52,11 @@ public sealed partial class CardsService
/// <param name="settings">KV-хранилище настроек тенанта (курсы, напоминания).</param>
/// <param name="mlClient">Клиент ML: PushAsync — обучающий сигнал действия, StatusAsync — счётчики counts.</param>
/// <param name="storage">Файловое хранилище вложений карточки (объекты файлов).</param>
public CardsService(ICardStore store, ISettingsStore settings, IMlClient mlClient, IFileStorage storage)
public CardsService(
ICardStore store,
ISettingsStore settings,
IMlClient mlClient,
IFileStorage storage)
{
_store = store;
_settings = settings;
@@ -122,7 +122,10 @@ public sealed class ContainersService(ICardStore store, ISettingsStore settings)
/// <param name="patch">Изменения; null-поле означает «не менять».</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Контейнер после патча; null — контейнера нет (404 «Контейнер не найден»).</returns>
public async Task<ContainerDto?> PatchAsync(string containerId, ContainerPatchDto patch, CancellationToken ct)
public async Task<ContainerDto?> PatchAsync(
string containerId,
ContainerPatchDto patch,
CancellationToken ct)
{
ContainerDto? current = await store.GetContainerAsync(containerId, ct);
if (current is null)
@@ -171,7 +174,10 @@ public sealed class ContainersService(ICardStore store, ISettingsStore settings)
/// <param name="space">Пространство переставляемых контейнеров.</param>
/// <param name="containerIds">Id контейнеров в новом порядке.</param>
/// <param name="ct">Токен отмены.</param>
public Task ReorderAsync(string space, IReadOnlyList<string> containerIds, CancellationToken ct)
public Task ReorderAsync(
string space,
IReadOnlyList<string> containerIds,
CancellationToken ct)
{
return store.ReorderContainersAsync(space, containerIds, ct);
}
@@ -195,7 +201,10 @@ public sealed class ContainersService(ICardStore store, ISettingsStore settings)
/// <param name="patch">Изменяемые поля состояния.</param>
/// <param name="ct">Токен отмены.</param>
/// <returns>Состояние колонки после merge.</returns>
public async Task<ColumnStateDto> PatchColStateAsync(string colId, ColumnStateDto patch, CancellationToken ct)
public async Task<ColumnStateDto> PatchColStateAsync(
string colId,
ColumnStateDto patch,
CancellationToken ct)
{
Dictionary<string, ColumnStateDto> state = await ReadColStateAsync(ct);
state.TryGetValue(colId, out ColumnStateDto? current);
@@ -121,9 +121,7 @@ public static class SuggestHeuristics
/// <param name="inbox">Карточки «Неразобранного» с непустым source_msg (ICardStore.ListInboxWithSourceAsync).</param>
/// <param name="existingBoardNames">Имена существующих (suggested=false) досок — похожие темы не предлагаются.</param>
/// <returns>Планы колонок (≤4, каждая ≥2 карточки); пусто — мало карточек/нечего сгруппировать.</returns>
public static IReadOnlyList<SuggestedColumnPlan> PlanColumns(
IReadOnlyList<CardDto> inbox,
IReadOnlyList<string> existingBoardNames)
public static IReadOnlyList<SuggestedColumnPlan> PlanColumns(IReadOnlyList<CardDto> inbox, IReadOnlyList<string> existingBoardNames)
{
// Окно анализа: свежие карточки с текстом, как выборка SQL L96–99 (сортировка — страховка
// детерминизма: адаптер уже отдаёт received_at DESC, но вход не должен влиять на выход).