Example #1
0
        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);
        }
Example #2
0
 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;
                }
            }
        }
Example #4
0
        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);
        }