public override Task RegisterCodeFixesAsync(MSBuildFixContext context) { foreach (var diag in context.Diagnostics) { var prop = context.XDocument.FindAtOffset(diag.Span.Start) as XElement; if (prop == null || prop.ClosingTag == null || prop.IsSelfClosing) { //FIXME log error? continue; } string newName = diag.Descriptor.Id switch { TargetFrameworksOrTargetFrameworkAnalyzer.UseTargetFrameworksForMultipleFrameworksDiagnosticId => "TargetFrameworks", TargetFrameworksOrTargetFrameworkAnalyzer.UseTargetFrameworkForSingleFrameworkDiagnosticId => "TargetFramework", RuntimeIdentifierOrRuntimeIdentifiersAnalyzer.UseRuntimeIdentifiersForMultipleRIDsDiagnosticId => "RuntimeIdentifiers", RuntimeIdentifierOrRuntimeIdentifiersAnalyzer.UseRuntimeIdentifierForSingleRIDDiagnosticId => "RuntimeIdentifier", _ => throw new InvalidOperationException() }; context.RegisterCodeFix(new ChangePropertyNameAction(prop, newName), diag); } return(Task.CompletedTask); }
public override Task RegisterCodeFixesAsync(MSBuildFixContext context) { foreach (var diag in context.Diagnostics) { if (context.XDocument.FindAtOffset(diag.Span.Start) is XElement el) { context.RegisterCodeFix(new RemoveMSBuildAllProjectsAssignmentAction(el), diag); } } return(Task.CompletedTask); }
public async override Task RegisterCodeFixesAsync(MSBuildFixContext context) { var spellChecker = SpellCheckerProvider.GetSpellChecker(context.Buffer); foreach (var diag in context.Diagnostics) { var name = (string)diag.Properties["Name"]; var spans = (TextSpan[])diag.Properties["Spans"]; switch (diag.Descriptor.Id) { case CoreDiagnostics.UnreadItemId: case CoreDiagnostics.UnwrittenItemId: foreach (var item in await spellChecker.FindSimilarItems(context.Document, name)) { context.RegisterCodeFix(new FixNameAction(spans, name, item.Name), diag); } break; case CoreDiagnostics.UnreadPropertyId: case CoreDiagnostics.UnwrittenPropertyId: foreach (var prop in await spellChecker.FindSimilarProperties(context.Document, name)) { // don't fix writes with reserved properties if (prop.Reserved && diag.Descriptor.Id == CoreDiagnostics.UnreadMetadataId) { continue; } context.RegisterCodeFix(new FixNameAction(spans, name, prop.Name), diag); } break; case CoreDiagnostics.UnreadMetadataId: case CoreDiagnostics.UnwrittenMetadataId: var itemName = (string)diag.Properties["ItemName"]; foreach (var metadata in await spellChecker.FindSimilarMetadata(context.Document, itemName, name)) { // don't fix writes with reserved metadata if (metadata.Reserved && diag.Descriptor.Id == CoreDiagnostics.UnreadMetadataId) { continue; } context.RegisterCodeFix(new FixNameAction(spans, name, metadata.Name), diag); } break; } } }
public override Task RegisterCodeFixesAsync(MSBuildFixContext context) { foreach (var diag in context.Diagnostics) { if (!(diag.Properties.TryGetValue("Info", out var val) && val is VariableInfo info)) { continue; } switch (context.XDocument.FindAtOffset(diag.Span.Start)) { case XElement el: context.RegisterCodeFix(new RemoveRedundantElementAction(el, DescriptionFormatter.GetKindNoun(info)), diag); break; case XAttribute att: context.RegisterCodeFix(new RemoveRedundantAttributeAction(att, DescriptionFormatter.GetKindNoun(info)), diag); break; } } return(Task.CompletedTask); }