MCPcopy Create free account
hub / github.com/astral-sh/ruff / unparse_expr

Method unparse_expr

crates/ruff_python_codegen/src/generator.rs:921–1377  ·  view source on GitHub ↗
(&mut self, ast: &Expr, level: u8)

Source from the content-addressed store, hash-verified

919 }
920
921 fn unparse_expr(&mut self, ast: &Expr, level: u8) {
922 macro_rules! opprec {
923 ($opty:ident, $x:expr, $enu:path, $($var:ident($op:literal, $prec:ident)),*$(,)?) => {
924 match $x {
925 $(<$enu>::$var => (opprec!(@space $opty, $op), precedence::$prec),)*
926 }
927 };
928 (@space bin, $op:literal) => {
929 concat!(" ", $op, " ")
930 };
931 (@space un, $op:literal) => {
932 $op
933 };
934 }
935 macro_rules! group_if {
936 ($lvl:expr, $body:block) => {{
937 let group = level > $lvl;
938 self.p_if(group, "(");
939 let ret = $body;
940 self.p_if(group, ")");
941 ret
942 }};
943 }
944 match ast {
945 Expr::BoolOp(ast::ExprBoolOp {
946 op,
947 values,
948 range: _,
949 node_index: _,
950 }) => {
951 let (op, prec) = opprec!(bin, op, BoolOp, And("and", AND), Or("or", OR));
952 group_if!(prec, {
953 let mut first = true;
954 for val in values {
955 self.p_delim(&mut first, op);
956 self.unparse_expr(val, prec + 1);
957 }
958 });
959 }
960 Expr::Named(ast::ExprNamed {
961 target,
962 value,
963 range: _,
964 node_index: _,
965 }) => {
966 group_if!(precedence::NAMED_EXPR, {
967 self.unparse_expr(target, precedence::NAMED_EXPR);
968 self.p(" := ");
969 self.unparse_expr(value, precedence::NAMED_EXPR + 1);
970 });
971 }
972 Expr::BinOp(ast::ExprBinOp {
973 left,
974 op,
975 right,
976 range: _,
977 node_index: _,
978 }) => {

Callers 10

exprMethod · 0.45
unparse_patternMethod · 0.45
unparse_match_caseMethod · 0.45
unparse_type_paramMethod · 0.45
unparse_parameterMethod · 0.45
unparse_compMethod · 0.45
unparse_with_itemMethod · 0.45

Calls 14

to_stringFunction · 0.85
pMethod · 0.80
p_delimMethod · 0.80
unparse_compMethod · 0.80
iter_source_orderMethod · 0.80
p_idMethod · 0.80
p_bytes_reprMethod · 0.80
is_emptyMethod · 0.45
as_refMethod · 0.45

Tested by

no test coverage detected