wata727/pahout

PHP 编程的搭档,帮你写出更好的 PHP 代码

维护者

详细信息

github.com/wata727/pahout

源代码

问题

安装量: 14,635

依赖项: 1

建议者: 0

安全: 0

星标: 46

关注者: 7

分支: 1

开放问题: 1

类型:项目

0.7.0 2019-03-06 13:45 UTC

This package is auto-updated.

Last update: 2024-09-26 15:08:53 UTC


README

Build Status Latest Stable Version Docker Hub MIT License

PHP 编程的搭档,帮你写出更好的 PHP 代码。Pahout 的意思是 PHP mahout 🐘

动机

PHP 在漫长的历史中添加了各种特性。然而,由于它的历史悠久,许多旧语法散布在互联网上。如果一个 PHPer 从它们中学习,PHPer 就无法知道最新 PHP 版本中存在的优秀语法和函数。这是一件非常令人难过的事情。

因此,我想到了制作一个像结对编程伙伴一样的 linter,它会告诉你一个好方法。它将帮助你与你一起写出更好的 PHP 代码。

但是,请不要首先尝试根据 Pahout 的提示修复所有现有代码。Pahout 是一个结对编程伙伴。当你结对编程时,你不会检查所有现有代码,对吗?我的建议是只检查新创建或修改的文件。例如,以下设置 pre-commit hook 是一个好主意

#!/bin/sh

git diff --name-only | grep .php | xargs vendor/bin/pahout
if ["$?" -ne 0]; then
    exit 1
fi

安装

Pahout 需要以下环境

  • PHP 7.1 或更高版本
  • php-ast v0.1.7 或更高版本

使用 Composer

您可以使用 composer 安装。

$ composer require --dev wata727/pahout
$ vendor/bin/pahout -V

使用 Docker

通过使用 Docker 镜像,您可以轻松尝试 Pahout 而不影响本地环境。

$ docker run --rm -t -v $(pwd):/workdir wata727/pahout

快速入门

您在项目中使用的是 PHP 7.1.8。您认为以下代码如何?

<?php

// Do something...

$response = get_awesome_response();
$error = isset($response['error']) ? $response['error'] : null;

// Do something...

这可能是一段熟悉的代码。然而,如果您知道 null 合并运算符,您将写出类似以下的内容

<?php

// Do something...

$response = get_awesome_response();
$error = $response['error'] ?? null; # Great!

// Do something...

Pahout 将支持此类重写。尝试在上述示例中运行。

$ pahout --php-version 7.1.8 test.php
test.php:8
    NullCoalescingOperator: Use the null coalecing operator instead of the ternary operator. [https://github.com/wata727/pahout/blob/master/docs/NullCoalescingOperator.md]

1 files checked, 1 hints detected.

Pahout 会告诉你 null 合并运算符可以使用的位置!有关 Pahout 提供的提示列表,请参阅此 文档

如果您要分析多个文件,可以指定多个。

$ pahout --php-version 7.1.8 test.php test2.php ...

如果您指定了目录名,则该目录下的所有 .php 文件都将被包含。

$ pahout --php-version 7.1.8 src

配置

您可以从命令行更改配置。

$ pahout --help
Description:
  A pair programming partner for writing better PHP

Usage:
  check [options] [--] [<files>...]

Arguments:
  files                              List of file names or directory names to be analyzed

Options:
      --php-version[=PHP-VERSION]    Target PHP version [default: runtime version]
      --ignore-tools[=IGNORE-TOOLS]  Ignore tool types [default: Nothing to ignore] (multiple values allowed)
      --ignore-paths[=IGNORE-PATHS]  Ignore files and directories [default: Nothing to ignore] (multiple values allowed)
      --extensions[=EXTENSIONS]      File extensions to be analyzed [default: php] (multiple values allowed)
      --vendor[=VENDOR]              Check vendor directory [default: false]
  -f, --format[=FORMAT]              Output format [default: "pretty", possibles: "pretty", "json"]
  -c, --config[=CONFIG]              Config file path [default: ".pahout.yaml"]
      --only-tools[=ONLY-TOOLS]      Check only the given tool types (multiple values allowed)
  -h, --help                         Display this help message
  -q, --quiet                        Do not output any message
  -V, --version                      Display this application version
      --ansi                         Force ANSI output
      --no-ansi                      Disable ANSI output
  -n, --no-interaction               Do not ask any interactive question
  -v|vv|vvv, --verbose               Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

您还可以通过准备一个名为 .pahout.yaml 的配置文件来更改配置。

php_version: 7.0.0
ignore_tools:
    - ShortArraySyntax
ignore_paths:
    - tests
    - bin
extensions:
    - php
    - module
    - inc
vendor: true

PHP 版本

指定您项目的 PHP 版本。默认值为运行时版本。Pahout 使用此版本来选择工具。

忽略工具

在 Pahout 中,产生提示的称为 "工具"。您可以指定要忽略的工具名称。请参阅文档中的工具名称列表。

仅工具

ignore_tools 相反,指定要检查的工具。

忽略路径

您可以指定要忽略的文件或目录。如果指定了目录名,则该目录下的所有文件都将被忽略。

扩展

要分析的文件扩展名。默认为仅 php

供应商

您可以设置是否忽略供应商目录。

注意:供应商目录默认被忽略。通常,您不需要检查供应商目录。

格式

指定输出格式。目前仅支持 prettyjson

配置

指定配置文件名称。当您想使用除 .pahout.yaml 以外的文件名作为配置文件时,这很有用。

注释

使用注释,您可以忽略特定行的提示。使用 @rebel 指定您想忽略的工具名称。

<?php

/** @rebel NullCoalescingOperator */
$error = isset($response['error']) ? $response['error'] : null;

以下注释将以相同的方式工作。

<?php

/**
* @rebel NullCoalescingOperator
*/
$error = isset($response['error']) ? $response['error'] : null;

$error = isset($response['error']) ? $response['error'] : null; # @rebel NullCoalescingOperator

作者

渡边和马