fixes #15848 [backport:1.2] (#17959)

This commit is contained in:
Andreas Rumpf 2021-05-07 16:50:11 +02:00 • committed by GitHub
commit 51f3ef6cb8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 34 additions and 2 deletions

View file

@ -397,6 +397,11 @@
nim r main # uses cached binary nim r main # uses cached binary
nim r main arg1 arg2 # ditto (runtime arguments are irrelevant) nim r main arg1 arg2 # ditto (runtime arguments are irrelevant)
- The style checking of the compiler now supports a `--styleCheck:usages` switch. This switch
enforces that every symbol is written as it was declared, not enforcing
the official Nim style guide. To be enabled, this has to be combined either
with `--styleCheck:error` or `--styleCheck:hint`.
## Tool changes ## Tool changes
- The rst parser now supports markdown table syntax. - The rst parser now supports markdown table syntax.

View file

@ -971,6 +971,7 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
of "off": conf.globalOptions = conf.globalOptions - {optStyleHint, optStyleError} of "off": conf.globalOptions = conf.globalOptions - {optStyleHint, optStyleError}
of "hint": conf.globalOptions = conf.globalOptions + {optStyleHint} - {optStyleError} of "hint": conf.globalOptions = conf.globalOptions + {optStyleHint} - {optStyleError}
of "error": conf.globalOptions = conf.globalOptions + {optStyleError} of "error": conf.globalOptions = conf.globalOptions + {optStyleError}
of "usages": conf.globalOptions.incl optStyleUsages
else: localError(conf, info, errOffHintsError % arg) else: localError(conf, info, errOffHintsError % arg)
of "showallmismatches": of "showallmismatches":
processOnOffSwitchG(conf, {optShowAllMismatches}, arg, pass, info) processOnOffSwitchG(conf, {optShowAllMismatches}, arg, pass, info)

View file

@ -95,7 +95,7 @@ proc nep1CheckDefImpl(conf: ConfigRef; info: TLineInfo; s: PSym; k: TSymKind) =
lintReport(conf, info, beau, s.name.s) lintReport(conf, info, beau, s.name.s)
template styleCheckDef*(conf: ConfigRef; info: TLineInfo; s: PSym; k: TSymKind) = template styleCheckDef*(conf: ConfigRef; info: TLineInfo; s: PSym; k: TSymKind) =
if {optStyleHint, optStyleError} * conf.globalOptions != {}: if {optStyleHint, optStyleError} * conf.globalOptions != {} and optStyleUsages notin conf.globalOptions:
nep1CheckDefImpl(conf, info, s, k) nep1CheckDefImpl(conf, info, s, k)
template styleCheckDef*(conf: ConfigRef; info: TLineInfo; s: PSym) = template styleCheckDef*(conf: ConfigRef; info: TLineInfo; s: PSym) =

View file

@ -60,6 +60,7 @@ type # please make sure we have under 32 options
optUseNimcache, # save artifacts (including binary) in $nimcache optUseNimcache, # save artifacts (including binary) in $nimcache
optStyleHint, # check that the names adhere to NEP-1 optStyleHint, # check that the names adhere to NEP-1
optStyleError, # enforce that the names adhere to NEP-1 optStyleError, # enforce that the names adhere to NEP-1
optStyleUsages, # only enforce consistent **usages** of the symbol
optSkipSystemConfigFile, # skip the system's cfg/nims config file optSkipSystemConfigFile, # skip the system's cfg/nims config file
optSkipProjConfigFile, # skip the project's cfg/nims config file optSkipProjConfigFile, # skip the project's cfg/nims config file
optSkipUserConfigFile, # skip the users's cfg/nims config file optSkipUserConfigFile, # skip the users's cfg/nims config file

View file

@ -57,6 +57,8 @@ Advanced options:
produce hints or errors for Nim identifiers that produce hints or errors for Nim identifiers that
do not adhere to Nim's official style guide do not adhere to Nim's official style guide
https://nim-lang.org/docs/nep1.html https://nim-lang.org/docs/nep1.html
--styleCheck:usages only enforce consistent spellings of identifiers,
do not enforce the style on declarations
--showAllMismatches:on|off --showAllMismatches:on|off
show all mismatching candidates in overloading show all mismatching candidates in overloading
resolution resolution

View file

@ -0,0 +1,23 @@
discard """
cmd: "nim c --styleCheck:error --styleCheck:usages $file"
errormsg: "'BAD_STYLE' should be: 'BADSTYLE'"
line: 20
"""
import strutils
proc BADSTYLE(c: char) = discard
proc toSnakeCase(s: string): string =
result = newStringOfCap(s.len + 3)
for i in 0..<s.len:
if s[i] in {'A'..'Z'}:
if i > 0 and s[i-1] in {'a'..'z'}:
result.add '_'
result.add toLowerAscii(s[i])
else:
result.add s[i]
BAD_STYLE(s[i])
echo toSnakeCase("fooBarBaz Yes")