Skip to content

Commit 01bfaf1

Browse files
committed
Moving all the exhaustive coverage check to the tests
1 parent 42d6442 commit 01bfaf1

50 files changed

Lines changed: 664 additions & 529 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.c8rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"functions": 90,
66
"statements": 90,
77
"exclude": ["/node_modules/"],
8-
"include": ["src/**/*.ts"],
8+
"include": ["src/**/*.ts", "check-coverage/**/*.ts"],
99
"reporter": ["lcov", "text"],
1010
"temp-dir": "./coverage/"
1111
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
3+
// This is to ensure that we have handled all variants of
4+
// `ArgumentsDeclaration`.
5+
export function checkArgumentsDeclarationVariant(
6+
variant: ast.ArgumentsDeclaration['variant']
7+
): void {
8+
if (variant instanceof ast.PositionalArgumentsDeclaration) return;
9+
if (variant instanceof ast.NamedArgumentsDeclaration) return;
10+
/* c8 ignore next 3 */
11+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
12+
const _exhaustiveCheck: never = variant;
13+
}

check-coverage/ContractMember.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
3+
// This is to ensure that we have handled all variants of `ContractMember`.
4+
export function checkContractMemberVariant(
5+
variant: ast.ContractMember['variant']
6+
): void {
7+
if (variant instanceof ast.UsingDirective) return;
8+
if (variant instanceof ast.FunctionDefinition) return;
9+
if (variant instanceof ast.ConstructorDefinition) return;
10+
if (variant instanceof ast.ReceiveFunctionDefinition) return;
11+
if (variant instanceof ast.FallbackFunctionDefinition) return;
12+
if (variant instanceof ast.UnnamedFunctionDefinition) return;
13+
if (variant instanceof ast.ModifierDefinition) return;
14+
if (variant instanceof ast.StructDefinition) return;
15+
if (variant instanceof ast.EnumDefinition) return;
16+
if (variant instanceof ast.EventDefinition) return;
17+
if (variant instanceof ast.StateVariableDefinition) return;
18+
if (variant instanceof ast.ErrorDefinition) return;
19+
if (variant instanceof ast.UserDefinedValueTypeDefinition) return;
20+
/* c8 ignore next 3 */
21+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
22+
const _exhaustiveCheck: never = variant;
23+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
3+
// This is to ensure that we have handled all variants of `ContractSpecifier`.
4+
export function checkContractSpecifierVariant(
5+
variant: ast.ContractSpecifier['variant']
6+
): void {
7+
if (variant instanceof ast.InheritanceSpecifier) return;
8+
if (variant instanceof ast.StorageLayoutSpecifier) return;
9+
/* c8 ignore next 3 */
10+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
11+
const _exhaustiveCheck: never = variant;
12+
}

check-coverage/Expression.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
import { TerminalNode } from '@nomicfoundation/slang/cst';
3+
4+
// This is to ensure that we have handled all variants of `Expression`.
5+
export function checkExpressionVariant(
6+
variant: ast.Expression['variant']
7+
): void {
8+
if (variant instanceof TerminalNode) return;
9+
if (variant instanceof ast.AssignmentExpression) return;
10+
if (variant instanceof ast.ConditionalExpression) return;
11+
if (variant instanceof ast.OrExpression) return;
12+
if (variant instanceof ast.AndExpression) return;
13+
if (variant instanceof ast.EqualityExpression) return;
14+
if (variant instanceof ast.InequalityExpression) return;
15+
if (variant instanceof ast.BitwiseOrExpression) return;
16+
if (variant instanceof ast.BitwiseXorExpression) return;
17+
if (variant instanceof ast.BitwiseAndExpression) return;
18+
if (variant instanceof ast.ShiftExpression) return;
19+
if (variant instanceof ast.AdditiveExpression) return;
20+
if (variant instanceof ast.MultiplicativeExpression) return;
21+
if (variant instanceof ast.ExponentiationExpression) return;
22+
if (variant instanceof ast.PostfixExpression) return;
23+
if (variant instanceof ast.PrefixExpression) return;
24+
if (variant instanceof ast.FunctionCallExpression) return;
25+
if (variant instanceof ast.CallOptionsExpression) return;
26+
if (variant instanceof ast.MemberAccessExpression) return;
27+
if (variant instanceof ast.IndexAccessExpression) return;
28+
if (variant instanceof ast.NewExpression) return;
29+
if (variant instanceof ast.TupleExpression) return;
30+
if (variant instanceof ast.TypeExpression) return;
31+
if (variant instanceof ast.ArrayExpression) return;
32+
if (variant instanceof ast.HexNumberExpression) return;
33+
if (variant instanceof ast.DecimalNumberExpression) return;
34+
if (variant instanceof ast.StringExpression) return;
35+
if (variant instanceof ast.ElementaryType) return;
36+
/* c8 ignore next 3 */
37+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
38+
const _exhaustiveCheck: never = variant;
39+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
import { TerminalNode } from '@nomicfoundation/slang/cst';
3+
4+
// This is to ensure that we have handled all variants of
5+
// `FallbackFunctionAttribute`.
6+
export function checkFallbackFunctionAttributeVariant(
7+
variant: ast.FallbackFunctionAttribute['variant']
8+
): void {
9+
if (variant instanceof TerminalNode) return;
10+
if (variant instanceof ast.ModifierInvocation) return;
11+
if (variant instanceof ast.OverrideSpecifier) return;
12+
/* c8 ignore next 3 */
13+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
14+
const _exhaustiveCheck: never = variant;
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
import { TerminalNode } from '@nomicfoundation/slang/cst';
3+
4+
// This is to ensure that we have handled all variants of
5+
// `ForStatementInitialization`.
6+
export function checkForStatementInitializationVariant(
7+
variant: ast.ForStatementInitialization['variant']
8+
): void {
9+
if (variant instanceof TerminalNode) return;
10+
if (variant instanceof ast.ExpressionStatement) return;
11+
if (variant instanceof ast.VariableDeclarationStatement) return;
12+
if (variant instanceof ast.TupleDeconstructionStatement) return;
13+
/* c8 ignore next 3 */
14+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
15+
const _exhaustiveCheck: never = variant;
16+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
import { TerminalNode } from '@nomicfoundation/slang/cst';
3+
4+
// This is to ensure that we have handled all variants of `FunctionAttribute`.
5+
export function checkFunctionAttributeVariant(
6+
variant: ast.FunctionAttribute['variant']
7+
): void {
8+
if (variant instanceof TerminalNode) return;
9+
if (variant instanceof ast.ModifierInvocation) return;
10+
if (variant instanceof ast.OverrideSpecifier) return;
11+
/* c8 ignore next 3 */
12+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
13+
const _exhaustiveCheck: never = variant;
14+
}

check-coverage/ImportClause.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
3+
// This is to ensure that we have handled all variants of `ImportClause`.
4+
export function checkImportClauseVariant(
5+
variant: ast.ImportClause['variant']
6+
): void {
7+
if (variant instanceof ast.PathImport) return;
8+
if (variant instanceof ast.NamedImport) return;
9+
if (variant instanceof ast.ImportDeconstruction) return;
10+
/* c8 ignore next 3 */
11+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
12+
const _exhaustiveCheck: never = variant;
13+
}

check-coverage/MappingKeyType.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import * as ast from '@nomicfoundation/slang/ast';
2+
3+
// This is to ensure that we have handled all variants of `MappingKeyType`.
4+
export function checkMappingKeyTypeVariant(
5+
variant: ast.MappingKeyType['variant']
6+
): void {
7+
if (variant instanceof ast.IdentifierPath) return;
8+
if (variant instanceof ast.ElementaryType) return;
9+
/* c8 ignore next 3 */
10+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
11+
const _exhaustiveCheck: never = variant;
12+
}

0 commit comments

Comments
 (0)