MCPcopy Create free account
hub / github.com/dylan-sutton-chavez/edge-python / group

Method group

std/re/src/main/parser.rs:143–181  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

141 }
142
143 fn group(&mut self) -> Result<Node, ParseError> {
144 self.bump(); // open paren
145 if self.peek() != Some('?') {
146 self.group_count += 1;
147 let index = self.group_count;
148 let node = self.alternation()?;
149 self.expect(')')?;
150 return Ok(Node::Group { index, name: None, node: Box::new(node) });
151 }
152 self.bump(); // question mark
153 match self.peek() {
154 Some(':') => { self.bump(); let n = self.alternation()?; self.expect(')')?; Ok(Node::NonCap(Box::new(n))) }
155 Some('=') => { self.bump(); self.look(false, false) }
156 Some('!') => { self.bump(); self.look(false, true) }
157 Some('<') => {
158 self.bump();
159 match self.peek() {
160 Some('=') => { self.bump(); self.look(true, false) }
161 Some('!') => { self.bump(); self.look(true, true) }
162 _ => { let name = self.read_name('>')?; self.named_group(name) }
163 }
164 }
165 Some('P') => {
166 self.bump();
167 match self.peek() {
168 Some('<') => { self.bump(); let name = self.read_name('>')?; self.named_group(name) }
169 Some('=') => { self.bump(); let name = self.read_name(')')?; self.named_backref(&name) }
170 _ => Err(self.err("unknown extension")),
171 }
172 }
173 Some('#') => {
174 while let Some(c) = self.peek() { if c == ')' { break; } self.bump(); }
175 self.expect(')')?;
176 Ok(Node::Empty)
177 }
178 Some(c) if is_flag_char(c) => { self.read_flags()?; self.expect(')')?; Ok(Node::Empty) }
179 _ => Err(self.err("unknown extension")),
180 }
181 }
182
183 fn look(&mut self, behind: bool, negative: bool) -> Result<Node, ParseError> {
184 let node = self.alternation()?;

Callers 1

atomMethod · 0.80

Calls 11

is_flag_charFunction · 0.85
bumpMethod · 0.80
alternationMethod · 0.80
read_nameMethod · 0.80
named_groupMethod · 0.80
named_backrefMethod · 0.80
read_flagsMethod · 0.80
peekMethod · 0.45
expectMethod · 0.45
lookMethod · 0.45
errMethod · 0.45

Tested by

no test coverage detected