Smart Neovim launcher for yyx990803/launch-editor
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}