summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorc-blake <c-blake@users.noreply.github.com>2021-04-29 02:55:43 -0400
committerGitHub <noreply@github.com>2021-04-29 08:55:43 +0200
commit601c050fcb4cc3101265018eb1cc381c6cb9dab9 (patch)
treeb5b1c13bf19069801d606f15bdea56ab5d191385
parent7637cff9cf677ad7e5952aed7670fe408eded418 (diff)
downloadNim-601c050fcb4cc3101265018eb1cc381c6cb9dab9.tar.gz
Implement https://forum.nim-lang.org/t/7848#50018 (#17874)
* Implement https://forum.nim-lang.org/t/7848#50018 with just the same
`SuccessX` hint category, build mode on a separate, final line, and
no change to how the mode is spelled for -d:release/-d:danger.

* Change to add a new BuildMode hint category and keep testament in sync
as per comment.

* Add "--hint:buildmode:off" to `defaultHintsOff`.

* Remove as requested.

* As requested for tests clean up.

* Address code review.

* Address code review.

* Mirror db456423116a9b19666f551f4d38aded3964c2e2
-rw-r--r--compiler/lineinfos.nim8
-rw-r--r--compiler/main.nim8
-rw-r--r--doc/nimc.rst1
-rw-r--r--drnim/drnim.nim8
-rw-r--r--testament/testament.nim3
-rw-r--r--tests/misc/trunner.nim2
6 files changed, 17 insertions, 13 deletions
diff --git a/compiler/lineinfos.nim b/compiler/lineinfos.nim
index d8f82aea0..c7057e7db 100644
--- a/compiler/lineinfos.nim
+++ b/compiler/lineinfos.nim
@@ -64,7 +64,8 @@ type
     warnFileChanged = "FileChanged",
     warnUser = "User",
 
-    hintSuccess = "Success", hintSuccessX = "SuccessX", hintCC = "CC",
+    hintSuccess = "Success", hintSuccessX = "SuccessX", hintBuildMode = "BuildMode",
+    hintCC = "CC",
     hintLineTooLong = "LineTooLong", hintXDeclaredButNotUsed = "XDeclaredButNotUsed",
     hintXCannotRaiseY = "XCannotRaiseY", hintConvToBaseNotNeeded = "ConvToBaseNotNeeded",
     hintConvFromXtoItselfNotNeeded = "ConvFromXtoItselfNotNeeded", hintExprAlwaysX = "ExprAlwaysX",
@@ -142,7 +143,8 @@ const
     warnUser: "$1",
     hintSuccess: "operation successful: $#",
     # keep in sync with `testament.isSuccess`
-    hintSuccessX: "${loc} lines; ${sec}s; $mem; $build build; proj: $project; out: $output",
+    hintSuccessX: "$loc lines; ${sec}s; $mem; proj: $project; out: $output",
+    hintBuildMode: "$1",
     hintCC: "CC: $1",
     hintLineTooLong: "line too long",
     hintXDeclaredButNotUsed: "'$1' is declared but not used",
@@ -196,7 +198,7 @@ proc computeNotesVerbosity(): array[0..3, TNoteKinds] =
   result[1] = result[2] - {warnProveField, warnProveIndex,
     warnGcUnsafe, hintPath, hintDependency, hintCodeBegin, hintCodeEnd,
     hintSource, hintGlobalVar, hintGCStats, hintMsgOrigin}
-  result[0] = result[1] - {hintSuccessX, hintSuccess, hintConf,
+  result[0] = result[1] - {hintSuccessX, hintBuildMode, hintSuccess, hintConf,
     hintProcessing, hintPattern, hintExecuting, hintLinking, hintCC}
 
 const
diff --git a/compiler/main.nim b/compiler/main.nim
index 48fbd185c..e7ee021bc 100644
--- a/compiler/main.nim
+++ b/compiler/main.nim
@@ -384,9 +384,9 @@ proc mainCommand*(graph: ModuleGraph) =
       when declared(system.getMaxMem): formatSize(getMaxMem()) & " peakmem"
       else: formatSize(getTotalMem()) & " totmem"
     let loc = $conf.linesCompiled
-    let build = if isDefined(conf, "danger"): "Dangerous Release"
-                elif isDefined(conf, "release"): "Release"
-                else: "Debug"
+    let build = if isDefined(conf, "danger"): "Dangerous Release build"
+                elif isDefined(conf, "release"): "Release build"
+                else: "***SLOW, DEBUG BUILD***; -d:release makes code run faster."
     let sec = formatFloat(epochTime() - conf.lastCmdTime, ffDecimal, 3)
     let project = if conf.filenameOption == foAbs: $conf.projectFull else: $conf.projectName
       # xxx honor conf.filenameOption more accurately
@@ -406,10 +406,10 @@ proc mainCommand*(graph: ModuleGraph) =
       "loc", loc,
       "sec", sec,
       "mem", mem,
-      "build", build,
       "project", project,
       "output", output,
       ])
