From d15a71afc95f148966be2f5fd9f66b8396e8293d Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 10 Oct 2019 15:42:40 -0400 Subject: [PATCH] generated docs: clean up type names and param names closes #3410 --- lib/std/special/docs/main.js | 44 +++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/lib/std/special/docs/main.js b/lib/std/special/docs/main.js index 4c8fd389f7..7e5a9c4c0e 100644 --- a/lib/std/special/docs/main.js +++ b/lib/std/special/docs/main.js @@ -43,6 +43,7 @@ var typeKinds = indexTypeKinds(); var typeTypeId = findTypeTypeId(); + var pointerSizeEnum = { One: 0, Many: 1, Slice: 2, C: 3 }; // for each package, is an array with packages to get to this one var canonPkgPaths = computeCanonicalPackagePaths(); @@ -378,21 +379,38 @@ function typeIndexName(typeIndex, wantHtml, wantLink, fnDecl, linkFnNameDecl) { var typeObj = zigAnalysis.types[typeIndex]; + var declNameOk = declCanRepresentTypeKind(typeObj.kind); if (wantLink) { var declIndex = getCanonTypeDecl(typeIndex); var declPath = getCanonDeclPath(declIndex); - var haveLink = declPath != null; - var typeNameHtml = typeName(typeObj, true, !haveLink, fnDecl, linkFnNameDecl); - if (haveLink) { - return '' + typeNameHtml + ''; + if (declPath == null) { + return typeName(typeObj, wantHtml, wantLink, fnDecl, linkFnNameDecl); + } + var name = (wantLink && declCanRepresentTypeKind(typeObj.kind)) ? + declPath.declNames[declPath.declNames.length - 1] : + typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl); + if (wantLink && wantHtml) { + return '' + name + ''; } else { - return typeNameHtml; + return name; } } else { return typeName(typeObj, wantHtml, false, fnDecl, linkFnNameDecl); } } + function shouldSkipParamName(typeIndex, paramName) { + var typeObj = zigAnalysis.types[typeIndex]; + if (typeObj.kind === typeKinds.Pointer && getPtrSize(typeObj) === pointerSizeEnum.One) { + typeIndex = typeObj.elem; + } + return typeIndexName(typeIndex, false, true).toLowerCase() === paramName; + } + + function getPtrSize(typeObj) { + return (typeObj.len == null) ? pointerSizeEnum.One : typeObj.len; + } + function typeName(typeObj, wantHtml, wantSubLink, fnDecl, linkFnNameDecl) { switch (typeObj.kind) { case typeKinds.Array: @@ -408,17 +426,17 @@ case typeKinds.Pointer: var name = ""; switch (typeObj.len) { - case 0: + case pointerSizeEnum.One: default: name += "*"; break; - case 1: + case pointerSizeEnum.Many: name += "[*]"; break; - case 2: + case pointerSizeEnum.Slice: name += "[]"; break; - case 3: + case pointerSizeEnum.C: name += "[*c]"; break; } @@ -562,16 +580,20 @@ payloadHtml += ', '; } + var argTypeIndex = typeObj.args[i]; + if (fnDecl != null && zigAnalysis.astNodes[fnDecl.src].fields != null) { var paramDeclIndex = zigAnalysis.astNodes[fnDecl.src].fields[i]; var paramName = zigAnalysis.astNodes[paramDeclIndex].name; if (paramName != null) { - payloadHtml += paramName + ': '; + // skip if it matches the type name + if (argTypeIndex == null || !shouldSkipParamName(argTypeIndex, paramName)) { + payloadHtml += paramName + ': '; + } } } - var argTypeIndex = typeObj.args[i]; if (argTypeIndex != null) { payloadHtml += typeIndexName(argTypeIndex, wantHtml, wantSubLink); } else if (wantHtml) {