public void multi_end_blocks() { var writer = new SourceWriter(); writer.Block("public void Go()"); writer.Block("try"); writer.WriteLine("var x = 0;"); writer.FinishBlock(); writer.FinishBlock(); var lines = writer.Code().ReadLines().ToArray(); lines[5].Should().Be(" }"); lines[6].Should().Be("}"); }
public static string GenerateDocumentStorageCode(DocumentMapping[] mappings) { var writer = new SourceWriter(); // TODO -- get rid of the magic strings var namespaces = new List <string> { "System", "Marten", "Marten.Schema", "Marten.Linq", "Marten.Util", "Npgsql", "Remotion.Linq" }; namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace)); namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};")); writer.BlankLine(); writer.StartNamespace("Marten.GeneratedCode"); mappings.Each(x => { x.GenerateDocumentStorage(writer); writer.BlankLine(); writer.BlankLine(); }); writer.FinishBlock(); var code = writer.Code(); return(code); }
public void advanced_usages() { // SAMPLE: SourceWriterAdvanced var writer = new SourceWriter(); // Add "using [namespace]; statements writer.UsingNamespace(typeof(Console).Namespace); writer.UsingNamespace <IOperation>(); writer.Namespace("GeneratedCode"); // Write new classes and code within the namespace writer.FinishBlock(); // Helper to write using blocks in C# code writer.UsingBlock("var conn = new SqlConnection()", w => { w.Write("conn.Open();"); // other statements }); // Write a comment text into the code at the correct indention // level writer.WriteComment("Some message"); // Start the declaration of a new public class named "MyClass" // that implements the IDisposable interface writer.StartClass("MyClass", typeof(IDisposable)); // ENDSAMPLE }
public static string GenerateDocumentStorageCode(DocumentMapping[] mappings) { var writer = new SourceWriter(); // TODO -- get rid of the magic strings var namespaces = new List<string> {"System", "Marten", "Marten.Schema", "Marten.Linq", "Marten.Util", "Npgsql", "Remotion.Linq"}; namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace)); namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};")); writer.BlankLine(); writer.StartNamespace("Marten.GeneratedCode"); mappings.Each(x => { x.GenerateDocumentStorage(writer); writer.BlankLine(); writer.BlankLine(); }); writer.FinishBlock(); var code = writer.Code(); return code; }
public void tryit() { var mapping = new DocumentMapping(typeof(User)); var writer = new SourceWriter(); writer.StartNamespace("MyApplication"); mapping.GenerateDocumentStorage(writer); writer.FinishBlock(); Debug.WriteLine(writer.Code()); }
public override async Task <bool> Execute(GenerateInput input) { var settings = new CSharpGeneratorSettings { ClassStyle = CSharpClassStyle.Poco, Namespace = input.NamespaceFlag, }; var codeDirectory = input.OutputDirectory.ToFullPath(); var system = new FileSystem(); if (!system.DirectoryExists(codeDirectory)) { Console.WriteLine("Creating directory " + codeDirectory); system.CreateDirectory(codeDirectory); } var files = system.FindFiles(input.SchemaDirectory, FileSet.Shallow("*.json")); var messages = files.Select(x => new GeneratedMessage(x)).ToArray(); var writer = new SourceWriter(); writer.Namespace(input.NamespaceFlag); foreach (var message in messages) { var schema = await JsonSchema4.FromFileAsync(message.FilePath); var generator = new CSharpGenerator(schema, settings); var contents = generator.GenerateFile(message.ClassName); var codeFile = codeDirectory.AppendPath(message.ClassName + ".cs"); Console.WriteLine(codeFile); system.WriteStringToFile(codeFile, contents); message.WriteAnnotations(writer); } writer.FinishBlock(); var annotationFile = codeDirectory.AppendPath("MessageAnnotations.cs"); Console.WriteLine("Writing attribute annotations to " + annotationFile); system.WriteStringToFile(annotationFile, writer.Code()); return(true); }
public void other_methods() { // SAMPLE: other-sourcewriter-basics var writer = new SourceWriter(); // Write an empty line into the code writer.BlankLine(); // Writes a single line into the code // with the proper indention. Does NOT // respect the BLOCK: and END directives writer.WriteLine("// A comment"); // Writes a closing '}' character into the // next line and decrements the leading space // indention for the following lines of code writer.FinishBlock(); // ENDSAMPLE }
public string GenerateCode(GenerationRules generation) { beforeGeneratingCode(); var classes = chains.Select(x => x.ToClass(generation)).ToArray(); var namespaces = classes .SelectMany(x => x.Args()) .Select(x => x.ArgType.Namespace) .Concat(new string[] { typeof(Task).Namespace }) .Distinct().ToList(); var writer = new SourceWriter(); foreach (var ns in namespaces.OrderBy(x => x)) { writer.Write($"using {ns};"); } writer.BlankLine(); writer.Namespace(generation.ApplicationNamespace); foreach (var @class in classes) { writer.WriteLine($"// START: {@class.ClassName}"); @class.Write(writer); writer.WriteLine($"// END: {@class.ClassName}"); writer.WriteLine(""); writer.WriteLine(""); } writer.FinishBlock(); var code = writer.Code(); attachSourceCodeToChains(code); return(code); }
public static string GenerateDocumentStorageCode(IDocumentMapping[] mappings) { var writer = new SourceWriter(); // TODO -- get rid of the magic strings var namespaces = new List <string> { "System", "Marten", "Marten.Schema", "Marten.Services", "Marten.Linq", "Marten.Util", "Npgsql", "Remotion.Linq", typeof(NpgsqlDbType).Namespace, typeof(IEnumerable <>).Namespace, typeof(DbDataReader).Namespace, typeof(CancellationToken).Namespace, typeof(Task).Namespace }; namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace)); namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};")); writer.BlankLine(); writer.StartNamespace("Marten.GeneratedCode"); mappings.Each(x => { GenerateDocumentStorage(x, writer); writer.BlankLine(); writer.BlankLine(); }); writer.FinishBlock(); return(writer.Code()); }
public string GenerateCode(IGenerationConfig generation) { beforeGeneratingCode(); var writer = new SourceWriter(); writer.UsingNamespace <Task>(); writer.BlankLine(); writer.Namespace(generation.ApplicationNamespace); foreach (var chain in chains) { var generationModel = chain.ToGenerationModel(generation); // TODO -- figure out how to get the source code for each handler writer.WriteLine($"// START: {chain.TypeName}"); HandlerSourceWriter.Write(generationModel, writer); writer.WriteLine($"// END: {chain.TypeName}"); writer.WriteLine(""); writer.WriteLine(""); } writer.FinishBlock(); var code = writer.Code(); attachSourceCodeToChains(code); return(code); }
public static string GenerateDocumentStorageCode(DocumentMapping[] mappings) { var writer = new SourceWriter(); // TODO -- get rid of the magic strings var namespaces = new List<string> { "System", "Marten", "Marten.Schema", "Marten.Services", "Marten.Linq", "Marten.Util", "Npgsql", "Remotion.Linq", typeof (NpgsqlDbType).Namespace, typeof (IEnumerable<>).Namespace, typeof(DbDataReader).Namespace, typeof(CancellationToken).Namespace, typeof(Task).Namespace }; namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace)); namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};")); writer.BlankLine(); writer.StartNamespace("Marten.GeneratedCode"); mappings.Each(x => { GenerateDocumentStorage(x, writer); writer.BlankLine(); writer.BlankLine(); }); writer.FinishBlock(); return writer.Code(); }