(&self, config: GlobalConfig)
| 56 | |
| 57 | impl Find { |
| 58 | pub fn run(&self, config: GlobalConfig) -> CliResult { |
| 59 | let selector_bump = Bump::default(); |
| 60 | let lexer = Lexer::new(&CsskitAtomSet::ATOMS, &self.selector); |
| 61 | let mut parser = Parser::new(&selector_bump, &self.selector, lexer); |
| 62 | let result = parser.parse_entirely::<QuerySelectorList>(); |
| 63 | |
| 64 | if !result.errors.is_empty() || result.output.as_ref().is_some_and(|n| n.metadata().is_invalid) { |
| 65 | if let Some(err) = result.errors.first() { |
| 66 | eprintln!("error: {}", err.message(&self.selector)); |
| 67 | } else { |
| 68 | eprintln!("Invalid selector '{}'", &self.selector); |
| 69 | } |
| 70 | self.suggest_types(&self.selector); |
| 71 | return Err(CliError::ParseFailed); |
| 72 | } |
| 73 | |
| 74 | let Some(selectors) = result.output else { |
| 75 | eprintln!("error: failed to parse selector"); |
| 76 | self.suggest_types(&self.selector); |
| 77 | return Err(CliError::ParseFailed); |
| 78 | }; |
| 79 | |
| 80 | // In JSON mode, --count is ignored: consumers derive counts from results array length. |
| 81 | if self.count && !matches!(self.format, OutputFormat::Json) { |
| 82 | self.output_count(&selectors) |
| 83 | } else { |
| 84 | Extract::run(self, config) |
| 85 | } |
| 86 | } |
| 87 | |
| 88 | fn output_count(&self, selectors: &QuerySelectorList) -> CliResult { |
| 89 | let bump = Bump::default(); |
no test coverage detected