Enforce cancellation token usage - #15
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fa63676f7c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| node is BaseMethodDeclarationSyntax or | ||
| LocalFunctionStatementSyntax or | ||
| ParenthesizedLambdaExpressionSyntax or | ||
| SimpleLambdaExpressionSyntax or | ||
| AnonymousMethodExpressionSyntax); |
There was a problem hiding this comment.
Analyze cancellation tokens in primary constructors
When a class uses a primary constructor such as sealed class Worker(CancellationToken cancellationToken) and never references that parameter, none of its ancestors match this callable list, so HasImplementation becomes false and the unused-token test silently skips it. Primary constructors are already common in this repository, so include type-declaration primary constructors in the callable/use analysis to enforce the convention consistently.
Useful? React with 👍 / 👎.
Что изменено
Добавлены четыре глобальные Roslyn-проверки:
src,testsиtoolsзапрещеныCancellationToken.None,default(CancellationToken)иdefaultс целевым типомCancellationToken, включая optional-параметры;CancellationTokenдолжен использоваться, кроме сигнатур overrides и реализаций внешних интерфейсов;CancellationToken, а токен доступен в текущей области видимости, его необходимо передать явно;srcвызывает отменяемую операцию без токена и токен ещё недоступен, текущий метод должен получитьCancellationTokenпараметром и прокинуть его от точки входа.Общий source discovery расширен для анализа
testsиtools. Два существовавших= defaultудалены из тестовой инфраструктуры, а xUnit fixtures передаютTestContext.Current.CancellationTokenв инициализацию базы и миграции.Зачем
Чтобы отмена последовательно передавалась по цепочке
Endpoint → Handler → Repository → DB, неиспользуемые токены не засоряли сигнатуры, аNone/defaultне отключали отмену неявно.Проверка не строит предположения по названию метода: необходимость токена определяется по выбранной сигнатуре вызываемой операции. Правило обязательного протягивания по всей иерархии ограничено production-кодом, чтобы optional-токены внутренних Roslyn/xUnit API не создавали ложные требования в самих архитектурных тестах.
Как проверить
Совместимость