MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / parse_parameters

Method parse_parameters

aiscript-directive/src/lib.rs:108–153  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

106 }
107
108 fn parse_parameters(&mut self) -> Option<DirectiveParams> {
109 // Handle empty parentheses case first
110 if self.scanner.check(TokenType::CloseParen) {
111 return Some(DirectiveParams::KeyValue(HashMap::new()));
112 }
113
114 if self.scanner.check(TokenType::OpenBracket) {
115 // Parse array
116 let array = self.parse_array()?;
117 Some(DirectiveParams::Array(array))
118 } else if self.scanner.check(TokenType::At) {
119 // Parse one or more directives separated by commas
120 // self.scanner.advance(); // consume '@'
121 let mut directives = Vec::new();
122 loop {
123 if let Some(directive) = self.parse_directive() {
124 directives.push(directive);
125 }
126 if !self.scanner.check(TokenType::Comma) {
127 break;
128 }
129 self.scanner.advance(); // consume ','
130 }
131 Some(DirectiveParams::Directives(directives))
132 } else if self.scanner.check(TokenType::Identifier) {
133 // Parse key-value parameters
134 let mut params = HashMap::new();
135 while !self.scanner.check(TokenType::CloseParen) {
136 self.scanner
137 .consume(TokenType::Identifier, "Expect parameter key.");
138 let key = self.scanner.previous.lexeme.to_owned();
139 self.scanner
140 .consume(TokenType::Equal, "Expect '=' after parameter key.");
141 let value = self.parse_value()?;
142 params.insert(key, value);
143 if !self.scanner.check(TokenType::Comma) {
144 break;
145 }
146 self.scanner.advance(); // consume ','
147 }
148 Some(DirectiveParams::KeyValue(params))
149 } else {
150 self.scanner.error("Expected parameters.");
151 None
152 }
153 }
154
155 fn parse_array(&mut self) -> Option<Vec<Value>> {
156 self.scanner

Callers 1

parse_directiveMethod · 0.80

Calls 8

checkMethod · 0.80
parse_arrayMethod · 0.80
pushMethod · 0.80
advanceMethod · 0.80
parse_directiveMethod · 0.45
consumeMethod · 0.45
parse_valueMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected