-
-
Notifications
You must be signed in to change notification settings - Fork 32.1k
Add support for Template type (t-strings) to pprint #134551
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
Comments
Good idea, cc @davepeck @lysnikolaou
>>> attributes = {"id": "main"}
>>> attribute_value = "shrubbery"
>>> content = "hello"
>>> template = t"<span {attributes} data-value={attribute_value}>{content}</span>"
>>> pp(template)
Template(strings=('<span ', ' data-value=', '>', '</span>'),
interpolations=(Interpolation({'id': 'main'}, 'attributes', None, ''),
Interpolation('shrubbery',
'attribute_value',
None,
''),
Interpolation('hello', 'content', None, '')))
>>>
>>> nested = t"<div>{template}</div>"
>>> pp(nested)
Template(strings=('<div>', '</div>'),
interpolations=(Interpolation(Template(strings=('<span ',
' data-value=',
'>',
'</span>'),
interpolations=(Interpolation({'id': 'main'},
'attributes',
None,
''),
Interpolation('shrubbery',
'attribute_value',
None,
''),
Interpolation('hello',
'content',
None,
''))),
'template',
None,
''),)) Or something like Black formatting takes up less vertical and horizontal space: Template(
strings=("<div>", "</div>"),
interpolations=(
Interpolation(
Template(
strings=("<span ", " data-value=", ">", "</span>"),
interpolations=(
Interpolation({"id": "main"}, "attributes", None, ""),
Interpolation("shrubbery", "attribute_value", None, ""),
Interpolation("hello", "content", None, ""),
),
),
"template",
None,
"",
),
),
) And taking the simpler case: >>> from pprint import pp
>>> name = "World"
>>> pp(t"Hello {World}")
Template(strings=('Hello ', ''),
interpolations=(Interpolation('World', 'name', None, ''),))""") Formats like: Template(
strings=("Hello ", ""), interpolations=(Interpolation("World", "name", None, ""))
) Or with Template(
strings=("Hello ", ""),
interpolations=(Interpolation("World", "name", None, ""),),
) Obviously we don't need to implement the full flexibility and complexity of Black-style formatting, but perhaps something along these lines? |
I didn't dare to get away from |
I agree with @hugovk that Black-like formatting makes this more readable. If people are okay with that, I'd certainly prefer it. |
Uh oh!
There was an error while loading. Please reload this page.
Feature or enhancement
Proposal:
Update
pprint
functions to understand and formatTemplate
andInterpolation
types:I believe it will be quite common to play with t-strings in the REPL and other dynamic environments, where pretty formatting could help a lot. I don't know how high is the bar for adding types to the
pprint
registry, though.If this is deemed worthwhile, I have a working implementation, pretty straightforward.
More complex examples (inspired from the PEP), to give a sense of what it could look like:
Unfortunately, "interpolation" being a quite long word repeated 2 times in the repr of a t-string, with default formatting rules we soon have text crumpled to the right of the screen... but I believe it is still more readable than
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Linked PRs
The text was updated successfully, but these errors were encountered: