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

Added Microsoft.VisualBasic to missing namespace patch
This commit is contained in:
2025-05-12 16:34:31 -04:00
parent 227dcb1869
commit 3295afc447
3 changed files with 52 additions and 0 deletions

View File

@@ -16,5 +16,6 @@ public static class DarkTardMissingNamespacePatch
___m_compatibilityChanges["using System.Runtime.Remoting.Lifetime;"] = "";
___m_compatibilityChanges["using System.Net.Configuration;"] = "";
___m_compatibilityChanges["using System.Reflection.Metadata.Ecma335;"] = "";
___m_compatibilityChanges["using Microsoft.VisualBasic;"] = "";
}
}

View File

@@ -0,0 +1,18 @@
using HarmonyLib;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis;
using VRage.Scripting;
using CringeLauncher.SyntaxRewriters;
namespace CringeLauncher.Patches;
[HarmonyPatch(typeof(MyScriptCompiler), "InjectMod")]
internal static class ModRewriterPatch
{
public static void Prefix(ref CSharpCompilation compilation, ref SyntaxTree syntaxTree)
{
var fixedSyntaxTree = MissingUsingRewriter.Rewrite(compilation, syntaxTree);
compilation = compilation.ReplaceSyntaxTree(syntaxTree, fixedSyntaxTree);
syntaxTree = fixedSyntaxTree;
}
}

View 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;
}
}