apollo_compiler/validation/
argument.rs1use crate::ast;
2use crate::collections::HashMap;
3use crate::validation::diagnostics::DiagnosticData;
4use crate::validation::DiagnosticList;
5use crate::validation::SourceSpan;
6use crate::Node;
7
8pub(crate) fn validate_arguments(
9 diagnostics: &mut DiagnosticList,
10 arguments: &[Node<ast::Argument>],
11) {
12 let mut seen = HashMap::<_, Option<SourceSpan>>::default();
13
14 for argument in arguments {
15 let name = &argument.name;
16 if let Some(&original_definition) = seen.get(name) {
17 let redefined_definition = argument.location();
18 diagnostics.push(
19 redefined_definition,
20 DiagnosticData::UniqueArgument {
21 name: name.clone(),
22 original_definition,
23 redefined_definition,
24 },
25 );
26 } else {
27 seen.insert(name, argument.location());
28 }
29 }
30}