@@ -41,7 +41,6 @@ import {
4141 ReferenceTypeCastExpressionCtx ,
4242 RegularLambdaParameterCtx ,
4343 TernaryExpressionCtx ,
44- TypeArgumentListCtx ,
4544 TypeArgumentsOrDiamondCtx ,
4645 TypePatternCtx ,
4746 UnaryExpressionCtx ,
@@ -50,7 +49,6 @@ import {
5049} from "java-parser/api" ;
5150
5251import forEach from "lodash/forEach" ;
53- import { Doc } from "prettier" ;
5452import { builders } from "prettier/doc" ;
5553import { BaseCstPrettierPrinter } from "../base-cst-printer" ;
5654import { isAnnotationCstNode } from "../types/utils" ;
@@ -63,20 +61,18 @@ import { printTokenWithComments } from "./comments/format-comments";
6361import { handleCommentsBinaryExpression } from "./comments/handle-comments" ;
6462import { concat , dedent , group , indent } from "./prettier-builder" ;
6563import {
64+ binary ,
6665 findDeepElementInPartsArray ,
6766 isExplicitLambdaParameter ,
68- isShiftOperator ,
6967 isUniqueMethodInvocation ,
70- matchCategory ,
7168 putIntoBraces ,
7269 rejectAndConcat ,
7370 rejectAndJoin ,
7471 rejectAndJoinSeps ,
75- separateTokensIntoGroups ,
7672 sortAnnotationIdentifier ,
77- sortNodes
73+ sortNodes ,
74+ sortTokens
7875} from "./printer-utils" ;
79- import join = builders . join ;
8076
8177const { ifBreak, line, softline, indentIfBreak } = builders ;
8278
@@ -244,104 +240,54 @@ export class ExpressionsPrettierVisitor extends BaseCstPrettierPrinter {
244240 return binaryExpression ;
245241 }
246242
247- binaryExpression ( ctx : BinaryExpressionCtx , params : any ) {
243+ binaryExpression (
244+ ctx : BinaryExpressionCtx ,
245+ params ?: { addParenthesisToWrapStatement ?: boolean }
246+ ) {
248247 handleCommentsBinaryExpression ( ctx ) ;
249248
250- const instanceofReferences = this . mapVisit (
251- sortNodes ( [ ctx . pattern , ctx . referenceType ] )
252- ) ;
253- const expression = this . mapVisit ( ctx . expression ) ;
254- const unaryExpression = this . mapVisit ( ctx . unaryExpression ) ;
255-
256- const { groupsOfOperator, sortedBinaryOperators } =
257- separateTokensIntoGroups ( ctx ) ;
258- const segmentsSplitByBinaryOperator : any [ ] = [ ] ;
259- let currentSegment = [ ] ;
249+ const sortedNodes = sortNodes ( [
250+ ctx . pattern ,
251+ ctx . referenceType ,
252+ ctx . expression ,
253+ ctx . unaryExpression
254+ ] ) ;
260255
261- if ( groupsOfOperator . length === 1 && groupsOfOperator [ 0 ] . length === 0 ) {
262- return unaryExpression . shift ( ) ;
263- }
256+ const nodes = this . mapVisit (
257+ sortedNodes ,
258+ sortedNodes . length === 1 ? params : undefined
259+ ) ;
260+ const tokens = sortTokens ( [
261+ ctx . Instanceof ,
262+ ctx . AssignmentOperator ,
263+ ctx . Less ,
264+ ctx . Greater ,
265+ ctx . BinaryOperator
266+ ] ) ;
267+ const hasTokens = tokens . length > 0 ;
264268
265- groupsOfOperator . forEach ( subgroup => {
266- currentSegment = [ unaryExpression . shift ( ) ] ;
267- for ( let i = 0 ; i < subgroup . length ; i ++ ) {
268- const token = subgroup [ i ] ;
269- const shiftOperator = isShiftOperator ( subgroup , i ) ;
270- if ( token . tokenType . name === "Instanceof" ) {
271- currentSegment . push (
272- rejectAndJoin ( " " , [
273- ctx . Instanceof ! [ 0 ] ,
274- instanceofReferences . shift ( )
275- ] )
276- ) ;
277- } else if ( matchCategory ( token , "'AssignmentOperator'" ) ) {
278- currentSegment . push (
279- indent ( rejectAndJoin ( line , [ token , expression . shift ( ) ] ) )
280- ) ;
281- } else if (
282- shiftOperator === "leftShift" ||
283- shiftOperator === "rightShift"
284- ) {
285- currentSegment . push (
286- rejectAndJoin ( " " , [
287- rejectAndConcat ( [ token , subgroup [ i + 1 ] ] ) ,
288- unaryExpression . shift ( )
289- ] )
290- ) ;
291- i ++ ;
292- } else if ( shiftOperator === "doubleRightShift" ) {
293- currentSegment . push (
294- rejectAndJoin ( " " , [
295- rejectAndConcat ( [ token , subgroup [ i + 1 ] , subgroup [ i + 2 ] ] ) ,
296- unaryExpression . shift ( )
297- ] )
298- ) ;
299- i += 2 ;
300- } else if ( matchCategory ( token , "'BinaryOperator'" ) ) {
301- currentSegment . push (
302- rejectAndJoin ( line , [ token , unaryExpression . shift ( ) ] )
303- ) ;
304- }
305- }
306- segmentsSplitByBinaryOperator . push (
307- group ( rejectAndJoin ( " " , currentSegment ) )
308- ) ;
309- } ) ;
269+ const content = binary ( nodes , tokens , true ) ;
310270
311- if ( params !== undefined && params . addParenthesisToWrapStatement ) {
312- return group (
313- concat ( [
314- ifBreak ( "(" , "" ) ,
315- indent (
316- concat ( [
317- softline ,
318- group (
319- rejectAndJoinSeps (
320- sortedBinaryOperators . map ( elt => concat ( [ " " , elt , line ] ) ) ,
321- segmentsSplitByBinaryOperator
322- )
323- )
324- ] )
325- ) ,
326- softline ,
327- ifBreak ( ")" )
328- ] )
329- ) ;
330- }
331-
332- return group (
333- rejectAndJoinSeps (
334- sortedBinaryOperators . map ( elt => concat ( [ " " , elt , line ] ) ) ,
335- segmentsSplitByBinaryOperator
336- )
337- ) ;
271+ return hasTokens && params ?. addParenthesisToWrapStatement
272+ ? group (
273+ concat ( [
274+ ifBreak ( "(" ) ,
275+ indent ( concat ( [ softline , content ] ) ) ,
276+ softline ,
277+ ifBreak ( ")" )
278+ ] )
279+ )
280+ : content ;
338281 }
339282
340- unaryExpression ( ctx : UnaryExpressionCtx ) {
283+ unaryExpression (
284+ ctx : UnaryExpressionCtx ,
285+ params ?: { addParenthesisToWrapStatement ?: boolean }
286+ ) {
341287 const unaryPrefixOperator = ctx . UnaryPrefixOperator
342288 ? ctx . UnaryPrefixOperator
343289 : [ ] ;
344- const primary = this . visit ( ctx . primary ) ;
290+ const primary = this . visit ( ctx . primary , params ) ;
345291 const unarySuffixOperator = ctx . UnarySuffixOperator
346292 ? ctx . UnarySuffixOperator
347293 : [ ] ;
@@ -369,10 +315,14 @@ export class ExpressionsPrettierVisitor extends BaseCstPrettierPrinter {
369315 ] ) ;
370316 }
371317
372- primary ( ctx : PrimaryCtx ) {
318+ primary (
319+ ctx : PrimaryCtx ,
320+ params ?: { addParenthesisToWrapStatement ?: boolean }
321+ ) {
373322 const countMethodInvocation = isUniqueMethodInvocation ( ctx . primarySuffix ) ;
374323
375324 const primaryPrefix = this . visit ( ctx . primaryPrefix , {
325+ ...params ,
376326 shouldBreakBeforeFirstMethodInvocation : countMethodInvocation > 1
377327 } ) ;
378328
@@ -561,9 +511,13 @@ export class ExpressionsPrettierVisitor extends BaseCstPrettierPrinter {
561511 return rejectAndConcat ( [ keyWord , typeArguments ] ) ;
562512 }
563513
564- parenthesisExpression ( ctx : ParenthesisExpressionCtx ) {
514+ parenthesisExpression (
515+ ctx : ParenthesisExpressionCtx ,
516+ params ?: { addParenthesisToWrapStatement ?: boolean }
517+ ) {
565518 const expression = this . visit ( ctx . expression ) ;
566- return putIntoBraces ( expression , softline , ctx . LBrace [ 0 ] , ctx . RBrace [ 0 ] ) ;
519+ const separator = params ?. addParenthesisToWrapStatement ? softline : "" ;
520+ return putIntoBraces ( expression , separator , ctx . LBrace [ 0 ] , ctx . RBrace [ 0 ] ) ;
567521 }
568522
569523 castExpression ( ctx : CastExpressionCtx ) {
0 commit comments