Ejemplo n.º 1
0
        private async Task <NTypewriter.CodeModel.Roslyn.CodeModel> CreateCodeModel(Project project, IEnumerable <string> namespacesToBeSearched, bool searchInReferencedProjectsAndAssemblies)
        {
            var codeModelConfig = new CodeModelConfiguration();

            codeModelConfig.OmitSymbolsFromReferencedAssemblies = !searchInReferencedProjectsAndAssemblies;
            if (namespacesToBeSearched != null && namespacesToBeSearched.Any())
            {
                codeModelConfig.FilterByNamespace(namespacesToBeSearched.ToArray());
            }

            var compilation = await project.GetCompilationAsync().ConfigureAwait(true);

            var diagnostics = compilation.GetDiagnostics();

            foreach (var diagnostic in diagnostics)
            {
                if (diagnostic.Severity != DiagnosticSeverity.Hidden)
                {
                    // that is so nice place for breakpoint in moment of need
                }
            }

            var codeModel = new NTypewriter.CodeModel.Roslyn.CodeModel(compilation, codeModelConfig);

            return(codeModel);
        }
Ejemplo n.º 2
0
        public async Task Initialize()
        {
            var config = new CodeModelConfiguration().FilterByNamespace("Tests.Assets.WebApi");

            data = await CreateCodeModelFromProject(config, "Tests.Assets.WebApi");

            settings = new Configuration();
        }
Ejemplo n.º 3
0
        public async Task UserCanAddCustomFunctions()
        {
            var template        = "{{- capture output; Custom.MyFunction;  end; Save output \"result\" }}";
            var expectedResult  = "Hello World!";
            var codeModelConfig = new CodeModelConfiguration();
            var dataProvider    = await CreateCodeModelFromProject(codeModelConfig, "Tests.Assets.WebApi");

            var settings = new Configuration().AddCustomFunctions(typeof(MyCustomFunctionsAreHere));
            var result   = await NTypeWriter.Render(template, dataProvider, settings);

            var finalResult = result.Items.First().Content;

            Assert.AreEqual(expectedResult, finalResult);
        }
Ejemplo n.º 4
0
        static async Task Main(string[] args)
        {
            // 1) Load project
            AnalyzerManager  manager   = new AnalyzerManager();
            IProjectAnalyzer analyzer  = manager.GetProject(@"..\..\..\..\NTypewriter\NTypewriter.csproj");
            AdhocWorkspace   workspace = analyzer.GetWorkspace(false);
            var project = workspace.CurrentSolution.Projects.Where(x => x.Name == "NTypewriter").First();

            // 2) Add xml documentation
            project = AddXmlDocumentation(project, typeof(ICodeModel));
            project = AddXmlDocumentation(project, typeof(ActionFunctions));
            project = AddXmlDocumentation(project, typeof(Scriban.Functions.StringFunctions));

            // 3) Compile
            var compilation = await project.GetCompilationAsync();

            // 4) Create CodeModel
            var codeModelConfiguration = new CodeModelConfiguration()
            {
                OmitSymbolsFromReferencedAssemblies = false
            };
            var codeModel = new CodeModel(compilation, codeModelConfiguration);

            // 5) Load template
            string template = File.ReadAllText(@"..\..\..\CodeModel.nt");

            // 6) Add custom functions
            var ntypewriterConfig = new Configuration();

            ntypewriterConfig.AddCustomFunctions(typeof(NTEConfig));

            // 7) Render
            var result = await NTypeWriter.Render(template, codeModel, ntypewriterConfig);

            if (!result.HasErrors)
            {
                var renderedItem = result.Items.First();
                var path         = Path.Combine(@"..\..\..\", renderedItem.Name);
                File.WriteAllText(path, renderedItem.Content);
            }
            else
            {
                foreach (var msg in result.Messages)
                {
                    Console.WriteLine(msg.Message);
                }
            }
        }
Ejemplo n.º 5
0
        public async Task Initialize()
        {
            var config = new CodeModelConfiguration().FilterByNamespace("NTypewriter.CodeModel.Functions.Tests.Type");

            data = await CreateCodeModelFromProject(config, "NTypewriter.CodeModel.Functions.Tests");
        }
Ejemplo n.º 6
0
 public static async Task <global::NTypewriter.CodeModel.Roslyn.CodeModel> CreateCodeModelFromProject(CodeModelConfiguration config, string projectName)
 {
     var assembly = Assembly.GetExecutingAssembly();
     var srcPath  = Path.Combine(Path.GetDirectoryName(assembly.Location), @$ "..\..\..\..\{projectName}\{projectName}.csproj");