| import/extensions | error | ["ignorePackages", { js: "never", mjs: "never", jsx: "never", vue: "always" }] | 强制文件扩展名规范 |
| import/no-extraneous-dependencies | error | { devDependencies: [...] } | 禁止引入无关依赖 |
| jsx-quotes | error | "prefer-double" | 强制JSX属性使用双引号 |
| react/jsx-boolean-value | error | ["never", { always: [] }] | 禁止布尔属性显式值 |
| react/jsx-closing-bracket-location | error | "line-aligned" | 闭合括号对齐规则 |
| react/jsx-closing-tag-location | error | - | 闭合标签位置校验 |
| react/jsx-curly-spacing | error | ["never", { allowMultiline: true }] | 禁止大括号内空格 |
| react/jsx-indent-props | error | 2 | JSX属性缩进2空格 |
| react/jsx-max-props-per-line | error | { maximum: 1, when: "multiline" } | 每行最多1个属性(多行时) |
| react/jsx-no-bind | error | { ignoreRefs: false, allowArrowFunctions: true } | 禁止JSX中不必要的函数绑定 |
| react/jsx-no-duplicate-props | error | { ignoreCase: true } | 禁止重复属性 |
| react/jsx-pascal-case | error | { allowAllCaps: true, ignore: [] } | 强制组件帕斯卡命名 |
| vue/jsx-uses-vars | error | - | 防止JSX变量未使用 |
| vue/comment-directive | error | - | 强制Vue注释指令格式 |
| vue/require-render-return | error | - | 要求render函数返回内容 |
| react/self-closing-comp | error | - | 强制自闭合组件格式 |
| react/jsx-wrap-multilines | error | { declaration: "parens-new-line" } | 多行JSX包裹格式 |
| react/jsx-first-prop-new-line | error | "multiline-multiprop" | 多属性换行格式 |
| react/jsx-equals-spacing | error | "never" | 禁止等号周围空格 |
| react/jsx-indent | error | 2 | JSX缩进2空格 |
| react/jsx-no-target-blank | error | { allowReferrer: true } | 安全空白target校验 |
| react/jsx-filename-extension | error | { extensions: [".jsx", ".vue"] } | 限制JSX文件扩展名 |
| react/jsx-no-comment-textnodes | error | - | 禁止注释作为文本节点 |
| react/style-prop-object | error | - | 强制style属性为对象 |
| react/no-unescaped-entities | error | - | 禁止未转义HTML实体 |
| react/no-children-prop | error | - | 禁止直接传递children属性 |
| react/jsx-tag-spacing | error | { closingSlash: "never" } | 标签空格规范 |
| react/no-array-index-key | error | - | 禁止数组索引作为key |
| react/void-dom-elements-no-children | error | - | 禁止void元素包含子元素 |
| react/jsx-curly-brace-presence | error | { props: "never" } | 禁止不必要的大括号 |
| react/jsx-one-expression-per-line | error | { allow: "single-child" } | 每行单个表达式 |
| react/button-has-type | error | { reset: false } | 强制按钮类型声明 |
| react/jsx-props-no-multi-spaces | error | - | 禁止属性多个空格 |
| react/jsx-fragments | error | "syntax" | 强制使用简写片段语法 |
| react/jsx-curly-newline | error | { multiline: "consistent" } | 大括号换行一致性 |
| react/jsx-props-no-spreading | error | { html: "enforce" } | 限制属性展开使用 |
| react/jsx-no-script-url | error | - | 禁止javascript: URL |
| react/jsx-no-useless-fragment | error | - | 禁止不必要的片段 |
| react/no-namespace | error | - | 禁止命名空间组件 |
| react/no-invalid-html-attribute | error | - | 禁止无效HTML属性 |
| jsx-a11y/accessible-emoji | off | - | 禁用表情可访问性校验 |
| jsx-a11y/alt-text | error | { elements: [...] } | 强制替代文本 |
| jsx-a11y/anchor-has-content | error | { components: [] } | 锚点必须包含内容 |
| jsx-a11y/anchor-is-valid | error | { components: ["Link"] } | 锚点有效性校验 |
| jsx-a11y/aria-activedescendant-has-tabindex | error | - | activeDescendant需要tabindex |
| jsx-a11y/aria-props | error | - | 校验合法ARIA属性 |
| jsx-a11y/aria-proptypes | error | - | ARIA属性类型校验 |
| jsx-a11y/aria-role | error | { ignoreNonDOM: false } | 校验合法ARIA角色 |
| jsx-a11y/aria-unsupported-elements | error | - | 禁止不支持ARIA的元素 |
| jsx-a11y/autocomplete-valid | off | - | 禁用自动完成校验 |
| jsx-a11y/click-events-have-key-events | error | - | 点击事件需对应键盘事件 |
| jsx-a11y/control-has-associated-label | error | { ignoreElements: [...] } | 控件需关联标签 |
| jsx-a11y/heading-has-content | error | { components: [""] } | 标题必须包含内容 |
| jsx-a11y/iframe-has-title | error | - | iframe必须包含标题 |
| jsx-a11y/interactive-supports-focus | error | - | 交互元素需可聚焦 |
| jsx-a11y/label-has-associated-control | off | - | 禁用标签关联控件校验 |
| jsx-a11y/media-has-caption | error | { audio: [] } | 媒体元素需包含字幕 |
| jsx-a11y/mouse-events-have-key-events | error | - | 鼠标事件需对应键盘事件 |
| jsx-a11y/no-access-key | error | - | 禁止使用accessKey |
| jsx-a11y/no-autofocus | error | { ignoreNonDOM: true } | 禁止自动聚焦 |
| jsx-a11y/no-distracting-elements | error | { elements: [...] } | 禁止干扰性元素 |
| jsx-a11y/no-interactive-element-to-noninteractive-role | error | { tr: [...] } | 交互元素角色限制 |
| jsx-a11y/no-noninteractive-element-interactions | error | { handlers: [...] } | 非交互元素事件限制 |
| jsx-a11y/no-noninteractive-element-to-interactive-role | error | { ul: [...] } | 角色转换限制 |
| jsx-a11y/no-noninteractive-tabindex | error | { roles: [...] } | 非交互元素tabindex限制 |
| jsx-a11y/no-onchange | off | - | 禁用onChange校验 |
| jsx-a11y/no-redundant-roles | error | - | 禁止冗余ARIA角色 |
| jsx-a11y/role-has-required-aria-props | error | - | 角色需必要ARIA属性 |
| jsx-a11y/role-supports-aria-props | error | - | ARIA属性与角色匹配 |
| jsx-a11y/scope | error | - | scope属性限制 |
| jsx-a11y/tabindex-no-positive | error | - | 禁止正数tabindex |
| vue/max-len | error | [100, 2, { ignoreUrls: true }] | 行最大长度限制 |
| vue/html-indent | error | [2, { attribute: 1 }] | HTML缩进规则 |
| vue/max-attributes-per-line | error | { multiline: { max: 1 } } | 每行最大属性数 |
| vue/no-duplicate-attributes | error | { allowCoexistClass: true } | 禁止重复属性 |
| vue/html-self-closing | error | { html: { void: "any" } } | 自闭合标签规则 |
| vue/first-attribute-linebreak | error | { multiline: "below" } | 首属性换行规则 |
| vue/no-spaces-around-equal-signs-in-attribute | error | - | 属性等号无空格 |
| vue/no-template-target-blank | error | { allowReferrer: true } | 安全target="_blank"校验 |
| vue/no-child-content | error | - | 禁止子内容 |
| vue/html-closing-bracket-spacing | error | { selfClosingTag: "always" } | 闭合括号空格规则 |
| vue/html-button-has-type | error | { reset: false } | 按钮类型声明 |
| vue/no-multi-spaces | error | - | 禁止多个空格 |
| vuejs-accessibility/alt-text | error | { elements: [...] } | 可访问性替代文本 |
| vuejs-accessibility/anchor-has-content | error | { components: [] } | 锚点内容校验 |
| vuejs-accessibility/aria-props | error | - | ARIA属性校验 |
| vuejs-accessibility/aria-role | error | { ignoreNonDOM: false } | ARIA角色校验 |
| vuejs-accessibility/aria-unsupported-elements | error | - | 不支持ARIA的元素校验 |
| vuejs-accessibility/click-events-have-key-events | error | - | 点击事件键盘支持 |
| vuejs-accessibility/form-control-has-label | error | - | 表单控件标签关联 |
| vuejs-accessibility/heading-has-content | error | - | 标题内容校验 |
| vuejs-accessibility/iframe-has-title | error | - | iframe标题校验 |
| vuejs-accessibility/interactive-supports-focus | error | - | 交互元素聚焦支持 |
| vuejs-accessibility/label-has-for | error | { required: { some: [...] } } | 标签关联控件 |
| vuejs-accessibility/media-has-caption | error | - | 媒体字幕校验 |
| vuejs-accessibility/mouse-events-have-key-events | error | - | 鼠标事件键盘支持 |
| vuejs-accessibility/no-access-key | error | - | 禁止accessKey |
| vuejs-accessibility/no-autofocus | error | { ignoreNonDOM: true } | 禁止自动聚焦 |
| vuejs-accessibility/no-distracting-elements | error | { elements: [...] } | 禁止干扰元素 |
| vuejs-accessibility/no-onchange | off | - | 禁用onChange校验 |
| vuejs-accessibility/no-redundant-roles | error | - | 禁止冗余角色 |
| vuejs-accessibility/role-has-required-aria-props | error | - | 角色必要属性校验 |
| vuejs-accessibility/tabindex-no-positive | error | - | 禁止正数tabindex |
| vue/require-default-prop | error | - | 要求默认prop值 |
| vue/no-potential-component-option-typo | error | - | 组件选项拼写校验 |