Berry added f-strings as an alternative to string formatting #18937
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description:
Berry add support for f-strings (similar to python). f-strings are converted internally by lexer to their format equivalent and then parsed as normally. It works as a transpiler, syntactically rewriting code before parsing.
Principle:
f"begin { <expr> : <format>} end"
becomesformat("begin %<format> end", expr
Example:
f"2 + 2 equals {2+2:i}"
becomesformat("2 + 2 equals %i", 2+2)
If the format is unspecified,
%s
is inserted:f'"foo" + "bar" equals {"foo"+"bar"}
becomesformat("\"foo\" + \"bar\" equals %s", "foo"+bar")
If you accidentally insert
%
in the format, it is ignored:f"1/3 equals {1.0 / 3.0 :%.3f}"
becomesformat("1/3 equals %.3f", 1.0 / 3.0)
To output
{
use double brackets: (note that%
are automatically doubled)f"{{ 1% }}"
becomesformat("{ 1%% }")
Use the
=
(equal sign) to also output the expression:f"{id=:i} {name=}"
becomesformat("id=%i name=%s", id, name)
Note: f-strings takes less than 1KB of flash memory in the lexer
Checklist:
NOTE: The code change must pass CI tests. Your PR cannot be merged unless tests pass