diff options
author | Araq <rumpf_a@web.de> | 2019-07-17 22:36:23 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2019-07-17 22:36:23 +0200 |
commit | 4137a4dbf386f19b0ce4f5de5b0a8ab05a3b2b8b (patch) | |
tree | 74cee5171dbaab1f839af79ddd3bd3b8b4f86f7b /compiler/suggest.nim | |
parent | 44d80dd86373b9ba41051428948eae30ed97acd3 (diff) | |
download | Nim-4137a4dbf386f19b0ce4f5de5b0a8ab05a3b2b8b.tar.gz |
[feature] detect unused imports
Diffstat (limited to 'compiler/suggest.nim')
-rw-r--r-- | compiler/suggest.nim | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/compiler/suggest.nim b/compiler/suggest.nim index 9e738e8a6..1fd12d750 100644 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -528,7 +528,21 @@ proc userError(conf: ConfigRef; info: TLineInfo; s: PSym) = return localError(conf, info, "usage of '$1' is a user-defined error" % s.name.s) -proc markUsed(conf: ConfigRef; info: TLineInfo; s: PSym; usageSym: var PSym) = +proc markOwnerModuleAsUsed(c: PContext; s: PSym) = + var module = s + while module != nil and module.kind != skModule: + module = module.owner + if module != nil and module != c.module: + var i = 0 + while i <= high(c.unusedImports): + if c.unusedImports[i][0] == module: + # mark it as used: + c.unusedImports.del(i) + else: + inc i + +proc markUsed(c: PContext; info: TLineInfo; s: PSym; usageSym: var PSym) = + let conf = c.config incl(s.flags, sfUsed) if s.kind == skEnumField and s.owner != nil: incl(s.owner.flags, sfUsed) @@ -541,6 +555,7 @@ proc markUsed(conf: ConfigRef; info: TLineInfo; s: PSym; usageSym: var PSym) = suggestSym(conf, info, s, usageSym, false) if {optStyleHint, optStyleError} * conf.globalOptions != {}: styleCheckUse(conf, info, s) + markOwnerModuleAsUsed(c, s) proc safeSemExpr*(c: PContext, n: PNode): PNode = # use only for idetools support! |