Skip to main content

apollo_compiler/validation/
argument.rs

1use 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}