ruff/crates/ruff_python_ast/src
Dhruv Manilawala 97ae617fac
Introduce LiteralExpressionRef for all literals (#8339)
## Summary

This PR adds a new `LiteralExpressionRef` which wraps all of the literal
expression nodes in a single enum. This allows for a narrow type when
working exclusively with a literal node. Additionally, it also
implements a `Expr::as_literal_expr` method to return the new enum if
the expression is indeed a literal one.

A few rules have been updated to account for the new enum:
1. `redundant_literal_union`
2. `if_else_block_instead_of_dict_lookup`
3. `magic_value_comparison`

To account for the change in (2), a new `ComparableLiteral` has been
added which can be constructed from the new enum
(`ComparableLiteral::from(<LiteralExpressionRef>)`).

### Open Questions

1. The new `ComparableLiteral` can be exclusively used via the
`LiteralExpressionRef` enum. Should we remove all of the literal
variants from `ComparableExpr` and instead have a single
`ComparableExpr::Literal(ComparableLiteral)` variant instead?

## Test Plan

`cargo test`
2023-10-31 12:56:11 +00:00
..
visitor Split Constant to individual literal nodes (#8064) 2023-10-30 12:13:23 +05:30
all.rs Split Constant to individual literal nodes (#8064) 2023-10-30 12:13:23 +05:30
call_path.rs Store call paths rather than stringified names (#6102) 2023-08-05 15:21:50 +00:00
comparable.rs Introduce LiteralExpressionRef for all literals (#8339) 2023-10-31 12:56:11 +00:00
docstrings.rs Move Python whitespace utilities into new ruff_python_whitespace crate (#4993) 2023-06-10 00:59:57 +00:00
expression.rs Introduce LiteralExpressionRef for all literals (#8339) 2023-10-31 12:56:11 +00:00
hashable.rs Pull in RustPython parser (#6099) 2023-07-27 09:29:11 +00:00
helpers.rs Inline AST helpers for new literal nodes (#8374) 2023-10-31 11:06:54 +00:00
identifier.rs Move Ranged into ruff_text_size (#6919) 2023-08-27 14:12:51 -04:00
imports.rs Include alias when formatting import-from structs (#5786) 2023-07-15 15:53:21 -04:00
int.rs Include radix base prefix in large number representation (#7700) 2023-09-28 20:38:06 +00:00
lib.rs Move {AnyNodeRef, AstNode} to ruff_python_ast crate root (#8030) 2023-10-18 00:01:18 +00:00
node.rs Split Constant to individual literal nodes (#8064) 2023-10-30 12:13:23 +05:30
nodes.rs Introduce LiteralExpressionRef for all literals (#8339) 2023-10-31 12:56:11 +00:00
parenthesize.rs Comments outside expression parentheses (#7873) 2023-10-19 09:24:11 +00:00
relocate.rs Split Constant to individual literal nodes (#8064) 2023-10-30 12:13:23 +05:30
statement_visitor.rs Remove Stmt::TryStar (#6566) 2023-08-14 13:39:44 -04:00
stmt_if.rs Move Ranged into ruff_text_size (#6919) 2023-08-27 14:12:51 -04:00
str.rs Replace dynamic implicit concatenation detection with parser flag (#6513) 2023-08-14 10:27:17 -04:00
traversal.rs [refurb] Implement repeated-append rule (FURB113) (#6702) 2023-08-28 22:51:59 +00:00
types.rs Remove RefEquality (#6393) 2023-08-07 16:04:50 +00:00
visitor.rs Split Constant to individual literal nodes (#8064) 2023-10-30 12:13:23 +05:30
whitespace.rs Move Ranged into ruff_text_size (#6919) 2023-08-27 14:12:51 -04:00