コード例 #1
0
        private static VSCodeAction GenerateVSCodeAction(
            CodeActionParams request,
            CodeAction codeAction,
            CodeActionKind codeActionKind,
            string currentTitle = "")
        {
            using var _ = ArrayBuilder <VSCodeAction> .GetInstance(out var nestedActions);

            if (!string.IsNullOrEmpty(currentTitle))
            {
                // Adding a delimiter for nested code actions, e.g. 'Suppress or Configure issues|Suppress IDEXXXX|in Source'
                currentTitle += '|';
            }

            currentTitle += codeAction.Title;

            // Nested code actions' unique identifiers consist of: parent code action unique identifier + '|' + title of code action
            foreach (var action in codeAction.NestedCodeActions)
            {
                nestedActions.Add(GenerateVSCodeAction(request, action, codeActionKind, currentTitle));
            }

            return(new VSCodeAction
            {
                Title = codeAction.Title,
                Kind = codeActionKind,
                Diagnostics = request.Context.Diagnostics,
                Children = nestedActions.ToArray(),
                Data = new CodeActionResolveData(currentTitle, request.Range, request.TextDocument)
            });
        }
コード例 #2
0
ファイル: CodeActionHelpers.cs プロジェクト: josh-127/roslyn
            static VSInternalCodeAction[] GenerateNestedVSCodeActions(
                CodeActionParams request,
                SourceText documentText,
                IUnifiedSuggestedAction suggestedAction,
                CodeActionKind codeActionKind,
                ref int currentHighestSetNumber,
                string currentTitle)
            {
                if (suggestedAction is not UnifiedSuggestedActionWithNestedActions suggestedActionWithNestedActions)
                {
                    return(Array.Empty <VSInternalCodeAction>());
                }

                using var _ = ArrayBuilder <VSInternalCodeAction> .GetInstance(out var nestedActions);

                foreach (var nestedActionSet in suggestedActionWithNestedActions.NestedActionSets)
                {
                    // Nested code action sets should each have a unique set number that is not yet assigned to any set.
                    var nestedSetNumber = ++currentHighestSetNumber;
                    foreach (var nestedSuggestedAction in nestedActionSet.Actions)
                    {
                        nestedActions.Add(GenerateVSCodeAction(
                                              request, documentText, nestedSuggestedAction, codeActionKind, nestedActionSet.Priority,
                                              applicableRange: nestedActionSet.ApplicableToSpan.HasValue
                                ? ProtocolConversions.TextSpanToRange(nestedActionSet.ApplicableToSpan.Value, documentText) : null,
                                              nestedSetNumber, ref currentHighestSetNumber, currentTitle));
                    }
                }

                return(nestedActions.ToArray());
            }
コード例 #3
0
        private static string GetGlyphResourceKey(CodeActionKind kind)
        {
            switch (kind)
            {
            case CodeActionKind.IssueFix:
                return(@"IssueFixImage");

            case CodeActionKind.Refactoring:
                return(@"RefactoringImage");

            default:
                throw ExceptionBuilder.UnexpectedValue(kind);
            }
        }
コード例 #4
0
            static VSCodeAction GenerateVSCodeAction(
                CodeActionParams request,
                CodeAction codeAction,
                CodeActionKind codeActionKind,
                string currentTitle = "")
            {
                using var _ = ArrayBuilder <VSCodeAction> .GetInstance(out var nestedActions);

                if (!string.IsNullOrEmpty(currentTitle))
                {
                    // Adding a delimiter for nested code actions, e.g. 'Suppress IDEXXXX|in Source'
                    currentTitle += '|';
                }

                // Don't include Suppress or Configure issues in the unique identifier, as when we
                // resolve these code actions, we won't be able to see the Suppress or Configure title
                // (since it utilizes special logic).
                // Once we make the logic between local and LSP uniform, this should no longer be necessary.
                // https://github.com/dotnet/roslyn/issues/45726
                if (codeAction.Title != CodeFixesResources.Suppress_or_Configure_issues)
                {
                    currentTitle += codeAction.Title;
                }

                // Nested code actions' unique identifiers consist of: parent code action unique identifier + '|' + title of code action
                foreach (var action in codeAction.NestedCodeActions)
                {
                    nestedActions.Add(GenerateVSCodeAction(request, action, codeActionKind, currentTitle));
                }

                return(new VSCodeAction
                {
                    Title = codeAction.Title,
                    Kind = codeActionKind,
                    Diagnostics = request.Context.Diagnostics,
                    Children = nestedActions.ToArray(),
                    Data = new CodeActionResolveData(currentTitle, request.Range, request.TextDocument)
                });
            }
コード例 #5
0
        private ImageSource GetImageSource(CodeActionKind kind)
        {
            var resourceKey = GetGlyphResourceKey(kind);

            return((ImageSource)TryFindResource(resourceKey));
        }
コード例 #6
0
 private TextBufferCodeActionModel CreateCodeActionModel(CodeActionKind kind, ICodeAction a)
 {
     return(new TextBufferCodeActionModel(kind, a, _textViewHost.TextView.TextBuffer, _textBufferUndoManager));
 }
コード例 #7
0
 public TextBufferCodeActionModel(CodeActionKind kind, ICodeAction codeAction, ITextBuffer textBuffer, ITextBufferUndoManager textBufferUndoManager)
     : base(kind, codeAction)
 {
     _textBuffer            = textBuffer;
     _textBufferUndoManager = textBufferUndoManager;
 }
コード例 #8
0
 protected CodeActionModel(CodeActionKind kind, ICodeAction codeAction)
 {
     Kind        = kind;
     _codeAction = codeAction;
 }
コード例 #9
0
 public TextDocumentCodeActionModel(CodeActionKind kind, ICodeAction codeAction, ITextDocument document)
     : base(kind, codeAction)
 {
     _document = document;
 }