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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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))));
            }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
        }