Skip to content

Commit

Permalink
Optimize validate_arguments (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
charliermarsh authored Jun 19, 2023
1 parent 9cb0051 commit 21aa0b8
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
13 changes: 9 additions & 4 deletions parser/src/function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -83,16 +90,14 @@ 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(),
),
location: start,
});
}

keyword_names.insert(keyword_name.clone());
} else {
double_starred = true;
}
Expand Down
2 changes: 1 addition & 1 deletion parser/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand Down

0 comments on commit 21aa0b8

Please sign in to comment.