public IEnumerable <Snippet> GenerateSnippets(Snippet snippet)
        {
            var jobs = new JobCollection();

            if (snippet.HasTag(KnownTags.GenerateAlternativeShortcut))
            {
                jobs.AddCommand(new SimpleCommand(f => f.Shortcut = f.Shortcut.ToLowerInvariant(), CommandKind.ShortcutToLowercase));
                jobs.AddCommand(new AlternativeShortcutCommand());
            }

            //if (snippet.HasTag(KnownTags.GenerateXamlProperty))
            //    jobs.AddCommand(new XamlPropertyCommand());

            foreach (Job job in jobs)
            {
                var context = new ExecutionContext((Snippet)snippet.Clone());

                job.Execute(context);

                if (!context.IsCanceled)
                {
                    foreach (Snippet snippet2 in context.Snippets)
                    {
                        snippet2.SortCollections();
                        yield return(snippet2);
                    }
                }
            }
        }
        private IEnumerable <Snippet> GenerateSnippets(Snippet snippet)
        {
            var jobs = new JobCollection();

            jobs.AddCommands(GetTypeCommands(snippet));

            if (snippet.HasTag(KnownTags.GenerateCollection))
            {
                jobs.AddCommands(GetCollectionCommands(snippet));
            }

            if (snippet.HasTag(KnownTags.GenerateImmutableCollection))
            {
                jobs.AddCommands(GetImmutableCollectionCommands(snippet));
            }

            jobs.AddCommands(GetAccessModifierCommands(snippet));

            if (snippet.HasTag(KnownTags.GenerateStaticModifier))
            {
                jobs.AddCommand(StaticCommand);
            }

            if (snippet.HasTag(KnownTags.GenerateInitializer))
            {
                jobs.AddCommand(InitializerCommand);
            }

            if (snippet.HasTag(KnownTags.GenerateParameters))
            {
                jobs.AddCommand(ParametersCommand);
            }

            if (snippet.HasTag(KnownTags.GenerateArguments))
            {
                jobs.AddCommand(ArgumentsCommand);
            }

            if (snippet.HasTag(KnownTags.GenerateUnchanged))
            {
                jobs.Add(new Job());
            }

            foreach (Job job in jobs)
            {
                var context = new LanguageExecutionContext((Snippet)snippet.Clone(), Language);

                job.Execute(context);

                if (!context.IsCanceled)
                {
                    foreach (Snippet snippet2 in context.Snippets)
                    {
                        PostProcess(snippet2);
                        yield return(snippet2);
                    }
                }
            }
        }