国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用PHPCS+GIT鉤子保障團隊開發(fā)中代碼風(fēng)格一致性實踐

wums / 2680人閱讀

摘要:集成經(jīng)過上面的操作,代碼格式化的規(guī)則基本與的規(guī)則基本一致了,但也有一小部分不一致,所以后面還要用到和。

一、背景

筆者在6月份加入新團隊,新團隊這邊剛組建起來,基礎(chǔ)一些東西還處于待完善狀態(tài),比如筆者組內(nèi)同學(xué)約定使用PSR-2的編碼風(fēng)格規(guī)范,但是并不是所有人都嚴格按照PSR-2來提交代碼。

最大的原因就是口頭的約束力極為有限,而團隊中大家使用的編輯器不統(tǒng)一,有使用phpstorm,也有使用VS Code更有vim,而各種編輯器都有自己的格式化規(guī)則,因此代碼風(fēng)格統(tǒng)一是個問題;

具體一點來說,當(dāng)張三使用VS Code提交了一個代碼文件,李四pull代碼之后使用phpstorm進行格式化后再提交,代碼風(fēng)格發(fā)生變化提交到服務(wù)器,張三再pull代碼,使用VS Code格式化,代碼又一次發(fā)生變化;這樣反反復(fù)復(fù)的改變,開發(fā)同學(xué)會覺得麻煩,代碼審計同學(xué)也同樣麻煩;

在筆者上家公司的技術(shù)團隊,會由架構(gòu)組來處理類似的問題,于是這里筆者把上一個團隊實現(xiàn)的方式照搬過來,同樣在git的鉤子上做文章,如果有人的代碼不符合psr-2代碼風(fēng)格規(guī)范,通過git鉤子將不其commit,并且給出具體行號和具體的原因,更方便的是提供一個快速格式化的命令。

二、實現(xiàn)概要

安裝php-cs

配置php-cs

集成到編輯器

git觸發(fā)檢測

三、安裝PHP-CS

php-cs可以用來檢測代碼是否符合PSR-2規(guī)范,同時支持對不符合規(guī)范的代碼自動格式化,讓其轉(zhuǎn)成PSR-2的編碼風(fēng)格。

3.1 安裝composer

php-cs依賴于composer,所以筆者需要先安裝composer,安裝的方法有很多種,這里提供mac操作系統(tǒng)下兩種安裝方法

brew安裝composer命令為:

brew install composer

手動安裝composer命令為:

wget https://getcomposer.org/download/1.7.1/composer.phar && chmod 777 composer.phar  && mv composer.phar  /usr/local/bin/composer
3.2 安裝PHP-CS

安裝好composer之后,可以用composer快速安裝php-cs,安裝命令如下

composer global require "squizlabs/php_codesniffer=*"

當(dāng)命令執(zhí)行完成之后,會在筆者當(dāng)前用戶的主目錄下創(chuàng)建一個 .composer 目錄,在目錄中包含了筆者需要的php-cs,此時筆者可以執(zhí)行下方命令來驗證是否安裝成功

~/.composer/vendor/bin/phpcs  --help

當(dāng)命令執(zhí)行后,如果能看到下方的一些信息,那么就代表安裝成功

 -     Check STDIN instead of local files and directories
 -n    Do not print warnings (shortcut for --warning-severity=0)
 -w    Print both warnings and errors (this is the default)
 -l    Local directory only, no recursion
 -s    Show sniff codes in all reports
 -a    Run interactively
 -e    Explain a standard by showing the sniffs it includes
 -p    Show progress of the run
 -q    Quiet mode; disables progress and verbose output
 -m    Stop error messages from being recorded
       (saves a lot of memory, but stops many reports from being used)
 -v    Print processed files
 -vv   Print ruleset and token output
 -vvv  Print sniff processing information
 -i    Show a list of installed coding standards
 -d    Set the [key] php.ini value to [value] or [true] if value is omitted
3.3 全局使用

前面筆者使用驗證的命令的路徑太長,后續(xù)如果要使用是極為不方便的,所以筆者需要將這寫路徑加入到全局中,加入的命令如下

ln -s ~/.composer/vendor/bin/phpcs /usr/local/bin/phpcs
ln -s ~/.composer/vendor/bin/phpcbf /usr/local/bin/phpcbf

當(dāng)執(zhí)行完成之后,可以使用短命令來驗證是否加入全局成功,可以用下方的命令

phpcs --help

執(zhí)行成功之后,返回結(jié)果應(yīng)該和上方完整路徑返回的一致。

3.4 設(shè)置默認標準

phpcs默認的編碼格式并不是php-cs,所以當(dāng)不指定標準的時候,檢測的結(jié)果并不準確,但每次都手動指定也挺麻煩,所以筆者可以設(shè)置一個默認標準,命令如下:

phpcs --config-set default_standard PSR2
phpcbf --config-set default_standard PSR2
3.5 PHPCS檢測

現(xiàn)在筆者可以用phpcs來真實的試驗了,筆者先準備一個PHP文件,文件里面的內(nèi)容如下代碼示例,可以看出這份代碼并不符合PSR-2的風(fēng)格規(guī)范


3.5.1 通過PHP-CS檢測編碼風(fēng)格,命令如下
phpcs /Users/tangqingsong/mycode/test.php

命令執(zhí)行完成之后,可以看到如下代碼提示,在提示中筆者能看到具體哪一行,提示級別,以及具體的提示原因

FILE: /Users/song/mycode/test.php
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FOUND 2 ERRORS AND 1 WARNING AFFECTING 3 LINES
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1 | WARNING | [ ] A file should declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it should execute logic with side effects, but should not do both. The first symbol is
   |         |     defined on line 3 and the first side effect is on line 8.
 3 | ERROR   | [x] Opening brace should be on a new line
 8 | ERROR   | [x] Expected 1 newline at end of file; 0 found
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Time: 79ms; Memory: 4Mb
3.6 PHPCS檢測 3.6.1 自動格式化編碼風(fēng)格命令
phpcbf /Users/tangqingsong/mycode/test.php

命令執(zhí)行完成之后,可以看到如下返回提示,處理了哪一些文件,以及類型

PHPCBF RESULT SUMMARY
----------------------------------------------------------------------
FILE                                                  FIXED  REMAINING
----------------------------------------------------------------------
/Users/song/mycode/test.php                           2      1
----------------------------------------------------------------------
A TOTAL OF 2 ERRORS WERE FIXED IN 1 FILE
----------------------------------------------------------------------

Time: 68ms; Memory: 4Mb
3.6.2 再次使用PHP-CS檢測
phpcs /Users/tangqingsong/mycode/test.php

執(zhí)行完成之后,通過命令再次查看結(jié)果

FILE: /Users/song/mycode/test.php
----------------------------------------------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
----------------------------------------------------------------------------------------------------------------------------------------------
 1 | WARNING | A file should declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it should execute
   |         | logic with side effects, but should not do both. The first symbol is defined on line 3 and the first side effect is on line 9.
----------------------------------------------------------------------------------------------------------------------------------------------

Time: 71ms; Memory: 4Mb

能看到最開始檢測有三次不合格,但現(xiàn)在只剩下一處了;這里說一下為什么phpcbf沒有幫完全處理呢,因為phpcbf只能處理代碼風(fēng)格等方式,而不能幫你處理里面的命名與代碼實現(xiàn)規(guī)則,所以有少部分還需要人為去更正,但并不會太多。

四、編輯器編輯與配置

很少開發(fā)者只使用終端就開發(fā)代碼,通常都會用到編輯器,因此筆者也需要把phpcs和編輯器進行結(jié)合

4.1 讓編輯器使用PSR-2標準

1.設(shè)置->code style -> PHP 中選擇風(fēng)格為 psr1/2

2.設(shè)置->languages->php->code sniffer 中設(shè)置phpcs的路徑

3.設(shè)置->Editor->Inspections展開點擊右側(cè)的PHP,勾選下面的兩個PHP,選擇使用PSR2

下面還有一處,也要選中

現(xiàn)在筆者使用phpstorm的格式化,將會自動格式化成psr-2的風(fēng)格。

