mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: make sure vweb actions return vweb.Result
This commit is contained in:
parent
1ed0cd9a74
commit
a794dea809
@ -410,6 +410,19 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) {
|
|||||||
c.table.fns[node.name].dep_names = dep_names
|
c.table.fns[node.name].dep_names = dep_names
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// vweb checks
|
||||||
|
if node.attrs.len > 0 && c.file.imports.filter(it.mod == 'vweb').len > 0 {
|
||||||
|
// If it's a vweb action (has the ['/url'] attribute), make sure it returns a vweb.Result
|
||||||
|
for attr in node.attrs {
|
||||||
|
if attr.name.starts_with('/') {
|
||||||
|
if c.table.sym(node.return_type).name != 'vweb.Result' {
|
||||||
|
c.error('vweb actions must return `vweb.Result`', node.pos)
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check_same_type_ignoring_pointers util function to check if the Types are the same, including all
|
// check_same_type_ignoring_pointers util function to check if the Types are the same, including all
|
||||||
@ -2175,6 +2188,7 @@ fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return node.return_type
|
return node.return_type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
7
vlib/v/checker/tests/vweb_missing_result.out
Normal file
7
vlib/v/checker/tests/vweb_missing_result.out
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
vlib/v/checker/tests/vweb_missing_result.vv:9:1: error: vweb actions must return `vweb.Result`
|
||||||
|
7 | // actions must return results
|
||||||
|
8 | ['/foo/:bar']
|
||||||
|
9 | pub fn (mut app App) foo(a string) {
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
10 | }
|
||||||
|
11 |
|
15
vlib/v/checker/tests/vweb_missing_result.vv
Normal file
15
vlib/v/checker/tests/vweb_missing_result.vv
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import vweb
|
||||||
|
|
||||||
|
struct App {
|
||||||
|
vweb.Context
|
||||||
|
}
|
||||||
|
|
||||||
|
// actions must return results
|
||||||
|
['/foo/:bar']
|
||||||
|
pub fn (mut app App) foo(a string) {
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
port := 8181
|
||||||
|
vweb.run[App](&App{}, port)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user