pub enum Intent {
Show 60 variants
RenameIdent {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_ident: Option<String>,
to: String,
kind: IdentKind,
},
ChangeVisibility {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_item: Option<String>,
to: Visibility,
},
MoveItem {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_item: Option<String>,
to_module: String,
},
ExtractTrait {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type: Option<String>,
trait_name: String,
methods: Vec<String>,
},
InlineTrait {
trait_symbol_id: Option<String>,
trait_symbol_path: Option<String>,
target_trait: Option<String>,
struct_symbol_id: Option<String>,
struct_symbol_path: Option<String>,
target_struct: Option<String>,
remove_trait: bool,
},
EnumToTrait {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_enum: Option<String>,
new_trait_name: Option<String>,
remove_enum: bool,
strategy: EnumToTraitStrategy,
match_handling: MatchHandling,
},
RemoveMod {
parent_mod: Vec<String>,
mod_name: String,
},
CreateMod {
parent_mod: Vec<String>,
mod_name: String,
content: String,
is_pub: bool,
},
AddField {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_struct: Option<String>,
field_name: String,
field_type: String,
is_pub: bool,
},
RemoveField {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_struct: Option<String>,
field_name: String,
},
AddDerive {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type: Option<String>,
derives: Vec<String>,
},
RemoveDerive {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type: Option<String>,
derives: Vec<String>,
},
AddEnum {
symbol_path: String,
name: String,
variants: Vec<String>,
is_pub: bool,
derives: Vec<String>,
},
AddVariant {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_enum: Option<String>,
variant_name: String,
variant_type: String,
},
RemoveVariant {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_enum: Option<String>,
variant_name: String,
},
AddMatchArm {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_fn: Option<String>,
enum_name: String,
pattern: String,
body: String,
},
RemoveMatchArm {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_fn: Option<String>,
enum_name: String,
pattern: String,
},
ReplaceMatchArm {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_fn: Option<String>,
enum_name: String,
old_pattern: String,
new_pattern: String,
new_body: String,
},
AddStructLiteralField {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_struct: Option<String>,
field_name: String,
value: String,
},
RemoveStructLiteralField {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_struct: Option<String>,
field_name: String,
},
RemoveStruct {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_struct: Option<String>,
},
RemoveEnum {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_enum: Option<String>,
},
DuplicateFunction {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_fn: Option<String>,
to: String,
},
DuplicateStruct {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_struct: Option<String>,
to: String,
include_impls: bool,
},
DuplicateEnum {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_enum: Option<String>,
to: String,
include_impls: bool,
},
DuplicateModTree {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_mod: Option<String>,
to: String,
},
AddConst {
symbol_path: String,
name: String,
ty: String,
value: String,
is_pub: bool,
},
AddTypeAlias {
symbol_path: String,
name: String,
ty: String,
is_pub: bool,
},
AddSpec {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type: Option<String>,
module_id: Option<String>,
module_path: Option<String>,
target_mod: Option<String>,
group: String,
alias_name: Option<String>,
relations: Vec<SpecRelation>,
},
AddMethod {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type: Option<String>,
method_name: String,
params: Vec<(String, String)>,
return_type: Option<String>,
body: String,
is_pub: bool,
self_param: Option<SelfParam>,
},
RemoveMethod {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type: Option<String>,
method_name: String,
},
RemoveConst {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_const: Option<String>,
},
RemoveTypeAlias {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type_alias: Option<String>,
},
RemoveUse {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_use: Option<String>,
},
RemoveTrait {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_trait: Option<String>,
},
RemoveImpl {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_type: Option<String>,
trait_name: Option<String>,
},
AddItem {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_mod: Option<String>,
content: String,
item_kind: ItemKind,
},
RemoveItem {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_item: Option<String>,
item_kind: ItemKind,
},
AddCode {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_mod: Option<String>,
code: String,
},
OrganizeImports {
target_mod: Option<String>,
deduplicate: bool,
merge_groups: bool,
},
MergeImplBlocks {
target_mod: Option<String>,
target_type: Option<String>,
inherent_only: bool,
},
LoopToIterator {
target_mod: Option<String>,
target_var: Option<String>,
},
UnwrapToQuestion {
target_mod: Option<String>,
target_fn: Option<String>,
include_expect: bool,
},
IntroduceVariable {
target_mod: Option<String>,
target_fn: Option<String>,
expr: String,
var_name: String,
},
GenerateBuilder {
symbol_id: Option<String>,
symbol_path: Option<String>,
target_struct: Option<String>,
target_mod: Option<String>,
fields: Vec<(String, String)>,
add_builder_method: bool,
},
ReplaceExpr {
target_mod: Option<String>,
target_fn: Option<String>,
old_expr: String,
new_expr: String,
replace_all: bool,
symbol_path: Option<String>,
},
RemoveStatement {
target_mod: Option<String>,
target_fn: Option<String>,
pattern: String,
remove_all: bool,
symbol_path: Option<String>,
},
InsertStatement {
target_mod: Option<String>,
target_fn: String,
stmt: String,
position: StmtInsertPosition,
reference_pattern: Option<String>,
symbol_path: Option<String>,
},
ReplaceStatement {
target_mod: Option<String>,
target_fn: Option<String>,
old_stmt: String,
new_stmt: String,
symbol_path: Option<String>,
},
AssignOp {
target_mod: Option<String>,
target_fn: Option<String>,
},
BoolSimplify {
target_mod: Option<String>,
},
CloneOnCopy {
target_mod: Option<String>,
},
CollapsibleIf {
target_mod: Option<String>,
},
ComparisonToMethod {
target_mod: Option<String>,
},
RedundantClosure {
target_mod: Option<String>,
},
ManualMap {
target_mod: Option<String>,
},
MatchToIfLet {
target_mod: Option<String>,
},
FilterNext {
target_mod: Option<String>,
target_fn: Option<String>,
},
MapUnwrapOr {
target_mod: Option<String>,
target_fn: Option<String>,
},
Custom {
description: String,
examples: Vec<TransformExample>,
},
}Expand description
変換意図
§Future Intents (Not Yet Implemented)
The following Intents are planned for future implementation:
Decorator→ AddFunction + Rename (wrap function with logging/timing/retry)ExtractFunction→ AddFunction + ReplaceExpr (extract statements into new function)InlineFunction→ ReplaceExpr + RemoveFunction (inline function calls)
These will be implemented as compositions of existing MutationSpecs.
Variants§
RenameIdent
単一識別子のリネーム
Fields
ChangeVisibility
可視性変更
Fields
to: Visibility変更後のvisibility
MoveItem
アイテムを別モジュールに移動
Fields
ExtractTrait
implからトレイトを抽出
Fields
InlineTrait
トレイトをインライン化(implに戻す)
Fields
EnumToTrait
EnumをTraitに変換(Replace Conditional with Polymorphism)
Enum variants become struct implementations of the generated trait.
Use strategy to control type annotation replacement.
Fields
strategy: EnumToTraitStrategy変換戦略: Dynamic (Box
match_handling: MatchHandlingmatch式の処理方法
RemoveMod
モジュール宣言を削除
CreateMod
モジュールファイルを作成
Fields
AddField
フィールドを追加
Fields
RemoveField
フィールドを削除
Fields
AddDerive
Deriveマクロを追加
Fields
RemoveDerive
Deriveマクロを削除
Fields
AddEnum
Enumを追加
Fields
AddVariant
Enumにバリアントを追加
Fields
RemoveVariant
Enumからバリアントを削除
Fields
AddMatchArm
Match式にarmを追加(Cascade用)
AddVariantと組み合わせて使用。CascadeAnalyzerで生成された AddMatchArmをIntentとして渡すことで、網羅性エラーを自動修正。
Fields
RemoveMatchArm
Match式からarmを削除(Cascade用)
RemoveVariantと組み合わせて使用。バリアント削除後の 不要なmatch armを削除する。
Fields
ReplaceMatchArm
Match armを置換(パターン + body をセットで変更)
ReplaceExprはbody(式)のみを置換するが、このIntentはパターンも
同時に置換できる。例えば { start: _, end: _ } を { start, end }
に変更しつつ、bodyも新しい実装に置き換える場合に使用する。
Fields
AddStructLiteralField
構造体リテラルにフィールドを追加(Cascade用)
AddFieldと組み合わせて使用。フィールド追加後の構造体リテラルを 自動的に更新する。
Fields
RemoveStructLiteralField
構造体リテラルからフィールドを削除(Cascade用)
RemoveFieldと組み合わせて使用。フィールド削除後の構造体リテラルを 自動的に更新する。
Fields
RemoveStruct
構造体を削除
Fields
RemoveEnum
Enumを削除
Fields
DuplicateFunction
関数を複製
Fields
DuplicateStruct
構造体を複製(関連impl含む)
Fields
DuplicateEnum
Enumを複製(関連impl含む)
Fields
DuplicateModTree
インラインモジュールを複製
Fields
AddConst
定数を追加
Fields
AddTypeAlias
型エイリアスを追加
Fields
AddSpec
Spec TypeAliasを追加 (ドメイン仕様マーカー)
Fields
relations: Vec<SpecRelation>依存関係 (最大3つ)
AddMethod
implにメソッドを追加
Fields
RemoveMethod
implからメソッドを削除
Fields
RemoveConst
定数を削除
Fields
RemoveTypeAlias
型エイリアスを削除
Fields
RemoveUse
use文を削除
Fields
RemoveTrait
Traitを削除
Fields
RemoveImpl
impl blockを削除
Fields
AddItem
アイテム追加
Fields
RemoveItem
アイテム削除
Fields
AddCode
コードを親パスに追加(存在しなければモジュール自動作成)
AddItemの簡易版。item_kindはsynパースで自動判定し、 親パスが存在しない場合は再帰的にモジュールを作成する。
§自動モジュール作成
- SymbolRegistryあり: 既存モジュールをスキップし、存在しないモジュールのみ作成
- SymbolRegistryなし: 全親セグメントに対してCreateModを生成(CreateModは冪等)
例: parent: "crate::infrastructure::memory" の場合
- CreateMod { parent: “crate”, mod_name: “infrastructure” }
- CreateMod { parent: “crate::infrastructure”, mod_name: “memory” }
- AddItem { target: “crate::infrastructure::memory”, … }
§parent と parent_ref
どちらか一方を指定。両方指定時は parent_ref を優先。
§Example (シンプル形式 - parent)
{
"type": "AddCode",
"parent": "crate::usecase",
"code": "pub struct CreateOrderInput { pub user_id: UserId }"
}§Example (明示的形式 - parent_ref)
{
"type": "AddCode",
"parent_ref": { "type": "FilePath", "path": "src/usecase.rs" },
"code": "pub struct CreateOrderInput { ... }"
}Fields
OrganizeImports
use文の整理・ソート
Fields
MergeImplBlocks
同一型のimplブロックをマージ
Fields
LoopToIterator
forループをイテレータチェーンに変換
UnwrapToQuestion
.unwrap()/.expect() を ? 演算子に変換
Fields
IntroduceVariable
重複式を変数に抽出
Fields
GenerateBuilder
Builder patternを生成
指定した struct に対して Builder pattern を生成する。 以下のコードが生成される:
{StructName}Builderstruct (Option-wrapped fields)impl {StructName}Builderwithnew(), setter methods,build()- (オプション)
impl {StructName}withbuilder()method
§Example
{
"type": "GenerateBuilder",
"struct_name": "Config",
"fields": [
["host", "String"],
["port", "u16"],
["timeout", "Option<u32>"]
]
}Fields
ReplaceExpr
式を別の式に置換
対象指定方法(どちらか一方を使用):
old_expr: パターンマッチで対象を検索symbol_path: 直接位置指定(例: “crate::fn::$body::0::1”)
Fields
RemoveStatement
文を削除
対象指定方法(どちらか一方を使用):
pattern: パターンマッチで対象を検索symbol_path: 直接位置指定(例: “crate::fn::$body::2”)
Fields
InsertStatement
文を挿入
対象指定方法:
target_fn+position: 従来方式symbol_path: 直接位置指定($body::N の後に挿入)
Fields
position: StmtInsertPosition挿入位置
ReplaceStatement
文を別の文に置換
対象指定方法(どちらか一方を使用):
old_stmt: パターンマッチで対象を検索symbol_path: 直接位置指定(例: “crate::fn::$body::1”)
Fields
AssignOp
代入演算子の簡略化: x = x + 1 → x += 1
BoolSimplify
bool式の簡略化: x == true → x, x == false → !x
CloneOnCopy
Copy型での冗長な.clone()削除
CollapsibleIf
ネストしたifを&&で統合: if a { if b { ... } } → if a && b { ... }
ComparisonToMethod
比較をメソッド呼び出しに変換: s == "" → s.is_empty()
RedundantClosure
冗長なクロージャを削除: |x| f(x) → f
ManualMap
matchをmap()に変換: match opt { Some(x) => Some(f(x)), None => None } → opt.map(f)
MatchToIfLet
matchをif letに変換
FilterNext
.filter().next() を .find() に変換
MapUnwrapOr
.map().unwrap_or() を .map_or() に変換
Custom
LLMが理解したが定義済みIntentにマッチしない場合
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Intent
impl<'de> Deserialize<'de> for Intent
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl From<CascadeSpec> for Intent
impl From<CascadeSpec> for Intent
Source§fn from(spec: CascadeSpec) -> Self
fn from(spec: CascadeSpec) -> Self
Auto Trait Implementations§
impl Freeze for Intent
impl RefUnwindSafe for Intent
impl Send for Intent
impl Sync for Intent
impl Unpin for Intent
impl UnsafeUnpin for Intent
impl UnwindSafe for Intent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more