mirror of
https://github.com/astral-sh/ruff
synced 2026-01-09 23:54:36 -05:00
Optimize validate_arguments (#10)
This commit is contained in:
@@ -16,7 +16,14 @@ pub(crate) struct ArgumentList {
|
||||
|
||||
// Perform validation of function/lambda arguments in a function definition.
|
||||
pub(crate) fn validate_arguments(arguments: &ast::Arguments) -> Result<(), LexicalError> {
|
||||
let mut all_arg_names = FxHashSet::with_hasher(Default::default());
|
||||
let mut all_arg_names = FxHashSet::with_capacity_and_hasher(
|
||||
arguments.posonlyargs.len()
|
||||
+ arguments.args.len()
|
||||
+ arguments.vararg.is_some() as usize
|
||||
+ arguments.kwonlyargs.len()
|
||||
+ arguments.kwarg.is_some() as usize,
|
||||
Default::default(),
|
||||
);
|
||||
|
||||
let posonlyargs = arguments.posonlyargs.iter();
|
||||
let args = arguments.args.iter();
|
||||
@@ -83,7 +90,7 @@ pub(crate) fn parse_args(func_args: Vec<FunctionArgument>) -> Result<ArgumentLis
|
||||
Some((start, end, name)) => {
|
||||
// Check for duplicate keyword arguments in the call.
|
||||
if let Some(keyword_name) = &name {
|
||||
if keyword_names.contains(keyword_name) {
|
||||
if !keyword_names.insert(keyword_name.clone()) {
|
||||
return Err(LexicalError {
|
||||
error: LexicalErrorType::DuplicateKeywordArgumentError(
|
||||
keyword_name.to_string(),
|
||||
@@ -91,8 +98,6 @@ pub(crate) fn parse_args(func_args: Vec<FunctionArgument>) -> Result<ArgumentLis
|
||||
location: start,
|
||||
});
|
||||
}
|
||||
|
||||
keyword_names.insert(keyword_name.clone());
|
||||
} else {
|
||||
double_starred = true;
|
||||
}
|
||||
|
||||
@@ -1104,7 +1104,7 @@ def args_to_tuple(*args: *Ts) -> Tuple[*Ts]: ...
|
||||
#[test]
|
||||
#[cfg(feature = "all-nodes-with-ranges")]
|
||||
fn decorator_ranges() {
|
||||
let parse_ast = parse_program(
|
||||
let parse_ast = ast::Suite::parse(
|
||||
r#"
|
||||
@my_decorator
|
||||
def test():
|
||||
|
||||
Reference in New Issue
Block a user