summary refs log tree commit diff stats
path: root/compiler/suggest.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2019-07-17 22:36:23 +0200
committerAraq <rumpf_a@web.de>2019-07-17 22:36:23 +0200
commit4137a4dbf386f19b0ce4f5de5b0a8ab05a3b2b8b (patch)
tree74cee5171dbaab1f839af79ddd3bd3b8b4f86f7b /compiler/suggest.nim
parent44d80dd86373b9ba41051428948eae30ed97acd3 (diff)
downloadNim-4137a4dbf386f19b0ce4f5de5b0a8ab05a3b2b8b.tar.gz
[feature] detect unused imports
Diffstat (limited to 'compiler/suggest.nim')
-rw-r--r--compiler/suggest.nim17
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!