public async Task <Document> AddSourceToAsync(Document document, Compilation symbolCompilation, Microsoft.CodeAnalysis.ISymbol symbol, CancellationToken cancellationToken) { // Get the name of the type the symbol is in var containingOrThis = symbol.GetContainingTypeOrThis(); var fullName = GetFullReflectionName(containingOrThis); var reference = symbolCompilation.GetMetadataReference(symbol.ContainingAssembly); var assemblyLocation = (reference as PortableExecutableReference)?.FilePath; if (assemblyLocation == null) { throw new NotSupportedException("Cannot_navigate_to_the_symbol_under_the_caret"); } // Decompile document = PerformDecompilation(document, fullName, symbolCompilation, assemblyLocation); document = await AddAssemblyInfoRegionAsync(document, symbol, cancellationToken).ConfigureAwait(false); // Convert XML doc comments to regular comments, just like MAS document = await ConvertDocCommentsToRegularCommentsAsync(document, cancellationToken).ConfigureAwait(false); var node = await document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false); // Apply formatting rules var options = await FormattingWorker.GetFormattingOptionsAsync(document, _omnisharpOptions).ConfigureAwait(false); document = await OmniSharpFormatter.FormatAsync(document, new[] { node.FullSpan }, options, cancellationToken).ConfigureAwait(false); return(document); }
private static async Task <Document> FormatDocument(Document document, OmniSharpOptions omnisharpOptions, TextSpan?textSpan = null) { var spans = (textSpan != null) ? new[] { textSpan.Value } : null; var formattingOtions = await GetFormattingOptionsAsync(document, omnisharpOptions); var newDocument = await OmniSharpFormatter.FormatAsync(document, spans, formattingOtions, CancellationToken.None); if (omnisharpOptions.FormattingOptions.OrganizeImports) { var organizeImportsOptions = await GetOrganizeImportsOptionsAsync(document, omnisharpOptions); newDocument = await OmniSharpFormatter.OrganizeImportsAsync(newDocument, organizeImportsOptions, CancellationToken.None); } return(newDocument); }