4.2 集成phpcs

經(jīng)過上面的操作,phpstorm代碼格式化的規(guī)則基本與phpcs的規(guī)則基本一致了,但也有一小部分不一致,所以后面還要用到phpcs和phpcbf。

筆者如果每次都在終端去執(zhí)行phpcs風(fēng)格檢測花費時間可不少,為了提高工作效率,可以在phpstorm集成phpcs檢測規(guī)范的功能,設(shè)置路徑:Tools->External Tools->添加-> (/usr/local/bin/phpcs ) ($FileDir$/$FileName$)

4.3 集成phpcbf

如果每次都在終端去執(zhí)行phpcbf格式化,還是會有一些麻煩,所以筆者也可以在phpstorm集成phpcbf自動格式化功能,設(shè)置路徑:Tools->External Tools->添加-> (/usr/local/bin/phpcbf ) ($FileDir$/$FileName$)

五、GIT配置篇

當(dāng)前面一切準備就緒,筆者就可以在git鉤子里面增加強制的策略了,git鉤子腳本存放于項目下 .git/hooks/ 文件夾下,按照下面的步驟筆者來添加一個commit事件。

5.1 新增鉤子文件

在你的項目根目錄下,使用vim命令或其他方式,新增一個文件 ./.git/hooks/pre-commit,然后把下面的腳本放進去,之后再保存。

#!/bin/sh
PHPCS_BIN=/usr/local/bin/phpcs
PHPCS_CODING_STANDARD=PSR2
PHPCS_FILE_PATTERN=".(php)$"

FILES=$(git diff HEAD^..HEAD --stat)

if [ "$FILES" == "" ]; then
 exit 0
fi

for FILE in $FILES
do
 echo "$FILE" | egrep -q "$PHPCS_FILE_PATTERN"
 RETVAL=$?
 if [ "$RETVAL" -eq "0" ]
 then

     PHPCS_OUTPUT=$($PHPCS_BIN --standard=$PHPCS_CODING_STANDARD $FILE)
     PHPCS_RETVAL=$?

     if [ $PHPCS_RETVAL -ne 0 ];
     then
         echo $PHPCS_OUTPUT
         exit 1
     fi
 fi
done
exit 0

需要注意的是讓這個文件有可執(zhí)行權(quán)限,最直接的辦法就是設(shè)置為777,參考命令如下:

chmod 777 .git/hooks/pre-commit
5.2 本地鉤子

現(xiàn)在筆者故意讓php代碼風(fēng)格不一致,然后使用git commit來提交,看看git是否會阻止提交,以下面這份代碼為例


可以很明顯的看出來,這份代碼沒有按照駝峰命名法,大括號也沒用換行的兩處問題;把它保存在根目錄名為test.php文件,然后執(zhí)行g(shù)it commit命令,如下

 git add test.php && git commit . -m "test"

命令執(zhí)行后,git返回了如下信息,便終止了

FILE: /Users/song/mycode/work/xiaoyu/test.php
----------------------------------------------------------------------------------------------------------------------------------------------
FOUND 2 ERRORS AND 1 WARNING AFFECTING 3 LINES
----------------------------------------------------------------------------------------------------------------------------------------------
 1 | WARNING | [ ] A file should declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it should
   |         |     execute logic with side effects, but should not do both. The first symbol is defined on line 3 and the first side effect
   |         |     is on line 8.
 3 | ERROR   | [x] Opening brace should be on a new line
 8 | ERROR   | [x] Expected 1 newline at end of file; 0 found
----------------------------------------------------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------------------------------------------------------------------------------

Time: 63ms; Memory: 4Mb

驗證一下git是否commit成功,可以執(zhí)行下面的命令:

git status

返回結(jié)果如下

位于分支 develop
您的分支與上游分支 "origin/develop" 一致。

要提交的變更:
  (使用 "git reset HEAD <文件>..." 以取消暫存)

    新文件:   test.php

說明筆者前面的命令只成功執(zhí)行了 git add . 而后面commit則成功阻擋了。

5.3 服務(wù)端鉤子

