PMD JavaScript Rules (ver 7.0.0-rc4)- Code Style

PMDバージョン: 7.0.0-rc4

AssignmentInOperand

公式ドキュメント: AssignmentInOperand

Since: PMD 5.0

Priority: Medium High (2)

Description:

条件式内での値の代入は避ける。コードが複雑になり、読みにくくなる。
等号演算子==」の代わりに代入演算子=」が使用されるバグを検出することがある。

Property:

名前 デフォルト値 説明 複数指定
allowIf false if文の条件式内での代入を許可する -
allowFor false for文の条件式内での代入を許可する -
allowWhile false while文の条件式内での代入を許可する -
allowTernary false 三項演算子の条件式内での代入を許可する -
allowTernaryResults false 三項演算子の結果式内での代入を許可する -
allowIncrementDecrement false if文、for文、while文の条件式にインクリメント、デクリメント演算子を使用できるようにする -

Configuration:

<!-- プロパティ設定なし -->
<rule ref="category/ecmascript/codestyle.xml/AssignmentInOperand" />

<!-- プロパティ設定あり -->
<rule ref="category/ecmascript/codestyle.xml/AssignmentInOperand" >
  <properties>
    <property name="allowIf" value="false" />
    <property name="allowFor" value="false" />
    <property name="allowWhile" value="false" />
    <property name="allowTernary" value="false" />
    <property name="allowTernaryResults" value="false" />
    <property name="allowIncrementDecrement" value="false" />
  </properties>
</rule>

Example:

var x = 2;
// NG
// 条件式内で変数に代入を行っている
if ((x = getX()) == 3) {
    alert('3!');
}

// OK
function getX() {
    return 3;
}

ForLoopsMustUseBraces

公式ドキュメント: ForLoopsMustUseBraces

Since: PMD 5.0

Priority: Medium (3)

Description:

中括弧を使用しないfor文の使用は避ける。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/ForLoopsMustUseBraces" />

Example:

// OK
for (var i = 0; i < 42; i++) {
    foo();
}

// NG
// for文を使用する際には必ず「{}」を付ける
for (var i = 0; i < 42; i++)
    foo();

IfElseStmtsMustUseBraces

公式ドキュメント: IfElseStmtsMustUseBraces

Since: PMD 5.0

Priority: Medium (3)

Description:

中括弧を使用しないif..else文の使用は避ける。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/IfElseStmtsMustUseBraces" />

Example:

// OK
if (foo) {
    x++;
} else {
    y++;
}

// NG
// if..else文を使用する際には必ず「{}」を付ける
if (foo)
    x++;
else
    y++;

IfStmtsMustUseBraces

公式ドキュメント: IfStmtsMustUseBraces

Since: PMD 5.0

Priority: Medium (3)

Description:

中括弧を使用しないif文の使用は避ける。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/IfStmtsMustUseBraces" />

Example:

// OK
if (foo) {
    x++;
}

// NG
// if文を使用する際には必ず「{}」を付ける
if (foo)
    x++;

NoElseReturn

公式ドキュメント: NoElseReturn

Since: PMD 5.5.0

Priority: Medium (3)

Description:

if-else構文のelseブロックは、ifブロックにreturnが含まれている場合、ブロック外に記載すればよいので不要となる。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/NoElseReturn" />

Example:

// NG
// elseに記載の内容はブロック内に記載する必要はない
if (x) {
    return y;
} else {
    return z;
}

// OK
if (x) {
    return y;
}
return z;

UnnecessaryBlock

公式ドキュメント: UnnecessaryBlock

Since: PMD 5.0

Priority: Medium (3)

Description:

不要なBlockが存在する。
このようなブロックは、他の言語では新しい変数スコープを導入するためによく使用される。
ECMAScipt では Blocks はこのように動作しないので、これを使用すると誤解を招く可能性がある。
この不要なブロックを削除することを検討すべきである。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/UnnecessaryBlock" />

Example:

if (foo) {
    // Ok
}
if (bar) {
    {
        // NG
        // ここに記載の処理が、本当にブロックで囲まれている必要があるのかを検討するべき
    }
}

UnnecessaryParentheses

公式ドキュメント: UnnecessaryParentheses

Since: PMD 5.0

Priority: Medium Low (4)

Description:

不要な括弧は削除する。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/UnnecessaryParentheses" />

Example:

var x = 1; // OK
var y = (1 + 1); // OK
var z = ((1 + 1)); // NG 括弧を過剰に書かない

UnreachableCode

公式ドキュメント: UnreachableCode

Since: PMD 5.0

Priority: High (1)

Description:

return, break, continue, throw 文は、ブロックの中で最後に記述する。
これより後の文は決して実行されない。
return, break, continue, throw 文以降に処理が記載されているのはバグ、あるいは極めて稚拙なスタイルである。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/UnreachableCode" />

Example:

// OK
function foo() {
   return 1;
}

// NG
// return以降に処理を記載しない
function bar() {
   var x = 1;
   return x;
   x = 2;
}

WhileLoopsMustUseBraces

公式ドキュメント: WhileLoopsMustUseBraces

Since: PMD 5.0

Priority: Medium (3)

Description:

中括弧を使用しないwhile文の使用は避ける。

Configuration:

<rule ref="category/ecmascript/codestyle.xml/WhileLoopsMustUseBraces" />

Example:

// OK
while (true) {
    x++;
}

// NG
// while文を使用する際には必ず「{}」を付ける
while (true)
    x++;

PMD 7.0のルールについて、以下の記事も書いています。

HTML Rule:

olafnosuke.hatenablog.com

JavaScript Rule - Best Practices:

olafnosuke.hatenablog.com

JavaScript Rule - Error Prone:

olafnosuke.hatenablog.com