feat(argparse): 实现高级命令行参数解析库
- 添加完整的参数解析API,支持子命令、选项和参数定义 - 实现多种数据类型支持:字符串、布尔值、整数、浮点数、枚举等 - 添加约束规范结构体,支持必填项、多值、隐藏选项等功能 - 实现国际化支持,包含中英文错误提示和帮助信息 - 添加模糊匹配功能,当用户输入错误参数时提供相似建议 - 实现详细的帮助信息打印功能,包括使用方法、选项说明等 - 修改底层optparse库,优化选项处理和错误报告机制 - 添加向量类型支持用于管理参数、选项和子命令集合
This commit is contained in:
@@ -6,13 +6,13 @@
|
||||
|
||||
// 测试用例配置
|
||||
static scc_optparse_opt_t test_opts[] = {
|
||||
SCC_OPTPARSE_OPT('-', 'h', "help", 0, 0, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('-', 'h', "help", 0, 0, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('-', 'v', "verbose", 0, 0, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('-', 'f', "file", 1, 1, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('-', 'o', "output", 1, 1, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('-', 'l', "list", 0, 10, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('-', 'c', "count", 1, 3, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('-', 'h', "help", 0, 0),
|
||||
SCC_OPTPARSE_OPT('-', 'h', "help", 0, 0),
|
||||
SCC_OPTPARSE_OPT('-', 'v', "verbose", 0, 0),
|
||||
SCC_OPTPARSE_OPT('-', 'f', "file", 1, 1),
|
||||
SCC_OPTPARSE_OPT('-', 'o', "output", 1, 1),
|
||||
SCC_OPTPARSE_OPT('-', 'l', "list", 0, 10),
|
||||
SCC_OPTPARSE_OPT('-', 'c', "count", 1, 3),
|
||||
SCC_OPTPARSE_OPT_END(),
|
||||
};
|
||||
|
||||
@@ -528,7 +528,7 @@ void test_non_dash_prefix(void) {
|
||||
scc_optparse_result_t res;
|
||||
|
||||
static scc_optparse_opt_t custom_opts[] = {
|
||||
SCC_OPTPARSE_OPT('/', 'h', "help", 0, 0, NULL, NULL),
|
||||
SCC_OPTPARSE_OPT('/', 'h', "help", 0, 0),
|
||||
SCC_OPTPARSE_OPT_END(),
|
||||
};
|
||||
|
||||
@@ -544,33 +544,34 @@ void test_non_dash_prefix(void) {
|
||||
}
|
||||
|
||||
// 测试22: 默认值功能测试
|
||||
// TODO
|
||||
void test_default_value(void) {
|
||||
scc_optparse_t parser;
|
||||
scc_optparse_result_t res;
|
||||
// scc_optparse_t parser;
|
||||
// scc_optparse_result_t res;
|
||||
|
||||
static scc_optparse_opt_t default_opts[] = {
|
||||
SCC_OPTPARSE_OPT('-', 'o', "output", 0, 1, "default.txt", NULL),
|
||||
SCC_OPTPARSE_OPT_END(),
|
||||
};
|
||||
// static scc_optparse_opt_t default_opts[] = {
|
||||
// SCC_OPTPARSE_OPT('-', 'o', "output", 0, 1, "default.txt", NULL),
|
||||
// SCC_OPTPARSE_OPT_END(),
|
||||
// };
|
||||
|
||||
// 测试1: 不提供选项,应该有默认值
|
||||
const char *argv1[] = {"program"};
|
||||
INIT_OPTPARSE(argv1);
|
||||
parser.opts = default_opts;
|
||||
// // 测试1: 不提供选项,应该有默认值
|
||||
// const char *argv1[] = {"program"};
|
||||
// INIT_OPTPARSE(argv1);
|
||||
// parser.opts = default_opts;
|
||||
|
||||
scc_optparse_parse(&parser, &res);
|
||||
// 注意:这个测试需要修改解析器以支持默认值
|
||||
// 当前实现不支持,所以只是演示
|
||||
// scc_optparse_parse(&parser, &res);
|
||||
// // 注意:这个测试需要修改解析器以支持默认值
|
||||
// // 当前实现不支持,所以只是演示
|
||||
|
||||
// 测试2: 提供选项但没有值,应该使用默认值
|
||||
const char *argv2[] = {"program", "-o"};
|
||||
INIT_OPTPARSE(argv2);
|
||||
parser.opts = default_opts;
|
||||
// // 测试2: 提供选项但没有值,应该使用默认值
|
||||
// const char *argv2[] = {"program", "-o"};
|
||||
// INIT_OPTPARSE(argv2);
|
||||
// parser.opts = default_opts;
|
||||
|
||||
scc_optparse_parse(&parser, &res);
|
||||
TEST_CHECK(res.error == SCC_OPT_ERROR_NONE);
|
||||
TEST_CHECK(res.opt && res.opt->short_name == 'o');
|
||||
// 这里可以检查默认值,但当前实现不支持
|
||||
// scc_optparse_parse(&parser, &res);
|
||||
// TEST_CHECK(res.error == SCC_OPT_ERROR_NONE);
|
||||
// TEST_CHECK(res.opt && res.opt->short_name == 'o');
|
||||
// // 这里可以检查默认值,但当前实现不支持
|
||||
}
|
||||
|
||||
// 测试23: 回调函数测试
|
||||
@@ -579,13 +580,13 @@ static void test_callback(void *value) {
|
||||
(void)value;
|
||||
callback_called = 1;
|
||||
}
|
||||
|
||||
// TODO
|
||||
void test_callback_function(void) {
|
||||
scc_optparse_t parser;
|
||||
scc_optparse_result_t res;
|
||||
|
||||
static scc_optparse_opt_t callback_opts[] = {
|
||||
SCC_OPTPARSE_OPT('-', 'h', "help", 0, 0, NULL, test_callback),
|
||||
SCC_OPTPARSE_OPT('-', 'h', "help", 0, 0),
|
||||
SCC_OPTPARSE_OPT_END(),
|
||||
};
|
||||
|
||||
@@ -599,11 +600,11 @@ void test_callback_function(void) {
|
||||
TEST_CHECK(res.error == SCC_OPT_ERROR_NONE);
|
||||
TEST_CHECK(res.opt && strcmp(res.opt->long_name, "help") == 0);
|
||||
|
||||
// 调用回调函数
|
||||
if (res.opt->invoke) {
|
||||
res.opt->invoke(NULL);
|
||||
TEST_CHECK(callback_called == 1);
|
||||
}
|
||||
// // 调用回调函数
|
||||
// if (res.opt->invoke) {
|
||||
// res.opt->invoke(NULL);
|
||||
// TEST_CHECK(callback_called == 1);
|
||||
// }
|
||||
}
|
||||
|
||||
// 测试24: 复杂的短选项组合
|
||||
|
||||
Reference in New Issue
Block a user