Skip to content

Commit 2305016

Browse files
committed
adding coverage for all cases only on test environment
1 parent 1043a9a commit 2305016

22 files changed

Lines changed: 444 additions & 157 deletions

src/slang-nodes/ArgumentsDeclaration.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
33
import { createNonterminalVariantSimpleCreator } from '../slang-utils/create-nonterminal-variant-creator.js';
44
import { SlangNode } from './SlangNode.js';
@@ -10,11 +10,11 @@ import type { CollectedMetadata } from '../types.d.ts';
1010
import type { AstNode } from './types.d.ts';
1111

1212
const createNonterminalVariant = createNonterminalVariantSimpleCreator<
13-
ast.ArgumentsDeclaration,
13+
slangAst.ArgumentsDeclaration,
1414
ArgumentsDeclaration
1515
>([
16-
[ast.PositionalArgumentsDeclaration, PositionalArgumentsDeclaration],
17-
[ast.NamedArgumentsDeclaration, NamedArgumentsDeclaration]
16+
[slangAst.PositionalArgumentsDeclaration, PositionalArgumentsDeclaration],
17+
[slangAst.NamedArgumentsDeclaration, NamedArgumentsDeclaration]
1818
]);
1919

2020
export class ArgumentsDeclaration extends SlangNode {
@@ -23,12 +23,21 @@ export class ArgumentsDeclaration extends SlangNode {
2323
variant: PositionalArgumentsDeclaration | NamedArgumentsDeclaration;
2424

2525
constructor(
26-
ast: ast.ArgumentsDeclaration,
26+
ast: slangAst.ArgumentsDeclaration,
2727
collected: CollectedMetadata,
2828
options: ParserOptions<AstNode>
2929
) {
3030
super(ast, collected);
3131

32+
if (process.env.NODE_ENV === 'test') {
33+
// This is to ensure that we have handled all variants of
34+
// `ArgumentsDeclaration` in the `createNonterminalVariant` function
35+
// above.
36+
((variant: slangAst.ArgumentsDeclaration['variant']): void => {
37+
if (variant instanceof slangAst.PositionalArgumentsDeclaration) return;
38+
if (variant instanceof slangAst.NamedArgumentsDeclaration) return;
39+
})(ast.variant);
40+
}
3241
this.variant = createNonterminalVariant(ast.variant, collected, options);
3342

3443
this.updateMetadata(this.variant);

src/slang-nodes/ContractMember.ts

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
33
import { createNonterminalVariantSimpleCreator } from '../slang-utils/create-nonterminal-variant-creator.js';
44
import { SlangNode } from './SlangNode.js';
@@ -21,22 +21,22 @@ import type { CollectedMetadata } from '../types.d.ts';
2121
import type { AstNode } from './types.d.ts';
2222

2323
const createNonterminalVariant = createNonterminalVariantSimpleCreator<
24-
ast.ContractMember,
24+
slangAst.ContractMember,
2525
ContractMember
2626
>([
27-
[ast.UsingDirective, UsingDirective],
28-
[ast.FunctionDefinition, FunctionDefinition],
29-
[ast.ConstructorDefinition, ConstructorDefinition],
30-
[ast.ReceiveFunctionDefinition, ReceiveFunctionDefinition],
31-
[ast.FallbackFunctionDefinition, FallbackFunctionDefinition],
32-
[ast.UnnamedFunctionDefinition, UnnamedFunctionDefinition],
33-
[ast.ModifierDefinition, ModifierDefinition],
34-
[ast.StructDefinition, StructDefinition],
35-
[ast.EnumDefinition, EnumDefinition],
36-
[ast.EventDefinition, EventDefinition],
37-
[ast.StateVariableDefinition, StateVariableDefinition],
38-
[ast.ErrorDefinition, ErrorDefinition],
39-
[ast.UserDefinedValueTypeDefinition, UserDefinedValueTypeDefinition]
27+
[slangAst.UsingDirective, UsingDirective],
28+
[slangAst.FunctionDefinition, FunctionDefinition],
29+
[slangAst.ConstructorDefinition, ConstructorDefinition],
30+
[slangAst.ReceiveFunctionDefinition, ReceiveFunctionDefinition],
31+
[slangAst.FallbackFunctionDefinition, FallbackFunctionDefinition],
32+
[slangAst.UnnamedFunctionDefinition, UnnamedFunctionDefinition],
33+
[slangAst.ModifierDefinition, ModifierDefinition],
34+
[slangAst.StructDefinition, StructDefinition],
35+
[slangAst.EnumDefinition, EnumDefinition],
36+
[slangAst.EventDefinition, EventDefinition],
37+
[slangAst.StateVariableDefinition, StateVariableDefinition],
38+
[slangAst.ErrorDefinition, ErrorDefinition],
39+
[slangAst.UserDefinedValueTypeDefinition, UserDefinedValueTypeDefinition]
4040
]);
4141

4242
export class ContractMember extends SlangNode {
@@ -58,12 +58,31 @@ export class ContractMember extends SlangNode {
5858
| UserDefinedValueTypeDefinition;
5959

6060
constructor(
61-
ast: ast.ContractMember,
61+
ast: slangAst.ContractMember,
6262
collected: CollectedMetadata,
6363
options: ParserOptions<AstNode>
6464
) {
6565
super(ast, collected);
6666

67+
if (process.env.NODE_ENV === 'test') {
68+
// This is to ensure that we have handled all variants of
69+
// `ContractMember` in the `createNonterminalVariant` function above.
70+
((variant: slangAst.ContractMember['variant']): void => {
71+
if (variant instanceof slangAst.UsingDirective) return;
72+
if (variant instanceof slangAst.FunctionDefinition) return;
73+
if (variant instanceof slangAst.ConstructorDefinition) return;
74+
if (variant instanceof slangAst.ReceiveFunctionDefinition) return;
75+
if (variant instanceof slangAst.FallbackFunctionDefinition) return;
76+
if (variant instanceof slangAst.UnnamedFunctionDefinition) return;
77+
if (variant instanceof slangAst.ModifierDefinition) return;
78+
if (variant instanceof slangAst.StructDefinition) return;
79+
if (variant instanceof slangAst.EnumDefinition) return;
80+
if (variant instanceof slangAst.EventDefinition) return;
81+
if (variant instanceof slangAst.StateVariableDefinition) return;
82+
if (variant instanceof slangAst.ErrorDefinition) return;
83+
if (variant instanceof slangAst.UserDefinedValueTypeDefinition) return;
84+
})(ast.variant);
85+
}
6786
this.variant = createNonterminalVariant(ast.variant, collected, options);
6887

6988
this.updateMetadata(this.variant);

src/slang-nodes/ContractSpecifier.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import { NonterminalKind } from '@nomicfoundation/slang/cst';
33
import { createNonterminalVariantSimpleCreator } from '../slang-utils/create-nonterminal-variant-creator.js';
44
import { SlangNode } from './SlangNode.js';
@@ -10,11 +10,11 @@ import type { CollectedMetadata } from '../types.d.ts';
1010
import type { AstNode } from './types.d.ts';
1111

1212
const createNonterminalVariant = createNonterminalVariantSimpleCreator<
13-
ast.ContractSpecifier,
13+
slangAst.ContractSpecifier,
1414
ContractSpecifier
1515
>([
16-
[ast.InheritanceSpecifier, InheritanceSpecifier],
17-
[ast.StorageLayoutSpecifier, StorageLayoutSpecifier]
16+
[slangAst.InheritanceSpecifier, InheritanceSpecifier],
17+
[slangAst.StorageLayoutSpecifier, StorageLayoutSpecifier]
1818
]);
1919

2020
export class ContractSpecifier extends SlangNode {
@@ -23,12 +23,20 @@ export class ContractSpecifier extends SlangNode {
2323
variant: InheritanceSpecifier | StorageLayoutSpecifier;
2424

2525
constructor(
26-
ast: ast.ContractSpecifier,
26+
ast: slangAst.ContractSpecifier,
2727
collected: CollectedMetadata,
2828
options: ParserOptions<AstNode>
2929
) {
3030
super(ast, collected);
3131

32+
if (process.env.NODE_ENV === 'test') {
33+
// This is to ensure that we have handled all variants of
34+
// `ContractSpecifier` in the `createNonterminalVariant` function above.
35+
((variant: slangAst.ContractSpecifier['variant']): void => {
36+
if (variant instanceof slangAst.InheritanceSpecifier) return;
37+
if (variant instanceof slangAst.StorageLayoutSpecifier) return;
38+
})(ast.variant);
39+
}
3240
this.variant = createNonterminalVariant(ast.variant, collected, options);
3341

3442
this.updateMetadata(this.variant);

src/slang-nodes/Expression.ts

Lines changed: 65 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import {
33
NonterminalKind,
44
TerminalNode as SlangTerminalNode
@@ -39,39 +39,39 @@ import type { CollectedMetadata } from '../types.d.ts';
3939
import type { AstNode } from './types.d.ts';
4040

4141
const createNonterminalVariant = createNonterminalVariantCreator<
42-
ast.Expression,
42+
slangAst.Expression,
4343
Expression
4444
>(
4545
[
46-
[ast.AssignmentExpression, AssignmentExpression],
47-
[ast.ConditionalExpression, ConditionalExpression],
48-
[ast.OrExpression, OrExpression],
49-
[ast.AndExpression, AndExpression],
50-
[ast.EqualityExpression, EqualityExpression],
51-
[ast.InequalityExpression, InequalityExpression],
52-
[ast.BitwiseOrExpression, BitwiseOrExpression],
53-
[ast.BitwiseXorExpression, BitwiseXorExpression],
54-
[ast.BitwiseAndExpression, BitwiseAndExpression],
55-
[ast.ShiftExpression, ShiftExpression],
56-
[ast.AdditiveExpression, AdditiveExpression],
57-
[ast.MultiplicativeExpression, MultiplicativeExpression],
58-
[ast.ExponentiationExpression, ExponentiationExpression],
59-
[ast.PostfixExpression, PostfixExpression],
60-
[ast.PrefixExpression, PrefixExpression],
61-
[ast.FunctionCallExpression, FunctionCallExpression],
62-
[ast.CallOptionsExpression, CallOptionsExpression],
63-
[ast.MemberAccessExpression, MemberAccessExpression],
64-
[ast.IndexAccessExpression, IndexAccessExpression],
65-
[ast.NewExpression, NewExpression],
66-
[ast.TupleExpression, TupleExpression],
67-
[ast.TypeExpression, TypeExpression],
68-
[ast.ArrayExpression, ArrayExpression],
69-
[ast.HexNumberExpression, HexNumberExpression],
70-
[ast.DecimalNumberExpression, DecimalNumberExpression]
46+
[slangAst.AssignmentExpression, AssignmentExpression],
47+
[slangAst.ConditionalExpression, ConditionalExpression],
48+
[slangAst.OrExpression, OrExpression],
49+
[slangAst.AndExpression, AndExpression],
50+
[slangAst.EqualityExpression, EqualityExpression],
51+
[slangAst.InequalityExpression, InequalityExpression],
52+
[slangAst.BitwiseOrExpression, BitwiseOrExpression],
53+
[slangAst.BitwiseXorExpression, BitwiseXorExpression],
54+
[slangAst.BitwiseAndExpression, BitwiseAndExpression],
55+
[slangAst.ShiftExpression, ShiftExpression],
56+
[slangAst.AdditiveExpression, AdditiveExpression],
57+
[slangAst.MultiplicativeExpression, MultiplicativeExpression],
58+
[slangAst.ExponentiationExpression, ExponentiationExpression],
59+
[slangAst.PostfixExpression, PostfixExpression],
60+
[slangAst.PrefixExpression, PrefixExpression],
61+
[slangAst.FunctionCallExpression, FunctionCallExpression],
62+
[slangAst.CallOptionsExpression, CallOptionsExpression],
63+
[slangAst.MemberAccessExpression, MemberAccessExpression],
64+
[slangAst.IndexAccessExpression, IndexAccessExpression],
65+
[slangAst.NewExpression, NewExpression],
66+
[slangAst.TupleExpression, TupleExpression],
67+
[slangAst.TypeExpression, TypeExpression],
68+
[slangAst.ArrayExpression, ArrayExpression],
69+
[slangAst.HexNumberExpression, HexNumberExpression],
70+
[slangAst.DecimalNumberExpression, DecimalNumberExpression]
7171
],
7272
[
73-
[ast.StringExpression, StringExpression],
74-
[ast.ElementaryType, ElementaryType]
73+
[slangAst.StringExpression, StringExpression],
74+
[slangAst.ElementaryType, ElementaryType]
7575
]
7676
);
7777

@@ -109,7 +109,7 @@ export class Expression extends SlangNode {
109109
| TerminalNode;
110110

111111
constructor(
112-
ast: ast.Expression,
112+
ast: slangAst.Expression,
113113
collected: CollectedMetadata,
114114
options: ParserOptions<AstNode>
115115
) {
@@ -120,6 +120,41 @@ export class Expression extends SlangNode {
120120
this.variant = new TerminalNode(variant, collected);
121121
return;
122122
}
123+
if (process.env.NODE_ENV === 'test') {
124+
// This is to ensure that we have handled all variants of
125+
// `Expression` in the `createNonterminalVariant` function above.
126+
((
127+
variant: Exclude<slangAst.Expression['variant'], SlangTerminalNode>
128+
): void => {
129+
if (variant instanceof slangAst.AssignmentExpression) return;
130+
if (variant instanceof slangAst.ConditionalExpression) return;
131+
if (variant instanceof slangAst.OrExpression) return;
132+
if (variant instanceof slangAst.AndExpression) return;
133+
if (variant instanceof slangAst.EqualityExpression) return;
134+
if (variant instanceof slangAst.InequalityExpression) return;
135+
if (variant instanceof slangAst.BitwiseOrExpression) return;
136+
if (variant instanceof slangAst.BitwiseXorExpression) return;
137+
if (variant instanceof slangAst.BitwiseAndExpression) return;
138+
if (variant instanceof slangAst.ShiftExpression) return;
139+
if (variant instanceof slangAst.AdditiveExpression) return;
140+
if (variant instanceof slangAst.MultiplicativeExpression) return;
141+
if (variant instanceof slangAst.ExponentiationExpression) return;
142+
if (variant instanceof slangAst.PostfixExpression) return;
143+
if (variant instanceof slangAst.PrefixExpression) return;
144+
if (variant instanceof slangAst.FunctionCallExpression) return;
145+
if (variant instanceof slangAst.CallOptionsExpression) return;
146+
if (variant instanceof slangAst.MemberAccessExpression) return;
147+
if (variant instanceof slangAst.IndexAccessExpression) return;
148+
if (variant instanceof slangAst.NewExpression) return;
149+
if (variant instanceof slangAst.TupleExpression) return;
150+
if (variant instanceof slangAst.TypeExpression) return;
151+
if (variant instanceof slangAst.ArrayExpression) return;
152+
if (variant instanceof slangAst.HexNumberExpression) return;
153+
if (variant instanceof slangAst.DecimalNumberExpression) return;
154+
if (variant instanceof slangAst.StringExpression) return;
155+
if (variant instanceof slangAst.ElementaryType) return;
156+
})(variant);
157+
}
123158
this.variant = createNonterminalVariant(variant, collected, options);
124159

125160
this.updateMetadata(this.variant);

src/slang-nodes/FallbackFunctionAttribute.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import {
33
NonterminalKind,
44
TerminalNode as SlangTerminalNode
@@ -14,11 +14,11 @@ import type { CollectedMetadata } from '../types.d.ts';
1414
import type { AstNode } from './types.d.ts';
1515

1616
const createNonterminalVariant = createNonterminalVariantSimpleCreator<
17-
ast.FallbackFunctionAttribute,
17+
slangAst.FallbackFunctionAttribute,
1818
FallbackFunctionAttribute
1919
>([
20-
[ast.ModifierInvocation, ModifierInvocation],
21-
[ast.OverrideSpecifier, OverrideSpecifier]
20+
[slangAst.ModifierInvocation, ModifierInvocation],
21+
[slangAst.OverrideSpecifier, OverrideSpecifier]
2222
]);
2323

2424
export class FallbackFunctionAttribute extends SlangNode {
@@ -27,7 +27,7 @@ export class FallbackFunctionAttribute extends SlangNode {
2727
variant: ModifierInvocation | OverrideSpecifier | TerminalNode;
2828

2929
constructor(
30-
ast: ast.FallbackFunctionAttribute,
30+
ast: slangAst.FallbackFunctionAttribute,
3131
collected: CollectedMetadata,
3232
options: ParserOptions<AstNode>
3333
) {
@@ -38,6 +38,20 @@ export class FallbackFunctionAttribute extends SlangNode {
3838
this.variant = new TerminalNode(variant, collected);
3939
return;
4040
}
41+
if (process.env.NODE_ENV === 'test') {
42+
// This is to ensure that we have handled all variants of
43+
// `FallbackFunctionAttribute` in the `createNonterminalVariant` function
44+
// above.
45+
((
46+
variant: Exclude<
47+
slangAst.FallbackFunctionAttribute['variant'],
48+
SlangTerminalNode
49+
>
50+
): void => {
51+
if (variant instanceof slangAst.ModifierInvocation) return;
52+
if (variant instanceof slangAst.OverrideSpecifier) return;
53+
})(variant);
54+
}
4155
this.variant = createNonterminalVariant(variant, collected, options);
4256

4357
this.updateMetadata(this.variant);

src/slang-nodes/ForStatementInitialization.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as ast from '@nomicfoundation/slang/ast';
1+
import * as slangAst from '@nomicfoundation/slang/ast';
22
import {
33
NonterminalKind,
44
TerminalNode as SlangTerminalNode
@@ -15,12 +15,12 @@ import type { CollectedMetadata } from '../types.d.ts';
1515
import type { AstNode } from './types.d.ts';
1616

1717
const createNonterminalVariant = createNonterminalVariantSimpleCreator<
18-
ast.ForStatementInitialization,
18+
slangAst.ForStatementInitialization,
1919
ForStatementInitialization
2020
>([
21-
[ast.ExpressionStatement, ExpressionStatement],
22-
[ast.VariableDeclarationStatement, VariableDeclarationStatement],
23-
[ast.TupleDeconstructionStatement, TupleDeconstructionStatement]
21+
[slangAst.ExpressionStatement, ExpressionStatement],
22+
[slangAst.VariableDeclarationStatement, VariableDeclarationStatement],
23+
[slangAst.TupleDeconstructionStatement, TupleDeconstructionStatement]
2424
]);
2525

2626
export class ForStatementInitialization extends SlangNode {
@@ -33,7 +33,7 @@ export class ForStatementInitialization extends SlangNode {
3333
| TerminalNode;
3434

3535
constructor(
36-
ast: ast.ForStatementInitialization,
36+
ast: slangAst.ForStatementInitialization,
3737
collected: CollectedMetadata,
3838
options: ParserOptions<AstNode>
3939
) {
@@ -44,6 +44,21 @@ export class ForStatementInitialization extends SlangNode {
4444
this.variant = new TerminalNode(variant, collected);
4545
return;
4646
}
47+
if (process.env.NODE_ENV === 'test') {
48+
// This is to ensure that we have handled all variants of
49+
// `ForStatementInitialization` in the `createNonterminalVariant`
50+
// function above.
51+
((
52+
variant: Exclude<
53+
slangAst.ForStatementInitialization['variant'],
54+
SlangTerminalNode
55+
>
56+
): void => {
57+
if (variant instanceof slangAst.ExpressionStatement) return;
58+
if (variant instanceof slangAst.VariableDeclarationStatement) return;
59+
if (variant instanceof slangAst.TupleDeconstructionStatement) return;
60+
})(variant);
61+
}
4762
this.variant = createNonterminalVariant(variant, collected, options);
4863

4964
this.updateMetadata(this.variant);

0 commit comments

Comments
 (0)