Skip to content

Commit c1a85ee

Browse files
committed
refactor: 优化 NodeDisplay 和 NodeRefDisplay 的格式化逻辑,清理冗余代码
1 parent d88ed0b commit c1a85ee

File tree

1 file changed

+50
-45
lines changed

1 file changed

+50
-45
lines changed

fdt-edit/src/node/display.rs

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use core::fmt;
33
use alloc::vec::Vec;
44

55
use crate::{
6-
ClockType, Node, NodeKind, NodeMut, NodeRef, NodeRefClock, NodeRefInterruptController, NodeRefMemory,
7-
Property,
6+
ClockType, Node, NodeKind, NodeMut, NodeRef, NodeRefClock, NodeRefInterruptController,
7+
NodeRefMemory, Property,
88
};
99

1010
/// Node 的 DTS 显示格式化器
@@ -47,16 +47,6 @@ impl<'a> NodeDisplay<'a> {
4747
Ok(())
4848
}
4949

50-
fn format_node_name(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
51-
write!(f, "{}", self.node.name)?;
52-
53-
// 如果节点名为空(根节点),输出为 /
54-
if self.node.name.is_empty() {
55-
write!(f, "/")?;
56-
}
57-
Ok(())
58-
}
59-
6050
fn format_property(&self, prop: &Property, f: &mut fmt::Formatter<'_>) -> fmt::Result {
6151
self.format_indent(f)?;
6252
match prop.name() {
@@ -76,8 +66,12 @@ impl<'a> NodeDisplay<'a> {
7666
write!(f, "{} = ", prop.name())?;
7767
self.format_string_list(prop, f)?;
7868
}
79-
"interrupt-controller" | "#address-cells" | "#size-cells" | "#interrupt-cells"
80-
| "#clock-cells" | "phandle" => {
69+
"interrupt-controller"
70+
| "#address-cells"
71+
| "#size-cells"
72+
| "#interrupt-cells"
73+
| "#clock-cells"
74+
| "phandle" => {
8175
write!(f, "{};", prop.name())?;
8276
}
8377
_ => {
@@ -96,7 +90,7 @@ impl<'a> NodeDisplay<'a> {
9690
// 获取 parent 的 address-cells 和 size-cells
9791
// 这里需要从上下文获取,暂时使用默认值
9892
let address_cells = 2; // 默认值
99-
let size_cells = 1; // 默认值
93+
let size_cells = 1; // 默认值
10094

10195
while let (Some(addr), Some(size)) = (
10296
reader.read_cells(address_cells),
@@ -203,13 +197,8 @@ impl<'a> fmt::Display for NodeDisplay<'a> {
203197
}
204198

205199
// 关闭节点
206-
if !self.node.name.is_empty() || !self.node.children.is_empty() {
207-
self.format_indent(f)?;
208-
writeln!(f, "}};")?;
209-
} else {
210-
self.format_indent(f)?;
211-
writeln!(f, "}};")?;
212-
}
200+
self.format_indent(f)?;
201+
writeln!(f, "}};")?;
213202

214203
Ok(())
215204
}
@@ -302,8 +291,13 @@ impl<'a> NodeRefDisplay<'a> {
302291
if !regions.is_empty() {
303292
write!(f, " ({} regions)", regions.len())?;
304293
for (i, region) in regions.iter().take(3).enumerate() {
305-
write!(f, "\n [{}]: 0x{:x}-0x{:x}",
306-
i, region.address, region.address + region.size)?;
294+
write!(
295+
f,
296+
"\n [{}]: 0x{:x}-0x{:x}",
297+
i,
298+
region.address,
299+
region.address + region.size
300+
)?;
307301
}
308302
}
309303
if let Some(dt) = mem.device_type() {
@@ -327,11 +321,10 @@ impl<'a> fmt::Display for NodeRefDisplay<'a> {
327321
if self.show_details {
328322
write!(f, "{}: ", self.node_ref.name())?;
329323
self.format_type_info(f)?;
330-
write!(f, "\n")?;
324+
writeln!(f)?;
331325

332326
// 添加缩进并显示 DTS
333-
let dts_display = NodeDisplay::new(self.node_ref)
334-
.indent(self.indent + 1);
327+
let dts_display = NodeDisplay::new(self.node_ref).indent(self.indent + 1);
335328
write!(f, "{}", dts_display)?;
336329
} else {
337330
write!(f, "{}", self.node_ref.name())?;
@@ -353,13 +346,16 @@ impl fmt::Debug for NodeRef<'_> {
353346
f.debug_struct("NodeRef")
354347
.field("name", &self.name())
355348
.field("path", &self.path())
356-
.field("node_type", &match self.as_ref() {
357-
NodeKind::Clock(_) => "Clock",
358-
NodeKind::Pci(_) => "PCI",
359-
NodeKind::InterruptController(_) => "InterruptController",
360-
NodeKind::Memory(_) => "Memory",
361-
NodeKind::Generic(_) => "Generic",
362-
})
349+
.field(
350+
"node_type",
351+
&match self.as_ref() {
352+
NodeKind::Clock(_) => "Clock",
353+
NodeKind::Pci(_) => "PCI",
354+
NodeKind::InterruptController(_) => "InterruptController",
355+
NodeKind::Memory(_) => "Memory",
356+
NodeKind::Generic(_) => "Generic",
357+
},
358+
)
363359
.field("phandle", &self.phandle())
364360
.finish()
365361
}
@@ -429,7 +425,7 @@ impl fmt::Display for NodeMut<'_> {
429425
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
430426
match self {
431427
NodeMut::Gerneric(generic) => {
432-
let display = NodeDisplay::new(&generic.node);
428+
let display = NodeDisplay::new(generic.node);
433429
write!(f, "{}", display)
434430
}
435431
}
@@ -439,16 +435,25 @@ impl fmt::Display for NodeMut<'_> {
439435
impl fmt::Debug for NodeMut<'_> {
440436
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
441437
f.debug_struct("NodeMut")
442-
.field("name", &match self {
443-
NodeMut::Gerneric(generic) => generic.node.name(),
444-
})
438+
.field(
439+
"name",
440+
&match self {
441+
NodeMut::Gerneric(generic) => generic.node.name(),
442+
},
443+
)
445444
.field("node_type", &"Generic")
446-
.field("children_count", &match self {
447-
NodeMut::Gerneric(generic) => generic.node.children.len(),
448-
})
449-
.field("properties_count", &match self {
450-
NodeMut::Gerneric(generic) => generic.node.properties.len(),
451-
})
445+
.field(
446+
"children_count",
447+
&match self {
448+
NodeMut::Gerneric(generic) => generic.node.children.len(),
449+
},
450+
)
451+
.field(
452+
"properties_count",
453+
&match self {
454+
NodeMut::Gerneric(generic) => generic.node.properties.len(),
455+
},
456+
)
452457
.finish()
453458
}
454-
}
459+
}

0 commit comments

Comments
 (0)