Skip to content

Commit 61fd835

Browse files
committed
removing ContractSpecifier from the AST tree
1 parent ff2ac6c commit 61fd835

7 files changed

Lines changed: 19 additions & 20 deletions

File tree

src/slang-comments/handlers/handle-contract-definition-comments.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export default function handleContractDefinitionComments({
4848
return true;
4949
}
5050
const lastContractSpecifier =
51-
precedingNode.items[precedingNode.items.length - 1].variant;
51+
precedingNode.items[precedingNode.items.length - 1];
5252
// If the last ContractSpecifier's an InheritanceSpecifier, the comment
5353
// is appended to the last InheritanceType.
5454
if (lastContractSpecifier.kind === NonterminalKind.InheritanceSpecifier) {

src/slang-comments/handlers/handle-contract-specifiers-comments.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,13 @@ export default function handleContractSpecifiersComments({
1515
return false;
1616
}
1717

18-
if (
19-
precedingNode &&
20-
precedingNode.kind === NonterminalKind.ContractSpecifier
21-
) {
22-
if (precedingNode.variant.kind === NonterminalKind.InheritanceSpecifier) {
23-
addCollectionLastComment(precedingNode.variant.types, comment);
18+
if (precedingNode) {
19+
if (precedingNode.kind === NonterminalKind.InheritanceSpecifier) {
20+
addCollectionLastComment(precedingNode.types, comment);
2421
return true;
2522
}
26-
if (precedingNode.variant.kind === NonterminalKind.StorageLayoutSpecifier) {
27-
addTrailingComment(precedingNode.variant.expression, comment);
23+
if (precedingNode.kind === NonterminalKind.StorageLayoutSpecifier) {
24+
addTrailingComment(precedingNode.expression, comment);
2825
return true;
2926
}
3027
}

src/slang-nodes/ContractSpecifier.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 { InheritanceSpecifier } from './InheritanceSpecifier.js';
55
import { StorageLayoutSpecifier } from './StorageLayoutSpecifier.js';
66

@@ -21,7 +21,7 @@ function createNonterminalVariant(
2121
return exhaustiveCheck;
2222
}
2323

24-
export class ContractSpecifier extends PolymorphicNode {
24+
export class ContractSpecifier extends SlangNode {
2525
readonly kind = NonterminalKind.ContractSpecifier;
2626

2727
variant: InheritanceSpecifier | StorageLayoutSpecifier;

src/slang-nodes/ContractSpecifiers.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
22
import { doc } from 'prettier';
33
import { sortContractSpecifiers } from '../slang-utils/sort-contract-specifiers.js';
44
import { printSeparatedList } from '../slang-printers/print-separated-list.js';
5-
import { printVariant } from '../slang-printers/print-variant.js';
5+
import { extractVariant } from '../slang-utils/extract-variant.js';
66
import { SlangNode } from './SlangNode.js';
77
import { ContractSpecifier } from './ContractSpecifier.js';
88

@@ -16,18 +16,20 @@ const { group, ifBreak, line, softline } = doc.builders;
1616
export class ContractSpecifiers extends SlangNode {
1717
readonly kind = NonterminalKind.ContractSpecifiers;
1818

19-
items: ContractSpecifier[];
19+
items: ContractSpecifier['variant'][];
2020

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

24-
this.items = ast.items.map((item) => new ContractSpecifier(item, options));
24+
this.items = ast.items.map((item) =>
25+
extractVariant(new ContractSpecifier(item, options))
26+
);
2527

2628
this.items.sort(sortContractSpecifiers);
2729
}
2830

2931
print(path: AstPath<ContractSpecifiers>, print: PrintFunction): Doc {
30-
const [specifier1, specifier2] = path.map(printVariant(print), 'items');
32+
const [specifier1, specifier2] = path.map(print, 'items');
3133

3234
if (specifier1 === undefined) return '';
3335

src/slang-nodes/StorageLayoutSpecifier.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,7 @@ export class StorageLayoutSpecifier extends SlangNode {
3535
firstSeparator: line,
3636
// If this is the second ContractSpecifier we have to delegate printing
3737
// the line to the ContractSpecifiers node.
38-
lastSeparator: path.callParent((parentPath) => parentPath.isFirst)
39-
? line
40-
: ''
38+
lastSeparator: path.isFirst ? line : ''
4139
})
4240
];
4341
}

src/slang-utils/sort-contract-specifiers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { NonterminalKind } from '@nomicfoundation/slang/cst';
33
import type { ContractSpecifier } from '../slang-nodes/ContractSpecifier.ts';
44

55
export function sortContractSpecifiers(
6-
{ variant: { kind: aKind } }: ContractSpecifier,
7-
{ variant: { kind: bKind } }: ContractSpecifier
6+
{ kind: aKind }: ContractSpecifier['variant'],
7+
{ kind: bKind }: ContractSpecifier['variant']
88
): number {
99
// OverrideSpecifiers before ModifierInvocation
1010
if (

src/slangPrinter.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import type { ContractMember } from './slang-nodes/ContractMember.js';
1717
import type { SourceUnitMember } from './slang-nodes/SourceUnitMember.js';
1818
import type { Statement } from './slang-nodes/Statement.js';
1919
import type { YulStatement } from './slang-nodes/YulStatement.js';
20+
import type { ContractSpecifier } from './slang-nodes/ContractSpecifier.js';
2021

2122
function hasNodeIgnoreComment({ comments }: StrictAstNode): boolean {
2223
// Prettier sets SourceUnit's comments to undefined after assigning comments
@@ -82,6 +83,7 @@ function genericPrint(
8283
| SourceUnitMember
8384
| Statement
8485
| YulStatement
86+
| ContractSpecifier
8587
>
8688
>,
8789
options: ParserOptions<AstNode>,

0 commit comments

Comments
 (0)