Skip to content

Commit badb2cf

Browse files
committed
removing UsingClause, UsingTarget, VariableDeclarationType, VersionExpression, and VersionLiteral from the AST tree
1 parent 53ed705 commit badb2cf

11 files changed

Lines changed: 49 additions & 42 deletions

src/slang-nodes/UsingClause.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as ast from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
3-
import { PolymorphicNode } from './PolymorphicNode.js';
3+
import { SlangNode } from './SlangNode.js';
44
import { IdentifierPath } from './IdentifierPath.js';
55
import { UsingDeconstruction } from './UsingDeconstruction.js';
66

@@ -17,7 +17,7 @@ function createNonterminalVariant(
1717
return exhaustiveCheck;
1818
}
1919

20-
export class UsingClause extends PolymorphicNode {
20+
export class UsingClause extends SlangNode {
2121
readonly kind = NonterminalKind.UsingClause;
2222

2323
variant: IdentifierPath | UsingDeconstruction;

src/slang-nodes/UsingDirective.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { printVariant } from '../slang-printers/print-variant.js';
2+
import { extractVariant } from '../slang-utils/extract-variant.js';
33
import { SlangNode } from './SlangNode.js';
44
import { UsingClause } from './UsingClause.js';
55
import { UsingTarget } from './UsingTarget.js';
@@ -12,17 +12,17 @@ import type { AstNode } from './types.d.ts';
1212
export class UsingDirective extends SlangNode {
1313
readonly kind = NonterminalKind.UsingDirective;
1414

15-
clause: UsingClause;
15+
clause: UsingClause['variant'];
1616

17-
target: UsingTarget;
17+
target: UsingTarget['variant'];
1818

1919
globalKeyword?: string;
2020

2121
constructor(ast: ast.UsingDirective, options: ParserOptions<AstNode>) {
2222
super(ast);
2323

24-
this.clause = new UsingClause(ast.clause);
25-
this.target = new UsingTarget(ast.target, options);
24+
this.clause = extractVariant(new UsingClause(ast.clause));
25+
this.target = extractVariant(new UsingTarget(ast.target, options));
2626
this.globalKeyword = ast.globalKeyword?.unparse();
2727

2828
this.updateMetadata(this.clause, this.target);
@@ -31,9 +31,9 @@ export class UsingDirective extends SlangNode {
3131
print(path: AstPath<UsingDirective>, print: PrintFunction): Doc {
3232
return [
3333
'using ',
34-
path.call(printVariant(print), 'clause'),
34+
path.call(print, 'clause'),
3535
' for ',
36-
path.call(printVariant(print), 'target'),
36+
path.call(print, 'target'),
3737
this.globalKeyword ? ' global;' : ';'
3838
];
3939
}

src/slang-nodes/UsingTarget.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import {
33
TerminalNode as SlangTerminalNode
44
} from '@nomicfoundation/slang/cst';
55
import { extractVariant } from '../slang-utils/extract-variant.js';
6-
import { PolymorphicNode } from './PolymorphicNode.js';
6+
import { SlangNode } from './SlangNode.js';
77
import { TypeName } from './TypeName.js';
88
import { TerminalNode } from './TerminalNode.js';
99

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

14-
export class UsingTarget extends PolymorphicNode {
14+
export class UsingTarget extends SlangNode {
1515
readonly kind = NonterminalKind.UsingTarget;
1616

1717
variant: TypeName['variant'] | TerminalNode;

src/slang-nodes/VariableDeclarationStatement.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { printGroupAndIndentIfBreakPair } from '../slang-printers/print-group-and-indent-if-break-pair.js';
4-
import { printVariant } from '../slang-printers/print-variant.js';
4+
import { extractVariant } from '../slang-utils/extract-variant.js';
55
import { SlangNode } from './SlangNode.js';
66
import { VariableDeclarationType } from './VariableDeclarationType.js';
77
import { StorageLocation } from './StorageLocation.js';
@@ -18,7 +18,7 @@ const { indent, line } = doc.builders;
1818
export class VariableDeclarationStatement extends SlangNode {
1919
readonly kind = NonterminalKind.VariableDeclarationStatement;
2020

21-
variableType: VariableDeclarationType;
21+
variableType: VariableDeclarationType['variant'];
2222

2323
storageLocation?: StorageLocation;
2424

@@ -32,7 +32,9 @@ export class VariableDeclarationStatement extends SlangNode {
3232
) {
3333
super(ast);
3434

35-
this.variableType = new VariableDeclarationType(ast.variableType, options);
35+
this.variableType = extractVariant(
36+
new VariableDeclarationType(ast.variableType, options)
37+
);
3638
if (ast.storageLocation) {
3739
this.storageLocation = new StorageLocation(ast.storageLocation);
3840
}
@@ -50,7 +52,7 @@ export class VariableDeclarationStatement extends SlangNode {
5052
): Doc {
5153
return printGroupAndIndentIfBreakPair(
5254
[
53-
path.call(printVariant(print), 'variableType'),
55+
path.call(print, 'variableType'),
5456
this.storageLocation
5557
? indent([line, path.call(print, 'storageLocation')])
5658
: '',

src/slang-nodes/VariableDeclarationType.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import {
33
TerminalNode as SlangTerminalNode
44
} from '@nomicfoundation/slang/cst';
55
import { extractVariant } from '../slang-utils/extract-variant.js';
6-
import { PolymorphicNode } from './PolymorphicNode.js';
6+
import { SlangNode } from './SlangNode.js';
77
import { TypeName } from './TypeName.js';
88
import { TerminalNode } from './TerminalNode.js';
99

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

14-
export class VariableDeclarationType extends PolymorphicNode {
14+
export class VariableDeclarationType extends SlangNode {
1515
readonly kind = NonterminalKind.VariableDeclarationType;
1616

1717
variant: TypeName['variant'] | TerminalNode;

src/slang-nodes/VersionExpression.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as ast from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
3-
import { PolymorphicNode } from './PolymorphicNode.js';
3+
import { SlangNode } from './SlangNode.js';
44
import { VersionRange } from './VersionRange.js';
55
import { VersionTerm } from './VersionTerm.js';
66

@@ -17,7 +17,7 @@ function createNonterminalVariant(
1717
return exhaustiveCheck;
1818
}
1919

20-
export class VersionExpression extends PolymorphicNode {
20+
export class VersionExpression extends SlangNode {
2121
readonly kind = NonterminalKind.VersionExpression;
2222

2323
variant: VersionRange | VersionTerm;

src/slang-nodes/VersionExpressionSet.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
3-
import { printVariant } from '../slang-printers/print-variant.js';
3+
import { extractVariant } from '../slang-utils/extract-variant.js';
44
import { SlangNode } from './SlangNode.js';
55
import { VersionExpression } from './VersionExpression.js';
66

@@ -13,15 +13,17 @@ const { join } = doc.builders;
1313
export class VersionExpressionSet extends SlangNode {
1414
readonly kind = NonterminalKind.VersionExpressionSet;
1515

16-
items: VersionExpression[];
16+
items: VersionExpression['variant'][];
1717

1818
constructor(ast: ast.VersionExpressionSet) {
1919
super(ast, true);
2020

21-
this.items = ast.items.map((item) => new VersionExpression(item));
21+
this.items = ast.items.map((item) =>
22+
extractVariant(new VersionExpression(item))
23+
);
2224
}
2325

2426
print(path: AstPath<VersionExpressionSet>, print: PrintFunction): Doc {
25-
return join(' ', path.map(printVariant(print), 'items'));
27+
return join(' ', path.map(print, 'items'));
2628
}
2729
}

src/slang-nodes/VersionLiteral.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ 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 { SimpleVersionLiteral } from './SimpleVersionLiteral.js';
77
import { TerminalNode } from './TerminalNode.js';
88

99
import type * as ast from '@nomicfoundation/slang/ast';
1010

11-
export class VersionLiteral extends PolymorphicNode {
11+
export class VersionLiteral extends SlangNode {
1212
readonly kind = NonterminalKind.VersionLiteral;
1313

1414
variant: SimpleVersionLiteral | TerminalNode;

src/slang-nodes/VersionRange.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { printVariant } from '../slang-printers/print-variant.js';
2+
import { extractVariant } from '../slang-utils/extract-variant.js';
33
import { SlangNode } from './SlangNode.js';
44
import { VersionLiteral } from './VersionLiteral.js';
55

@@ -10,24 +10,20 @@ import type { PrintFunction } from '../types.d.ts';
1010
export class VersionRange extends SlangNode {
1111
readonly kind = NonterminalKind.VersionRange;
1212

13-
start: VersionLiteral;
13+
start: VersionLiteral['variant'];
1414

15-
end: VersionLiteral;
15+
end: VersionLiteral['variant'];
1616

1717
constructor(ast: ast.VersionRange) {
1818
super(ast);
1919

20-
this.start = new VersionLiteral(ast.start);
21-
this.end = new VersionLiteral(ast.end);
20+
this.start = extractVariant(new VersionLiteral(ast.start));
21+
this.end = extractVariant(new VersionLiteral(ast.end));
2222

2323
this.updateMetadata(this.start, this.end);
2424
}
2525

2626
print(path: AstPath<VersionRange>, print: PrintFunction): Doc {
27-
return [
28-
path.call(printVariant(print), 'start'),
29-
' - ',
30-
path.call(printVariant(print), 'end')
31-
];
27+
return [path.call(print, 'start'), ' - ', path.call(print, 'end')];
3228
}
3329
}

src/slang-nodes/VersionTerm.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { printVariant } from '../slang-printers/print-variant.js';
2+
import { extractVariant } from '../slang-utils/extract-variant.js';
33
import { SlangNode } from './SlangNode.js';
44
import { VersionOperator } from './VersionOperator.js';
55
import { VersionLiteral } from './VersionLiteral.js';
@@ -13,23 +13,20 @@ export class VersionTerm extends SlangNode {
1313

1414
operator?: VersionOperator;
1515

16-
literal: VersionLiteral;
16+
literal: VersionLiteral['variant'];
1717

1818
constructor(ast: ast.VersionTerm) {
1919
super(ast);
2020

2121
if (ast.operator) {
2222
this.operator = new VersionOperator(ast.operator);
2323
}
24-
this.literal = new VersionLiteral(ast.literal);
24+
this.literal = extractVariant(new VersionLiteral(ast.literal));
2525

2626
this.updateMetadata(this.operator, this.literal);
2727
}
2828

2929
print(path: AstPath<VersionTerm>, print: PrintFunction): Doc {
30-
return [
31-
path.call(print, 'operator'),
32-
path.call(printVariant(print), 'literal')
33-
];
30+
return [path.call(print, 'operator'), path.call(print, 'literal')];
3431
}
3532
}

0 commit comments

Comments
 (0)