Skip to content

Commit 4a2aa25

Browse files
authored
Merge pull request #91 from Rekkonnect/fix/89-empty-tree-details
Fix bugs
2 parents 891f0b7 + a125f57 commit 4a2aa25

13 files changed

+37
-24
lines changed

Syndiesis/Controls/LanguageVersionDropDownItems.axaml.cs

-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@
99
using System.Diagnostics;
1010
using System.Linq;
1111

12-
using CSharpVersion = Microsoft.CodeAnalysis.CSharp.LanguageVersion;
13-
using VisualBasicVersion = Microsoft.CodeAnalysis.VisualBasic.LanguageVersion;
14-
1512
namespace Syndiesis.Controls;
1613

1714
public partial class LanguageVersionDropDownItems : UserControl

Syndiesis/Core/CSharpSingleTreeCompilationSource.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ protected override CSharpParseOptions CreateDefaultParseOptions()
1515
{
1616
return CSharpParseOptions.Default
1717
.WithLanguageVersion(
18-
Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp12);
18+
Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp13);
1919
}
2020

2121
protected override void AdjustLanguageVersionCore(RoslynLanguageVersion version)

Syndiesis/Core/ConversionUnion.cs

-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
using Microsoft.CodeAnalysis;
22
using Microsoft.CodeAnalysis.Operations;
33

4-
using CSharpConversion = Microsoft.CodeAnalysis.CSharp.Conversion;
5-
using VisualBasicConversion = Microsoft.CodeAnalysis.VisualBasic.Conversion;
6-
74
namespace Syndiesis.Core;
85

