예제 #1
0
        private static Solution ApplyGeneratedCode(Document document, PassiveProcessTemplate template)
        {
            var code = template.TransformText();

            var fileName = $"{template.Root.DecorationName}.g.cs";
            var existing = document.Project.Documents
                           .Where(d => d.Folders.IsStructualEqual(document.Folders))
                           .FirstOrDefault(d => d.Name == fileName);

            if (existing is { })
예제 #2
0
        public static async Task <Solution> ApplyCodeFix(Document document, TextSpan diagnosticSpan, CancellationToken ct)
        {
            var root = await document.GetSyntaxRootAsync(ct).ConfigureAwait(false);

            var declaration = root.FindToken(diagnosticSpan.Start)
                              .Parent
                              .AncestorsAndSelf()
                              .OfType <TypeDeclarationSyntax>()
                              .First();

            if (!(declaration is ClassDeclarationSyntax ids))
            {
                return(document.Project.Solution);
            }

            var syntax = await PassiveDeclarationSyntax.FromParseAsync(ids, document, ct);

            var semantics = SemanticsRoot.FromSyntax(syntax);
            var template  = new PassiveProcessTemplate(semantics);

            return(ApplyGeneratedCode(document, template));
        }