Код Vetur/Eslint/VS - невозможно установить пробел между скобками для файлов .vue

Я не могу понять, как установить конфигурацию для пробела между скобками функций. Я установил для параметра везде значение true, но когда я сохраняю файл .vue, пробел удаляется — после удаления он выделяется как ошибка (Missing space between function parentheses). Это происходит в разделе script. В .js файлах добавлены пробелы, но тоже выделены как ошибки, на этот раз... Unexpected space between function parentheses?! Была некоторая конфигурация настроек (которую я сейчас не могу воссоздать), когда при сохранении место на мгновение добавлялось, а затем снова удалялось в .vue файлах.

мои настройки.json

"vetur.format.defaultFormatter.js": "prettier", // tried both prettier and typescript
// "vetur.format.defaultFormatter.js": "vscode-typescript", // tried both prettier and typescript
"javascript.format.insertSpaceBeforeFunctionParenthesis": true,
"typescript.format.insertSpaceBeforeFunctionParenthesis": true,
"vetur.format.defaultFormatterOptions": {
    "prettier": {
        "singleQuote": true,
        "spaceBeforeFunctionParen": true,
        "eslintIntegration": true,
    },
    "vscode-typescript": {
        "singleQuote": true,
        "spaceBeforeFunctionParen": true,
        "eslintIntegration": true,
    }
},

.eslintrc.js

module.exports = {
    root: true,
    env: {
        node: true
    },
    'extends': [
        'plugin:vue/essential',
        '@vue/standard'
    ],
    rules: {
        'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
        'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',          
        "space-before-function-paren": ["error", "always"], //setting this to 'never' removes the error highlight in vue files, not js files
    },
    parserOptions: {
        parser: 'babel-eslint',
        sourceType: "module"
    }
}

Я прочитал миллион вопросов и установил пробелы между скобками функций во всех возможных настройках, которые я нашел в ответах. Тем не менее, процесс линтинга находит способ игнорировать все эти настройки и реализовать другой. Не говоря уже о том, что он выделяет ошибки, не соответствующие автоформатированию. Есть ли какие-либо другие настройки, которые мне все еще не хватает?


person Eggon    schedule 02.04.2020    source источник


Ответы (2)


Попробуй это:

npm install [email protected] --save-dev --save-exact

а затем перезапустите VS Code.

Prettier недавно обновился до v2, и если в вашем проекте локально не установлено Prettier, он будет использовать версию VS Code, которая, скорее всего, является последней версией. В prettier v2 space-before-function-paren стал значением по умолчанию и, следовательно, будет применяться ко всем вашим проектам, в которых не установлена ​​локальная версия prettier pre v2. Для меня использование какой-либо комбинации конфигураций, похоже, не сработало - это похоже на то, что prettier просто проигнорировал их все. Надеюсь это поможет.

person Cornelius    schedule 04.04.2020
comment
Спасибо за подсказку, но, к сожалению, она не сработала. Я установил красивее и перезапустил VSCode, но, похоже, это не дало никакого эффекта (ничего не сломалось;)). - person Eggon; 04.04.2020
comment
Ах облом! Надеюсь, ты разберешься. Это больно и такая пустая трата времени... - person Cornelius; 04.04.2020
comment
Не могу не согласиться. Время, которое я потратил на настройку этих инструментов, которые должны экономить время... Наверное, я соглашусь с отсутствием места. По крайней мере, мне удалось заставить линтер автоматически исправляться и не показывать ошибки. Тем не менее, он не форматирует должным образом все файлы .js (отступы), но я думаю, что это материал для еще одного вопроса. - person Eggon; 04.04.2020
comment
Это решило мою проблему, в моем случае у меня не было пробелов после функций во всем моем проекте, и внезапно он начал добавлять пробелы. К счастью, я нашел это довольно быстро, иначе я бы весь день раздражался :P - person Evertvdw; 07.04.2020

До Prettier v2 кажется, что он не поддерживает правило пробела перед функцией. Поэтому мы должны отключить правило выше, чтобы разрешить конфликт.

Попробуй это

module.exports = {
  rules: {
    'space-before-function-paren': 'off'
  }
}

в файле конфигурации ESLint (например, .eslintrc.js), расположенном в корневом каталоге проекта.

Затем мы должны добавить следующее в settings.json в VS Code.

  "editor.formatOnSave": true,
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  },

И последнее, но не менее важное: отключение расширения Vetur в VS Code может быть лучшим выбором.

person liuliang    schedule 06.04.2020
comment
ну, это вызовет широкомасштабный рефакторинг кода, в который мы действительно не хотим вникать, я думаю? - person zmou-d; 11.10.2020