11import { doc } from 'prettier' ;
22import { NonterminalKind } from '@nomicfoundation/slang/cst' ;
33import { createBinaryOperationPrinter } from '../slang-printers/create-binary-operation-printer.js' ;
4+ import { binaryIndentRulesBuilder } from '../slang-printers/print-binary-operation.js' ;
45import { createHugFunction } from '../slang-utils/create-hug-function.js' ;
6+ import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js' ;
57import { getNodeMetadata , updateMetadata } from '../slang-utils/metadata.js' ;
68import { Expression } from './Expression.js' ;
79
@@ -10,17 +12,28 @@ import type { AstPath, Doc, ParserOptions } from 'prettier';
1012import type { AstNode } from './types.d.ts' ;
1113import type { PrintFunction , SlangNode } from '../types.d.ts' ;
1214
13- const { group, indent } = doc . builders ;
15+ const { group } = doc . builders ;
1416
1517const tryToHug = createHugFunction ( [ '**' ] ) ;
1618
19+ const shouldIndent = createKindCheckFunction ( [
20+ NonterminalKind . MultiplicativeExpression ,
21+ NonterminalKind . AdditiveExpression ,
22+ NonterminalKind . ShiftExpression ,
23+ NonterminalKind . BitwiseAndExpression ,
24+ NonterminalKind . BitwiseOrExpression ,
25+ NonterminalKind . BitwiseXorExpression ,
26+ NonterminalKind . InequalityExpression ,
27+ NonterminalKind . EqualityExpression ,
28+ NonterminalKind . AndExpression ,
29+ NonterminalKind . OrExpression
30+ ] ) ;
31+
1732const printExponentiationExpression = createBinaryOperationPrinter (
1833 ( ) =>
1934 ( document : Doc ) : Doc =>
2035 group ( document ) , // always group
21- ( ) =>
22- ( document : Doc ) : Doc =>
23- indent ( document ) // always indent
36+ binaryIndentRulesBuilder ( shouldIndent ) // indent as a binary operation with some exceptions
2437) ;
2538
2639export class ExponentiationExpression implements SlangNode {
0 commit comments