public void Track(TrackerInput input, object[] diagnosticMessageArgs, params Condition[] conditions) { input.Context.RegisterCompilationStartAction(c => { if (input.IsEnabled(c.Options)) { c.RegisterSyntaxNodeActionInNonGenerated( Language.GeneratedCodeRecognizer, TrackAndReportIfNecessary, TrackedSyntaxKinds); } }); void TrackAndReportIfNecessary(SyntaxNodeAnalysisContext c) { if (CreateContext(c) is { } trackingContext && conditions.All(c => c(trackingContext)) && trackingContext.PrimaryLocation != null && trackingContext.PrimaryLocation != Location.None) { c.ReportDiagnosticWhenActive( Diagnostic.Create(input.Rule, trackingContext.PrimaryLocation, trackingContext.SecondaryLocations.ToAdditionalLocations(), trackingContext.SecondaryLocations.ToProperties(), diagnosticMessageArgs)); } } }
protected abstract void Initialize(TrackerInput input);
public void Track(TrackerInput input, params Condition[] conditions) => Track(input, Array.Empty <object>(), conditions);