private static void AddProjectOption( Command command, IDirectoryAccessor directoryAccessor, string projectFileExtension) { var projectOptionArgument = new Argument <FileInfo>( (SymbolResult result, out FileInfo projectFile) => { var projectPath = new RelativeFilePath(result.Tokens.Select(t => t.Value).Single()); if (directoryAccessor.FileExists(projectPath)) { projectFile = directoryAccessor.GetFullyQualifiedFilePath(projectPath); return(true); } result.ErrorMessage = $"Project not found: {projectPath.Value}"; projectFile = null; return(false); }) { Name = "project", Arity = ArgumentArity.ExactlyOne }; projectOptionArgument.SetDefaultValue(() => { var rootDirectory = directoryAccessor.GetFullyQualifiedPath(new RelativeDirectoryPath(".")); var projectFiles = directoryAccessor.GetAllFilesRecursively() .Where(file => directoryAccessor.GetFullyQualifiedPath(file.Directory).FullName == rootDirectory.FullName && file.Extension == projectFileExtension) .ToArray(); if (projectFiles.Length == 1) { return(directoryAccessor.GetFullyQualifiedPath(projectFiles.Single())); } return(null); }); var projectOption = new Option("--project") { Argument = projectOptionArgument }; command.Add(projectOption); }
private static void AddProjectOption( Command csharp, IDirectoryAccessor directoryAccessor) { var projectOptionArgument = new Argument <FileInfo>(result => { var projectPath = new RelativeFilePath(result.Tokens.Select(t => t.Value).Single()); if (directoryAccessor.FileExists(projectPath)) { return(ArgumentResult.Success(directoryAccessor.GetFullyQualifiedPath(projectPath))); } return(ArgumentResult.Failure($"Project not found: {projectPath.Value}")); }) { Name = "project", Arity = ArgumentArity.ExactlyOne }; projectOptionArgument.SetDefaultValue(() => { var rootDirectory = directoryAccessor.GetFullyQualifiedPath(new RelativeDirectoryPath(".")); var projectFiles = directoryAccessor.GetAllFilesRecursively() .Where(file => { return(directoryAccessor.GetFullyQualifiedPath(file.Directory).FullName == rootDirectory.FullName && file.Extension == ".csproj"); }) .ToArray(); if (projectFiles.Length == 1) { return(directoryAccessor.GetFullyQualifiedPath(projectFiles.Single())); } return(null); }); var projectOption = new Option("--project", argument: projectOptionArgument); csharp.Add(projectOption); }
public static bool FileExists( this IDirectoryAccessor directoryAccessor, string relativePath) => directoryAccessor.FileExists(new RelativeFilePath(relativePath));