mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-31 12:05:57 +00:00 
			
		
		
		
	[flake8-simplify] Stabilize further simplification to binary expressions in autofix for if-else-block-instead-of-if-exp (SIM108) (#18506)
				
					
				
			This commit is contained in:
		
							parent
							
								
									02b5376a3c
								
							
						
					
					
						commit
						5cf2c40d13
					
				
					 5 changed files with 22 additions and 413 deletions
				
			
		|  | @ -73,11 +73,6 @@ pub(crate) const fn is_only_add_return_none_at_end_enabled(settings: &LinterSett | ||||||
|     settings.preview.is_enabled() |     settings.preview.is_enabled() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // https://github.com/astral-sh/ruff/pull/12796
 |  | ||||||
| pub(crate) const fn is_simplify_ternary_to_binary_enabled(settings: &LinterSettings) -> bool { |  | ||||||
|     settings.preview.is_enabled() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // https://github.com/astral-sh/ruff/pull/16719
 | // https://github.com/astral-sh/ruff/pull/16719
 | ||||||
| pub(crate) const fn is_fix_manual_dict_comprehension_enabled(settings: &LinterSettings) -> bool { | pub(crate) const fn is_fix_manual_dict_comprehension_enabled(settings: &LinterSettings) -> bool { | ||||||
|     settings.preview.is_enabled() |     settings.preview.is_enabled() | ||||||
|  |  | ||||||
|  | @ -58,7 +58,6 @@ mod tests { | ||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     #[test_case(Rule::IfElseBlockInsteadOfIfExp, Path::new("SIM108.py"))] |  | ||||||
|     #[test_case(Rule::MultipleWithStatements, Path::new("SIM117.py"))] |     #[test_case(Rule::MultipleWithStatements, Path::new("SIM117.py"))] | ||||||
|     fn preview_rules(rule_code: Rule, path: &Path) -> Result<()> { |     fn preview_rules(rule_code: Rule, path: &Path) -> Result<()> { | ||||||
|         let snapshot = format!( |         let snapshot = format!( | ||||||
|  |  | ||||||
|  | @ -7,13 +7,14 @@ use ruff_text_size::{Ranged, TextRange}; | ||||||
| 
 | 
 | ||||||
| use crate::checkers::ast::Checker; | use crate::checkers::ast::Checker; | ||||||
| use crate::fix::edits::fits; | use crate::fix::edits::fits; | ||||||
| use crate::preview::is_simplify_ternary_to_binary_enabled; |  | ||||||
| use crate::{Edit, Fix, FixAvailability, Violation}; | use crate::{Edit, Fix, FixAvailability, Violation}; | ||||||
| 
 | 
 | ||||||
| /// ## What it does
 | /// ## What it does
 | ||||||
| /// Check for `if`-`else`-blocks that can be replaced with a ternary operator.
 | /// Check for `if`-`else`-blocks that can be replaced with a ternary
 | ||||||
| /// Moreover, in [preview], check if these ternary expressions can be
 | /// or binary operator.
 | ||||||
| /// further simplified to binary expressions.
 | ///
 | ||||||
|  | /// The lint is suppressed if the suggested replacement would exceed
 | ||||||
|  | /// the maximum line length configured in [pycodestyle.max-line-length].
 | ||||||
| ///
 | ///
 | ||||||
| /// ## Why is this bad?
 | /// ## Why is this bad?
 | ||||||
| /// `if`-`else`-blocks that assign a value to a variable in both branches can
 | /// `if`-`else`-blocks that assign a value to a variable in both branches can
 | ||||||
|  | @ -33,7 +34,7 @@ use crate::{Edit, Fix, FixAvailability, Violation}; | ||||||
| /// bar = x if foo else y
 | /// bar = x if foo else y
 | ||||||
| /// ```
 | /// ```
 | ||||||
| ///
 | ///
 | ||||||
| /// Or, in [preview]:
 | /// Or:
 | ||||||
| ///
 | ///
 | ||||||
| /// ```python
 | /// ```python
 | ||||||
| /// if cond:
 | /// if cond:
 | ||||||
|  | @ -57,8 +58,8 @@ use crate::{Edit, Fix, FixAvailability, Violation}; | ||||||
| /// ## References
 | /// ## References
 | ||||||
| /// - [Python documentation: Conditional expressions](https://docs.python.org/3/reference/expressions.html#conditional-expressions)
 | /// - [Python documentation: Conditional expressions](https://docs.python.org/3/reference/expressions.html#conditional-expressions)
 | ||||||
| ///
 | ///
 | ||||||
| /// [preview]: https://docs.astral.sh/ruff/preview/
 |  | ||||||
| /// [code coverage]: https://github.com/nedbat/coveragepy/issues/509
 | /// [code coverage]: https://github.com/nedbat/coveragepy/issues/509
 | ||||||
|  | /// [pycodestyle.max-line-length]: https://docs.astral.sh/ruff/settings/#lint_pycodestyle_max-line-length
 | ||||||
| #[derive(ViolationMetadata)] | #[derive(ViolationMetadata)] | ||||||
| pub(crate) struct IfElseBlockInsteadOfIfExp { | pub(crate) struct IfElseBlockInsteadOfIfExp { | ||||||
|     /// The ternary or binary expression to replace the `if`-`else`-block.
 |     /// The ternary or binary expression to replace the `if`-`else`-block.
 | ||||||
|  | @ -184,16 +185,12 @@ pub(crate) fn if_else_block_instead_of_if_exp(checker: &Checker, stmt_if: &ast:: | ||||||
|     //
 |     //
 | ||||||
|     // The match statement below implements the following
 |     // The match statement below implements the following
 | ||||||
|     // logic:
 |     // logic:
 | ||||||
|     //     - If `test == body_value` and preview enabled, replace with `target_var = test or else_value`
 |     //     - If `test == body_value`, replace with `target_var = test or else_value`
 | ||||||
|     //     - If `test == not body_value` and preview enabled, replace with `target_var = body_value and else_value`
 |     //     - If `test == not body_value`, replace with `target_var = body_value and else_value`
 | ||||||
|     //     - If `not test == body_value` and preview enabled, replace with `target_var = body_value and else_value`
 |     //     - If `not test == body_value`, replace with `target_var = body_value and else_value`
 | ||||||
|     //     - Otherwise, replace with `target_var = body_value if test else else_value`
 |     //     - Otherwise, replace with `target_var = body_value if test else else_value`
 | ||||||
|     let (contents, assignment_kind) = match ( |     let (contents, assignment_kind) = match (test, body_value) { | ||||||
|         is_simplify_ternary_to_binary_enabled(checker.settings), |         (test_node, body_node) | ||||||
|         test, |  | ||||||
|         body_value, |  | ||||||
|     ) { |  | ||||||
|         (true, test_node, body_node) |  | ||||||
|             if ComparableExpr::from(test_node) == ComparableExpr::from(body_node) |             if ComparableExpr::from(test_node) == ComparableExpr::from(body_node) | ||||||
|                 && !contains_effect(test_node, |id| checker.semantic().has_builtin_binding(id)) => |                 && !contains_effect(test_node, |id| checker.semantic().has_builtin_binding(id)) => | ||||||
|         { |         { | ||||||
|  | @ -201,7 +198,7 @@ pub(crate) fn if_else_block_instead_of_if_exp(checker: &Checker, stmt_if: &ast:: | ||||||
|             let binary = assignment_binary_or(target_var, body_value, else_value); |             let binary = assignment_binary_or(target_var, body_value, else_value); | ||||||
|             (checker.generator().stmt(&binary), AssignmentKind::Binary) |             (checker.generator().stmt(&binary), AssignmentKind::Binary) | ||||||
|         } |         } | ||||||
|         (true, test_node, body_node) |         (test_node, body_node) | ||||||
|             if (test_node.as_unary_op_expr().is_some_and(|op_expr| { |             if (test_node.as_unary_op_expr().is_some_and(|op_expr| { | ||||||
|                 op_expr.op.is_not() |                 op_expr.op.is_not() | ||||||
|                     && ComparableExpr::from(&op_expr.operand) == ComparableExpr::from(body_node) |                     && ComparableExpr::from(&op_expr.operand) == ComparableExpr::from(body_node) | ||||||
|  |  | ||||||
|  | @ -118,7 +118,7 @@ SIM108.py:117:1: SIM108 Use ternary operator `x = 3 if True else 5` instead of ` | ||||||
|     | |     | | ||||||
|     = help: Replace `if`-`else`-block with `x = 3 if True else 5` |     = help: Replace `if`-`else`-block with `x = 3 if True else 5` | ||||||
| 
 | 
 | ||||||
| SIM108.py:141:1: SIM108 [*] Use ternary operator `z = cond if cond else other_cond` instead of `if`-`else`-block | SIM108.py:141:1: SIM108 [*] Use binary operator `z = cond or other_cond` instead of `if`-`else`-block | ||||||
|     | |     | | ||||||
| 139 |   # SIM108 - should suggest | 139 |   # SIM108 - should suggest | ||||||
| 140 |   # z = cond or other_cond | 140 |   # z = cond or other_cond | ||||||
|  | @ -130,7 +130,7 @@ SIM108.py:141:1: SIM108 [*] Use ternary operator `z = cond if cond else other_co | ||||||
| 145 | | 145 | | ||||||
| 146 |   # SIM108 - should suggest | 146 |   # SIM108 - should suggest | ||||||
|     | |     | | ||||||
|     = help: Replace `if`-`else`-block with `z = cond if cond else other_cond` |     = help: Replace `if`-`else`-block with `z = cond or other_cond` | ||||||
| 
 | 
 | ||||||
| ℹ Unsafe fix | ℹ Unsafe fix | ||||||
| 138 138 |  | 138 138 |  | ||||||
|  | @ -140,12 +140,12 @@ SIM108.py:141:1: SIM108 [*] Use ternary operator `z = cond if cond else other_co | ||||||
| 142     |-    z = cond  | 142     |-    z = cond  | ||||||
| 143     |-else: | 143     |-else: | ||||||
| 144     |-    z = other_cond | 144     |-    z = other_cond | ||||||
|     141 |+z = cond if cond else other_cond |     141 |+z = cond or other_cond | ||||||
| 145 142 |  | 145 142 |  | ||||||
| 146 143 | # SIM108 - should suggest | 146 143 | # SIM108 - should suggest | ||||||
| 147 144 | # z = cond and other_cond | 147 144 | # z = cond and other_cond | ||||||
| 
 | 
 | ||||||
| SIM108.py:148:1: SIM108 [*] Use ternary operator `z = cond if not cond else other_cond` instead of `if`-`else`-block | SIM108.py:148:1: SIM108 [*] Use binary operator `z = cond and other_cond` instead of `if`-`else`-block | ||||||
|     | |     | | ||||||
| 146 |   # SIM108 - should suggest | 146 |   # SIM108 - should suggest | ||||||
| 147 |   # z = cond and other_cond | 147 |   # z = cond and other_cond | ||||||
|  | @ -157,7 +157,7 @@ SIM108.py:148:1: SIM108 [*] Use ternary operator `z = cond if not cond else othe | ||||||
| 152 | | 152 | | ||||||
| 153 |   # SIM108 - should suggest | 153 |   # SIM108 - should suggest | ||||||
|     | |     | | ||||||
|     = help: Replace `if`-`else`-block with `z = cond if not cond else other_cond` |     = help: Replace `if`-`else`-block with `z = cond and other_cond` | ||||||
| 
 | 
 | ||||||
| ℹ Unsafe fix | ℹ Unsafe fix | ||||||
| 145 145 |  | 145 145 |  | ||||||
|  | @ -167,12 +167,12 @@ SIM108.py:148:1: SIM108 [*] Use ternary operator `z = cond if not cond else othe | ||||||
| 149     |-    z = cond | 149     |-    z = cond | ||||||
| 150     |-else: | 150     |-else: | ||||||
| 151     |-    z = other_cond | 151     |-    z = other_cond | ||||||
|     148 |+z = cond if not cond else other_cond |     148 |+z = cond and other_cond | ||||||
| 152 149 |  | 152 149 |  | ||||||
| 153 150 | # SIM108 - should suggest | 153 150 | # SIM108 - should suggest | ||||||
| 154 151 | # z = not cond and other_cond | 154 151 | # z = not cond and other_cond | ||||||
| 
 | 
 | ||||||
| SIM108.py:155:1: SIM108 [*] Use ternary operator `z = not cond if cond else other_cond` instead of `if`-`else`-block | SIM108.py:155:1: SIM108 [*] Use binary operator `z = not cond and other_cond` instead of `if`-`else`-block | ||||||
|     | |     | | ||||||
| 153 |   # SIM108 - should suggest | 153 |   # SIM108 - should suggest | ||||||
| 154 |   # z = not cond and other_cond | 154 |   # z = not cond and other_cond | ||||||
|  | @ -184,7 +184,7 @@ SIM108.py:155:1: SIM108 [*] Use ternary operator `z = not cond if cond else othe | ||||||
| 159 | | 159 | | ||||||
| 160 |   # SIM108 does not suggest | 160 |   # SIM108 does not suggest | ||||||
|     | |     | | ||||||
|     = help: Replace `if`-`else`-block with `z = not cond if cond else other_cond` |     = help: Replace `if`-`else`-block with `z = not cond and other_cond` | ||||||
| 
 | 
 | ||||||
| ℹ Unsafe fix | ℹ Unsafe fix | ||||||
| 152 152 |  | 152 152 |  | ||||||
|  | @ -194,7 +194,7 @@ SIM108.py:155:1: SIM108 [*] Use ternary operator `z = not cond if cond else othe | ||||||
| 156     |-    z = not cond | 156     |-    z = not cond | ||||||
| 157     |-else: | 157     |-else: | ||||||
| 158     |-    z = other_cond | 158     |-    z = other_cond | ||||||
|     155 |+z = not cond if cond else other_cond |     155 |+z = not cond and other_cond | ||||||
| 159 156 |  | 159 156 |  | ||||||
| 160 157 | # SIM108 does not suggest | 160 157 | # SIM108 does not suggest | ||||||
| 161 158 | # a binary option in these cases, | 161 158 | # a binary option in these cases, | ||||||
|  |  | ||||||
|  | @ -1,382 +0,0 @@ | ||||||
| --- |  | ||||||
| source: crates/ruff_linter/src/rules/flake8_simplify/mod.rs |  | ||||||
| --- |  | ||||||
| SIM108.py:2:1: SIM108 [*] Use ternary operator `b = c if a else d` instead of `if`-`else`-block |  | ||||||
|   | |  | ||||||
| 1 |   # SIM108 |  | ||||||
| 2 | / if a: |  | ||||||
| 3 | |     b = c |  | ||||||
| 4 | | else: |  | ||||||
| 5 | |     b = d |  | ||||||
|   | |_________^ SIM108 |  | ||||||
| 6 | |  | ||||||
| 7 |   # OK |  | ||||||
|   | |  | ||||||
|   = help: Replace `if`-`else`-block with `b = c if a else d` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 1 1 | # SIM108 |  | ||||||
| 2   |-if a: |  | ||||||
| 3   |-    b = c |  | ||||||
| 4   |-else: |  | ||||||
| 5   |-    b = d |  | ||||||
|   2 |+b = c if a else d |  | ||||||
| 6 3 |  |  | ||||||
| 7 4 | # OK |  | ||||||
| 8 5 | b = c if a else d |  | ||||||
| 
 |  | ||||||
| SIM108.py:30:5: SIM108 [*] Use ternary operator `b = 1 if a else 2` instead of `if`-`else`-block |  | ||||||
|    | |  | ||||||
| 28 |       pass |  | ||||||
| 29 |   else: |  | ||||||
| 30 | /     if a: |  | ||||||
| 31 | |         b = 1 |  | ||||||
| 32 | |     else: |  | ||||||
| 33 | |         b = 2 |  | ||||||
|    | |_____________^ SIM108 |  | ||||||
|    | |  | ||||||
|    = help: Replace `if`-`else`-block with `b = 1 if a else 2` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 27 27 | if True: |  | ||||||
| 28 28 |     pass |  | ||||||
| 29 29 | else: |  | ||||||
| 30    |-    if a: |  | ||||||
| 31    |-        b = 1 |  | ||||||
| 32    |-    else: |  | ||||||
| 33    |-        b = 2 |  | ||||||
|    30 |+    b = 1 if a else 2 |  | ||||||
| 34 31 |  |  | ||||||
| 35 32 |  |  | ||||||
| 36 33 | import sys |  | ||||||
| 
 |  | ||||||
| SIM108.py:58:1: SIM108 Use ternary operator `abc = x if x > 0 else -x` instead of `if`-`else`-block |  | ||||||
|    | |  | ||||||
| 57 |   # SIM108 (without fix due to comments) |  | ||||||
| 58 | / if x > 0: |  | ||||||
| 59 | |     # test test |  | ||||||
| 60 | |     abc = x |  | ||||||
| 61 | | else: |  | ||||||
| 62 | |     # test test test |  | ||||||
| 63 | |     abc = -x |  | ||||||
|    | |____________^ SIM108 |  | ||||||
|    | |  | ||||||
|    = help: Replace `if`-`else`-block with `abc = x if x > 0 else -x` |  | ||||||
| 
 |  | ||||||
| SIM108.py:82:1: SIM108 [*] Use ternary operator `b = "cccccccccccccccccccccccccccccccccß" if a else "ddddddddddddddddddddddddddddddddd💣"` instead of `if`-`else`-block |  | ||||||
|    | |  | ||||||
| 81 |   # SIM108 |  | ||||||
| 82 | / if a: |  | ||||||
| 83 | |     b = "cccccccccccccccccccccccccccccccccß" |  | ||||||
| 84 | | else: |  | ||||||
| 85 | |     b = "ddddddddddddddddddddddddddddddddd💣" |  | ||||||
|    | |_____________________________________________^ SIM108 |  | ||||||
|    | |  | ||||||
|    = help: Replace `if`-`else`-block with `b = "cccccccccccccccccccccccccccccccccß" if a else "ddddddddddddddddddddddddddddddddd💣"` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 79 79 |  |  | ||||||
| 80 80 |  |  | ||||||
| 81 81 | # SIM108 |  | ||||||
| 82    |-if a: |  | ||||||
| 83    |-    b = "cccccccccccccccccccccccccccccccccß" |  | ||||||
| 84    |-else: |  | ||||||
| 85    |-    b = "ddddddddddddddddddddddddddddddddd💣" |  | ||||||
|    82 |+b = "cccccccccccccccccccccccccccccccccß" if a else "ddddddddddddddddddddddddddddddddd💣" |  | ||||||
| 86 83 |  |  | ||||||
| 87 84 |  |  | ||||||
| 88 85 | # OK (too long) |  | ||||||
| 
 |  | ||||||
| SIM108.py:105:1: SIM108 Use ternary operator `exitcode = 0 if True else 1` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 104 |   # SIM108 (without fix due to trailing comment) |  | ||||||
| 105 | / if True: |  | ||||||
| 106 | |     exitcode = 0 |  | ||||||
| 107 | | else: |  | ||||||
| 108 | |     exitcode = 1  # Trailing comment |  | ||||||
|     | |________________^ SIM108 |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `exitcode = 0 if True else 1` |  | ||||||
| 
 |  | ||||||
| SIM108.py:112:1: SIM108 Use ternary operator `x = 3 if True else 5` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 111 |   # SIM108 |  | ||||||
| 112 | / if True: x = 3  # Foo |  | ||||||
| 113 | | else: x = 5 |  | ||||||
|     | |___________^ SIM108 |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `x = 3 if True else 5` |  | ||||||
| 
 |  | ||||||
| SIM108.py:117:1: SIM108 Use ternary operator `x = 3 if True else 5` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 116 |   # SIM108 |  | ||||||
| 117 | / if True:  # Foo |  | ||||||
| 118 | |     x = 3 |  | ||||||
| 119 | | else: |  | ||||||
| 120 | |     x = 5 |  | ||||||
|     | |_________^ SIM108 |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `x = 3 if True else 5` |  | ||||||
| 
 |  | ||||||
| SIM108.py:141:1: SIM108 [*] Use binary operator `z = cond or other_cond` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 139 |   # SIM108 - should suggest |  | ||||||
| 140 |   # z = cond or other_cond |  | ||||||
| 141 | / if cond: |  | ||||||
| 142 | |     z = cond  |  | ||||||
| 143 | | else: |  | ||||||
| 144 | |     z = other_cond |  | ||||||
|     | |__________________^ SIM108 |  | ||||||
| 145 | |  | ||||||
| 146 |   # SIM108 - should suggest |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = cond or other_cond` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 138 138 |  |  | ||||||
| 139 139 | # SIM108 - should suggest |  | ||||||
| 140 140 | # z = cond or other_cond |  | ||||||
| 141     |-if cond: |  | ||||||
| 142     |-    z = cond  |  | ||||||
| 143     |-else: |  | ||||||
| 144     |-    z = other_cond |  | ||||||
|     141 |+z = cond or other_cond |  | ||||||
| 145 142 |  |  | ||||||
| 146 143 | # SIM108 - should suggest |  | ||||||
| 147 144 | # z = cond and other_cond |  | ||||||
| 
 |  | ||||||
| SIM108.py:148:1: SIM108 [*] Use binary operator `z = cond and other_cond` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 146 |   # SIM108 - should suggest |  | ||||||
| 147 |   # z = cond and other_cond |  | ||||||
| 148 | / if not cond: |  | ||||||
| 149 | |     z = cond |  | ||||||
| 150 | | else: |  | ||||||
| 151 | |     z = other_cond |  | ||||||
|     | |__________________^ SIM108 |  | ||||||
| 152 | |  | ||||||
| 153 |   # SIM108 - should suggest |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = cond and other_cond` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 145 145 |  |  | ||||||
| 146 146 | # SIM108 - should suggest |  | ||||||
| 147 147 | # z = cond and other_cond |  | ||||||
| 148     |-if not cond: |  | ||||||
| 149     |-    z = cond |  | ||||||
| 150     |-else: |  | ||||||
| 151     |-    z = other_cond |  | ||||||
|     148 |+z = cond and other_cond |  | ||||||
| 152 149 |  |  | ||||||
| 153 150 | # SIM108 - should suggest |  | ||||||
| 154 151 | # z = not cond and other_cond |  | ||||||
| 
 |  | ||||||
| SIM108.py:155:1: SIM108 [*] Use binary operator `z = not cond and other_cond` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 153 |   # SIM108 - should suggest |  | ||||||
| 154 |   # z = not cond and other_cond |  | ||||||
| 155 | / if cond: |  | ||||||
| 156 | |     z = not cond |  | ||||||
| 157 | | else: |  | ||||||
| 158 | |     z = other_cond |  | ||||||
|     | |__________________^ SIM108 |  | ||||||
| 159 | |  | ||||||
| 160 |   # SIM108 does not suggest |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = not cond and other_cond` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 152 152 |  |  | ||||||
| 153 153 | # SIM108 - should suggest |  | ||||||
| 154 154 | # z = not cond and other_cond |  | ||||||
| 155     |-if cond: |  | ||||||
| 156     |-    z = not cond |  | ||||||
| 157     |-else: |  | ||||||
| 158     |-    z = other_cond |  | ||||||
|     155 |+z = not cond and other_cond |  | ||||||
| 159 156 |  |  | ||||||
| 160 157 | # SIM108 does not suggest |  | ||||||
| 161 158 | # a binary option in these cases, |  | ||||||
| 
 |  | ||||||
| SIM108.py:167:1: SIM108 [*] Use ternary operator `z = 1 if True else other` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 165 |   # (Of course, these specific expressions  |  | ||||||
| 166 |   # should be simplified for other reasons...) |  | ||||||
| 167 | / if True: |  | ||||||
| 168 | |     z = 1 |  | ||||||
| 169 | | else: |  | ||||||
| 170 | |     z = other |  | ||||||
|     | |_____________^ SIM108 |  | ||||||
| 171 | |  | ||||||
| 172 |   if False: |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = 1 if True else other` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 164 164 | # so, e.g. `True == 1`. |  | ||||||
| 165 165 | # (Of course, these specific expressions  |  | ||||||
| 166 166 | # should be simplified for other reasons...) |  | ||||||
| 167     |-if True: |  | ||||||
| 168     |-    z = 1 |  | ||||||
| 169     |-else: |  | ||||||
| 170     |-    z = other |  | ||||||
|     167 |+z = 1 if True else other |  | ||||||
| 171 168 |  |  | ||||||
| 172 169 | if False: |  | ||||||
| 173 170 |     z = 1 |  | ||||||
| 
 |  | ||||||
| SIM108.py:172:1: SIM108 [*] Use ternary operator `z = 1 if False else other` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 170 |       z = other |  | ||||||
| 171 | |  | ||||||
| 172 | / if False: |  | ||||||
| 173 | |     z = 1 |  | ||||||
| 174 | | else: |  | ||||||
| 175 | |     z = other |  | ||||||
|     | |_____________^ SIM108 |  | ||||||
| 176 | |  | ||||||
| 177 |   if 1: |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = 1 if False else other` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 169 169 | else: |  | ||||||
| 170 170 |     z = other |  | ||||||
| 171 171 |  |  | ||||||
| 172     |-if False: |  | ||||||
| 173     |-    z = 1 |  | ||||||
| 174     |-else: |  | ||||||
| 175     |-    z = other |  | ||||||
|     172 |+z = 1 if False else other |  | ||||||
| 176 173 |  |  | ||||||
| 177 174 | if 1: |  | ||||||
| 178 175 |     z = True |  | ||||||
| 
 |  | ||||||
| SIM108.py:177:1: SIM108 [*] Use ternary operator `z = True if 1 else other` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 175 |       z = other |  | ||||||
| 176 | |  | ||||||
| 177 | / if 1: |  | ||||||
| 178 | |     z = True |  | ||||||
| 179 | | else: |  | ||||||
| 180 | |     z = other |  | ||||||
|     | |_____________^ SIM108 |  | ||||||
| 181 | |  | ||||||
| 182 |   # SIM108 does not suggest a binary option in this |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = True if 1 else other` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 174 174 | else: |  | ||||||
| 175 175 |     z = other |  | ||||||
| 176 176 |  |  | ||||||
| 177     |-if 1: |  | ||||||
| 178     |-    z = True |  | ||||||
| 179     |-else: |  | ||||||
| 180     |-    z = other |  | ||||||
|     177 |+z = True if 1 else other |  | ||||||
| 181 178 |  |  | ||||||
| 182 179 | # SIM108 does not suggest a binary option in this |  | ||||||
| 183 180 | # case, since we'd be reducing the number of calls |  | ||||||
| 
 |  | ||||||
| SIM108.py:185:1: SIM108 [*] Use ternary operator `z = foo() if foo() else other` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 183 |   # case, since we'd be reducing the number of calls |  | ||||||
| 184 |   # from Two to one. |  | ||||||
| 185 | / if foo(): |  | ||||||
| 186 | |     z = foo() |  | ||||||
| 187 | | else: |  | ||||||
| 188 | |     z = other |  | ||||||
|     | |_____________^ SIM108 |  | ||||||
| 189 | |  | ||||||
| 190 |   # SIM108 does not suggest a binary option in this |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = foo() if foo() else other` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 182 182 | # SIM108 does not suggest a binary option in this |  | ||||||
| 183 183 | # case, since we'd be reducing the number of calls |  | ||||||
| 184 184 | # from Two to one. |  | ||||||
| 185     |-if foo(): |  | ||||||
| 186     |-    z = foo() |  | ||||||
| 187     |-else: |  | ||||||
| 188     |-    z = other |  | ||||||
|     185 |+z = foo() if foo() else other |  | ||||||
| 189 186 |  |  | ||||||
| 190 187 | # SIM108 does not suggest a binary option in this |  | ||||||
| 191 188 | # case, since we'd be reducing the number of calls |  | ||||||
| 
 |  | ||||||
| SIM108.py:193:1: SIM108 [*] Use ternary operator `z = not foo() if foo() else other` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 191 |   # case, since we'd be reducing the number of calls |  | ||||||
| 192 |   # from Two to one. |  | ||||||
| 193 | / if foo(): |  | ||||||
| 194 | |     z = not foo() |  | ||||||
| 195 | | else: |  | ||||||
| 196 | |     z = other |  | ||||||
|     | |_____________^ SIM108 |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `z = not foo() if foo() else other` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 190 190 | # SIM108 does not suggest a binary option in this |  | ||||||
| 191 191 | # case, since we'd be reducing the number of calls |  | ||||||
| 192 192 | # from Two to one. |  | ||||||
| 193     |-if foo(): |  | ||||||
| 194     |-    z = not foo() |  | ||||||
| 195     |-else: |  | ||||||
| 196     |-    z = other |  | ||||||
|     193 |+z = not foo() if foo() else other |  | ||||||
| 197 194 |  |  | ||||||
| 198 195 |  |  | ||||||
| 199 196 | # These two cases double as tests for f-string quote preservation. The first |  | ||||||
| 
 |  | ||||||
| SIM108.py:202:1: SIM108 [*] Use ternary operator `var = "str" if cond else f"{first}-{second}"` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 200 |   # f-string should preserve its double quotes, and the second should preserve |  | ||||||
| 201 |   # single quotes |  | ||||||
| 202 | / if cond: |  | ||||||
| 203 | |     var = "str" |  | ||||||
| 204 | | else: |  | ||||||
| 205 | |     var = f"{first}-{second}" |  | ||||||
|     | |_____________________________^ SIM108 |  | ||||||
| 206 | |  | ||||||
| 207 |   if cond: |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `var = "str" if cond else f"{first}-{second}"` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 199 199 | # These two cases double as tests for f-string quote preservation. The first |  | ||||||
| 200 200 | # f-string should preserve its double quotes, and the second should preserve |  | ||||||
| 201 201 | # single quotes |  | ||||||
| 202     |-if cond: |  | ||||||
| 203     |-    var = "str" |  | ||||||
| 204     |-else: |  | ||||||
| 205     |-    var = f"{first}-{second}" |  | ||||||
|     202 |+var = "str" if cond else f"{first}-{second}" |  | ||||||
| 206 203 |  |  | ||||||
| 207 204 | if cond: |  | ||||||
| 208 205 |     var = "str" |  | ||||||
| 
 |  | ||||||
| SIM108.py:207:1: SIM108 [*] Use ternary operator `var = "str" if cond else f'{first}-{second}'` instead of `if`-`else`-block |  | ||||||
|     | |  | ||||||
| 205 |       var = f"{first}-{second}" |  | ||||||
| 206 | |  | ||||||
| 207 | / if cond: |  | ||||||
| 208 | |     var = "str" |  | ||||||
| 209 | | else: |  | ||||||
| 210 | |     var = f'{first}-{second}' |  | ||||||
|     | |_____________________________^ SIM108 |  | ||||||
|     | |  | ||||||
|     = help: Replace `if`-`else`-block with `var = "str" if cond else f'{first}-{second}'` |  | ||||||
| 
 |  | ||||||
| ℹ Unsafe fix |  | ||||||
| 204 204 | else: |  | ||||||
| 205 205 |     var = f"{first}-{second}" |  | ||||||
| 206 206 |  |  | ||||||
| 207     |-if cond: |  | ||||||
| 208     |-    var = "str" |  | ||||||
| 209     |-else: |  | ||||||
| 210     |-    var = f'{first}-{second}' |  | ||||||
|     207 |+var = "str" if cond else f'{first}-{second}' |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dylan
						Dylan