<div dir="ltr"><div class="markdown-here-wrapper" style><p style="margin:1.2em 0px!important">On Thu, Feb 19, 2015 at 9:13 PM, MinRK <<a href="mailto:benjaminrk@gmail.com" target="_blank">benjaminrk@gmail.com</a>> wrote:</p>
<p style="margin:1.2em 0px!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Thu, Feb 19, 2015 at 8:38 PM, Matthias Bussonnier <span dir="ltr"><<a href="mailto:bussonniermatthias@gmail.com" target="_blank">bussonniermatthias@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
Le 19 févr. 2015 à 09:54, Thomas Kluyver <<a href="mailto:takowl@gmail.com" target="_blank">takowl@gmail.com</a>> a écrit :<br>
<span><br>
><br>
> I think previously there was a regex in the JS that looked backwards for something like "name(". As part of the work to make the frontend more language agnostic, this was dropped - it now sends the current cell and the cursor position to the kernel and expects that to work out what it should provide information about.<br>
<br>
</span>Indeed,and having a space after the comma, or not was returning different results.<br>
<span><br>
<br>
> The upside of this is that it's possible to do smarter things, like tokenising the code, so in your example:<br>
><br>
> > func1(a, func2(b), [shift-TAB]<br>
><br>
> it would be able to provide information on func1 rather than func2.<br>
><br>
> The downside is that we haven't implemented anything smart in the kernel yet, so it currently just gets the last name before or at the cursor.<br>
<br>
</span>You can also select and shift-tab, it should give info only on selection.<br>
<span><br>
><br>
> We don't want to start messing around with this code for 3.0 now, but for 3.1 we should aim to make it at least as smart as the JS was in IPython 2.x. I'll open an issue for it.<br>
<br>
</span>It was not technically "smart", and we don't use the new message spec at all,<br>
so I doubt this will be a simple "fix".<br></blockquote><div><br></div></span><div>I don't know what you mean by "we don't use the new message spec", but the tokenization is done entirely on the Python side with the new message spec that we use in 3.0. Right now, the IPython kernel picks the nearest token to the cursor, but we could certainly change this to pick the most recent token before an open-paren if there is one. We just need to make a decision about what token should be inspected for a given context. I think that's a relatively challenging problem, since it's guessing user intent, but implementation shouldn't be the biggest challenge.</div></div></div></div></blockquote><p></p></div><p style="margin:1.2em 0px!important"></p>
<p style="margin:1.2em 0px!important">For example, here’s <a href="https://github.com/ipython/ipython/pull/7819">one implementation</a>.</p>
<p style="margin:1.2em 0px!important">-MinRK</p>
<p style="margin:1.2em 0px!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span><font color="#888888"><br>
--<br>
</font></span><div><div>M<br>
<br>
<br>
> Thomas<br>
> _______________________________________________<br>
> IPython-dev mailing list<br>
> <a href="mailto:IPython-dev@scipy.org" target="_blank">IPython-dev@scipy.org</a><br>
> <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
<br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org" target="_blank">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
</div></div></blockquote></span></div><br></div></div>
</blockquote><p></p></div><p style="margin:1.2em 0px!important"></p>
<div title="MDH:PGJyPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUi
Pk9uIFRodSwgRmViIDE5LCAyMDE1IGF0IDk6MTMgUE0sIE1pblJLIDxzcGFuIGRpcj0ibHRyIj4m
bHQ7PGEgaHJlZj0ibWFpbHRvOmJlbmphbWlucmtAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+
YmVuamFtaW5ya0BnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3Rl
IGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjogMHB4IDBweCAwcHggMC44ZXg7IGJv
cmRlci1sZWZ0LXdpZHRoOiAxcHg7IGJvcmRlci1sZWZ0LWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIw
NCk7IGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDsgcGFkZGluZy1sZWZ0OiAxZXg7Ij48ZGl2IGRp
cj0ibHRyIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFp
bF9xdW90ZSI+PHNwYW4gY2xhc3M9IiI+T24gVGh1LCBGZWIgMTksIDIwMTUgYXQgODozOCBQTSwg
TWF0dGhpYXMgQnVzc29ubmllciA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzpi
dXNzb25uaWVybWF0dGhpYXNAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+YnVzc29ubmllcm1h
dHRoaWFzQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xh
c3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDBweCAwLjhleDsgYm9yZGVy
LWxlZnQtd2lkdGg6IDFweDsgYm9yZGVyLWxlZnQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsg
Ym9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkOyBwYWRkaW5nLWxlZnQ6IDFleDsiPjxicj4KTGUgMTkg
ZsOpdnIuIDIwMTUgw6AgMDk6NTQsIFRob21hcyBLbHV5dmVyICZsdDs8YSBocmVmPSJtYWlsdG86
dGFrb3dsQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnRha293bEBnbWFpbC5jb208L2E+Jmd0
OyBhIMOpY3JpdCA6PGJyPgo8c3Bhbj48YnI+CiZndDs8YnI+CiZndDsgSSB0aGluayBwcmV2aW91
c2x5IHRoZXJlIHdhcyBhIHJlZ2V4IGluIHRoZSBKUyB0aGF0IGxvb2tlZCBiYWNrd2FyZHMgZm9y
IHNvbWV0aGluZyBsaWtlICJuYW1lKCIuIEFzIHBhcnQgb2YgdGhlIHdvcmsgdG8gbWFrZSB0aGUg
ZnJvbnRlbmQgbW9yZSBsYW5ndWFnZSBhZ25vc3RpYywgdGhpcyB3YXMgZHJvcHBlZCAtIGl0IG5v
dyBzZW5kcyB0aGUgY3VycmVudCBjZWxsIGFuZCB0aGUgY3Vyc29yIHBvc2l0aW9uIHRvIHRoZSBr
ZXJuZWwgYW5kIGV4cGVjdHMgdGhhdCB0byB3b3JrIG91dCB3aGF0IGl0IHNob3VsZCBwcm92aWRl
IGluZm9ybWF0aW9uIGFib3V0Ljxicj4KPGJyPgo8L3NwYW4+SW5kZWVkLGFuZCBoYXZpbmcgYSBz
cGFjZSBhZnRlciB0aGUgY29tbWEsIG9yIG5vdCB3YXMgcmV0dXJuaW5nIGRpZmZlcmVudCByZXN1
bHRzLjxicj4KPHNwYW4+PGJyPgo8YnI+CiZndDsgVGhlIHVwc2lkZSBvZiB0aGlzIGlzIHRoYXQg
aXQncyBwb3NzaWJsZSB0byBkbyBzbWFydGVyIHRoaW5ncywgbGlrZSB0b2tlbmlzaW5nIHRoZSBj
b2RlLCBzbyBpbiB5b3VyIGV4YW1wbGU6PGJyPgomZ3Q7PGJyPgomZ3Q7ICZndDsgZnVuYzEoYSwg
ZnVuYzIoYiksIFtzaGlmdC1UQUJdPGJyPgomZ3Q7PGJyPgomZ3Q7IGl0IHdvdWxkIGJlIGFibGUg
dG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBmdW5jMSByYXRoZXIgdGhhbiBmdW5jMi48YnI+CiZn
dDs8YnI+CiZndDsgVGhlIGRvd25zaWRlIGlzIHRoYXQgd2UgaGF2ZW4ndCBpbXBsZW1lbnRlZCBh
bnl0aGluZyBzbWFydCBpbiB0aGUga2VybmVsIHlldCwgc28gaXQgY3VycmVudGx5IGp1c3QgZ2V0
cyB0aGUgbGFzdCBuYW1lIGJlZm9yZSBvciBhdCB0aGUgY3Vyc29yLjxicj4KPGJyPgo8L3NwYW4+
WW91IGNhbiBhbHNvIHNlbGVjdCBhbmQgc2hpZnQtdGFiLCBpdCBzaG91bGQgZ2l2ZSBpbmZvIG9u
bHkgb24gc2VsZWN0aW9uLjxicj4KPHNwYW4+PGJyPgomZ3Q7PGJyPgomZ3Q7IFdlIGRvbid0IHdh
bnQgdG8gc3RhcnQgbWVzc2luZyBhcm91bmQgd2l0aCB0aGlzIGNvZGUgZm9yIDMuMCBub3csIGJ1
dCBmb3IgMy4xIHdlIHNob3VsZCBhaW0gdG8gbWFrZSBpdCBhdCBsZWFzdCBhcyBzbWFydCBhcyB0
aGUgSlMgd2FzIGluIElQeXRob24gMi54LiBJJ2xsIG9wZW4gYW4gaXNzdWUgZm9yIGl0Ljxicj4K
PGJyPgo8L3NwYW4+SXQgd2FzIG5vdCB0ZWNobmljYWxseSAic21hcnQiLCBhbmQgd2UgZG9uJ3Qg
dXNlIHRoZSBuZXcgbWVzc2FnZSBzcGVjIGF0IGFsbCw8YnI+CnNvIEkgZG91YnQgdGhpcyB3aWxs
IGJlIGEgc2ltcGxlICJmaXgiLjxicj48L2Jsb2NrcXVvdGU+PGRpdj48YnI+PC9kaXY+PC9zcGFu
PjxkaXY+SSBkb24ndCBrbm93IHdoYXQgeW91IG1lYW4gYnkgIndlIGRvbid0IHVzZSB0aGUgbmV3
IG1lc3NhZ2Ugc3BlYyIsIGJ1dCB0aGUgdG9rZW5pemF0aW9uIGlzIGRvbmUgZW50aXJlbHkgb24g
dGhlIFB5dGhvbiBzaWRlIHdpdGggdGhlIG5ldyBtZXNzYWdlIHNwZWMgdGhhdCB3ZSB1c2UgaW4g
My4wLiBSaWdodCBub3csIHRoZSBJUHl0aG9uIGtlcm5lbCBwaWNrcyB0aGUgbmVhcmVzdCB0b2tl
biB0byB0aGUgY3Vyc29yLCBidXQgd2UgY291bGQgY2VydGFpbmx5IGNoYW5nZSB0aGlzIHRvIHBp
Y2sgdGhlIG1vc3QgcmVjZW50IHRva2VuIGJlZm9yZSBhbiBvcGVuLXBhcmVuIGlmIHRoZXJlIGlz
IG9uZS4gV2UganVzdCBuZWVkIHRvIG1ha2UgYSBkZWNpc2lvbiBhYm91dCB3aGF0IHRva2VuIHNo
b3VsZCBiZSBpbnNwZWN0ZWQgZm9yIGEgZ2l2ZW4gY29udGV4dC4gSSB0aGluayB0aGF0J3MgYSBy
ZWxhdGl2ZWx5IGNoYWxsZW5naW5nIHByb2JsZW0sIHNpbmNlIGl0J3MgZ3Vlc3NpbmcgdXNlciBp
bnRlbnQsIGJ1dCBpbXBsZW1lbnRhdGlvbiBzaG91bGRuJ3QgYmUgdGhlIGJpZ2dlc3QgY2hhbGxl
bmdlLjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48
ZGl2PkZvciBleGFtcGxlLCBoZXJlJ3MgW29uZSBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9naXRo
dWIuY29tL2lweXRob24vaXB5dGhvbi9wdWxsLzc4MTkpLjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk
aXY+LU1pblJLPC9kaXY+PGRpdj4mbmJzcDs8L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxf
cXVvdGUiIHN0eWxlPSJtYXJnaW46IDBweCAwcHggMHB4IDAuOGV4OyBib3JkZXItbGVmdC13aWR0
aDogMXB4OyBib3JkZXItbGVmdC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBib3JkZXItbGVm
dC1zdHlsZTogc29saWQ7IHBhZGRpbmctbGVmdDogMWV4OyI+PGRpdiBkaXI9Imx0ciI+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48c3BhbiBjbGFzcz0i
Ij48ZGl2PiZuYnNwOzwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9
Im1hcmdpbjogMHB4IDBweCAwcHggMC44ZXg7IGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7IGJvcmRl
ci1sZWZ0LWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xp
ZDsgcGFkZGluZy1sZWZ0OiAxZXg7Ij4KPHNwYW4+PGZvbnQgY29sb3I9IiM4ODg4ODgiPjxicj4K
LS08YnI+CjwvZm9udD48L3NwYW4+PGRpdj48ZGl2Pk08YnI+Cjxicj4KPGJyPgomZ3Q7IFRob21h
czxicj4KJmd0OyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX188d2JyPl9fX19fX19fX19f
X19fX19fPGJyPgomZ3Q7IElQeXRob24tZGV2IG1haWxpbmcgbGlzdDxicj4KJmd0OyA8YSBocmVm
PSJtYWlsdG86SVB5dGhvbi1kZXZAc2NpcHkub3JnIiB0YXJnZXQ9Il9ibGFuayI+SVB5dGhvbi1k
ZXZAc2NpcHkub3JnPC9hPjxicj4KJmd0OyA8YSBocmVmPSJodHRwOi8vbWFpbC5zY2lweS5vcmcv
bWFpbG1hbi9saXN0aW5mby9pcHl0aG9uLWRldiIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9tYWls
LnNjaXB5Lm9yZy9tYWlsbWFuLzx3YnI+bGlzdGluZm8vaXB5dGhvbi1kZXY8L2E+PGJyPgo8YnI+
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzx3YnI+X19fX19fX19fX19fX19fX188YnI+
CklQeXRob24tZGV2IG1haWxpbmcgbGlzdDxicj4KPGEgaHJlZj0ibWFpbHRvOklQeXRob24tZGV2
QHNjaXB5Lm9yZyIgdGFyZ2V0PSJfYmxhbmsiPklQeXRob24tZGV2QHNjaXB5Lm9yZzwvYT48YnI+
CjxhIGhyZWY9Imh0dHA6Ly9tYWlsLnNjaXB5Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lweXRob24t
ZGV2IiB0YXJnZXQ9Il9ibGFuayI+aHR0cDovL21haWwuc2NpcHkub3JnL21haWxtYW4vPHdicj5s
aXN0aW5mby9pcHl0aG9uLWRldjwvYT48YnI+CjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L3Nw
YW4+PC9kaXY+PGJyPjwvZGl2PjwvZGl2Pgo8L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>