Example #1
0
 public SourceDocument(
     string name,
     string sourceText,
     SourceDocumentKind kind,
     string?hash = null,
     string?path = null)
 {
     Name       = name;
     SourceText = sourceText;
     Kind       = kind;
     Hash       = hash;
     Path       = path;
 }
Example #2
0
        private static void GenerateSingleCSharpDocument(
            IEnumerable <GeneratorResult> results,
            SourceDocumentKind kind,
            string fileName,
            ICollection <SourceDocument> documents)
        {
            var code = new StringBuilder();

            // marker for style cop to ignore this code
            code.AppendLine("// <auto-generated/>");

            // enable nullability settings
            code.AppendLine("#nullable enable");

            CompilationUnitSyntax compilationUnit = CompilationUnit();

            foreach (var group in results.GroupBy(t => t.Result.Namespace).OrderBy(t => t.Key))
            {
                NamespaceDeclarationSyntax namespaceDeclaration =
                    NamespaceDeclaration(IdentifierName(group.Key));

                foreach (var item in group)
                {
                    BaseTypeDeclarationSyntax typeDeclaration = item.Result.TypeDeclaration;
#if DEBUG
                    SyntaxTriviaList trivia = typeDeclaration
                                              .GetLeadingTrivia()
                                              .Insert(0, Comment("// " + item.Generator.FullName));

                    typeDeclaration = typeDeclaration.WithLeadingTrivia(trivia);
#endif
                    namespaceDeclaration = namespaceDeclaration.AddMembers(typeDeclaration);
                }

                compilationUnit = compilationUnit.AddMembers(namespaceDeclaration);
            }

            compilationUnit = compilationUnit.NormalizeWhitespace(elasticTrivia: true);

            code.AppendLine();
            code.AppendLine(compilationUnit.ToFullString());

            documents.Add(new(
                              fileName,
                              code.ToString(),
                              kind));
        }