Skip to content

Comments

Harden analyzers and align CI/tooling#4

Merged
georgepwall1991 merged 2 commits intomasterfrom
codex/implement-audit-improvements
Feb 5, 2026
Merged

Harden analyzers and align CI/tooling#4
georgepwall1991 merged 2 commits intomasterfrom
codex/implement-audit-improvements

Conversation

@georgepwall1991
Copy link
Owner

@georgepwall1991 georgepwall1991 commented Feb 5, 2026

Summary

  • Fix DI001/DI014 false negatives for allocations inside using bodies by only treating using resource expressions/declarations as disposed
  • Improve DI003 factory analysis to detect non-generic GetService(typeof(T)) and robust keyed argument extraction
  • Add constructor selection heuristic shared across analyzers ([ActivatorUtilitiesConstructor] first, otherwise greediest accessible constructor) and apply it to DI003/DI009/DI010/DI011
  • Update DI003 descriptor messaging from singleton-specific wording to service/lifetime-neutral wording
  • Add regression tests for all of the above analyzer behaviors
  • Align CI/release SDK setup with test target framework and add global.json pin
  • Refresh test project dependencies and switch analyzer/code-fix test infrastructure to DefaultVerifier
  • Suppress RS1038 in the analyzer project with inline rationale for combined analyzer+code-fix packaging

Validation

  • dotnet test DependencyInjection.Lifetime.Analyzers.sln
  • dotnet build DependencyInjection.Lifetime.Analyzers.sln -c Release
  • dotnet list tests/DependencyInjection.Lifetime.Analyzers.Tests/DependencyInjection.Lifetime.Analyzers.Tests.csproj package --outdated

@georgepwall1991 georgepwall1991 merged commit db787a5 into master Feb 5, 2026
1 check passed
@github-actions
Copy link
Contributor

github-actions bot commented Feb 5, 2026

Summary

Summary
Generated on: 02/05/2026 - 20:42:19
Coverage date: 02/05/2026 - 20:42:16
Parser: Cobertura
Assemblies: 1
Classes: 29
Files: 29
Line coverage: 87.8% (1947 of 2217)
Covered lines: 1947
Uncovered lines: 270
Coverable lines: 2217
Total lines: 5495
Branch coverage: 75.9% (1100 of 1448)
Covered branches: 1100
Total branches: 1448
Method coverage: Feature is only available for sponsors
Tag: 34_21727723912

Coverage

DependencyInjection.Lifetime.Analyzers - 87.8%
Name Line Branch
DependencyInjection.Lifetime.Analyzers 87.8% 75.9%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI001_ScopeMustBeDisposedC
odeFixProvider
86.3% 70%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI002_ScopeEscapeCodeFixPr
ovider
69.3% 33.3%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI003_CaptiveDependencyCod
eFixProvider
82.6% 55.5%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI005_AsyncScopeRequiredCo
deFixProvider
83.3% 60%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI006_StaticProviderCacheC
odeFixProvider
81.4% 72.7%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI008_DisposableTransientC
odeFixProvider
82.1% 50%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI009_OpenGenericLifetimeM
ismatchCodeFixProvider
76.1% 50%
DependencyInjection.Lifetime.Analyzers.CodeFixes.DI014_RootProviderNotDispo
sedCodeFixProvider
80.3% 61.5%
DependencyInjection.Lifetime.Analyzers.DiagnosticDescriptors 100%
DependencyInjection.Lifetime.Analyzers.Infrastructure.ConstructorSelection 94.1% 78.5%
DependencyInjection.Lifetime.Analyzers.Infrastructure.OrderedRegistration 96.1%
DependencyInjection.Lifetime.Analyzers.Infrastructure.RegistrationCollector 83% 72.1%
DependencyInjection.Lifetime.Analyzers.Infrastructure.ServiceRegistration 95%
DependencyInjection.Lifetime.Analyzers.Infrastructure.WellKnownTypes 100% 88.8%
DependencyInjection.Lifetime.Analyzers.Resources 89.4% 46.8%
DependencyInjection.Lifetime.Analyzers.Rules.DI001_ScopeDisposalAnalyzer 90.5% 85.7%
DependencyInjection.Lifetime.Analyzers.Rules.DI002_ScopeEscapeAnalyzer 90% 84.5%
DependencyInjection.Lifetime.Analyzers.Rules.DI003_CaptiveDependencyAnalyze
r
92.2% 82.5%
DependencyInjection.Lifetime.Analyzers.Rules.DI004_UseAfterDisposeAnalyzer 88.8% 88.7%
DependencyInjection.Lifetime.Analyzers.Rules.DI005_AsyncDisposalAnalyzer 75% 62.9%
DependencyInjection.Lifetime.Analyzers.Rules.DI006_StaticProviderCacheAnaly
zer
95.7% 80%
DependencyInjection.Lifetime.Analyzers.Rules.DI007_ServiceLocatorAntiPatter
nAnalyzer
91.9% 78.1%
DependencyInjection.Lifetime.Analyzers.Rules.DI008_DisposableTransientAnaly
zer
90.2% 81.6%
DependencyInjection.Lifetime.Analyzers.Rules.DI009_OpenGenericLifetimeMisma
tchAnalyzer
86.6% 72.5%
DependencyInjection.Lifetime.Analyzers.Rules.DI010_ConstructorOverInjection
Analyzer
91.9% 88%
DependencyInjection.Lifetime.Analyzers.Rules.DI011_ServiceProviderInjection
Analyzer
94.9% 90%
DependencyInjection.Lifetime.Analyzers.Rules.DI012_ConditionalRegistrationM
isuseAnalyzer
95% 70.8%
DependencyInjection.Lifetime.Analyzers.Rules.DI013_ImplementationTypeMismat
chAnalyzer
100% 87.5%
DependencyInjection.Lifetime.Analyzers.Rules.DI014_RootProviderNotDisposedA
nalyzer
90.1% 86.9%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant