Skip to content

Commit 177a56f

Browse files
authored
removing function Attributes from the AST tree (#1276)
1 parent 12a067a commit 177a56f

24 files changed

+99
-70
lines changed

src/slang-nodes/ConstructorAttribute.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 { ModifierInvocation } from './ModifierInvocation.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 ConstructorAttribute extends PolymorphicNode {
13+
export class ConstructorAttribute extends SlangNode {
1414
readonly kind = NonterminalKind.ConstructorAttribute;
1515

1616
variant: ModifierInvocation | TerminalNode;

src/slang-nodes/ConstructorAttributes.ts

Lines changed: 5 additions & 5 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 { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.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 { ConstructorAttribute } from './ConstructorAttribute.js';
77

@@ -15,19 +15,19 @@ const { line } = doc.builders;
1515
export class ConstructorAttributes extends SlangNode {
1616
readonly kind = NonterminalKind.ConstructorAttributes;
1717

18-
items: ConstructorAttribute[];
18+
items: ConstructorAttribute['variant'][];
1919

2020
constructor(ast: ast.ConstructorAttributes, options: ParserOptions<AstNode>) {
2121
super(ast, true);
2222

23-
this.items = ast.items.map(
24-
(item) => new ConstructorAttribute(item, options)
23+
this.items = ast.items.map((item) =>
24+
extractVariant(new ConstructorAttribute(item, options))
2525
);
2626

2727
this.items.sort(sortFunctionAttributes);
2828
}
2929

3030
print(path: AstPath<ConstructorAttributes>, print: PrintFunction): Doc {
31-
return path.map(printVariant(print), 'items').map((item) => [line, item]);
31+
return path.map((item) => [line, print(item)], 'items');
3232
}
3333
}

src/slang-nodes/FallbackFunctionAttribute.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 { ModifierInvocation } from './ModifierInvocation.js';
88
import { OverrideSpecifier } from './OverrideSpecifier.js';
99
import { TerminalNode } from './TerminalNode.js';
@@ -25,7 +25,7 @@ function createNonterminalVariant(
2525
return exhaustiveCheck;
2626
}
2727

28-
export class FallbackFunctionAttribute extends PolymorphicNode {
28+
export class FallbackFunctionAttribute extends SlangNode {
2929
readonly kind = NonterminalKind.FallbackFunctionAttribute;
3030

3131
variant: ModifierInvocation | OverrideSpecifier | TerminalNode;

src/slang-nodes/FallbackFunctionAttributes.ts

Lines changed: 5 additions & 5 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 { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.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 { FallbackFunctionAttribute } from './FallbackFunctionAttribute.js';
77

@@ -15,22 +15,22 @@ const { line } = doc.builders;
1515
export class FallbackFunctionAttributes extends SlangNode {
1616
readonly kind = NonterminalKind.FallbackFunctionAttributes;
1717

18-
items: FallbackFunctionAttribute[];
18+
items: FallbackFunctionAttribute['variant'][];
1919

2020
constructor(
2121
ast: ast.FallbackFunctionAttributes,
2222
options: ParserOptions<AstNode>
2323
) {
2424
super(ast, true);
2525

26-
this.items = ast.items.map(
27-
(item) => new FallbackFunctionAttribute(item, options)
26+
this.items = ast.items.map((item) =>
27+
extractVariant(new FallbackFunctionAttribute(item, options))
2828
);
2929

3030
this.items.sort(sortFunctionAttributes);
3131
}
3232

3333
print(path: AstPath<FallbackFunctionAttributes>, print: PrintFunction): Doc {
34-
return path.map(printVariant(print), 'items').map((item) => [line, item]);
34+
return path.map((item) => [line, print(item)], 'items');
3535
}
3636
}

src/slang-nodes/FallbackFunctionDefinition.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class FallbackFunctionDefinition extends SlangNode {
4646
}
4747

4848
cleanModifierInvocationArguments(): void {
49-
for (const { variant: attribute } of this.attributes.items) {
49+
for (const attribute of this.attributes.items) {
5050
if (
5151
typeof attribute !== 'string' &&
5252
attribute.kind === NonterminalKind.ModifierInvocation

src/slang-nodes/FunctionAttribute.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 { ModifierInvocation } from './ModifierInvocation.js';
88
import { OverrideSpecifier } from './OverrideSpecifier.js';
99
import { TerminalNode } from './TerminalNode.js';
@@ -25,7 +25,7 @@ function createNonterminalVariant(
2525
return exhaustiveCheck;
2626
}
2727

28-
export class FunctionAttribute extends PolymorphicNode {
28+
export class FunctionAttribute extends SlangNode {
2929
readonly kind = NonterminalKind.FunctionAttribute;
3030

3131
variant: ModifierInvocation | OverrideSpecifier | TerminalNode;

src/slang-nodes/FunctionAttributes.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 { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.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 { FunctionAttribute } from './FunctionAttribute.js';
77

@@ -15,17 +15,19 @@ const { line } = doc.builders;
1515
export class FunctionAttributes extends SlangNode {
1616
readonly kind = NonterminalKind.FunctionAttributes;
1717

18-
items: FunctionAttribute[];
18+
items: FunctionAttribute['variant'][];
1919

2020
constructor(ast: ast.FunctionAttributes, options: ParserOptions<AstNode>) {
2121
super(ast, true);
2222

23-
this.items = ast.items.map((item) => new FunctionAttribute(item, options));
23+
this.items = ast.items.map((item) =>
24+
extractVariant(new FunctionAttribute(item, options))
25+
);
2426

2527
this.items.sort(sortFunctionAttributes);
2628
}
2729

2830
print(path: AstPath<FunctionAttributes>, print: PrintFunction): Doc {
29-
return path.map(printVariant(print), 'items').map((item) => [line, item]);
31+
return path.map((item) => [line, print(item)], 'items');
3032
}
3133
}

src/slang-nodes/FunctionDefinition.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export class FunctionDefinition extends SlangNode {
5454
}
5555

5656
cleanModifierInvocationArguments(): void {
57-
for (const { variant: attribute } of this.attributes.items) {
57+
for (const attribute of this.attributes.items) {
5858
if (
5959
typeof attribute !== 'string' &&
6060
attribute.kind === NonterminalKind.ModifierInvocation

src/slang-nodes/FunctionTypeAttribute.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { NonterminalKind } from '@nomicfoundation/slang/cst';
2-
import { PolymorphicNode } from './PolymorphicNode.js';
2+
import { SlangNode } from './SlangNode.js';
33
import { TerminalNode } from './TerminalNode.js';
44

55
import type * as ast from '@nomicfoundation/slang/ast';
66

7-
export class FunctionTypeAttribute extends PolymorphicNode {
7+
export class FunctionTypeAttribute extends SlangNode {
88
readonly kind = NonterminalKind.FunctionTypeAttribute;
99

1010
variant: TerminalNode;

src/slang-nodes/FunctionTypeAttributes.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 { sortFunctionAttributes } from '../slang-utils/sort-function-attributes.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 { FunctionTypeAttribute } from './FunctionTypeAttribute.js';
77

@@ -14,17 +14,19 @@ const { line } = doc.builders;
1414
export class FunctionTypeAttributes extends SlangNode {
1515
readonly kind = NonterminalKind.FunctionTypeAttributes;
1616

17-
items: FunctionTypeAttribute[];
17+
items: FunctionTypeAttribute['variant'][];
1818

1919
constructor(ast: ast.FunctionTypeAttributes) {
2020
super(ast, true);
2121

22-
this.items = ast.items.map((item) => new FunctionTypeAttribute(item));
22+
this.items = ast.items.map((item) =>
23+
extractVariant(new FunctionTypeAttribute(item))
24+
);
2325

2426
this.items.sort(sortFunctionAttributes);
2527
}
2628

2729
print(path: AstPath<FunctionTypeAttributes>, print: PrintFunction): Doc {
28-
return path.map(printVariant(print), 'items').map((item) => [line, item]);
30+
return path.map((item) => [line, print(item)], 'items');
2931
}
3032
}

0 commit comments

Comments
 (0)