🎨 feat: EguiBox GUI開発基盤完成 + パーサー無限ループバグ修正

## 🚀 主要機能追加
### EguiBox - GUI開発基盤
- Windows版GUIメモ帳アプリ (simple_notepad.rs, nyash_notepad_jp.rs)
- 日本語フォント対応 (NotoSansJP-VariableFont_wght.ttf)
- BMPアイコン表示システム (c_drive_icon.bmp)
- Windowsエクスプローラー風アプリ (nyash_explorer.rs)
- アイコン抽出システム (test_icon_extraction.rs)

### ビジュアルプログラミング準備
- NyashFlow プロジェクト設計完成 (NYASHFLOW_PROJECT_HANDOVER.md)
- ビジュアルノードプロトタイプ基盤
- WebAssembly対応準備

## 🔧 重大バグ修正
### パーサー無限ループ問題 (3引数メソッド呼び出し)
- 原因: メソッドパラメータ解析ループの予約語処理不備
- 修正: src/parser/mod.rs - 非IDENTIFIERトークンのエラーハンドリング追加
- 効果: "from"等の予約語で適切なエラー報告、ハング→瞬時エラー

### MapBoxハング問題調査
- MapBox+3引数メソッド呼び出し組み合わせ問題特定
- バグレポート作成 (MAPBOX_HANG_BUG_REPORT.md)
- 事前評価vs必要時評価の設計問題明確化

## 🧹 コード品質向上
- box_methods.rs を8モジュールに機能分離
- 一時デバッグコード全削除 (eprintln\!, unsafe等)
- 構文チェック通過確認済み

## 📝 ドキュメント整備
- CLAUDE.md にGUI開発セクション追加
- Gemini/ChatGPT先生相談ログ保存 (sessions/)
- 段階的デバッグ手法確立

## 🎯 次の目標
- must_advance\!マクロ実装 (無限ループ早期検出)
- コマンド引数でデバッグ制御 (--debug-fuel)
- MapBox問題の根本修正

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm
2025-08-10 07:54:03 +09:00
parent a4d32b3c57
commit e7f6666917
92 changed files with 8206 additions and 78 deletions

86
examples/debug_notepad.rs Normal file
View File

@ -0,0 +1,86 @@
// Debug version to check input issues
use eframe::egui;
fn main() -> eframe::Result {
env_logger::init(); // Enable logging
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default()
.with_inner_size([640.0, 480.0])
.with_title("Debug Notepad"),
..Default::default()
};
eframe::run_native(
"Debug Notepad",
options,
Box::new(|_cc| Ok(Box::new(DebugApp::default()))),
)
}
#[derive(Default)]
struct DebugApp {
text: String,
single_line: String,
event_log: Vec<String>,
}
impl eframe::App for DebugApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| {
ui.heading("Debug Text Input Test");
// Single line input
ui.horizontal(|ui| {
ui.label("Single Line:");
let response = ui.text_edit_singleline(&mut self.single_line);
if response.changed() {
self.event_log.push(format!("Single line changed: '{}'", self.single_line));
}
});
ui.separator();
// Multi line input
ui.label("Multi Line:");
let response = ui.add(
egui::TextEdit::multiline(&mut self.text)
.desired_width(f32::INFINITY)
.desired_rows(10)
);
if response.changed() {
self.event_log.push(format!("Multi line changed: {} chars", self.text.len()));
}
ui.separator();
// Show input events
ui.label("Event Log:");
egui::ScrollArea::vertical()
.max_height(100.0)
.show(ui, |ui| {
for event in &self.event_log {
ui.label(event);
}
});
// Debug info
ui.separator();
ui.label(format!("Text length: {}", self.text.len()));
ui.label(format!("Single line length: {}", self.single_line.len()));
// Test buttons
if ui.button("Add Test Text").clicked() {
self.text.push_str("Test ");
self.event_log.push("Button: Added test text".to_string());
}
if ui.button("Clear All").clicked() {
self.text.clear();
self.single_line.clear();
self.event_log.push("Button: Cleared all".to_string());
}
});
}
}