using Microsoft.Extensions.FileSystemGlobbing; using Microsoft.Extensions.FileSystemGlobbing.Abstractions; namespace MycroForge.CLI.Commands.Attributes; public class RequiresPluginAttribute : Attribute { public void RequirePluginProject(string command) { var matcher = new Matcher() .AddInclude("*.csproj") .Execute(new DirectoryInfoWrapper(new DirectoryInfo(Environment.CurrentDirectory))); if (!matcher.HasMatches) throw new($"Command '{command}' must be run in a command plugin project."); var csprojFileName = $"{Path.GetDirectoryName(Environment.CurrentDirectory)}.csproj"; bool IsCsprojFile(FilePatternMatch file) => Path.GetFileNameWithoutExtension(file.Path).Equals(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."); } }