+    rawMessage(conf, hintBuildMode, build)
 
   when PrintRopeCacheStats:
     echo "rope cache stats: "
diff --git a/doc/nimc.rst b/doc/nimc.rst
index aad889591..9db95e81b 100644
--- a/doc/nimc.rst
+++ b/doc/nimc.rst
@@ -102,6 +102,7 @@ Source                           The source line that triggered a diagnostic
                                  message.
 StackTrace
 Success, SuccessX                Successful compilation of a library or a binary.
+BuildMode                        Kind of build: debug, release, danger
 User
 UserRaw
 XDeclaredButNotUsed              Unused symbols in the code.
diff --git a/drnim/drnim.nim b/drnim/drnim.nim
index a591a8ef3..1eded533d 100644
--- a/drnim/drnim.nim
+++ b/drnim/drnim.nim
@@ -1210,19 +1210,19 @@ proc mainCommand(graph: ModuleGraph) =
       when declared(system.getMaxMem): formatSize(getMaxMem()) & " peakmem"
       else: formatSize(getTotalMem()) & " totmem"
     let loc = $conf.linesCompiled
-    let build = if isDefined(conf, "danger"): "Dangerous Release"
-                elif isDefined(conf, "release"): "Release"
-                else: "Debug"
+    let build = if isDefined(conf, "danger"): "Dangerous Release build"
+                elif isDefined(conf, "release"): "Release build"
+                else: "***SLOW, DEBUG BUILD***; -d:release makes code run faster."
     let sec = formatFloat(epochTime() - conf.lastCmdTime, ffDecimal, 3)
     let project = if conf.filenameOption == foAbs: $conf.projectFull else: $conf.projectName
     rawMessage(conf, hintSuccessX, [
       "loc", loc,
       "sec", sec,
       "mem", mem,
-      "build", build,
       "project", project,
       "output", ""
       ])
+    rawMessage(conf, hintBuildMode, build)
 
 proc processCmdLine(pass: TCmdLinePass, cmd: string; config: ConfigRef) =
   var p = parseopt.initOptParser(cmd)
diff --git a/testament/testament.nim b/testament/testament.nim
index 97f1f01b8..9caa3f6b9 100644
--- a/testament/testament.nim
+++ b/testament/testament.nim
@@ -107,7 +107,8 @@ proc isSuccess(input: string): bool =
   # that may appear in user config (eg: `--filenames`).
   # Passing `XDG_CONFIG_HOME= testament args...` can be used to ignore user config
   # stored in XDG_CONFIG_HOME, refs https://wiki.archlinux.org/index.php/XDG_Base_Directory
-  input.startsWith("Hint: ") and input.endsWith("[SuccessX]")
+  input.startsWith("Hint: ") and
+    (input.endsWith("[SuccessX]") or input.endsWith("[BuildMode]"))
 
 proc getFileDir(filename: string): string =
   result = filename.splitFile().dir
diff --git a/tests/misc/trunner.nim b/tests/misc/trunner.nim
index 2a82ca9ee..06c828eaa 100644
--- a/tests/misc/trunner.nim
+++ b/tests/misc/trunner.nim
@@ -21,7 +21,7 @@ proc isDots(a: string): bool =
   a.startsWith(".") and a.strip(chars = {'.'}) == ""
 
 const
-  defaultHintsOff = "--hint:successx:off --hint:exec:off --hint:link:off --hint:cc:off --hint:conf:off --hint:processing:off --hint:QuitCalled:off"
+  defaultHintsOff = "--hint:successx:off --hint:buildmode:off --hint:exec:off --hint:link:off --hint:cc:off --hint:conf:off --hint:processing:off --hint:QuitCalled:off"
     # useful when you want to turn only some hints on, and some common ones off.
     # pending https://github.com/timotheecour/Nim/issues/453, simplify to: `--hints:off`
   nim = getCurrentCompilerExe()