add -d:nimStrictMode in CI to keep code from regressing; fixes ConvFromXtoItselfNotNeeded, UnusedImport notes (#16764)

This commit is contained in:
Timothee Cour
2021-02-17 10:30:09 -08:00
committed by GitHub
parent 35e14998ec
commit 31bb67a309
20 changed files with 43 additions and 23 deletions

View File

@@ -201,6 +201,8 @@ provided by the operating system.
in both rst2html (as before) as well as common tools rendering rst directly (e.g. github), by
adding: `default-role:: code` directive inside the rst file, which is now handled by rst2html.
- Added `-d:nimStrictMode` in CI in several places to ensure code doesn't have certain hints/warnings
## Tool changes
- The rst parser now supports markdown table syntax.

View File

@@ -126,4 +126,5 @@ proc initDefines*(symbols: StringTableRef) =
defineSymbol("nimHasCastPragmaBlocks")
defineSymbol("nimHasDeclaredLocs")
defineSymbol("nimHasJsBigIntBackend")
defineSymbol("nimHasWarningAsError")
defineSymbol("nimHasHintAsError")

View File

@@ -32,8 +32,6 @@
import ast, types, intsets, lineinfos, renderer
import std/private/asciitables
from patterns import sameTrees
type
InstrKind* = enum
goto, fork, def, use

View File

@@ -2,3 +2,15 @@
cppDefine "errno"
cppDefine "unix"
when defined(nimStrictMode):
# xxx add more flags here, and use `-d:nimStrictMode` in more contexts in CI.
# pending bug #14246, enable this:
# when defined(nimHasWarningAsError):
# switch("warningAsError", "UnusedImport")
when defined(nimHasHintAsError):
# switch("hint", "ConvFromXtoItselfNotNeeded")
switch("hintAsError", "ConvFromXtoItselfNotNeeded")
# future work: XDeclaredButNotUsed

View File

@@ -526,7 +526,7 @@ proc runCI(cmd: string) =
echo "runCI: ", cmd
echo hostInfo()
# boot without -d:nimHasLibFFI to make sure this still works
kochExecFold("Boot in release mode", "boot -d:release")
kochExecFold("Boot in release mode", "boot -d:release -d:nimStrictMode")
## build nimble early on to enable remainder to depend on it if needed
kochExecFold("Build Nimble", "nimble")
@@ -549,7 +549,7 @@ proc runCI(cmd: string) =
#[
BUG: with initOptParser, `--batch:'' all` interprets `all` as the argument of --batch
]#
execFold("Run tester", "nim c -r -d:nimCoroutines --putenv:NIM_TESTAMENT_REMOTE_NETWORKING:1 testament/testament --batch:$1 all -d:nimCoroutines" % ["NIM_TESTAMENT_BATCH".getEnv("_")])
execFold("Run tester", "nim c -r -d:nimCoroutines --putenv:NIM_TESTAMENT_REMOTE_NETWORKING:1 -d:nimStrictMode testament/testament --batch:$1 all -d:nimCoroutines" % ["NIM_TESTAMENT_BATCH".getEnv("_")])
block CT_FFI:
when defined(posix): # windows can be handled in future PR's

View File

@@ -1279,7 +1279,7 @@ else:
var newList = newSeqOfCap[Callback](newLength)
var cb = curList[0]
if not cb(fd.AsyncFD):
if not cb(fd):
newList.add(cb)
withData(p.selector, fd.int, adata) do:

View File

@@ -364,7 +364,10 @@ proc read*[T](future: Future[T] | FutureVar[T]): T =
##
## If the result of the future is an error then that error will be raised.
{.push hint[ConvFromXtoItselfNotNeeded]: off.}
let fut = Future[T](future)
when future is Future[T]:
let fut = future
else:
let fut = Future[T](future)
{.pop.}
if fut.finished:
if fut.error != nil:

View File

@@ -20,7 +20,9 @@ when defined(windows):
import winlean
from os import absolutePath
else:
import os, osproc
import os
when not defined(osx):
import osproc
const osOpenCmd* =
when defined(macos) or defined(macosx) or defined(windows): "open" else: "xdg-open" ## \

View File

@@ -15,7 +15,7 @@ runnableExamples:
include "system/inclrtl"
when not defined(windows):
when defined(linux):
import posix
when defined(freebsd) or defined(macosx):

View File

