protected AdjustNewLinesOperation CreateAdjustNewLinesOperation(int line, AdjustNewLinesOption option) { return(FormattingOperations.CreateAdjustNewLinesOperation(line, option)); }
private AdjustNewLinesOperation GetAdjustNewLinesOperationBetweenMembers(SyntaxToken previousToken, SyntaxToken currentToken) { if (!FormattingRangeHelper.InBetweenTwoMembers(previousToken, currentToken)) { return(null); } var previousMember = FormattingRangeHelper.GetEnclosingMember(previousToken); var nextMember = FormattingRangeHelper.GetEnclosingMember(currentToken); if (previousMember == null || nextMember == null) { return(null); } // see whether first non whitespace trivia after before the current member is a comment or not var triviaList = currentToken.LeadingTrivia; var firstNonWhitespaceTrivia = triviaList.FirstOrDefault(trivia => !IsWhitespace(trivia)); if (firstNonWhitespaceTrivia.IsRegularOrDocComment()) { // the first one is a comment, add two more lines than existing number of lines var numberOfLines = GetNumberOfLines(triviaList); var numberOfLinesBeforeComment = GetNumberOfLines(triviaList.Take(triviaList.IndexOf(firstNonWhitespaceTrivia))); var addedLines = (numberOfLinesBeforeComment < 1) ? 2 : 1; return(CreateAdjustNewLinesOperation(numberOfLines + addedLines, AdjustNewLinesOption.ForceLines)); } // If we have two members of the same kind, we won't insert a blank line if both members // have any content (e.g. accessors bodies, non-empty method bodies, etc.). if (previousMember.Kind() == nextMember.Kind()) { // Easy cases: if (previousMember.Kind() == SyntaxKind.FieldDeclaration || previousMember.Kind() == SyntaxKind.EventFieldDeclaration) { // Ensure that fields and events are each declared on a separate line. return(CreateAdjustNewLinesOperation(1, AdjustNewLinesOption.ForceLines)); } // Don't insert a blank line between properties, indexers or events with no accessors if (previousMember is BasePropertyDeclarationSyntax previousProperty) { var nextProperty = (BasePropertyDeclarationSyntax)nextMember; if (previousProperty?.AccessorList?.Accessors.All(a => a.Body == null) == true && nextProperty?.AccessorList?.Accessors.All(a => a.Body == null) == true) { return(CreateAdjustNewLinesOperation(1, AdjustNewLinesOption.PreserveLines)); } } // Don't insert a blank line between methods with no bodies if (previousMember is BaseMethodDeclarationSyntax previousMethod) { var nextMethod = (BaseMethodDeclarationSyntax)nextMember; if (previousMethod.Body == null && nextMethod.Body == null) { return(CreateAdjustNewLinesOperation(1, AdjustNewLinesOption.PreserveLines)); } } } return(FormattingOperations.CreateAdjustNewLinesOperation(2 /* +1 for member itself and +1 for a blank line*/, AdjustNewLinesOption.ForceLines)); }
protected static AdjustNewLinesOperation CreateAdjustNewLinesOperation( int line, AdjustNewLinesOption option ) => FormattingOperations.CreateAdjustNewLinesOperation(line, option);