refactor: Phase 2-A match_expr.rsのskip_newlines削除完了
♻️ skip_newlines()の段階的削除を継続 - match式内の6箇所を削除(41→35箇所、15%削減) - brace_depth > 0により自動改行処理が有効 - 削減計画ドキュメントを作成 📊 進捗状況 - Phase 1: 48→40箇所 ✅ - Phase 2-A: 40→35箇所 ✅ - 次: Phase 2-B(fields.rs等のBox宣言系) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
106
docs/development/strategies/skip-newlines-removal-plan.md
Normal file
106
docs/development/strategies/skip-newlines-removal-plan.md
Normal file
@ -0,0 +1,106 @@
|
||||
# skip_newlines() 段階的削除計画
|
||||
|
||||
## 📊 現状分析(2025-09-24)
|
||||
|
||||
### 削減実績
|
||||
- **初期**: 48箇所
|
||||
- **Phase 1完了**: 40箇所(17%削減)
|
||||
- **削除済み**: primary.rsのオブジェクトリテラル内8箇所
|
||||
|
||||
### 残存箇所(41箇所)
|
||||
```
|
||||
common.rs: 1
|
||||
statements.rs: 4
|
||||
match_expr.rs: 6
|
||||
primary.rs: 1
|
||||
box_definition.rs: 3
|
||||
static_box.rs: 2
|
||||
header.rs: 2
|
||||
interface.rs: 3
|
||||
postfix.rs: 2
|
||||
fields.rs: 9(最多)
|
||||
properties.rs: 1
|
||||
constructors.rs: 2
|
||||
parser_enhanced.rs: 4(実験的)
|
||||
nyash_parser_v2.rs: 1(実験的)
|
||||
```
|
||||
|
||||
## 🎯 削除戦略
|
||||
|
||||
### Phase 2-A: 簡単な括弧内削除(即座に可能)
|
||||
**対象**: 明らかに括弧内にあるskip_newlines()
|
||||
- `match_expr.rs`: match式内(brace_depth > 0)の6箇所
|
||||
- `primary.rs`: 残り1箇所(ブロック内)
|
||||
- **予想削減**: 7箇所(41→34)
|
||||
|
||||
### Phase 2-B: Box宣言系(中難度)
|
||||
**対象**: Box定義内の改行処理
|
||||
- `fields.rs`: 9箇所(フィールド宣言)
|
||||
- `box_definition.rs`: 3箇所
|
||||
- `static_box.rs`: 2箇所
|
||||
- **課題**: フィールド区切りの判定が必要
|
||||
- **予想削減**: 14箇所(34→20)
|
||||
|
||||
### Phase 2-C: 文処理系(高難度)
|
||||
**対象**: 文の区切り判定に関わる部分
|
||||
- `statements.rs`: 4箇所
|
||||
- `header.rs`: 2箇所
|
||||
- `interface.rs`: 3箇所
|
||||
- **課題**: 文区切りと行継続の判定が複雑
|
||||
- **予想削減**: 9箇所(20→11)
|
||||
|
||||
### Phase 2-D: メンバー宣言系(最高難度)
|
||||
**対象**: Boxメンバーの宣言
|
||||
- `constructors.rs`: 2箇所
|
||||
- `properties.rs`: 1箇所
|
||||
- `postfix.rs`: 2箇所
|
||||
- **課題**: 複雑な構文の境界判定
|
||||
- **予想削減**: 5箇所(11→6)
|
||||
|
||||
### Phase 2-E: 共通関数(最終段階)
|
||||
**対象**: ParserUtilsの共通関数
|
||||
- `common.rs`: 1箇所(skip_newlines_internal)
|
||||
- **課題**: 全削除後に関数自体を削除
|
||||
- **予想削減**: 1箇所(6→5)
|
||||
|
||||
### 実験的ファイル(除外)
|
||||
- `parser_enhanced.rs`: 4箇所
|
||||
- `nyash_parser_v2.rs`: 1箇所
|
||||
これらは実験的実装のため削除対象外
|
||||
|
||||
## 📈 削減ロードマップ
|
||||
|
||||
```
|
||||
Phase 1: 48 → 40 (8削除) ✅ 完了
|
||||
Phase 2-A: 40 → 33 (7削除) 🚀 次のタスク
|
||||
Phase 2-B: 33 → 19 (14削除)
|
||||
Phase 2-C: 19 → 10 (9削除)
|
||||
Phase 2-D: 10 → 5 (5削除)
|
||||
Phase 2-E: 5 → 0 (5削除)※実験ファイル除く
|
||||
```
|
||||
|
||||
## 🔧 実装方針
|
||||
|
||||
### 削除前のチェックリスト
|
||||
1. ✅ 深度追跡が有効な箇所か確認
|
||||
2. ✅ テストケースの準備
|
||||
3. ✅ 削除後の動作確認
|
||||
4. ✅ コミット単位を小さく保つ
|
||||
|
||||
### 削除時の置き換えルール
|
||||
- **括弧内**: 単純削除(深度追跡で自動処理)
|
||||
- **演算子後**: 単純削除(行継続判定で自動処理)
|
||||
- **文区切り**: TokenCursorモード切り替えで対応
|
||||
- **その他**: 個別判断
|
||||
|
||||
## 🎯 最終目標
|
||||
|
||||
1. **実用コードからskip_newlines()完全排除**
|
||||
2. **TokenCursorによる統一的な改行処理**
|
||||
3. **コード品質とメンテナンス性の向上**
|
||||
|
||||
## 📝 次のアクション
|
||||
|
||||
1. Phase 2-A: match_expr.rsの6箇所削除
|
||||
2. テスト実行と動作確認
|
||||
3. 段階的にPhase 2-B以降を実施
|
||||
@ -24,10 +24,10 @@ impl NyashParser {
|
||||
let mut default_expr: Option<ASTNode> = None;
|
||||
|
||||
while !self.match_token(&TokenType::RBRACE) && !self.is_at_end() {
|
||||
self.skip_newlines();
|
||||
// skip_newlines削除: brace_depth > 0なので自動スキップ
|
||||
while self.match_token(&TokenType::COMMA) || self.match_token(&TokenType::NEWLINE) {
|
||||
self.advance();
|
||||
self.skip_newlines();
|
||||
// skip_newlines削除: brace_depth > 0なので自動スキップ
|
||||
}
|
||||
if self.match_token(&TokenType::RBRACE) {
|
||||
break;
|
||||
@ -56,7 +56,7 @@ impl NyashParser {
|
||||
self.advance(); // consume '{'
|
||||
let mut stmts: Vec<ASTNode> = Vec::new();
|
||||
while !self.match_token(&TokenType::RBRACE) && !self.is_at_end() {
|
||||
self.skip_newlines();
|
||||
// skip_newlines削除: brace_depth > 0なので自動スキップ
|
||||
if !self.match_token(&TokenType::RBRACE) {
|
||||
stmts.push(self.parse_statement()?);
|
||||
}
|
||||
@ -116,7 +116,7 @@ impl NyashParser {
|
||||
self.advance(); // consume '{'
|
||||
let mut stmts: Vec<ASTNode> = Vec::new();
|
||||
while !self.match_token(&TokenType::RBRACE) && !self.is_at_end() {
|
||||
self.skip_newlines();
|
||||
// skip_newlines削除: brace_depth > 0なので自動スキップ
|
||||
if !self.match_token(&TokenType::RBRACE) {
|
||||
let st = self.parse_statement()?;
|
||||
stmts.push(st);
|
||||
@ -161,7 +161,7 @@ impl NyashParser {
|
||||
self.advance(); // consume '{'
|
||||
let mut stmts: Vec<ASTNode> = Vec::new();
|
||||
while !self.match_token(&TokenType::RBRACE) && !self.is_at_end() {
|
||||
self.skip_newlines();
|
||||
// skip_newlines削除: brace_depth > 0なので自動スキップ
|
||||
if !self.match_token(&TokenType::RBRACE) {
|
||||
let st = self.parse_statement()?;
|
||||
stmts.push(st);
|
||||
@ -182,7 +182,7 @@ impl NyashParser {
|
||||
while self.match_token(&TokenType::COMMA) || self.match_token(&TokenType::NEWLINE) {
|
||||
self.advance();
|
||||
}
|
||||
self.skip_newlines();
|
||||
// skip_newlines削除: brace_depth > 0なので自動スキップ
|
||||
}
|
||||
|
||||
self.consume(TokenType::RBRACE)?;
|
||||
|
||||
Reference in New Issue
Block a user