# san/html-indent

<template> 中使用一致的缩进

  • ⚙️ 此规则包含于 "plugin:san/strongly-recommended""plugin:san/recommended".
  • 🔧 命令行 (opens new window)中的--fix选项可以自动修复此规则报告的一些问题。

# 📖 规则细节

此规则在 <template> 中要求使用一致的缩进样式。 默认样式为 2 个空格。

  • 此规则检查所有标签,指令以及插值语法中的所有表达式。
  • 在表达式中,此规则支持 ECMAScript 2020 语法。 它会忽略未知的 AST 节点,但可能会被非标准语法混淆。
<template> <!-- ✓ GOOD --> <div class="foo"> Hello. </div> <div class="foo"> Hello. </div> <div class="foo" foo="{{bar}}" > World. </div> <div id="a" class="b" other-attr="{{ {aaa: 1, bbb: 2} }}" on-other-attr2="foo()" > {{ displayMessage }} </div> <!-- ✗ BAD --> <div class="foo"> Hello. </div> </template>
Now loading...

# 🔧 配置

{
  "san/html-indent": ["error", 4, {
    "attribute": 1,
    "baseIndent": 1,
    "closeBracket": 0,
    "alignAttributesVertically": true,
    "ignores": []
  }]
}
  • 第二个参数代表缩进的类型,值可以是一个数字或者字符串 "tab",默认值为"2"。如果这是一个数字,它是一个缩进的空格数。如果这是"tab",它使用一个制表符缩进一个。
  • attribute (integer) ... 属性缩进的乘数。默认值为"1"。
  • baseIndent (integer) ... 最外层语句的缩进倍数。默认值为"1"。
  • closeBracket (integer | object) ... 右括号缩进的乘数。默认值为"0"。 您可以通过设置数值来应用以下内容。
    • closeBracket.startTag (integer) ... 开始标签右括号的缩进倍数 (<div>)。默认值为"0"。
    • closeBracket.endTag (integer) ... 结束标签右括号的缩进倍数 (</div>)。默认值为"0"。
    • closeBracket.selfClosingTag (integer) ... 自闭合标签右括号的缩进倍数 (<div/>)。默认值为"0"。
  • alignAttributesVertically (boolean) ... 在多行情况下,属性是否应该垂直对齐到第一个属性的条件。默认为true
  • ignores (string[]) ... 忽略节点的选择器。您可以使用 esquery (opens new window) 来选择节点。默认是一个空数组。

# 2, {"attribute": 1, "closeBracket": 1}

<template> <!-- ✓ GOOD --> <div id="a" class="b" other-attr= "{{ {longname: longvalue} }}" other-attr2 ="{{ {longname: longvalue} }}" > Text </div> </template>
Now loading...

# 2, {"attribute": 2, "closeBracket": 1}

<template> <!-- ✓ GOOD --> <div id="a" class="b" other-attr= "{{ {longname: longvalue} }}" other-attr2 ="{{ {longname: longvalue} }}" > Text </div> </template>
Now loading...

# 2, {"ignores": ["VAttribute"]}

<template> <!-- ✓ GOOD --> <div id="" class="" /> </template>
Now loading...

# 2, {"alignAttributesVertically": false}

<template> <!-- ✓ GOOD --> <div id="" class="" some-attr="" /> <!-- ✗ BAD --> <div id="" class="" some-attr="" /> </template>
Now loading...

# 2, {"baseIndent": 0}

<template> <!-- ✓ GOOD --> <div> <span> Hello! </span> </div> <!-- ✗ BAD --> <div> <span> Hello! </span> </div> </template>
Now loading...

# 🔍 实现