mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-12 14:48:16 +00:00
Add PreviewMode option to formatter
## Summary This PR adds the `--preview` and `--no-preview` options to the `format` command (hidden) and passes it through to the formatte. ## Test Plan I added the `dbg(f.options().preview())` statement in `FormatNodeRule::fmt` and verified that the option gets correctly passed to the formatter.
This commit is contained in:
parent
d9544a2d37
commit
47a253fb62
7 changed files with 54 additions and 7 deletions
|
@ -388,10 +388,10 @@ fn can_omit_optional_parentheses(expr: &Expr, context: &PyFormatContext) -> bool
|
|||
// Only use the layout if the first or last expression has parentheses of some sort, and
|
||||
// those parentheses are non-empty.
|
||||
let first_parenthesized = visitor.first.is_some_and(|first| {
|
||||
has_parentheses(first, context).is_some_and(|parentheses| parentheses.is_non_empty())
|
||||
has_parentheses(first, context).is_some_and(OwnParentheses::is_non_empty)
|
||||
});
|
||||
let last_parenthesized = visitor.last.is_some_and(|last| {
|
||||
has_parentheses(last, context).is_some_and(|parentheses| parentheses.is_non_empty())
|
||||
has_parentheses(last, context).is_some_and(OwnParentheses::is_non_empty)
|
||||
});
|
||||
first_parenthesized || last_parenthesized
|
||||
}
|
||||
|
@ -706,7 +706,7 @@ impl CallChainLayout {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, is_macro::Is)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
pub(crate) enum OwnParentheses {
|
||||
/// The node has parentheses, but they are empty (e.g., `[]` or `f()`).
|
||||
Empty,
|
||||
|
@ -714,6 +714,12 @@ pub(crate) enum OwnParentheses {
|
|||
NonEmpty,
|
||||
}
|
||||
|
||||
impl OwnParentheses {
|
||||
const fn is_non_empty(self) -> bool {
|
||||
matches!(self, OwnParentheses::NonEmpty)
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the [`OwnParentheses`] value for a given [`Expr`], to indicate whether it has its
|
||||
/// own parentheses or is itself parenthesized.
|
||||
///
|
||||
|
|
|
@ -14,7 +14,7 @@ use crate::comments::{
|
|||
dangling_comments, leading_comments, trailing_comments, Comments, SourceComment,
|
||||
};
|
||||
pub use crate::context::PyFormatContext;
|
||||
pub use crate::options::{MagicTrailingComma, PyFormatOptions, QuoteStyle};
|
||||
pub use crate::options::{MagicTrailingComma, PreviewMode, PyFormatOptions, QuoteStyle};
|
||||
use crate::verbatim::suppressed_node;
|
||||
|
||||
pub(crate) mod builders;
|
||||
|
|
|
@ -39,6 +39,9 @@ pub struct PyFormatOptions {
|
|||
/// Should the formatter generate a source map that allows mapping source positions to positions
|
||||
/// in the formatted document.
|
||||
source_map_generation: SourceMapGeneration,
|
||||
|
||||
/// Whether preview style formatting is enabled or not
|
||||
preview: PreviewMode,
|
||||
}
|
||||
|
||||
fn default_line_width() -> LineWidth {
|
||||
|
@ -64,6 +67,7 @@ impl Default for PyFormatOptions {
|
|||
line_ending: LineEnding::default(),
|
||||
magic_trailing_comma: MagicTrailingComma::default(),
|
||||
source_map_generation: SourceMapGeneration::default(),
|
||||
preview: PreviewMode::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -101,6 +105,10 @@ impl PyFormatOptions {
|
|||
self.line_ending
|
||||
}
|
||||
|
||||
pub fn preview(&self) -> PreviewMode {
|
||||
self.preview
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn with_tab_width(mut self, tab_width: TabWidth) -> Self {
|
||||
self.tab_width = tab_width;
|
||||
|
@ -136,6 +144,12 @@ impl PyFormatOptions {
|
|||
self.line_ending = line_ending;
|
||||
self
|
||||
}
|
||||
|
||||
#[must_use]
|
||||
pub fn with_preview(mut self, preview: PreviewMode) -> Self {
|
||||
self.preview = preview;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl FormatOptions for PyFormatOptions {
|
||||
|
@ -246,3 +260,18 @@ impl FromStr for MagicTrailingComma {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
|
||||
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
|
||||
pub enum PreviewMode {
|
||||
#[default]
|
||||
Disabled,
|
||||
|
||||
Enabled,
|
||||
}
|
||||
|
||||
impl PreviewMode {
|
||||
pub const fn is_enabled(self) -> bool {
|
||||
matches!(self, PreviewMode::Enabled)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue