public async Task <CodeFormatResponse> Handle(CodeFormatRequest request) { var document = _workspace.GetDocument(request.FileName); if (document == null) { return(null); } if (request.WantsTextChanges) { var textChanges = await FormattingWorker.GetFormattedTextChanges(document, _omnisharpOptions); return(new CodeFormatResponse() { Changes = textChanges }); } var newText = await FormattingWorker.GetFormattedText(document, _omnisharpOptions); return(new CodeFormatResponse { Buffer = newText }); }
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 void AssertFormatTargetKind(SyntaxKind kind, string input) { var content = TestContent.Parse(input); var tree = SyntaxFactory.ParseSyntaxTree(content.Code); var root = tree.GetRoot(); var target = FormattingWorker.FindFormatTarget(root, content.Position); Assert.Equal(kind, target.Kind()); }
private static OptionSet GetOptions(OptionSet optionSet, FormattingOptions formattingOptions) { return(optionSet .WithChangedOption(RoslynFormattingOptions.NewLine, LanguageNames.CSharp, formattingOptions.NewLine) .WithChangedOption(RoslynFormattingOptions.UseTabs, LanguageNames.CSharp, formattingOptions.UseTabs) .WithChangedOption(RoslynFormattingOptions.TabSize, LanguageNames.CSharp, formattingOptions.TabSize) .WithChangedOption(RoslynFormattingOptions.IndentationSize, LanguageNames.CSharp, formattingOptions.IndentationSize) .WithChangedOption(CSharpFormattingOptions.SpacingAfterMethodDeclarationName, formattingOptions.SpacingAfterMethodDeclarationName) .WithChangedOption(CSharpFormattingOptions.SpaceWithinMethodDeclarationParenthesis, formattingOptions.SpaceWithinMethodDeclarationParenthesis) .WithChangedOption(CSharpFormattingOptions.SpaceBetweenEmptyMethodDeclarationParentheses, formattingOptions.SpaceBetweenEmptyMethodDeclarationParentheses) .WithChangedOption(CSharpFormattingOptions.SpaceAfterMethodCallName, formattingOptions.SpaceAfterMethodCallName) .WithChangedOption(CSharpFormattingOptions.SpaceWithinMethodCallParentheses, formattingOptions.SpaceWithinMethodCallParentheses) .WithChangedOption(CSharpFormattingOptions.SpaceBetweenEmptyMethodCallParentheses, formattingOptions.SpaceBetweenEmptyMethodCallParentheses) .WithChangedOption(CSharpFormattingOptions.SpaceAfterControlFlowStatementKeyword, formattingOptions.SpaceAfterControlFlowStatementKeyword) .WithChangedOption(CSharpFormattingOptions.SpaceWithinExpressionParentheses, formattingOptions.SpaceWithinExpressionParentheses) .WithChangedOption(CSharpFormattingOptions.SpaceWithinCastParentheses, formattingOptions.SpaceWithinCastParentheses) .WithChangedOption(CSharpFormattingOptions.SpaceWithinOtherParentheses, formattingOptions.SpaceWithinOtherParentheses) .WithChangedOption(CSharpFormattingOptions.SpaceAfterCast, formattingOptions.SpaceAfterCast) .WithChangedOption(CSharpFormattingOptions.SpaceBeforeOpenSquareBracket, formattingOptions.SpaceBeforeOpenSquareBracket) .WithChangedOption(CSharpFormattingOptions.SpaceBetweenEmptySquareBrackets, formattingOptions.SpaceBetweenEmptySquareBrackets) .WithChangedOption(CSharpFormattingOptions.SpaceWithinSquareBrackets, formattingOptions.SpaceWithinSquareBrackets) .WithChangedOption(CSharpFormattingOptions.SpaceAfterColonInBaseTypeDeclaration, formattingOptions.SpaceAfterColonInBaseTypeDeclaration) .WithChangedOption(CSharpFormattingOptions.SpaceAfterComma, formattingOptions.SpaceAfterComma) .WithChangedOption(CSharpFormattingOptions.SpaceAfterDot, formattingOptions.SpaceAfterDot) .WithChangedOption(CSharpFormattingOptions.SpaceAfterSemicolonsInForStatement, formattingOptions.SpaceAfterSemicolonsInForStatement) .WithChangedOption(CSharpFormattingOptions.SpaceBeforeColonInBaseTypeDeclaration, formattingOptions.SpaceBeforeColonInBaseTypeDeclaration) .WithChangedOption(CSharpFormattingOptions.SpaceBeforeComma, formattingOptions.SpaceBeforeComma) .WithChangedOption(CSharpFormattingOptions.SpaceBeforeDot, formattingOptions.SpaceBeforeDot) .WithChangedOption(CSharpFormattingOptions.SpaceBeforeSemicolonsInForStatement, formattingOptions.SpaceBeforeSemicolonsInForStatement) .WithChangedOption(CSharpFormattingOptions.SpacingAroundBinaryOperator, FormattingWorker.BinaryOperatorSpacingOptionForStringValue(formattingOptions.SpacingAroundBinaryOperator)) .WithChangedOption(CSharpFormattingOptions.IndentBraces, formattingOptions.IndentBraces) .WithChangedOption(CSharpFormattingOptions.IndentBlock, formattingOptions.IndentBlock) .WithChangedOption(CSharpFormattingOptions.IndentSwitchSection, formattingOptions.IndentSwitchSection) .WithChangedOption(CSharpFormattingOptions.IndentSwitchCaseSection, formattingOptions.IndentSwitchCaseSection) .WithChangedOption(CSharpFormattingOptions.IndentSwitchCaseSectionWhenBlock, formattingOptions.IndentSwitchCaseSectionWhenBlock) .WithChangedOption(CSharpFormattingOptions.LabelPositioning, FormattingWorker.LabelPositionOptionForStringValue(formattingOptions.LabelPositioning)) .WithChangedOption(CSharpFormattingOptions.WrappingPreserveSingleLine, formattingOptions.WrappingPreserveSingleLine) .WithChangedOption(CSharpFormattingOptions.WrappingKeepStatementsOnSingleLine, formattingOptions.WrappingKeepStatementsOnSingleLine) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInTypes, formattingOptions.NewLinesForBracesInTypes) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInMethods, formattingOptions.NewLinesForBracesInMethods) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInProperties, formattingOptions.NewLinesForBracesInProperties) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInAccessors, formattingOptions.NewLinesForBracesInAccessors) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInAnonymousMethods, formattingOptions.NewLinesForBracesInAnonymousMethods) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInControlBlocks, formattingOptions.NewLinesForBracesInControlBlocks) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInAnonymousTypes, formattingOptions.NewLinesForBracesInAnonymousTypes) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInObjectCollectionArrayInitializers, formattingOptions.NewLinesForBracesInObjectCollectionArrayInitializers) .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInLambdaExpressionBody, formattingOptions.NewLinesForBracesInLambdaExpressionBody) .WithChangedOption(CSharpFormattingOptions.NewLineForElse, formattingOptions.NewLineForElse) .WithChangedOption(CSharpFormattingOptions.NewLineForCatch, formattingOptions.NewLineForCatch) .WithChangedOption(CSharpFormattingOptions.NewLineForFinally, formattingOptions.NewLineForFinally) .WithChangedOption(CSharpFormattingOptions.NewLineForMembersInObjectInit, formattingOptions.NewLineForMembersInObjectInit) .WithChangedOption(CSharpFormattingOptions.NewLineForMembersInAnonymousTypes, formattingOptions.NewLineForMembersInAnonymousTypes) .WithChangedOption(CSharpFormattingOptions.NewLineForClausesInQuery, formattingOptions.NewLineForClausesInQuery)); }
public Task <object> Handle(DesignHub hub, InvokeArgs args) { var fileName = args.GetString(); var document = hub.TypeSystem.Workspace.GetOpenedDocumentByName(fileName); if (document == null) { throw new Exception(string.Format("Cannot find opened document: {0}", fileName)); } var changes = FormattingWorker.GetFormattedTextChanges(document).Result; return(Task.FromResult <object>(changes.ToArray())); }
public async Task <FormatRangeResponse> Handle(FormatAfterKeystrokeRequest request) { var document = _workspace.GetDocument(request.FileName); if (document == null) { return(null); } var text = await document.GetTextAsync(); int position = text.GetTextPosition(request); var changes = await FormattingWorker.GetFormattingChangesAfterKeystroke(document, position, request.Char, _omnisharpOptions); return(new FormatRangeResponse() { Changes = changes }); }
public async Task <(Document document, string documentPath)> GetAndAddExternalSymbolDocument(Project project, ISymbol symbol, CancellationToken cancellationToken) { var fileName = symbol.GetFilePathForExternalSymbol(project); Project metadataProject; // since submission projects cannot have new documents added to it // we will use a separate project to hold metadata documents if (project.IsSubmission) { metadataProject = project.Solution.Projects.FirstOrDefault(x => x.Name == MetadataKey); if (metadataProject == null) { metadataProject = project.Solution.AddProject(MetadataKey, $"{MetadataKey}.dll", LanguageNames.CSharp) .WithCompilationOptions(project.CompilationOptions) .WithMetadataReferences(project.MetadataReferences); } } else { // for regular projects we will use current project to store metadata metadataProject = project; } if (!_cache.TryGetValue(fileName, out var document)) { var topLevelSymbol = symbol.GetTopLevelContainingNamedType(); var temporaryDocument = metadataProject.AddDocument(fileName, string.Empty); var formattingOptions = await FormattingWorker.GetFormattingOptionsAsync(temporaryDocument, _omnisharpOptions); document = await OmniSharpMetadataAsSourceService.AddSourceToAsync( temporaryDocument, await metadataProject.GetCompilationAsync(), topLevelSymbol, formattingOptions, cancellationToken); _cache.TryAdd(fileName, document); } return(document, fileName); }
public async Task <FormatRangeResponse> Handle(FormatRangeRequest request) { var document = _workspace.GetDocument(request.FileName); if (document == null) { return(null); } var text = await document.GetTextAsync(); var start = text.Lines.GetPosition(new LinePosition(request.Line, request.Column)); var end = text.Lines.GetPosition(new LinePosition(request.EndLine, request.EndColumn)); var changes = await FormattingWorker.GetFormattingChanges(document, start, end); return(new FormatRangeResponse() { Changes = changes }); }
public async Task <FormatRangeResponse> Handle(FormatRangeRequest request) { var document = _workspace.GetDocument(request.FileName); if (document == null) { return(null); } var text = await document.GetTextAsync(); var start = text.GetTextPosition(request); var end = text.Lines.GetPosition(new LinePosition(request.EndLine, request.EndColumn)); var syntaxTree = await document.GetSyntaxRootAsync(); var tokenStart = syntaxTree.FindToken(start).FullSpan.Start; var changes = await FormattingWorker.GetFormattingChanges(document, tokenStart, end, _omnisharpOptions, _loggerFactory); return(new FormatRangeResponse() { Changes = changes }); }