PMD JavaScript Rules (ver 7.0.0-rc4)- Error Prone

PMDバージョン: 7.0.0-rc4

AvoidTrailingComma

公式ドキュメント: AvoidTrailingComma

Since: PMD 5.1

Priority: High (1)

Description:

ブラウザによってオブジェクトや配列リテラルの末尾のコンマの扱いが異なるため、末尾にコンマを書かないように留意することでコードの移植性を向上させるのに役立つ。

Property:

名前 デフォルト値 説明 複数指定
allowObjectLiteral false オブジェクトリテラル内の最後のカンマを許可する -
allowArrayLiteral false 配列リテラル内の末尾のカンマを許可する -

Configuration:

<rule ref="category/ecmascript/errorprone.xml/AvoidTrailingComma" />

<rule ref="category/ecmascript/errorprone.xml/AvoidTrailingComma">
    <properties>
        <property name="allowObjectLiteral" value="false" />
        <property name="allowArrayLiteral" value="false" />
    </properties>
</rule>

Example:

function(arg) {
  var obj1 = { a : 1 };   // OK
  var arr1 = [ 1, 2 ];    // OK

  var obj2 = { a : 1, };  // NG 一部のブラウザで構文エラーが発生
  var arr2 = [ 1, 2, ];   // NG ブラウザによって、長さ2または3となる
}

EqualComparison

公式ドキュメント: EqualComparison

Since: PMD 5.0

Priority: Medium (3)

Description:

条件付きで==を使用すると、変数が自動的に同じ型にキャストされるため、予期しない結果になることがある。 演算子===を使うと、キャスティングが回避される。

Configuration:

<rule ref="category/ecmascript/errorprone.xml/EqualComparison" />

Example:

// OK
if (someVar === true) {
  ...
}

// OK
if (someVar !== 3) {
  ...
}

// NG
// someVarが暗黙的にキャストされるため、予期せぬ挙動を示す可能性がある
if (someVar == true) {
  ...
}

// NG
// someVarが暗黙的にキャストされるため、予期せぬ挙動を示す可能性がある
if (someVar != 3) {
  ...
}

InnaccurateNumericLiteral

公式ドキュメント: InnaccurateNumericLiteral

Since: PMD 5.0

Priority: Medium High (2)

Description:

数値リテラル浮動小数点数の精度を高くしすぎた場合に実行時に異なる値を持つ可能性がある。 その結果、数値計算がエラーになることがある。

Configuration:

<rule ref="category/ecmascript/errorprone.xml/InnaccurateNumericLiteral" />

Example:

var a = 9; // OK
var b = 999999999999999; // OK
var c = 999999999999999999999; // NG 
var w = 1.12e-4; // OK
var x = 1.12; // OK
var y = 1.1234567890123; // OK
var z = 1.12345678901234567; // NG

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

HTML Rule:

olafnosuke.hatenablog.com

JavaScript Rule - Best Practices:

olafnosuke.hatenablog.com

JavaScript Rule - Code Style:

olafnosuke.hatenablog.com