summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/suggest.nim10
-rw-r--r--nimsuggest/tests/tcon_variable.nim12
2 files changed, 21 insertions, 1 deletions
diff --git a/compiler/suggest.nim b/compiler/suggest.nim
index a254c1f13..85761a8a9 100644
--- a/compiler/suggest.nim
+++ b/compiler/suggest.nim
@@ -293,7 +293,7 @@ proc suggestObject(c: PContext, n, f: PNode; info: TLineInfo, outputs: var Sugge
   else: discard
 
 proc nameFits(c: PContext, s: PSym, n: PNode): bool =
-  var op = n.sons[0]
+  var op = if n.kind in nkCallKinds: n.sons[0] else: n
   if op.kind in {nkOpenSymChoice, nkClosedSymChoice}: op = op.sons[0]
   var opr: PIdent
   case op.kind
@@ -317,6 +317,10 @@ proc suggestCall(c: PContext, n, nOrig: PNode, outputs: var Suggestions) =
   wholeSymTab(filterSym(it, nil, pm) and nameFits(c, it, n) and argsFit(c, it, n, nOrig),
               ideCon)
 
+proc suggestVar(c: PContext, n: PNode, outputs: var Suggestions) =
+  let info = n.info
+  wholeSymTab(nameFits(c, it, n), ideCon)
+
 proc typeFits(c: PContext, s: PSym, firstArg: PType): bool {.inline.} =
   if s.typ != nil and len(s.typ) > 1 and s.typ.sons[1] != nil:
     # special rule: if system and some weird generic match via 'tyUntyped'
@@ -601,6 +605,10 @@ proc suggestExprNoCheck*(c: PContext, n: PNode) =
         if x.kind == nkEmpty or x.typ == nil: break
         addSon(a, x)
       suggestCall(c, a, n, outputs)
+    elif n.kind in nkIdentKinds:
+      var x = safeSemExpr(c, n)
+      if x.kind == nkEmpty or x.typ == nil: x = n
+      suggestVar(c, x, outputs)
 
   dec(c.compilesContextId)
   if outputs.len > 0 and c.config.ideCmd in {ideSug, ideCon, ideDef}:
diff --git a/nimsuggest/tests/tcon_variable.nim b/nimsuggest/tests/tcon_variable.nim
new file mode 100644
index 000000000..cfe93604f
--- /dev/null
+++ b/nimsuggest/tests/tcon_variable.nim
@@ -0,0 +1,12 @@
+let foo = "string"
+var bar = "string"
+bar#[!]#.add foo
+bar.add foo#[!]#
+
+discard """
+$nimsuggest --tester $file
+>con $1
+con;;skVar;;tcon_variable.bar;;string;;$file;;2;;4;;"";;100
+>con $2
+con;;skLet;;tcon_variable.foo;;string;;$file;;1;;4;;"";;100
+"""