Add syntax rewriter to handle missing usings we haven't added
All checks were successful
Build / Compute Version (push) Successful in 5s
Build / Build Nuget package (CringeBootstrap.Abstractions) (push) Successful in 49s
Build / Build Nuget package (SharedCringe) (push) Successful in 1m5s
Build / Build Nuget package (NuGet) (push) Successful in 1m6s
Build / Build Nuget package (CringePlugins) (push) Successful in 1m18s
Build / Build Launcher (push) Successful in 1m47s
All checks were successful
Build / Compute Version (push) Successful in 5s
Build / Build Nuget package (CringeBootstrap.Abstractions) (push) Successful in 49s
Build / Build Nuget package (SharedCringe) (push) Successful in 1m5s
Build / Build Nuget package (NuGet) (push) Successful in 1m6s
Build / Build Nuget package (CringePlugins) (push) Successful in 1m18s
Build / Build Launcher (push) Successful in 1m47s
Added Microsoft.VisualBasic to missing namespace patch
This commit is contained in:
33
CringeLauncher/SyntaxRewriters/MissingUsingRewriter.cs
Normal file
33
CringeLauncher/SyntaxRewriters/MissingUsingRewriter.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace CringeLauncher.SyntaxRewriters;
|
||||
internal sealed class MissingUsingRewriter : CSharpSyntaxRewriter
|
||||
{
|
||||
private readonly SemanticModel _semanticModel;
|
||||
private MissingUsingRewriter(CSharpCompilation compilation, SyntaxTree tree) => _semanticModel = compilation.GetSemanticModel(tree);
|
||||
|
||||
public static SyntaxTree Rewrite(CSharpCompilation compilation, SyntaxTree tree)
|
||||
{
|
||||
SyntaxNode syntaxNode = new MissingUsingRewriter(compilation, tree).Visit(tree.GetRoot());
|
||||
return tree.WithRootAndOptions(syntaxNode, tree.Options);
|
||||
}
|
||||
|
||||
public override SyntaxNode? VisitUsingDirective(UsingDirectiveSyntax node)
|
||||
{
|
||||
var visited = base.VisitUsingDirective(node);
|
||||
|
||||
if (visited is not UsingDirectiveSyntax usingDirective)
|
||||
return visited;
|
||||
|
||||
var symbolInfo = _semanticModel.GetSymbolInfo(node.NamespaceOrType);
|
||||
|
||||
if (symbolInfo.Symbol is INamespaceOrTypeSymbol)
|
||||
return usingDirective;
|
||||
|
||||
Debug.WriteLine($"Missing using: {usingDirective}");
|
||||
return null;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user