public AddThrowCodeAction(CodeActionEdit editFactory, IDocument document, CommonSyntaxNode node) { _editFactory = editFactory; _document = document; _node = (CatchClauseSyntax)node; Description = "please throw the exception if you can't handle it"; Icon = null; }
public IEnumerable<CodeIssue> GetIssues(IDocument document, CommonSyntaxNode node, CancellationToken cancellationToken) { editFactory = new CodeActionEdit(document); if (node.Kind == (int)SyntaxKind.CatchClause) { var CatchNode = (Roslyn.Compilers.CSharp.CatchClauseSyntax)node; if (CatchNode.Block.Statements.Count == 0 ) { var issueDescription = "Ouch! Do you really want to leave this CatchBlock empty? "; yield return new CodeIssue(CodeIssueKind.Error, node.Span, issueDescription, new AddThrowCodeAction(editFactory, document, node)); } } }
public String ExecuteAction(ICodeAction codeAction) { CodeActionEdit codeActionEdit = codeAction.GetEdit(cancellationToken); IDocument newDocument = codeActionEdit.UpdatedSolution.GetDocument(documentId); // By default, code formatting is not applied (Visual Studio does that, not the action itself). // It must be explicitly forced to format all annotated nodes. DocumentTransformation transformation = newDocument.Format(CodeAnnotations.Formatting, cancellationToken: cancellationToken); newDocument = transformation.GetUpdatedDocument(cancellationToken); CommonSyntaxNode root = newDocument.GetSyntaxRoot(); //Assert.IsFalse(root.DescendantNodesAndSelf().Any(n => n.HasDiagnostics)); String newCode = newDocument.GetText().ToString(); return(newCode); }
public CodeActionEdit GetEdit(CancellationToken cancellationToken = new CancellationToken()) { var updatedDocument = updateMethodDeclaration(document); updatedDocument = updateMethodInvocations(updatedDocument); var updatedSolution = document.Project.Solution.UpdateDocument(updatedDocument); var edit = new CodeActionEdit(null, updatedSolution, ConditionCheckersUtils.GetRemoveCodeIssueComputerOperation(computer)); return edit; }