Esempio n. 1
0
        public IEnumerable <SnippetGeneratorResult> GenerateSnippets(SnippetDirectory directory)
        {
            if (!ShouldGenerateSnippets(directory))
            {
                yield break;
            }

            yield return(new SnippetGeneratorResult(
                             GenerateSnippetsCore(directory),
                             directory.Name,
                             directory.Language,
                             isDevelopment: false,
                             tags: directory.Tags.ToArray()));

            string devPath = Path.Combine(directory.Path, KnownNames.Dev);

            if (!Directory.Exists(devPath))
            {
                yield break;
            }

            SnippetDirectory devDirectory = directory.WithPath(devPath);

            yield return(new SnippetGeneratorResult(
                             GenerateSnippetsCore(devDirectory, isDevelopment: true),
                             name: directory.Path + KnownNames.DevSuffix,
                             language: directory.Language,
                             isDevelopment: true,
                             tags: directory.Tags.ToArray()));
        }
Esempio n. 2
0
        private static string GenerateDirectoryReadme(SnippetDirectory snippetDirectory, CharacterSequence[] characterSequences, GeneralSettings settings)
        {
            using (var sw = new StringWriter())
            {
                string directoryName = snippetDirectory.DirectoryName;

                sw.WriteLine($"## {directoryName}");
                sw.WriteLine();

                characterSequences = characterSequences?
                                     .Where(f => f.Languages.Select(language => settings.DirectoryNamePrefix + language.ToString())
                                            .Contains(snippetDirectory.DirectoryName)).ToArray();

                if (characterSequences?.Length > 0)
                {
                    sw.WriteLine("### Quick Reference");
                    sw.WriteLine();

                    string filePath = $@"..\..\..\..\..\text\{directoryName}.md";

                    if (File.Exists(filePath))
                    {
                        sw.WriteLine(File.ReadAllText(filePath, Encoding.UTF8));
                        sw.WriteLine();
                    }

                    using (CharacterSequenceTableWriter tableWriter = CharacterSequenceTableWriter.Create())
                    {
                        tableWriter.WriteTable(characterSequences);
                        sw.Write(tableWriter.ToString());
                    }

                    sw.WriteLine();
                }

                if (!snippetDirectory.HasTag(KnownTags.Dev))
                {
                    sw.WriteLine($"* [full list of snippets](http://pihrt.net/Snippetica/Snippets?Language={snippetDirectory.Language})");
                    sw.WriteLine();
                }

                sw.WriteLine("### List of Selected Snippets");
                sw.WriteLine();

                using (SnippetTableWriter tableWriter = SnippetTableWriter.CreateTitleWithLinkThenShortcut(snippetDirectory.Path))
                {
                    IEnumerable <Snippet> snippets = snippetDirectory
                                                     .EnumerateSnippets()
                                                     .Where(f => !f.HasTag(KnownTags.ExcludeFromReadme));

                    tableWriter.WriteTable(snippets);
                    sw.Write(tableWriter.ToString());
                }

                return(sw.ToString());
            }
        }
