Format Identifier (#5255)

This commit is contained in:
Micha Reiser 2023-06-21 17:35:37 +02:00 committed by GitHub
parent 6155fd647d
commit e47aa468d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 13 deletions

View file

@ -1,7 +1,6 @@
use crate::prelude::*; use crate::prelude::*;
use crate::FormatNodeRule; use crate::FormatNodeRule;
use ruff_formatter::write; use ruff_formatter::write;
use ruff_text_size::{TextLen, TextRange};
use rustpython_parser::ast::Arg; use rustpython_parser::ast::Arg;
#[derive(Default)] #[derive(Default)]
@ -10,21 +9,13 @@ pub struct FormatArg;
impl FormatNodeRule<Arg> for FormatArg { impl FormatNodeRule<Arg> for FormatArg {
fn fmt_fields(&self, item: &Arg, f: &mut PyFormatter) -> FormatResult<()> { fn fmt_fields(&self, item: &Arg, f: &mut PyFormatter) -> FormatResult<()> {
let Arg { let Arg {
range, range: _,
arg, arg,
annotation, annotation,
type_comment: _, type_comment: _,
} = item; } = item;
write!(
f, arg.format().fmt(f)?;
[
// The name of the argument
source_text_slice(
TextRange::at(range.start(), arg.text_len()),
ContainsNewlines::No
)
]
)?;
if let Some(annotation) = annotation { if let Some(annotation) = annotation {
write!(f, [text(":"), space(), annotation.format()])?; write!(f, [text(":"), space(), annotation.format()])?;

View file

@ -0,0 +1,28 @@
use crate::prelude::*;
use crate::AsFormat;
use ruff_formatter::{FormatOwnedWithRule, FormatRefWithRule};
use rustpython_parser::ast::{Identifier, Ranged};
pub struct FormatIdentifier;
impl FormatRule<Identifier, PyFormatContext<'_>> for FormatIdentifier {
fn fmt(&self, item: &Identifier, f: &mut PyFormatter) -> FormatResult<()> {
source_text_slice(item.range(), ContainsNewlines::No).fmt(f)
}
}
impl<'ast> AsFormat<PyFormatContext<'ast>> for Identifier {
type Format<'a> = FormatRefWithRule<'a, Identifier, FormatIdentifier, PyFormatContext<'ast>>;
fn format(&self) -> Self::Format<'_> {
FormatRefWithRule::new(self, FormatIdentifier)
}
}
impl<'ast> IntoFormat<PyFormatContext<'ast>> for Identifier {
type Format = FormatOwnedWithRule<Identifier, FormatIdentifier, PyFormatContext<'ast>>;
fn into_format(self) -> Self::Format {
FormatOwnedWithRule::new(self, FormatIdentifier)
}
}

View file

@ -5,6 +5,7 @@ pub(crate) mod arguments;
pub(crate) mod comprehension; pub(crate) mod comprehension;
pub(crate) mod decorator; pub(crate) mod decorator;
pub(crate) mod except_handler_except_handler; pub(crate) mod except_handler_except_handler;
pub(crate) mod identifier;
pub(crate) mod keyword; pub(crate) mod keyword;
pub(crate) mod match_case; pub(crate) mod match_case;
pub(crate) mod type_ignore_type_ignore; pub(crate) mod type_ignore_type_ignore;

View file

@ -85,7 +85,7 @@ impl FormatRule<AnyFunctionDefinition<'_>, PyFormatContext<'_>> for FormatAnyFun
[ [
text("def"), text("def"),
space(), space(),
dynamic_text(name.as_str(), None), name.format(),
item.arguments().format(), item.arguments().format(),
] ]
)?; )?;