我们厌倦了掉毛。所以我们想在我们的项目中使用黑色。不幸的是,它几乎改变了我们项目中的所有其他行,这会使我们丢失大部分作者信息。我们annotate在 pycharm 中使用或git blame很多来确定在查看特定代码片段时与谁交谈。在一次提交中更改大量文件时,如何保留这些信息?
编辑:由于这是这个问题的重复,我想专注于“尽可能好”的方法。
让我们假设 lint 提交是由人工(但已知)作者创建的,因此用作标志。那么是否可以创建一个git blame类似的输出来显示自此关键 lint 提交以来的所有作者以及在该提交中更改的行的任何先前作者?
我意识到这对于拆分/合并的线路效果不佳,但它至少提供了一种更快的方法来限制潜在人员与 1、2、3 人交谈的范围。
假设exclude_from_black.py我的项目根目录中有以下 python 文件:
print('I want single quotes')
Run Code Online (Sandbox Code Playgroud)
我试图从黑色重新格式化中排除此文件,但以下命令似乎都不起作用:
black --exclude="exclude_from_black.py"
black --exclude="exclude_from_black\.py"
black --exclude="exclude\_from\_black\.py"
Run Code Online (Sandbox Code Playgroud)
根据文档,该exclude参数采用正则表达式。我在这里做错了什么?
我flake8用于 linting 和black格式化。
flake8对执行规则和格式规则产生警告:
我只想看执行规则。我不关心格式规则,因为它们会通过black格式自动修复:
我可以通过运行一次禁用这些规则flake8 --ignore=E271,E225,W291,E231。但是,没有要禁用的格式规则的详尽列表,必须一次发现一个。拥有类似于 JavaScript 的 eslint 的东西会很棒,其中有一个插件可以禁用代码格式化程序涵盖的所有格式化规则。
有没有类似的方法来禁用所有格式规则的flake8?
解决方案:根据以下答案,我最终忽略了使用此命令的所有格式规则:
flake8 --ignore=E101,E111,E114,E115,E116,E117,E12,E13,E2,E3,E401,E5,E70,W1,W2,W3,W5 file.py
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用适用于Python的Black代码格式化程序。在超过90%的情况下,我对输出(使用默认配置)感到满意,但是它经常发生,它以对我来说似乎很丑陋的方式格式化某些行。
这是一个使用黑色格式化前后的示例。
这两行的语法本来是相同的(相同的函数,相同数量的参数...),所以以相同的方式格式化它们是有意义的。但是,由于第一行稍长,Black对其格式有所不同,这使得阅读和解释代码变得更加困难。
当然,在这种特定情况下,您可以增加linelengthBlack 的参数,但这通常并不能真正解决问题,我想坚持使用默认配置。
我遇到过许多这样的情况,也使用其他格式化程序,例如JavaScript的Prettier。您如何处理这些情况?例如,是否有一种方法可以告诉Black忽略这些特定行而不格式化它们?
我已将 black 和 flake8 加载到诗歌虚拟环境中。我想将默认线长度更改为黑色或 flake8,以便他们同意。做这个的最好方式是什么?
我正在使用black==20.8b1.
我有一个很长的字符串,如:
return f"{self.name}, a {adjective.to_name()} {kin_string}{self._type.to_name()} who works for the {target.get_relationship_target_string()}."
Run Code Online (Sandbox Code Playgroud)
我跑:
$ black -l 80 . -t py38
All done! ? ?
2 files left unchanged.
Run Code Online (Sandbox Code Playgroud)
为什么字符串没有包裹?我认为现在black支持包装字符串(基于github中的问题)。
我们可以在 VS Code中使用Ctrl++来自动格式化代码。vscode 断行超过 80 个字符。改变并不会改变它。我想把 120 放入我的 python 代码中。解决办法是什么?Shiftilinewidth
我在挖掘以前的问题时没有发现类似的问题。
这是我的setting.json:
{
"workbench.panel.defaultLocation": "right",
"workbench.startupEditor": "none",
"workbench.sideBar.location": "right",
"python.pythonPath": "/usr/bin/python3",
"editor.minimap.enabled": false,
"workbench.colorTheme": "Monokai",
"C_Cpp.updateChannel": "Insiders",
"update.showReleaseNotes": false,
"update.mode": "manual",
"workbench.editorAssociations": [
{
"viewType": "jupyter.notebook.ipynb",
"filenamePattern": "*.ipynb"
}
],
"files.associations": {
"*.rmd": "markdown"
},
"window.zoomLevel": 1,
"prettier.printWidth": 120,
"editor.wordWrap": "wordWrapColumn",
"editor.wrappingIndent": "same",
"editor.wordWrapColumn": 120
}
Run Code Online (Sandbox Code Playgroud)
正如@Subrato 建议的那样,这对我有用:
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[python]": {
"editor.defaultFormatter": null
},
"python.formatting.blackArgs": ["--line-length", "120"],
"python.formatting.provider": "black",
Run Code Online (Sandbox Code Playgroud) 我喜欢从精心设计的 Python 项目中获取灵感。
最后一个给我启发的是诗歌库。
我从中复制了很多,但这篇文章的主题是black和isort。
两者都配置良好pyproject.toml:
[tool.isort]
profile = "black"
...
known_first_party = "poetry"
[tool.black]
line-length = 88
include = '\.pyi?$'
exclude = '''
/(
...
)/
'''
Run Code Online (Sandbox Code Playgroud)
格式设置如下Makefile:
format: clean
@poetry run black poetry/ tests/
Run Code Online (Sandbox Code Playgroud)
我认为运行make format会运行black,它将在内部运行isort,但是当我运行时isort .,它随后正确地格式化了导入语句。然后好像black没跑isort。
问:内部运行吗?blackisort
在 VSCode 中,使用 Python 3.9 和 black==22.6.0,我的项目结构如下:
--- root
------src
---------module0.py
---------module1.py
------tests
---------test_folder0
------------test_file0.py
------------test_file1.py
---------test_folder1
---------etc.
Run Code Online (Sandbox Code Playgroud)
我pyproject.toml无法获得extend-exlude实际排除我的测试文件的部分。我已经尝试了多种不同的方法,包括整个测试文件夹以及 test_whatever.py 文件,但似乎没有任何效果,即使我的各种尝试已经过https://regex101.com/的验证。最简单的例子:
[tool.black]
line-length = 200
target-version = ['py39']
include = '\.pyi?$'
extend-exclude = '''.*test_.*'''
Run Code Online (Sandbox Code Playgroud)
要么我的正则表达式错误(或者黑色需要一些修改),要么 VSCode 忽略我的项目配置或 idk。
我正在使用预提交black和flake8钩子。
我error: cannot format在尝试对以下代码进行黑色格式化时得到了这个
from {{cookiecutter.project_name}} import my_module
Run Code Online (Sandbox Code Playgroud)
无论如何,是否有指示黑色,跳过/忽略特定于 cookiecutter 的语法?
python-black ×10
python ×7
flake8 ×2
cookiecutter ×1
formatting ×1
git ×1
git-blame ×1
isort ×1
lint ×1
pre-commit ×1
regex ×1
word-wrap ×1