- 程序員在開發過程中查詢代碼時,通常依賴文本搜索,儘管這在大多數情況下很有用,但它可能無法完全滿足我們的需求.
let a = 1;let b=`let a=1`
- 要搜索上述代碼語句
let a = 1,通常這是很難實現的,因為一方面會有字符串的干擾,另一方面格式可能不同,無法直接確定唯一語句.
- 但是,當我們使用
code recycle時,我們可以直接使用let a=1來匹配這個語句,因為它是基於語法樹來進行匹配的.一個特點是它對空白內容不敏感,另一個特點是所有字符都被視為節點內容進行查詢.
- 這樣,我們就可以使用與原來相同的搜索內容,匹配到更準確的結果
快速交換參數?
- 如果想交換函數調用的參數,可能就是一個大工程,需要檢查每個函數的調用,並手動處理兩個參數的位置
- 如果説只用幾行代碼就能交換所有代碼,是不是更方便呢?
- 沒錯,在
code-recycle中你可以這麼寫
{
query: `CallExpression:like(test1( [[{^]] [[$p1]] [[...]] [[$p4]] [[$}]] ) )`,
multi: true,
replace: {
p1: `{{''|ctxInferValue:'p4'}}`,
p4: `{{''|ctxInferValue:'p1'}}`,
},
},

- 上面演示的將第一個和最後一個參數交換,如果你已經確定了參數數量,那麼寫法還可以更簡單
改寫傳參結構?
- 當設計發生變動時,通常需要修改傳參結構,將以前的參數放到新的結構中.
- 這時你可以這麼做
{
query: `CallExpression:like(test1( [[{^]] [[...]] [[$p4]] [[$}]] ) )`,
multi: true,
replace: {
p4: `{value:{{''|ctxInferValue:'p4'}}}`,
},
}
- 最後一個參數變成一個對象,而原來參數值將會在對象中
其他用途
console.[[$method:/log|info/]]() 查詢console的指定調用方法
class [[$className]] { [[{]] test(){} [[}]] }查詢包含 test 方法的類
{key:[[$value]]}查詢key的值
更多?
- 工具目前支持
CLI與VSCode Extension進行執行,腳本支持yaml/js/ts
- 上面的例子是以
typescript腳本語言為例介紹code recycle的基礎用法,工具目前支持400多種語言/語法解析,你可以查看文檔瞭解更多
- 如果你想看更多的實例,可以訪問倉庫查看並運行
- 如果你已經感興趣,那麼可以快速開始