This commit is contained in:
Matt Parker
2025-09-23 20:22:47 +10:00
parent 82b94ff933
commit dd06686f16
6 changed files with 24 additions and 35 deletions

View File

@@ -3,7 +3,7 @@ using System.Composition.Hosting;
using System.Reflection; using System.Reflection;
using Microsoft.CodeAnalysis.CodeFixes; using Microsoft.CodeAnalysis.CodeFixes;
namespace SharpIDE.Application.Features.Analysis; namespace SharpIDE.Application.Features.Analysis.FixLoaders;
public static class CodeFixProviderLoader public static class CodeFixProviderLoader
{ {

View File

@@ -2,7 +2,7 @@
using System.Reflection; using System.Reflection;
using Microsoft.CodeAnalysis.CodeRefactorings; using Microsoft.CodeAnalysis.CodeRefactorings;
namespace SharpIDE.Application.Features.Analysis; namespace SharpIDE.Application.Features.Analysis.FixLoaders;
public static class CodeRefactoringProviderLoader public static class CodeRefactoringProviderLoader
{ {

View File

@@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Language;
using Microsoft.CodeAnalysis.Text;
using Microsoft.AspNetCore.Razor.Language.Syntax; using Microsoft.AspNetCore.Razor.Language.Syntax;
using Microsoft.CodeAnalysis.Razor.SemanticTokens; using Microsoft.CodeAnalysis.Razor.SemanticTokens;
using Microsoft.CodeAnalysis.Text;
namespace SharpIDE.Application.Features.Analysis; namespace SharpIDE.Application.Features.Analysis.Razor;
// https://github.com/dotnet/razor/blob/main/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/SemanticTokens/SemanticTokensVisitor.cs // https://github.com/dotnet/razor/blob/main/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/SemanticTokens/SemanticTokensVisitor.cs
internal sealed class CustomSemanticTokensVisitor : SyntaxWalker internal sealed class CustomSemanticTokensVisitor : SyntaxWalker

View File

@@ -3,7 +3,7 @@ using System.Reflection;
using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.ExternalAccess.Razor;
using Microsoft.CodeAnalysis.Razor.SemanticTokens; using Microsoft.CodeAnalysis.Razor.SemanticTokens;
namespace SharpIDE.Application.Features.Analysis; namespace SharpIDE.Application.Features.Analysis.Razor;
public static class TokenTypeProvider public static class TokenTypeProvider
{ {

View File

@@ -15,6 +15,8 @@ using Microsoft.CodeAnalysis.Remote.Razor.ProjectSystem;
using Microsoft.CodeAnalysis.Remote.Razor.SemanticTokens; using Microsoft.CodeAnalysis.Remote.Razor.SemanticTokens;
using Microsoft.CodeAnalysis.Text; using Microsoft.CodeAnalysis.Text;
using NuGet.Packaging; using NuGet.Packaging;
using SharpIDE.Application.Features.Analysis.FixLoaders;
using SharpIDE.Application.Features.Analysis.Razor;
using SharpIDE.Application.Features.SolutionDiscovery; using SharpIDE.Application.Features.SolutionDiscovery;
using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence; using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
using SharpIDE.RazorAccess; using SharpIDE.RazorAccess;
@@ -202,29 +204,25 @@ public static class RoslynAnalysis
List<string> relevantTypes = ["razorDirective", "razorTransition", "markupTextLiteral", "markupTagDelimiter", "markupElement", "razorComponentElement", "razorComponentAttribute", "razorComment", "razorCommentTransition", "razorCommentStar", "markupOperator", "markupAttributeQuote"]; List<string> relevantTypes = ["razorDirective", "razorTransition", "markupTextLiteral", "markupTagDelimiter", "markupElement", "razorComponentElement", "razorComponentAttribute", "razorComment", "razorCommentTransition", "razorCommentStar", "markupOperator", "markupAttributeQuote"];
var ranges = new List<SemanticRange>(); var ranges = new List<SemanticRange>();
CustomSemanticTokensVisitor.AddSemanticRanges(ranges, razorCodeDocument, generatedDocSyntaxRoot!.FullSpan, _semanticTokensLegendService!, false); CustomSemanticTokensVisitor.AddSemanticRanges(ranges, razorCodeDocument, generatedDocSyntaxRoot!.FullSpan, _semanticTokensLegendService!, false);
var relevantRanges = ranges.Select(s =>
{
var kind = _semanticTokensLegendService!.TokenTypes.All[s.Kind];
return new TranslatedSemanticRange { Range = s, Kind = kind };
}).Where(s => relevantTypes.Contains(s.Kind)).ToList();
//var allTypes = ranges.Select(s => _semanticTokensLegendService!.TokenTypes.All[s.Kind]).Distinct().ToList(); //var allTypes = ranges.Select(s => _semanticTokensLegendService!.TokenTypes.All[s.Kind]).Distinct().ToList();
var semanticRangeRazorSpans = relevantRanges.Select(s => var semanticRangeRazorSpans = ranges
{ .Where(s => relevantTypes.Contains(_semanticTokensLegendService!.TokenTypes.All[s.Kind]))
var linePositionSpan = s.Range.AsLinePositionSpan(); .Select(s =>
var textSpan = razorText.GetTextSpan(linePositionSpan); {
var sourceSpan = new SourceSpan( var linePositionSpan = s.AsLinePositionSpan();
fileModel.Path, var textSpan = razorText.GetTextSpan(linePositionSpan);
textSpan.Start, var sourceSpan = new SourceSpan(
linePositionSpan.Start.Line, fileModel.Path,
linePositionSpan.Start.Character, textSpan.Start,
textSpan.Length, linePositionSpan.Start.Line,
1, linePositionSpan.Start.Character,
linePositionSpan.End.Character textSpan.Length,
); 1,
linePositionSpan.End.Character
return new SharpIdeRazorClassifiedSpan(sourceSpan.ToSharpIdeSourceSpan(), SharpIdeRazorSpanKind.Markup, null, s.Kind); );
}).ToList(); return new SharpIdeRazorClassifiedSpan(sourceSpan.ToSharpIdeSourceSpan(), SharpIdeRazorSpanKind.Markup, null, _semanticTokensLegendService!.TokenTypes.All[s.Kind]);
}).ToList();
// var debugMappedBackTranslatedSemanticRanges = relevantRanges.Select(s => // var debugMappedBackTranslatedSemanticRanges = relevantRanges.Select(s =>
// { // {

View File

@@ -1,9 +0,0 @@
using Microsoft.CodeAnalysis.Razor.SemanticTokens;
namespace SharpIDE.Application.Features.Analysis;
public class TranslatedSemanticRange
{
public required SemanticRange Range { get; set; }
public required string Kind { get; set; }
}