Version Used: Roslyn 3.11.0 nuget packages
Steps to Reproduce:
- Create new console project
- Add references to Roslyn 3.11.0
- Add to Program.cs:
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using System;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
var tokens = SyntaxFactory.ParseTokens("\t\t/// <summary>\r\n\t\t/// Creates an immutable snapshot of this document.\r\n\t\t/// </summary>\r\n\t\tIDocument CreateDocumentSnapshot();\r\n");
var visitor = new TestWalker();
foreach (var token in tokens)
{
visitor.VisitToken(token);
}
}
}
class TestWalker : CSharpSyntaxWalker
{
public TestWalker()
: base(SyntaxWalkerDepth.StructuredTrivia)
{
}
public override void VisitToken(SyntaxToken token)
{
base.VisitToken(token);
var span = token.GetLocation().GetLineSpan();
Console.WriteLine(token.Kind() + " " + span);
}
}
}
Expected Behavior:
Prints a list of tokens and their line spans.
Actual Behavior:
token.GetLocation().GetLineSpan() crashes with a
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. (Parameter 'position')
at Microsoft.CodeAnalysis.Text.SourceText.LineInfo.IndexOf(Int32 position)
at Microsoft.CodeAnalysis.Text.SourceText.LineInfo.GetLineFromPosition(Int32 position)
at Microsoft.CodeAnalysis.Text.TextLineCollection.GetLinePosition(Int32 position)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.GetLinePosition(Int32 position)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.GetLineSpan(TextSpan span, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.SourceLocation.GetLineSpan()
at ConsoleApp3.TestWalker.VisitToken(SyntaxToken token) in Program.cs:line 35
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitXmlText(XmlTextSyntax node)
at Microsoft.CodeAnalysis.CSharp.Syntax.XmlTextSyntax.Accept(CSharpSyntaxVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.DefaultVisit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxVisitor.VisitDocumentationCommentTrivia(DocumentationCommentTriviaSyntax node)
at Microsoft.CodeAnalysis.CSharp.Syntax.DocumentationCommentTriviaSyntax.Accept(CSharpSyntaxVisitor visitor)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.Visit(SyntaxNode node)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.VisitTrivia(SyntaxTrivia trivia)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.VisitLeadingTrivia(SyntaxToken token)
at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxWalker.VisitToken(SyntaxToken token)
at ConsoleApp3.TestWalker.VisitToken(SyntaxToken token) in Program.cs:line 33
at ConsoleApp3.Program.Main(String[] args) in Program.cs:line 19
Version Used: Roslyn 3.11.0 nuget packages
Steps to Reproduce:
Expected Behavior:
Prints a list of tokens and their line spans.
Actual Behavior:
token.GetLocation().GetLineSpan()crashes with a