warn about unused imports; fixes an 'export' regression [nobackport]
This commit is contained in:
parent
4137a4dbf3
commit
9852cf804b
3 changed files with 9 additions and 7 deletions
|
|
@ -33,12 +33,13 @@ type
|
||||||
warnFieldXNotSupported, warnCommentXIgnored,
|
warnFieldXNotSupported, warnCommentXIgnored,
|
||||||
warnTypelessParam,
|
warnTypelessParam,
|
||||||
warnUseBase, warnWriteToForeignHeap, warnUnsafeCode,
|
warnUseBase, warnWriteToForeignHeap, warnUnsafeCode,
|
||||||
|
warnUnusedImportX,
|
||||||
warnEachIdentIsTuple,
|
warnEachIdentIsTuple,
|
||||||
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
warnProveInit, warnProveField, warnProveIndex, warnGcUnsafe, warnGcUnsafe2,
|
||||||
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
warnUninit, warnGcMem, warnDestructor, warnLockLevel, warnResultShadowed,
|
||||||
warnInconsistentSpacing, warnCaseTransition, warnUser,
|
warnInconsistentSpacing, warnCaseTransition, warnUser,
|
||||||
hintSuccess, hintSuccessX, hintCC,
|
hintSuccess, hintSuccessX, hintCC,
|
||||||
hintLineTooLong, hintXDeclaredButNotUsed, hintUnusedModuleX,
|
hintLineTooLong, hintXDeclaredButNotUsed,
|
||||||
hintConvToBaseNotNeeded,
|
hintConvToBaseNotNeeded,
|
||||||
hintConvFromXtoItselfNotNeeded, hintExprAlwaysX, hintQuitCalled,
|
hintConvFromXtoItselfNotNeeded, hintExprAlwaysX, hintQuitCalled,
|
||||||
hintProcessing, hintCodeBegin, hintCodeEnd, hintConf, hintPath,
|
hintProcessing, hintCodeBegin, hintCodeEnd, hintConf, hintPath,
|
||||||
|
|
@ -79,6 +80,7 @@ const
|
||||||
warnUseBase: "use {.base.} for base methods; baseless methods are deprecated",
|
warnUseBase: "use {.base.} for base methods; baseless methods are deprecated",
|
||||||
warnWriteToForeignHeap: "write to foreign heap",
|
warnWriteToForeignHeap: "write to foreign heap",
|
||||||
warnUnsafeCode: "unsafe code: '$1'",
|
warnUnsafeCode: "unsafe code: '$1'",
|
||||||
|
warnUnusedImportX: "imported and not used: '$1'",
|
||||||
warnEachIdentIsTuple: "each identifier is a tuple",
|
warnEachIdentIsTuple: "each identifier is a tuple",
|
||||||
warnProveInit: "Cannot prove that '$1' is initialized. This will become a compile time error in the future.",
|
warnProveInit: "Cannot prove that '$1' is initialized. This will become a compile time error in the future.",
|
||||||
warnProveField: "cannot prove that field '$1' is accessible",
|
warnProveField: "cannot prove that field '$1' is accessible",
|
||||||
|
|
@ -98,7 +100,6 @@ const
|
||||||
hintCC: "CC: \'$1\'", # unused
|
hintCC: "CC: \'$1\'", # unused
|
||||||
hintLineTooLong: "line too long",
|
hintLineTooLong: "line too long",
|
||||||
hintXDeclaredButNotUsed: "'$1' is declared but not used",
|
hintXDeclaredButNotUsed: "'$1' is declared but not used",
|
||||||
hintUnusedModuleX: "unused module: '$1'",
|
|
||||||
hintConvToBaseNotNeeded: "conversion to base object is not needed",
|
hintConvToBaseNotNeeded: "conversion to base object is not needed",
|
||||||
hintConvFromXtoItselfNotNeeded: "conversion from $1 to itself is pointless",
|
hintConvFromXtoItselfNotNeeded: "conversion from $1 to itself is pointless",
|
||||||
hintExprAlwaysX: "expression evaluates always to '$1'",
|
hintExprAlwaysX: "expression evaluates always to '$1'",
|
||||||
|
|
@ -135,6 +136,7 @@ const
|
||||||
"LanguageXNotSupported", "FieldXNotSupported",
|
"LanguageXNotSupported", "FieldXNotSupported",
|
||||||
"CommentXIgnored",
|
"CommentXIgnored",
|
||||||
"TypelessParam", "UseBase", "WriteToForeignHeap",
|
"TypelessParam", "UseBase", "WriteToForeignHeap",
|
||||||
|
"UnusedModule",
|
||||||
"UnsafeCode", "EachIdentIsTuple",
|
"UnsafeCode", "EachIdentIsTuple",
|
||||||
"ProveInit", "ProveField", "ProveIndex", "GcUnsafe", "GcUnsafe2", "Uninit",
|
"ProveInit", "ProveField", "ProveIndex", "GcUnsafe", "GcUnsafe2", "Uninit",
|
||||||
"GcMem", "Destructor", "LockLevel", "ResultShadowed",
|
"GcMem", "Destructor", "LockLevel", "ResultShadowed",
|
||||||
|
|
@ -142,7 +144,7 @@ const
|
||||||
|
|
||||||
HintsToStr* = [
|
HintsToStr* = [
|
||||||
"Success", "SuccessX", "CC", "LineTooLong",
|
"Success", "SuccessX", "CC", "LineTooLong",
|
||||||
"XDeclaredButNotUsed", "UnusedModule",
|
"XDeclaredButNotUsed",
|
||||||
"ConvToBaseNotNeeded", "ConvFromXtoItselfNotNeeded",
|
"ConvToBaseNotNeeded", "ConvFromXtoItselfNotNeeded",
|
||||||
"ExprAlwaysX", "QuitCalled", "Processing", "CodeBegin", "CodeEnd", "Conf",
|
"ExprAlwaysX", "QuitCalled", "Processing", "CodeBegin", "CodeEnd", "Conf",
|
||||||
"Path", "CondTrue", "CondFalse", "Name", "Pattern", "Exec", "Link", "Dependency",
|
"Path", "CondTrue", "CondFalse", "Name", "Pattern", "Exec", "Link", "Dependency",
|
||||||
|
|
|
||||||
|
|
@ -620,7 +620,7 @@ proc myProcess(context: PPassContext, n: PNode): PNode =
|
||||||
|
|
||||||
proc reportUnusedModules(c: PContext) =
|
proc reportUnusedModules(c: PContext) =
|
||||||
for i in 0..high(c.unusedImports):
|
for i in 0..high(c.unusedImports):
|
||||||
message(c.config, c.unusedImports[i][1], hintUnusedModuleX, c.unusedImports[i][0].name.s)
|
message(c.config, c.unusedImports[i][1], warnUnusedImportX, c.unusedImports[i][0].name.s)
|
||||||
|
|
||||||
proc myClose(graph: ModuleGraph; context: PPassContext, n: PNode): PNode =
|
proc myClose(graph: ModuleGraph; context: PPassContext, n: PNode): PNode =
|
||||||
var c = PContext(context)
|
var c = PContext(context)
|
||||||
|
|
|
||||||
|
|
@ -2450,7 +2450,7 @@ proc semExportExcept(c: PContext, n: PNode): PNode =
|
||||||
var s = initTabIter(i, exported.tab)
|
var s = initTabIter(i, exported.tab)
|
||||||
while s != nil:
|
while s != nil:
|
||||||
if s.kind in ExportableSymKinds+{skModule} and
|
if s.kind in ExportableSymKinds+{skModule} and
|
||||||
s.name.id notin exceptSet:
|
s.name.id notin exceptSet and sfError notin s.flags:
|
||||||
strTableAdd(c.module.tab, s)
|
strTableAdd(c.module.tab, s)
|
||||||
result.add newSymNode(s, n.info)
|
result.add newSymNode(s, n.info)
|
||||||
markUsed(c, n.info, s, c.graph.usageSym)
|
markUsed(c, n.info, s, c.graph.usageSym)
|
||||||
|
|
@ -2480,7 +2480,7 @@ proc semExport(c: PContext, n: PNode): PNode =
|
||||||
if s.kind == skEnumField:
|
if s.kind == skEnumField:
|
||||||
localError(c.config, a.info, errGenerated, "cannot export: " & renderTree(a) &
|
localError(c.config, a.info, errGenerated, "cannot export: " & renderTree(a) &
|
||||||
"; enum field cannot be exported individually")
|
"; enum field cannot be exported individually")
|
||||||
if s.kind in ExportableSymKinds+{skModule}:
|
if s.kind in ExportableSymKinds+{skModule} and sfError notin s.flags:
|
||||||
result.add(newSymNode(s, a.info))
|
result.add(newSymNode(s, a.info))
|
||||||
strTableAdd(c.module.tab, s)
|
strTableAdd(c.module.tab, s)
|
||||||
markUsed(c, n.info, s, c.graph.usageSym)
|
markUsed(c, n.info, s, c.graph.usageSym)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue