Exemple #1
0
        private void AddNestedType(BaseTypeDeclarationSyntax node)
        {
            var blockAdded = false;

            if (node.HasLeadingTrivia)
            {
                var leadingTrivia = node.GetLeadingTrivia();

                if (node.ShouldBeHidden(leadingTrivia))
                {
                    return;
                }

                // inline multiline comment
                AddMultiLineDocumentationComment(leadingTrivia);

                if (node.ShouldBeConvertedToJson(leadingTrivia))
                {
                    string json;
                    if (node.TryGetJsonForSyntaxNode(out json))
                    {
                        var startingLine = node.SyntaxTree.GetLineSpan(node.Span).StartLinePosition.Line;
                        Blocks.Add(new JavaScriptBlock(json, startingLine, ClassDepth, node.Identifier.Text));
                        blockAdded = true;
                    }
                }
            }

            if (!blockAdded)
            {
                Blocks.Add(new CSharpBlock(node, ClassDepth));
            }
        }
        private Task <Document> AddSummaryCommentAsync(Document document, BaseTypeDeclarationSyntax declaration, CancellationToken c)
        {
            var leadingTrivias  = declaration.GetLeadingTrivia();
            var whitespaceCount = leadingTrivias[leadingTrivias.Count - 1].Span.Length;
            var newDeclaration  = declaration.WithLeadingTrivia(
                AnalyzerUtil.GetNewLeadingTriviaWithSummary(leadingTrivias, summaryComments, whitespaceCount));

            return(AnalyzerUtil.ReplaceNode(declaration, newDeclaration, document));
        }
Exemple #3
0
            ISegment CalcTypeBounds(BaseTypeDeclarationSyntax type)
            {
                int start = type.Span.Start;
                int end   = type.Span.End;

                foreach (var trivia in type.GetLeadingTrivia())
                {
                    if (trivia.Kind() == SyntaxKind.SingleLineDocumentationCommentTrivia)
                    {
                        start = trivia.FullSpan.Start;
                    }
                }

                return(TextSegment.FromBounds(start, end));
            }
Exemple #4
0
        private static SyntaxNode AddAccessModifierIfNotPresent(BaseTypeDeclarationSyntax node)
        {
            SyntaxTokenList modifiers            = node.Modifiers;
            AccessModifier  currentAccessibility = ModifiersHelper.GetAccessibility(modifiers);

            if (currentAccessibility != AccessModifier.NotExplicit)
            {
                return(node);
            }

            AccessModifier   defaultAccessibility = ModifiersHelper.GetDefaultAccessibility(node.Kind());
            SyntaxTriviaList leadingTrivia        = node.GetLeadingTrivia();
            SyntaxTokenList  newModifiers         = FormatModifiers(modifiers, defaultAccessibility);

            return(node.WithoutLeadingTrivia().WithModifiers(newModifiers).WithLeadingTrivia(leadingTrivia));
        }
Exemple #5
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));
        }
			ISegment CalcTypeBounds (BaseTypeDeclarationSyntax type)
			{
				int start = type.Span.Start;
				int end = type.Span.End;
				foreach (var trivia in type.GetLeadingTrivia ()) {
					if (trivia.Kind () == SyntaxKind.SingleLineDocumentationCommentTrivia) {
						start = trivia.FullSpan.Start;
					}
				}

				return TextSegment.FromBounds (start, end);
			}
        private static void GenerateMultipleCSharpDocuments(
            MapperContext context,
            CSharpGeneratorSettings settings,
            ICollection <SourceDocument> documents)
        {
            var generatorSettings = new CSharpSyntaxGeneratorSettings(
                settings.NoStore,
                settings.InputRecords,
                settings.EntityRecords);

            var results = new List <(Type Generator, CSharpSyntaxGeneratorResult Result)>();

            foreach (var descriptor in context.GetAllDescriptors())
            {
                foreach (var generator in _generators)
                {
                    if (generator.CanHandle(descriptor, generatorSettings))
                    {
                        CSharpSyntaxGeneratorResult result =
                            generator.Generate(descriptor, generatorSettings);
                        results.Add((generator.GetType(), result));
                    }
                }
            }

            foreach (var group in results.GroupBy(t => t.Result.Namespace).OrderBy(t => t.Key))
            {
                foreach ((Type generator, CSharpSyntaxGeneratorResult result) in group)
                {
                    BaseTypeDeclarationSyntax typeDeclaration = result.TypeDeclaration;
#if DEBUG
                    SyntaxTriviaList trivia = typeDeclaration
                                              .GetLeadingTrivia()
                                              .Insert(0, Comment("// " + generator.FullName));

                    typeDeclaration = typeDeclaration.WithLeadingTrivia(trivia);
#endif
                    CompilationUnitSyntax compilationUnit =
                        CompilationUnit().AddMembers(
                            NamespaceDeclaration(IdentifierName(group.Key)).AddMembers(
                                typeDeclaration));

                    compilationUnit = compilationUnit.NormalizeWhitespace(elasticTrivia: true);

                    var code = new StringBuilder();

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

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

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

                    documents.Add(new(
                                      result.FileName,
                                      code.ToString(),
                                      SourceDocumentKind.CSharp,
                                      path: result.Path));
                }
            }
        }