MCPcopy Create free account
hub / github.com/dprint/jsonc-parser / scan_object_entry

Method scan_object_entry

src/parser.rs:125–176  ·  view source on GitHub ↗

Scans the next object entry (key or close brace), handling commas between entries. Pass `first = true` for the first entry.

(&mut self, first: bool)

Source from the content-addressed store, hash-verified

123 /// Scans the next object entry (key or close brace), handling commas
124 /// between entries. Pass `first = true` for the first entry.
125 pub fn scan_object_entry(&mut self, first: bool) -> Result<Option<ObjectKey<'a>>, ParseError> {
126 if first {
127 return self.scan_object_key();
128 }
129
130 let after_value_end = self.scanner.token_end();
131 let token = self.scan()?;
132 match token {
133 Some(Token::Comma) => {
134 let comma_range = Range::new(self.scanner.token_start(), self.scanner.token_end());
135 let key = self.scan_object_key()?;
136 if key.is_none() && !self.allow_trailing_commas {
137 return Err(
138 self
139 .scanner
140 .create_error_for_range(comma_range, ParseErrorKind::TrailingCommasNotAllowed),
141 );
142 }
143 Ok(key)
144 }
145 Some(Token::CloseBrace) => Ok(None),
146 Some(Token::String(s)) if self.allow_missing_commas => Ok(Some(ObjectKey::String(s))),
147 Some(Token::Word(s) | Token::Number(s)) if self.allow_missing_commas => {
148 if !self.allow_loose_object_property_names {
149 return Err(
150 self
151 .scanner
152 .create_error_for_current_token(ParseErrorKind::ExpectedStringObjectProperty),
153 );
154 }
155 Ok(Some(ObjectKey::Word(s)))
156 }
157 Some(Token::String(_) | Token::Word(_) | Token::Number(_)) => {
158 let range = Range::new(after_value_end, after_value_end);
159 Err(
160 self
161 .scanner
162 .create_error_for_range(range, ParseErrorKind::ExpectedComma),
163 )
164 }
165 None => Err(
166 self
167 .scanner
168 .create_error_for_current_token(ParseErrorKind::UnterminatedObject),
169 ),
170 _ => Err(
171 self
172 .scanner
173 .create_error_for_current_token(ParseErrorKind::UnexpectedTokenInObject),
174 ),
175 }
176 }
177
178 /// Scans an object property colon separator.
179 pub fn scan_object_colon(&mut self) -> Result<(), ParseError> {

Callers 2

parse_objectFunction · 0.80
next_key_seedMethod · 0.80

Calls 6

scan_object_keyMethod · 0.80
token_endMethod · 0.80
token_startMethod · 0.80
scanMethod · 0.45

Tested by

no test coverage detected