From 592f867aa54b0a666532d550218428ea4a414342 Mon Sep 17 00:00:00 2001 From: Adam Strzelecki Date: Sat, 6 Jun 2015 12:50:39 +0200 Subject: List warnings & hints via --(hints|warnings):list Hints and warnings can be now listed using --warnings:list and --hints:list printing names and checkboxes indicating which of these are enabled. --- compiler/commands.nim | 18 ++++++++++++++++-- compiler/msgs.nim | 20 +++++++++++++++++++- doc/advopt.txt | 5 +++-- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/compiler/commands.nim b/compiler/commands.nim index 8d54488cb..7a908b270 100644 --- a/compiler/commands.nim +++ b/compiler/commands.nim @@ -128,6 +128,18 @@ proc processOnOffSwitch(op: TOptions, arg: string, pass: TCmdLinePass, of wOff: gOptions = gOptions - op else: localError(info, errOnOrOffExpectedButXFound, arg) +proc processOnOffSwitchOrList(op: TOptions, arg: string, pass: TCmdLinePass, + info: TLineInfo): bool = + result = false + case whichKeyword(arg) + of wOn: gOptions = gOptions + op + of wOff: gOptions = gOptions - op + else: + if arg == "list": + result = true + else: + localError(info, errOnOffOrListExpectedButXFound, arg) + proc processOnOffSwitchG(op: TGlobalOptions, arg: string, pass: TCmdLinePass, info: TLineInfo) = case whichKeyword(arg) @@ -382,10 +394,12 @@ proc processSwitch(switch, arg: string, pass: TCmdLinePass, info: TLineInfo) = gSelectedGC = gcNone defineSymbol("nogc") else: localError(info, errNoneBoehmRefcExpectedButXFound, arg) - of "warnings", "w": processOnOffSwitch({optWarns}, arg, pass, info) + of "warnings", "w": + if processOnOffSwitchOrList({optWarns}, arg, pass, info): listWarnings() of "warning": processSpecificNote(arg, wWarning, pass, info, switch) of "hint": processSpecificNote(arg, wHint, pass, info, switch) - of "hints": processOnOffSwitch({optHints}, arg, pass, info) + of "hints": + if processOnOffSwitchOrList({optHints}, arg, pass, info): listHints() of "threadanalysis": processOnOffSwitchG({optThreadAnalysis}, arg, pass, info) of "stacktrace": processOnOffSwitch({optStackTrace}, arg, pass, info) of "linetrace": processOnOffSwitch({optLineTrace}, arg, pass, info) diff --git a/compiler/msgs.nim b/compiler/msgs.nim index ec6aa1604..fbc73ef15 100644 --- a/compiler/msgs.nim +++ b/compiler/msgs.nim @@ -30,7 +30,8 @@ type errStmtInvalidAfterReturn, errStmtExpected, errInvalidLabel, errInvalidCmdLineOption, errCmdLineArgExpected, errCmdLineNoArgExpected, errInvalidVarSubstitution, errUnknownVar, errUnknownCcompiler, - errOnOrOffExpectedButXFound, errNoneBoehmRefcExpectedButXFound, + errOnOrOffExpectedButXFound, errOnOffOrListExpectedButXFound, + errNoneBoehmRefcExpectedButXFound, errNoneSpeedOrSizeExpectedButXFound, errGuiConsoleOrLibExpectedButXFound, errUnknownOS, errUnknownCPU, errGenOutExpectedButXFound, errArgsNeedRunOption, errInvalidMultipleAsgn, errColonOrEqualsExpected, @@ -181,6 +182,7 @@ const errUnknownVar: "unknown variable: \'$1\'", errUnknownCcompiler: "unknown C compiler: \'$1\'", errOnOrOffExpectedButXFound: "\'on\' or \'off\' expected, but \'$1\' found", + errOnOffOrListExpectedButXFound: "\'on\', \'off\' or \'list\' expected, but \'$1\' found", errNoneBoehmRefcExpectedButXFound: "'none', 'boehm' or 'refc' expected, but '$1' found", errNoneSpeedOrSizeExpectedButXFound: "'none', 'speed' or 'size' expected, but '$1' found", errGuiConsoleOrLibExpectedButXFound: "'gui', 'console' or 'lib' expected, but '$1' found", @@ -973,6 +975,22 @@ ropes.errorHandler = proc (err: RopesError, msg: string, useWarning: bool) = of rCannotOpenFile: rawMessage(if useWarning: warnCannotOpenFile else: errCannotOpenFile, msg) +proc listWarnings*() = + msgWriteln("Warnings:") + for warn in warnMin..warnMax: + msgWriteln(" [$1] $2" % [ + if warn in gNotes: "x" else: " ", + msgs.WarningsToStr[ord(warn) - ord(warnMin)] + ]) + +proc listHints*() = + msgWriteln("Hints:") + for hint in hintMin..hintMax: + msgWriteln(" [$1] $2" % [ + if hint in gNotes: "x" else: " ", + msgs.HintsToStr[ord(hint) - ord(hintMin)] + ]) + # enable colors by default on terminals if terminal.isatty(stdout): incl(gGlobalOptions, optUseColors) diff --git a/doc/advopt.txt b/doc/advopt.txt index 04ffce5b5..18a5a527b 100644 --- a/doc/advopt.txt +++ b/doc/advopt.txt @@ -18,9 +18,10 @@ Advanced options: --stdout output to stdout --colors:on|off turn compiler messages coloring on|off --listFullPaths list full paths in messages - -w, --warnings:on|off turn all warnings on|off + -w:on|off|list, --warnings:on|off|list + turn all warnings on|off or list all available --warning[X]:on|off turn specific warning X on|off - --hints:on|off turn all hints on|off + --hints:on|off|list turn all hints on|off or list all available --hint[X]:on|off turn specific hint X on|off --lib:PATH set the system library path --import:PATH add an automatically imported module -- cgit 1.4.1-2-gfad0