diff --git a/eslint.config.mjs b/eslint.config.mjs index 769e54f6b..561cf4254 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -18,7 +18,6 @@ const compat = new FlatCompat({ export default [ { ignores: [ - 'variant-coverage/**/*.ts', 'coverage/**/*.js', 'dist/**/*.cjs', 'dist/**/*.js', @@ -72,7 +71,7 @@ export default [ sourceType: 'script', parserOptions: { - project: ['tsconfig.json'] + project: ['tsconfig.test.json'] } }, diff --git a/package-lock.json b/package-lock.json index d5568b25f..440cd7682 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,7 @@ "solc": "^0.8.34", "ts-loader": "^9.5.7", "ts-node": "^10.9.2", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "webpack": "^5.105.4", "webpack-cli": "^7.0.2" }, @@ -9562,9 +9562,9 @@ } }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 1add98c49..5fa546a40 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "scripts": { "build": "webpack --env production", "build:dev": "webpack --env development", - "build:test": "webpack --config test.config.js", + "build:test": "webpack --config webpack.test.config.js", "eslint": "eslint 'src/**' 'tests/**'", "lint": "npm run eslint && npm run prettier -- --list-different && npm run knip", "lint:fix": "npm run eslint -- --fix && npm run prettier -- --write", @@ -110,7 +110,7 @@ "solc": "^0.8.34", "ts-loader": "^9.5.7", "ts-node": "^10.9.2", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "webpack": "^5.105.4", "webpack-cli": "^7.0.2" }, diff --git a/src/slangPrinter.ts b/src/slangPrinter.ts index 3aa5b7557..3e979b986 100644 --- a/src/slangPrinter.ts +++ b/src/slangPrinter.ts @@ -22,7 +22,7 @@ function hasNodeIgnoreComment({ comments }: StrictAstNode): boolean { ); } -function ignoreComments(path: AstPath): void { +function ignoreComments(path: AstPath): void { const node = path.node; // We ignore anything that is not an object if (node === null || typeof node !== 'object') return; @@ -38,7 +38,9 @@ function ignoreComments(path: AstPath): void { break; // The key `comments` will contain every comment for this node. case 'comments': - path.each((commentPath) => (commentPath.node.printed = true), key); + if (node.comments !== undefined) { + path.each((commentPath) => (commentPath.node.printed = true), key); + } break; default: // If the value for that key is an Array or an Object we go deeper. @@ -46,7 +48,7 @@ function ignoreComments(path: AstPath): void { if (typeof childNode === 'object') { if (Array.isArray(childNode)) { path.each(ignoreComments, key); - return; + break; } path.call(ignoreComments, key); } diff --git a/tsconfig.json b/tsconfig.json index 7449a88e3..d2d472e2a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,12 @@ { "compilerOptions": { "allowJs": true, + "rootDir": "./src", "outDir": "./dist/", "noImplicitAny": true, "strictPropertyInitialization": true, "sourceMap": true, - "target": "es6", + "target": "es2023", "module": "NodeNext", "moduleResolution": "NodeNext", "strict": true, diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 000000000..228d4a142 --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "rootDir": "./" + }, + "include": ["./src/**/*", "./variant-coverage/**/*"] +} diff --git a/variant-coverage/ArgumentsDeclaration.ts b/variant-coverage/ArgumentsDeclaration.ts index 1d276bf1d..9b8d3ae70 100644 --- a/variant-coverage/ArgumentsDeclaration.ts +++ b/variant-coverage/ArgumentsDeclaration.ts @@ -7,6 +7,7 @@ export function checkArgumentsDeclarationVariant( ): void { if (variant instanceof ast.PositionalArgumentsDeclaration) return; if (variant instanceof ast.NamedArgumentsDeclaration) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/ContractMember.ts b/variant-coverage/ContractMember.ts index 101cf9a71..0a582f283 100644 --- a/variant-coverage/ContractMember.ts +++ b/variant-coverage/ContractMember.ts @@ -17,6 +17,7 @@ export function checkContractMemberVariant( if (variant instanceof ast.StateVariableDefinition) return; if (variant instanceof ast.ErrorDefinition) return; if (variant instanceof ast.UserDefinedValueTypeDefinition) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/ContractSpecifier.ts b/variant-coverage/ContractSpecifier.ts index 849f9bf00..566e7c87a 100644 --- a/variant-coverage/ContractSpecifier.ts +++ b/variant-coverage/ContractSpecifier.ts @@ -6,6 +6,7 @@ export function checkContractSpecifierVariant( ): void { if (variant instanceof ast.InheritanceSpecifier) return; if (variant instanceof ast.StorageLayoutSpecifier) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/Expression.ts b/variant-coverage/Expression.ts index e35eff6c2..267d70388 100644 --- a/variant-coverage/Expression.ts +++ b/variant-coverage/Expression.ts @@ -33,6 +33,7 @@ export function checkExpressionVariant( if (variant instanceof ast.DecimalNumberExpression) return; if (variant instanceof ast.StringExpression) return; if (variant instanceof ast.ElementaryType) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/FallbackFunctionAttribute.ts b/variant-coverage/FallbackFunctionAttribute.ts index 3dfb70ecb..c672c7a79 100644 --- a/variant-coverage/FallbackFunctionAttribute.ts +++ b/variant-coverage/FallbackFunctionAttribute.ts @@ -9,6 +9,7 @@ export function checkFallbackFunctionAttributeVariant( if (variant instanceof TerminalNode) return; if (variant instanceof ast.ModifierInvocation) return; if (variant instanceof ast.OverrideSpecifier) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/ForStatementInitialization.ts b/variant-coverage/ForStatementInitialization.ts index 1c87d4f4c..660db07b1 100644 --- a/variant-coverage/ForStatementInitialization.ts +++ b/variant-coverage/ForStatementInitialization.ts @@ -10,6 +10,7 @@ export function checkForStatementInitializationVariant( if (variant instanceof ast.ExpressionStatement) return; if (variant instanceof ast.VariableDeclarationStatement) return; if (variant instanceof ast.TupleDeconstructionStatement) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/FunctionAttribute.ts b/variant-coverage/FunctionAttribute.ts index ad31eebb1..892589219 100644 --- a/variant-coverage/FunctionAttribute.ts +++ b/variant-coverage/FunctionAttribute.ts @@ -8,6 +8,7 @@ export function checkFunctionAttributeVariant( if (variant instanceof TerminalNode) return; if (variant instanceof ast.ModifierInvocation) return; if (variant instanceof ast.OverrideSpecifier) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/ImportClause.ts b/variant-coverage/ImportClause.ts index e73c338c3..4d736be3f 100644 --- a/variant-coverage/ImportClause.ts +++ b/variant-coverage/ImportClause.ts @@ -7,6 +7,7 @@ export function checkImportClauseVariant( if (variant instanceof ast.PathImport) return; if (variant instanceof ast.NamedImport) return; if (variant instanceof ast.ImportDeconstruction) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/MappingKeyType.ts b/variant-coverage/MappingKeyType.ts index dd151e410..6a84459ed 100644 --- a/variant-coverage/MappingKeyType.ts +++ b/variant-coverage/MappingKeyType.ts @@ -6,6 +6,7 @@ export function checkMappingKeyTypeVariant( ): void { if (variant instanceof ast.IdentifierPath) return; if (variant instanceof ast.ElementaryType) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/Pragma.ts b/variant-coverage/Pragma.ts index ba9fbfd25..6f56e8752 100644 --- a/variant-coverage/Pragma.ts +++ b/variant-coverage/Pragma.ts @@ -5,6 +5,7 @@ export function checkPragmaVariant(variant: ast.Pragma['variant']): void { if (variant instanceof ast.AbicoderPragma) return; if (variant instanceof ast.ExperimentalPragma) return; if (variant instanceof ast.VersionPragma) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/ReceiveFunctionAttribute.ts b/variant-coverage/ReceiveFunctionAttribute.ts index 7ff3090a3..2a3b32b76 100644 --- a/variant-coverage/ReceiveFunctionAttribute.ts +++ b/variant-coverage/ReceiveFunctionAttribute.ts @@ -9,6 +9,7 @@ export function checkReceiveFunctionAttributeVariant( if (variant instanceof TerminalNode) return; if (variant instanceof ast.ModifierInvocation) return; if (variant instanceof ast.OverrideSpecifier) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/SourceUnitMember.ts b/variant-coverage/SourceUnitMember.ts index 57235613d..c68562bd9 100644 --- a/variant-coverage/SourceUnitMember.ts +++ b/variant-coverage/SourceUnitMember.ts @@ -17,6 +17,7 @@ export function checkSourceUnitMemberVariant( if (variant instanceof ast.UserDefinedValueTypeDefinition) return; if (variant instanceof ast.UsingDirective) return; if (variant instanceof ast.EventDefinition) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/Statement.ts b/variant-coverage/Statement.ts index ea8be26c9..2e6c338be 100644 --- a/variant-coverage/Statement.ts +++ b/variant-coverage/Statement.ts @@ -19,6 +19,7 @@ export function checkStatementVariant(variant: ast.Statement['variant']): void { if (variant instanceof ast.AssemblyStatement) return; if (variant instanceof ast.Block) return; if (variant instanceof ast.UncheckedBlock) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/StringExpression.ts b/variant-coverage/StringExpression.ts index 0b6cec709..2785d8b93 100644 --- a/variant-coverage/StringExpression.ts +++ b/variant-coverage/StringExpression.ts @@ -9,6 +9,7 @@ export function checkStringExpressionVariant( if (variant instanceof ast.HexStringLiteral) return; if (variant instanceof ast.HexStringLiterals) return; if (variant instanceof ast.UnicodeStringLiterals) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/TupleMember.ts b/variant-coverage/TupleMember.ts index f01e00b33..f2dfe4522 100644 --- a/variant-coverage/TupleMember.ts +++ b/variant-coverage/TupleMember.ts @@ -6,6 +6,7 @@ export function checkTupleMemberVariant( ): void { if (variant instanceof ast.TypedTupleMember) return; if (variant instanceof ast.UntypedTupleMember) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/TypeName.ts b/variant-coverage/TypeName.ts index 257770e72..685a16f16 100644 --- a/variant-coverage/TypeName.ts +++ b/variant-coverage/TypeName.ts @@ -7,6 +7,7 @@ export function checkTypeNameVariant(variant: ast.TypeName['variant']): void { if (variant instanceof ast.MappingType) return; if (variant instanceof ast.IdentifierPath) return; if (variant instanceof ast.ElementaryType) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/UsingClause.ts b/variant-coverage/UsingClause.ts index f45f0ba78..0ca2ee40a 100644 --- a/variant-coverage/UsingClause.ts +++ b/variant-coverage/UsingClause.ts @@ -6,6 +6,7 @@ export function checkUsingClauseVariant( ): void { if (variant instanceof ast.IdentifierPath) return; if (variant instanceof ast.UsingDeconstruction) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/VersionExpression.ts b/variant-coverage/VersionExpression.ts index 4de8195c6..982cf4f13 100644 --- a/variant-coverage/VersionExpression.ts +++ b/variant-coverage/VersionExpression.ts @@ -6,6 +6,7 @@ export function checkVersionExpressionVariant( ): void { if (variant instanceof ast.VersionRange) return; if (variant instanceof ast.VersionTerm) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/YulExpression.ts b/variant-coverage/YulExpression.ts index 0a148347e..c545eafe0 100644 --- a/variant-coverage/YulExpression.ts +++ b/variant-coverage/YulExpression.ts @@ -7,6 +7,7 @@ export function checkYulExpressionVariant( if (variant instanceof ast.YulFunctionCallExpression) return; if (variant instanceof ast.YulLiteral) return; if (variant instanceof ast.YulPath) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/YulLiteral.ts b/variant-coverage/YulLiteral.ts index 8a5b2c5be..1a3b6160d 100644 --- a/variant-coverage/YulLiteral.ts +++ b/variant-coverage/YulLiteral.ts @@ -8,6 +8,7 @@ export function checkYulLiteralVariant( if (variant instanceof TerminalNode) return; if (variant instanceof ast.HexStringLiteral) return; if (variant instanceof ast.StringLiteral) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/YulStatement.ts b/variant-coverage/YulStatement.ts index e0464f394..c5f3f92d9 100644 --- a/variant-coverage/YulStatement.ts +++ b/variant-coverage/YulStatement.ts @@ -17,6 +17,7 @@ export function checkYulStatementVariant( if (variant instanceof ast.YulContinueStatement) return; if (variant instanceof ast.YulLabel) return; if (variant instanceof ast.YulExpression) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/variant-coverage/YulSwitchCase.ts b/variant-coverage/YulSwitchCase.ts index 2bf005cdc..e5d1ee148 100644 --- a/variant-coverage/YulSwitchCase.ts +++ b/variant-coverage/YulSwitchCase.ts @@ -6,6 +6,7 @@ export function checkYulSwitchCaseVariant( ): void { if (variant instanceof ast.YulDefaultCase) return; if (variant instanceof ast.YulValueCase) return; - /* c8 ignore next 2 */ + /* c8 ignore next 3 */ const _exhaustiveCheck: never = variant; + return _exhaustiveCheck; } diff --git a/test.config.js b/webpack.test.config.js similarity index 78% rename from test.config.js rename to webpack.test.config.js index ea52663fd..41cb46f82 100644 --- a/test.config.js +++ b/webpack.test.config.js @@ -26,7 +26,13 @@ export default { rules: [ { test: /\.ts$/, - use: 'ts-loader', + use: [ + { + loader: 'ts-loader', + // This test file includes the variant-coverage directory, which is not included in the main tsconfig.json + options: { configFile: 'tsconfig.test.json' } + } + ], exclude: /node_modules/ } ]