MCPcopy Index your code
hub / github.com/encounter/objdiff / report_object

Function report_object

objdiff-cli/src/cmd/report.rs:197–349  ·  view source on GitHub ↗
(
    object: &ObjectConfig,
    diff_config: &diff::DiffObjConfig,
    mut existing_functions: Option<&mut HashSet<String>>,
)

Source from the content-addressed store, hash-verified

195}
196
197fn 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;

Callers 1

generateFunction · 0.85

Calls 6

readFunction · 0.85
diff_objsFunction · 0.85
pushMethod · 0.80
cmpMethod · 0.80
calc_matched_percentMethod · 0.80

Tested by

no test coverage detected