96
public sealed record ConversionUnion(

Syndiesis/Core/DisplayAnalysis/BaseSyntaxAnalysisNodeCreator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public abstract AnalysisTreeListNode CreateRootNodeList<TDisplayValueSource>(
103103
;
104104

105105
public abstract AnalysisTreeListNode CreateRootTokenList<TDisplayValueSource>(
106-
SyntaxTokenList list, TDisplayValueSource? valueSource, bool includeChildren = true)
106+
IReadOnlyList<SyntaxToken> list, TDisplayValueSource? valueSource, bool includeChildren = true)
107107
where TDisplayValueSource : IDisplayValueSource
108108
;
109109

Syndiesis/Core/DisplayAnalysis/CSharpSyntaxAnalysisNodeCreator.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using System;
1010
using System.Collections.Generic;
1111
using System.Diagnostics;
12+
using System.Diagnostics.Contracts;
1213
using System.Linq;
1314

1415
namespace Syndiesis.Core.DisplayAnalysis;
@@ -20,6 +21,7 @@ namespace Syndiesis.Core.DisplayAnalysis;
2021
using ComplexGroupedRunInline = ComplexGroupedRunInline.Builder;
2122

2223
using ReadOnlySyntaxNodeList = IReadOnlyList<SyntaxNode>;
24+
using SyntaxTokenList = IReadOnlyList<SyntaxToken>;
2325

2426
public sealed partial class CSharpSyntaxAnalysisNodeCreator : BaseSyntaxAnalysisNodeCreator
2527
{
@@ -947,9 +949,7 @@ private static string EndOfLineTriviaText(SyntaxTrivia trivia)
947949

948950
private static string DisabledTextTriviaText(SyntaxTrivia trivia)
949951
{
950-
// https://github.com/dotnet/roslyn/issues/76441
951-
if (trivia.SyntaxTree is null)
952-
return "[Unknown line bounds]";
952+
Contract.Assert(trivia.SyntaxTree is not null);
953953

954954
var span = trivia.Span;
955955
var lineSpan = trivia.SyntaxTree.GetLineSpan(span).Span;

Syndiesis/Core/DisplayAnalysis/SemanticModelAnalysisNodeCreator.cs

-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
namespace Syndiesis.Core.DisplayAnalysis;
99

10-
using CSharpConversion = Microsoft.CodeAnalysis.CSharp.Conversion;
11-
using VisualBasicConversion = Microsoft.CodeAnalysis.VisualBasic.Conversion;
1210
using AnalysisTreeListNode = UIBuilder.AnalysisTreeListNode;
1311
using AnalysisTreeListNodeLine = UIBuilder.AnalysisTreeListNodeLine;
1412
using SingleRunInline = SingleRunInline.Builder;

Syndiesis/Core/DisplayAnalysis/VisualBasicSyntaxAnalysisNodeCreator.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using System.Diagnostics;
1111
using System.Linq;
1212
using Garyon.Reflection;
13+
using System.Diagnostics.Contracts;
1314

1415
namespace Syndiesis.Core.DisplayAnalysis;
1516

@@ -20,6 +21,7 @@ namespace Syndiesis.Core.DisplayAnalysis;
2021
using ComplexGroupedRunInline = ComplexGroupedRunInline.Builder;
2122

2223
using ReadOnlySyntaxNodeList = IReadOnlyList<SyntaxNode>;
24+
using SyntaxTokenList = IReadOnlyList<SyntaxToken>;
2325

2426
public sealed partial class VisualBasicSyntaxAnalysisNodeCreator : BaseSyntaxAnalysisNodeCreator
2527
{
@@ -953,9 +955,7 @@ private static string EndOfLineTriviaText(SyntaxTrivia trivia)
953955

954956
private static string DisabledTextTriviaText(SyntaxTrivia trivia)
955957
{
956-
// https://github.com/dotnet/roslyn/issues/76441
957-
if (trivia.SyntaxTree is null)
958-
return "[Unknown line bounds]";
958+
Contract.Assert(trivia.SyntaxTree is not null);
959959

960960
var span = trivia.Span;
961961
var lineSpan = trivia.SyntaxTree.GetLineSpan(span).Span;

Syndiesis/Core/HybridSingleTreeCompilationSource.cs

-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@
77
using System.Linq;
88
using System.Threading;
99

10-
using CSharpSyntaxKind = Microsoft.CodeAnalysis.CSharp.SyntaxKind;
11-
using VisualBasicSyntaxKind = Microsoft.CodeAnalysis.VisualBasic.SyntaxKind;
12-
1310
namespace Syndiesis.Core;
1411

1512
public sealed class HybridSingleTreeCompilationSource

Syndiesis/Core/NodeViewAnalysisExecution.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ private static ComplexDisplayValueSource ConstructSemanticModelValueSource(
236236
return null;
237237
return
238238
_container.SyntaxCreator.CreateRootTokenList(
239-
new SyntaxTokenList(_node?.ChildTokens() ?? []),
239+
_node?.ChildTokens().ToList() ?? [],
240240
_childTokensValueSource);
241241
}
242242

Syndiesis/Core/NodeViewAnalysisHelpers.cs

+18
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Microsoft.CodeAnalysis;
22
using Microsoft.CodeAnalysis.Text;
3+
using System.Diagnostics.Contracts;
4+
using System.Linq;
35

46
namespace Syndiesis.Core;
57

@@ -32,6 +34,11 @@ public static class NodeViewAnalysisHelpers
3234
SyntaxTree syntaxTree,
3335
TextSpan span)
3436
{
37+
if (syntaxTree.Length is 0)
38+
{
39+
return GetNodeViewAnalysisRootForEmptySyntaxTree(syntaxTree);
40+
}
41+
3542
var rootNode = syntaxTree.SyntaxNodeAtSpanIncludingStructuredTrivia(span);
3643
if (rootNode is null)
3744
return null;
@@ -40,4 +47,15 @@ public static class NodeViewAnalysisHelpers
4047
var trivia = rootNode.DeepestTriviaContainingSpan(span);
4148
return new(syntaxTree, rootNode, token, trivia);
4249
}
50+
51+
private static NodeViewAnalysisRoot? GetNodeViewAnalysisRootForEmptySyntaxTree(
52+
SyntaxTree syntaxTree)
53+
{
54+
Contract.Assert(syntaxTree.Length is 0);
55+
56+
var rootNode = syntaxTree.GetRoot();
57+
var token = rootNode.GetFirstToken();
58+
var trivia = rootNode.GetTrailingTrivia().FirstOrDefault();
59+
return new(syntaxTree, rootNode, token, trivia);
60+
}
4361
}

Syndiesis/Core/RoslynExtensions.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,8 @@ public static SyntaxNodeOrToken ChildThatContainsSpan(this SyntaxNode node, Text
275275
this SyntaxTree tree, TextSpan span)
276276
{
277277
var root = tree.GetRoot();
278-
var start = Math.Clamp(span.Start, 0, root.FullSpan.End - 1);
278+
int lastIndex = Math.Max(0, root.FullSpan.End - 1);
279+
var start = Math.Clamp(span.Start, 0, lastIndex);
279280
var end = Math.Clamp(span.End, 0, root.FullSpan.End);
280281
var clampedSpan = TextSpan.FromBounds(start, end);
281282
return root.DeepestNodeContainingSpanIncludingStructuredTrivia(clampedSpan);

Syndiesis/Core/RoslynLanguageVersion.cs

-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
using Microsoft.CodeAnalysis;
22

3-
using CSharpVersion = Microsoft.CodeAnalysis.CSharp.LanguageVersion;
4-
using VisualBasicVersion = Microsoft.CodeAnalysis.VisualBasic.LanguageVersion;
5-
63
namespace Syndiesis.Core;
74

85
public readonly record struct RoslynLanguageVersion(string LanguageName, int RawVersionValue)

Syndiesis/_GlobalUsings.cs

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
global using CSharpVersion = Microsoft.CodeAnalysis.CSharp.LanguageVersion;
2+
global using VisualBasicVersion = Microsoft.CodeAnalysis.VisualBasic.LanguageVersion;
3+
4+
global using CSharpSyntaxKind = Microsoft.CodeAnalysis.CSharp.SyntaxKind;
5+
global using VisualBasicSyntaxKind = Microsoft.CodeAnalysis.VisualBasic.SyntaxKind;
6+
7+
global using CSharpConversion = Microsoft.CodeAnalysis.CSharp.Conversion;
8+
global using VisualBasicConversion = Microsoft.CodeAnalysis.VisualBasic.Conversion;

0 commit comments

Comments
 (0)