nimsuggest: track type contexts

This commit is contained in:
Araq
2017-03-01 09:57:51 +01:00
parent 936ed9721b
commit ee13c8014b
3 changed files with 12 additions and 2 deletions

View File

@@ -112,6 +112,7 @@ type
signatures*: TStrTable
recursiveDep*: string
suggestionsMade*: bool
inTypeContext*: int
proc makeInstPair*(s: PSym, inst: PInstantiation): TInstantiationPair =
result.genericSym = s

View File

@@ -1169,6 +1169,8 @@ proc fixupTypeOf(c: PContext, prev: PType, typExpr: PNode) =
proc semTypeNode(c: PContext, n: PNode, prev: PType): PType =
result = nil
when defined(nimsuggest):
inc c.inTypeContext
if gCmd == cmdIdeTools: suggestExpr(c, n)
case n.kind
@@ -1374,6 +1376,8 @@ proc semTypeNode(c: PContext, n: PNode, prev: PType): PType =
localError(n.info, errTypeExpected)
result = newOrPrevType(tyError, prev, c)
n.typ = result
when defined(nimsuggest):
dec c.inTypeContext
proc setMagicType(m: PSym, kind: TTypeKind, size: int) =
m.typ.kind = kind

View File

@@ -20,8 +20,13 @@
## - If there is a prefix (foo|), symbols starting with this prefix come first.
## - If the prefix is part of the name (but the name doesn't start with it),
## these symbols come second.
## - Otherwise consider the context. We currently distinguish between type
## and non-type contexts.
## - If we have a prefix, only symbols matching this prefix are returned and
## nothing else.
## - If we have no prefix, consider the context. We currently distinguish
## between type and non-type contexts.
## - Finally, sort matches by relevance. The relevance is determined by the
## number of usages, so ``strutils.replace`` comes before
## ``strutils.wordWrap``.
# included from sigmatch.nim