aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-11-17 15:13:38 +0000
committergingerBill <bill@gingerbill.org>2020-11-17 15:13:38 +0000
commita0fbc563173318821af945c76d8417cf599abdbd (patch)
tree5575805ea4db9d5102158057654017c39fb214d6 /src
parentd90fc18bef8300da0fc6102d57b9e970bd7fe935 (diff)
Improve flags for `odin doc`
Diffstat (limited to 'src')
-rw-r--r--src/checker.cpp4
-rw-r--r--src/checker.hpp3
-rw-r--r--src/docs.cpp38
-rw-r--r--src/main.cpp18
4 files changed, 39 insertions, 24 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index 8f8aa7381..88aed4c62 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -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;
diff --git a/src/checker.hpp b/src/checker.hpp
index 97469908b..b986296e0 100644
--- a/src/checker.hpp
+++ b/src/checker.hpp
@@ -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;
diff --git a/src/docs.cpp b/src/docs.cpp
index 76d8c5433..f65b07746 100644
--- a/src/docs.cpp
+++ b/src/docs.cpp
@@ -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>");
}
@@ -317,6 +297,18 @@ void generate_documentation(Checker *c) {
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]);
+ }
} else {
GB_ASSERT(info->init_scope->flags & ScopeFlag_Pkg);
AstPackage *pkg = info->init_scope->pkg;
diff --git a/src/main.cpp b/src/main.cpp
index d6dc3f9b8..2c7736762 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -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) {