parent
d5b5827bc2
commit
58e27ebd4a
6 changed files with 30 additions and 3 deletions
|
|
@ -36,6 +36,9 @@
|
||||||
This warning will become an error in future versions! Use an explicit conversion
|
This warning will become an error in future versions! Use an explicit conversion
|
||||||
like `cstring(x)` in order to silence the warning.
|
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
|
- Type mismatch errors now show more context, use `-d:nimLegacyTypeMismatch` for previous
|
||||||
behavior.
|
behavior.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ type
|
||||||
warnCannotOpen = "CannotOpen",
|
warnCannotOpen = "CannotOpen",
|
||||||
warnFileChanged = "FileChanged",
|
warnFileChanged = "FileChanged",
|
||||||
warnSuspiciousEnumConv = "EnumConv",
|
warnSuspiciousEnumConv = "EnumConv",
|
||||||
|
warnAnyEnumConv = "AnyEnumConv",
|
||||||
warnCstringConv = "CStringConv",
|
warnCstringConv = "CStringConv",
|
||||||
warnUser = "User",
|
warnUser = "User",
|
||||||
# hints
|
# hints
|
||||||
|
|
@ -156,6 +157,7 @@ const
|
||||||
warnCannotOpen: "cannot open: $1",
|
warnCannotOpen: "cannot open: $1",
|
||||||
warnFileChanged: "file changed: $1",
|
warnFileChanged: "file changed: $1",
|
||||||
warnSuspiciousEnumConv: "$1",
|
warnSuspiciousEnumConv: "$1",
|
||||||
|
warnAnyEnumConv: "$1",
|
||||||
warnCstringConv: "$1",
|
warnCstringConv: "$1",
|
||||||
warnUser: "$1",
|
warnUser: "$1",
|
||||||
hintSuccess: "operation successful: $#",
|
hintSuccess: "operation successful: $#",
|
||||||
|
|
@ -211,7 +213,7 @@ type
|
||||||
TNoteKinds* = set[TNoteKind]
|
TNoteKinds* = set[TNoteKind]
|
||||||
|
|
||||||
proc computeNotesVerbosity(): array[0..3, TNoteKinds] =
|
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[2] = result[3] - {hintStackTrace, warnUninit, hintExtendedContext, hintDeclaredLoc, hintProcessingStmt}
|
||||||
result[1] = result[2] - {warnProveField, warnProveIndex,
|
result[1] = result[2] - {warnProveField, warnProveIndex,
|
||||||
warnGcUnsafe, hintPath, hintDependency, hintCodeBegin, hintCodeEnd,
|
warnGcUnsafe, hintPath, hintDependency, hintCodeBegin, hintCodeEnd,
|
||||||
|
|
|
||||||
|
|
@ -1171,7 +1171,10 @@ proc track(tracked: PEffects, n: PNode) =
|
||||||
not allowCStringConv(n[1]):
|
not allowCStringConv(n[1]):
|
||||||
message(tracked.config, n.info, warnCstringConv,
|
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" %
|
"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:
|
if n.len == 2:
|
||||||
track(tracked, n[1])
|
track(tracked, n[1])
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,12 @@ SmallLshouldNotBeUsed The letter 'l' should not be used as an
|
||||||
identifier.
|
identifier.
|
||||||
EachIdentIsTuple The code contains a confusing `var`
|
EachIdentIsTuple The code contains a confusing `var`
|
||||||
declaration.
|
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.
|
User Some user-defined warning.
|
||||||
========================== ============================================
|
========================== ============================================
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -92,3 +92,16 @@ reject:
|
||||||
x[0] = c
|
x[0] = c
|
||||||
x
|
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.}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue