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) }); }
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()); }
private static string GetGlyphResourceKey(CodeActionKind kind) { switch (kind) { case CodeActionKind.IssueFix: return(@"IssueFixImage"); case CodeActionKind.Refactoring: return(@"RefactoringImage"); default: throw ExceptionBuilder.UnexpectedValue(kind); } }
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) }); }
private ImageSource GetImageSource(CodeActionKind kind) { var resourceKey = GetGlyphResourceKey(kind); return((ImageSource)TryFindResource(resourceKey)); }
private TextBufferCodeActionModel CreateCodeActionModel(CodeActionKind kind, ICodeAction a) { return(new TextBufferCodeActionModel(kind, a, _textViewHost.TextView.TextBuffer, _textBufferUndoManager)); }
public TextBufferCodeActionModel(CodeActionKind kind, ICodeAction codeAction, ITextBuffer textBuffer, ITextBufferUndoManager textBufferUndoManager) : base(kind, codeAction) { _textBuffer = textBuffer; _textBufferUndoManager = textBufferUndoManager; }
protected CodeActionModel(CodeActionKind kind, ICodeAction codeAction) { Kind = kind; _codeAction = codeAction; }
public TextDocumentCodeActionModel(CodeActionKind kind, ICodeAction codeAction, ITextDocument document) : base(kind, codeAction) { _document = document; }