Bug 672154

Summary: Document formatter doesn't work
Product: [Mono] MonoDevelop Reporter: Bojan Rajkovic <brajkovic>
Component: texteditorAssignee: Mike Krueger <mkrueger>
Status: RESOLVED FIXED QA Contact: MD Bugs <monodevelop-bugs>
Severity: Major    
Priority: P5 - None CC: kobi2187
Version: SVN   
Target Milestone: ---   
Hardware: x86-64   
OS: Mac OS X 10.6   
Whiteboard:
Found By: --- Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---
Attachments: Screenshot of the exception
File that causes failure
File that causes failure
The file in the screencast.
Solution file with formatter settings.
Solution file with formatter settings.

Description Bojan Rajkovic 2011-02-15 16:30:22 UTC
Created attachment 414183 [details]
Screenshot of the exception

User-Agent:       Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.102 Safari/534.13

Trying to use the Document Formatter on Git master (built about 20 minutes ago) reliably reproduces the following exception:

System.InvalidOperationException: Tried to remove non ws chars: '...' at:[DocumentLocation: Line=1, Column=1]
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.AddChange (Int32 offset, Int32 removedChars, System.String insertedText) [0x00180] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:333 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.ForceSpace (Int32 startOffset, Int32 endOffset, Boolean forceSpace) [0x00009] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:365 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.ForceSpacesAfter (MonoDevelop.CSharp.Ast.AstNode n, Boolean forceSpaces) [0x0006f] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:213 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.ForceSpacesAround (MonoDevelop.CSharp.Ast.AstNode node, Boolean forceSpaces) [0x0001f] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:195 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitBinaryOperatorExpression (MonoDevelop.CSharp.Ast.BinaryOperatorExpression binaryOperatorExpression, System.Object data) [0x000e8] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:163 
  at MonoDevelop.CSharp.Ast.BinaryOperatorExpression.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/Expressions/BinaryOperatorExpression.cs:71 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitVariableInitializer (MonoDevelop.CSharp.Ast.VariableInitializer variableInitializer, System.Object data) [0x00037] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:445 
  at MonoDevelop.CSharp.Ast.VariableInitializer.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/TypeMembers/VariableInitializer.cs:57 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitVariableDeclarationStatement (MonoDevelop.CSharp.Ast.VariableDeclarationStatement variableDeclarationStatement, System.Object data) [0x00018] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:452 
  at MonoDevelop.CSharp.Ast.VariableDeclarationStatement.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/Statements/VariableDeclarationStatement.cs:58 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitChildren (MonoDevelop.CSharp.Ast.AstNode node, System.Object data) [0x00013] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:43 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitBlockStatement (MonoDevelop.CSharp.Ast.BlockStatement blockStatement, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:205 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitBlockStatement (MonoDevelop.CSharp.Ast.BlockStatement blockStatement, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:114 
  at MonoDevelop.CSharp.Ast.BlockStatement.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/Statements/BlockStatement.cs:70 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitForStatement (MonoDevelop.CSharp.Ast.ForStatement forStatement, System.Object data) [0x000e1] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:527 
  at MonoDevelop.CSharp.Ast.ForStatement.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/Statements/ForStatement.cs:78 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitChildren (MonoDevelop.CSharp.Ast.AstNode node, System.Object data) [0x00013] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:43 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitBlockStatement (MonoDevelop.CSharp.Ast.BlockStatement blockStatement, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:205 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitBlockStatement (MonoDevelop.CSharp.Ast.BlockStatement blockStatement, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:114 
  at MonoDevelop.CSharp.Ast.BlockStatement.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/Statements/BlockStatement.cs:70 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitChildren (MonoDevelop.CSharp.Ast.AstNode node, System.Object data) [0x00013] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:43 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitMethodDeclaration (MonoDevelop.CSharp.Ast.MethodDeclaration methodDeclaration, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:170 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitMethodDeclaration (MonoDevelop.CSharp.Ast.MethodDeclaration methodDeclaration, System.Object data) [0x000a8] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:284 
  at MonoDevelop.CSharp.Ast.MethodDeclaration.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/TypeMembers/MethodDeclaration.cs:71 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitChildren (MonoDevelop.CSharp.Ast.AstNode node, System.Object data) [0x00013] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:43 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitTypeDeclaration (MonoDevelop.CSharp.Ast.TypeDeclaration typeDeclaration, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:110 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitTypeDeclaration (MonoDevelop.CSharp.Ast.TypeDeclaration typeDeclaration, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:93 
  at MonoDevelop.CSharp.Ast.TypeDeclaration.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/GeneralScope/TypeDeclaration.cs:92 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitChildren (MonoDevelop.CSharp.Ast.AstNode node, System.Object data) [0x00013] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:43 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitNamespaceDeclaration (MonoDevelop.CSharp.Ast.NamespaceDeclaration namespaceDeclaration, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:105 
  at MonoDevelop.CSharp.Ast.NamespaceDeclaration.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/GeneralScope/NamespaceDeclaration.cs:103 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitChildren (MonoDevelop.CSharp.Ast.AstNode node, System.Object data) [0x00013] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:43 
  at MonoDevelop.CSharp.Ast.DepthFirstAstVisitor`2[System.Object,System.Object].VisitCompilationUnit (MonoDevelop.CSharp.Ast.CompilationUnit unit, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/DepthFirstAstVisitor.cs:50 
  at MonoDevelop.CSharp.Formatting.AstSpacingVisitor.VisitCompilationUnit (MonoDevelop.CSharp.Ast.CompilationUnit unit, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/AstSpacingVisitor.cs:84 
  at MonoDevelop.CSharp.Ast.CompilationUnit.AcceptVisitor[Object,Object] (IAstVisitor`2 visitor, System.Object data) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Ast/CompilationUnit.cs:101 
  at MonoDevelop.CSharp.Formatting.CSharpFormatter.FormatText (MonoDevelop.Projects.Policies.PolicyContainer policyParent, IEnumerable`1 mimeTypeChain, System.String input, Int32 startOffset, Int32 endOffset) [0x000e2] in /Users/bojanrajkovic/Projects/monodevelop/main/src/addins/CSharpBinding/MonoDevelop.CSharp.Formatting/CSharpFormatter.cs:214 
  at MonoDevelop.Ide.CodeFormatting.AbstractCodeFormatter.FormatText (MonoDevelop.Projects.Policies.PolicyContainer policyParent, IEnumerable`1 mimeTypeChain, System.String input) [0x0000d] in /Users/bojanrajkovic/Projects/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeFormatting/ICodeFormatter.cs:53 
  at MonoDevelop.Ide.CodeFormatting.CodeFormatter.FormatText (MonoDevelop.Projects.Policies.PolicyContainer policyParent, System.String input) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeFormatting/CodeFormatter.cs:49 
  at MonoDevelop.Ide.CodeFormatting.FormatBufferHandler.Run (System.Object tool) [0x00052] in /Users/bojanrajkovic/Projects/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.CodeFormatting/CodeFormattingCommands.cs:64 
  at MonoDevelop.Components.Commands.CommandHandler.InternalRun (System.Object dataItem) [0x00000] in /Users/bojanrajkovic/Projects/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Commands/CommandHandler.cs:42 
  at MonoDevelop.Components.Commands.CommandManager.DefaultDispatchCommand (MonoDevelop.Components.Commands.ActionCommand cmd, MonoDevelop.Components.Commands.CommandInfo info, System.Object dataItem, System.Object target, CommandSource source) [0x00076] in /Users/bojanrajkovic/Projects/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Commands/CommandManager.cs:643 
  at MonoDevelop.Components.Commands.CommandManager.DispatchCommand (System.Object commandId, System.Object dataItem, System.Object initialTarget, CommandSource source) [0x002cb] in /Users/bojanrajkovic/Projects/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Commands/CommandManager.cs:613 

The text in the ... block is always different, of course (depending on what the current file is).

Reproducible: Always

Steps to Reproduce:
1. Open document
2. Try to format document

Actual Results:  
The above exception is raised.

Expected Results:  
The document would come out formatted.
Comment 1 Mike Krueger 2011-02-16 08:04:36 UTC
I need the file where that has happened. It's some expression in that file causing this.
Comment 2 Bojan Rajkovic 2011-02-16 16:13:32 UTC
Created attachment 414454 [details]
File that causes failure

It happens on every file in my solution, but here's one that you can use. When the formatter does work (once in a blue moon), it introduces a lot of broken whitespace.
Comment 3 Bojan Rajkovic 2011-02-16 16:54:18 UTC
Hmm, after updating master and rebuilding MonoDevelop, this bug seems to have gone away. Closing, will reopen if it happens again.
Comment 4 Bojan Rajkovic 2011-02-16 16:55:57 UTC
Created attachment 414470 [details]
File that causes failure

Gah, got it again, this time on a slightly more complex, but still valid file.
Comment 5 Bojan Rajkovic 2011-02-16 16:56:24 UTC
Reopening due to re-discovered failure.
Comment 6 Bojan Rajkovic 2011-02-16 17:49:34 UTC
Created attachment 414480 [details]
The file in the screencast.

Another file that fails, in a totally different way, and a screencast showing the failure: http://screencast.com/t/P4WTlNaopQ4
Comment 7 Mike Krueger 2011-02-17 10:08:55 UTC
*** Bug 670213 has been marked as a duplicate of this bug. ***
Comment 8 Mike Krueger 2011-02-17 10:10:39 UTC
I think I was able to find something in the binary expressions. But this isn't easy to solve.

For the other files I need your formatting settings since they format for me with the standard 'mono' settings. (the project file would help - or did you change the formatting settings in the 'policies' panel ?).
Comment 9 Mike Krueger 2011-02-17 11:23:05 UTC
*** Bug 658027 has been marked as a duplicate of this bug. ***
Comment 10 Bojan Rajkovic 2011-02-18 07:04:34 UTC
Created attachment 414887 [details]
Solution file with formatter settings.

Attaching the solution file with the formatter settings, which are just based on the Mono set but with some minor changes.
Comment 11 Bojan Rajkovic 2011-02-18 07:04:35 UTC
Created attachment 414888 [details]
Solution file with formatter settings.

Attaching the solution file with the formatter settings, which are just based on the Mono set but with some minor changes.