summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorautumngray <simon.werbeck@gmail.com>2024-03-03 16:05:11 +0100
committerGitHub <noreply@github.com>2024-03-03 16:05:11 +0100
commit15577043e89f4a1b80f4d8fd4fab4e9fe7e08f33 (patch)
tree9edbefc6118fb3d5fed8a3e1f215534ca7492d12
parentaa30233ea7f904c466020b8eb1b369e9b49ab79f (diff)
downloadNim-15577043e89f4a1b80f4d8fd4fab4e9fe7e08f33.tar.gz
Fix nimsuggest highlight for import statements (#23263)
Currently, I don't have syntax highlighting (+ no/wrong
jump-to-definition) for some import statement forms, namely:

- `import module/name/with/(slashes)`
- `import (mod) as alias`
- `import basemod/[ (sub1), (sub2) ]`

With this patch, highlight/def will work for the regions indicated by
parentheses.
-rw-r--r--compiler/importer.nim10
-rw-r--r--nimsuggest/tests/timport_highlight.nim12
2 files changed, 21 insertions, 1 deletions
diff --git a/compiler/importer.nim b/compiler/importer.nim
index 57cbbb847..6d3cd6f93 100644
--- a/compiler/importer.nim
+++ b/compiler/importer.nim
@@ -307,7 +307,15 @@ proc myImportModule(c: PContext, n: var PNode, importStmtResult: PNode): PSym =
     if belongsToStdlib(c.graph, result) and not startsWith(moduleName, stdPrefix) and
         not startsWith(moduleName, "system/") and not startsWith(moduleName, "packages/"):
       message(c.config, n.info, warnStdPrefix, realModule.name.s)
-    suggestSym(c.graph, n.info, result, c.graph.usageSym, false)
+
+    proc suggestMod(n: PNode; s: PSym) =
+      if n.kind == nkImportAs:
+        suggestMod(n[0], realModule)
+      elif n.kind == nkInfix:
+        suggestMod(n[2], s)
+      else:
+        suggestSym(c.graph, n.info, s, c.graph.usageSym, false)
+    suggestMod(n, result)
     importStmtResult.add newSymNode(result, n.info)
     #newStrNode(toFullPath(c.config, f), n.info)
   else:
diff --git a/nimsuggest/tests/timport_highlight.nim b/nimsuggest/tests/timport_highlight.nim
new file mode 100644
index 000000000..043f87d98
--- /dev/null
+++ b/nimsuggest/tests/timport_highlight.nim
@@ -0,0 +1,12 @@
+import std/paths
+import json as J
+import std/[os,streams]#[!]#
+
+discard """
+$nimsuggest --tester $file
+>highlight $1
+highlight;;skModule;;1;;11;;5
+highlight;;skModule;;2;;7;;4
+highlight;;skModule;;3;;12;;2
+highlight;;skModule;;3;;15;;7
+"""