dotnet / dotnet/roslyn

Brace completion exception in Code Analysis (Version: 18.3.0 Insiders [11114.75.main])

Open
#80,729 1 comment 0 reactions 0 assignees View on GitHub
Area-IDE
Dominant language
C#
Stars
20.7k
Forks
4.3k
PR merge metrics
PR metrics pending

Description

Hit an exception from Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation.IndentBlockOperation when typing something stupid.

Type [ here (after foreach on line 21):
Image

<!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-pitch:variable;
mso-font-signature:-536869121 1107305727 33554432 0 415 0;}
@font-face
{font-family:Aptos;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:536871559 3 0 0 415 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0in;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Aptos",sans-serif;
mso-fareast-font-family:Aptos;
mso-fareast-theme-font:minor-latin;
mso-bidi-font-family:Aptos;
mso-ligatures:standardcontextual;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:10.0pt;
mso-ansi-font-size:10.0pt;
mso-bidi-font-size:10.0pt;
mso-font-kerning:0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
-->

Get:

  | Name | Value | Type
-- | -- | -- | --
◢ | $exception | {"Unexpected false - file IndentBlockOperation.cs line 38"} | System.InvalidOperationException
  | ▶ Data | {System.Collections.ListDictionaryInternal} | System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
  | HResult | -2146233079 | int
  | HelpLink | null | string
  | IPForWatsonBuckets | 0x00007ffdc01e46d5 | System.UIntPtr
  | ▶ InnerException | null | System.Exception
  | IsTransient | false | bool
  | Message | "Unexpected false - file IndentBlockOperation.cs line 38" | string
  | RemoteStackTrace | null | string
  | Source | "Microsoft.CodeAnalysis.Workspaces" | string
  | StackTrace | " at Microsoft.CodeAnalysis.Contract.Fail(String message, Int32 lineNumber, String filePath) in /_/src/Dependencies/Contracts/Contract.cs:line 161" | string
  | ▶ TargetSite | {Void Fail(System.String, Int32, System.String)} | System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}
  | WatsonBuckets | null | object
  | _HResult | -2146233079 | int
  | _className | null | string
  | ▶ _data | {System.Collections.ListDictionaryInternal} | System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
  | _dynamicMethods | null | object
  | _exceptionMethod | null | System.Reflection.MethodBase
  | _exceptionMethodString | null | string
  | _helpURL | null | string
  | ▶ _innerException | null | System.Exception
  | _ipForWatsonBuckets | 0x00007ffdc01e46d5 | System.UIntPtr
  | _message | "Unexpected false - file IndentBlockOperation.cs line 38" | string
  | _remoteStackIndex | 0 | int
  | _remoteStackTraceString | null | string
  | ▶ _safeSerializationManager | {System.Runtime.Serialization.SafeSerializationManager} | System.Runtime.Serialization.SafeSerializationManager
  | _source | "Microsoft.CodeAnalysis.Workspaces" | string
  | ▶ _stackTrace | {sbyte[48]} | object {sbyte[]}
  | _stackTraceString | null | string
  | _watsonBuckets | null | object
  | _xcode | -532462766 | int
  | _xptrs | 0x0000000000000000 | System.IntPtr

 

 

> Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation.IndentBlockOperation(Microsoft.CodeAnalysis.SyntaxToken
baseToken, Microsoft.CodeAnalysis.SyntaxToken startToken,
Microsoft.CodeAnalysis.SyntaxToken endToken,
Microsoft.CodeAnalysis.Text.TextSpan textSpan, int indentationDelta,
Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOption option) Line 53 C#

Microsoft.CodeAnalysis.CSharp.Workspaces.dll!Microsoft.CodeAnalysis.CSharp.Formatting.IndentBlockFormattingRule.AddBracketIndentationOperation(System.Collections.Generic.List<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>
list, Microsoft.CodeAnalysis.SyntaxNode node)    Unknown

Microsoft.CodeAnalysis.CSharp.Workspaces.dll!Microsoft.CodeAnalysis.CSharp.Formatting.IndentBlockFormattingRule.AddIndentBlockOperations(System.Collections.Generic.List<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>
list, Microsoft.CodeAnalysis.SyntaxNode node,
Microsoft.CodeAnalysis.Formatting.Rules.NextIndentBlockOperationAction
nextOperation)               
Unknown

Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.Rules.NextIndentBlockOperationAction.Invoke()
Line
30              
C#

