推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

2023-05-31 0 529

触发器书刊

每晚与你撷取 IT开卷 控制技术蔬果 婚恋科学知识

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

点选相片旧书

我坚信每一子公司都有一套完整的标识符规范化国际标准,但国际标准是国际标准,怎样能有效率的让其他人严格遵守,那要是远距工具的远距和动态告诫了。

如后端 vue 的我们基本上单厢采用eslint来束缚他们的标识符,除非多两个字符单厢提示信息你有难题,当npm run dev或是npm run watch就会提示信息你哪哪哪不符合要求化。

在 Laravel 合作开发中,就算也有类似于的远距工具,这也是责任编辑的首先需要所推荐的:phpcs

在已经开始采用phpcs以后,他们单纯而言说 Laravel 的标识符规范化国际标准

Laravel 标识符规范化

Laravel follows the PSR-2 coding standard and the PSR-4 autoloading standard.

源自 Laravel 的表明:https://laravel.com/

两个标识符规范化的涵义

PSR-0 自动加载规范化 (已弃用)

PSR-1 基础编码规范化

PSR-2 编码风格规范化

PSR-3 日志接口规范化

PSR-4 自动加载规范化

PSR-5 PHPDoc 国际标准 (未通过)

PSR-6 缓存接口规范化

PSR-7 HTTP 消息接口规范化

PSR-8 Huggable 接口 (未通过)

PSR-9 项目安全难题公示 (未通过)

PSR-10 项目安全上报方法 (未通过)

PSR-11 容器接口

PSR-12 编码规范化扩充

PSR-13 超媒体链接

PSR-14 事件分发器 (未通过)

PSR-15 HTTP 请求处理器

PSR-16 缓存接口

其实现在很多网站已经挂出 PSR-2 编码规范化的表明了,所推荐看下面这个:

https://laravel-china.org/docs/psr/psr-2-coding-style-guide/1606

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

但我在实际采用时,除了能够按照上面说的规范化来,还有一块重要的内容他们没提。

文件和类注释

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

主要包含以上内容块:文件表明、PHP 版本号、还有就是按顺序的这五要素:(category, package, author, license, link),而且这五要素排版要对齐哦,一般人我不告诉哦~~~

方法注释

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

主要包含:方法表明、空一行、参数块 (类型、参数名、涵义 —— 这个需要对齐)、空一行、最后return类型。

安装 phpcs

采用 phpcs 以后,还是需要先知道这个东西是什么吧?

PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.

摘自:https://github.com/squizlabs/PHP_CodeSniffer

主要包含两个远距工具:phpcs 和 phpcbf (这个之后再说)。phpcs 主要对PHP、JavaScript、CSS文件定义了一系列标识符规范化国际标准,如他们会采用的,也是 Laravel 采用的PHPPSR-2国际标准,能够检测出不符合他们定义的标识符规范化的标识符,并发出警告和错误,当然他们也可以设置报错的级别。

对于 phpcs 的采用,主要有两个途径:

在邻近地区合作开发过程中,动态对他们的标识符进行检测,让标识符提交版本库时,就已经符合要求化国际标准了;

在服务器对提交的标识符进行检测,如果不符合标准的,则不入标识符库,打回要求修改。

下面他们已经开始说说根据不同方法,怎样安装 phpcs 远距工具的。

composercomposer global require “squizlabs/php_codesniffer”

写 Laravel 标识符的同学,对采用 composer 应该很熟悉了,这种方法比较推崇。但主要区分为是「全局安装」还是按「项目安装」。

这里我本人所推荐采用「全局安装」,可以在各个 IDE 上直接填入全局安装的 phpcs 可执行路径。但如果你的版本库是采用「git」的话,那我所推荐采用「项目安装」,下文就知道原因了。

注:我采用这种方式「全局安装」后,发现每回都关联不了「VSCode」,这个原因待查。

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

pear

安装 pear

curl -O https://pear.php.net/go-pear.phar

php -d detect_unicode=0

go-pear.phar

已经开始安装配置,

先选择 1 (change the Installation Base);

输入:/usr/local/pear,

再选择 4 (change the Binaries directory),

输入:/usr/local/bin

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

已经开始安装PHP_CodeSniffer

pear install PHP_CodeSniffer

在 MacOS 系统下:

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

在 Centos Linux 系统下安装效果:

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

此方法比较有效率果,而且也符合在多系统上尝试,比如本人同时在「Mac」和 「Linux」下都可以正常安装和采用。

