Windows系统下使用PHPCS+PHPMD+GIT钩子

前言

复制代码
使用PHPCS+GIT钩子保障团队开发中代码风格一致性实践
使用PHPMD提高代码质量与可读性

0.介绍

  • PHP_CodeSniffer php代码嗅探器

    • 包含phpcs(php code standard 代码标准)

    • phpcbf(php code beautify fix 代码美化修复)

    • 是一个代码风格检测工具,着重代码规范

    • 它包含两类脚本,phpcs 和 phpcbf

1.安装

复制代码
composer global require "squizlabs/php_codesniffer=*"

2.验证是否安装成功并查看帮助

复制代码
phpcs --help

3.使用

复制代码
phpcs path/file.php

4.集成到git

4.1 新增钩子文件

在 .git\hooks\目录下执行下面的命令

复制代码
cp pre-commit.sample  pre-commit

修改其中内容为

复制代码
#!/bin/bash

#

# check PHP code syntax error and standard with phpcs

# author : star[github.com/star1989]

# date : 2017-02-24

PROJECT=$(git rev-parse --show-toplevel)

cd $PROJECT

SFILES=$(git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\.php)

TMP_DIR=$PROJECT."/tmp"

# Determine if a file list is passed

if [ "$#" -ne 0 ]

then

    exit 0

fi

echo "Checking PHP Lint..."

for FILE in $SFILES

do

#    echo "php -l -d display_errors=0 ${FILE}"

#  echo "git show :$FILE > $TMP_DIR/$FILE"

    php -l -d display_errors=0 $FILE

    if [ $? != 0  ]

    then

        echo "Fix the error before commit."

        exit 1

    fi

    FILES="$FILES $PROJECT/$FILE"

done

if [ "$FILES" != "" ]

then

    echo "Running Code Sniffer..."

    TMP_DIR=/tmp/$(uuidgen)

    mkdir -p $TMP_DIR

    for FILE in $SFILES

    do

        mkdir -p $TMP_DIR/$(dirname $FILE)

        git show :$FILE > $TMP_DIR/$FILE

    done

    phpcs --standard=PSR2 --encoding=utf-8 -n $TMP_DIR

    PHPCS_ERROR=$?

    rm -rf $TMP_DIR

    if [ $PHPCS_ERROR != 0 ]

    then

        echo "Fix the error before commit."

        exit 1

    fi

fi

exit $?

5.在git下使用(git触发检测)

执行git commit 后会自动检测待提交代码的格式

6.自定义phpcs规则

有些情况我们需要忽略一些规则或者添加一些自定义的规则,比如有些类不需要命名空间(迁移类),不希望在检测代码时抛出该类型错误

6.1 添加标准

复制代码
$ phpcs --config-set installed_paths ruleset.xml

6.2 编辑规则内容

将ruleset.xml放置在项目根目录下,并写入具体规则

复制代码
<?xml version="1.0"?>

<ruleset name="CustomStandard">

  <!-- 代码标准为PSR2 -->

<rule ref="PSR2">

    <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>

</rule>

</ruleset>

6.3 修改pre-commit检测方式

将其中的

复制代码
phpcs --standard=PSR2 --encoding=utf-8 -n $TMP_DIR

改为

复制代码
phpcs --standard=ruleset.xml -s --encoding=utf-8 -n $TMP_DIR

这样就可以跳过命名空间的检测了!快去试试吧

7.常用命令

检查单个文件:phpcs /path/to/code

检查目录下的文件:phpcs /path/to/code/

查看已经安装的标准:phpcs -i

设置默认检查标准:phpcs --config-set default_standard /path/to/standard_file

查看配置:phpcs --config-show

指定报告格式:phpcs --report=summary /path/to/code ;可用的报告格式有full, xml, checkstyle, csv, json, emacs, source, summary, diff, svnblame, gitblame, hgblame, notifysend,默认为full

查看帮助:phpcs -h

自动修复:phpcbf /path/to/code

8.phpmd 介绍

  • PHP Mess Detector PHP混乱探测器

    • 是一个代码质量检测工具,着重代码质量

9.安装

复制代码
composer global require phpmd/phpmd

10.使用

复制代码
$phpmd path\code text codesize,unusedcode,naming,design

参数说明
# phpmd 源代码路径 报告的格式 规则列表
# 源代码路径 支持
   一个文件 /path/to/file
   一个目录 /path/to/source 
# 报告的格式 支持 
    xml:以XML格式输出;
    text:简单的文本格式;
    html:输出到单个的html;
# 规则列表 支持
    phpmd_ruleset.xml 文件格式
    codesize,unusedcode,naming 单个命令集合
# 附加参数
  --exclude - 忽略的目录,以逗号分隔多个目录。
# 例子
phpmd /path/to/source html ./phpmd_ruleset.xml

11.添加到git钩子

复制代码
done
    phpcs --standard=ruleset.xml -s --encoding=utf-8 -n $TMP_DIR
    phpmd $TMP_DIR text codesize,unusedcode,naming,design

https://www.jianshu.com/p/d3f8c4b32719

Windows系统下使用PHPCS+PHPMD+GIT钩子 - 互联网笔记

相关推荐
柚几哥哥1 小时前
IntelliJ IDEA全栈Git指南:从零构建到高效协作开发
java·git·intellij-idea
遇到困难睡大觉哈哈1 小时前
Git推送错误解决方案:`rejected -> master (fetch first)`
大数据·git·elasticsearch
sukalot1 小时前
Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十一)
windows·驱动开发
ON.LIN1 小时前
Git提交本地项目到Github
git·github
九月镇灵将2 小时前
6.git项目实现变更拉取与上传
git·python·scrapy·scrapyd·gitpython·gerapy
wuyijysx2 小时前
ubuntu git cola gui
git·软件工具
西北丰2 小时前
构造超小程序
windows
『六哥』3 小时前
Windows 10 如何设置右击鼠标快速进行“关机”
windows·经验分享·编辑器
九月镇灵将4 小时前
GitPython库快速应用入门
git·python·gitpython
weixin_420947644 小时前
windows golang,consul,grpc学习
windows·golang·consul