sqruff_lib/utils/
identifers.rs

1use sqruff_lib_core::dialects::syntax::SyntaxKind;
2use sqruff_lib_core::parser::segments::base::ErasedSegment;
3
4pub fn identifiers_policy_applicable(policy: &str, parent_stack: &[ErasedSegment]) -> bool {
5    match policy {
6        "all" => true,
7        "none" => false,
8        _ => {
9            let is_alias = parent_stack.last().is_some_and(|last| {
10                [
11                    SyntaxKind::AliasExpression,
12                    SyntaxKind::ColumnDefinition,
13                    SyntaxKind::WithCompoundStatement,
14                ]
15                .into_iter()
16                .any(|it| last.is_type(it))
17            });
18
19            match policy {
20                "aliases" if is_alias => true,
21                "column_aliases" if is_alias => !parent_stack
22                    .iter()
23                    .any(|p| p.is_type(SyntaxKind::FromClause)),
24                _ => false,
25            }
26        }
27    }
28}