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