public static SyntaxNode Unparenthesize( this ISyntaxFacts syntaxFacts, SyntaxNode node) { SyntaxToken openParenToken; SyntaxNode operand; SyntaxToken closeParenToken; if (syntaxFacts.IsParenthesizedPattern(node)) { syntaxFacts.GetPartsOfParenthesizedPattern(node, out openParenToken, out operand, out closeParenToken); } else { syntaxFacts.GetPartsOfParenthesizedExpression(node, out openParenToken, out operand, out closeParenToken); } var leadingTrivia = openParenToken.LeadingTrivia .Concat(openParenToken.TrailingTrivia) .Where(t => !syntaxFacts.IsElastic(t)) .Concat(operand.GetLeadingTrivia()); var trailingTrivia = operand.GetTrailingTrivia() .Concat(closeParenToken.LeadingTrivia) .Where(t => !syntaxFacts.IsElastic(t)) .Concat(closeParenToken.TrailingTrivia); var resultNode = operand .WithLeadingTrivia(leadingTrivia) .WithTrailingTrivia(trailingTrivia); // If there's no trivia between the original node and the tokens around it, then add // elastic markers so the formatting engine will spaces if necessary to keep things // parseable. if (resultNode.GetLeadingTrivia().Count == 0) { var previousToken = node.GetFirstToken().GetPreviousToken(); if (previousToken.TrailingTrivia.Count == 0 && syntaxFacts.IsWordOrNumber(previousToken) && syntaxFacts.IsWordOrNumber(resultNode.GetFirstToken())) { resultNode = resultNode.WithPrependedLeadingTrivia(syntaxFacts.ElasticMarker); } } if (resultNode.GetTrailingTrivia().Count == 0) { var nextToken = node.GetLastToken().GetNextToken(); if (nextToken.LeadingTrivia.Count == 0 && syntaxFacts.IsWordOrNumber(nextToken) && syntaxFacts.IsWordOrNumber(resultNode.GetLastToken())) { resultNode = resultNode.WithAppendedTrailingTrivia(syntaxFacts.ElasticMarker); } } return(resultNode); }
public static SyntaxNode GetExpressionOfParenthesizedExpression( this ISyntaxFacts syntaxFacts, SyntaxNode node ) { syntaxFacts.GetPartsOfParenthesizedExpression(node, out _, out var expression, out _); return(expression); }