VS Code Python autopep8 не учитывает отступы в 2 пробела

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

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

Но у меня не работает.

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

введите описание изображения здесь

==== РЕДАКТИРОВАТЬ ====

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


person Logan Yang    schedule 29.01.2019    source источник
comment
Мне любопытно, почему вы хотите иметь 2 пробела (висящего) отступа; стандартно - 4 пробела.   -  person 9769953    schedule 31.01.2019
comment
Это просто предпочтение. Вопрос в том, есть ли способ это настроить.   -  person Logan Yang    schedule 31.01.2019
comment
Я понимаю, в чем ваш вопрос. Но я склонен сказать: идите со стандартом / остальным миром. Это значительно упрощает работу, в том числе возможность делиться своим кодом с другими.   -  person 9769953    schedule 31.01.2019
comment
Согласно github.com/google/vim-codefmt/issues/24, похоже, что autopep8 не продвинулся в этом. Так что либо выберите в качестве форматтера черный, yapf. Я предпочитаю использовать 2 пробела в качестве отступа. Просто потому, что некоторые компании, например Google, используют этот стиль для экономии места.   -  person Kimmi    schedule 31.05.2019
comment
Эй, ребята. Я борюсь с этой ошибкой с тех пор, как начал кодировать python с помощью vscode. Меня это ОЧЕНЬ РАЗДРАЖАЕТ. установка "python.formatting.autopep8Args": ["--indent-size=2"] внутрь settings.json РАБОТАЕТ для меня. СПАСИБО.   -  person canbax    schedule 29.10.2020


Ответы (1)


Мне также пришлось включить это в свой массив в 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#L104

Из-за этого создается впечатление, что висячий отступ просто не соответствует параметру --indent-size ...

person Kris O'Mealy    schedule 26.10.2019
comment
Спасибо, теперь я могу писать лишний пробел перед знаком равенства. - person ibnǝꟻ; 12.11.2020