public override bool TryFix (ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset) { foreach (var invocationExpression in syntaxTree.FindToken (location).Parent.AncestorsAndSelf ().OfType<InvocationExpressionSyntax> ()) { if (invocationExpression != null) { if (!invocationExpression.ArgumentList.OpenParenToken.IsMissing && invocationExpression.ArgumentList.CloseParenToken.IsMissing) { var insertionOffset = invocationExpression.Span.End - 1; newOffset = insertionOffset; var text = ")"; newOffset++; var expressionStatement = invocationExpression.Parent as ExpressionStatementSyntax; if (expressionStatement != null) { if (expressionStatement.SemicolonToken.IsMissing) text = ");"; newOffset++; } document.Editor.InsertText (insertionOffset, text); return true; } } } return false; }
public override bool TryFix(ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset) { foreach (var breakStatementSyntax in syntaxTree.FindToken(location).Parent.AncestorsAndSelf().OfType <BreakStatementSyntax> ()) { if (breakStatementSyntax.SemicolonToken.IsMissing) { var insertionOffset = breakStatementSyntax.Span.End - 1; newOffset = insertionOffset; newOffset++; document.Editor.InsertText(insertionOffset, ";"); return(true); } } foreach (var breakStatementSyntax in syntaxTree.FindToken(location).Parent.AncestorsAndSelf().OfType <ContinueStatementSyntax> ()) { if (breakStatementSyntax.SemicolonToken.IsMissing) { var insertionOffset = breakStatementSyntax.Span.End - 1; newOffset = insertionOffset; newOffset++; document.Editor.InsertText(insertionOffset, ";"); return(true); } } return(false); }
public override bool TryFix(ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset) { foreach (var invocationExpression in syntaxTree.FindToken(location).Parent.AncestorsAndSelf().OfType <InvocationExpressionSyntax> ()) { if (invocationExpression != null) { if (!invocationExpression.ArgumentList.OpenParenToken.IsMissing && invocationExpression.ArgumentList.CloseParenToken.IsMissing) { var insertionOffset = invocationExpression.Span.End - 1; newOffset = insertionOffset; var text = ")"; newOffset++; var expressionStatement = invocationExpression.Parent as ExpressionStatementSyntax; if (expressionStatement != null) { if (expressionStatement.SemicolonToken.IsMissing) { text = ");"; } newOffset++; } document.Editor.InsertText(insertionOffset, text); return(true); } } } return(false); }
public override void CompleteStatement(MonoDevelop.Ide.Gui.Document doc) { var fixer = new ConstructFixer(doc.GetFormattingOptions(), doc.Editor.CreateNRefactoryTextEditorOptions()); int newOffset; if (fixer.TryFix(doc.Editor.Document, doc.Editor.Caret.Offset, out newOffset)) { doc.Editor.Caret.Offset = newOffset; } }
public override bool TryFix (ConstructFixer fixer, SyntaxNode syntaxTree, Ide.Gui.Document document, int location, ref int newOffset) { foreach (var breakStatementSyntax in syntaxTree.FindToken (location).Parent.AncestorsAndSelf ().OfType<BreakStatementSyntax> ()) { if (breakStatementSyntax.SemicolonToken.IsMissing) { var insertionOffset = breakStatementSyntax.Span.End - 1; newOffset = insertionOffset; newOffset++; document.Editor.InsertText (insertionOffset, ";"); return true; } } foreach (var breakStatementSyntax in syntaxTree.FindToken (location).Parent.AncestorsAndSelf ().OfType<ContinueStatementSyntax> ()) { if (breakStatementSyntax.SemicolonToken.IsMissing) { var insertionOffset = breakStatementSyntax.Span.End - 1; newOffset = insertionOffset; newOffset++; document.Editor.InsertText (insertionOffset, ";"); return true; } } return false; }
public abstract bool TryFix (ConstructFixer fixer, SyntaxNode syntaxTree, MonoDevelop.Ide.Gui.Document document, int location, ref int newOffset);
public abstract bool TryFix(ConstructFixer fixer, SyntaxNode syntaxTree, MonoDevelop.Ide.Gui.Document document, int location, ref int newOffset);
//// public override string CreateFieldEncapsulation (IUnresolvedTypeDefinition implementingType, IField field, string propertyName, Accessibility modifiers, bool readOnly) //// { //// SetIndentTo (implementingType); //// StringBuilder result = new StringBuilder (); //// AppendIndent (result); //// ////// if (modifiers != MonoDevelop.Projects.Dom.Modifiers.None) { ////// switch (modifiers) { ////// } ////// result.Append (ambience.GetString (modifiers)); ////// result.Append (" "); ////// } //// var options = new CodeGenerationOptions () { //// ImplementingType = field.DeclaringTypeDefinition, //// Part = implementingType //// }; //// result.Append ("public "); //// AppendReturnType (result, options, field.ReturnType); //// result.Append (" "); //// result.Append (propertyName); //// AppendBraceStart (result, Policy.PropertyBraceStyle); //// AppendIndent (result); //// //// result.Append ("get"); //// AppendBraceStart (result, Policy.PropertyGetBraceStyle); //// AppendIndent (result); //// result.Append ("return this."); //// result.Append (CSharpAmbience.FilterName (field.Name)); //// result.Append (";"); //// AppendLine (result); //// AppendBraceEnd (result, Policy.PropertyGetBraceStyle); //// AppendLine (result); //// //// if (!readOnly) { //// AppendIndent (result); //// result.Append ("set"); //// AppendBraceStart (result, Policy.PropertyGetBraceStyle); //// AppendIndent (result); //// result.Append (CSharpAmbience.FilterName (field.Name)); //// result.Append (" = value;"); //// AppendLine (result); //// AppendBraceEnd (result, Policy.PropertyGetBraceStyle); //// AppendLine (result); //// } //// //// AppendBraceEnd (result, Policy.PropertyBraceStyle); //// return result.ToString (); //// } // // int CountBlankLines (IReadonlyTextDocument doc, int startLine) // { // int result = 0; // IDocumentLine line; // while ((line = doc.GetLine (startLine + result)) != null && doc.GetLineIndent (line).Length == line.Length) { // result++; // } // // return result; // } // // static bool InsertUsingAfter (AstNode node) // { // return node is NewLineNode && IsCommentOrUsing (node.GetNextSibling (s => !(s is NewLineNode))) || // IsCommentOrUsing (node) || (node is PreProcessorDirective); // } // // static bool IsCommentOrUsing (AstNode node) // { // return node is ICSharpCode.NRefactory.CSharp.Comment || // node is UsingDeclaration || // node is UsingAliasDeclaration; // } // // // static string OutputNode (TextEditor editor, DocumentContext context, AstNode node) // { // using (var stringWriter = new System.IO.StringWriter ()) { //// formatter.Indentation = indentLevel; // var formatter = new TextWriterTokenWriter (stringWriter); // stringWriter.NewLine = editor.EolMarker; // // var visitor = new CSharpOutputVisitor (formatter, null /* TODO: BROKEN DUE ROSLYN PORT (note: that code should be unused) */ ); // node.AcceptVisitor (visitor); // return stringWriter.ToString (); // } // } // // // public AstType CreateShortType (ICompilation compilation, CSharpUnresolvedFile parsedFile, TextLocation loc, IType fullType) // { // var csResolver = parsedFile.GetResolver (compilation, loc); // var builder = new ICSharpCode.NRefactory.CSharp.Refactoring.TypeSystemAstBuilder (csResolver); // return builder.ConvertType (fullType); // } // public override async void CompleteStatement (MonoDevelop.Ide.Gui.Document doc) { var fixer = new ConstructFixer (doc.GetFormattingOptions ()); int newOffset = await fixer.TryFix (doc, doc.Editor.CaretOffset, default(CancellationToken)); if (newOffset != -1) { doc.Editor.CaretOffset = newOffset; } }