using Microsoft.Extensions.FileSystemGlobbing; using Microsoft.Extensions.FileSystemGlobbing.Abstractions; namespace MycroForge.CLI.Commands.Attributes; public class RequiresPluginAttribute : Attribute { public void RequirePluginProject(string command) { var currentDirectoryInfo = new DirectoryInfo(Environment.CurrentDirectory); var matcher = new Matcher() .AddInclude("*.csproj") .Execute(new DirectoryInfoWrapper(currentDirectoryInfo)); if (!matcher.HasMatches) throw new($"Command '{command}' must be run in a command plugin project."); var csprojFileName = $"{new DirectoryInfo(Environment.CurrentDirectory).Name}.csproj"; bool IsCsprojFile(FilePatternMatch file) { return Path.GetFileName(file.Path) == csprojFileName; } var hasCsprojFile = matcher.Files.Any(IsCsprojFile); if (!hasCsprojFile) throw new($"File '{csprojFileName}' was not found, make sure you're in a command plugin project."); } }