diff options
author | Jake Leahy <jake@leahy.dev> | 2023-07-10 16:34:10 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-10 08:34:10 +0200 |
commit | 1b132ddaa2734fc43a9c172407fc968cfeec4a24 (patch) | |
tree | 6247aa5dda47642c3bad0e52ebff70f445ce8efe | |
parent | 6ec10a4c9182c513fecd17fde4a81a3a007bb2e9 (diff) | |
download | Nim-1b132ddaa2734fc43a9c172407fc968cfeec4a24.tar.gz |
Fix nimsuggest not showing suggestions for imported tuples (#22241)
* Add tests Also test if exported all tuple fields works. This seems like a hacky solution so will try and dive further to find a better solution * Always suggest tuple fields if it passes the filter If the tuple we are accessing is in scope then all the fields will also be in scope * Update tests so line numbers are correct
-rw-r--r-- | compiler/suggest.nim | 10 | ||||
-rw-r--r-- | nimsuggest/tests/module_20265.nim | 6 | ||||
-rw-r--r-- | nimsuggest/tests/t20265_1.nim | 8 | ||||
-rw-r--r-- | nimsuggest/tests/t20265_2.nim | 8 |
4 files changed, 31 insertions, 1 deletions
diff --git a/compiler/suggest.nim b/compiler/suggest.nim index f41f35519..ca19b2460 100644 --- a/compiler/suggest.nim +++ b/compiler/suggest.nim @@ -440,7 +440,15 @@ proc suggestFieldAccess(c: PContext, n, field: PNode, outputs: var Suggestions) if t[0] == nil: break t = skipTypes(t[0], skipPtrs) elif typ.kind == tyTuple and typ.n != nil: - suggestSymList(c, typ.n, field, n.info, outputs) + # All tuple fields are in scope + # So go through each field and add it to the suggestions (If it passes the filter) + for node in typ.n: + if node.kind == nkSym: + let s = node.sym + var pm: PrefixMatch + if filterSym(s, field, pm): + outputs.add(symToSuggest(c.graph, s, isLocal=true, ideSug, n.info, + s.getQuality, pm, c.inTypeContext > 0, 0)) suggestOperations(c, n, field, orig, outputs) if typ != orig: diff --git a/nimsuggest/tests/module_20265.nim b/nimsuggest/tests/module_20265.nim new file mode 100644 index 000000000..24b7d10c9 --- /dev/null +++ b/nimsuggest/tests/module_20265.nim @@ -0,0 +1,6 @@ +type A* = tuple + a: int + b: int + +var x*: A = (a: 2, b: 10) +var y* = (a: 2, b: 10) diff --git a/nimsuggest/tests/t20265_1.nim b/nimsuggest/tests/t20265_1.nim new file mode 100644 index 000000000..553b3d545 --- /dev/null +++ b/nimsuggest/tests/t20265_1.nim @@ -0,0 +1,8 @@ +discard """ +$nimsuggest --tester $file +>sug $1 +sug;;skField;;a;;int;;*module_20265.nim;;6;;10;;"";;100;;None +sug;;skField;;b;;int;;*module_20265.nim;;6;;16;;"";;100;;None +""" +import module_20265 +y.#[!]# diff --git a/nimsuggest/tests/t20265_2.nim b/nimsuggest/tests/t20265_2.nim new file mode 100644 index 000000000..33edf2d9a --- /dev/null +++ b/nimsuggest/tests/t20265_2.nim @@ -0,0 +1,8 @@ +discard """ +$nimsuggest --tester $file +>sug $1 +sug;;skField;;a;;int;;*module_20265.nim;;2;;2;;"";;100;;None +sug;;skField;;b;;int;;*module_20265.nim;;3;;2;;"";;100;;None +""" +import module_20265 +x.#[!]# |