python代码自动格式化_代码的自动格式化
代碼格式化是一個(gè)在軟件開發(fā)過程中值得一提的話題。
所謂代碼格式化就是說,程序員在書寫代碼的過程中或者完成代碼開發(fā)后對(duì)代碼書寫格式排版的調(diào)整,使得已經(jīng)完成的代碼變的更美觀整潔也更具有可讀性,也能增加完成代碼后的成就感。
很多時(shí)候代碼格式化的功能甚至都被認(rèn)為是一個(gè)評(píng)價(jià)IDE或者編輯器好壞的主要標(biāo)準(zhǔn)。
不過今天的話題是代碼的自動(dòng)格式化,當(dāng)你了解到代碼的自動(dòng)格式化功能后,也許就不會(huì)以格式化功能來評(píng)價(jià)IDE了。
本文將會(huì)有如下幾個(gè)部分構(gòu)成:什么是代碼自動(dòng)格式化
代碼自動(dòng)格式化有什么好處
如何為自己的工程加入代碼自動(dòng)格式化的功能
后記
參考文獻(xiàn)
本文要求讀者至少能夠使用git來做項(xiàng)目的版本控制,以下的代碼應(yīng)該可以保證在windows(至少需要一個(gè)git bash或者直接安裝cmder) ,linux和mac上運(yùn)行。
什么是代碼的自動(dòng)格式化
當(dāng)我們?cè)谲浖_發(fā)過程中,以某種方式觸發(fā)代碼格式化程序?qū)ξ覀円呀?jīng)完成開發(fā)的代碼進(jìn)行格式修改,這個(gè)過程就是代碼的自動(dòng)格式化。
當(dāng)使用git對(duì)你的項(xiàng)目進(jìn)行版本控制時(shí),我們期望在你完成代碼后,做最終提交前對(duì)代碼的格式進(jìn)行美化,然后形成提交,最終提交到代碼倉庫中。
這樣就可以保證代碼庫里的代碼都是經(jīng)過格式化的,會(huì)讓我們的代碼在review,restructure,merge的過程中更輕松。
代碼自動(dòng)格式化有什么好處
我從別處摘抄來的,簡(jiǎn)單翻譯成中文如下:你不再需要一個(gè)代碼底層樣式指導(dǎo)手則了,因?yàn)榇a自動(dòng)格式化就會(huì)幫你處理這些問題。
使用代碼自動(dòng)格式化能減少非必要的討論,讓開發(fā)者更專注于寫有用的代碼。(似曾相識(shí)啊)
這樣使新人能夠更容易的融入項(xiàng)目,因?yàn)榇a的格式具有延續(xù)性。
因?yàn)榇蠹业母袷蕉际窍嗤?#xff0c;所以能夠減少代碼合并(merge)沖突。
我覺得這個(gè)總結(jié)還算不錯(cuò),我是懶人,當(dāng)提交前忘記格式化代碼,我一般都算了,使用自動(dòng)代碼格式化也可以減少被批評(píng)的數(shù)量。但是說到底靠人來保證一定要怎么樣,這件事還是太天真了。
如何為自己的工程加入代碼自動(dòng)格式化的功能
終于到了本文的重點(diǎn)了。當(dāng)使用git時(shí),代碼自動(dòng)格式化的功能會(huì)通過git的hook(鉤子)來實(shí)現(xiàn)。代碼格式化將被git的pre-commit鉤子調(diào)用,它會(huì)先格式化我們的代碼然后再提交代碼,這樣一個(gè)提交中就不會(huì)存在未被格式化的代碼了。
本文將會(huì)以JavaScript和Python為例說明具體實(shí)現(xiàn)的方式。請(qǐng)讀者至少了解軟件開發(fā)的基本工具,如nvm,node,npm,pyenv等內(nèi)容。
為JavaScript項(xiàng)目增加代碼自動(dòng)格式化
下面是從create-react-app的文檔中摘抄而來,并且做了一些必要的解釋,它不僅可以在react項(xiàng)目里工作,使用了webpack的項(xiàng)目應(yīng)該都是可行的。
第一步,安裝husky,lint-staged,prettier。husky將npm的腳本集成與git的hook上,lint-staged則可以執(zhí)行多個(gè)stage的任務(wù),然后prettier將會(huì)幫助我們格式化代碼。
npm install --save-dev husky lint-staged prettier
在完成安裝后,我們要在package.json文件中的scripts里添加下面的代碼。
"scripts": {
+ "precommit": "lint-staged",
"start": "react-scripts start",
"build": "react-scripts build",
這一步為該項(xiàng)目下npm添加了一個(gè)新的腳本,我們可以通過npm run precommit來調(diào)用。實(shí)際上這個(gè)腳本會(huì)在代碼即將提交前被調(diào)用。
第三步,在package.json中配置lint-staged。
"dependencies": {
// ...
},
+ "lint-staged": {
+ "src/**/*.{js,jsx,json,css}": [
+ "prettier --single-quote --write",
+ "git add"
+ ]
+ },
"scripts": {
我們可以看到lint-stage將會(huì)先使用prettier對(duì)即將要提交的代碼格式化,然后在將這些更改加入到暫存中,然后這些暫存中的代碼就被提交了。
值得一提的是,更多情況下,我們可以去定制prettier的行為,使經(jīng)過它格式化的代碼更加符合我們的品味。下面將給出個(gè)簡(jiǎn)單的配置方法,全部的選項(xiàng)請(qǐng)查閱prettier的文檔。
接下來我們繼續(xù)在package.json中配置prettier的行為。
"dependencies": {
// ...
},
+ "prettier": {
+ "printWidth": 120
+ },
"scripts": {
現(xiàn)在我們將prettier的折行寬度設(shè)置成了120,當(dāng)本行寬度超過120時(shí),prettier才會(huì)幫我們折行,而它的默認(rèn)值時(shí)80。
為Python項(xiàng)目增加自動(dòng)代碼格式化的功能
針對(duì)python我們將使用pre-commit來實(shí)現(xiàn)代碼的自動(dòng)格式化。
首先我們需要安裝pre-commit
pip install pre-commit
你最好將pre-commit加入的你的requirements-dev.txt文件中以便能在開發(fā)過程中使用。
當(dāng)安裝完成后我們需要使用pre-commit來配置git hook。
pre-commit install
接下來就可以開始配置代碼自動(dòng)格式化了。
相較于JavaScript,python在代碼格式化方面有更多的選擇。比如autopep8,它實(shí)現(xiàn)了一個(gè)基于pep8的格式化工具,再比如yapf,是google開發(fā)的一個(gè)python代碼格式化工具,它并不完全遵循pep8。
為了實(shí)現(xiàn)這些功能我們需要在項(xiàng)目的根目錄下增加一個(gè)名為.pre-commit-config.yaml的配置文件。pre-commit將在git提交前調(diào)用該配置中的插件來完成自動(dòng)格式的功能,更詳細(xì)的功能請(qǐng)參考pre-commit的文檔。
下面的例子可以讓我們使用yapf來實(shí)現(xiàn)代碼的格式化:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/mirrors-yapf
rev: v0.23.0
hooks:
- id: yapf
repo配置該插件repo的地址,rev則是該插件repo的版本,id則是插件的id。同樣我們也可以將代碼格式化配置成autopep8。
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: v1.3.5
hooks:
- id: autopep8
給hooks添加參數(shù)
repos:
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: v1.3.5
hooks:
- id: autopep8
args: [--in-place, --aggressive, --aggressive ]
當(dāng)我們使用git commit生成一個(gè)提交時(shí),如果最終的代碼被格式化了,那么git會(huì)提示文件被這個(gè)勾子修改了。這是因?yàn)椴寮臀疫M(jìn)行了自動(dòng)格式化,我們把格式化后的代碼重新提交就可以了。
針對(duì)其他語言
在使用其他語言開發(fā)時(shí),我們一樣可以使用pre-commit來實(shí)現(xiàn)其他語言的自動(dòng)格式化,而且基本上所有的linux發(fā)行版都集成了python,使用非常方便,就請(qǐng)讀者自行來實(shí)現(xiàn)了。
后記
在現(xiàn)代的軟件開發(fā)過程中,提升效率是一個(gè)重大議題,任何細(xì)節(jié)都不應(yīng)該被放過。相比很多大公司都有著完善的軟件開發(fā)流程制度以及方法,小公司還處在刀耕火種階段。單純的人力時(shí)間累計(jì)完全是一種浪費(fèi)生命的做法,在方法上提升才能實(shí)現(xiàn)質(zhì)的突破。以前也沒有正式,所以特地今天寫下此文,希望能夠?qū)髞碚哂行椭?/p>
參考文獻(xiàn)https://github.com/facebook/create-react-app?github.comhttps://medium.com/3yourmind/auto-formatters-for-python-8925065f9505?medium.com
總結(jié)
以上是生活随笔為你收集整理的python代码自动格式化_代码的自动格式化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fanuc roboguide_ROBO
- 下一篇: websocket python爬虫_p