Improve flags for odin doc

This commit is contained in:
gingerBill
2020-11-17 15:13:38 +00:00
parent d90fc18bef
commit a0fbc56317
4 changed files with 39 additions and 24 deletions

View File

@@ -3116,6 +3116,8 @@ void check_collect_value_decl(CheckerContext *c, Ast *decl) {
Ast *init_expr = value;
DeclInfo *d = make_decl_info(c->scope, c->decl);
d->decl_node = decl;
d->comment = vd->comment;
d->docs = vd->docs;
d->entity = e;
d->type_expr = vd->type;
d->init_expr = init_expr;
@@ -3147,6 +3149,8 @@ void check_collect_value_decl(CheckerContext *c, Ast *decl) {
DeclInfo *d = make_decl_info(c->scope, c->decl);
d->decl_node = decl;
d->comment = vd->comment;
d->docs = vd->docs;
d->attributes = vd->attributes;
d->type_expr = vd->type;
d->init_expr = init;

View File

@@ -141,6 +141,9 @@ struct DeclInfo {
bool is_using;
bool where_clauses_evaluated;
CommentGroup *comment;
CommentGroup *docs;
PtrSet<Entity *> deps;
PtrSet<Type *> type_info_deps;
Array<BlockLabel> labels;

View File

@@ -209,6 +209,8 @@ void print_doc_package(CheckerInfo *info, AstPackage *pkg) {
Ast *type_expr = nullptr;
Ast *init_expr = nullptr;
Ast *decl_node = nullptr;
CommentGroup *comment = nullptr;
CommentGroup *docs = nullptr;
if (e->decl_info != nullptr) {
type_expr = e->decl_info->type_expr;
init_expr = e->decl_info->init_expr;
@@ -236,29 +238,7 @@ void print_doc_package(CheckerInfo *info, AstPackage *pkg) {
gb_printf(";\n");
if (decl_node && (true || (build_context.cmd_doc_flags & CmdDocFlag_All))) {
CommentGroup *docs = nullptr;
CommentGroup *comment = nullptr;
switch (decl_node->kind) {
case_ast_node(vd, ValueDecl, decl_node);
docs = vd->docs;
comment = vd->comment;
case_end;
case_ast_node(id, ImportDecl, decl_node);
docs = id->docs;
comment = id->comment;
case_end;
case_ast_node(fl, ForeignImportDecl, decl_node);
docs = fl->docs;
comment = fl->comment;
case_end;
case_ast_node(fb, ForeignBlockDecl, decl_node);
docs = fb->docs;
case_end;
}
if (build_context.cmd_doc_flags & CmdDocFlag_All) {
if (comment) {
// gb_printf(" <comment>");
}
@@ -314,6 +294,18 @@ void generate_documentation(Checker *c) {
gb_sort_array(pkgs.data, pkgs.count, cmp_ast_package_by_name);
for_array(i, pkgs) {
print_doc_package(info, pkgs[i]);
}
} else if (build_context.cmd_doc_flags & CmdDocFlag_AllPackages) {
auto pkgs = array_make<AstPackage *>(permanent_allocator(), 0, info->packages.entries.count);
for_array(i, info->packages.entries) {
AstPackage *pkg = info->packages.entries[i].value;
array_add(&pkgs, pkg);
}
gb_sort_array(pkgs.data, pkgs.count, cmp_ast_package_by_name);
for_array(i, pkgs) {
print_doc_package(info, pkgs[i]);
}

View File

@@ -599,6 +599,8 @@ enum BuildFlagKind {
BuildFlag_GoToDefinitions,
BuildFlag_Package,
BuildFlag_All,
BuildFlag_AllPackages,
#if defined(GB_SYSTEM_WINDOWS)
BuildFlag_IgnoreVsSearch,
@@ -706,7 +708,9 @@ bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_GlobalDefinitions, str_lit("global-definitions"), BuildFlagParam_None, Command_query);
add_flag(&build_flags, BuildFlag_GoToDefinitions, str_lit("go-to-definitions"), BuildFlagParam_None, Command_query);
add_flag(&build_flags, BuildFlag_Package, str_lit("package"), BuildFlagParam_String, Command_doc, true);
add_flag(&build_flags, BuildFlag_Package, str_lit("package"), BuildFlagParam_String, Command_doc, true);
add_flag(&build_flags, BuildFlag_All, str_lit("all"), BuildFlagParam_None, Command_doc);
add_flag(&build_flags, BuildFlag_AllPackages, str_lit("all-packages"), BuildFlagParam_None, Command_doc);
#if defined(GB_SYSTEM_WINDOWS)
@@ -1204,6 +1208,13 @@ bool parse_build_flags(Array<String> args) {
array_add(&build_context.doc_packages, value.value_string);
}
break;
case BuildFlag_All:
build_context.cmd_doc_flags |= CmdDocFlag_All;
break;
case BuildFlag_AllPackages:
build_context.cmd_doc_flags |= CmdDocFlag_AllPackages;
break;
#if defined(GB_SYSTEM_WINDOWS)
case BuildFlag_IgnoreVsSearch:
@@ -1297,6 +1308,11 @@ bool parse_build_flags(Array<String> args) {
}
}
if (build_context.doc_packages.count > 0 && set_flags[BuildFlag_AllPackages]) {
gb_printf_err("'odin doc' does not allow both flags together '-all-packages' and '-package' together");;
bad_flags = true;
}
if (build_context.query_data_set_settings.ok) {
if (build_context.query_data_set_settings.kind == QueryDataSet_Invalid) {