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钩子 - 互联网笔记

相关推荐
wjs0402 小时前
Git常用的命令
java·git·gitlab
原野风霜3242 小时前
Git使用总结
git
青草地溪水旁2 小时前
Git Bash 中 Git 命令的实用主义指南
git·bash
至善迎风3 小时前
版本管理系统与平台(权威资料核对、深入解析、行业选型与国产平台补充)
git·gitee·gitlab·github·svm
你是人间五月天6 小时前
sentinel实现控制台与nacos数据双向绑定
windows·sentinel
上单带刀不带妹8 小时前
Git rm 命令与系统 rm 命令的区别详解
git
小猫挖掘机(绝版)9 小时前
通过tailscale实现一台电脑上vscode通过ssh连接另一台电脑上的VMware Linux 虚拟机
linux·windows·vscode·ubuntu·ssh
我的收藏手册11 小时前
性能监控shell脚本编写
前端·git·github
Yvonne爱编码13 小时前
简述ajax、node.js、webpack、git
前端·git·ajax·webpack·node.js·visual studio
你我约定有三15 小时前
java--泛型
java·开发语言·windows