public static void RegisterRefactoring(RefactoringContext context, StatementSyntax statement) { FileLinePositionSpan fileSpan = statement.SyntaxTree.GetLineSpan(statement.Span, context.CancellationToken); context.RegisterRefactoring( "Comment out statement", ct => RefactorAsync(context.Document, fileSpan.StartLine(), fileSpan.EndLine(), ct)); }
public static void ComputeRefactoring(RefactoringContext context, MemberDeclarationSyntax member) { MemberDeclarationListInfo info = SyntaxInfo.MemberDeclarationListInfo(member.Parent); if (!info.Success) { return; } SyntaxList <MemberDeclarationSyntax> members = info.Members; if (members.Count <= 1) { return; } int index = IndexOfMemberToSwap(member, members, context.Span); if (index == -1) { return; } SyntaxTree tree = member.SyntaxTree; FileLinePositionSpan fileLinePositionSpan = tree.GetLineSpan(context.Span, context.CancellationToken); int startLine = fileLinePositionSpan.StartLine(); int endLine = fileLinePositionSpan.EndLine(); if (startLine <= tree.GetEndLine(members[index].TrimmedSpan(), context.CancellationToken)) { return; } if (endLine >= tree.GetStartLine(members[index + 1].TrimmedSpan(), context.CancellationToken)) { return; } if (context.IsRefactoringEnabled(RefactoringIdentifiers.RemoveMemberDeclarations)) { context.RegisterRefactoring( "Remove members above", ct => ReplaceMembersAsync(context.Document, info, members.Skip(index + 1), ct)); context.RegisterRefactoring( "Remove members below", ct => ReplaceMembersAsync(context.Document, info, members.Take(index + 1), ct)); } if (context.IsRefactoringEnabled(RefactoringIdentifiers.SwapMemberDeclarations)) { context.RegisterRefactoring( "Swap members", ct => SwapMembersAsync(context.Document, info, index, ct)); } }
public static void RegisterRefactoring(RefactoringContext context, LocalFunctionStatementSyntax localFunctionStatement) { FileLinePositionSpan fileSpan = GetFileLinePositionSpan(localFunctionStatement, context.CancellationToken); context.RegisterRefactoring( $"Comment out {CSharpFacts.GetTitle(localFunctionStatement)}", ct => RefactorAsync(context.Document, fileSpan.StartLine(), fileSpan.EndLine(), ct), RefactoringDescriptors.CommentOutMemberDeclaration); }
public static void RegisterRefactoring(RefactoringContext context, MemberDeclarationSyntax member) { FileLinePositionSpan fileSpan = GetFileLinePositionSpan(member, context.CancellationToken); context.RegisterRefactoring( $"Comment out {MemberDeclarationRefactoring.GetMemberName(member)}", cancellationToken => { return(RefactorAsync( context.Document, fileSpan.StartLine(), fileSpan.EndLine(), cancellationToken)); }); }
public static bool IsSingleLine( this SyntaxNode node, bool includeExteriorTrivia = true, bool trim = true) { if (node == null) { throw new ArgumentNullException(nameof(node)); } TextSpan span = TextSpan.FromBounds( GetStartIndex(node, includeExteriorTrivia, trim), GetEndIndex(node, includeExteriorTrivia, trim)); FileLinePositionSpan positionSpan = node.SyntaxTree.GetLineSpan(span); return(positionSpan.StartLine() == positionSpan.EndLine()); }
public static bool IsMultiLine(this FileLinePositionSpan fileLinePositionSpan) { return(fileLinePositionSpan.StartLine() != fileLinePositionSpan.EndLine()); }
public static void RegisterRefactoring(RefactoringContext context, MemberDeclarationSyntax member) { FileLinePositionSpan fileSpan = GetFileLinePositionSpan(member, context.CancellationToken); context.RegisterRefactoring( $"Comment out {CSharpFacts.GetTitle(member)}", cancellationToken => RefactorAsync(context.Document, fileSpan.StartLine(), fileSpan.EndLine(), cancellationToken), RefactoringIdentifiers.CommentOutMember); }
public static void RegisterRefactoring(RefactoringContext context, LocalFunctionStatementSyntax localFunctionStatement) { FileLinePositionSpan fileSpan = GetFileLinePositionSpan(localFunctionStatement, context.CancellationToken); context.RegisterRefactoring( $"Comment out {localFunctionStatement.GetTitle()}", cancellationToken => RefactorAsync(context.Document, fileSpan.StartLine(), fileSpan.EndLine(), cancellationToken)); }
internal static int GetLineCount(this FileLinePositionSpan fileLinePositionSpan) { return(fileLinePositionSpan.EndLine() - fileLinePositionSpan.StartLine() + 1); }
public static bool IsSingleLine(this FileLinePositionSpan fileLinePositionSpan) { return(fileLinePositionSpan.StartLine() == fileLinePositionSpan.EndLine()); }
private static void AnalyzeAddExpression(SyntaxNodeAnalysisContext context) { SyntaxNode node = context.Node; if (node.ContainsDiagnostics) { return; } if (node.SpanContainsDirectives()) { return; } if (node.IsParentKind(SyntaxKind.AddExpression)) { return; } var addExpression = (BinaryExpressionSyntax)node; ExpressionSyntax firstExpression = null; ExpressionSyntax lastExpression = null; var isLiteral = false; var isVerbatim = false; int startLine = -1; foreach (ExpressionSyntax expression in addExpression.AsChain().Reverse()) { context.CancellationToken.ThrowIfCancellationRequested(); switch (expression.Kind()) { case SyntaxKind.StringLiteralExpression: { StringLiteralExpressionInfo stringLiteral = SyntaxInfo.StringLiteralExpressionInfo(expression); bool isVerbatim2 = stringLiteral.IsVerbatim; if (firstExpression == null) { firstExpression = expression; isLiteral = true; isVerbatim = isVerbatim2; if (isVerbatim) { startLine = expression.SyntaxTree.GetLineSpan(expression.GetSpan()).StartLine(); } } else if (!isLiteral || isVerbatim != isVerbatim2 || (!isVerbatim && !CheckHexadecimalEscapeSequence(stringLiteral))) { if (lastExpression != null) { Analyze(context, firstExpression, lastExpression, isVerbatim); } firstExpression = null; lastExpression = null; } else { lastExpression = expression; if (isVerbatim) { FileLinePositionSpan lineSpan = expression.SyntaxTree.GetLineSpan(expression.GetSpan()); if (startLine != lineSpan.EndLine()) { firstExpression = null; lastExpression = null; } else { startLine = lineSpan.StartLine(); } } } break; } case SyntaxKind.InterpolatedStringExpression: { var interpolatedString = ((InterpolatedStringExpressionSyntax)expression); bool isVerbatim2 = interpolatedString.IsVerbatim(); if (firstExpression == null) { firstExpression = expression; isLiteral = false; isVerbatim = isVerbatim2; if (isVerbatim) { startLine = expression.SyntaxTree.GetLineSpan(expression.GetSpan()).StartLine(); } } else if (isLiteral || isVerbatim != isVerbatim2 || (!isVerbatim && !CheckHexadecimalEscapeSequence(interpolatedString))) { if (lastExpression != null) { Analyze(context, firstExpression, lastExpression, isVerbatim); } firstExpression = null; lastExpression = null; } else { lastExpression = expression; if (isVerbatim) { FileLinePositionSpan lineSpan = expression.SyntaxTree.GetLineSpan(expression.GetSpan()); if (startLine != lineSpan.EndLine()) { firstExpression = null; lastExpression = null; } else { startLine = lineSpan.StartLine(); } } } break; } default: { if (lastExpression != null) { Analyze(context, firstExpression, lastExpression, isVerbatim); } firstExpression = null; lastExpression = null; break; } } } if (lastExpression != null) { Analyze(context, firstExpression, lastExpression, isVerbatim); } }
public static void ComputeRefactoring(RefactoringContext context, MemberDeclarationSyntax member) { var parent = member.Parent as MemberDeclarationSyntax; if (parent != null) { SyntaxList <MemberDeclarationSyntax> members = parent.GetMembers(); if (members.Count > 1) { int index = IndexOfMemberToSwap(member, members, context.Span); if (index != -1) { FileLinePositionSpan fileSpan = member.SyntaxTree.GetLineSpan(context.Span, context.CancellationToken); if (fileSpan.StartLine() > members[index].SyntaxTree.GetLineSpan(members[index].TrimmedSpan(), context.CancellationToken).EndLine() && fileSpan.EndLine() < members[index + 1].SyntaxTree.GetLineSpan(members[index + 1].TrimmedSpan(), context.CancellationToken).StartLine()) { if (context.IsRefactoringEnabled(RefactoringIdentifiers.RemoveMemberDeclarations)) { context.RegisterRefactoring( "Remove members above", cancellationToken => { return(ReplaceMembersAsync( context.Document, parent, members, List(members.Skip(index + 1)), cancellationToken)); }); context.RegisterRefactoring( "Remove members below", cancellationToken => { return(ReplaceMembersAsync( context.Document, parent, members, List(members.Take(index + 1)), cancellationToken)); }); } if (context.IsRefactoringEnabled(RefactoringIdentifiers.SwapMemberDeclarations)) { context.RegisterRefactoring( "Swap members", cancellationToken => { return(RefactorAsync( context.Document, parent, members, index, cancellationToken)); }); } } } } } }
public static void ComputeRefactoring(RefactoringContext context, MemberDeclarationSyntax member) { SyntaxNode parent = member.Parent; if (parent?.IsKind( SyntaxKind.NamespaceDeclaration, SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration) == true) { var parentMember = (MemberDeclarationSyntax)parent; SyntaxList<MemberDeclarationSyntax> members = parentMember.GetMembers(); if (members.Count > 1) { int index = IndexOfMemberToSwap(member, members, context.Span); if (index != -1) { SyntaxTree tree = member.SyntaxTree; FileLinePositionSpan fileLinePositionSpan = tree.GetLineSpan(context.Span, context.CancellationToken); int startLine = fileLinePositionSpan.StartLine(); int endLine = fileLinePositionSpan.EndLine(); if (startLine > tree.GetEndLine(members[index].TrimmedSpan(), context.CancellationToken) && endLine < tree.GetStartLine(members[index + 1].TrimmedSpan(), context.CancellationToken)) { if (context.IsRefactoringEnabled(RefactoringIdentifiers.RemoveMemberDeclarations)) { context.RegisterRefactoring( "Remove members above", cancellationToken => { return ReplaceMembersAsync( context.Document, parentMember, List(members.Skip(index + 1)), cancellationToken); }); context.RegisterRefactoring( "Remove members below", cancellationToken => { return ReplaceMembersAsync( context.Document, parentMember, List(members.Take(index + 1)), cancellationToken); }); } if (context.IsRefactoringEnabled(RefactoringIdentifiers.SwapMemberDeclarations)) { context.RegisterRefactoring( "Swap members", cancellationToken => { return RefactorAsync( context.Document, parentMember, members, index, cancellationToken); }); } } } } } }