Код VS Python autopep8 не учитывает 2 пробела, висящих отступы

Я пытаюсь заставить autopep8 работать с правильным отступом кода Python с 2 пробелами вместо 4. Я использую VS Code с расширением Python, который использует autopep8 для форматирования. Я обнаружил, что autopep8 может быть настроен на использование 2 пробелов

"python.formatting.autopep8Args": ["--indent-size=2"]

Но это не работает для меня.

Моя ситуация такая. Когда я нажимаю ввод, он корректно начинает следующую строку с тем же отступом, что и предыдущая строка. Нажмите ввод после открывающей круглой скобки, она правильно начинает новую строку с еще 2 пробелами. Но когда я вставляю или сохраняю (у меня для "editor.formatOnPaste" и "editor.formatOnSave" установлено значение true), происходит раздражающая вещь: все отступы в двух пробелах внутри скобок становятся равными 4 (другие отступы в двух пробелах не затрагиваются), Почему это происходит, и как я могу сделать это 2 пробела везде?

==== ====EDIT

Я обнаружил, что ошибка Pylint Wrong hanging indentation (remove 2 spaces). [bad-continuation], Это потому, что мой pylintrc indent-after-paren=2, Мне интересно, может ли autopep8 или другой форматировщик Python установить это свойство?

4 ответа

Добавление--indent-size=2 --ignore=E121работал на меня.

Мне также пришлось включить это в свой массив в settings.json, аналогичный вашему.

"--ignore E121"

Согласно https://pypi.org/project/autopep8/, этот параметр гарантирует, что ваши отступы кратны 4. Если этого не сделать, используется настроенный размер вкладки в VSCode.

E121 - Fix indentation to be a multiple of four.

При этом ваш отступ по-прежнему "приемлем" согласно pep8, поэтому он фактически не изменит его на 4 пробела, которые вы ожидаете в своих парах. Мне пришлось превзойти свой на один уровень, а затем, когда он снова заработал, это не изменило его.

К сожалению, на самом деле это всего лишь обходной путь, который негативно влияет на другие правила отступов...

Вы можете видеть в коде для pep8, что они жестко запрограммировали размер вкладки по умолчанию, чтобы он был "способом Python" (4 пробела) в:

https://github.com/hhatto/autopep8/blob/120537a051d7f3cbbb5c4ede19b9e515156bd3d1/autopep8.py

Это выглядит так, будто висячий отступ просто не соответствует параметру --indent-size...

С использованием"autopep8.args"вместо"python.formatting.autopep8Args"работал у меня.

      "autopep8.args": [
  "--indent-size=2"
]

была такая же проблема, вот решение:

  1. Перейдите в каталог библиотеки вашей среды
  2. Откройте autopep8.py
  3. Найдите «DEFAULT_INDENT_SIZE» и измените его на 2.
Другие вопросы по тегам