summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-07-08 22:24:28 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-07-08 22:24:28 +0200
commite2267ef5c95e400e20ac48bea9c662241bc01f18 (patch)
tree7f3dec1d840266b55e27853ac38b83d6add91d18
parent089c31765fd7d0fc2c4beb4869dd9a42c78b4ab8 (diff)
downloadNim-e2267ef5c95e400e20ac48bea9c662241bc01f18.tar.gz
Nimscript supports hint() and warning() procs; refs #3688
-rw-r--r--compiler/commands.nim2
-rw-r--r--compiler/scriptconfig.nim9
-rw-r--r--lib/system/nimscript.nim13
-rw-r--r--tests/newconfig/tfoo.nims3
4 files changed, 24 insertions, 3 deletions
diff --git a/compiler/commands.nim b/compiler/commands.nim
index cf1e16b28..22512c563 100644
--- a/compiler/commands.nim
+++ b/compiler/commands.nim
@@ -158,7 +158,7 @@ var
   enableNotes: TNoteKinds
   disableNotes: TNoteKinds
 
-proc processSpecificNote(arg: string, state: TSpecialWord, pass: TCmdLinePass,
+proc processSpecificNote*(arg: string, state: TSpecialWord, pass: TCmdLinePass,
                          info: TLineInfo; orig: string) =
   var id = ""  # arg = "X]:on|off"
   var i = 0
diff --git a/compiler/scriptconfig.nim b/compiler/scriptconfig.nim
index d04fd5231..ca42cc8fa 100644
--- a/compiler/scriptconfig.nim
+++ b/compiler/scriptconfig.nim
@@ -13,7 +13,7 @@
 import
   ast, modules, passes, passaux, condsyms,
   options, nimconf, lists, sem, semdata, llstream, vm, vmdef, commands, msgs,
-  os, times, osproc
+  os, times, osproc, wordrecg
 
 # we support 'cmpIgnoreStyle' natively for efficiency:
 from strutils import cmpIgnoreStyle
@@ -116,7 +116,12 @@ proc setupVM*(module: PSym; scriptName: string): PEvalContext =
     setResult(a, options.command)
   cbconf switch:
     processSwitch(a.getString 0, a.getString 1, passPP, unknownLineInfo())
-
+  cbconf hintImpl:
+    processSpecificNote(a.getString 0, wHint, passPP, unknownLineInfo(),
+      a.getString 1)
+  cbconf warningImpl:
+    processSpecificNote(a.getString 0, wWarning, passPP, unknownLineInfo(),
+      a.getString 1)
 
 proc runNimScript*(scriptName: string; freshDefines=true) =
   passes.gIncludeFile = includeModule
diff --git a/lib/system/nimscript.nim b/lib/system/nimscript.nim
index d587d772f..db6d72d7b 100644
--- a/lib/system/nimscript.nim
+++ b/lib/system/nimscript.nim
@@ -39,6 +39,9 @@ proc getCurrentDir(): string = builtin
 proc rawExec(cmd: string): int {.tags: [ExecIOEffect], raises: [OSError].} =
   builtin
 
+proc warningImpl(arg, orig: string) = discard
+proc hintImpl(arg, orig: string) = discard
+
 proc paramStr*(i: int): string =
   ## Retrieves the ``i``'th command line parameter.
   builtin
@@ -52,6 +55,16 @@ proc switch*(key: string, val="") =
   ## example ``switch("checks", "on")``.
   builtin
 
+proc warning*(name: string; val: bool) =
+  ## Disables or enables a specific warning.
+  let v = if val: "on" else: "off"
+  warningImpl(name & "]:" & v, "warning[" & name & "]:" & v)
+
+proc hint*(name: string; val: bool) =
+  ## Disables or enables a specific hint.
+  let v = if val: "on" else: "off"
+  hintImpl(name & "]:" & v, "hint[" & name & "]:" & v)
+
 proc getCommand*(): string =
   ## Gets the Nim command that the compiler has been invoked with, for example
   ## "c", "js", "build", "help".
diff --git a/tests/newconfig/tfoo.nims b/tests/newconfig/tfoo.nims
index 519a868d5..8d1461c78 100644
--- a/tests/newconfig/tfoo.nims
+++ b/tests/newconfig/tfoo.nims
@@ -8,6 +8,9 @@ import ospaths
 
 --forceBuild
 
+warning("uninit", off)
+hint("processing", off)
+
 task listDirs, "lists every subdirectory":
   for x in listDirs("."):
     echo "DIR ", x