Move debug functions to Parser

This commit is contained in:
Aoran Zeng 2025-07-16 01:52:07 +08:00
parent c3657b44ef
commit a6b0338ee0
No known key found for this signature in database
GPG Key ID: 8F8BA8488E10ED98
2 changed files with 57 additions and 58 deletions

View File

@ -159,17 +159,15 @@ my class Section {
class Parser {
has IO::Path $.input-file is rw;
#| sections
has Section @.sections;
has Section @!sections;
method new($input-file) {
self.bless(
:$input-file,
);
self.bless(:$input-file);
}
# 获取根sectionlevel 0
method root-section() {
return @.sections.first({ $_.level == 0 });
return @!sections.first({ $_.level == 0 });
}
# 配置项所在行 -> 解析为配置项
@ -199,7 +197,7 @@ class Parser {
# 都创建一个 root section (level 0)
my $root-config = Config.new();
$current-section = Section.new("", 0, $root-config);
@.sections.push: $current-section;
@!sections.push: $current-section;
# 开始遍历
my $line-count = 0;
@ -217,7 +215,7 @@ class Parser {
# 准备创建一个新的 section
$rawstr = "";
my $new-section = Section.new($title, $level, Config.new());
@.sections.push: $new-section;
@!sections.push: $new-section;
# 找到合适的父节点
my $parent = self.find-parent-section($level);
@ -262,12 +260,59 @@ class Parser {
}
method find-parent-section($new-level) {
# 从@.sections尾部向前找找到第一个level小于new-level的section作为父节点
for @.sections.reverse -> $section {
# 从@!sections尾部向前找找到第一个level小于new-level的section作为父节点
for @!sections.reverse -> $section {
if $section.level < $new-level {
return $section;
}
}
return Nil; # 没有找到父节点,说明是 root section
}
# 调试方法扁平打印所有sections
method debug-print-sections-flatly() {
say "====== sections ======";
for @!sections.kv -> $i, $section {
my $title = $section.title || "(Root)";
my $has-config = $section.config.keys ?? "" !! "";
my $has-code = $section.codeblock ?? "" !! "";
say " [$i] Level {$section.level}: $title - $has-config, $has-code";
}
}
# 调试方法层级打印sections
method debug-print-sections-hierarchyly() {
say "====== hierarchy ======";
my $indent = 0;
# 嵌套的格式化函数
my sub format-section($section, $level) {
my $prefix = ' ' x $level;
my $title = $section.title // '(Root)';
return "{$prefix}- {$title} (level {$section.level})";
}
# 嵌套的递归打印函数
my sub print-section-tree($section, $level) {
say format-section($section, $level);
if $section.has-children {
for $section.children -> $child {
print-section-tree($child, $level + 1);
}
}
}
my $root = self.root-section();
print-section-tree($root, $indent);
}
# 调试方法:完整的调试信息打印
method debug-print-summary() {
self.debug-print-sections-flatly();
self.debug-print-sections-hierarchyly();
}
}

View File

@ -19,53 +19,7 @@ my $parser2 = Parser::Parser.new($test-file2);
$parser1.parse();
$parser2.parse();
sub print-sections-flatly($parser)
{
say "====== sections ======";
for $parser.sections.kv -> $i, $section {
my $title = $section.title || "(Root)";
my $has-config = $section.config.keys ?? "" !! "";
my $has-code = $section.codeblock ?? "" !! "";
say " [$i] Level {$section.level}: $title - $has-config, $has-code";
}
}
sub print-sections-hierarchyly($parser) {
say "====== hierarchy ======";
my $indent = 0;
sub format-section($section, $level) {
my $prefix = ' ' x $level;
my $title = $section.title // '(Root)';
return "{$prefix}- {$title} (level {$section.level})";
}
sub print-section-tree($section, $level) {
say format-section($section, $level);
if $section.has-children {
for $section.children -> $child {
print-section-tree($child, $level + 1);
}
}
}
my $root = $parser.root-section();
print-section-tree($root, $indent);
}
sub print-parser-summary($parser) {
print-sections-flatly($parser);
print-sections-hierarchyly($parser);
}
# 测试两个文件
print-parser-summary($parser1);
say "\n\n";
print-parser-summary($parser2);
$parser1.debug-print-summary();
say "";
$parser2.debug-print-summary();