From 9d4fe88d09744ba7a86a5e4519c31de8f625499c Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Wed, 20 May 2020 20:33:29 +0300 Subject: [PATCH] compiler: support for -color/-nocolor option overrides --- cmd/v/help/build.txt | 6 ++++++ vlib/v/builder/builder.v | 6 ++++++ vlib/v/pref/pref.v | 13 +++++++++++++ vlib/v/util/errors.v | 6 +++++- 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/cmd/v/help/build.txt b/cmd/v/help/build.txt index 8a45dd7612..675106dbfb 100644 --- a/cmd/v/help/build.txt +++ b/cmd/v/help/build.txt @@ -103,6 +103,12 @@ The build flags are shared by the build and run commands: NB: an useful, although not entirely accurate regexp based Universal Ctags options file for V is located in `.ctags.d/v.ctags` . If you use https://ctags.io/ , it will be used up automatically, or you can specify it explicitly with --options=.ctags.d/v.ctags . + + -color, -nocolor + Force the use of ANSI colors for the error/warning messages, or disable them completely. + By default V tries to show its errors/warnings in ANSI color. The heuristic that it uses + to detect whether or not to use ANSI colors may not work in all cases. + These options allow you to override the default detection. For C-specific build flags, use `v help build-c`. diff --git a/vlib/v/builder/builder.v b/vlib/v/builder/builder.v index e139797c8d..ff2e92f2fa 100644 --- a/vlib/v/builder/builder.v +++ b/vlib/v/builder/builder.v @@ -34,6 +34,12 @@ pub fn new_builder(pref &pref.Preferences) Builder { rdir := os.real_path(pref.path) compiled_dir := if os.is_dir(rdir) { rdir } else { os.dir(rdir) } table := table.new_table() + if pref.use_color == .always { + util.emanager.set_support_color(true) + } + if pref.use_color == .never { + util.emanager.set_support_color(false) + } return Builder{ pref: pref table: table diff --git a/vlib/v/pref/pref.v b/vlib/v/pref/pref.v index 1bece8c39c..07bade1053 100644 --- a/vlib/v/pref/pref.v +++ b/vlib/v/pref/pref.v @@ -20,6 +20,12 @@ pub enum OutputMode { silent } +pub enum ColorOutput { + auto + always + never +} + pub enum Backend { c // The (default) C backend js // The JavaScript backend @@ -101,6 +107,7 @@ pub mut: print_v_files bool // when true, just print the list of all parsed .v files then stop. skip_running bool // when true, do no try to run the produced file (set by b.cc(), when -o x.c or -o x.js) skip_warnings bool // like C's "-w" + use_color ColorOutput // whether the warnings/errors should use ANSI color escapes. } pub fn parse_args(args []string) (&Preferences, string) { @@ -166,6 +173,12 @@ pub fn parse_args(args []string) (&Preferences, string) { '-translated' { res.translated = true } + '-color' { + res.use_color=.always + } + '-nocolor' { + res.use_color=.never + } '-showcc' { res.show_cc = true } diff --git a/vlib/v/util/errors.v b/vlib/v/util/errors.v index 0791975628..3b34f1cf67 100644 --- a/vlib/v/util/errors.v +++ b/vlib/v/util/errors.v @@ -30,7 +30,7 @@ pub const ( ) pub struct EManager { -pub mut: +mut: support_color bool } @@ -40,6 +40,10 @@ pub fn new_error_manager() &EManager { } } +pub fn (e &EManager) set_support_color(b bool) { + e.support_color = b +} + fn bold(msg string) string { if !emanager.support_color { return msg