@@ -88,7 +88,6 @@
import std/private/since
import nativesockets, os, strutils, times, sets, options, std/monotimes
from ssl_certs import scanSSLCertificates
import ssl_config
export nativesockets.Port, nativesockets.`$`, nativesockets.`==`
export Domain, SockType, Protocol
@@ -101,6 +100,8 @@ when useWinVersion:
when defineSsl:
import openssl
when not defined(nimDisableCertificateValidation):
from ssl_certs import scanSSLCertificates
# Note: The enumerations are mapped to Window's constants.
@@ -670,7 +671,7 @@ when defineSsl:
# That means we can assume that the next internal index is the length of
# extra data indexes.
for i in ctx.referencedData:
GC_unref(getExtraData(ctx, i).RootRef)
GC_unref(getExtraData(ctx, i))
ctx.context.SSL_CTX_free()
proc `pskIdentityHint=`*(ctx: SslContext, hint: string) =

View File

@@ -1234,7 +1234,7 @@ elif not defined(useNimRtl):
when defined(macosx) or defined(freebsd) or defined(netbsd) or
defined(openbsd) or defined(dragonfly):
import kqueue, times
import kqueue
proc waitForExit(p: Process, timeout: int = -1): int =
if p.exitFlag:

View File

@@ -769,8 +769,6 @@ proc getch*(): char =
discard fd.tcSetAttr(TCSADRAIN, addr oldMode)
when defined(windows):
from unicode import toUTF8, Rune, runeLenAt
proc readPasswordFromStdin*(prompt: string, password: var string):
bool {.tags: [ReadIOEffect, WriteIOEffect].} =
## Reads a `password` from stdin without printing it. `password` must not

View File

@@ -74,7 +74,7 @@ when defined(js):
system.`+`(a, b)
{.pop.}
elif defined(posix):
elif defined(posix) and not defined(osx):
import posix
elif defined(windows):

View File

@@ -4,7 +4,9 @@ this can eventually be moved to std/os and `walkDirRec` can be implemented in te
to avoid duplication
]##
import std/[os,strutils]
import std/[os]
when defined(windows):
from strutils import replace
type
PathEntry* = object

View File

@@ -5,7 +5,6 @@ proc `$`*(x: int): string {.magic: "IntToStr", noSideEffect.}
when defined(js):
import std/private/since
since (1, 3):
proc `$`*(x: uint): string =
## Caveat: currently implemented as $(cast[int](x)), tied to current

View File

@@ -378,7 +378,8 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
# ugly, but avoids heap allocations :-)
template xadd(buf, s, slen) =
if L + slen < high(buf):
copyMem(addr(buf[L]), cstring(s), slen)
copyMem(addr(buf[L]), (when s is cstring: s else: cstring(s)), slen)
inc L, slen
template add(buf, s) =
xadd(buf, s, s.len)

View File

@@ -23,7 +23,7 @@ proc getMachine*(): MachineId =
var name = execProcess("hostname").strip
if name.len == 0:
name = when defined(posix): getEnv("HOSTNAME")
else: getEnv("COMPUTERNAME").string
else: getEnv("COMPUTERNAME")
if name.len == 0:
quit "cannot determine the machine name"

View File

@@ -175,7 +175,7 @@ when isMainModule:
verbose = false
for i in 0..paramCount() - 1:
let param = string(paramStr(i + 1))
let param = paramStr(i + 1)
case param
of "verbose": verbose = true
else: filter = param

View File

@@ -683,7 +683,7 @@ proc main() =
case p.key.normalize
of "print", "verbose": optPrintResults = true
of "failing": optFailing = true
of "pedantic": discard # deadcode
of "pedantic": discard # deadcode refs https://github.com/nim-lang/Nim/issues/16731
of "targets":
targetsStr = p.val
gTargets = parseTargets(targetsStr)
@@ -739,7 +739,7 @@ proc main() =
var r = initResults()
case action
of "all":
#processCategory(r, Category"megatest", p.cmdLineRest.string, testsDir, runJoinableTests = false)
#processCategory(r, Category"megatest", p.cmdLineRest, testsDir, runJoinableTests = false)
var myself = quoteShell(getAppFilename())
if targetsStr.len > 0:
@@ -798,8 +798,7 @@ proc main() =
p.next
processPattern(r, pattern, p.cmdLineRest, simulate)
of "r", "run":
var subPath = p.key
let (cat, path) = splitTestFile(subPath)
let (cat, path) = splitTestFile(p.key)
processSingleTest(r, cat.Category, p.cmdLineRest, path, gTargets, targetsSet)
of "html":
generateHtml(resultsFile, optFailing)

View File

@@ -21,3 +21,5 @@ hint("Processing", off)
# uncomment to enable all flaky tests disabled by this flag
# (works through process calls, e.g. tests that invoke nim).
# switch("define", "nimTestsEnableFlaky")
# switch("hint", "ConvFromXtoItselfNotNeeded")