Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/slang-nodes/ArrayTypeName.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { TypeName } from './TypeName.js';
import { Expression } from './Expression.js';
Expand Down Expand Up @@ -27,6 +28,11 @@ export class ArrayTypeName extends SlangNode {
}

print(path: AstPath<ArrayTypeName>, print: PrintFunction): Doc {
return [path.call(print, 'operand'), '[', path.call(print, 'index'), ']'];
return [
path.call(printVariant(print), 'operand'),
'[',
path.call(printVariant(print), 'index'),
']'
];
}
}
5 changes: 3 additions & 2 deletions src/slang-nodes/AssignmentExpression.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { isBinaryOperation } from '../slang-utils/is-binary-operation.js';
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Expression } from './Expression.js';
import { TerminalNode } from './TerminalNode.js';
Expand Down Expand Up @@ -32,10 +33,10 @@ export class AssignmentExpression extends SlangNode {
print(path: AstPath<AssignmentExpression>, print: PrintFunction): Doc {
const rightOperandVariant = this.rightOperand.variant;
return [
path.call(print, 'leftOperand'),
path.call(printVariant(print), 'leftOperand'),
` ${this.operator}`,
printIndentedGroupOrSpacedDocument(
path.call(print, 'rightOperand'),
path.call(printVariant(print), 'rightOperand'),
!(rightOperandVariant instanceof TerminalNode) &&
isBinaryOperation(rightOperandVariant)
)
Expand Down
8 changes: 7 additions & 1 deletion src/slang-nodes/CallOptionsExpression.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Expression } from './Expression.js';
import { CallOptions } from './CallOptions.js';
Expand All @@ -25,6 +26,11 @@ export class CallOptionsExpression extends SlangNode {
}

print(path: AstPath<CallOptionsExpression>, print: PrintFunction): Doc {
return [path.call(print, 'operand'), '{', path.call(print, 'options'), '}'];
return [
path.call(printVariant(print), 'operand'),
'{',
path.call(print, 'options'),
'}'
];
}
}
13 changes: 7 additions & 6 deletions src/slang-nodes/ConditionalExpression.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Expression } from './Expression.js';

