Diagnostic and cause
LinkWrong argument count
- Family
- topaz
- Phase
- check
- Code
TPZ5004
Cause and conditions
A call must supply every required parameter. Calling a one-parameter function with no arguments is rejected with TPZ5004 at the call expression.
Related rule: A call must supply its required parametersResponse
Compare the call with its declaration. Supply the required parameters once and use names accepted by that callable.
Source evidence
- compiler/crates/topaz_diag/src/explain.rs at
151141d7bb44· 619-628 - compiler/crates/topaz_product_runtime/src/diagnostic.rs at
151141d7bb44· 65-65 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 500-500 - compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 287-287 - compiler/crates/topaz_self_frontend/topaz/checker/expression_control.tpz at
151141d7bb44· 1187-1187 - compiler/crates/topaz_self_frontend/topaz/checker/expression_core.tpz at
151141d7bb44· 321-321 - compiler/crates/topaz_self_frontend/topaz/checker/patterns.tpz at
151141d7bb44· 1046-1046 - compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 882-912 - compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 948-958 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1517-1532 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1982-1991 - compiler/crates/topaz_self_frontend/topaz/parser/expressions.tpz at
151141d7bb44· 1301-1333
Compiler phase: check/runtime.
Compiler explanation: A call supplied too few, too many, or duplicate arguments for the callable shape.
Message templates. The marker ⟨value⟩ stands for text computed for the reported program.
- a protocol call
⟨value⟩.takes positional arguments only Source⟨value⟩(…) - newtype
⟨value⟩constructor takes 1 argument (the⟨value⟩to wrap), found ⟨value⟩ Source ⟨value⟩takes ⟨value⟩ ⟨value⟩, found ⟨value⟩ Source- the pipeline inserts the piped value, but this function takes no parameters Source
- this call needs ⟨value⟩⟨value⟩ ⟨value⟩, found ⟨value⟩ Source
- named arguments must follow spread arguments Source
- a spread argument cannot skip an unsatisfied fixed parameter Source
- positional arguments may not follow named arguments Source
- a protocol call
⟨value⟩(…)takes positional arguments only Source - spread arguments require a variadic parameter Source
- this call needs ⟨value⟩ ⟨value⟩, found ⟨value⟩ Source
- the left side of
>>takes exactly one argument (§11) Source - the right side of
>>takes exactly one argument (§11) Source - a pipeline stage takes the piped value as its only argument (§11) Source
- this lambda takes ⟨value⟩ parameter(s), but a function taking ⟨value⟩ is expected Source
- record
⟨value⟩is missing field⟨value⟩ ⟨value⟩ Source - newtype
⟨value⟩pattern takes 1 subpattern (the wrapped⟨value⟩), found ⟨value⟩ Source - enum variant
⟨value⟩.takes ⟨value⟩, found ⟨value⟩ Source⟨value⟩
Observed for the candidate in Topaz 5.21.3. Execution
- error[TPZ5004]: this call needs 1 argument, found 0
A call must supply every required parameter. Calling a one-parameter function with no arguments is rejected with TPZ5004 at the call expression.
A call must supply its required parameters
A call must supply every required parameter. Calling a one-parameter function with no arguments is rejected with TPZ5004 at the call expression.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 882-912 - compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 948-958 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1517-1532 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1982-1991 - compiler/crates/topaz_self_frontend/topaz/parser/expressions.tpz at
151141d7bb44· 1301-1333
Response
LinkCompare the call with its declaration. Supply the required parameters once and use names accepted by that callable.
Reproduction and verification
LinkRejected program
Linkfunction identity(value: int) -> int { value }let result = identity()
No stdout.
Expected result
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 882-912 - compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 948-958 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1517-1532 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1982-1991 - compiler/crates/topaz_self_frontend/topaz/parser/expressions.tpz at
151141d7bb44· 1301-1333
Repaired program
Linkfunction identity(value: int) -> int { value }let result = identity(1)
Expected result
Expected result
Checking accepts the program. Exit code 0.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 882-912 - compiler/crates/topaz_self_frontend/topaz/checker/call_plan.tpz at
151141d7bb44· 948-958 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1517-1532 - compiler/crates/topaz_self_frontend/topaz/checker/call_complete.tpz at
151141d7bb44· 1982-1991 - compiler/crates/topaz_self_frontend/topaz/parser/expressions.tpz at
151141d7bb44· 1301-1333