
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