Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion dev-note/plans/2026-06-12-milestone.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@
_find_unused_min_counter_value と FORCE 関連コメントは §3.5 の
設計判断用に意図的に残置。conftest スタブも 31 行縮小
(_Operator + _Object/_PoseBone/_EditBone/_Node = 結合が減った証明)
- [ ] ID 型ターゲットのパラメータ化(550行 → 60行)— 構造変更のため別 PR
- [x] ID 型ターゲットのパラメータ化(550行 → 60行)— 2026-06-13 発注 #3 で完了
**設計時に併せて検討(発注者の意図、2026-06-13 確認)**: ターゲット登録の
自動化のロマン。旧 `_initialize_defaults`(PR #5 で削除、939c5a9 に履歴)は
inspect スキャン+issubclass 方式でリロードに敗北した(ポストモーテムの
Expand All @@ -125,6 +125,19 @@
前例あり。リロード時は再 import で自然に再登録され、既存の __name__ 重複排除と
共生する)。ただし import 副作用とテスト隔離のコストがあるため、まず
パラメータ化で登録が宣言的テーブルに畳まれた景色を見てから判断する
**実績(2026-06-13)**: 同一クラスタ10ファイル600行 →
`targets/id_datablock.py` 178行(共通基底 `IDDatablockTarget` ~68行 +
宣言テーブル=属性6個だけの class 文10連)+ material.py 互換シム 11行。
targets/ 全体で -413行。設計は判定パネル(リロード安全性/可読性の2視点)で
ファクトリ案・globals 注入案と比較のうえ「基底+単一モジュール統合」を採用
(共通基底がメソッド3つを吸収すると class 文も属性6行になり、ファクトリの
行数優位が消えて名前文字列の二重化と grep 不能化だけが残るため)。
型判定三重化は基底の can_create_from_scope 1箇所に収束(create_from_scope は
委譲)。object / collection は IDDatablockTarget を継承しつつスコープ判定
2メソッドのみ独自実装を保持。レジストリの3インデックスは実機ダンプで
リファクタ前後 byte 同一を確認。**自動登録の景色はこれで見える状態になった** —
採否判断は id_datablock.py の宣言テーブルと targets/__init__.py の
明示リストを見比べて行えばよい
- [x] position_element.py の register_element 遅延 import 化
(text_element と同方式に統一。要素層→target 層のモジュールレベル結合が解消)
- [x] ロガー修復(強制 WARNING 上書きの除去)。実機プローブで
Expand Down
42 changes: 21 additions & 21 deletions src/structured_renamer/targets/__init__.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,33 @@
"""
Rename Targets - リネーム対象の具体的実装

Phase 1: 基本的な3Dデータ (Object, Mesh, Material, Armature)
Phase 2: アニメーション/ライティング (Action, Camera, Light, Curve)
Phase 3: アセット管理 (Image, Texture, Collection, Scene)
Special: 特殊なデータタイプ (ShapeKey など)
- ID 型データブロック: id_datablock.py の宣言テーブル
(固有の収集経路を持つ Object / Collection のみ個別ファイル)
- ボーン系 / 特殊データタイプ / エディタ固有: 各ファイル
"""

from ..core.utils import register_target

# Phase 1: 基本的な3Dデータ
from .object import ObjectRenameTarget
from .bone import BoneRenameTarget, PoseBoneRenameTarget, EditBoneRenameTarget
from .mesh import MeshRenameTarget
from .material import MaterialRenameTarget
from .armature import ArmatureRenameTarget

# Phase 2: アニメーション/ライティング
from .action import ActionRenameTarget
from .camera import CameraRenameTarget
from .light import LightRenameTarget
from .curve import CurveRenameTarget
# ID 型データブロック (宣言テーブル: id_datablock.py)
from .id_datablock import (
ActionRenameTarget,
ArmatureRenameTarget,
CameraRenameTarget,
CurveRenameTarget,
ImageRenameTarget,
LightRenameTarget,
MaterialRenameTarget,
MeshRenameTarget,
SceneRenameTarget,
TextureRenameTarget,
)

# Phase 3: アセット管理
from .image import ImageRenameTarget
from .texture import TextureRenameTarget
# ID 型のうち固有の収集経路を持つもの
from .object import ObjectRenameTarget
from .collection import CollectionRenameTarget
from .scene import SceneRenameTarget

# ボーン系
from .bone import BoneRenameTarget, PoseBoneRenameTarget, EditBoneRenameTarget

# Special: 特殊なデータタイプ (TSE_RNA_STRUCT など)
from .shapekey import ShapeKeyRenameTarget
Expand All @@ -36,7 +37,6 @@
from .strip import StripRenameTarget
from .file import FileRenameTarget


# 登録するターゲットクラスのリスト
target_classes = [
# Phase 1: 基本的な3Dデータ
Expand Down
60 changes: 0 additions & 60 deletions src/structured_renamer/targets/action.py

This file was deleted.

60 changes: 0 additions & 60 deletions src/structured_renamer/targets/armature.py

This file was deleted.

60 changes: 0 additions & 60 deletions src/structured_renamer/targets/camera.py

This file was deleted.

19 changes: 9 additions & 10 deletions src/structured_renamer/targets/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,24 @@
"""

from ._base import *
from .id_datablock import IDDatablockTarget


class CollectionRenameTarget(BaseRenameTarget):
"""コレクションのリネームターゲット"""
class CollectionRenameTarget(IDDatablockTarget):
"""コレクションのリネームターゲット

ID 型の共通機構に加えて View Layer モード (TSE_LAYER_COLLECTION) の
フォールバック経路を持つため、スコープ判定2メソッドは独自実装のまま。
"""

bl_type = "COLLECTION"
ol_type = OT.TSE_SOME_ID
ol_idcode = BID.ID_GR
namespace_key = "collections"
collection_type = bpy.types.Collection

display_name = "Collection"
icon = "OUTLINER_COLLECTION"

def create_namespace(self) -> Set[str]:
data = self._context.blend_data
if data:
return {col.name for col in data.collections}
return set()

@classmethod
def can_create_from_scope(cls, source_item: Any, scope: OperationScope) -> bool:
if scope.mode == CollectionSource.OUTLINER:
Expand All @@ -48,7 +46,7 @@ def create_from_scope(
context: Context,
source_item: Any,
scope: OperationScope,
pointer_cache: PointerCache,
pointer_cache: Optional[PointerCache] = None,
) -> Optional["IRenameTarget"]:
"""ソースアイテムからターゲットを作成"""
target_collection: Optional[bpy.types.Collection] = None
Expand All @@ -59,6 +57,7 @@ def create_from_scope(
if (
source_item.type == OT.TSE_SOME_ID
and source_item.idcode == BID.ID_GR
and pointer_cache is not None
):
target_collection = pointer_cache.get_object_by_pointer(
source_item.id, bpy.types.Collection
Expand Down
60 changes: 0 additions & 60 deletions src/structured_renamer/targets/curve.py

This file was deleted.

Loading