void AddIssueForTryCatchStatement(TryCatchStatement tryCatchStatement) { var lastCatch = tryCatchStatement.CatchClauses.LastOrNullObject(); if (lastCatch.IsNull) { return; } var removeTryCatchMessage = ctx.TranslateString("Remove 'try' statement"); var removeTryStatementAction = new CodeAction(removeTryCatchMessage, script => { var statements = tryCatchStatement.TryBlock.Statements; if (statements.Count == 1 || tryCatchStatement.Parent is BlockStatement) { foreach (var statement in statements) { script.InsertAfter(tryCatchStatement.GetPrevSibling(s => !(s is NewLineNode)), statement.Clone()); } script.Remove(tryCatchStatement); } else { var blockStatement = new BlockStatement(); foreach (var statement in statements) { blockStatement.Statements.Add(statement.Clone()); } script.Replace(tryCatchStatement, blockStatement); } // The replace and insert script functions does not format these things well on their own script.FormatText(tryCatchStatement.Parent); }, tryCatchStatement); var fixes = new [] { removeTryStatementAction }; AddIssue(new CodeIssue(tryCatchStatement.TryBlock.EndLocation, lastCatch.EndLocation, removeTryCatchMessage, fixes) { IssueMarker = IssueMarker.GrayOut }); }