mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-22 12:35:08 +00:00
Format while
Statement (#4810)
This commit is contained in:
parent
d1d06960f0
commit
c65f47d7c4
18 changed files with 555 additions and 145 deletions
|
@ -14,7 +14,9 @@ use ruff_formatter::{
|
|||
use ruff_python_ast::node::AstNode;
|
||||
use ruff_python_ast::source_code::{CommentRanges, CommentRangesBuilder, Locator};
|
||||
|
||||
use crate::comments::{dangling_comments, leading_comments, trailing_comments, Comments};
|
||||
use crate::comments::{
|
||||
dangling_node_comments, leading_node_comments, trailing_node_comments, Comments,
|
||||
};
|
||||
use crate::context::PyFormatContext;
|
||||
|
||||
pub(crate) mod builders;
|
||||
|
@ -64,7 +66,7 @@ where
|
|||
/// You may want to override this method if you want to manually handle the formatting of comments
|
||||
/// inside of the `fmt_fields` method or customize the formatting of the leading comments.
|
||||
fn fmt_leading_comments(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> {
|
||||
leading_comments(node).fmt(f)
|
||||
leading_node_comments(node).fmt(f)
|
||||
}
|
||||
|
||||
/// Formats the [dangling comments](comments#dangling-comments) of the node.
|
||||
|
@ -75,7 +77,7 @@ where
|
|||
///
|
||||
/// A node can have dangling comments if all its children are tokens or if all node childrens are optional.
|
||||
fn fmt_dangling_comments(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> {
|
||||
dangling_comments(node).fmt(f)
|
||||
dangling_node_comments(node).fmt(f)
|
||||
}
|
||||
|
||||
/// Formats the [trailing comments](comments#trailing-comments) of the node.
|
||||
|
@ -83,7 +85,7 @@ where
|
|||
/// You may want to override this method if you want to manually handle the formatting of comments
|
||||
/// inside of the `fmt_fields` method or customize the formatting of the trailing comments.
|
||||
fn fmt_trailing_comments(&self, node: &N, f: &mut PyFormatter) -> FormatResult<()> {
|
||||
trailing_comments(node).fmt(f)
|
||||
trailing_node_comments(node).fmt(f)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -285,14 +287,58 @@ Formatted twice:
|
|||
Ok(())
|
||||
}
|
||||
|
||||
#[fixture(pattern = "resources/test/fixtures/ruff/**/*.py")]
|
||||
#[test]
|
||||
fn ruff_test(input_path: &Path) -> Result<()> {
|
||||
let content = fs::read_to_string(input_path)?;
|
||||
|
||||
let printed = format_module(&content)?;
|
||||
let formatted_code = printed.as_code();
|
||||
|
||||
let reformatted =
|
||||
format_module(formatted_code).expect("Expected formatted code to be valid syntax");
|
||||
|
||||
if reformatted.as_code() != formatted_code {
|
||||
let diff = TextDiff::from_lines(formatted_code, reformatted.as_code())
|
||||
.unified_diff()
|
||||
.header("Formatted once", "Formatted twice")
|
||||
.to_string();
|
||||
panic!(
|
||||
r#"Reformatting the formatted code a second time resulted in formatting changes.
|
||||
{diff}
|
||||
|
||||
Formatted once:
|
||||
{formatted_code}
|
||||
|
||||
Formatted twice:
|
||||
{}"#,
|
||||
reformatted.as_code()
|
||||
);
|
||||
}
|
||||
|
||||
let snapshot = format!(
|
||||
r#"## Input
|
||||
{}
|
||||
|
||||
## Output
|
||||
{}"#,
|
||||
CodeFrame::new("py", &content),
|
||||
CodeFrame::new("py", formatted_code)
|
||||
);
|
||||
assert_snapshot!(snapshot);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Use this test to debug the formatting of some snipped
|
||||
#[ignore]
|
||||
#[test]
|
||||
fn quick_test() {
|
||||
let src = r#"
|
||||
{
|
||||
k: v for k, v in a_very_long_variable_name_that_exceeds_the_line_length_by_far_keep_going
|
||||
}
|
||||
while True:
|
||||
if something.changed:
|
||||
do.stuff() # trailing comment
|
||||
other
|
||||
"#;
|
||||
// Tokenize once
|
||||
let mut tokens = Vec::new();
|
||||
|
@ -320,10 +366,10 @@ Formatted twice:
|
|||
|
||||
assert_eq!(
|
||||
printed.as_code(),
|
||||
r#"{
|
||||
k: v
|
||||
for k, v in a_very_long_variable_name_that_exceeds_the_line_length_by_far_keep_going
|
||||
}"#
|
||||
r#"while True:
|
||||
if something.changed:
|
||||
do.stuff() # trailing comment
|
||||
"#
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue