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

Function run_interactive

objdiff-cli/src/cmd/diff.rs:355–458  ·  view source on GitHub ↗
(
    args: Args,
    target_path: Option<Utf8PlatformPathBuf>,
    base_path: Option<Utf8PlatformPathBuf>,
    project_config: Option<ProjectConfig>,
    unit_options: Option<ProjectOptions>,
)

Source from the content-addressed store, hash-verified

353}
354
355fn run_interactive(
356 args: Args,
357 target_path: Option<Utf8PlatformPathBuf>,
358 base_path: Option<Utf8PlatformPathBuf>,
359 project_config: Option<ProjectConfig>,
360 unit_options: Option<ProjectOptions>,
361) -> Result<()> {
362 let Some(symbol_name) = &args.symbol else { bail!("Interactive mode requires a symbol name") };
363 let time_format = time::format_description::parse_borrowed::<2>("[hour]:[minute]:[second]")
364 .context("Failed to parse time format")?;
365 let (diff_obj_config, mapping_config) =
366 build_config_from_args(&args, project_config.as_ref(), unit_options.as_ref())?;
367 let mut state = AppState {
368 jobs: Default::default(),
369 waker: Default::default(),
370 project_dir: args.project.clone(),
371 project_config,
372 target_path,
373 base_path,
374 left_status: None,
375 right_status: None,
376 left_obj: None,
377 right_obj: None,
378 prev_obj: None,
379 reload_time: None,
380 time_format,
381 watcher: None,
382 modified: Default::default(),
383 diff_obj_config,
384 mapping_config,
385 };
386 if let (Some(project_dir), Some(project_config)) = (&state.project_dir, &state.project_config) {
387 let watch_patterns = project_config.build_watch_patterns()?;
388 let ignore_patterns = project_config.build_ignore_patterns()?;
389 state.watcher = Some(create_watcher(
390 state.modified.clone(),
391 project_dir.as_ref(),
392 build_globset(&watch_patterns)?,
393 build_globset(&ignore_patterns)?,
394 Waker::from(state.waker.clone()),
395 )?);
396 }
397 let mut view: Box<dyn UiView> =
398 Box::new(FunctionDiffUi { symbol_name: symbol_name.clone(), ..Default::default() });
399 state.reload()?;
400
401 crossterm_panic_handler();
402 enable_raw_mode()?;
403 crossterm::queue!(
404 stdout(),
405 EnterAlternateScreen,
406 EnableMouseCapture,
407 SetTitle(format!("{symbol_name} - objdiff")),
408 )?;
409 let backend = CrosstermBackend::new(stdout());
410 let mut terminal = Terminal::new(backend)?;
411
412 let mut result = EventResult { redraw: true, ..Default::default() };

Callers 1

runFunction · 0.85

Calls 10

build_config_from_argsFunction · 0.85
build_globsetFunction · 0.85
crossterm_panic_handlerFunction · 0.85
readFunction · 0.85
build_watch_patternsMethod · 0.80
build_ignore_patternsMethod · 0.80
drawMethod · 0.80
handle_eventMethod · 0.80
check_jobsMethod · 0.80
reloadMethod · 0.45

Tested by

no test coverage detected