From 796b2e45debf9a7543ce5fbc77d8ecbec8aca84f Mon Sep 17 00:00:00 2001 From: Bung Date: Wed, 13 Sep 2023 23:52:23 +0800 Subject: [PATCH 01/11] fix onSymImport using wrong line info when import import multiple modules --- compiler/modules/importer.nim | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/compiler/modules/importer.nim b/compiler/modules/importer.nim index 3eba480b501..17c7a9ed0c0 100644 --- a/compiler/modules/importer.nim +++ b/compiler/modules/importer.nim @@ -294,7 +294,7 @@ proc transformImportAs(c: PContext; n: PNode): tuple[node: PNode, importHidden: ret.node = n.processPragma return ret -proc myImportModule(c: PContext, n: var PNode, importStmtResult: PNode): PSym = +proc myImportModule(c: PContext, n: var PNode, info: TLineInfo, importStmtResult: PNode): PSym = let transf = transformImportAs(c, n) n = transf.node let f = checkModuleName(c.config, n) @@ -332,7 +332,7 @@ proc myImportModule(c: PContext, n: var PNode, importStmtResult: PNode): PSym = localReport(c.config, n.info, reportSym(rsemDeprecated, realModule)) if c.graph.onSymImport != nil: - c.graph.onSymImport(c.graph, n.info, result, c.graph.usageSym, false) + c.graph.onSymImport(c.graph, info, result, c.graph.usageSym, false) importStmtResult.add: case result.kind @@ -353,10 +353,10 @@ proc afterImport(c: PContext, m: PSym) = else: discard -proc impMod(c: PContext; it: PNode; importStmtResult: PNode): PNode = +proc impMod(c: PContext; it: PNode; info: TLineInfo; importStmtResult: PNode): PNode = result = it let - m = myImportModule(c, result, importStmtResult) + m = myImportModule(c, result, info, importStmtResult) hasError = m.isError if m != nil: @@ -397,9 +397,9 @@ proc evalImport*(c: PContext, n: PNode): PNode = else: x - hasError = impMod(c, imp, result).kind == nkError or hasError + hasError = impMod(c, imp, x.info, result).kind == nkError or hasError else: - hasError = impMod(c, it, result).kind == nkError + hasError = impMod(c, it, it.info, result).kind == nkError if hasError: result = c.config.wrapError(result) @@ -409,7 +409,7 @@ proc evalFrom*(c: PContext, n: PNode): PNode = # how they work, far too much mutation checkMinSonsLen(n, 2, c.config) result = newNodeI(nkFromStmt, n.info) - let m = myImportModule(c, n[0], result) + let m = myImportModule(c, n[0], n[0].info, result) var hasError = m.isError if m != nil: n[0] = newSymNode(m) @@ -452,7 +452,7 @@ proc readExceptSet(c: PContext, n: PNode): IntSet = proc evalImportExcept*(c: PContext, n: PNode): PNode = checkMinSonsLen(n, 2, c.config) result = newNodeI(nkImportExceptStmt, n.info) - let m = myImportModule(c, n[0], result) + let m = myImportModule(c, n[0], n[0].info, result) var hasError = m.isError if m != nil: From 4f4b2eeeed089b1913615812499c9bfacbb21ce6 Mon Sep 17 00:00:00 2001 From: bung87 Date: Sat, 16 Sep 2023 04:44:06 +0800 Subject: [PATCH 02/11] add test --- nimsuggest/tests/timport_multi_modules.nim | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 nimsuggest/tests/timport_multi_modules.nim diff --git a/nimsuggest/tests/timport_multi_modules.nim b/nimsuggest/tests/timport_multi_modules.nim new file mode 100644 index 00000000000..4b6725bcae0 --- /dev/null +++ b/nimsuggest/tests/timport_multi_modules.nim @@ -0,0 +1,15 @@ +discard """ +$nimsuggest --tester $file +>def $1 +def;;skModule;;minclude_types;;*;;$file;;10;;15;;"";;100 +>def $2 +def;;skModule;;minclude_types;;*;;$file;;11;;15;;"";;100 +>def $3 +def;;skModule;;minclude_import;;*;;$file;;13;;10;;"";;100 +""" +import fixtures/[minclude_import, minclud#[!]#e_types] +import fixtures/[minclude_types as typ#[!]#es] +import + fixtures/[ + minclu#[!]#de_import + ] From 5dd5521e7f09966efdf2f28959866e5ab1029543 Mon Sep 17 00:00:00 2001 From: bung87 Date: Sat, 16 Sep 2023 04:44:48 +0800 Subject: [PATCH 03/11] add onMarkUsed,onSymImport callbacks to initNimSuggest --- nimsuggest/nimsuggest.nim | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nimsuggest/nimsuggest.nim b/nimsuggest/nimsuggest.nim index da5d9041ebc..c1d429375c6 100644 --- a/nimsuggest/nimsuggest.nim +++ b/nimsuggest/nimsuggest.nim @@ -775,6 +775,9 @@ else: myLog(conf, "START " & conf.projectFull.string) var graph = newModuleGraph(cache, conf) + graph.onMarkUsed = proc (g: ModuleGraph; info: TLineInfo; s: PSym; usageSym: var PSym; isDecl: bool) = + suggestSym(g, info, s, usageSym, isDecl) + graph.onSymImport = graph.onMarkUsed # same callback if self.loadConfigsAndProcessCmdLine(cache, conf, graph): mockCommand(graph) if gLogging: From 9afa9145713cc4b43d8ce23ff6d6d0e84fbb529b Mon Sep 17 00:00:00 2001 From: bung87 Date: Sat, 23 Sep 2023 14:43:40 +0800 Subject: [PATCH 04/11] add test case --- nimsuggest/tests/tdef_imports.nim | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 nimsuggest/tests/tdef_imports.nim diff --git a/nimsuggest/tests/tdef_imports.nim b/nimsuggest/tests/tdef_imports.nim new file mode 100644 index 00000000000..dc759c7dc1c --- /dev/null +++ b/nimsuggest/tests/tdef_imports.nim @@ -0,0 +1,16 @@ +discard """ +$nimsuggest --tester $file +>def $1 +def;;skModule;;strutils;;;;$file;;11;;10;;*;;100 +>def $2 +def;;skModule;;strformat;;;;$file;;12;;10;;*;;100 +>def $3 +def;;skModule;;strutils;;;;$file;;15;;5;;*;;100 +""" + +import std/[strformat, stru#[!]#tils] +import std/[strformat as sfor#[!]#mat] +import + std/[ + s#[!]#trutils + ] From f58746fbf8032167972dd5cfc9e07c72ad3f5a83 Mon Sep 17 00:00:00 2001 From: bung87 Date: Sat, 23 Sep 2023 14:48:38 +0800 Subject: [PATCH 05/11] remove test case --- nimsuggest/tests/tdef_imports.nim | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 nimsuggest/tests/tdef_imports.nim diff --git a/nimsuggest/tests/tdef_imports.nim b/nimsuggest/tests/tdef_imports.nim deleted file mode 100644 index dc759c7dc1c..00000000000 --- a/nimsuggest/tests/tdef_imports.nim +++ /dev/null @@ -1,16 +0,0 @@ -discard """ -$nimsuggest --tester $file ->def $1 -def;;skModule;;strutils;;;;$file;;11;;10;;*;;100 ->def $2 -def;;skModule;;strformat;;;;$file;;12;;10;;*;;100 ->def $3 -def;;skModule;;strutils;;;;$file;;15;;5;;*;;100 -""" - -import std/[strformat, stru#[!]#tils] -import std/[strformat as sfor#[!]#mat] -import - std/[ - s#[!]#trutils - ] From f91697d1d3ab1d8de082c371f1b88d0c916d141c Mon Sep 17 00:00:00 2001 From: Bung Date: Sat, 23 Sep 2023 22:42:01 +0800 Subject: [PATCH 06/11] Update compiler/modules/importer.nim Co-authored-by: zerbina <100542850+zerbina@users.noreply.github.com> --- compiler/modules/importer.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/modules/importer.nim b/compiler/modules/importer.nim index 17c7a9ed0c0..8a5c76566e0 100644 --- a/compiler/modules/importer.nim +++ b/compiler/modules/importer.nim @@ -294,7 +294,10 @@ proc transformImportAs(c: PContext; n: PNode): tuple[node: PNode, importHidden: ret.node = n.processPragma return ret -proc myImportModule(c: PContext, n: var PNode, info: TLineInfo, importStmtResult: PNode): PSym = +proc myImportModule(c: PContext, n: var PNode, info: TLineInfo, + importStmtResult: PNode): PSym = + ## `info` provides the source position (which may be different from the one + ## of `n`) to use for symbol suggestions. let transf = transformImportAs(c, n) n = transf.node let f = checkModuleName(c.config, n) From e3cecdd737287f2f5c79a3ac763da2a5cf6e2ba1 Mon Sep 17 00:00:00 2001 From: Bung Date: Sat, 23 Sep 2023 22:43:50 +0800 Subject: [PATCH 07/11] Update nimsuggest/tests/timport_multi_modules.nim Co-authored-by: zerbina <100542850+zerbina@users.noreply.github.com> --- nimsuggest/tests/timport_multi_modules.nim | 1 + 1 file changed, 1 insertion(+) diff --git a/nimsuggest/tests/timport_multi_modules.nim b/nimsuggest/tests/timport_multi_modules.nim index 4b6725bcae0..68f1f3dd745 100644 --- a/nimsuggest/tests/timport_multi_modules.nim +++ b/nimsuggest/tests/timport_multi_modules.nim @@ -9,6 +9,7 @@ def;;skModule;;minclude_import;;*;;$file;;13;;10;;"";;100 """ import fixtures/[minclude_import, minclud#[!]#e_types] import fixtures/[minclude_types as typ#[!]#es] +# test with multi-line import statements: import fixtures/[ minclu#[!]#de_import From e52070fc08d8e57b513cf5f9dafd79f43059caac Mon Sep 17 00:00:00 2001 From: bung87 Date: Sat, 23 Sep 2023 23:03:17 +0800 Subject: [PATCH 08/11] add more test cases --- nimsuggest/tests/timport_multi_modules.nim | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/nimsuggest/tests/timport_multi_modules.nim b/nimsuggest/tests/timport_multi_modules.nim index 68f1f3dd745..ad3912a459e 100644 --- a/nimsuggest/tests/timport_multi_modules.nim +++ b/nimsuggest/tests/timport_multi_modules.nim @@ -1,12 +1,17 @@ discard """ $nimsuggest --tester $file >def $1 -def;;skModule;;minclude_types;;*;;$file;;10;;15;;"";;100 +def;;skModule;;minclude_types;;*;;$file;;15;;15;;"";;100 >def $2 -def;;skModule;;minclude_types;;*;;$file;;11;;15;;"";;100 +def;;skModule;;minclude_types;;*;;$file;;16;;15;;"";;100 >def $3 -def;;skModule;;minclude_import;;*;;$file;;13;;10;;"";;100 +def;;skModule;;minclude_import;;*;;$file;;18;;10;;"";;100 +>def $4 +def;;skModule;;minclude_types;;*;;$file;;21;;13;;"";;100 +>def $5 +def;;skModule;;mstrutils;;*;;$file;;22;;15;;"";;100 """ + import fixtures/[minclude_import, minclud#[!]#e_types] import fixtures/[minclude_types as typ#[!]#es] # test with multi-line import statements: @@ -14,3 +19,5 @@ import fixtures/[ minclu#[!]#de_import ] +from fixtures/mincl#[!]#ude_types import Greet +import fixtures/mst#[!]#rutils except replace From 0050f29a0596e4f0df519173c8ffc08659562fe6 Mon Sep 17 00:00:00 2001 From: bung87 Date: Sat, 23 Sep 2023 23:26:20 +0800 Subject: [PATCH 09/11] merge --- nimsuggest/tests/timport_multi_modules.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nimsuggest/tests/timport_multi_modules.nim b/nimsuggest/tests/timport_multi_modules.nim index ad3912a459e..086a3a0cf4b 100644 --- a/nimsuggest/tests/timport_multi_modules.nim +++ b/nimsuggest/tests/timport_multi_modules.nim @@ -5,11 +5,11 @@ def;;skModule;;minclude_types;;*;;$file;;15;;15;;"";;100 >def $2 def;;skModule;;minclude_types;;*;;$file;;16;;15;;"";;100 >def $3 -def;;skModule;;minclude_import;;*;;$file;;18;;10;;"";;100 +def;;skModule;;minclude_import;;*;;$file;;19;;10;;"";;100 >def $4 -def;;skModule;;minclude_types;;*;;$file;;21;;13;;"";;100 +def;;skModule;;minclude_types;;*;;$file;;22;;13;;"";;100 >def $5 -def;;skModule;;mstrutils;;*;;$file;;22;;15;;"";;100 +def;;skModule;;mstrutils;;*;;$file;;23;;15;;"";;100 """ import fixtures/[minclude_import, minclud#[!]#e_types] From c346db4efed224d9d30c7e61c61f108292263464 Mon Sep 17 00:00:00 2001 From: bung87 Date: Sat, 23 Sep 2023 23:29:50 +0800 Subject: [PATCH 10/11] remove unrelated changes --- nimsuggest/nimsuggest.nim | 3 --- 1 file changed, 3 deletions(-) diff --git a/nimsuggest/nimsuggest.nim b/nimsuggest/nimsuggest.nim index c1d429375c6..da5d9041ebc 100644 --- a/nimsuggest/nimsuggest.nim +++ b/nimsuggest/nimsuggest.nim @@ -775,9 +775,6 @@ else: myLog(conf, "START " & conf.projectFull.string) var graph = newModuleGraph(cache, conf) - graph.onMarkUsed = proc (g: ModuleGraph; info: TLineInfo; s: PSym; usageSym: var PSym; isDecl: bool) = - suggestSym(g, info, s, usageSym, isDecl) - graph.onSymImport = graph.onMarkUsed # same callback if self.loadConfigsAndProcessCmdLine(cache, conf, graph): mockCommand(graph) if gLogging: From 7a6cb5ee9a38859a5f5f6453ed4f9c90b4dc1944 Mon Sep 17 00:00:00 2001 From: bung87 Date: Mon, 25 Sep 2023 00:18:17 +0800 Subject: [PATCH 11/11] rename test file --- nimsuggest/tests/{timport_multi_modules.nim => tdef_import.nim} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename nimsuggest/tests/{timport_multi_modules.nim => tdef_import.nim} (100%) diff --git a/nimsuggest/tests/timport_multi_modules.nim b/nimsuggest/tests/tdef_import.nim similarity index 100% rename from nimsuggest/tests/timport_multi_modules.nim rename to nimsuggest/tests/tdef_import.nim