注:我没在「Windows」环境下尝试,尚未知道效果。

brewbrew install php-code-sniffer

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

这种方法显然在「Mac」系统下有效率了!

当然根据官网的文档,还有其他方法,欢迎我们去尝试:

具体可参考:https://github.com/squizlabs/PHP_CodeSniffer中的「Installation」部分。

采用 phpcs

无论是邻近地区还是服务器,只要他们安装好了,自然就可以已经开始采用了。最直观也是最单纯的方法莫过于用命令行的方式了,如:

phpcs php_path

// or

phpcs php_dir

但想到他们是用 IDE 写标识符的,而且是希望动态看到效果的,所以下面尝试在两个 IDE 下看看怎样采用。

安装 VSCode 应用程序

在应用程序界面,搜索:phpcs,安装即可。

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

参考:https://marketplace.visualstudio.com/items?itemName=ikappas.phpcs

配置应用程序

由于项目采用的是系统的 phpcs,所以需要在user setting中配置可执行路径和自己自定义的编写风格

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

这时候他们去看看他们的标识符界面,是不是有了phpcs的提示信息了:

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

安装 PhpStorm 应用程序

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

直接看图,不需要做过多的表明了。

基本上到此,phpcs 的应用程序就可以采用了。

版本检测规范化

他们希望在团队项目标识符提交版本库以后「pre-commit」就能检测

版本库的标识符文件,然后再利用「phpcs」去检测每一文件是否符合要求化。svn

由于每一 svn 在服务端都有对应 hooks 文件夹,可以在「pre-commit」时,验证标识符的规范化,直接上文件,比较好理解:

#!/bin/bash

LOG=“/tmp/svn.log”touch ${LOG}REPOS=$1TXN=$2echo “REPOS: $REPOS > ${LOG}echo “TXN: $TXN >> ${LOG}SVNLOOK=“/usr/bin/svnlook”PHPCS=“/usr/bin/phpcs”# php file extensionPHP_EXT=“php”MSG_MIN_CHAR_NUM=3MAX_PNG_SIZE=2048

PROHIBITED_FILES=(

)

TMP_DIR=“/tmp/svn”if [[ -d ${TMP_DIR} ]]; then    rm -r ${TMP_DIR}fimkdir -p ${TMP_DIR}function

check_php_syntax {

local php_file=$1echo `${PHPCS} ${php_file} 2>&1

`

}

function

create_file {

local file_name=$1# Create tmp file and copy contenttmp_file=${TMP_DIR}/${file_name}mkdir -p$(dirname “${tmp_file}”) && touch ${tmp_file}${SVNLOOK} cat -t ${TXN} ${REPOS} ${file_name} > ${tmp_file}

}

changed_info_str=`${SVNLOOK} changed -t ${TXN} ${REPOS}

`

IFS=$\n read -rd -achanged_infos <<<${changed_info_str}php_error_msg=“”for changed_info in ${changed_infos[@]}; do    # Prevent commiting file that contains space in its filename    echo ${changed_info} >> ${LOG}    operation=`echo ${changed_info}| awk{print $1}

`

   if [[ ${operation} = “A” ]] && [[ `echo ${changed_info} | awk {print NF}` -gt 2 ]]; then        echo “Please do not commit file that contains space in its filename!” 1>&2        exit 1    fi    file_name=`echo ${changed_info}| awk{print $2}

`

   echo “operation: ${operation}, file: ${file_name}, ext: ${ext} >> ${LOG}    # Check prohibit-commit files    for prohibited_file in ${PROHIBITED_FILES[@]}; do        if [[ ${file_name} = ${prohibited_file} ]]; then            echo ${file_name} is not allowed to be changed!” 1>&2            exit 1        fi    done    ext=`echo ${file_name} | awk -F“.” {print $NF}

`

   if [[ ${operation} = “U” ]] || [[ ${operation} = “A” ]]; then        tmp_file=${TMP_DIR}/${file_name}        # Check lua syntax        if [[ ${ext} = ${PHP_EXT} ]]; then            echo “Check syntax of ${tmp_file} >> ${LOG}            create_file ${file_name}error_msg=`check_php_syntax${tmp_file}

`

           if [[ `echo ${error_msg} | sed s/\n//g` != “” ]]; then                php_error_msg=${php_error_msg}\n${error_msg}            fi        fi    fidonerm -r ${TMP_DIR}if [[ ${php_error_msg} != “” ]]; then    echo “php error:${php_error_msg} >> ${LOG}        echo “Please fix the error in your php program:${php_error_msg} 1>&2    exit 1fiexit 0

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

