sqruff_lib_core/parser/segments/
bracketed.rs1use ahash::AHashSet;
2
3use super::base::ErasedSegment;
4use crate::dialects::syntax::{SyntaxKind, SyntaxSet};
5use crate::errors::SQLParseError;
6use crate::parser::context::ParseContext;
7use crate::parser::match_result::MatchResult;
8use crate::parser::matchable::{
9 Matchable, MatchableCacheKey, MatchableTrait, next_matchable_cache_key,
10};
11
12#[derive(Clone, Debug, Ord, PartialOrd, Eq, PartialEq)]
13pub struct BracketedSegmentMatcher {
14 cache_key: MatchableCacheKey,
15}
16
17impl BracketedSegmentMatcher {
18 pub fn new() -> Self {
19 Self {
20 cache_key: next_matchable_cache_key(),
21 }
22 }
23}
24
25impl Default for BracketedSegmentMatcher {
26 fn default() -> Self {
27 Self::new()
28 }
29}
30
31impl MatchableTrait for BracketedSegmentMatcher {
32 fn elements(&self) -> &[Matchable] {
33 &[]
34 }
35
36 fn simple(
37 &self,
38 _parse_context: &ParseContext,
39 _crumbs: Option<Vec<&str>>,
40 ) -> Option<(AHashSet<String>, SyntaxSet)> {
41 None
42 }
43
44 fn match_segments(
45 &self,
46 segments: &[ErasedSegment],
47 idx: u32,
48 _parse_context: &mut ParseContext,
49 ) -> Result<MatchResult, SQLParseError> {
50 if segments[idx as usize].get_type() == SyntaxKind::Bracketed {
51 return Ok(MatchResult::from_span(idx, idx + 1));
52 }
53
54 Ok(MatchResult::empty_at(idx))
55 }
56
57 fn cache_key(&self) -> MatchableCacheKey {
58 self.cache_key
59 }
60}