[譯] TSLint in 2019

TSLint in 2019

Palantir 是 TSLint 項目(TypeScript 的標準靜態代碼分析工具)的建立者和主要的維護者。TypeScript 社區正致力於提供統一的、跨 TypeScript 和 JavaScript 兩種語言的開發體驗,咱們在致力於 TSLint 和 ESLint 的融合,在這篇文章中,咱們會解釋咱們爲何要這麼作以及如何去作。前端

如今的 TSLint 和 ESLint

如今,TSLint 事實上已是 TypeScript 項目的標準靜態代碼分析工具了。TSLint 的生態由一個核心的規範集,社區維護的多種自定義規則以及配置包組成。android

同時,ESLint 是 JavaScript 的標準靜態代碼分析工具。和 TSLint 同樣,ESLint 也是由一個核心規範集和許多社區維護的自定義規則組成。ESLint 支持 TSLint 所缺乏的不少功能,好比,條件 lint 配置自動縮進。相反,ESLint 的規則不能受益於(至少如今不能)TypeScript 語言所提供的靜態分析以及類型推斷,所以沒法捕獲 TSLint 語義規則所覆蓋的某些類型的錯誤和代碼異味(譯者注:code smells)。ios

TypeScript + ESLint

TypeScript 團隊的戰略方向是讓「每一個桌面,在每棟房子裏,每一個 JS 開發者都使用類型」。換句話說,這個方向主要是經過類型和靜態代碼分析來逐漸完善 JavaScript 的開發體驗,直到 TypeScript 和 JavaScript 開發體驗逐漸融合。git

很明顯,靜態代碼分析是 TypeScript 以及 JavaScript 開發體驗的一個核心部分,因此 Palantir 的 TSLint 團隊和 Redmond 的 TypeScript 核心團隊會面,討論了 TypeScript 和 JavaScript 融合對於靜態代碼分析的意義。TypeScript 社區旨在知足 JavaScript 開發人員的需求,ESLint 是 JavaScript 的首選靜態代碼分析工具。爲了不分裂 TypeScript 的靜態代碼檢查工具,咱們計劃廢棄 TSLint,而且集中精力去改進 ESLint 對於 TypeScript 的支持。咱們認爲這是正確的前進道路,具備戰略意義而且務實的緣由:github

  • 無障礙接入:JavaScript 開發人員遷移到 TypeScript 的障礙之一是從 ESLint 到 TSLint 的無障礙遷移。容許開發人員能夠從現有的 ESLint 設置開始,逐步添加 TypeScript 特定的靜態分析規則,能夠下降這樣的遷移障礙。typescript

  • 社區整合:TSLint 和 ESLint 有着一樣的核心目標:經過強大的規範集和可擴展的插件來提供出色的靜態代碼分析體驗。如今,在 ESLint 中提供 TypeScript 解析,咱們認爲這是讓社區標準化的最好方式,而非工具之間的競爭。後端

  • 更高性能的分析工具:ESLint API 支持更有效地進行某些類型的檢查。雖然能夠對於 TSLint 的 API 進行重構,可是直接利用 ESLint 的架構而且將開發資源集中到其餘地方是明智的選擇。架構

  • 投入預估:在 Palantir 中,TSLint 爲咱們的 TypeScript 語言實現的交易保駕護航;所以,其功能集和架構已經很是成熟,而且達到了穩定的狀態。所以,咱們很難肯定須要的社區貢獻,纔可以讓 TSLint 達到咱們承諾的水平。工具

下一步

Palantir 將會經過一系列功能和插件的貢獻支持 TSLint 社區實現從 TSLint 到 ESLint 的平滑過渡。(快去叫 James Henry 和其餘貢獻者一塊兒,讓這個過程開始吧),好比:性能

  • 在 TypeScript 中編寫 ESLint 規範的支持和文檔:能夠參考這個 typescript-eslint issue

  • typescript-eslint 的測試架構:ESLint 的內置規則測試器很難使用,而且測試用例語法很難閱讀。咱們會提供相似於 TSLint 的測試基礎架構的東西來保證 TSLint 規則的開發體驗不會變差。

  • 基於語義的類型檢查規則:移植而且添加爲 TypeScript 語言服務的新的規則。

一旦咱們以爲 ESLint 中關於 TSLint 的特性已經完整,咱們就會廢棄 TSLint,而且幫助用戶們遷移到 ESLint,在那以前,咱們的主要任務包括:

  • 繼續維護 TSLint:在 TSLint 維護中,咱們最重要的任務是確保其與 TypeScript 新版本的編譯器和功能的兼容性。

  • TSLint 到 ESLint 的兼容包:一旦 ESLint 靜態分析檢查功能到達了與 TSLint 相同的時候,咱們將會發布 eslint-config-palantir 包,這是將 TSLint 規則集集成到 ESLint 中的插入式替換。

咱們很高興看到 TypeScript 和 TSLint 在過去幾年中的應用變得愈來愈多,而且咱們也很高興能爲 Web 開發生態中更爲具備影響力的 TypeScript 作出貢獻!若是你有任何問題或者疑慮,請經過評論此帖子或者 Github issue 的方式與咱們取得聯繫。

做者

Adi D.John W.Robert F. 和 Stephanie Y。

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索