mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-15 08:00:46 +00:00
Add a TypeParams
node to the AST (#6261)
## Summary Similar to #6259, this PR adds a `TypeParams` node to the AST, to capture the list of type parameters with their surrounding brackets. If a statement lacks type parameters, the `type_params` field will be `None`.
This commit is contained in:
parent
981e64f82b
commit
b095b7204b
31 changed files with 1104 additions and 866 deletions
|
@ -1,6 +1,6 @@
|
|||
//! Generate Python source code from an abstract syntax tree (AST).
|
||||
|
||||
use ruff_python_ast::ParameterWithDefault;
|
||||
use ruff_python_ast::{ParameterWithDefault, TypeParams};
|
||||
use std::ops::Deref;
|
||||
|
||||
use ruff_python_ast::{
|
||||
|
@ -222,7 +222,9 @@ impl<'a> Generator<'a> {
|
|||
statement!({
|
||||
self.p("def ");
|
||||
self.p_id(name);
|
||||
self.unparse_type_params(type_params);
|
||||
if let Some(type_params) = type_params {
|
||||
self.unparse_type_params(type_params);
|
||||
}
|
||||
self.p("(");
|
||||
self.unparse_parameters(parameters);
|
||||
self.p(")");
|
||||
|
@ -256,7 +258,9 @@ impl<'a> Generator<'a> {
|
|||
statement!({
|
||||
self.p("async def ");
|
||||
self.p_id(name);
|
||||
self.unparse_type_params(type_params);
|
||||
if let Some(type_params) = type_params {
|
||||
self.unparse_type_params(type_params);
|
||||
}
|
||||
self.p("(");
|
||||
self.unparse_parameters(parameters);
|
||||
self.p(")");
|
||||
|
@ -289,7 +293,9 @@ impl<'a> Generator<'a> {
|
|||
statement!({
|
||||
self.p("class ");
|
||||
self.p_id(name);
|
||||
self.unparse_type_params(type_params);
|
||||
if let Some(type_params) = type_params {
|
||||
self.unparse_type_params(type_params);
|
||||
}
|
||||
if let Some(arguments) = arguments {
|
||||
self.p("(");
|
||||
let mut first = true;
|
||||
|
@ -540,7 +546,9 @@ impl<'a> Generator<'a> {
|
|||
}) => {
|
||||
self.p("type ");
|
||||
self.unparse_expr(name, precedence::MAX);
|
||||
self.unparse_type_params(type_params);
|
||||
if let Some(type_params) = type_params {
|
||||
self.unparse_type_params(type_params);
|
||||
}
|
||||
self.p(" = ");
|
||||
self.unparse_expr(value, precedence::ASSIGN);
|
||||
}
|
||||
|
@ -853,16 +861,14 @@ impl<'a> Generator<'a> {
|
|||
self.body(&ast.body);
|
||||
}
|
||||
|
||||
fn unparse_type_params(&mut self, type_params: &Vec<TypeParam>) {
|
||||
if !type_params.is_empty() {
|
||||
self.p("[");
|
||||
let mut first = true;
|
||||
for type_param in type_params {
|
||||
self.p_delim(&mut first, ", ");
|
||||
self.unparse_type_param(type_param);
|
||||
}
|
||||
self.p("]");
|
||||
fn unparse_type_params(&mut self, type_params: &TypeParams) {
|
||||
self.p("[");
|
||||
let mut first = true;
|
||||
for type_param in type_params.iter() {
|
||||
self.p_delim(&mut first, ", ");
|
||||
self.unparse_type_param(type_param);
|
||||
}
|
||||
self.p("]");
|
||||
}
|
||||
|
||||
pub(crate) fn unparse_type_param(&mut self, ast: &TypeParam) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue