版本

key-spacing

強制物件實字屬性中鍵和值之間的一致間距

🔧 可修正

此規則回報的某些問題可以透過 --fix 命令列 選項自動修正

重要

此規則已在 ESLint v8.53.0 中棄用。請使用 @stylistic/eslint-plugin-js 中的對應規則

了解更多

此規則強制物件實字屬性中冒號周圍的間距。它可以個別驗證每個屬性,或者它可以確保物件實字中相鄰屬性的水平對齊。

規則詳細資訊

此規則強制物件實字屬性中鍵和值之間的一致間距。 在長行的情況下,在允許空格的任何地方添加新行是可以接受的。

選項

此規則具有物件選項

  • "beforeColon": false (預設) | true
    • false:禁止物件實字中鍵和冒號之間的空格。
    • true:要求物件實字中鍵和冒號之間至少有一個空格。
  • "afterColon": true (預設) | false
    • true:要求物件實字中冒號和值之間至少有一個空格。
    • false:禁止物件實字中冒號和值之間的空格。
  • "mode": "strict" (預設) | "minimum"
    • "strict":強制物件實字中冒號之前或之後只有一個空格。
    • "minimum":強制物件實字中冒號之前或之後有一個或多個空格。
  • "align": "value" | "colon"
    • "value":強制物件實字中值的水平對齊。
    • "colon" 強制物件實字中冒號和值的水平對齊。
  • 當值在物件實字中對齊時,具有物件值的 "align" 允許進行細緻的間距設定。
  • "singleLine" 指定單行物件實字的間距樣式。
  • "multiLine" 指定多行物件實字的間距樣式。

請注意,您可以選擇使用頂層選項或分組選項(singleLinemultiLine),但不能同時使用兩者。

beforeColon

使用預設 { "beforeColon": false } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "beforeColon": false }]*/

var obj = { "foo" : 42 };

使用預設 { "beforeColon": false } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "beforeColon": false }]*/

var obj = { "foo": 42 };

使用 { "beforeColon": true } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "beforeColon": true }]*/

var obj = { "foo": 42 };

使用 { "beforeColon": true } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "beforeColon": true }]*/

var obj = { "foo" : 42 };

afterColon

使用預設 { "afterColon": true } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "afterColon": true }]*/

var obj = { "foo":42 };

使用預設 { "afterColon": true } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "afterColon": true }]*/

var obj = { "foo": 42 };

使用 { "afterColon": false } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "afterColon": false }]*/

var obj = { "foo": 42 };

使用 { "afterColon": false } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "afterColon": false }]*/

var obj = { "foo":42 };

mode

使用預設 { "mode": "strict" } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "mode": "strict" }]*/

call({
    foobar: 42,
    bat:    2 * 2
});

使用預設 { "mode": "strict" } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "mode": "strict" }]*/

call({
    foobar: 42,
    bat: 2 * 2
});

使用 { "mode": "minimum" } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "mode": "minimum" }]*/

call({
    foobar: 42,
    bat:    2 * 2
});

align

使用 { "align": "value" } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "align": "value" }]*/

var obj = {
    a: value,
    bcde:  42,
    fg :   foo()
};

使用 { "align": "value" } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "align": "value" }]*/

var obj = {
    a:    value,
    bcde: 42,

    fg: foo(),
    h:  function() {
        return this.a;
    },
    ijkl: 'Non-consecutive lines form a new group'
};

var obj = { a: "foo", longPropertyName: "bar" };

使用 { "align": "colon" } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "align": "colon" }]*/

call({
    foobar: 42,
    bat:    2 * 2
});

使用 { "align": "colon" } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", { "align": "colon" }]*/

call({
    foobar: 42,
    bat   : 2 * 2
});

align

align 選項可以透過 beforeColonafterColonmodeon 選項進行額外設定。

如果 align 定義為物件,但未提供所有參數,則未定義的參數將預設為以下值

// Defaults
align: {
    "beforeColon": false,
    "afterColon": true,
    "on": "colon",
    "mode": "strict"
}

使用範例 { "align": { } } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", {
    "align": {
        "beforeColon": true,
        "afterColon": true,
        "on": "colon"
    }
}]*/

var obj = {
    "one"   : 1,
    "seven" : 7
}
在 Playground 中開啟
/*eslint key-spacing: ["error", {
    "align": {
        "beforeColon": false,
        "afterColon": false,
        "on": "value"
    }
}]*/

var obj = {
    "one":  1,
    "seven":7
}

align 和 multiLine

multiLinealign 選項可能不同,這允許對檔案的 key-spacing 進行微調控制。 如果 align 設定為物件,則 align不會multiLine 繼承。

當物件實字跨越多行時,會使用 multiLine。 當同一個物件中有一組屬性時,會使用 align 設定。 例如

var myObj = {
  key1: 1, // uses multiLine

  key2: 2, // uses align (when defined)
  key3: 3, // uses align (when defined)

  key4: 4 // uses multiLine
}

使用範例 { "align": { }, "multiLine": { } } 選項時,不正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", {
    "multiLine": {
        "beforeColon": false,
        "afterColon":true
    },
    "align": {
        "beforeColon": true,
        "afterColon": true,
        "on": "colon"
    }
}]*/

var obj = {
    "myObjectFunction": function() {
        // Do something
    },
    "one"             : 1,
    "seven"           : 7
}

使用範例 { "align": { }, "multiLine": { } } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint key-spacing: ["error", {
    "multiLine": {
        "beforeColon": false,
        "afterColon": true

    },
    "align": {
        "beforeColon": true,
        "afterColon": true,
        "on": "colon"
    }
}]*/

var obj = {
    "myObjectFunction": function() {
        // Do something
        //
    }, // These are two separate groups, so no alignment between `myObjectFunction` and `one`
    "one"   : 1,
    "seven" : 7 // `one` and `seven` are in their own group, and therefore aligned
}

singleLine 和 multiLine

使用範例 { "singleLine": { }, "multiLine": { } } 選項時,正確程式碼範例

在 Playground 中開啟
/*eslint "key-spacing": [2, {
    "singleLine": {
        "beforeColon": false,
        "afterColon": true
    },
    "multiLine": {
        "beforeColon": true,
        "afterColon": true,
        "align": "colon"
    }
}]*/
var obj = { one: 1, "two": 2, three: 3 };
var obj2 = {
    "two" : 2,
    three : 3
};

何時不該使用

如果您有另一個屬性間距慣例可能與可用選項不一致,或者如果您想同時允許多種樣式,您可以安全地停用此規則。

版本

此規則在 ESLint v0.9.0 中引入。

資源

變更語言