Skip to content

Crash when doing override completion in front of an attribute #77193

@davidwengier

Description

@davidwengier

Will all credit for discovery to the wonderful @AdmiralSnyder

Seems to only have a visible effect in LSP, but the code is shared so might be hitting exceptions in the background otherwise.

Repro:

public class Goo
{
    override $$

    [Description("a")]
    public string Name { get; set; }
}

As soon as a character is typed at $$ the following exception occurs:

2025-02-13 09:13:19.542 [info] [Error - 9:13:19 AM] [LanguageServerExtensionManager] Microsoft.CodeAnalysis.CSharp.Completion.Providers.OverrideCompletionProvider threw an exception. System.ArgumentException: identifier
   at Microsoft.CodeAnalysis.CSharp.SyntaxFactory.IdentifierName(SyntaxToken identifier) in /_/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs:line 2231
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitIdentifierName(IdentifierNameSyntax node) in /_/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs:line 1489
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 41
   at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxReplacer.Replacer`1.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/SyntaxReplacer.cs:line 188
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitArrayType(ArrayTypeSyntax node) in /_/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs:line 1507
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 41
   at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxReplacer.Replacer`1.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/SyntaxReplacer.cs:line 188
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitIncompleteMember(IncompleteMemberSyntax node) in /_/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs:line 2086
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 41
   at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxReplacer.Replacer`1.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/SyntaxReplacer.cs:line 188
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitListElement[TNode](TNode node) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 168
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitList[TNode](SyntaxList`1 list) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 141
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitClassDeclaration(ClassDeclarationSyntax node) in /_/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs:line 1978
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 41
   at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxReplacer.Replacer`1.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/SyntaxReplacer.cs:line 188
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitListElement[TNode](TNode node) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 168
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitList[TNode](SyntaxList`1 list) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 141
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.VisitCompilationUnit(CompilationUnitSyntax node) in /_/src/Compilers/CSharp/Portable/Generated/CSharpSyntaxGenerator/CSharpSyntaxGenerator.SourceGenerator/Syntax.xml.Main.Generated.cs:line 1939
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxRewriter.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxRewriter.cs:line 41
   at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxReplacer.Replacer`1.Visit(SyntaxNode node) in /_/src/Compilers/CSharp/Portable/Syntax/SyntaxReplacer.cs:line 188
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode.ReplaceCore[TNode](IEnumerable`1 nodes, Func`3 computeReplacementNode, IEnumerable`1 tokens, Func`3 computeReplacementToken, IEnumerable`1 trivia, Func`3 computeReplacementTrivia) in /_/src/Compilers/CSharp/Portable/Syntax/CSharpSyntaxNode.cs:line 472
   at Microsoft.CodeAnalysis.SyntaxNodeExtensions.ReplaceTokens[TRoot](TRoot root, IEnumerable`1 tokens, Func`3 computeReplacementToken) in /_/src/Compilers/Core/Portable/Syntax/SyntaxNodeExtensions.cs:line 210
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractMemberInsertingCompletionProvider.RemoveDestinationNodeAsync(Document memberContainingDocument, CodeCleanupOptions cleanupOptions, CancellationToken cancellationToken) in /_/src/Features/Core/Portable/Completion/Providers/AbstractMemberInsertingCompletionProvider.cs:line 216
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractMemberInsertingCompletionProvider.DetermineNewDocumentAsync(Document document, CompletionItem completionItem, CancellationToken cancellationToken) in /_/src/Features/Core/Portable/Completion/Providers/AbstractMemberInsertingCompletionProvider.cs:line 130
   at Microsoft.CodeAnalysis.Completion.Providers.AbstractMemberInsertingCompletionProvider.GetChangeAsync(Document document, CompletionItem item, Nullable`1 commitKey, CancellationToken cancellationToken) in /_/src/Features/Core/Portable/Completion/Providers/AbstractMemberInsertingCompletionProvider.cs:line 48
   at Microsoft.CodeAnalysis.Extensions.IExtensionManagerExtensions.PerformFunctionAsync[T](IExtensionManager extensionManager, Object extension, Func`2 function, T defaultValue, CancellationToken cancellationToken)

Causes a yellow bar in VS for Razor files, or if the LSP C# editor is turned on:
Image

VS Code logs the error:
Image

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions