zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit f74c29b49a550e5e7029fde46de93068a9eecb46 (tree)
parent 1e59eb3c94ed459620a3504fb3c5110be92efced
Author: Timon Kruiper <timonkruiper@gmail.com>
Date:   Tue,  8 Oct 2019 22:57:28 +0200

Add initial support for struct fields in the docs

Diffstat:
Mlib/std/special/docs/index.html | 5+++++
Mlib/std/special/docs/main.js | 16++++++++++++++++
Msrc/dump_analysis.cpp | 28++++++++++++++++++++++++++++
3 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/lib/std/special/docs/index.html b/lib/std/special/docs/index.html @@ -275,6 +275,11 @@ <h2>No Results Found</h2> <p>Press escape to exit search and then '?' to see more options.</p> </div> + <div id="sectFields" class="hidden"> + <h2>Fields</h2> + <ul id="listFields"> + </ul> + </div> <div id="sectTypes" class="hidden"> <h2>Types</h2> <ul id="listTypes"> diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js @@ -8,6 +8,8 @@ var domListTypes = document.getElementById("listTypes"); var domSectFns = document.getElementById("sectFns"); var domListFns = document.getElementById("listFns"); + var domSectFields = document.getElementById("sectFields"); + var domListFields = document.getElementById("listFields"); var domFnProto = document.getElementById("fnProto"); var domFnProtoCode = document.getElementById("fnProtoCode"); var domFnDocs = document.getElementById("fnDocs"); @@ -94,6 +96,7 @@ domSectPkgs.classList.add("hidden"); domSectTypes.classList.add("hidden"); domSectFns.classList.add("hidden"); + domSectFields.classList.add("hidden"); domSectSearchResults.classList.add("hidden"); domSectSearchNoResults.classList.add("hidden"); domSectInfo.classList.add("hidden"); @@ -545,6 +548,19 @@ } domSectFns.classList.remove("hidden"); } + + if (container.fields.length !== 0) { + resizeDomList(domListFields, container.fields.length, '<li></li>'); + for (var i = 0; i < container.fields.length; i += 1) { + var liDom = domListFields.children[i]; + var field = container.fields[i]; + + var protoHtml = escapeHtml(field.name) + ": "; + protoHtml += typeIndexName(field.type, true, true); + liDom.innerHTML = protoHtml; + } + domSectFields.classList.remove("hidden"); + } } function operatorCompare(a, b) { diff --git a/src/dump_analysis.cpp b/src/dump_analysis.cpp @@ -732,6 +732,23 @@ static void anal_dump_pointer_attrs(AnalDumpCtx *ctx, ZigType *ty) { anal_dump_type_ref(ctx, ty->data.pointer.child_type); } +static void anal_dump_struct_field(AnalDumpCtx *ctx, const TypeStructField *struct_field) { + JsonWriter *jw = &ctx->jw; + + jw_begin_object(jw); + + jw_object_field(jw, "name"); + jw_string(jw, buf_ptr(struct_field->name)); + + jw_object_field(jw, "type"); + anal_dump_type_ref(ctx, struct_field->type_entry); + + jw_object_field(jw, "src"); + anal_dump_node_ref(ctx, struct_field->decl_node); + + jw_end_object(jw); +} + static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { JsonWriter *jw = &ctx->jw; jw_array_elem(jw); @@ -794,6 +811,17 @@ static void anal_dump_type(AnalDumpCtx *ctx, ZigType *ty) { jw_end_array(jw); } + { + jw_object_field(jw, "fields"); + jw_begin_array(jw); + + for(size_t i = 0; i < ty->data.structure.src_field_count; i += 1) { + jw_array_elem(jw); + anal_dump_struct_field(ctx, &ty->data.structure.fields[i]); + } + jw_end_array(jw); + } + if (ty->data.structure.root_struct != nullptr) { Buf *path_buf = ty->data.structure.root_struct->path;