Skip to content

Commit a4a3fee

Browse files
authored
adding printVariant function as a shortcut for path.call(print, xxx, 'variant') (#1251)
1 parent d4df51f commit a4a3fee

File tree

66 files changed

+240
-111
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+240
-111
lines changed

src/slang-nodes/ArrayTypeName.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2+
import { printVariant } from '../slang-printers/print-variant.js';
23
import { SlangNode } from './SlangNode.js';
34
import { TypeName } from './TypeName.js';
45
import { Expression } from './Expression.js';
@@ -27,6 +28,11 @@ export class ArrayTypeName extends SlangNode {
2728
}
2829

2930
print(path: AstPath<ArrayTypeName>, print: PrintFunction): Doc {
30-
return [path.call(print, 'operand'), '[', path.call(print, 'index'), ']'];
31+
return [
32+
path.call(printVariant(print), 'operand'),
33+
'[',
34+
path.call(printVariant(print), 'index'),
35+
']'
36+
];
3137
}
3238
}

src/slang-nodes/AssignmentExpression.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { isBinaryOperation } from '../slang-utils/is-binary-operation.js';
33
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
4+
import { printVariant } from '../slang-printers/print-variant.js';
45
import { SlangNode } from './SlangNode.js';
56
import { Expression } from './Expression.js';
67
import { TerminalNode } from './TerminalNode.js';
@@ -32,10 +33,10 @@ export class AssignmentExpression extends SlangNode {
3233
print(path: AstPath<AssignmentExpression>, print: PrintFunction): Doc {
3334
const rightOperandVariant = this.rightOperand.variant;
3435
return [
35-
path.call(print, 'leftOperand'),
36+
path.call(printVariant(print), 'leftOperand'),
3637
` ${this.operator}`,
3738
printIndentedGroupOrSpacedDocument(
38-
path.call(print, 'rightOperand'),
39+
path.call(printVariant(print), 'rightOperand'),
3940
!(rightOperandVariant instanceof TerminalNode) &&
4041
isBinaryOperation(rightOperandVariant)
4142
)

src/slang-nodes/CallOptionsExpression.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2+
import { printVariant } from '../slang-printers/print-variant.js';
23
import { SlangNode } from './SlangNode.js';
34
import { Expression } from './Expression.js';
45
import { CallOptions } from './CallOptions.js';
@@ -25,6 +26,11 @@ export class CallOptionsExpression extends SlangNode {
2526
}
2627

2728
print(path: AstPath<CallOptionsExpression>, print: PrintFunction): Doc {
28-
return [path.call(print, 'operand'), '{', path.call(print, 'options'), '}'];
29+
return [
30+
path.call(printVariant(print), 'operand'),
31+
'{',
32+
path.call(print, 'options'),
33+
'}'
34+
];
2935
}
3036
}

src/slang-nodes/ConditionalExpression.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
4+
import { printVariant } from '../slang-printers/print-variant.js';
45
import { SlangNode } from './SlangNode.js';
56
import { Expression } from './Expression.js';
67

@@ -28,7 +29,7 @@ function experimentalTernaries(
2829

2930
// If the `condition` breaks into multiple lines, we add parentheses,
3031
// unless it already is a `TupleExpression`.
31-
const operand = path.call(print, 'operand');
32+
const operand = path.call(printVariant(print), 'operand');
3233
const operandDoc = group([
3334
node.operand.variant.kind === NonterminalKind.TupleExpression
3435
? operand
@@ -41,7 +42,7 @@ function experimentalTernaries(
4142
// `trueExpression`.
4243
const trueExpressionDoc = indent([
4344
isNestedAsTrueExpression ? hardline : line,
44-
path.call(print, 'trueExpression')
45+
path.call(printVariant(print), 'trueExpression')
4546
]);
4647

4748
const groupId = Symbol('Slang.ConditionalExpression.trueExpression');
@@ -58,7 +59,7 @@ function experimentalTernaries(
5859
? ' '.repeat(tabWidth - 1)
5960
: ' ';
6061

61-
const falseExpression = path.call(print, 'falseExpression');
62+
const falseExpression = path.call(printVariant(print), 'falseExpression');
6263
const falseExpressionDoc = [
6364
isNested ? hardline : line,
6465
':',
@@ -85,7 +86,7 @@ function traditionalTernaries(
8586
print: PrintFunction
8687
): Doc {
8788
return group([
88-
path.call(print, 'operand'),
89+
path.call(printVariant(print), 'operand'),
8990
indent([
9091
// Nested trueExpression and falseExpression are always printed in a new
9192
// line
@@ -94,10 +95,10 @@ function traditionalTernaries(
9495
? hardline
9596
: line,
9697
'? ',
97-
path.call(print, 'trueExpression'),
98+
path.call(printVariant(print), 'trueExpression'),
9899
line,
99100
': ',
100-
path.call(print, 'falseExpression')
101+
path.call(printVariant(print), 'falseExpression')
101102
])
102103
]);
103104
}

src/slang-nodes/ConstantDefinition.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2+
import { printVariant } from '../slang-printers/print-variant.js';
23
import { SlangNode } from './SlangNode.js';
34
import { TypeName } from './TypeName.js';
45
import { TerminalNode } from './TerminalNode.js';
@@ -30,11 +31,11 @@ export class ConstantDefinition extends SlangNode {
3031

3132
print(path: AstPath<ConstantDefinition>, print: PrintFunction): Doc {
3233
return [
33-
path.call(print, 'typeName'),
34+
path.call(printVariant(print), 'typeName'),
3435
' constant ',
3536
path.call(print, 'name'),
3637
' = ',
37-
path.call(print, 'value'),
38+
path.call(printVariant(print), 'value'),
3839
';'
3940
];
4041
}

src/slang-nodes/ConstructorDefinition.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { printFunction } from '../slang-printers/print-function.js';
2+
import { printFunctionWithBody } from '../slang-printers/print-function.js';
33
import { SlangNode } from './SlangNode.js';
44
import { ParametersDeclaration } from './ParametersDeclaration.js';
55
import { ConstructorAttributes } from './ConstructorAttributes.js';
@@ -30,6 +30,6 @@ export class ConstructorDefinition extends SlangNode {
3030
}
3131

3232
print(path: AstPath<ConstructorDefinition>, print: PrintFunction): Doc {
33-
return printFunction('constructor', this, path, print);
33+
return printFunctionWithBody('constructor', this, path, print);
3434
}
3535
}

src/slang-nodes/DoWhileStatement.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
4+
import { printVariant } from '../slang-printers/print-variant.js';
45
import { SlangNode } from './SlangNode.js';
56
import { Statement } from './Statement.js';
67
import { Expression } from './Expression.js';
@@ -29,14 +30,14 @@ export class DoWhileStatement extends SlangNode {
2930
}
3031

3132
print(path: AstPath<DoWhileStatement>, print: PrintFunction): Doc {
32-
const body = path.call(print, 'body');
33+
const body = path.call(printVariant(print), 'body');
3334
return [
3435
'do',
3536
this.body.variant.kind === NonterminalKind.Block
3637
? [' ', body, ' ']
3738
: printSeparatedItem(body, { firstSeparator: line }),
3839
'while (',
39-
printSeparatedItem(path.call(print, 'condition')),
40+
printSeparatedItem(path.call(printVariant(print), 'condition')),
4041
');'
4142
];
4243
}

src/slang-nodes/ElseBranch.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js';
33
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
4+
import { printVariant } from '../slang-printers/print-variant.js';
45
import { SlangNode } from './SlangNode.js';
56
import { Statement } from './Statement.js';
67

@@ -31,7 +32,7 @@ export class ElseBranch extends SlangNode {
3132
return [
3233
'else',
3334
printIndentedGroupOrSpacedDocument(
34-
path.call(print, 'body'),
35+
path.call(printVariant(print), 'body'),
3536
!isIfStatementOrBlock(this.body.variant)
3637
)
3738
];

src/slang-nodes/EmitStatement.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2+
import { printVariant } from '../slang-printers/print-variant.js';
23
import { SlangNode } from './SlangNode.js';
34
import { IdentifierPath } from './IdentifierPath.js';
45
import { ArgumentsDeclaration } from './ArgumentsDeclaration.js';
@@ -28,7 +29,7 @@ export class EmitStatement extends SlangNode {
2829
return [
2930
'emit ',
3031
path.call(print, 'event'),
31-
path.call(print, 'arguments'),
32+
path.call(printVariant(print), 'arguments'),
3233
';'
3334
];
3435
}

src/slang-nodes/ErrorParameter.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { joinExisting } from '../slang-utils/join-existing.js';
3+
import { printVariant } from '../slang-printers/print-variant.js';
34
import { SlangNode } from './SlangNode.js';
45
import { TypeName } from './TypeName.js';
56
import { TerminalNode } from './TerminalNode.js';
@@ -29,7 +30,7 @@ export class ErrorParameter extends SlangNode {
2930

3031
print(path: AstPath<ErrorParameter>, print: PrintFunction): Doc {
3132
return joinExisting(' ', [
32-
path.call(print, 'typeName'),
33+
path.call(printVariant(print), 'typeName'),
3334
path.call(print, 'name')
3435
]);
3536
}

0 commit comments

Comments
 (0)