Как использовать yapf в VSCode

Я установил yapf, используя:

conda install yapf

и добавьте следующие строки в мой .vscode/settings.json файл:

{
    //"python.linting.pylintEnabled": true,
    //"python.linting.pycodestyleEnabled": false,
    //"python.linting.flake8Enabled": true,
    "python.formatting.provider": "yapf",
    "python.formatting.yapfArgs": [
        " — style",
        "{based_on_style: pep8, indent_width: 4}"
    ],
    "python.linting.enabled": true,
}

Но я не могу понять, как его использовать - он не показывает ошибок в плохо отформатированном скрипте:

import pandas as pd

class MyClass(object):
    def __init__(self, some_value: int):
        self.value = some_value
    def one_more_function(self, another_value):
        print(another_value)
myObject = MyClass(45)
myObject.one_more_function(2)
my__object2 = MyClass(324)

    print('ok')
def some_foo():
    """
    """
    pass

4 ответа

Решение

Проблема была в неправильных настройках. Для использования yapf, black или autopep8 вам необходимо:

  1. Установите yapf / black / autopep8 (pip install black)
  2. Настроить .vscode/settings.json следующим образом:

часть файла:

{
    "python.linting.enabled": true,
    "python.linting.pylintPath": "pylint",
    "editor.formatOnSave": true,
    "python.formatting.provider": "yapf", // or "black" here
    "python.linting.pylintEnabled": true,
}

Ключевой вариант - "editor.formatOnSave": true, это значит yapf форматирует ваш документ каждый раз, когда вы его сохраняете.

Расширение @Mikhail_Samотвечать. Вы можете использовать отдельный файл конфигурации, как мне нравится. Таким образом, вы отделяете настройки своего проекта от VS Code IDE. Для этого вам необходимо создать:

      type null > .style.yapf   (for windows environment)
touch .style.yapf    (for MacOS, Linux environments)

Добавьте правила, например:

      [style]
based_on_style = google
spaces_before_comment = 4
indent_width: 2
split_before_logical_operator = true
column_limit = 80

Не забудьте удалить из кода VS следующий параметр. Они отменяют .style.yapf:

      "python.formatting.yapfArgs": [
  "--style={based_on_style: google, column_limit: 80, indent_width: 2}"
],

Мои другие настройки VS Code в settings.json:

      "[python]": {
  "editor.defaultFormatter": "ms-python.python",
  "editor.formatOnSave": true
},
"python.formatting.provider": "yapf",
"python.formatting.yapfPath": "C:\\ProgramData\\envCondaPy379\\Scripts\\yapf.exe",
"python.formatting.blackPath": "C:\\ProgramData\\envCondaPy379\\Scripts\\black.exe",
"python.linting.lintOnSave": true,
"python.linting.enabled": true,
"python.linting.pylintPath": "pylint",
"python.linting.pylintEnabled": true,

Согласно документации YAPF : YAPF будет искать стиль форматирования следующим образом:

  1. Указывается в командной строке >> VS Code settings.json
  2. В разделе [style] файла .style.yapf либо в текущем каталоге, либо в одном из его родительских каталогов.
  3. В разделе [yapf] файла setup.cfg либо в текущем каталоге, либо в одном из его родительских каталогов.
  4. В разделе [style] файла ~ / .config / yapf / style в вашем домашнем каталоге.
  5. Если ни один из этих файлов не найден, используется стиль по умолчанию (PEP8).

Ответ от 2022 года

Если вы предпочитаете «GUI», вы также можете напрямую ввести эти значения в настройках (Файл-> Настройки-> Настройки):

Может быть другая причина.

Об этом коде детали:

      import pandas as pd

class MyClass(object):
    def __init__(self, some_value: int):
        self.value = some_value
    def one_more_function(self, another_value):
        print(another_value)
myObject = MyClass(45)
myObject.one_more_function(2)
my__object2 = MyClass(324)

    print('ok')
def some_foo():
    """
    """
    pass

Я напрямую форматирую его с помощью yapf CLI, там написано:

      yapf: t.py:12:4: unexpected indent

Это означает:print('ok')В строке неправильный отступ, из-за чего yapf не работает.

Когда я изменил правый отступ, это сработало.

Другие вопросы по тегам