pub mod keywords;
use banshee_syntax::SyntaxKind;
pub fn keyword_text(kind: SyntaxKind) -> Option<&'static str> {
keywords::keyword_text(kind)
}
pub fn clause_keyword(kind: SyntaxKind) -> Option<&'static str> {
match kind {
SyntaxKind::SELECT_CLAUSE => Some("SELECT"),
SyntaxKind::FROM_CLAUSE => Some("FROM"),
SyntaxKind::WHERE_CLAUSE => Some("WHERE"),
SyntaxKind::GROUP_BY_CLAUSE => Some("GROUP BY"),
SyntaxKind::HAVING_CLAUSE => Some("HAVING"),
SyntaxKind::ORDER_BY_CLAUSE => Some("ORDER BY"),
SyntaxKind::LIMIT_CLAUSE => Some("LIMIT"),
SyntaxKind::OFFSET_CLAUSE => Some("OFFSET"),
SyntaxKind::WITH_CLAUSE => Some("WITH"),
SyntaxKind::RETURNING_CLAUSE => Some("RETURNING"),
SyntaxKind::SET_CLAUSE => Some("SET"),
SyntaxKind::VALUES_CLAUSE => Some("VALUES"),
SyntaxKind::USING_CLAUSE => Some("USING"),
_ => None,
}
}
pub fn join_keyword(kind: SyntaxKind) -> Option<&'static str> {
match kind {
SyntaxKind::INNER_KW => Some("INNER JOIN"),
SyntaxKind::LEFT_KW => Some("LEFT JOIN"),
SyntaxKind::RIGHT_KW => Some("RIGHT JOIN"),
SyntaxKind::FULL_KW => Some("FULL JOIN"),
SyntaxKind::CROSS_KW => Some("CROSS JOIN"),
SyntaxKind::NATURAL_KW => Some("NATURAL JOIN"),
SyntaxKind::JOIN_KW => Some("JOIN"),
_ => None,
}
}
pub fn is_newline_clause(kind: SyntaxKind) -> bool {
matches!(
kind,
SyntaxKind::SELECT_CLAUSE
| SyntaxKind::FROM_CLAUSE
| SyntaxKind::WHERE_CLAUSE
| SyntaxKind::GROUP_BY_CLAUSE
| SyntaxKind::HAVING_CLAUSE
| SyntaxKind::ORDER_BY_CLAUSE
| SyntaxKind::LIMIT_CLAUSE
| SyntaxKind::OFFSET_CLAUSE
| SyntaxKind::RETURNING_CLAUSE
| SyntaxKind::SET_CLAUSE
| SyntaxKind::VALUES_CLAUSE
| SyntaxKind::USING_CLAUSE
)
}
pub fn is_logical_operator(kind: SyntaxKind) -> bool {
matches!(kind, SyntaxKind::AND_KW | SyntaxKind::OR_KW)
}
pub fn calculate_river_width(keywords: &[&str]) -> usize {
keywords.iter().map(|k| k.len()).max().unwrap_or(0)
}
pub const STANDARD_CLAUSE_KEYWORDS: &[&str] = &[
"SELECT",
"FROM",
"WHERE",
"GROUP BY",
"HAVING",
"ORDER BY",
"LIMIT",
"OFFSET",
"WITH",
"RETURNING",
"SET",
"VALUES",
"USING",
"LEFT JOIN",
"RIGHT JOIN",
"INNER JOIN",
"FULL JOIN",
"CROSS JOIN",
"ON",
"AND",
"OR",
];
pub fn standard_river_width() -> usize {
10
}