eslint-config-imart v2.2.7
eslint-config-imart
intra-mart開発のためのESLint設定
本リポジトリについて
- AirbnbのJavaScript Style Guideをベースに、最小限のルール変更を追加
- prettier/prettier: Prettier is an opinionated code formatter. を使う
- intra-mart スクリプト開発API定義を追加
ルール
valid-jsdoc, require-jsdoc
JSDocを記述することを強制します。本ルールでは、各関数について以下の記載を求めます。
- 関数についての説明
- すべての名前付き引数の型(順番も含めて正しいこと)
- 戻り値の型
特に、何も返さない関数についても戻り値の型を記載する必要があります。JavaScriptはreturnに遭遇しなかった場合やreturn文に何も与えなかった場合、undefinedを返却するため、次のように記載すると正しいと判定されます。
@returns {void}@returns {undefined}
引数および戻り値の説明については、型名や変数名から自明な場合は必要ありません。そうでない場合は記載してください。
strict
strictモードを使用します。Strict モード - JavaScript | MDN
使い方
このルール定義はESLint Shareable Configsの仕組みで提供されています。
インストール
npm i -D eslint eslint-config-airbnb-base eslint-plugin-import eslint-config-imartSee: eslint-config-airbnb-base
ルール定義
プロジェクトのルートディレクトリに.eslintrcファイルを以下のように作成します。
{
"root": true,
"extends": [
"airbnb-base/legacy",
"imart",
"prettier"
],
"globals": {
"require": false
}
}実行
./node_modules/.bin/eslint .eslintrc
intra-mart API定義
ESLintでは、未定義のグローバルオブジェクトへの参照はエラーとなります。したがって、intra-martのAPIオブジェクトはすべてglobalsとして定義される必要があります。
このプロジェクトでは、intra-mart APIのグローバル定義ファイルを提供しています。
必要に応じてextendsとして利用してください。
{
"extends": [
"airbnb-base/legacy",
"imart",
"imart/globals/iap-server-core",
"imart/globals/iap-client-core",
"prettier"
]
}ファイル名のルールは以下の通りです。
${platform}-${environment}-${app}
それぞれの変数間を-で繋ぎ、各変数内の単語区切りには_を使います。すべて小文字です。
どのようなAPI定義があるかはglobalsディレクトリを参照してください。
ES6
node.jsモジュールを書く場合等、ES6の機能が必要な場合はairbnb-baseを利用してください。
{
"extends": [
"airbnb-base",
"imart",
"prettier"
],
}ルールの階層構造
ESLintでは、.eslintrcをlint対象ファイルの位置からファイルシステムを上へ再帰的に適用します: Configuration Cascading and Hierarchy
よって、各プロジェクトに配置する.eslintrcは次のようになっているべきです:
$PROJECT_HOME/.eslintrc
{
"root": true,
"extends": [
"airbnb-base",
"imart",
"prettier"
]
}$PROJECT_HOME/src/main/jssp/.eslintrc
{
"extends": ["imart/globals/iap-server-core"]
}$PROJECT_HOME/src/main/public/.eslintrc
{
"extends": ["imart/globals/iap-client-core"]
}これにより、ルール定義は共通のまま、サーバサイドJSではサーバ側のAPIのみ、クライアントサイドJSではクライアント側のAPIのみが定義されている状態になります。
メンテナンスについて
テスト
ルールのリリース前には、必ずテストを実行してください:
npm test修正に関する議論
あるルールを変更する場合、本リポジトリのissueにて議論を行ってください。
定義済みコマンド
npm runを実行すると、実行可能なコマンドが一覧表示されます。
現時点では以下のコマンドが実行可能です。
npm test: ルールについてのテストを実行しますnpm run build: intra-mart APIのグローバル定義を生成します
FAQ
unused警告について
init関数、action関数などjavascriptファイル内から直接呼ばれない関数/変数は、no-unused-varsオプションによって未使用の警告が出ます。これを回避するため、eslintに該当変数が他で利用されていることをexportedディレクティブで通知する必要があります。
/* exported init */
function init(request) {
// code
}※注: "env": { "node": true }の環境下ではexportedは機能ません。node.jsでは変数は常にスクリプトローカルであるためです。