Esempio n. 3
0
        private static void Main(string[] args)
        {
            var settings = new GeneralSettings()
            {
                SolutionDirectoryPath = @"..\..\..\..\.."
            };

            SnippetDirectory[] snippetDirectories = SnippetDirectory.LoadFromFile(@"..\..\SnippetDirectories.xml").ToArray();

            CharacterSequence[] characterSequences = CharacterSequence.LoadFromFile(@"..\..\CharacterSequences.xml").ToArray();

            LanguageDefinition[] languageDefinitions = LanguageDefinition.LoadFromFile(@"..\..\LanguageDefinitions.xml").ToArray();

            CharacterSequence.SerializeToXml(Path.Combine(settings.ExtensionProjectPath, "CharacterSequences.xml"), characterSequences);

            SnippetGenerator.GenerateSnippets(snippetDirectories, languageDefinitions);
            SnippetGenerator.GenerateHtmlSnippets(snippetDirectories);
            SnippetGenerator.GenerateXamlSnippets(snippetDirectories);
            SnippetGenerator.GenerateXmlSnippets(snippetDirectories);

            SnippetDirectory[] releaseDirectories = snippetDirectories
                                                    .Where(f => f.HasTag(KnownTags.Release) && !f.HasTag(KnownTags.Dev))
                                                    .ToArray();

            MarkdownGenerator.WriteSolutionReadMe(releaseDirectories, settings);

            MarkdownGenerator.WriteProjectReadMe(releaseDirectories, Path.GetFullPath(settings.ProjectPath));

            MarkdownGenerator.WriteDirectoryReadMe(
                snippetDirectories
                .Where(f => f.HasAnyTag(KnownTags.Release, KnownTags.Dev) && !f.HasAnyTag(KnownTags.AutoGenerationSource, KnownTags.AutoGenerationDestination))
                .ToArray(),
                characterSequences,
                settings);

            SnippetPackageGenerator.GenerateVisualStudioPackageFiles(
                releaseDirectories: releaseDirectories,
                characterSequences: characterSequences,
                settings: settings);

            settings.ExtensionProjectName += ".Dev";

            SnippetPackageGenerator.GenerateVisualStudioPackageFiles(
                releaseDirectories: snippetDirectories
                .Where(f => f.HasTags(KnownTags.Release, KnownTags.Dev))
                .ToArray(),
                characterSequences: null,
                settings: settings);

            SnippetChecker.CheckSnippets(snippetDirectories);

            Console.WriteLine("*** END ***");
            Console.ReadKey();
        }
        protected override SnippetGenerator CreateSnippetGenerator(SnippetDirectory directory)
        {
            switch (directory.Language)
            {
            case Language.VisualBasic:
                return(new VisualStudioCodeSnippetGenerator(this, LanguageDefinitions.VisualBasic));

            case Language.CSharp:
                return(new VisualStudioCodeSnippetGenerator(this, LanguageDefinitions.CSharp));

            case Language.Cpp:
                return(new VisualStudioCodeSnippetGenerator(this, LanguageDefinitions.Cpp));

            case Language.Xaml:
                return(new XamlSnippetGenerator());

            case Language.Html:
                return(new HtmlSnippetGenerator());

            default:
                throw new ArgumentException("", nameof(directory));
            }
        }
 protected override bool ShouldGenerateSnippets(SnippetDirectory directory)
 {
     return(base.ShouldGenerateSnippets(directory) &&
            !directory.HasTag(KnownTags.ExcludeFromVisualStudioCode));
 }
Esempio n. 6
0
 public static void WriteDirectoryMarkdownFiles(SnippetDirectory snippetDirectory, string directoryPath, CharacterSequence[] characterSequences)
 {
     WriteDirectoryMarkdownFiles(snippetDirectory.EnumerateSnippets().ToArray(), directoryPath, characterSequences);
 }
Esempio n. 7
0
        private List <Snippet> GenerateSnippetsCore(SnippetDirectory directory, bool isDevelopment = false)
        {
            var snippets = new List <Snippet>();

            snippets.AddRange(EnumerateSnippets(directory.Path));

#if DEBUG
            foreach (Snippet snippet in snippets)
            {
                foreach (string keyword in snippet.Keywords)
                {
                    if (keyword.StartsWith(KnownTags.MetaPrefix + KnownTags.GeneratePrefix, StringComparison.OrdinalIgnoreCase))
                    {
                        Debug.Fail(keyword + "\r\n" + snippet.FilePath);
                        break;
                    }
                }
            }
#endif

            snippets.AddRange(SnippetGenerator.GenerateAlternativeShortcuts(snippets));

            if (!isDevelopment &&
                directory.HasTag(KnownTags.GenerateXmlSnippets))
            {
                switch (directory.Language)
                {
                case Language.Xml:
                case Language.Xaml:
                case Language.Html:
                case Language.Markdown:
                {
                    snippets.AddRange(XmlSnippetGenerator.GenerateSnippets(directory.Language));
                    break;
                }
                }
            }

            KeywordDefinitionCollection keywords = LanguageDefinition.GetKeywords(directory.Language);

            if (keywords != null)
            {
                foreach (KeywordDefinition keyword in keywords)
                {
                    if (keyword.IsDevelopment == isDevelopment)
                    {
                        Snippet snippet = keyword.ToSnippet();
                        snippet.Language = directory.Language;
                        snippets.Add(snippet);
                    }
                }
            }

            string autoGenerationPath = Path.Combine(directory.Path, KnownNames.AutoGeneration);

            if (Directory.Exists(autoGenerationPath))
            {
                SnippetDirectory autoGenerationDirectory = directory.WithPath(autoGenerationPath);

                SnippetGenerator generator = CreateSnippetGenerator(autoGenerationDirectory);

                snippets.AddRange(generator.GenerateSnippets(autoGenerationDirectory.Path));
            }

            return(snippets);
        }
Esempio n. 8
0
 protected abstract SnippetGenerator CreateSnippetGenerator(SnippetDirectory directory);
Esempio n. 9
0
 protected virtual bool ShouldGenerateSnippets(SnippetDirectory directory)
 {
     return(IsSupportedLanguage(directory.Language));
 }