even lighter version of #17938: fix most issues with UnusedImport, XDeclaredButNotUsed, etc; fix #17511, #17510, #14246 (without realModule) (#18362)

* {.used: symbol}

* add tests

* fix tests with --import

* --import works without giving spurious unused warnings

* new warning warnDuplicateModuleImport for `import foo; import foo`

* fix test, add resolveModuleAlias, use proper line info for module aliases

* fix spurious warnings

* fix deprecation msg for deprecated modules even with `import foo as bar`

* disable a test for i386 pending sorting XDeclaredButNotUsed errors

* UnusedImport now works with re-exported symbols

* fix typo [skip ci]

* ic support

* add genPNode to allow writing PNode-based compiler code similarly to `genAst`

* fix DuplicateModuleImport warning

* adjust test

* fixup

* fixup

* fixup

* fix after rebase

* fix for IC

* keep the proc inline, move the const out

* [skip ci] fix changelog

* experiment: remove calls to resolveModuleAlias

* followup

* fixup

* fix tests/modules/tselfimport.nim

* workaround tests/deprecated/tmodule1.nim

* fix properly

* simplify
This commit is contained in:
Timothee Cour 2021-06-26 06:21:46 -07:00 • committed by GitHub
commit b8f761b7e2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 155 additions and 60 deletions

View file

@ -1,13 +1,23 @@
discard """
nimout: '''tmodule1.nim(11, 8) Warning: goodbye; importme is deprecated [Deprecated]
tmodule1.nim(14, 10) Warning: Ty is deprecated [Deprecated]
tmodule1.nim(17, 10) Warning: hello; Ty1 is deprecated [Deprecated]
tmodule1.nim(20, 8) Warning: aVar is deprecated [Deprecated]
tmodule1.nim(22, 3) Warning: aProc is deprecated [Deprecated]
tmodule1.nim(23, 3) Warning: hello; aProc1 is deprecated [Deprecated]
matrix: "--hint:all:off"
nimoutFull: true
nimout: '''
tmodule1.nim(21, 8) Warning: goodbye; importme is deprecated [Deprecated]
tmodule1.nim(24, 10) Warning: Ty is deprecated [Deprecated]
tmodule1.nim(27, 10) Warning: hello; Ty1 is deprecated [Deprecated]
tmodule1.nim(30, 8) Warning: aVar is deprecated [Deprecated]
tmodule1.nim(32, 3) Warning: aProc is deprecated [Deprecated]
tmodule1.nim(33, 3) Warning: hello; aProc1 is deprecated [Deprecated]
'''
"""
# line 20
import importme
block:

View file

@ -1,5 +1,5 @@
discard """
errormsg: "A module cannot import itself"
errormsg: "module 'tselfimport' cannot import itself"
file: "tselfimport.nim"
line: 7
"""

23
tests/pragmas/mused2a.nim Normal file
View file

@ -0,0 +1,23 @@
import std/strutils
from std/os import fileExists
import std/typetraits as typetraits2
from std/setutils import complement
proc fn1() = discard
proc fn2*() = discard
let fn4 = 0
let fn5* = 0
const fn7 = 0
const fn8* = 0
type T1 = object

View file

@ -0,0 +1,3 @@
import mused2c
export mused2c

View file

@ -0,0 +1 @@
proc baz*() = discard

46
tests/pragmas/tused2.nim Normal file
View file

@ -0,0 +1,46 @@
discard """
matrix: "--hint:all:off --hint:XDeclaredButNotUsed --path:."
joinable: false
nimoutFull: true
nimout: '''
mused2a.nim(12, 6) Hint: 'fn1' is declared but not used [XDeclaredButNotUsed]
mused2a.nim(16, 5) Hint: 'fn4' is declared but not used [XDeclaredButNotUsed]
mused2a.nim(20, 7) Hint: 'fn7' is declared but not used [XDeclaredButNotUsed]
mused2a.nim(23, 6) Hint: 'T1' is declared but not used [XDeclaredButNotUsed]
mused2a.nim(1, 11) Warning: imported and not used: 'strutils' [UnusedImport]
mused2a.nim(3, 9) Warning: imported and not used: 'os' [UnusedImport]
mused2a.nim(5, 23) Warning: imported and not used: 'typetraits2' [UnusedImport]
mused2a.nim(6, 9) Warning: imported and not used: 'setutils' [UnusedImport]
tused2.nim(42, 8) Warning: imported and not used: 'mused2a' [UnusedImport]
tused2.nim(45, 11) Warning: imported and not used: 'strutils' [UnusedImport]
'''
"""
# line 40
import mused2a
import mused2b
import std/strutils
baz()

View file

@ -271,7 +271,7 @@ block:
fails(foo)
import macros, tables
import tables
var foo{.compileTime.} = [
"Foo",