checker: much less verbose error messages

pull/4216/head
Alexander Medvednikov 2020-04-03 11:01:09 +02:00
parent 1d52847924
commit 0dad1a89e6
2 changed files with 16 additions and 6 deletions

View File

@ -32,7 +32,7 @@ pub fn new_builder(pref &pref.Preferences) Builder {
mod_file_cacher: new_mod_file_cacher() mod_file_cacher: new_mod_file_cacher()
pref: pref pref: pref
table: table table: table
checker: checker.new_checker(table) checker: checker.new_checker(table, pref)
} }
} }

View File

@ -7,6 +7,7 @@ import (
v.ast v.ast
v.table v.table
v.token v.token
v.pref
os os
) )
@ -20,14 +21,17 @@ mut:
file ast.File file ast.File
nr_errors int nr_errors int
errors []string errors []string
error_lines []int // to avoid printing multiple errors for the same line
expected_type table.Type expected_type table.Type
fn_return_type table.Type // current function's return type fn_return_type table.Type // current function's return type
// fn_decl ast.FnDecl // fn_decl ast.FnDecl
pref &pref.Preferences // Preferences shared from V struct
} }
pub fn new_checker(table &table.Table) Checker { pub fn new_checker(table &table.Table, pref &pref.Preferences) Checker {
return Checker{ return Checker{
table: table table: table
pref: pref
} }
} }
@ -947,7 +951,6 @@ pub fn (c mut Checker) ident(ident mut ast.Ident) table.Type {
if ident.is_c { if ident.is_c {
return table.int_type return table.int_type
} }
// TODO
if ident.name != '_' { if ident.name != '_' {
c.error('unknown ident: `$ident.name`', ident.pos) c.error('unknown ident: `$ident.name`', ident.pos)
} }
@ -1171,17 +1174,24 @@ pub fn (c mut Checker) map_init(node mut ast.MapInit) table.Type {
pub fn (c mut Checker) error(s string, pos token.Position) { pub fn (c mut Checker) error(s string, pos token.Position) {
c.nr_errors++ c.nr_errors++
//if c.pref.is_verbose { //if c.pref.is_verbose {
if c.pref.verbosity.is_higher_or_equal(.level_one) {
print_backtrace() print_backtrace()
//} }
mut path := c.file.path mut path := c.file.path
// Get relative path // Get relative path
workdir := os.getwd() + os.path_separator workdir := os.getwd() + os.path_separator
if path.starts_with(workdir) { if path.starts_with(workdir) {
path = path.replace(workdir, '') path = path.replace(workdir, '')
} }
final_msg_line := '$path:$pos.line_nr: checker error #$c.nr_errors: $s' mut final_msg_line := '$path:$pos.line_nr: $s'
if c.pref.verbosity.is_higher_or_equal(.level_one) {
final_msg_line = '$path:$pos.line_nr: checker error #$c.nr_errors: $s'
}
c.errors << final_msg_line c.errors << final_msg_line
if !(pos.line_nr in c.error_lines) {
eprintln(final_msg_line) eprintln(final_msg_line)
}
c.error_lines << pos.line_nr
/* /*
if colored_output { if colored_output {
eprintln(term.bold(term.red(final_msg_line))) eprintln(term.bold(term.red(final_msg_line)))