| File: AddFileBanner\AbstractAddFileBannerNewDocumentFormattingProvider.cs | Web Access |
| Project: src\roslyn\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.CodeCleanup; using Microsoft.CodeAnalysis.Editing; using Microsoft.CodeAnalysis.FileHeaders; using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.LanguageService; using Microsoft.CodeAnalysis.Shared.Extensions; namespace Microsoft.CodeAnalysis.AddFileBanner; internal abstract class AbstractAddFileBannerNewDocumentFormattingProvider : INewDocumentFormattingProvider { protected abstract SyntaxGenerator SyntaxGenerator { get; } protected abstract SyntaxGeneratorInternal SyntaxGeneratorInternal { get; } protected abstract AbstractFileHeaderHelper FileHeaderHelper { get; } public async Task<Document> FormatNewDocumentAsync(Document document, Document? hintDocument, CodeCleanupOptions options, CancellationToken cancellationToken) { var rootToFormat = await document.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); // Apply file header preferences var fileHeaderTemplate = options.DocumentFormattingOptions.FileHeaderTemplate; if (!string.IsNullOrEmpty(fileHeaderTemplate)) { var newLineTrivia = SyntaxGeneratorInternal.EndOfLine(options.FormattingOptions.NewLine); var rootWithFileHeader = await AbstractFileHeaderCodeFixProvider.GetTransformedSyntaxRootAsync( SyntaxGenerator.SyntaxFacts, FileHeaderHelper, newLineTrivia, document, fileHeaderTemplate, cancellationToken).ConfigureAwait(false); return document.WithSyntaxRoot(rootWithFileHeader); } else if (hintDocument is not null) { // If there is no file header preference, see if we can use the one in the hint document var bannerService = hintDocument.GetRequiredLanguageService<IFileBannerFactsService>(); var hintSyntaxRoot = await hintDocument.GetRequiredSyntaxRootAsync(cancellationToken).ConfigureAwait(false); var fileBanner = bannerService.GetFileBanner(hintSyntaxRoot); var rootWithBanner = rootToFormat.WithPrependedLeadingTrivia(fileBanner); return document.WithSyntaxRoot(rootWithBanner); } return document; } }