attempt to improve 'suggest' feature
This commit is contained in:
parent
086f0d34db
commit
2d62738bbb
2 changed files with 11 additions and 8 deletions
|
|
@ -499,8 +499,8 @@ proc typeSectionFinalPass(c: PContext, n: PNode) =
|
||||||
for i in countup(0, sonsLen(n) - 1):
|
for i in countup(0, sonsLen(n) - 1):
|
||||||
var a = n.sons[i]
|
var a = n.sons[i]
|
||||||
if a.kind == nkCommentStmt: continue
|
if a.kind == nkCommentStmt: continue
|
||||||
if (a.sons[0].kind != nkSym): IllFormedAst(a)
|
if a.sons[0].kind != nkSym: IllFormedAst(a)
|
||||||
var s = a.sons[0].sym
|
var s = a.sons[0].sym
|
||||||
# compute the type's size and check for illegal recursions:
|
# compute the type's size and check for illegal recursions:
|
||||||
if a.sons[1].kind == nkEmpty:
|
if a.sons[1].kind == nkEmpty:
|
||||||
if a.sons[2].kind in {nkSym, nkIdent, nkAccQuoted}:
|
if a.sons[2].kind in {nkSym, nkIdent, nkAccQuoted}:
|
||||||
|
|
@ -563,7 +563,7 @@ proc semLambda(c: PContext, n: PNode): PNode =
|
||||||
n.sons[namePos] = newSymNode(s)
|
n.sons[namePos] = newSymNode(s)
|
||||||
pushOwner(s)
|
pushOwner(s)
|
||||||
openScope(c.tab)
|
openScope(c.tab)
|
||||||
if (n.sons[genericParamsPos].kind != nkEmpty):
|
if n.sons[genericParamsPos].kind != nkEmpty:
|
||||||
illFormedAst(n) # process parameters:
|
illFormedAst(n) # process parameters:
|
||||||
if n.sons[paramsPos].kind != nkEmpty:
|
if n.sons[paramsPos].kind != nkEmpty:
|
||||||
semParamList(c, n.sons[ParamsPos], nil, s)
|
semParamList(c, n.sons[ParamsPos], nil, s)
|
||||||
|
|
@ -651,7 +651,7 @@ proc semProcAux(c: PContext, n: PNode, kind: TSymKind,
|
||||||
s = proto
|
s = proto
|
||||||
n.sons[genericParamsPos] = proto.ast.sons[genericParamsPos]
|
n.sons[genericParamsPos] = proto.ast.sons[genericParamsPos]
|
||||||
n.sons[paramsPos] = proto.ast.sons[paramsPos]
|
n.sons[paramsPos] = proto.ast.sons[paramsPos]
|
||||||
if (n.sons[namePos].kind != nkSym): InternalError(n.info, "semProcAux")
|
if n.sons[namePos].kind != nkSym: InternalError(n.info, "semProcAux")
|
||||||
n.sons[namePos].sym = proto
|
n.sons[namePos].sym = proto
|
||||||
proto.ast = n # needed for code generation
|
proto.ast = n # needed for code generation
|
||||||
popOwner()
|
popOwner()
|
||||||
|
|
|
||||||
|
|
@ -102,8 +102,12 @@ proc suggestOperations(c: PContext, n: PNode, typ: PType) =
|
||||||
assert typ != nil
|
assert typ != nil
|
||||||
wholeSymTab(filterSym(it) and typeFits(c, it, typ), sectionSuggest)
|
wholeSymTab(filterSym(it) and typeFits(c, it, typ), sectionSuggest)
|
||||||
|
|
||||||
proc suggestEverything(c: PContext, n: PNode) =
|
proc suggestEverything(c: PContext, n: PNode) =
|
||||||
wholeSymTab(filterSym(it), sectionSuggest)
|
# do not produce too many symbols:
|
||||||
|
for i in countdown(c.tab.tos-1, 1):
|
||||||
|
for it in items(c.tab.stack[i]):
|
||||||
|
if filterSym(it):
|
||||||
|
OutWriteln(SymToStr(it, isLocal = i > ModuleTablePos, sectionSuggest))
|
||||||
|
|
||||||
proc suggestFieldAccess(c: PContext, n: PNode) =
|
proc suggestFieldAccess(c: PContext, n: PNode) =
|
||||||
# special code that deals with ``myObj.``. `n` is NOT the nkDotExpr-node, but
|
# special code that deals with ``myObj.``. `n` is NOT the nkDotExpr-node, but
|
||||||
|
|
@ -144,8 +148,7 @@ proc suggestFieldAccess(c: PContext, n: PNode) =
|
||||||
suggestSymList(typ.n)
|
suggestSymList(typ.n)
|
||||||
suggestOperations(c, n, typ)
|
suggestOperations(c, n, typ)
|
||||||
else:
|
else:
|
||||||
# fallback:
|
suggestOperations(c, n, typ)
|
||||||
suggestEverything(c, n)
|
|
||||||
|
|
||||||
proc findClosestDot(n: PNode): PNode =
|
proc findClosestDot(n: PNode): PNode =
|
||||||
if msgs.inCheckpoint(n.info) == cpExact:
|
if msgs.inCheckpoint(n.info) == cpExact:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue