Skip to content

Commit

Permalink
compiler/suggest: add variable support to con (nim-lang#12569)
Browse files Browse the repository at this point in the history
This allows for the type of a variable to be retrieved.
  • Loading branch information
alaviss authored and Araq committed Nov 4, 2019
1 parent ae32d63 commit 558ecd1
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
10 changes: 9 additions & 1 deletion compiler/suggest.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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'
Expand Down Expand Up @@ -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}:
Expand Down
12 changes: 12 additions & 0 deletions nimsuggest/tests/tcon_variable.nim
Original file line number Diff line number Diff line change
@@ -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
"""

0 comments on commit 558ecd1

Please sign in to comment.