| ... | @@ -617,12 +617,15 @@ pub const Decl = struct { | ... | @@ -617,12 +617,15 @@ pub const Decl = struct { |
| 617 | return tree.tokens.items(.start)[decl.srcToken()]; | 617 | return tree.tokens.items(.start)[decl.srcToken()]; |
| 618 | } | 618 | } |
| 619 | | 619 | |
| 620 | pub fn renderFullyQualifiedName(decl: Decl, writer: anytype) !void { | 620 | pub fn renderFullyQualifiedName(decl: *const Decl, writer: anytype) @TypeOf(writer).Error!void { |
| 621 | const unqualified_name = mem.spanZ(decl.name); | 621 | // Namespace decls (struct/enum/union/opaque) use their own namespace, |
| 622 | return decl.namespace.renderFullyQualifiedName(unqualified_name, writer); | 622 | // which means the decl name and the namespace name are the same. |
| | 623 | // In that case we want to omit the decl name, unless this is the root decl. |
| | 624 | const unqualified_name = if (decl.namespace.getDecl() != decl or decl.namespace.parent == null) mem.spanZ(decl.name) else ""; |
| | 625 | return try decl.namespace.renderFullyQualifiedName(unqualified_name, writer); |
| 623 | } | 626 | } |
| 624 | | 627 | |
| 625 | pub fn getFullyQualifiedName(decl: Decl, gpa: *Allocator) ![:0]u8 { | 628 | pub fn getFullyQualifiedName(decl: *const Decl, gpa: *Allocator) ![:0]u8 { |
| 626 | var buffer = std.ArrayList(u8).init(gpa); | 629 | var buffer = std.ArrayList(u8).init(gpa); |
| 627 | defer buffer.deinit(); | 630 | defer buffer.deinit(); |
| 628 | try decl.renderFullyQualifiedName(buffer.writer()); | 631 | try decl.renderFullyQualifiedName(buffer.writer()); |