mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-16 09:35:07 +00:00
Add convenience methods for iterating over all parameter nodes in a function (#11174)
This commit is contained in:
parent
8a887daeb4
commit
87929ad5f1
27 changed files with 399 additions and 448 deletions
|
@ -3371,34 +3371,15 @@ impl<'src> Parser<'src> {
|
|||
///
|
||||
/// Report errors for all the duplicate names found.
|
||||
fn validate_parameters(&mut self, parameters: &ast::Parameters) {
|
||||
let mut all_arg_names = FxHashSet::with_capacity_and_hasher(
|
||||
parameters.posonlyargs.len()
|
||||
+ parameters.args.len()
|
||||
+ usize::from(parameters.vararg.is_some())
|
||||
+ parameters.kwonlyargs.len()
|
||||
+ usize::from(parameters.kwarg.is_some()),
|
||||
BuildHasherDefault::default(),
|
||||
);
|
||||
let mut all_arg_names =
|
||||
FxHashSet::with_capacity_and_hasher(parameters.len(), BuildHasherDefault::default());
|
||||
|
||||
let posonlyargs = parameters.posonlyargs.iter();
|
||||
let args = parameters.args.iter();
|
||||
let kwonlyargs = parameters.kwonlyargs.iter();
|
||||
|
||||
let vararg = parameters.vararg.as_deref();
|
||||
let kwarg = parameters.kwarg.as_deref();
|
||||
|
||||
for arg in posonlyargs
|
||||
.chain(args)
|
||||
.chain(kwonlyargs)
|
||||
.map(|arg| &arg.parameter)
|
||||
.chain(vararg)
|
||||
.chain(kwarg)
|
||||
{
|
||||
let range = arg.name.range;
|
||||
let arg_name = arg.name.as_str();
|
||||
if !all_arg_names.insert(arg_name) {
|
||||
for parameter in parameters {
|
||||
let range = parameter.name().range();
|
||||
let param_name = parameter.name().as_str();
|
||||
if !all_arg_names.insert(param_name) {
|
||||
self.add_error(
|
||||
ParseErrorType::DuplicateParameter(arg_name.to_string()),
|
||||
ParseErrorType::DuplicateParameter(param_name.to_string()),
|
||||
range,
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue