Smart Neovim launcher for yyx990803/launch-editor
at main 38 lines 866 B view raw
1use std::{num::NonZeroU64, path::PathBuf}; 2 3use anyhow::{Result, bail}; 4use log::error; 5 6#[derive(Debug)] 7pub struct Args { 8 pub filename: PathBuf, 9 pub line: Option<NonZeroU64>, 10 pub col: Option<NonZeroU64>, 11} 12 13pub fn parse() -> Result<Args> { 14 let mut args = std::env::args().skip(1); 15 let Some(filename) = args.next().map(PathBuf::from) else { 16 bail!("not enough arguments"); 17 }; 18 let line = args 19 .next() 20 .map(|l| { 21 l.parse() 22 .inspect_err(|e| error!("Failed to parse line number {l:?}: {e}")) 23 }) 24 .transpose()?; 25 let col = args 26 .next() 27 .map(|c| { 28 c.parse() 29 .inspect_err(|e| error!("Failed to parse column number {c:?}: {e}")) 30 }) 31 .transpose()?; 32 33 Ok(Args { 34 filename, 35 line, 36 col, 37 }) 38}