From 692624b47c769c39782e8278244ea19edfd211fe Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Tue, 6 Jun 2023 11:27:10 +0300 Subject: [PATCH] parser: add error for typeof(T), suggesting typeof[T]() instead --- vlib/v/parser/expr.v | 3 +++ vlib/v/parser/tests/typeof_typename_err.out | 5 +++++ vlib/v/parser/tests/typeof_typename_err.vv | 5 +++++ 3 files changed, 13 insertions(+) create mode 100644 vlib/v/parser/tests/typeof_typename_err.out create mode 100644 vlib/v/parser/tests/typeof_typename_err.vv diff --git a/vlib/v/parser/expr.v b/vlib/v/parser/expr.v index 9e61b664d6..109d05feab 100644 --- a/vlib/v/parser/expr.v +++ b/vlib/v/parser/expr.v @@ -223,6 +223,9 @@ fn (mut p Parser) check_expr(precedence int) !ast.Expr { } } else { p.check(.lpar) + if p.tok.kind == .name && p.tok.lit.len > 0 && p.tok.lit[0].is_capital() { + p.error_with_pos('use `typeof[T]()`, instead of `typeof(T)`', spos) + } expr := p.expr(0) p.check(.rpar) if p.tok.kind != .dot && p.tok.line_nr == p.prev_tok.line_nr { diff --git a/vlib/v/parser/tests/typeof_typename_err.out b/vlib/v/parser/tests/typeof_typename_err.out new file mode 100644 index 0000000000..1bc8b7e534 --- /dev/null +++ b/vlib/v/parser/tests/typeof_typename_err.out @@ -0,0 +1,5 @@ +vlib/v/parser/tests/typeof_typename_err.vv:1:29: error: use `typeof[T]()`, instead of `typeof(T)` + 1 | fn f[T]() { println("type ${typeof(T)}") } + | ~~~~~~ + 2 | f[int]() + 3 | f[string]() diff --git a/vlib/v/parser/tests/typeof_typename_err.vv b/vlib/v/parser/tests/typeof_typename_err.vv new file mode 100644 index 0000000000..dcf15f45ef --- /dev/null +++ b/vlib/v/parser/tests/typeof_typename_err.vv @@ -0,0 +1,5 @@ +fn f[T]() { println("type ${typeof(T)}") } +f[int]() +f[string]() + +