这就是他们想要看到的效果了,无论 IDE 的动态提示信息,还是提交标识符时的检测反馈,单厢告诉他们哪里格式不符合要求化了。

git

这里主要参考 WickedReports/phpcs-pre-commit-hookhttps://github.com/WickedReports/phpcs-pre-commit-hook的写法:

#!/bin/sh

PROJECT=`php -r “echo dirname(dirname(dirname(realpath($0))));”

`

STAGED_FILES_CMD=`git diff –cached –name-only –diff-filter=ACMR HEAD | grep \\\\.php`

# Determine if a file list is passedif [ $# -eq 1

]

then    oIFS=$IFS

   IFS=

   SFILES=$1    IFS=$oIFSfiSFILES=${SFILES:-$STAGED_FILES_CMD}echo “Checking PHP Lint…”for FILE in $SFILESdo    php -l -ddisplay_errors=0 $PROJECT/$FILE    if [ $? != 0

]

   then        echo “Fix the error before commit.”        exit 1    fi    FILES=$FILES$PROJECT/$FILEdoneif [ $FILES != “”

]

then    echo “Running Code Sniffer. Code standard PSR2.”    /usr/local/bin/phpcs –standard=PSR2 –colors –encoding=utf-8 -n -p $FILES    if [ $? != 0

]

   then        echo “Fix the error before commit!”        echo “Run”        echo ”  ./vendor/bin/phpcbf –standard=PSR2 $FILES        echo “for automatic fix or fix it manually.”        exit 1    fifiexit

$?

他们把该文件内容写入「.git/hooks/pre-commit」中,然后再提交两个文件,看看运行效果。

在实验以后,他们先调用邻近地区的phpcs应用程序,看看他们的两个文件标识符的规范化情况:

phpcs –standard=PSR2 –encoding=utf-8

-n -p app/Http/Controllers/ApplyController.php

运行结果提示信息:

E 1 / 1 (100

%)

FILE: /Users/app/Http/Controllers/ApplyController.php

——————————————————————————————————

FOUND 4 ERRORS AFFECTING 3

LINES

——————————————————————————————————

17

| ERROR | [x] Opening brace should be on a new line

60| ERROR | [x] Opening parenthesis of a multi-linefunction

call must be the last content on the

   |       |     line

62 | ERROR | [x] Multi-line functioncall not indented correctly; expected12 spaces but found 16 62| ERROR | [x] Closing parenthesis of a multi-linefunction

call must be on a line by itself

——————————————————————————————————

PHPCBF CAN FIX THE 4

MARKED SNIFF VIOLATIONS AUTOMATICALLY

——————————————————————————————————

Time: 87ms; Memory: 6

Mb

主要报错在于:

60 行:output函数

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

17 行:

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

好了,他们执行git commit试试:

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

接着他们把这两个不规范化的地方改了之后,同样运行邻近地区方法,返回结果:

phpcs –standard=PSR2 –encoding=utf-8

-n -p app/Http/Controllers/ApplyController.php

. 1 / 1 (100

%)

Time: 44ms; Memory: 6

Mb

他们再执行git commit试试:

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

完美了!

注:「svn」和「git」的区别在于,svn 是放在服务器上做「pre-commit」检测的,而「git」是在邻近地区本项目中的,这也是上文说的,如果你用 git 做版本库,所推荐你用「composer」项目安装的方式安装远距工具。

总结

责任编辑以邻近地区 Mac 系统和服务器 Linux 系统为安装端,以 VSCode 和 PHPStorm 两大主流 IDE 作为采用端,以 svn 和 git 为版本库为例,较为完整而又系统流程的说一说「phpcs」的采用,希望对我们有所帮助!

最后留个小难题:如果你采用 Docker 和 git,怎么做这一流程式检测?

责任编辑转载自 叶梅树,如需转载,请向原作者发出申请,原作名称《所推荐这款 phpcs 应用程序规范化 Laravel 标识符 (规范化从邻近地区写标识符到管理远距工具)》

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

所推荐阅读

2018年5月新书书单(文末福利)

2018年4月新书书单

触发器书刊最全Python书单

一份程序员必备的算法书单

第一本Python神经网络编程书刊

推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)推荐一款 phpcs 插件规范 Laravel 代码 (规范从本地写代码到版本控制)

每晚与你撷取IT好文。

触发器书刊”,即可免费获得2000门在线视频课程

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务