| author | |
| committer | |
| log | ae69dfe6e739b1b2d4ae76923d04bc69c23b07fa |
| tree | 147f9c10092ccd193fe2e8e0de72e2fccda2f0c8 |
| parent | 31a2b8c3642f1240a70d78203d568051d4dbcd3f |
| signature |
2 files changed, 82 insertions(+), 13 deletions(-)
lib/docs/main.js+47-7| ... | ... | @@ -2250,12 +2250,49 @@ var zigAnalysis; |
| 2250 | 2250 | } |
| 2251 | 2251 | |
| 2252 | 2252 | function renderVar(decl) { |
| 2253 | let declTypeRef = typeOfDecl(decl); | |
| 2254 | domFnProtoCode.innerHTML = | |
| 2255 | '<span class="tok-kw">var</span> ' + | |
| 2256 | escapeHtml(decl.name) + | |
| 2257 | ": " + | |
| 2258 | typeValueName(declTypeRef, true, true); | |
| 2253 | let resolvedVar = resolveValue(decl.value); | |
| 2254 | ||
| 2255 | if (resolvedVar.expr.fieldRef) { | |
| 2256 | const declRef = decl.value.expr.refPath[0].declRef; | |
| 2257 | const type = getDecl(declRef); | |
| 2258 | domFnProtoCode.innerHTML = | |
| 2259 | '<span class="tok-kw">var</span> ' + | |
| 2260 | escapeHtml(decl.name) + | |
| 2261 | ": " + | |
| 2262 | type.name + | |
| 2263 | " = " + | |
| 2264 | exprName(decl.value.expr, { wantHtml: true, wantLink: true }) + | |
| 2265 | ";"; | |
| 2266 | } else if ( | |
| 2267 | resolvedVar.expr.string !== undefined || | |
| 2268 | resolvedVar.expr.call !== undefined || | |
| 2269 | resolvedVar.expr.comptimeExpr | |
| 2270 | ) { | |
| 2271 | domFnProtoCode.innerHTML = | |
| 2272 | '<span class="tok-kw">var</span> ' + | |
| 2273 | escapeHtml(decl.name) + | |
| 2274 | ": " + | |
| 2275 | exprName(resolvedVar.expr, { wantHtml: true, wantLink: true }) + | |
| 2276 | " = " + | |
| 2277 | exprName(decl.value.expr, { wantHtml: true, wantLink: true }) + | |
| 2278 | ";"; | |
| 2279 | } else if (resolvedVar.expr.compileError) { | |
| 2280 | domFnProtoCode.innerHTML = | |
| 2281 | '<span class="tok-kw">var</span> ' + | |
| 2282 | escapeHtml(decl.name) + | |
| 2283 | " = " + | |
| 2284 | exprName(decl.value.expr, { wantHtml: true, wantLink: true }) + | |
| 2285 | ";"; | |
| 2286 | } else { | |
| 2287 | domFnProtoCode.innerHTML = | |
| 2288 | '<span class="tok-kw">var</span> ' + | |
| 2289 | escapeHtml(decl.name) + | |
| 2290 | ": " + | |
| 2291 | exprName(resolvedVar.typeRef, { wantHtml: true, wantLink: true }) + | |
| 2292 | " = " + | |
| 2293 | exprName(decl.value.expr, { wantHtml: true, wantLink: true }) + | |
| 2294 | ";"; | |
| 2295 | } | |
| 2259 | 2296 | |
| 2260 | 2297 | let docs = getAstNode(decl.src).docs; |
| 2261 | 2298 | if (docs != null) { |
| ... | ... | @@ -2546,7 +2583,10 @@ var zigAnalysis; |
| 2546 | 2583 | tdNameA.setAttribute("href", navLinkDecl(decl.name)); |
| 2547 | 2584 | tdNameA.textContent = decl.name; |
| 2548 | 2585 | |
| 2549 | tdType.innerHTML = typeValueName(typeOfDecl(decl), true, true); | |
| 2586 | tdType.innerHTML = exprName(walkResultTypeRef(decl.value), { | |
| 2587 | wantHtml: true, | |
| 2588 | wantLink: true, | |
| 2589 | }); | |
| 2550 | 2590 | |
| 2551 | 2591 | let docs = getAstNode(decl.src).docs; |
| 2552 | 2592 | if (docs != null) { |
src/Autodoc.zig+35-6| ... | ... | @@ -2506,16 +2506,25 @@ fn walkInstruction( |
| 2506 | 2506 | }; |
| 2507 | 2507 | }, |
| 2508 | 2508 | .variable => { |
| 2509 | const extra = file.zir.extraData(Zir.Inst.ExtendedVar, extended.operand); | |
| 2510 | ||
| 2509 | 2511 | const small = @bitCast(Zir.Inst.ExtendedVar.Small, extended.small); |
| 2510 | var extra_index: usize = extended.operand; | |
| 2512 | var extra_index: usize = extra.end; | |
| 2511 | 2513 | if (small.has_lib_name) extra_index += 1; |
| 2512 | 2514 | if (small.has_align) extra_index += 1; |
| 2513 | 2515 | |
| 2514 | const value: DocData.WalkResult = if (small.has_init) .{ | |
| 2515 | .expr = .{ .void = .{} }, | |
| 2516 | } else .{ | |
| 2517 | .expr = .{ .void = .{} }, | |
| 2516 | const var_type = try self.walkRef(file, parent_scope, parent_src, extra.data.var_type, need_type); | |
| 2517 | ||
| 2518 | var value: DocData.WalkResult = .{ | |
| 2519 | .typeRef = var_type.expr, | |
| 2520 | .expr = .{ .undefined = .{} }, | |
| 2518 | 2521 | }; |
| 2522 | ||
| 2523 | if (small.has_init) { | |
| 2524 | const var_init_ref = @intToEnum(Ref, file.zir.extra[extra_index]); | |
| 2525 | const var_init = try self.walkRef(file, parent_scope, parent_src, var_init_ref, need_type); | |
| 2526 | value.expr = var_init.expr; | |
| 2527 | } | |
| 2519 | 2528 | |
| 2520 | 2529 | return value; |
| 2521 | 2530 | }, |
| ... | ... | @@ -3213,13 +3222,15 @@ fn walkDecls( |
| 3213 | 3222 | // .declRef => |d| .{ .declRef = d }, |
| 3214 | 3223 | // }; |
| 3215 | 3224 | |
| 3225 | const kind: []const u8 = if (try self.declIsVar(file, value_pl_node.src_node, parent_src)) "var" else "const"; | |
| 3226 | ||
| 3216 | 3227 | self.decls.items[decls_slot_index] = .{ |
| 3217 | 3228 | ._analyzed = true, |
| 3218 | 3229 | .name = name, |
| 3219 | 3230 | .src = ast_node_index, |
| 3220 | 3231 | //.typeRef = decl_type_ref, |
| 3221 | 3232 | .value = walk_result, |
| 3222 | .kind = "const", // find where this information can be found | |
| 3233 | .kind = kind, | |
| 3223 | 3234 | }; |
| 3224 | 3235 | |
| 3225 | 3236 | // Unblock any pending decl path that was waiting for this decl. |
| ... | ... | @@ -4383,3 +4394,21 @@ fn srcLocInfo( |
| 4383 | 4394 | .src_node = sn, |
| 4384 | 4395 | }; |
| 4385 | 4396 | } |
| 4397 | ||
| 4398 | fn declIsVar( | |
| 4399 | self: Autodoc, | |
| 4400 | file: *File, | |
| 4401 | src_node: i32, | |
| 4402 | parent_src: SrcLocInfo, | |
| 4403 | ) !bool { | |
| 4404 | const sn = @intCast(u32, @intCast(i32, parent_src.src_node) + src_node); | |
| 4405 | const tree = try file.getTree(self.module.gpa); | |
| 4406 | const node_idx = @bitCast(Ast.Node.Index, sn); | |
| 4407 | const tokens = tree.nodes.items(.main_token); | |
| 4408 | const tags = tree.tokens.items(.tag); | |
| 4409 | ||
| 4410 | const tok_idx = tokens[node_idx]; | |
| 4411 | ||
| 4412 | // tags[tok_idx] is the token called 'mut token' in AstGen | |
| 4413 | return (tags[tok_idx] == .keyword_var); | |
| 4414 | } |