public static Document?AppendDocumentToProject(Project project, TagDocumentGroup documentGroup) { SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(documentGroup.Text); if (syntaxTree.TryGetRoot(out SyntaxNode node)) { return(project.AddDocument(documentGroup.Name, node, documentGroup.Folder.Split(@"\"))); } return(null); }
private async Task <(TaskReturnKind, TagDocumentGroup)> ReplaceTextTags(TagDocumentGroup documentGroup) { Console.WriteLine(Environment.NewLine); Console.WriteLine($"Replace text tags: {documentGroup.Text}"); Console.WriteLine(Environment.NewLine); foreach (var tag in documentGroup.TextTags) { string?replacedText = await TaskExecutable.RunTask(this.ReplaceTagTask, tag.Tag, documentGroup.Text); documentGroup = new TagDocumentGroup(documentGroup.Folder, documentGroup.Name, replacedText, documentGroup.FolderTags, documentGroup.NameTags, documentGroup.TextTags); } return(TaskReturnKind.Exit, documentGroup); }
private async Task <(TaskReturnKind, CreateProjectGroup?)> SelectProjectTask(Solution solution) { Console.WriteLine(Environment.NewLine); Console.WriteLine("Select project:"); Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution); if (project == null) { return(TaskReturnKind.Continue, null); } await foreach (TagProjectGroup? projectGroup in TaskExecutable.RunTaskAsyncEnumerable(this.SelectTemplateFileTask, project)) { if (projectGroup == null) { continue; } Console.WriteLine(Environment.NewLine); TagOption?tagOption = await TaskExecutable.RunTask(this.SelectTagOption); if (!tagOption.HasValue) { return(TaskReturnKind.Exit, null); } IEnumerable <DocumentGroup> createDocuments = await this.GetDocumentsToCreate(tagOption.Value, projectGroup.Tags); List <Document> documents = new List <Document>(); foreach (DocumentGroup createDocument in createDocuments) { foreach (TagDocumentGroup documentGroup in projectGroup.Documents) { TagDocumentGroup newDocumentGroup = CommonTaskFunctions.ReplaceDocumentTags(documentGroup, createDocument.ReplacedTags); Document? newDocument = CommonTaskFunctions.AppendDocumentToProject(project, newDocumentGroup); if (newDocument != null) { project = newDocument.Project; documents.Add(newDocument); } } } return(TaskReturnKind.Continue, new CreateProjectGroup(project, documents)); } return(TaskReturnKind.Exit, null); }
private Task <(TaskReturnKind, TagDocumentGroup)> TagEmptyFolder(TagDocumentGroup documentGroup) { Console.WriteLine(Environment.NewLine); Console.WriteLine(Environment.NewLine); Console.WriteLine("Create folder."); Console.WriteLine(Environment.NewLine); Console.WriteLine("1: Create tagg."); Console.WriteLine("2: Create name."); Console.WriteLine("Any: Exit."); string selectedOption = Console.ReadLine(); switch (selectedOption) { case "1": { Console.WriteLine(Environment.NewLine); Console.WriteLine("Input tagg."); string tag = Console.ReadLine(); if (string.IsNullOrWhiteSpace(tag)) { return(Task.FromResult((TaskReturnKind.Continue, documentGroup))); } string newFolder = $"{(string.IsNullOrWhiteSpace(documentGroup.Folder) ? string.Empty : documentGroup.Folder + @"\") }${tag}$"; List <TagElement> newFolderTags = documentGroup.FolderTags; newFolderTags.Add(new TagElement(tag, newFolder)); return(Task.FromResult((TaskReturnKind.Continue, new TagDocumentGroup(newFolder, documentGroup.Name, documentGroup.Text, newFolderTags, documentGroup.NameTags, documentGroup.TextTags)))); } case "2": { Console.WriteLine(Environment.NewLine); Console.WriteLine("Input name."); string name = Console.ReadLine(); if (string.IsNullOrWhiteSpace(name)) { return(Task.FromResult((TaskReturnKind.Continue, documentGroup))); } string newFolder = @$ "{documentGroup.Folder}\{name}"; return(Task.FromResult((TaskReturnKind.Continue, new TagDocumentGroup(newFolder, documentGroup.Name, documentGroup.Text, documentGroup.FolderTags, documentGroup.NameTags, documentGroup.TextTags)))); }
private async Task <(TaskReturnKind, TagDocumentGroup?)> GetDocumentTask(Project project) { Console.WriteLine(Environment.NewLine); Console.WriteLine(Environment.NewLine); Console.WriteLine("Select document:"); Dictionary <string, Document> documents = new Dictionary <string, Document>(); int index = 1; foreach (Document document in project.Documents) { Console.WriteLine($"{index}: {(document.Folders.Any() ? string.Join(@"\", document.Folders) + @"\" : string.Empty)}{document.Name}"); documents[index.ToString()] = document; index++; } string documentIndex = Console.ReadLine(); if (!documents.ContainsKey(documentIndex)) { Console.WriteLine("Wrong input try again!"); return(TaskReturnKind.Continue, (TagDocumentGroup?)null); } Document selecteDocument = documents[documentIndex]; SourceText text = await selecteDocument.GetTextAsync(); string folder = string.Join("/", selecteDocument.Folders); TagDocumentGroup documentGroup = new TagDocumentGroup(folder, selecteDocument.Name, text.ToString()); if (!string.IsNullOrWhiteSpace(documentGroup.Folder)) { documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagFolder, documentGroup); } else { documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagEmptyFolder, documentGroup); } documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagName, documentGroup); documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(TagDocument, documentGroup); return(TaskReturnKind.Exit, documentGroup); }
private Task <(TaskReturnKind, TagDocumentGroup)> TagDocument(TagDocumentGroup documentGroup) { Console.WriteLine(Environment.NewLine); Console.WriteLine(Environment.NewLine); Console.WriteLine(documentGroup.Text); Console.WriteLine(Environment.NewLine); Console.WriteLine("Tagg text y/n?"); string response = Console.ReadLine(); if (response == "n") { return(Task.FromResult((TaskReturnKind.Exit, documentGroup))); } Console.WriteLine(Environment.NewLine); Console.WriteLine("Text to be tagged."); var textPice = Console.ReadLine(); Console.WriteLine(Environment.NewLine); Console.WriteLine("Input tag name."); Console.WriteLine(Environment.NewLine); var tag = Console.ReadLine(); string text = documentGroup.Text.ToString().Replace(textPice, $"${tag}$"); var tags = documentGroup.TextTags ?? new List <TagElement>(); tags.Add(new TagElement(tag, text)); var newDocumentGroup = new TagDocumentGroup(documentGroup.Folder, documentGroup.Name, text, documentGroup.FolderTags, documentGroup.NameTags, tags); Console.WriteLine(Environment.NewLine); Console.WriteLine("Continue tagging y/n?"); Console.WriteLine(Environment.NewLine); response = Console.ReadLine(); if (response.ToLower() == "y") { return(Task.FromResult((TaskReturnKind.Continue, newDocumentGroup))); } return(Task.FromResult((TaskReturnKind.Exit, newDocumentGroup))); }
public async Task RunTask() { Console.WriteLine(Environment.NewLine); Console.WriteLine(this.Name); Console.WriteLine(Environment.NewLine); TagTemplateGroup?template = await TaskExecutable.RunTask(this.LoadTemplate); if (template == null) { return; } Console.WriteLine("Input solution path."); Console.WriteLine(Environment.NewLine); string solutionPath = Console.ReadLine(); if (!File.Exists(solutionPath)) { Console.WriteLine("File does not exists!"); return; } using MSBuildWorkspace workspace = await new MSBuildWorkspaceFactory().GetWorkspace(); Solution solution = await workspace.OpenSolutionAsync(solutionPath); Console.WriteLine(Environment.NewLine); Console.WriteLine("Select project:"); Project?project = await TaskExecutable.RunTask(CommonTaskFunctions.GetProjectTask, solution); if (project == null) { return; } var selectedDocuments = new List <Document>(); await foreach (Document? document in TaskExecutable.RunTaskAsyncEnumerable(CommonTaskFunctions.SelectDocuments, project.Documents.Where(whereDocument => !selectedDocuments.Contains(whereDocument)))) { if (document != null) { selectedDocuments.Add(document); } } TagProjectGroup projectGroup = await CommonTaskFunctions.ImplementsTags(selectedDocuments, template.TagElements); List <Document> documents = new List <Document>(); foreach (DocumentGroup createDocument in template.Documents) { foreach (TagDocumentGroup documentGroup in projectGroup.Documents) { TagDocumentGroup newDocumentGroup = CommonTaskFunctions.ReplaceDocumentTags(documentGroup, createDocument.ReplacedTags); Document? newDocument = CommonTaskFunctions.AppendDocumentToProject(project, newDocumentGroup); if (newDocument != null) { project = newDocument.Project; documents.Add(newDocument); } } } workspace.TryApplyChanges(project.Solution); workspace.CloseSolution(); }
private async Task <(TaskReturnKind, TagDocumentGroup)> ReplaceDocumentTagsTask(TagDocumentGroup documentGroup) { Console.WriteLine(Environment.NewLine); Console.WriteLine($"Implement tags for file {documentGroup.Name}"); Console.WriteLine(Environment.NewLine); if (documentGroup.FolderTags.Any()) { documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(this.ReplaceFolderTags, documentGroup); } if (documentGroup.NameTags.Any()) { documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(this.ReplaceNameTags, documentGroup); } if (documentGroup.TextTags.Any()) { documentGroup = await TaskExecutable.RunTask <TagDocumentGroup>(this.ReplaceTextTags, documentGroup); } return(TaskReturnKind.Exit, documentGroup); }