Microsoft.CodeAnalysis.CSharp.Workspaces.dll!Microsoft.CodeAnalysis.CSharp.Formatting.IndentUserSettingsFormattingRule.AddIndentBlockOperations(System.Collections.Generic.List<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>
list, Microsoft.CodeAnalysis.SyntaxNode node,
Microsoft.CodeAnalysis.Formatting.Rules.NextIndentBlockOperationAction
nextOperation)               
Unknown

Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.Rules.NextIndentBlockOperationAction.Invoke()
Line
30              
C#

Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.ChainedFormattingRules.AddIndentBlockOperations(System.Collections.Generic.List<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>
list, Microsoft.CodeAnalysis.SyntaxNode currentNode) Line 61 C#

Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.AbstractFormatEngine.AddOperations<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>(Microsoft.CodeAnalysis.Collections.SegmentedList<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>
operations,
System.Collections.Generic.List<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>
scratch, Microsoft.CodeAnalysis.SyntaxNode node,
System.Action<System.Collections.Generic.List<Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation>,
Microsoft.CodeAnalysis.SyntaxNode> addOperations) Line
193              
C#

Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.AbstractFormatEngine.CreateNodeOperations(System.Threading.CancellationToken
cancellationToken) Line 175 C#

Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.AbstractFormatEngine.Format(System.Threading.CancellationToken
cancellationToken) Line 118 C#

Microsoft.CodeAnalysis.CSharp.Workspaces.dll!Microsoft.CodeAnalysis.CSharp.Formatting.CSharpSyntaxFormatting.Format(Microsoft.CodeAnalysis.SyntaxNode
node, Microsoft.CodeAnalysis.Formatting.SyntaxFormattingOptions options,
System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Formatting.Rules.AbstractFormattingRule>
formattingRules, Microsoft.CodeAnalysis.SyntaxToken startToken,
Microsoft.CodeAnalysis.SyntaxToken endToken, System.Threading.CancellationToken
cancellationToken)     Unknown

Microsoft.CodeAnalysis.Workspaces.dll!Microsoft.CodeAnalysis.Formatting.AbstractSyntaxFormatting.GetFormattingResult(Microsoft.CodeAnalysis.SyntaxNode
node,
System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.Text.TextSpan>
spans, Microsoft.CodeAnalysis.Formatting.SyntaxFormattingOptions options,
System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Formatting.Rules.AbstractFormattingRule>
rules, System.Threading.CancellationToken cancellationToken) Line
62              
C#

Microsoft.CodeAnalysis.CSharp.Features.dll!Microsoft.CodeAnalysis.CSharp.BraceCompletion.AbstractCurlyBraceOrBracketCompletionService.FormatTrackingSpan(Microsoft.CodeAnalysis.ParsedDocument
document, int openingPoint, int closingPoint, System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Formatting.Rules.AbstractFormattingRule>
braceFormattingIndentationRules,
Microsoft.CodeAnalysis.Indentation.IndentationOptions options,
System.Threading.CancellationToken cancellationToken)               
Unknown

Microsoft.CodeAnalysis.CSharp.Features.dll!Microsoft.CodeAnalysis.CSharp.BraceCompletion.AbstractCurlyBraceOrBracketCompletionService.GetTextChangesAfterCompletion(Microsoft.CodeAnalysis.BraceCompletion.BraceCompletionContext
context, Microsoft.CodeAnalysis.Indentation.IndentationOptions options,
System.Threading.CancellationToken
cancellationToken)               
Unknown

Microsoft.CodeAnalysis.EditorFeatures.dll!Microsoft.CodeAnalysis.AutomaticCompletion.BraceCompletionSessionProvider.BraceCompletionSession.TryStartAsync(System.Threading.CancellationToken
cancellationToken)     Unknown

Microsoft.VisualStudio.Threading.dll!Microsoft.VisualStudio.Threading.JoinableTaskFactory.ExecuteJob<bool>(System.Func<System.Threading.Tasks.Task>
asyncMethod, Microsoft.VisualStudio.Threading.JoinableTask
job)          Unknown

Microsoft.VisualStudio.Threading.dll!Microsoft.VisualStudio.Threading.JoinableTaskFactory.RunAsync<bool>(System.Func<System.Threading.Tasks.Task<bool>>
asyncMethod, bool synchronouslyBlocking, string parentToken,
Microsoft.VisualStudio.Threading.JoinableTaskCreationOptions
creationOptions)       Unknown

Microsoft.VisualStudio.Threading.dll!Microsoft.VisualStudio.Threading.JoinableTaskFactory.Run<bool>(System.Func<System.Threading.Tasks.Task<bool>>
asyncMethod, Microsoft.VisualStudio.Threading.JoinableTaskCreationOptions
creationOptions)               
Unknown

Microsoft.CodeAnalysis.EditorFeatures.dll!Microsoft.CodeAnalysis.AutomaticCompletion.BraceCompletionSessionProvider.BraceCompletionSession.Start()               
Unknown

Microsoft.VisualStudio.Platform.VSEditor.dll!Microsoft.VisualStudio.Text.BraceCompletion.Implementation.BraceCompletionStack.PushSession.AnonymousMethod__1()
Line
78              
C#

Contributor guide

Open the contributing guide

Research direction

Reproduce the exception by typing [ after foreach on line 21 in the reported C# scenario. Start by examining Microsoft.CodeAnalysis.Workspaces.dll and Microsoft.CodeAnalysis.Formatting.Rules.IndentBlockOperation, then identify the failing formatting path. Done means the same input no longer throws an exception.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.