@@ -19,6 +19,59 @@ import type { AstPath, Doc, ParserOptions } from 'prettier';
1919import type { AstNode } from './types.d.ts' ;
2020import type { PrintFunction } from '../types.d.ts' ;
2121
22+ function createNonterminalVariant (
23+ variant : ast . ContractMember [ 'variant' ] ,
24+ options : ParserOptions < AstNode >
25+ ) : ContractMember [ 'variant' ] {
26+ switch ( variant . cst . kind ) {
27+ case NonterminalKind . UsingDirective :
28+ return new UsingDirective ( variant as ast . UsingDirective , options ) ;
29+ case NonterminalKind . FunctionDefinition :
30+ return new FunctionDefinition ( variant as ast . FunctionDefinition , options ) ;
31+ case NonterminalKind . ConstructorDefinition :
32+ return new ConstructorDefinition (
33+ variant as ast . ConstructorDefinition ,
34+ options
35+ ) ;
36+ case NonterminalKind . ReceiveFunctionDefinition :
37+ return new ReceiveFunctionDefinition (
38+ variant as ast . ReceiveFunctionDefinition ,
39+ options
40+ ) ;
41+ case NonterminalKind . FallbackFunctionDefinition :
42+ return new FallbackFunctionDefinition (
43+ variant as ast . FallbackFunctionDefinition ,
44+ options
45+ ) ;
46+ case NonterminalKind . UnnamedFunctionDefinition :
47+ return new UnnamedFunctionDefinition (
48+ variant as ast . UnnamedFunctionDefinition ,
49+ options
50+ ) ;
51+ case NonterminalKind . ModifierDefinition :
52+ return new ModifierDefinition ( variant as ast . ModifierDefinition , options ) ;
53+ case NonterminalKind . StructDefinition :
54+ return new StructDefinition ( variant as ast . StructDefinition , options ) ;
55+ case NonterminalKind . EnumDefinition :
56+ return new EnumDefinition ( variant as ast . EnumDefinition ) ;
57+ case NonterminalKind . EventDefinition :
58+ return new EventDefinition ( variant as ast . EventDefinition , options ) ;
59+ case NonterminalKind . StateVariableDefinition :
60+ return new StateVariableDefinition (
61+ variant as ast . StateVariableDefinition ,
62+ options
63+ ) ;
64+ case NonterminalKind . ErrorDefinition :
65+ return new ErrorDefinition ( variant as ast . ErrorDefinition , options ) ;
66+ case NonterminalKind . UserDefinedValueTypeDefinition :
67+ return new UserDefinedValueTypeDefinition (
68+ variant as ast . UserDefinedValueTypeDefinition
69+ ) ;
70+ default :
71+ throw new Error ( `Unexpected variant: ${ variant . cst . kind } ` ) ;
72+ }
73+ }
74+
2275export class ContractMember extends SlangNode {
2376 readonly kind = NonterminalKind . ContractMember ;
2477
@@ -40,86 +93,7 @@ export class ContractMember extends SlangNode {
4093 constructor ( ast : ast . ContractMember , options : ParserOptions < AstNode > ) {
4194 super ( ast ) ;
4295
43- const variant = ast . variant ;
44- const variantKind = variant . cst . kind ;
45- switch ( variantKind ) {
46- case NonterminalKind . UsingDirective :
47- this . variant = new UsingDirective (
48- variant as ast . UsingDirective ,
49- options
50- ) ;
51- break ;
52- case NonterminalKind . FunctionDefinition :
53- this . variant = new FunctionDefinition (
54- variant as ast . FunctionDefinition ,
55- options
56- ) ;
57- break ;
58- case NonterminalKind . ConstructorDefinition :
59- this . variant = new ConstructorDefinition (
60- variant as ast . ConstructorDefinition ,
61- options
62- ) ;
63- break ;
64- case NonterminalKind . ReceiveFunctionDefinition :
65- this . variant = new ReceiveFunctionDefinition (
66- variant as ast . ReceiveFunctionDefinition ,
67- options
68- ) ;
69- break ;
70- case NonterminalKind . FallbackFunctionDefinition :
71- this . variant = new FallbackFunctionDefinition (
72- variant as ast . FallbackFunctionDefinition ,
73- options
74- ) ;
75- break ;
76- case NonterminalKind . UnnamedFunctionDefinition :
77- this . variant = new UnnamedFunctionDefinition (
78- variant as ast . UnnamedFunctionDefinition ,
79- options
80- ) ;
81- break ;
82- case NonterminalKind . ModifierDefinition :
83- this . variant = new ModifierDefinition (
84- variant as ast . ModifierDefinition ,
85- options
86- ) ;
87- break ;
88- case NonterminalKind . StructDefinition :
89- this . variant = new StructDefinition (
90- variant as ast . StructDefinition ,
91- options
92- ) ;
93- break ;
94- case NonterminalKind . EnumDefinition :
95- this . variant = new EnumDefinition ( variant as ast . EnumDefinition ) ;
96- break ;
97- case NonterminalKind . EventDefinition :
98- this . variant = new EventDefinition (
99- variant as ast . EventDefinition ,
100- options
101- ) ;
102- break ;
103- case NonterminalKind . StateVariableDefinition :
104- this . variant = new StateVariableDefinition (
105- variant as ast . StateVariableDefinition ,
106- options
107- ) ;
108- break ;
109- case NonterminalKind . ErrorDefinition :
110- this . variant = new ErrorDefinition (
111- variant as ast . ErrorDefinition ,
112- options
113- ) ;
114- break ;
115- case NonterminalKind . UserDefinedValueTypeDefinition :
116- this . variant = new UserDefinedValueTypeDefinition (
117- variant as ast . UserDefinedValueTypeDefinition
118- ) ;
119- break ;
120- default :
121- throw new Error ( `Unexpected variant: ${ variantKind } ` ) ;
122- }
96+ this . variant = createNonterminalVariant ( ast . variant , options ) ;
12397
12498 this . updateMetadata ( this . variant ) ;
12599 }
0 commit comments