# luna-cli **Repository Path**: plus7wist/luna-cli ## Basic Information - **Project Name**: luna-cli - **Description**: No description available - **Primary Language**: Unknown - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-13 - **Last Updated**: 2022-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Luna CLI 我希望在命令行工具中,不用应用设置就可以区分__选项__和__位置参数__。这是一次实验性的库实现。 ## 定义 * 选项:带有名字的命令行参数,分为__带参数__和__不带参数__两种。 例如 git commit 的 -m ${message},和 ls 的 -l。 struct Opt { name: String, value: Option, } * 位置参数:不带名字的命令行参数。例如 cd ${directory} 中的 ${directory}。 enum Arg { Opt(Opt), Pos(String), } 命令行参数解析的结果是 `Vec`。 ## 词法和语法 选项名字是长度大于等于 1 的字符串,只能包含字符: * a-z * A-Z * 0-9 * 下划线(`_`) 而且首字母不能用数字。 传统的命令行参数规则中,`-a bc` 和 `--foo bar` 形式是有歧义的,可以表示有参数的选项,或者无参数的选项以及一个位置参数。这份规则选择把它看作第二种,并且改用 `-a= bc` 和 `--foo= bar` 代表第一种语义。下面给出了一些例子: * `-a` [ Opt{ name: "a", value: None } ] * `-abc` [ Opt{ name: "a", value: Some("bc") } ] * `-a bc` [ Opt{ name: "a", value: None }, Pos("bc") ] * `--foo` [ Opt{ name: "foo", value: None } ] * `--foo=bar` [ Opt{ name: "foo", value: Some("v") } ] * `--foo= bar` [ Opt{ name: "foo", value: Some("v") } ] * `--foo baz` [ Opt{ name: "foo", value: None }, Pos("baz") ]