mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-03 02:18:00 +00:00
@@ -36,6 +36,9 @@
|
||||
This warning will become an error in future versions! Use an explicit conversion
|
||||
like `cstring(x)` in order to silence the warning.
|
||||
|
||||
- There is a new warning for *any* type conversion to enum that can be enabled via
|
||||
`.warning[AnyEnumConv]:on` or `--warning:AnyEnumConv:on`.
|
||||
|
||||
- Type mismatch errors now show more context, use `-d:nimLegacyTypeMismatch` for previous
|
||||
behavior.
|
||||
|
||||
|
||||
@@ -1064,7 +1064,7 @@ proc getPIdent*(a: PNode): PIdent {.inline.} =
|
||||
# which may simplify code.
|
||||
case a.kind
|
||||
of nkSym: a.sym.name
|
||||
of nkIdent: a.ident
|
||||
of nkIdent: a.ident
|
||||
else: nil
|
||||
|
||||
proc getnimblePkg*(a: PSym): PSym =
|
||||
|
||||
@@ -71,6 +71,7 @@ type
|
||||
warnCannotOpen = "CannotOpen",
|
||||
warnFileChanged = "FileChanged",
|
||||
warnSuspiciousEnumConv = "EnumConv",
|
||||
warnAnyEnumConv = "AnyEnumConv",
|
||||
warnCstringConv = "CStringConv",
|
||||
warnUser = "User",
|
||||
# hints
|
||||
@@ -156,6 +157,7 @@ const
|
||||
warnCannotOpen: "cannot open: $1",
|
||||
warnFileChanged: "file changed: $1",
|
||||
warnSuspiciousEnumConv: "$1",
|
||||
warnAnyEnumConv: "$1",
|
||||
warnCstringConv: "$1",
|
||||
warnUser: "$1",
|
||||
hintSuccess: "operation successful: $#",
|
||||
@@ -211,7 +213,7 @@ type
|
||||
TNoteKinds* = set[TNoteKind]
|
||||
|
||||
proc computeNotesVerbosity(): array[0..3, TNoteKinds] =
|
||||
result[3] = {low(TNoteKind)..high(TNoteKind)} - {warnObservableStores, warnResultUsed}
|
||||
result[3] = {low(TNoteKind)..high(TNoteKind)} - {warnObservableStores, warnResultUsed, warnAnyEnumConv}
|
||||
result[2] = result[3] - {hintStackTrace, warnUninit, hintExtendedContext, hintDeclaredLoc, hintProcessingStmt}
|
||||
result[1] = result[2] - {warnProveField, warnProveIndex,
|
||||
warnGcUnsafe, hintPath, hintDependency, hintCodeBegin, hintCodeEnd,
|
||||
|
||||
@@ -1171,7 +1171,10 @@ proc track(tracked: PEffects, n: PNode) =
|
||||
not allowCStringConv(n[1]):
|
||||
message(tracked.config, n.info, warnCstringConv,
|
||||
"implicit conversion to 'cstring' from a non-const location: $1; this will become a compile time error in the future" %
|
||||
[$n[1]])
|
||||
$n[1])
|
||||
|
||||
if n.typ.skipTypes(abstractInst).kind == tyEnum:
|
||||
message(tracked.config, n.info, warnAnyEnumConv, "enum conversion: $1" % $n[1])
|
||||
|
||||
if n.len == 2:
|
||||
track(tracked, n[1])
|
||||
|
||||
@@ -70,6 +70,12 @@ SmallLshouldNotBeUsed The letter 'l' should not be used as an
|
||||
identifier.
|
||||
EachIdentIsTuple The code contains a confusing `var`
|
||||
declaration.
|
||||
CStringConv Warn about dangerous implicit conversions
|
||||
to `cstring`.
|
||||
EnumConv Warn about conversions from enum to enum.
|
||||
AnyEnumConv Warn about any conversions to an enum type.
|
||||
ResultUsed Warn about the usage of the
|
||||
built-in `result` variable.
|
||||
User Some user-defined warning.
|
||||
========================== ============================================
|
||||
|
||||
|
||||
@@ -92,3 +92,16 @@ reject:
|
||||
x[0] = c
|
||||
x
|
||||
|
||||
{.push warning[AnyEnumConv]:on, warningAsError[AnyEnumConv]:on.}
|
||||
|
||||
reject:
|
||||
# bug #12815
|
||||
type
|
||||
Foo = enum
|
||||
one = 1
|
||||
three = 3
|
||||
|
||||
var va = 2
|
||||
var vb = va.Foo
|
||||
|
||||
{.pop.}
|
||||
|
||||
Reference in New Issue
Block a user