Expand Down Expand Up @@ -28,7 +29,7 @@ function experimentalTernaries(

// If the `condition` breaks into multiple lines, we add parentheses,
// unless it already is a `TupleExpression`.
const operand = path.call(print, 'operand');
const operand = path.call(printVariant(print), 'operand');
const operandDoc = group([
node.operand.variant.kind === NonterminalKind.TupleExpression
? operand
Expand All @@ -41,7 +42,7 @@ function experimentalTernaries(
// `trueExpression`.
const trueExpressionDoc = indent([
isNestedAsTrueExpression ? hardline : line,
path.call(print, 'trueExpression')
path.call(printVariant(print), 'trueExpression')
]);

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

const falseExpression = path.call(print, 'falseExpression');
const falseExpression = path.call(printVariant(print), 'falseExpression');
const falseExpressionDoc = [
isNested ? hardline : line,
':',
Expand All @@ -85,7 +86,7 @@ function traditionalTernaries(
print: PrintFunction
): Doc {
return group([
path.call(print, 'operand'),
path.call(printVariant(print), 'operand'),
indent([
// Nested trueExpression and falseExpression are always printed in a new
// line
Expand All @@ -94,10 +95,10 @@ function traditionalTernaries(
? hardline
: line,
'? ',
path.call(print, 'trueExpression'),
path.call(printVariant(print), 'trueExpression'),
line,
': ',
path.call(print, 'falseExpression')
path.call(printVariant(print), 'falseExpression')
])
]);
}
Expand Down
5 changes: 3 additions & 2 deletions src/slang-nodes/ConstantDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { TypeName } from './TypeName.js';
import { TerminalNode } from './TerminalNode.js';
Expand Down Expand Up @@ -30,11 +31,11 @@ export class ConstantDefinition extends SlangNode {

print(path: AstPath<ConstantDefinition>, print: PrintFunction): Doc {
return [
path.call(print, 'typeName'),
path.call(printVariant(print), 'typeName'),
' constant ',
path.call(print, 'name'),
' = ',
path.call(print, 'value'),
path.call(printVariant(print), 'value'),
';'
];
}
Expand Down
4 changes: 2 additions & 2 deletions src/slang-nodes/ConstructorDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printFunction } from '../slang-printers/print-function.js';
import { printFunctionWithBody } from '../slang-printers/print-function.js';
import { SlangNode } from './SlangNode.js';
import { ParametersDeclaration } from './ParametersDeclaration.js';
import { ConstructorAttributes } from './ConstructorAttributes.js';
Expand Down Expand Up @@ -30,6 +30,6 @@ export class ConstructorDefinition extends SlangNode {
}

print(path: AstPath<ConstructorDefinition>, print: PrintFunction): Doc {
return printFunction('constructor', this, path, print);
return printFunctionWithBody('constructor', this, path, print);
}
}
5 changes: 3 additions & 2 deletions src/slang-nodes/DoWhileStatement.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Statement } from './Statement.js';
import { Expression } from './Expression.js';
Expand Down Expand Up @@ -29,14 +30,14 @@ export class DoWhileStatement extends SlangNode {
}

print(path: AstPath<DoWhileStatement>, print: PrintFunction): Doc {
const body = path.call(print, 'body');
const body = path.call(printVariant(print), 'body');
return [
'do',
this.body.variant.kind === NonterminalKind.Block
? [' ', body, ' ']
: printSeparatedItem(body, { firstSeparator: line }),
'while (',
printSeparatedItem(path.call(print, 'condition')),
printSeparatedItem(path.call(printVariant(print), 'condition')),
');'
];
}
Expand Down
3 changes: 2 additions & 1 deletion src/slang-nodes/ElseBranch.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { createKindCheckFunction } from '../slang-utils/create-kind-check-function.js';
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Statement } from './Statement.js';

Expand Down Expand Up @@ -31,7 +32,7 @@ export class ElseBranch extends SlangNode {
return [
'else',
printIndentedGroupOrSpacedDocument(
path.call(print, 'body'),
path.call(printVariant(print), 'body'),
!isIfStatementOrBlock(this.body.variant)
)
];
Expand Down
3 changes: 2 additions & 1 deletion src/slang-nodes/EmitStatement.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { IdentifierPath } from './IdentifierPath.js';
import { ArgumentsDeclaration } from './ArgumentsDeclaration.js';
Expand Down Expand Up @@ -28,7 +29,7 @@ export class EmitStatement extends SlangNode {
return [
'emit ',
path.call(print, 'event'),
path.call(print, 'arguments'),
path.call(printVariant(print), 'arguments'),
';'
];
}
Expand Down
3 changes: 2 additions & 1 deletion src/slang-nodes/ErrorParameter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { joinExisting } from '../slang-utils/join-existing.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { TypeName } from './TypeName.js';
import { TerminalNode } from './TerminalNode.js';
Expand Down Expand Up @@ -29,7 +30,7 @@ export class ErrorParameter extends SlangNode {

print(path: AstPath<ErrorParameter>, print: PrintFunction): Doc {
return joinExisting(' ', [
path.call(print, 'typeName'),
path.call(printVariant(print), 'typeName'),
path.call(print, 'name')
]);
}
Expand Down
3 changes: 2 additions & 1 deletion src/slang-nodes/EventParameter.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { joinExisting } from '../slang-utils/join-existing.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { TypeName } from './TypeName.js';
import { TerminalNode } from './TerminalNode.js';
Expand Down Expand Up @@ -32,7 +33,7 @@ export class EventParameter extends SlangNode {

print(path: AstPath<EventParameter>, print: PrintFunction): Doc {
return joinExisting(' ', [
path.call(print, 'typeName'),
path.call(printVariant(print), 'typeName'),
this.indexedKeyword,
path.call(print, 'name')
]);
Expand Down
3 changes: 2 additions & 1 deletion src/slang-nodes/ExperimentalPragma.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { ExperimentalFeature } from './ExperimentalFeature.js';

Expand All @@ -21,6 +22,6 @@ export class ExperimentalPragma extends SlangNode {
}

print(path: AstPath<ExperimentalPragma>, print: PrintFunction): Doc {
return ['experimental ', path.call(print, 'feature')];
return ['experimental ', path.call(printVariant(print), 'feature')];
}
}
3 changes: 2 additions & 1 deletion src/slang-nodes/ExpressionStatement.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Expression } from './Expression.js';

Expand All @@ -21,6 +22,6 @@ export class ExpressionStatement extends SlangNode {
}

print(path: AstPath<ExpressionStatement>, print: PrintFunction): Doc {
return [path.call(print, 'expression'), ';'];
return [path.call(printVariant(print), 'expression'), ';'];
}
}
4 changes: 2 additions & 2 deletions src/slang-nodes/FallbackFunctionDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printFunction } from '../slang-printers/print-function.js';
import { printFunctionWithBody } from '../slang-printers/print-function.js';
import { SlangNode } from './SlangNode.js';
import { ParametersDeclaration } from './ParametersDeclaration.js';
import { FallbackFunctionAttributes } from './FallbackFunctionAttributes.js';
Expand Down Expand Up @@ -57,6 +57,6 @@ export class FallbackFunctionDefinition extends SlangNode {
}

print(path: AstPath<FallbackFunctionDefinition>, print: PrintFunction): Doc {
return printFunction('fallback', this, path, print);
return printFunctionWithBody('fallback', this, path, print);
}
}
9 changes: 5 additions & 4 deletions src/slang-nodes/ForStatement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { printSeparatedList } from '../slang-printers/print-separated-list.js';
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { ForStatementInitialization } from './ForStatementInitialization.js';
import { ForStatementCondition } from './ForStatementCondition.js';
Expand Down Expand Up @@ -48,9 +49,9 @@ export class ForStatement extends SlangNode {
}

print(path: AstPath<ForStatement>, print: PrintFunction): Doc {
const initialization = path.call(print, 'initialization');
const condition = path.call(print, 'condition');
const iterator = path.call(print, 'iterator');
const initialization = path.call(printVariant(print), 'initialization');
const condition = path.call(printVariant(print), 'condition');
const iterator = path.call(printVariant(print), 'iterator');

return [
'for (',
Expand All @@ -62,7 +63,7 @@ export class ForStatement extends SlangNode {
}),
')',
printIndentedGroupOrSpacedDocument(
path.call(print, 'body'),
path.call(printVariant(print), 'body'),
this.body.variant.kind !== NonterminalKind.Block
)
];
Expand Down
5 changes: 3 additions & 2 deletions src/slang-nodes/FunctionCallExpression.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { doc } from 'prettier';
import { isLabel } from '../slang-utils/is-label.js';
import { printGroupAndIndentIfBreakPair } from '../slang-printers/print-group-and-indent-if-break-pair.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Expression } from './Expression.js';
import { ArgumentsDeclaration } from './ArgumentsDeclaration.js';
Expand Down Expand Up @@ -33,8 +34,8 @@ export class FunctionCallExpression extends SlangNode {
}

print(path: AstPath<FunctionCallExpression>, print: PrintFunction): Doc {
const operand = path.call(print, 'operand');
const argumentsDoc = path.call(print, 'arguments');
const operand = path.call(printVariant(print), 'operand');
const argumentsDoc = path.call(printVariant(print), 'arguments');

// If we are at the end of a MemberAccessChain we should indent the
// arguments accordingly.
Expand Down
7 changes: 4 additions & 3 deletions src/slang-nodes/FunctionDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { satisfies } from 'semver';
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printFunction } from '../slang-printers/print-function.js';
import { printFunctionWithBody } from '../slang-printers/print-function.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { FunctionName } from './FunctionName.js';
import { ParametersDeclaration } from './ParametersDeclaration.js';
Expand Down Expand Up @@ -64,8 +65,8 @@ export class FunctionDefinition extends SlangNode {
}

print(path: AstPath<FunctionDefinition>, print: PrintFunction): Doc {
return printFunction(
['function ', path.call(print, 'name')],
return printFunctionWithBody(
['function ', path.call(printVariant(print), 'name')],
this,
path,
print
Expand Down
5 changes: 3 additions & 2 deletions src/slang-nodes/IfStatement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { doc } from 'prettier';
import { printSeparatedItem } from '../slang-printers/print-separated-item.js';
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
import { isBlockComment } from '../slang-utils/is-comment.js';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { Expression } from './Expression.js';
import { Statement } from './Statement.js';
Expand Down Expand Up @@ -40,10 +41,10 @@ export class IfStatement extends SlangNode {
const { kind: bodyKind, comments: bodyComments } = this.body.variant;
return [
'if (',
printSeparatedItem(path.call(print, 'condition')),
printSeparatedItem(path.call(printVariant(print), 'condition')),
')',
printIndentedGroupOrSpacedDocument(
path.call(print, 'body'),
path.call(printVariant(print), 'body'),
bodyKind !== NonterminalKind.Block,
// `if` within `if`
{ shouldBreak: bodyKind === NonterminalKind.IfStatement }
Expand Down
3 changes: 2 additions & 1 deletion src/slang-nodes/ImportDirective.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NonterminalKind } from '@nomicfoundation/slang/cst';
import { printVariant } from '../slang-printers/print-variant.js';
import { SlangNode } from './SlangNode.js';
import { ImportClause } from './ImportClause.js';

Expand All @@ -21,6 +22,6 @@ export class ImportDirective extends SlangNode {
}

print(path: AstPath<ImportDirective>, print: PrintFunction): Doc {
return ['import ', path.call(print, 'clause'), ';'];
return ['import ', path.call(printVariant(print), 'clause'), ';'];
}
}
Loading
Loading