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())); }
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()); } }
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)); }
public static void WriteDirectoryMarkdownFiles(SnippetDirectory snippetDirectory, string directoryPath, CharacterSequence[] characterSequences) { WriteDirectoryMarkdownFiles(snippetDirectory.EnumerateSnippets().ToArray(), directoryPath, characterSequences); }
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); }
protected abstract SnippetGenerator CreateSnippetGenerator(SnippetDirectory directory);
protected virtual bool ShouldGenerateSnippets(SnippetDirectory directory) { return(IsSupportedLanguage(directory.Language)); }