Closed tristanlatr closed 9 months ago
Hello,
All the magic for get_*
methods happens in the __getattr__
method:
And _pp
is defined here:
Let me know if this answers your question.
Thanks for the quick response.
So, if I understand correctly, _p_op
and _pp
are only defined here:
and there
The precedence handling a real headache...
My use case is to colorize the assigned values to constant, so not all nodes needs to be handled, whereas in astor
, only nodes valid in assignment expressions needs to be handled. For instance:
CONST = (3-6)*0.5 + func(123)
The current behaviour can be observed here: https://pydoctor--402.org.readthedocs.build/en/402/docformat/restructuredtext/restructuredtext_demo.constants.html#RE_RAW_STR2
For the little story, I ended up with always adding parenthesis when precedence of the parent operation is greater or equal to the precedence of the nested operation.
See the code adapted from the astor
library here:
https://github.com/tristanlatr/pydoctor/blob/c6316e4351ceac239152cf478e01a184faaccedd/pydoctor/epydoc/markup/_pyval_repr.py#L131-L158
It currently only support ast.UnaryOp
, ast.BinOp
and ast.BoolOp
.
In your code, I'm not sure to understand why the set_precedence
function is called practically all the time, I see only ast.UnaryOp
, ast.BinOp
, ast.BoolOp
, ast.Compare
and ast.IfExp
that actually requires to handle delimiters in a dynamic manner. I'm not sure to see where it's actually useful outside of the listed nodes, in the case of assignments only.
Anyway, thanks for your answer.
Hi,
I'm looking at your code in order to get inspirations to code a colorizer for ast values and I can't find where you defined the method
SourceGenerator.get__pp
.Any help with that would be appreciated. Thanks.