From 587c5de44db66c27bcfd81bf7587842acd0a17a0 Mon Sep 17 00:00:00 2001 From: Petr Makhnev <51853996+i582@users.noreply.github.com> Date: Tue, 28 Jan 2025 14:15:27 +0400 Subject: [PATCH] refactor: better error message for unresolved global function (#1610) --- dev-docs/CHANGELOG.md | 1 + src/types/__snapshots__/resolveStatements.spec.ts.snap | 6 +++--- src/types/resolveExpression.ts | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dev-docs/CHANGELOG.md b/dev-docs/CHANGELOG.md index 3b5fec416..5375e05ad 100644 --- a/dev-docs/CHANGELOG.md +++ b/dev-docs/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Make `msg_bounced` last parameter of `*_contract_router_internal` for better code generation: PR [#1585](https://github.com/tact-lang/tact/pull/1585) - Inline `*_contract_init` function: PR [#1589](https://github.com/tact-lang/tact/pull/1589) - Better error message for `unresolved name` error: PR [#1595](https://github.com/tact-lang/tact/pull/1595) +- Better error message for `unresolved global function` error: PR [#1610](https://github.com/tact-lang/tact/pull/1610) ### Fixed diff --git a/src/types/__snapshots__/resolveStatements.spec.ts.snap b/src/types/__snapshots__/resolveStatements.spec.ts.snap index 43bc97cbc..4eee0c95d 100644 --- a/src/types/__snapshots__/resolveStatements.spec.ts.snap +++ b/src/types/__snapshots__/resolveStatements.spec.ts.snap @@ -1603,7 +1603,7 @@ exports[`resolveStatements should fail statements for var-scope-nested-block-sta `; exports[`resolveStatements should fail statements for var-scope-no-toString-global-fun1 1`] = ` -":7:9: Static function "toString" does not exist +":7:9: Cannot find global function "toString" 6 | init() { > 7 | toString(); // non-existent function ^~~~~~~~~~ @@ -1612,7 +1612,7 @@ exports[`resolveStatements should fail statements for var-scope-no-toString-glob `; exports[`resolveStatements should fail statements for var-scope-no-toString-global-fun2 1`] = ` -":6:12: Static function "toString" does not exist. Perhaps you meant to call ".toString(...)" extension function? +":6:12: Cannot find global function "toString", did you mean "self.toString()"? 5 | extends fun toString(self: WrappedInt): Int { > 6 | return toString(self.x); ^~~~~~~~~~~~~~~~ @@ -1621,7 +1621,7 @@ exports[`resolveStatements should fail statements for var-scope-no-toString-glob `; exports[`resolveStatements should fail statements for var-scope-no-valueOf-global-fun 1`] = ` -":4:5: Static function "valueOf" does not exist +":4:5: Cannot find global function "valueOf" 3 | fun foo(x: Int) { > 4 | valueOf(x); ^~~~~~~~~~ diff --git a/src/types/resolveExpression.ts b/src/types/resolveExpression.ts index b4134a8ff..fb9600008 100644 --- a/src/types/resolveExpression.ts +++ b/src/types/resolveExpression.ts @@ -560,13 +560,13 @@ function resolveStaticCall( ) !== undefined ) { throwCompilationError( - `Static function ${idTextErr(exp.function)} does not exist. Perhaps you meant to call ".${idText(exp.function)}(...)" extension function?`, + `Cannot find global function ${idTextErr(exp.function)}, did you mean "self.${idText(exp.function)}()"?`, exp.loc, ); } throwCompilationError( - `Static function ${idTextErr(exp.function)} does not exist`, + `Cannot find global function ${idTextErr(exp.function)}`, exp.loc, ); }