はじめに
Denoのv1.1.0がリリースされました。
本記事では、その新機能であるdeno lint
コマンドについて紹介します。
deno lint
コマンドについて
- linterがDenoに組み込まれています。そのため、Denoがインストールされていればすぐに使用できます。
- Rustで記述されているためとても速いです。
-
deno_lintの
README.md
にベンチマークの結果が記載されています。詳しくはそちらを参照ください。
-
deno_lintの
- 現時点では、eslintほどの機能や拡張性はありません
使い方
deno lint
コマンドはまだunstableという扱いなので、使用する際は--unstable
フラグが必要です。
指定したファイルに対してlintを実行する
$ deno lint --unstable ./application.ts ./mod.ts
カレントディレクトリ配下から再帰的にファイルを探してlintを実行する
$ deno lint --unstable
指定したディレクトリ配下から再帰的にファイルを探してlintを実行する
$ deno lint --unstable ./tests
出力例
ルール違反があると、以下のように出力されます。
(no-explicit-any) `any` type is not allowed
evaluate(expression: string): Promise<any>;
~~~
at ./application.ts:5:40
(no-explicit-any) `any` type is not allowed
exposeFunction(name: string, binding: (...args: any[]) => any): Promise<void>;
~~~
at ./application.ts:7:50
(no-explicit-any) `any` type is not allowed
exposeFunction(name: string, binding: (...args: any[]) => any): Promise<void>;
~~~
at ./application.ts:7:60
(no-explicit-any) `any` type is not allowed
evaluate(expression: string): Promise<any> {
~~~
at ./application.ts:18:42
(no-explicit-any) `any` type is not allowed
exposeFunction(name: string, binding: (...args: any[]) => any) {
~~~
at ./application.ts:24:52
(no-explicit-any) `any` type is not allowed
exposeFunction(name: string, binding: (...args: any[]) => any) {
~~~
at ./application.ts:24:62
Found 6 problems
ルール
eslint同様、いくつかのルールが定義されています。
例
ルール | 説明 |
---|---|
no-explicit-any |
明示的なany の使用を許可しない |
constructor-super |
サブクラスのconstructor はsuper() を呼ばなければならない |
no-delete-var |
変数のdelete を許可しない |
no-this-alias |
this の他の変数への割当(const self = this; )を許可しない |
prefer-namespace-keyword |
module キーワードではなくnamespace キーワードの使用を推奨する |
ルールを一覧表示する
以下のコマンドを実行すると、サポートされているルールを一覧表示できます。
$ deno lint --unstable --rules
ディレクティブ
linterの挙動を制御するためのディレクティブがいくつか提供されています。
deno-lint-ignore-file
このディレクティブをファイルの先頭付近で宣言しておくと、そのファイルはlint対象から除外されます。
import
宣言や関数定義よりも前に指定する必要があります。
// deno-lint-ignore-file
deno-lint-ignore
eslintのeslint-disable-next-line
に相当します。
特定のルールを無効化したいときに使います。
export interface Evaluator {
// deno-lint-ignore no-explicit-any
evaluate(expression: string): Promise<any>;
}
deno lint
でできないこと
以下のような機能はまだサポートされていません。
- 設定ファイル
- 適用するルールのカスタマイズ
おわりに
deno lint
コマンドが利用しているリンターについては、deno_lintリポジトリにて開発が行われています。
このリポジトリでは、毎日のように活発にコミットが行われており、これからもどんどん拡張されていくと思われます。
興味があれば、ぜひ試してみてください。