Skip to content

Commit 3092584

Browse files
committed
removing ForStatementInitialization and ForStatementCondition from the AST tree
1 parent 3dfa407 commit 3092584

5 files changed

Lines changed: 18 additions & 14 deletions

File tree

src/slang-nodes/ForStatement.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { printSeparatedList } from '../slang-printers/print-separated-list.js';
44
import { printIndentedGroupOrSpacedDocument } from '../slang-printers/print-indented-group-or-spaced-document.js';
5-
import { printVariant } from '../slang-printers/print-variant.js';
65
import { extractVariant } from '../slang-utils/extract-variant.js';
76
import { SlangNode } from './SlangNode.js';
87
import { ForStatementInitialization } from './ForStatementInitialization.js';
@@ -20,9 +19,9 @@ const { line } = doc.builders;
2019
export class ForStatement extends SlangNode {
2120
readonly kind = NonterminalKind.ForStatement;
2221

23-
initialization: ForStatementInitialization;
22+
initialization: ForStatementInitialization['variant'];
2423

25-
condition: ForStatementCondition;
24+
condition: ForStatementCondition['variant'];
2625

2726
iterator?: Expression['variant'];
2827

@@ -31,11 +30,12 @@ export class ForStatement extends SlangNode {
3130
constructor(ast: ast.ForStatement, options: ParserOptions<AstNode>) {
3231
super(ast);
3332

34-
this.initialization = new ForStatementInitialization(
35-
ast.initialization,
36-
options
33+
this.initialization = extractVariant(
34+
new ForStatementInitialization(ast.initialization, options)
35+
);
36+
this.condition = extractVariant(
37+
new ForStatementCondition(ast.condition, options)
3738
);
38-
this.condition = new ForStatementCondition(ast.condition, options);
3939
if (ast.iterator) {
4040
this.iterator = extractVariant(new Expression(ast.iterator, options));
4141
}
@@ -50,8 +50,8 @@ export class ForStatement extends SlangNode {
5050
}
5151

5252
print(path: AstPath<ForStatement>, print: PrintFunction): Doc {
53-
const initialization = path.call(printVariant(print), 'initialization');
54-
const condition = path.call(printVariant(print), 'condition');
53+
const initialization = path.call(print, 'initialization');
54+
const condition = path.call(print, 'condition');
5555
const iterator = path.call(print, 'iterator');
5656

5757
return [

src/slang-nodes/ForStatementCondition.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ import {
22
NonterminalKind,
33
TerminalNode as SlangTerminalNode
44
} from '@nomicfoundation/slang/cst';
5-
import { PolymorphicNode } from './PolymorphicNode.js';
5+
import { SlangNode } from './SlangNode.js';
66
import { ExpressionStatement } from './ExpressionStatement.js';
77
import { TerminalNode } from './TerminalNode.js';
88

99
import type * as ast from '@nomicfoundation/slang/ast';
1010
import type { ParserOptions } from 'prettier';
1111
import type { AstNode } from './types.d.ts';
1212

13-
export class ForStatementCondition extends PolymorphicNode {
13+
export class ForStatementCondition extends SlangNode {
1414
readonly kind = NonterminalKind.ForStatementCondition;
1515

1616
variant: ExpressionStatement | TerminalNode;

src/slang-nodes/ForStatementInitialization.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
NonterminalKind,
44
TerminalNode as SlangTerminalNode
55
} from '@nomicfoundation/slang/cst';
6-
import { PolymorphicNode } from './PolymorphicNode.js';
6+
import { SlangNode } from './SlangNode.js';
77
import { ExpressionStatement } from './ExpressionStatement.js';
88
import { VariableDeclarationStatement } from './VariableDeclarationStatement.js';
99
import { TupleDeconstructionStatement } from './TupleDeconstructionStatement.js';
@@ -32,7 +32,7 @@ function createNonterminalVariant(
3232
return exhaustiveCheck;
3333
}
3434

35-
export class ForStatementInitialization extends PolymorphicNode {
35+
export class ForStatementInitialization extends SlangNode {
3636
readonly kind = NonterminalKind.ForStatementInitialization;
3737

3838
variant:

src/slang-printers/print-binary-operation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const shouldNotIndent = (
3838
isStatementWithoutIndentedOperation(node) ||
3939
(node.kind === NonterminalKind.ExpressionStatement &&
4040
(path.getNode(index + 1) as StrictAstNode).kind ===
41-
NonterminalKind.ForStatementCondition);
41+
NonterminalKind.ForStatement);
4242

4343
export const binaryIndentRulesBuilder =
4444
(shouldIndent: (node: BinaryOperation) => boolean) =>

src/slangPrinter.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import type { ContractSpecifier } from './slang-nodes/ContractSpecifier.js';
2121
import type { ElementaryType } from './slang-nodes/ElementaryType.js';
2222
import type { ExperimentalFeature } from './slang-nodes/ExperimentalFeature.js';
2323
import type { Expression } from './slang-nodes/Expression.js';
24+
import type { ForStatementInitialization } from './slang-nodes/ForStatementInitialization.js';
25+
import type { ForStatementCondition } from './slang-nodes/ForStatementCondition.js';
2426

2527
function hasNodeIgnoreComment({ comments }: StrictAstNode): boolean {
2628
// Prettier sets SourceUnit's comments to undefined after assigning comments
@@ -90,6 +92,8 @@ function genericPrint(
9092
| ElementaryType
9193
| ExperimentalFeature
9294
| Expression
95+
| ForStatementInitialization
96+
| ForStatementCondition
9397
>
9498
>,
9599
options: ParserOptions<AstNode>,

0 commit comments

Comments
 (0)