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

12569401-e8df334bbe77afdf.png

3.使用

phpcs path/file.php

12569401-f2924d31292366b7.png

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 后会自动检测待提交代码的格式

12569401-03cd9431ae879f85.png

6.自定义phpcs规则

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

12569401-74b33d22667d3042.png

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. Windows系统使用docker安装elasticsearch和kibana

    2023-12-07 12:04:02       15 阅读
  2. windowsdocker的使用

    2023-12-07 12:04:02       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 12:04:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 12:04:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 12:04:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 12:04:02       20 阅读

热门阅读

  1. 产品运营常用的ChatGPT通用提示词模板

    2023-12-07 12:04:02       48 阅读
  2. React 表单组件实现

    2023-12-07 12:04:02       40 阅读
  3. 五花八门客户问题(BUG) - 数据库索引损坏

    2023-12-07 12:04:02       46 阅读
  4. Metasploit的安全防御和逃逸

    2023-12-07 12:04:02       25 阅读
  5. SELinux refpolicy详解(9)

    2023-12-07 12:04:02       55 阅读
  6. Metasploit的漏洞挖掘和利用

    2023-12-07 12:04:02       26 阅读
  7. 详解ES6中的symbol

    2023-12-07 12:04:02       31 阅读
  8. Shopify 开源 WebAssembly 工具链 Ruvy

    2023-12-07 12:04:02       36 阅读
  9. Qt对象树与所有权管理

    2023-12-07 12:04:02       40 阅读
  10. 51单片机程序

    2023-12-07 12:04:02       36 阅读
  11. uniapp-获取手机型号

    2023-12-07 12:04:02       39 阅读
  12. 网页产品经理常用的ChatGPT通用提示词模板

    2023-12-07 12:04:02       48 阅读
  13. 27、数据存储&秒表(定时器扫描按键数码管)

    2023-12-07 12:04:02       36 阅读
  14. 【C++】时间time库

    2023-12-07 12:04:02       43 阅读