實(shí)現(xiàn)VSCode插件批量轉(zhuǎn)換接口類(lèi)型

背景

入職新公司一個(gè)多月后卫枝,感覺(jué)項(xiàng)目代碼就是一坨屎山惩系。

很多接口類(lèi)型為了省事,都是直接定義成 any防楷,導(dǎo)致在使用的時(shí)候沒(méi)有類(lèi)型提示袒炉,甚至在迭代的時(shí)候還發(fā)現(xiàn)了不少因?yàn)閭鲄?dǎo)致的bug匪凡。

舉個(gè)??:
Table分頁(yè)的接口定義的是 pageSizeoffset ,代碼里傳的是 sizeoffset ,導(dǎo)致每次都是全量拉數(shù)據(jù)吟孙,因?yàn)闇y(cè)試環(huán)境數(shù)據(jù)量少,完全沒(méi)測(cè)出來(lái)浑测。

目標(biāo)

把代碼中接口的 any 替換成 Yapi 上定義的類(lèi)型芥颈,減少因?yàn)閭鲄?dǎo)致的bug數(shù)量。

設(shè)計(jì)

鑒于當(dāng)前項(xiàng)目中接口數(shù)量龐大(其中any的接口有768個(gè))角钩,嘗試手動(dòng)逐一審查并替換any類(lèi)型的接口顯得既不現(xiàn)實(shí)又效率低下吝沫,而且容易遺漏。

顯然需要一種更加高效且可靠的方法來(lái)解決递礼。

因?yàn)榻M內(nèi)基本上都是使用 VSCode 開(kāi)發(fā)惨险,因此最終決定開(kāi)發(fā)一個(gè) VSCode 插件來(lái)實(shí)現(xiàn)接口替換。

考慮到直接掃描整個(gè)項(xiàng)目進(jìn)行替換風(fēng)險(xiǎn)較大脊髓,因此最終是 按文件維度辫愉,針對(duì)當(dāng)前打開(kāi)的文件執(zhí)行替換

整個(gè)插件分為3個(gè)命令:

  • 單個(gè)接口替換
  • 整個(gè)文件所有接口替換
  • 新增接口
image.png

接口可以分為存量和增量将硝。
對(duì)于存量接口恭朗,分別實(shí)現(xiàn)了 整個(gè)文件批量替換、單個(gè)接口的替換 兩個(gè)功能袋哼。
對(duì)于新增接口冀墨,可以通過(guò) yapi 地址自動(dòng)生成接口代碼。

整體設(shè)計(jì)

插件按功能劃分為6個(gè)模塊:

image.png

詳細(xì)設(shè)計(jì)

環(huán)境檢測(cè)

Easy Yapi需要和Yapi服務(wù)器交互涛贯,需要用戶(hù)提供Yapi Project相關(guān)的信息诽嘉,因此需要填寫(xiě)配置文件,插件執(zhí)行命令時(shí)會(huì)對(duì)配置文件內(nèi)的信息進(jìn)行檢測(cè)。

緩存接口列表

從性能上考慮虫腋,一次批量替換后骄酗,會(huì)緩存當(dāng)前Yapi項(xiàng)目所有接口的定義到cache文件中,下次替換不會(huì)重新請(qǐng)求悦冀。

接口捕獲

不管是單個(gè)接口替換還是整個(gè)文件接口替換都需要先捕獲接口趋翻,這里是通過(guò)將代碼轉(zhuǎn)成AST來(lái)實(shí)現(xiàn)。

image.png
image.png

類(lèi)型生成

將接口定義轉(zhuǎn)化成TS類(lèi)型盒蟆,通過(guò)循環(huán)+遞歸拼接字符串實(shí)現(xiàn)踏烙。

為什么不直接使用Yapi自帶的ts類(lèi)型?

  1. 命名問(wèn)題历等,Yapi自帶的ts類(lèi)型命名規(guī)則過(guò)于簡(jiǎn)單讨惩,直接就是把接口的路徑拼接起來(lái)
  2. 項(xiàng)目中有一層請(qǐng)求中間件,實(shí)際上最終的類(lèi)型只有data那一層寒屯,而Yapi自定的類(lèi)型是整個(gè)定義

代碼插入

  1. 將生成的類(lèi)型插入文件中
  2. 插入import語(yǔ)句荐捻,引入類(lèi)型
  3. 替換原有的代碼類(lèi)型

交互流程

image.png

命令流程

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寡夹,隨后出現(xiàn)的幾起案子处面,更是在濱河造成了極大的恐慌,老刑警劉巖菩掏,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魂角,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡患蹂,警方通過(guò)查閱死者的電腦和手機(jī)或颊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)传于,“玉大人囱挑,你說(shuō)我怎么就攤上這事≌恿铮” “怎么了平挑?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)系草。 經(jīng)常有香客問(wèn)我通熄,道長(zhǎng),這世上最難降的妖魔是什么找都? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任唇辨,我火速辦了婚禮,結(jié)果婚禮上能耻,老公的妹妹穿的比我還像新娘赏枚。我一直安慰自己亡驰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 那天,我揣著相機(jī)與錄音磕秤,去河邊找鬼乳乌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛市咆,可吹牛的內(nèi)容都是我干的钦扭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼床绪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了其弊?” 一聲冷哼從身側(cè)響起癞己,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梭伐,沒(méi)想到半個(gè)月后痹雅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糊识,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年绩社,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赂苗。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愉耙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拌滋,到底是詐尸還是另有隱情朴沿,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布败砂,位于F島的核電站赌渣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏昌犹。R本人自食惡果不足惜坚芜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斜姥。 院中可真熱鬧鸿竖,春花似錦沧竟、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至搔谴,卻和暖如春魁袜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敦第。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工峰弹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芜果。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓鞠呈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親右钾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚁吝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 Google Play應(yīng)用市場(chǎng)對(duì)于應(yīng)用的targetSdkVersion有了更為嚴(yán)格的要求。從 2018 年...
    申國(guó)駿閱讀 64,231評(píng)論 14 98
  • """1.個(gè)性化消息: 將用戶(hù)的姓名存到一個(gè)變量中舀射,并向該用戶(hù)顯示一條消息窘茁。顯示的消息應(yīng)非常簡(jiǎn)單,如“Hello ...
    她即我命閱讀 2,899評(píng)論 0 5
  • 我們都是軟弱的人脆烟,所以才會(huì)說(shuō)謊山林。我們都是膽小的人,所以才要武裝邢羔。我們都是一群笨蛋驼抹,所以才會(huì)互相傷害。
    所羅門(mén)的偽證_dc0a閱讀 2,066評(píng)論 0 3
  • 為了讓我有一個(gè)更快速拜鹤、更精彩框冀、更輝煌的成長(zhǎng),我將開(kāi)始這段刻骨銘心的自我蛻變之旅敏簿!從今天開(kāi)始左驾,我將每天堅(jiān)持閱...
    李薇帆閱讀 1,720評(píng)論 0 2
  • 似乎最近一直都在路上,每次出來(lái)走的時(shí)候感受都會(huì)很不一樣极谊。 1诡右、感恩一直遇到好心人,很幸運(yùn)轻猖。在路上總是...
    時(shí)間里的花Lily閱讀 1,192評(píng)論 0 1