Skip to content

Commit 85dd574

Browse files
authored
Merge pull request #6678 from s-ol/doc-type-aware
generated docs improvements: add vector, fntype, anytype type-printing; bool, function value-printing
2 parents fe6cc0c + 6e96352 commit 85dd574

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

lib/std/special/docs/main.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,23 @@
540540
return typeIndexName(value, wantHtml, wantLink);
541541
case typeKinds.Fn:
542542
var fnObj = zigAnalysis.fns[value];
543-
return typeIndexName(fnObj.type, wantHtml, wantLink);
543+
var declPath = fnObj.decl && getCanonDeclPath(fnObj.decl);
544+
var fnName = declPath ? declPath.declNames.join('.') : '(unknown)';
545+
546+
if (!wantHtml) {
547+
return fnName;
548+
}
549+
550+
var str = '<span class="tok-fn">';
551+
if (wantLink && declPath != null) {
552+
str += '<a href="' + navLink(declPath.pkgNames, declPath.declNames) + '">';
553+
str += escapeHtml(fnName);
554+
str += '</a>';
555+
} else {
556+
str += escapeHtml(fnName);
557+
}
558+
str += '</span>';
559+
return str;
544560
case typeKinds.Int:
545561
return token(value, tokenKinds.Number, wantHtml);
546562
case typeKinds.Optional:
@@ -566,6 +582,13 @@
566582
name += "]";
567583
name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
568584
return name;
585+
case typeKinds.Vector:
586+
var name = "Vector(";
587+
name += token(typeObj.len, tokenKinds.Number, wantHtml);
588+
name += ", ";
589+
name += typeIndexName(typeObj.elem, wantHtml, wantSubLink, null);
590+
name += ")";
591+
return name;
569592
case typeKinds.Optional:
570593
return "?" + typeIndexName(typeObj.child, wantHtml, wantSubLink, fnDecl, linkFnNameDecl);
571594
case typeKinds.Pointer:
@@ -721,6 +744,16 @@
721744
payloadHtml += token('var', tokenKinds.Keyword, wantHtml);
722745
}
723746
return payloadHtml;
747+
case typeKinds.Frame:
748+
var fnObj = zigAnalysis.fns[typeObj.fn];
749+
return '@Frame(' + getValueText(fnObj.type, typeObj.fn, wantHtml, wantSubLink) + ')';
750+
case typeKinds.AnyFrame:
751+
var name = token('anyframe', tokenKinds.Keyword, wantHtml);
752+
if (typeObj.result) {
753+
name += "->";
754+
name += typeIndexName(typeObj.result, wantHtml, wantSubLink, null);
755+
}
756+
return name;
724757
default:
725758
if (wantHtml) {
726759
return escapeHtml(typeObj.name);

src/stage1/dump_analysis.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ struct AnalDumpCtx {
352352

353353
ZigList<ZigFn *> fn_list;
354354
HashMap<const ZigFn *, uint32_t, fn_ptr_hash, fn_ptr_eql> fn_map;
355+
HashMap<const ZigFn *, uint32_t, fn_ptr_hash, fn_ptr_eql> fn_decl_map;
355356

356357
ZigList<AstNode *> node_list;
357358
HashMap<const AstNode *, uint32_t, node_ptr_hash, node_ptr_eql> node_map;
@@ -491,6 +492,7 @@ static uint32_t anal_dump_get_decl_id(AnalDumpCtx *ctx, Tld *tld) {
491492

492493
if (fn != nullptr) {
493494
(void)anal_dump_get_type_id(ctx, fn->type_entry);
495+
ctx->fn_decl_map.put_unique(fn, decl_id);
494496
}
495497
break;
496498
}
@@ -1050,6 +1052,31 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) {
10501052
anal_dump_type_ref(ctx, ty->data.array.child_type);
10511053
break;
10521054
}
1055+
case ZigTypeIdVector: {
1056+
jw_object_field(jw, "len");
1057+
jw_int(jw, ty->data.vector.len);
1058+
1059+
jw_object_field(jw, "elem");
1060+
anal_dump_type_ref(ctx, ty->data.vector.elem_type);
1061+
break;
1062+
}
1063+
case ZigTypeIdAnyFrame: {
1064+
if (ty->data.any_frame.result_type != nullptr) {
1065+
jw_object_field(jw, "result");
1066+
anal_dump_type_ref(ctx, ty->data.any_frame.result_type);
1067+
}
1068+
break;
1069+
}
1070+
case ZigTypeIdFnFrame: {
1071+
jw_object_field(jw, "fnName");
1072+
jw_string(jw, buf_ptr(&ty->data.frame.fn->symbol_name));
1073+
1074+
jw_object_field(jw, "fn");
1075+
anal_dump_fn_ref(ctx, ty->data.frame.fn);
1076+
break;
1077+
}
1078+
case ZigTypeIdInvalid:
1079+
zig_unreachable();
10531080
default:
10541081
jw_object_field(jw, "name");
10551082
jw_string(jw, buf_ptr(&ty->name));
@@ -1173,6 +1200,12 @@ static void anal_dump_fn(AnalDumpCtx *ctx, ZigFn *fn) {
11731200
jw_object_field(jw, "type");
11741201
anal_dump_type_ref(ctx, fn->type_entry);
11751202

1203+
auto entry = ctx->fn_decl_map.maybe_get(fn);
1204+
if (entry != nullptr) {
1205+
jw_object_field(jw, "decl");
1206+
jw_int(jw, entry->value);
1207+
}
1208+
11761209
jw_end_object(jw);
11771210
}
11781211

@@ -1187,6 +1220,7 @@ void zig_print_analysis_dump(CodeGen *g, FILE *f, const char *one_indent, const
11871220
ctx.decl_map.init(16);
11881221
ctx.node_map.init(16);
11891222
ctx.fn_map.init(16);
1223+
ctx.fn_decl_map.init(16);
11901224
ctx.err_map.init(16);
11911225

11921226
jw_begin_object(jw);

0 commit comments

Comments
 (0)