use crate::gql::ast::{Ident, ReturnItem};
use crate::syn::error::{SyntaxError, bail};
use crate::syn::token::Span;
const RESERVED_PARAMS: &[&str] = &[
"this", "self", "parent", "value", "before", "after", "event", "auth", "session", "token",
"access",
];
pub(super) fn validate_param_name(name: &str, span: Span) -> Result<(), SyntaxError> {
if name.starts_with("__") {
bail!(
"Parameter names starting with `__` are reserved for internal use",
@span => "rename the parameter"
);
}
if RESERVED_PARAMS.contains(&name) {
bail!(
"The parameter name `${name}` is reserved by the engine",
@span => "rename the parameter"
);
}
Ok(())
}
pub(super) fn validate_var(ident: &Ident) -> Result<(), SyntaxError> {
if ident.name.starts_with("__") {
bail!(
"Variable names starting with `__` are reserved for internal use",
@ident.span => "rename the variable"
);
}
Ok(())
}
pub(super) fn validate_alias(ident: &Ident) -> Result<(), SyntaxError> {
if ident.name.starts_with("__") {
bail!(
"Aliases starting with `__` are reserved for internal use",
@ident.span => "rename the alias"
);
}
Ok(())
}
pub(super) fn column_name(item: &ReturnItem) -> Result<(String, Span), SyntaxError> {
match &item.alias {
Some(alias) => {
validate_alias(alias)?;
Ok((alias.name.clone(), alias.span))
}
None => Ok((item.text.clone(), item.expr.span())),
}
}