在使用 ESLint 和 Prettier 的 Visual Studio Code 中处理 .vue 文件时,似乎我无法正确地自动修复 vue/max-attributes-per-line。
例如,将 vue/max-attributes-per-line 设置为“关闭”,并且我尝试手动添加换行符,它会更正它以始终将每个元素放在不超过一行的位置,无论它是 81、120 , 200 或更多字符宽。 我怎样才能弄清楚是什么迫使我的标记元素恰好在一行上?
我正在使用 ESLint 5.1.0 版和 Visual Studio Code(没有 Prettier 扩展)和 Prettier 1.14.2。
这是 .vue 文件中的示例——无论我做什么,当 'vue/max-attributes-per-line': 'off'
. 每次我保存时,它都会强制一长串标记都在一行上。
<template>
<font-awesome-icon v-if="statusOptions.icon" :icon="statusOptions.icon" :spin="statusOptions.isIconSpin" :class="['saving-indicator', 'pl-1', 'pt-1', statusOptions.iconClasses]" />
</template>
如果我设置'vue/max-attributes-per-line': 2
,它的格式是这样的,只有一个换行符(这也是非常错误的)。
<font-awesome-icon
v-if="statusOptions.icon"
:icon="statusOptions.icon"
:spin="statusOptions.isIconSpin"
:class="['saving-indicator', 'pl-1', 'pt-1', statusOptions.iconClasses]"
/>
如果我尝试手动重新格式化它,它只会在我保存时恢复到上述状态。
此外,当我按 Ctrl+S 时,它似乎重新格式化了两次:首先它重新格式化以将其全部放在一行上,然后半秒后格式化上述结果。 有什么想法吗?是什么导致了这种怪异——是否有多个重新格式化程序正在运行?我如何弄清楚第一个是禁用它?
VS Code 工作区设置:
{
"editor.formatOnType": false,
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"[javascript]": {
"editor.tabSize": 2
},
"[vue]": {
"editor.tabSize": 2
},
"[csharp]": {
"editor.tabSize": 4
},
"javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": true,
"javascript.referencesCodeLens.enabled": true,
"vetur.validation.script": false,
"vetur.validation.template": false,
"eslint.autoFixOnSave": true,
"eslint.alwaysShowStatus": true,
"eslint.options": {
"extensions": [
".html",
".js",
".vue",
".jsx"
]
},
"eslint.validate": [
{
"language": "html",
"autoFix": true
},
{
"language": "vue",
"autoFix": true
},
"vue-html",
{
"language": "javascript",
"autoFix": true
},
{
"language": "javascriptreact",
"autoFix": true
}
],
"editor.rulers": [
80,
100
]
}
.eslintrc.js:
module.exports = {
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
node: true,
jest: true
},
globals: {
expect: true
},
extends: [
'prettier',
'plugin:vue/recommended', // /base, /essential, /strongly-recommended, /recommended
'plugin:prettier/recommended', // turns off all ESLINT rules that are unnecessary due to Prettier or might conflict with Prettier.
'eslint:recommended'
],
plugins: ['vue', 'prettier'],
rules: {
'vue/max-attributes-per-line': 'off',
'prettier/prettier': [ // customizing prettier rules (not many of them are customizable)
'error',
{
singleQuote: true,
semi: false,
tabWidth: 2
},
],
'no-console': 'off'
}
}
在不更改任何设置的情况下,ESLint --fix
确实可以正确格式化——将我所有的 .vue 模板元素正确地分成多行。那么有什么想法可以让 VS Code 成形吗?上述设置没有帮助,但我什至不知道是什么在干扰。有任何想法吗?
需要强调的是,当我在 VS Code 中保存时,一个长的 HTML 元素会折叠成一行,然后在半秒后断成两行,这一切都来自一次保存操作。我希望它把它分成多行。如果它需要多次保存,那将是可以的,但第一次保存会显示此行为以及随后的每次保存。