aboutsummaryrefslogtreecommitdiff
path: root/src/docs.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-11-17 15:45:55 +0000
committergingerBill <bill@gingerbill.org>2020-11-17 15:45:55 +0000
commit34ca4e92eb5316cebb66aa1c69d4ced5719e7773 (patch)
tree0a913552799899c5671a3118c2c2902a0d2518e0 /src/docs.cpp
parent7442f4bab653917a99fb34a75276eab551ef4d58 (diff)
Fix parser logic for first comment group line in a file
Diffstat (limited to 'src/docs.cpp')
-rw-r--r--src/docs.cpp36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/docs.cpp b/src/docs.cpp
index 67e3ebbe5..50586ed8f 100644
--- a/src/docs.cpp
+++ b/src/docs.cpp
@@ -110,20 +110,23 @@ void print_doc_line_no_newline(i32 indent, char const *fmt, ...) {
va_end(va);
}
-bool print_doc_comment_group_string(i32 indent, CommentGroup const &g) {
+bool print_doc_comment_group_string(i32 indent, CommentGroup *g) {
+ if (g == nullptr) {
+ return false;
+ }
isize len = 0;
- for_array(i, g.list) {
- String comment = g.list[i].string;
+ for_array(i, g->list) {
+ String comment = g->list[i].string;
len += comment.len;
len += 1; // for \n
}
- if (len == 0) {
+ if (len <= g->list.count) {
return false;
}
isize count = 0;
- for_array(i, g.list) {
- String comment = g.list[i].string;
+ for_array(i, g->list) {
+ String comment = g->list[i].string;
if (comment[1] == '/') {
comment.text += 2;
comment.len -= 2;
@@ -131,7 +134,11 @@ bool print_doc_comment_group_string(i32 indent, CommentGroup const &g) {
comment.text += 2;
comment.len -= 4;
}
- comment = string_trim_whitespace(comment);
+ if (comment.len > 0 && comment[0] == ' ') {
+ comment.text += 1;
+ comment.len -= 1;
+ }
+
if (string_starts_with(comment, str_lit("@("))) {
continue;
}
@@ -164,6 +171,15 @@ void print_doc_package(CheckerInfo *info, AstPackage *pkg) {
print_doc_line(0, "package %.*s", LIT(pkg->name));
+
+ for_array(i, pkg->files) {
+ AstFile *f = pkg->files[i];
+ if (f->pkg_decl) {
+ GB_ASSERT(f->pkg_decl->kind == Ast_PackageDecl);
+ print_doc_comment_group_string(1, f->pkg_decl->PackageDecl.docs);
+ }
+ }
+
if (pkg->scope != nullptr) {
auto entities = array_make<Entity *>(heap_allocator(), 0, pkg->scope->elements.entries.count);
defer (array_free(&entities));
@@ -244,10 +260,8 @@ void print_doc_package(CheckerInfo *info, AstPackage *pkg) {
if (comment) {
// gb_printf(" <comment>");
}
- if (docs) {
- if (print_doc_comment_group_string(3, *docs)) {
- gb_printf("\n");
- }
+ if (print_doc_comment_group_string(3, docs)) {
+ gb_printf("\n");
}
}
}