Johnson Chu氏が開発した軽量TypeScriptセマンティックLintツールTSSLintは、依存関係フットプリントの削減、レガシーLintツールからの移行パスの改善、Chu氏がプロジェクトの「最終メジャーリリース」と表現する内容をもたらすバージョン3をリリースした。
TSSLint は現在は非推奨となっている TSLint の精神的後継作を自称している。別プロセスとして動作し、型チェックコンテキストを再初期化する必要があることの多い ESLint のような汎用Lintツールとは異なり、TSSLint は TypeScript Language Server プラグインとして直接実行される。既存の TypeChecker を共有し、ESTree変換を行わずにネイティブ TypeScript AST を操作することで、ほぼ即時の診断と修正を提供し、保存時の自動修正によるエディタの遅延が開発を遅らせるという、大規模プロジェクトにおける一般的な課題に対処する。
v3におけるもっとも重要な変更点は、実行時処理におけるesbuild依存関係の削除である。TSSLintはNode.jsが持つ.tsファイルのネイティブインポート機能を活用し、ビルドの複雑性を低減し、起動速度を向上させている。この変更にはNode.js 22.6.0以降が必要となる。
本リリースではTypeScriptのLintルールを統一的に扱うために、Arnaud Barre氏によるTSLプロジェクトを通じて統合されたTSL互換レイヤーも導入されている。@tsslint/compat-eslintパッケージは独立したパッケージとして再導入され、既存のESLintエコシステムとの相互運用性を高めるための統合ロジックが更新されている。まだレガシーなTSLintを使用しているチーム向けに新たにimportTSLintRules機能が追加され、TSLintルールをTSSLint設定へ直接インポートすることで移行パスをシンプル化している。
新しいcreateIgnorePlugin APIによりディレクティブコメントがサポートされ、開発者は設定内でignoreパターンを構成可能になった。
開発者向けツールも改善され、ルールドキュメントを自動生成する新ツールtsslint-docgenが導入されたほか、defineRulesAPIのJSDocも更新された。CLIのキャッシュはOSの一時ディレクトリに保存され、プロジェクトフォルダがキャッシュファイルで汚染されないようにしている。
移行時に開発者の対応が必要ないくつかの重大な変更も存在する。--projectsCLIパラメータは--projectにリネームされ、createDisableNextLinePluginはcreateIgnorePluginにリネームされた。Node.js のメモリ共有制限により、マルチスレッドが1.5 倍しか速度向上しないのに約2倍のエネルギーを消費するというベンチマークを引証して、--threadsオプションは完全に削除されている。チームは、将来のリリースでよりリソース効率の高いマルチスレッドソリューションを導入する計画を示している。
X上でリリースを発表したChu氏は、.tsインポートにおけるNode.jsネイティブサポートへの切り替えにより、より軽量で高速になったと述べている。Vue.jsの開発者であるEvan You氏は以前、「既存のTS言語サーバーを活用しながら型認識Lintルールを実行するもっとも効率的な方法だ」とTSSLintを支持していた。
同じXのスレッドで、あるユーザーが質問した:
興味深いですね。これはTypeScriptのGolang版でも動作しますか?
Johnson Chu氏は返信した:
現時点での答えはノーです。コミュニティはすでにtsgolint、oxlint、rslintといったプロジェクトでこの分野に取り組んできました。そのため、ここで大幅に優れた解決策がない限り、tsslint が同じ作業を重複して行うことはありません。
もっとも広く採用されている TypeScript Lintソリューションの typescript-eslintつきのESLint と比較すると、TSSLint の Language Server 内で実行されるアプローチは別個の型チェックプロセスを維持するオーバーヘッドを回避している。Biomeやoxlintのような新しいツールはネイティブ実装によりESLintを上回る速度向上を実現しているが、主に構文Lintにフォーカスしており、TypeScriptコンパイラAPIとの直接統合によってTSSLintが実現している型認識解析と同等の深さはまだ提供していない。
TSSLint はLanguage Service Plugins をサポートしていないため、今後登場予定のTypeScript 7ネイティブコンパイラ(typescript-go)とは互換性がない。
TSSLintはオープンソースであり、執筆時点で約600スターを獲得してGitHub上で公開されている。