On 8/18/2016 12:50 PM, Steve Dower wrote: > I'm generally inclined to agree, especially as someone who is very > likely to be implementing syntax highlighting and completion support > within f-literals.
I consider these separate issues. IDLE currently provides filename completion support within strings while still highlighting the string one color. Even if it were enhanced to do name completion within an f-string, I am not sure I would want to put a mixture of colors within the string rather than leave if all one color.
> I stepped out of the original discussion near the start as it looked > like we were going to end up with interleaved strings and normal > expressions, but if that's not the case then it is going to make it > very difficult to provide a nice coding experience for them.This is the crux of this thread. Is an f-string a single string that contains magically handled code, or interleaved strings using { and } as closing and opening quotes (which is backwards from their normal function of being opener and closer) and expressions? The latter view makes the grammar context sensitive, I believe, as } could only open a string if there is a previous f-tagged string an indefinite number of alternations back.
It is not uncommon to write strings that consist completely of code. "for i in iterable: a.append(f(i))" to be written out or eval()ed or exec()ed.Does your environment have a mode to provide syntax highlighting and completion support for such things?
What I think would be more useful would be the ability to syntax check such code strings while editing. A python-coded editor could just pass the extracted string to compile().
I don't think f'{x.partition('-')[0]}' is any less readable as a result
of the reused quotes,
I find it hard to not read f'{x.partition(' + ')[0]}' as string concatenation.
and it will certainly be easier for highlighters to handle (assuming they're doing anything more complicated than simply displaying the entire expression in a different colour).
Without the escapes, existing f-unaware highlighters like IDLE's will be broken in that they will highlight the single f-string as two strings with differently highlighted content in the middle. For f'{x.partition('if')[0]}', the 'if' is and will be erroneously highlighted as a keyword. I consider this breakage unacceptible.
-- Terry Jan Reedy _______________________________________________ Python-ideas mailing list [email protected] https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
