Skip to main content
ANcpLua.Roslyn.Utilities provides utilities for building Roslyn analyzers and source generators.

Install

dotnet add package ANcpLua.Roslyn.Utilities
dotnet add package ANcpLua.Roslyn.Utilities.Testing
Layer 0 Package: This package cannot depend on ANcpLua.NET.Sdk (circular dependency). Uses Microsoft.NET.Sdk and PolySharp for polyfills.

Packages

PackageTargetDescription
ANcpLua.Roslyn.Utilitiesnetstandard2.0Core library
ANcpLua.Roslyn.Utilities.Testingnet10.0Generator testing

Features

CategoryAPIsDocs
Flow ControlDiagnosticFlow<T>, ReportAndContinue()DiagnosticFlow
Pattern MatchingSymbolPattern.*, Match.*, Invoke.*Patterns
ValidationSemanticGuard<T>, MustBeAsync()SemanticGuard
Domain ContextsAwaitableContext, AspNetContextContexts
OperationsOperationExtensions, InvocationExtensionsOperations
Code GenerationIndentedStringBuilderCodegen
PipelineGroupBy(), Batch(), Distinct()Pipeline
Symbol ExtensionsIsEqualTo(), HasAttribute()Symbols
TestingTest<TGenerator>.Run(), caching validationTesting

Quick Example

// DiagnosticFlow - never lose diagnostics
symbol.ToFlow(nullDiag)
    .Then(ValidateMethod)
    .Where(m => m.IsAsync, asyncRequired)
    .WarnIf(m => m.IsObsolete, obsoleteWarn)
    .Then(GenerateCode)
    .ReportAndContinue(context);

// Pattern matching - replace 50-line if-statements
var asyncTask = SymbolPattern.Method()
    .Async()
    .ReturnsTask()
    .WithCancellationToken()
    .Build();

if (asyncTask.Matches(method)) { ... }