feat: 改行処理Phase 1 Smart advance完全実装 - 深度追跡でskip_newlines削減開始

 Smart advance()による自動改行処理を実装
- depth_tracking.rsで括弧深度(paren/brace/bracket)を自動管理
- 括弧内では改行を自動スキップ、演算子後の行継続も自動判定
- デフォルトで有効化(NYASH_SMART_ADVANCE=0で無効化可能)

♻️ skip_newlines()の段階的削除を開始
- primary.rsのオブジェクトリテラル内8箇所を削除(48→40箇所、17%削減)
- 深度追跡により手動skip_newlines()が不要に

🧪 テスト結果
- 文区切り、演算子行継続、括弧内改行、次行演算子すべて成功

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Selfhosting Dev
2025-09-23 10:59:51 +09:00
parent 0012f65f0a
commit 5eb23f9b4c
5 changed files with 226 additions and 45 deletions

View File

@ -47,9 +47,9 @@ impl NyashParser {
let ident_key_on = std::env::var("NYASH_ENABLE_MAP_IDENT_KEY").ok().as_deref()
== Some("1")
|| sugar_level.as_deref() != Some("basic"); // basic以外は全て許可デフォルト含む
self.skip_newlines();
// skip_newlines削除: brace_depth > 0なので自動スキップされる
while !self.match_token(&TokenType::RBRACE) && !self.is_at_end() {
self.skip_newlines();
// skip_newlines削除: brace_depth > 0なので自動スキップされる
let key = match &self.current_token().token_type {
TokenType::STRING(s) => {
let v = s.clone();
@ -74,18 +74,18 @@ impl NyashParser {
});
}
};
self.skip_newlines(); // Phase 0 Quick Fix: COLON前に改行スキップ
// skip_newlines削除: brace_depth > 0なので自動スキップされる
self.consume(TokenType::COLON)?;
self.skip_newlines(); // Phase 0 Quick Fix: 値パース前に改行スキップ
// skip_newlines削除: brace_depth > 0なので自動スキップされる
let value_expr = self.parse_expression()?;
entries.push((key, value_expr));
self.skip_newlines(); // Phase 0 Quick Fix: COMMA判定前に改行スキップ
// skip_newlines削除: brace_depth > 0なので自動スキップされる
if self.match_token(&TokenType::COMMA) {
self.advance();
self.skip_newlines();
// skip_newlines削除: brace_depth > 0なので自動スキップされる
}
}
self.skip_newlines();
// skip_newlines削除: brace_depth > 0なので自動スキップされる
self.consume(TokenType::RBRACE)?;
Ok(ASTNode::MapLiteral {
entries,