記一個同時支持模糊匹配和靜態推導的Atom語法補全插件的開發過程: 序

模糊提示

靜態推導

簡介

過去的一週,都睡的很晚,終於做出了Atom上的APICloud語法提示與補全插件:apicloud_autocomplete .箇中滋味,感覺還是有必要記錄下來的.代碼基於 GPL-3.0 開源,所以我可以較爲詳細的記錄一些很難被理解和體會的技術細節.APICloud目前已有Studio,VSCode,Webstrom和Sublime的語法補全插件,但是毫無疑問,我做的這款,是目前爲止最好的 – 唯一的一個支持100%所有API,唯一的一個同時支持模糊匹配和靜態推導語法提示插件!

可能你會說,估計是Atom語法補全的擴展機制靈活等等吧!但是,我可以很明確地告訴你,核心邏輯是基於正則匹配的通用邏輯,和Atom沒有必然的聯繫! apicloud_autocomplete ,需要多個技術棧的創造性地混合使用,某種程度上,這個系列的文章,就是寫給全棧開發工程師的讚歌!哈哈~

你會耐心讀完整個系列文章的N個可能性

  • 你可能想做一個ReactNative或者Weex的API級別的語法提示與補全插件!注意,我說的是精確到特定API的提示,而不是簡單的通用語法提示.比如現在有好多jsx語法自動補全的提示,但是並沒有能真正提示某個模塊的某個方法或者某個屬性的ReactNative或者Weex的插件.
  • 你可能對網頁數據的針對性抽取感興趣.從HTML格式的數據中,按照特定規則,抽離特定的數據,正則固然可以,但是我推薦你使用 pup.這個Task,使用了非常複雜的pup使用技巧,值得一讀.
  • 你可能對正則表達式的深入使用感興趣.剛開始,基於Atom的分析樹寫的,但是通用性太弱,後來就改成基於正則的了.展示了一些複雜的正則用法,比如後向匹配.不得不說,正則表達式式,太強大了!
  • 你可能對較大量數據的清洗和格式化感興趣.文章將展示一些你可能以後也會需要的shell腳本.順序很重要!

難點與技術點一覽

  • 海量數據,卻沒有現成的獲取模塊api信息的通用接口.300多個模塊,幾千條api,如果一條條錄入其方法名,代碼模塊,沒有 30 天,真的很難搞定!但是,我只用了 3 天!簡單的shell知識,還是挺有幫助的.
  • 模糊提示.這個是很實用的功能,實現起來還是需要一點點正則技巧的.
  • 靜態推導,即根據上下文推斷變量正式模塊類型.仔細想想,或許你能理解問題的困難之處 – 你只是一個語法提示,是不能真實地執行代碼的,你要做一個靜態分析,來推斷出某個變量對應的模塊的類型,進而在其模塊信息內部搜索相關的api提示!

系列文章規劃

現在的工作,我很難每天都有時間去寫博客.儘量這個系列在周內更新完;如果delay了,還請見諒!當然,插件本身的邏輯代碼已經寫就,大家可以直接去看github上閱讀:apicloud_autocomplete 插件源碼

  • (一) 抓取需要的模塊信息. – 會分享一個基於公開文檔的完整的模塊信息數據壓縮包呦!

  • (二) apicloud_autocomplete 架構設計與實現. – 會着重講述”模糊匹配”與”靜態推導”的正則技巧.

  • (三) 清洗數據,導入插件. –你在看的時候,更多有價值的信息在數據清洗部分;但是我想說的是,當你把完整的真實數據導入既定功能代碼中,當插件終於有了完整數據,被賦予完整生命,竟然還能運行的時候,那種興奮,真的是很難言表!大家有興趣,有時間,一定要自己搞下這個!

關於 GPL-3.0

我努力尋找商業競爭和技術共享之間的結合點,目前爲止我發現基於 GPL-3.0 可以很好地平衡這兩點.

  • 他人修改代碼後,不可以閉源;
  • 新增代碼,不需要採用同樣許可證;
  • 不需要對源碼的修改之處,提供說明文檔;

參考資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章