(
object: &ObjectConfig,
diff_config: &diff::DiffObjConfig,
mut existing_functions: Option<&mut HashSet<String>>,
)
| 195 | } |
| 196 | |
| 197 | fn report_object( |
| 198 | object: &ObjectConfig, |
| 199 | diff_config: &diff::DiffObjConfig, |
| 200 | mut existing_functions: Option<&mut HashSet<String>>, |
| 201 | ) -> Result<Option<ReportUnit>> { |
| 202 | match (&object.target_path, &object.base_path) { |
| 203 | (None, Some(_)) if !object.complete.unwrap_or(false) => { |
| 204 | warn!("Skipping object without target: {}", object.name); |
| 205 | return Ok(None); |
| 206 | } |
| 207 | (None, None) => { |
| 208 | warn!("Skipping object without target or base: {}", object.name); |
| 209 | return Ok(None); |
| 210 | } |
| 211 | _ => {} |
| 212 | } |
| 213 | let mapping_config = diff::MappingConfig::default(); |
| 214 | let target = object |
| 215 | .target_path |
| 216 | .as_ref() |
| 217 | .map(|p| { |
| 218 | obj::read::read(p.as_ref(), diff_config, diff::DiffSide::Target) |
| 219 | .with_context(|| format!("Failed to open {p}")) |
| 220 | }) |
| 221 | .transpose()?; |
| 222 | let base = object |
| 223 | .base_path |
| 224 | .as_ref() |
| 225 | .map(|p| { |
| 226 | obj::read::read(p.as_ref(), diff_config, diff::DiffSide::Base) |
| 227 | .with_context(|| format!("Failed to open {p}")) |
| 228 | }) |
| 229 | .transpose()?; |
| 230 | let result = |
| 231 | diff::diff_objs(target.as_ref(), base.as_ref(), None, diff_config, &mapping_config)?; |
| 232 | |
| 233 | let metadata = ReportUnitMetadata { |
| 234 | complete: object.metadata.complete, |
| 235 | module_name: target |
| 236 | .as_ref() |
| 237 | .and_then(|o| o.split_meta.as_ref()) |
| 238 | .and_then(|m| m.module_name.clone()), |
| 239 | module_id: target.as_ref().and_then(|o| o.split_meta.as_ref()).and_then(|m| m.module_id), |
| 240 | source_path: object.metadata.source_path.as_ref().map(|p| p.to_string()), |
| 241 | progress_categories: object.metadata.progress_categories.clone().unwrap_or_default(), |
| 242 | auto_generated: object.metadata.auto_generated, |
| 243 | }; |
| 244 | let mut measures = Measures { total_units: 1, ..Default::default() }; |
| 245 | let mut sections = vec![]; |
| 246 | let mut functions = vec![]; |
| 247 | |
| 248 | let obj = target.as_ref().or(base.as_ref()).unwrap(); |
| 249 | let obj_diff = result.left.as_ref().or(result.right.as_ref()).unwrap(); |
| 250 | for ((section_idx, section), section_diff) in |
| 251 | obj.sections.iter().enumerate().zip(&obj_diff.sections) |
| 252 | { |
| 253 | if section.kind == SectionKind::Unknown { |
| 254 | continue; |
no test coverage detected