前面一個步驟筆者已經(jīng)成功的在本地的commit鉤子中阻擋了觸發(fā),但是任然有可能有伙伴會繞過,或者新項目沒有部署等,導(dǎo)致可以最終提交上來的代碼還是存在不符合psr-2風(fēng)格,所以這個時候筆者就需要在服務(wù)端的push事件做一些處理。

這個時候筆者需要在服務(wù)器的鉤子事件中新增一個,pre-receive 文件。

在服務(wù)端去配置的時候遇到了幾個坑,后來筆者放棄了,有興趣的可以留言或私信。

作者:湯青松

微信:songboy8888

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29195.html

相關(guān)文章

  • PHP 標準規(guī)范

    摘要:標準規(guī)范簡介是的簡寫,由組織制定的規(guī)范,是開發(fā)的實踐標準。具體標準有有了統(tǒng)一編碼風(fēng)格規(guī)范,更有利于查看和學(xué)習(xí)各個框架或類庫,不不需要每次都適應(yīng)新的編碼風(fēng)格。同時在開發(fā)團隊內(nèi)部使用統(tǒng)一的編碼規(guī)范更有利于代碼審查版本控制團隊內(nèi)部交流。 PHP 標準規(guī)范 PSR PSR 簡介 PSR 是 PHP Standard Recommendations 的簡寫,由 PHP FIG 組織制定的 PHP...

    FuisonDesign 評論0 收藏0
  • 使用GrumPHP來糾正代“毛病”

    摘要:默認的配置不會檢測任何代碼。參數(shù)列表質(zhì)量檢測包其他有人問,你為什么要這么折磨自己呢其實像類型代碼質(zhì)量工具,不是僅僅自己拿來玩的,在開發(fā)人員略多的技術(shù)團隊,可以通過使用它來達到代碼規(guī)范一致,如果每個人代碼都不一樣,后果不堪設(shè)想。 showImg(https://segmentfault.com/img/bVbtfeF?w=1796&h=724); 前言 我一生的文章都會放在這里,我的博客...

    jubincn 評論0 收藏0
  • PHP 規(guī)范說明與工具

    摘要:今天這篇分享將簡單地梳理一下規(guī)范,并介紹一個代碼檢查工具,結(jié)合以及進行實踐。目前流行的一些規(guī)范是的簡寫,由組織制定的規(guī)范,是開發(fā)的實踐標準。目前已表決通過了套標準,已經(jīng)得到大部分框架的支持和認可。 > 作為一個新手,寫出規(guī)范的代碼也是一門必修課,除了閱讀相應(yīng)的代碼規(guī)范文檔之外,充分利用相關(guān)的工具能使得進階之路事半功倍。今天這篇分享將簡單地梳理一下 PHP 規(guī)范,并介紹一個代碼檢查工具 ...

    snowLu 評論0 收藏0
  • 配置你的Editor

    摘要:啟用配置項可預(yù)覽編碼是否合格的情況,現(xiàn)在你就搭上這款插件開始調(diào)試吧主題推薦我這里依然熱衷于其獨特的風(fēng)格以及畫面感十足一直霸占在主題排行榜的前列。進入對應(yīng)的配置項可修改其。 showImg(https://segmentfault.com/img/remote/1460000009555145); 說明 走一波配置流,莫等閑,高效快速開發(fā),從自己的常用的工具開始 尋找舒適的工作方式,僅...

    dcr309duan 評論0 收藏0
  • 看吧,這就是現(xiàn)代化 PHP 該有的樣子

    摘要:這大概是我沒有及早使用,或多數(shù)開發(fā)者流連現(xiàn)狀造成的。它就是,一個的框架。行為驅(qū)動開發(fā)是來自測試驅(qū)動開發(fā)的開發(fā)過程。簡單的說,它就是經(jīng)常可能一天幾次將小塊代碼整合進基礎(chǔ)代碼當(dāng)中的行為。 showImg(https://segmentfault.com/img/remote/1460000013769815); 這是一篇社區(qū)協(xié)同翻譯的文章,已完成翻譯,更多信息請點擊?協(xié)同翻譯介紹?。 文章...

    Tangpj 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<