Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python 3.6 f-strings break notebook syntax highlighting #2037

Closed
bede opened this issue Jan 11, 2017 · 16 comments · Fixed by #2066
Closed

Python 3.6 f-strings break notebook syntax highlighting #2037

bede opened this issue Jan 11, 2017 · 16 comments · Fixed by #2066

Comments

@bede
Copy link

bede commented Jan 11, 2017

Using Notebook v4.3.1, use of f-strings (PEP 498, Python 3.6) breaks syntax highlighting for the remaining code in a given cell.

Is Jupyter curently unable to handle this syntax? I would imagine that this issue would have been raised by others were this the case.

Using OS X, brewed Python 3.6.0, Firefox 50.

$ python3 --version
Python 3.6.0
$ jupyter --version
4.2.1
$ jupyter-notebook --version
4.3.1
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12.2
BuildVersion:	16C68
@bede bede changed the title Python 3.6 f-strings break Notebook syntax highlighting Python 3.6 f-strings break notebook syntax highlighting Jan 11, 2017
@takluyver
Copy link
Member

It's an issue with Codemirror, the editor component. It has been fixed (codemirror/codemirror5#4182), but we had to stick with an old version of Codemirror to work around an issue with Safari (#2004).

@gnestor @minrk what's the plan for getting back to a new version of Codemirror? Do we know if 5.22.1 fixes it?

@bede
Copy link
Author

bede commented Jan 12, 2017

Thanks, at least the fix is trivial.

Could we at least patch the existing Codemirror version? F-strings are the big ticket item in Python 3.6 after all.

@takluyver
Copy link
Member

The JS files are built into one big concatenated file. We don't have a good way to carry patches against upstream JS projects, as far as I know.

@bede
Copy link
Author

bede commented Jan 12, 2017

Ah that's a pity, but understandable @takluyver. I've just grep'ed all js files in site-packages for rbu (safe from minification since it's a string?) and can't find this concatenated JS you mention... For the sake of myself and others patching it, please could tell me its path?

@takluyver
Copy link
Member

Should be notebook/static/notebook/js/main.min.js, I think

@minrk
Copy link
Member

minrk commented Jan 13, 2017

@gnestor the CodeMirror issue was closed, I think due to a comment that the bug wasn't reproducible outside the notebook. Does that mean it's due to our CSS somewhere?

@bede
Copy link
Author

bede commented Jan 13, 2017

Patch

Temporary solution tested on notebook version 4.3.1

Two patterns inside site-packages/notebook/static/notebook/js/main.min.js need replacing: [rub] with [rubf] and "rub" with "rubf"

With sed:

sed -i 's/'"rub"'/'"rubf"'/g' -i 's/\[rub\]/\[rubf\]/g' /usr/local/lib/python3.6/site-packages/notebook/static/notebook/js/main.min.js

@gnestor
Copy link
Contributor

gnestor commented Jan 13, 2017

@minrk @takluyver I just tested 5.22.2 in Safari and the same issue as before. @jasongrout fixed this in lab by updating the CSS. I tried changing .CodeMirror-lines from padding: 0.4em to padding: 5px but no luck...

@bede I can't find a[rub] or "rub" in the source...

@bede
Copy link
Author

bede commented Jan 14, 2017

@gnestor Lines 65, 73 and 188 of https://github.com/codemirror/CodeMirror/blob/97eb5221f05c09cfeafefa45b52da022fbcc46af/mode/python/python.js

rubf and rbuf are the relevant updated strings

@takluyver
Copy link
Member

I've marked this as 5.0 - I'd really like to get it fixed soon, because syntax highlighting is currently broken with the new Python 3.6 strings.

Are we aware of any fix for the Safari issue in CodeMirror that would let us update it again? If not, can we work out a way to use a patched CodeMirror?

@gnestor
Copy link
Contributor

gnestor commented Jan 20, 2017

@takluyver Agreed! I've spent some time investigating the Safari issue and what I've concluded is that it was introduced in CodeMirror 5.17. To quote from codemirror/codemirror5#4454 (comment):

Here is a list commits included in 5.17: https://github.com/codemirror/CodeMirror/commits/master?after=Y3Vyc29yOjiTKo4zLKAvc9OV%2BJnP36dpIuEyKzIwOQ%3D%3D

I have a feeling that this commit might be the culprit although I haven't been able to resolve this by simply reversing the changes in this commit: codemirror/codemirror5@2c913e5

I will keep trying to isolate the issue. If it's not resolved by 5.0 release time, let's try patching CodeMirror.

@oldgeeksguide
Copy link

Thanks for the detailed info on the patch!

@gnestor
Copy link
Contributor

gnestor commented Jan 21, 2017

Ok, I've isolated this bug to this commit: codemirror/codemirror5@e60f4b7

We'll see if we can fix it on the CM side... @takluyver Any idea why this commit is causing this behavior?

@ruxi
Copy link

ruxi commented Jan 21, 2017

whats the recommended workaround for this?

@gnestor
Copy link
Contributor

gnestor commented Jan 21, 2017

You can try @bede's patch: #2037 (comment)

@minrk minrk mentioned this issue Jan 24, 2017
1 task
@gnestor gnestor modified the milestones: 4.3.2, 5.0 Jan 25, 2017
@gnestor gnestor added this to Merged PRs in 4.3.2 Jan 30, 2017
@gnestor gnestor moved this from Merged PRs to Closed Issues in 4.3.2 Jan 30, 2017
@gnestor
Copy link
Contributor

gnestor commented Feb 1, 2017

Notebook 4.3.2 was just published 👍

gnestor added a commit to gnestor/CodeMirror that referenced this issue Jun 23, 2017
Kilo59 added a commit to Kilo59/notebook that referenced this issue Aug 2, 2018
This should fix f string syntax highlighting 
jupyter#2037
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
4.3.2
Closed Issues
Development

Successfully merging a pull request may close this issue.

6 participants