Browse Source

Improve flags for `odin doc`

gingerBill 4 years ago
parent
commit
a0fbc56317
4 changed files with 39 additions and 24 deletions
  1. 4 0
      src/checker.cpp
  2. 3 0
      src/checker.hpp
  3. 15 23
      src/docs.cpp
  4. 17 1
      src/main.cpp

+ 4 - 0
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;

+ 3 - 0
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;

+ 15 - 23
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>");
 				}
@@ -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]);
 		}

+ 17 - 1
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) {