private void AnalyzeSyntaxTree(SyntaxTreeAnalysisContext context) { var option = context.GetOption(_option); if (!_helpers.TryGetOrComputePreferredOrder(option.Value, out var preferredOrder)) { return; } var root = context.Tree.GetRoot(context.CancellationToken); Recurse(context, preferredOrder, option.Notification.Severity, root); }
private void AnalyzeSyntaxTree(SyntaxTreeAnalysisContext context) { var cancellationToken = context.CancellationToken; var syntaxTree = context.Tree; var root = syntaxTree.GetRoot(cancellationToken); var optionSet = context.Options.GetDocumentOptionSetAsync(syntaxTree, cancellationToken).GetAwaiter().GetResult(); if (optionSet == null) { return; } var option = optionSet.GetOption(_option); if (!_helpers.TryGetOrComputePreferredOrder(option.Value, out var preferredOrder)) { return; } Recurse(context, preferredOrder, option.Notification.Severity, root); }
protected override async Task FixAllAsync( Document document, ImmutableArray <Diagnostic> diagnostics, SyntaxEditor editor, CodeActionOptionsProvider fallbackOptions, CancellationToken cancellationToken) { var options = await document.GetAnalyzerOptionsProviderAsync(cancellationToken).ConfigureAwait(false); var option = GetCodeStyleOption(options); if (!_helpers.TryGetOrComputePreferredOrder(option.Value, out var preferredOrder)) { return; } foreach (var diagnostic in diagnostics) { var memberDeclaration = diagnostic.Location.FindNode(cancellationToken); editor.ReplaceNode(memberDeclaration, (currentNode, _) => { var modifiers = _syntaxFacts.GetModifiers(currentNode); var orderedModifiers = new SyntaxTokenList( modifiers.OrderBy(CompareModifiers) .Select((t, i) => t.WithTriviaFrom(modifiers[i]))); var updatedMemberDeclaration = _syntaxFacts.WithModifiers(currentNode, orderedModifiers); return(updatedMemberDeclaration); }); } return; // Local functions int CompareModifiers(SyntaxToken t1, SyntaxToken t2) => GetOrder(t1) - GetOrder(t2); int GetOrder(SyntaxToken token) => preferredOrder.TryGetValue(token.RawKind, out var value) ? value : int.MaxValue; }