mirror of
https://github.com/ziglang/zig.git
synced 2024-11-26 23:22:44 +00:00
autodoc: split json payload per field
this will make s3 re-enable compression for the stdlib's autodoc and improve loading times (and data usage) for users alongside this commit the deploy script for the official website is also being updated
This commit is contained in:
parent
33f3a4d840
commit
c1e94b28a3
@ -1226,7 +1226,17 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="data.js"></script>
|
||||
<script src="data-typeKinds.js"></script>
|
||||
<script src="data-rootMod.js"></script>
|
||||
<script src="data-modules.js"></script>
|
||||
<script src="data-files.js"></script>
|
||||
<script src="data-calls.js"></script>
|
||||
<script src="data-types.js"></script>
|
||||
<script src="data-decls.js"></script>
|
||||
<script src="data-exprs.js"></script>
|
||||
<script src="data-astNodes.js"></script>
|
||||
<script src="data-comptimeExprs.js"></script>
|
||||
<script src="data-guideSections.js"></script>
|
||||
<script src="commonmark.js"></script>
|
||||
<script src="ziglexer.js"></script>
|
||||
<script src="main.js"></script>
|
||||
|
@ -1,6 +1,19 @@
|
||||
"use strict";
|
||||
|
||||
var zigAnalysis;
|
||||
var zigAnalysis = {
|
||||
typeKinds,
|
||||
rootMod,
|
||||
modules,
|
||||
astNodes,
|
||||
calls,
|
||||
files,
|
||||
decls,
|
||||
exprs,
|
||||
types,
|
||||
comptimeExprs,
|
||||
guideSections
|
||||
};
|
||||
|
||||
let skipNextHashChange = null;
|
||||
|
||||
const NAV_MODES = {
|
||||
@ -200,11 +213,8 @@ var scrollHistory = {};
|
||||
window.addEventListener("keydown", onWindowKeyDown, false);
|
||||
onHashChange();
|
||||
|
||||
let langRefVersion = zigAnalysis.params.zigVersion;
|
||||
if (!/^\d+\.\d+\.\d+$/.test(langRefVersion)) {
|
||||
// the version is probably not released yet
|
||||
langRefVersion = "master";
|
||||
}
|
||||
// TODO: fix this once langref becomes part of autodoc
|
||||
let langRefVersion = "master";
|
||||
domLangRefLink.href = `https://ziglang.org/documentation/${langRefVersion}/`;
|
||||
|
||||
function renderTitle() {
|
||||
@ -528,8 +538,8 @@ var scrollHistory = {};
|
||||
}
|
||||
|
||||
let activeGuide = undefined;
|
||||
outer: for (let i = 0; i < zigAnalysis.guide_sections.length; i += 1) {
|
||||
const section = zigAnalysis.guide_sections[i];
|
||||
outer: for (let i = 0; i < zigAnalysis.guideSections.length; i += 1) {
|
||||
const section = zigAnalysis.guideSections[i];
|
||||
for (let j = 0; j < section.guides.length; j += 1) {
|
||||
const guide = section.guides[j];
|
||||
if (guide.name == curNav.activeGuide) {
|
||||
@ -595,7 +605,7 @@ var scrollHistory = {};
|
||||
domGuideTocList.classList.add("hidden");
|
||||
domGuideTocListEmtpy.classList.remove("hidden");
|
||||
|
||||
if (zigAnalysis.guide_sections.length > 1 || (zigAnalysis.guide_sections[0].guides.length > 0)) {
|
||||
if (zigAnalysis.guideSections.length > 1 || (zigAnalysis.guideSections[0].guides.length > 0)) {
|
||||
renderGuidesIndex();
|
||||
} else {
|
||||
noGuidesAtAll();
|
||||
@ -609,8 +619,8 @@ var scrollHistory = {};
|
||||
// TODO: ensure unique hashes
|
||||
// TODO: hash also guides and their headings
|
||||
function computeGuideHashes() {
|
||||
for (let i = 1; i < zigAnalysis.guide_sections.length; i += 1) {
|
||||
const section = zigAnalysis.guide_sections[i];
|
||||
for (let i = 1; i < zigAnalysis.guideSections.length; i += 1) {
|
||||
const section = zigAnalysis.guideSections[i];
|
||||
section.hash = "section-" + slugify(section.name || i);
|
||||
}
|
||||
}
|
||||
@ -619,8 +629,8 @@ var scrollHistory = {};
|
||||
// main content
|
||||
{
|
||||
let html = "";
|
||||
for (let i = 0; i < zigAnalysis.guide_sections.length; i += 1) {
|
||||
const section = zigAnalysis.guide_sections[i];
|
||||
for (let i = 0; i < zigAnalysis.guideSections.length; i += 1) {
|
||||
const section = zigAnalysis.guideSections[i];
|
||||
if (i != 0) { // first section is the default section
|
||||
html += "<h2 id='"+ section.hash +"'>" + section.name + "</h2>";
|
||||
}
|
||||
@ -635,10 +645,10 @@ var scrollHistory = {};
|
||||
// sidebar / fast navigation
|
||||
{
|
||||
domGuidesMenuTitle.textContent = "Sections";
|
||||
if (zigAnalysis.guide_sections.length > 1) {
|
||||
if (zigAnalysis.guideSections.length > 1) {
|
||||
let html = "";
|
||||
for (let i = 1; i < zigAnalysis.guide_sections.length; i += 1) {
|
||||
const section = zigAnalysis.guide_sections[i];
|
||||
for (let i = 1; i < zigAnalysis.guideSections.length; i += 1) {
|
||||
const section = zigAnalysis.guideSections[i];
|
||||
html += "<li><a href='"+ NAV_MODES.GUIDES + ":" + section.hash +"'>" + section.name + "</a></li>";
|
||||
}
|
||||
domGuideTocList.innerHTML = "<ul>"+html+"</ul>";
|
||||
@ -3978,8 +3988,8 @@ Happy writing!
|
||||
}
|
||||
|
||||
function parseGuides() {
|
||||
for (let j = 0; j < zigAnalysis.guide_sections.length; j += 1) {
|
||||
const section = zigAnalysis.guide_sections[j];
|
||||
for (let j = 0; j < zigAnalysis.guideSections.length; j += 1) {
|
||||
const section = zigAnalysis.guideSections[j];
|
||||
for (let i = 0; i < section.guides.length; i += 1) {
|
||||
let reader = new commonmark.Parser({ smart: true });
|
||||
const guide = section.guides[i];
|
||||
|
@ -344,7 +344,6 @@ fn generateZirData(self: *Autodoc, output_dir: std.fs.Dir) !void {
|
||||
}
|
||||
|
||||
var data = DocData{
|
||||
.params = .{},
|
||||
.modules = self.modules,
|
||||
.files = self.files,
|
||||
.calls = self.calls.items,
|
||||
@ -353,28 +352,41 @@ fn generateZirData(self: *Autodoc, output_dir: std.fs.Dir) !void {
|
||||
.exprs = self.exprs.items,
|
||||
.astNodes = self.ast_nodes.items,
|
||||
.comptimeExprs = self.comptime_exprs.items,
|
||||
.guide_sections = self.guide_sections,
|
||||
.guideSections = self.guide_sections,
|
||||
};
|
||||
|
||||
{
|
||||
const data_js_f = try output_dir.createFile("data.js", .{});
|
||||
inline for (comptime std.meta.tags(std.meta.FieldEnum(DocData))) |f| {
|
||||
const field_name = @tagName(f);
|
||||
const file_name = "data-" ++ field_name ++ ".js";
|
||||
const data_js_f = try output_dir.createFile(file_name, .{});
|
||||
defer data_js_f.close();
|
||||
var buffer = std.io.bufferedWriter(data_js_f.writer());
|
||||
|
||||
var buffer = std.io.bufferedWriter(data_js_f.writer());
|
||||
const out = buffer.writer();
|
||||
try out.print(
|
||||
\\ /** @type {{DocData}} */
|
||||
\\ var zigAnalysis=
|
||||
, .{});
|
||||
try std.json.stringifyArbitraryDepth(
|
||||
self.arena,
|
||||
data,
|
||||
.{
|
||||
.whitespace = .minified,
|
||||
.emit_null_optional_fields = true,
|
||||
},
|
||||
out,
|
||||
);
|
||||
|
||||
try out.print("var {s} =", .{field_name});
|
||||
|
||||
var jsw = std.json.writeStream(out, .{
|
||||
.whitespace = .minified,
|
||||
.emit_null_optional_fields = true,
|
||||
});
|
||||
|
||||
switch (f) {
|
||||
.files => try writeFileTableToJson(data.files, data.modules, &jsw),
|
||||
.guideSections => try writeGuidesToJson(data.guideSections, &jsw),
|
||||
.modules => try jsw.write(data.modules.values()),
|
||||
else => try jsw.write(@field(data, field_name)),
|
||||
}
|
||||
|
||||
// try std.json.stringifyArbitraryDepth(
|
||||
// self.arena,
|
||||
// @field(data, field.name),
|
||||
// .{
|
||||
// .whitespace = .minified,
|
||||
// .emit_null_optional_fields = true,
|
||||
// },
|
||||
// out,
|
||||
// );
|
||||
try out.print(";", .{});
|
||||
|
||||
// last thing (that can fail) that we do is flush
|
||||
@ -476,18 +488,12 @@ const Scope = struct {
|
||||
|
||||
/// The output of our analysis process.
|
||||
const DocData = struct {
|
||||
// NOTE: editing fields of DocData requires also updating:
|
||||
// - the deployment script for ziglang.org
|
||||
// - imports in index.html
|
||||
typeKinds: []const []const u8 = std.meta.fieldNames(DocTypeKinds),
|
||||
rootMod: u32 = 0,
|
||||
params: struct {
|
||||
zigId: []const u8 = "arst",
|
||||
zigVersion: []const u8 = build_options.version,
|
||||
target: []const u8 = "arst",
|
||||
builds: []const struct { target: []const u8 } = &.{
|
||||
.{ .target = "arst" },
|
||||
},
|
||||
},
|
||||
modules: std.AutoArrayHashMapUnmanaged(*Module, DocModule),
|
||||
errors: []struct {} = &.{},
|
||||
|
||||
// non-hardcoded stuff
|
||||
astNodes: []AstNode,
|
||||
@ -498,7 +504,7 @@ const DocData = struct {
|
||||
exprs: []Expr,
|
||||
comptimeExprs: []ComptimeExpr,
|
||||
|
||||
guide_sections: std.ArrayListUnmanaged(Section),
|
||||
guideSections: std.ArrayListUnmanaged(Section),
|
||||
|
||||
const Call = struct {
|
||||
func: Expr,
|
||||
@ -506,20 +512,6 @@ const DocData = struct {
|
||||
ret: Expr,
|
||||
};
|
||||
|
||||
pub fn jsonStringify(self: DocData, jsw: anytype) !void {
|
||||
try jsw.beginObject();
|
||||
inline for (comptime std.meta.tags(std.meta.FieldEnum(DocData))) |f| {
|
||||
const f_name = @tagName(f);
|
||||
try jsw.objectField(f_name);
|
||||
switch (f) {
|
||||
.files => try writeFileTableToJson(self.files, self.modules, jsw),
|
||||
.guide_sections => try writeGuidesToJson(self.guide_sections, jsw),
|
||||
.modules => try jsw.write(self.modules.values()),
|
||||
else => try jsw.write(@field(self, f_name)),
|
||||
}
|
||||
}
|
||||
try jsw.endObject();
|
||||
}
|
||||
/// All the type "families" as described by `std.builtin.TypeId`
|
||||
/// plus a couple extra that are unique to our use case.
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user