/phplint

:bug: A tool that can speed up linting of php files by running several lint processes at once.

Primary LanguagePHPMIT LicenseMIT

PHPLint

`phplint` is a tool that can speed up linting of php files by running several lint processes at once.

🚨 There are two better packages for syntax detection and static analysis: Psalm and PHPStan, recently my work has started to get busier and I won't have much time to maintain this project, if you are interested in maintaining it please raise an issue, Thanks.

artboard

Release Status Latest Stable Version Total Downloads Latest Unstable Version License Scrutinizer Code Quality FOSSA Status

Sponsor me

Installation

required

  • PHP >= 8.1
  • Composer >= 2.1

if you are using php 7.4, please refer the 7.4 branch.

if you are using php 8.0, please refer the 8.0 branch.

if you are using php 8.2, please refer the 8.2 branch.

Locally, if you have PHP

composer require overtrue/phplint --dev -vvv

Locally, if you only have Docker

docker pull overtrue/phplint:8.1

Usage

CLI

Description:
  Lint something

Usage:
  phplint [options] [--] [<path>...]

Arguments:
  path                               Path to file or directory to lint

Options:
      --exclude=EXCLUDE              Path to file or directory to exclude from linting (multiple values allowed)
      --extensions=EXTENSIONS        Check only files with selected extensions [default: ["php"]]
  -j, --jobs=JOBS                    Number of paralleled jobs to run [default: 5]
  -c, --configuration=CONFIGURATION  Read configuration from config file [default: ".phplint.yml"]
      --no-configuration             Ignore default configuration file (.phplint.yml)
      --no-cache                     Ignore cached data
      --cache[=CACHE]                Path to the cache file [default: ".phplint-cache"]
      --no-progress                  Hide the progress output
      --json[=JSON]                  Path to store JSON results
      --xml[=XML]                    Path to store JUnit XML results
  -w, --warning                      Also show warnings
  -q, --quiet                        Do not output any message
      --no-files-exit-code           Throw error if no files processed
  -h, --help                         Display help for the given command. When no command is given display help for the list command
  -V, --version                      Display this application version
      --ansi|--no-ansi               Force (or disable --no-ansi) 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

example:

./vendor/bin/phplint ./ --exclude=vendor

You can also define configuration as a file .phplint.yml:

path: ./
jobs: 10
cache: build/phplint.cache
no-cache: false
extensions:
  - php
exclude:
  - vendor
warning: false
memory-limit: -1
./vendor/bin/phplint

By default, the command will read configuration from file .phplint.yml of path specified, you can use another filename by option: --configuration=FILENAME or -c FILENAME;

If you want to disable the config file, you can add option --no-configuration.

Docker cli

docker run --rm -t -v "${PWD}":/workdir overtrue/phplint:8.1 ./  --exclude=vendor

Please mount the code directory to /workdir in the container.

Program

use Overtrue\PHPLint\Linter;

$path = __DIR__ .'/app';
$exclude = ['vendor'];
$extensions = ['php'];
$warnings = true;

$linter = new Linter($path, $exclude, $extensions, $warnings);

// get errors
$errors = $linter->lint();

//
// [
//    '/path/to/foo.php' => [
//          'error' => "unexpected '$key' (T_VARIABLE)",
//          'line' => 168,
//          'file' => '/path/to/foo.php',
//      ],
//    '/path/to/bar.php' => [
//          'error' => "unexpected 'class' (T_CLASS), expecting ',' or ';'",
//          'line' => 28,
//          'file' => '/path/to/bar.php',
//      ],
// ]

GitHub Actions

uses: overtrue/phplint@8.1
with:
  path: .
  options: --exclude=*.log

GitLab CI

code-quality:lint-php:
  image: overtrue/phplint:8.1
  variables:
    INPUT_PATH: "./"
    INPUT_OPTIONS: "-c .phplint.yml"
  script: echo '' #prevents ci yml parse error

Other CI/CD (f.e. Bitbucket Pipelines)

Run this command using overtrue/phplint:8.1 Docker image:

/root/.composer/vendor/bin/phplint ./ --exclude=vendor

Warnings

Not all linting problems are errors, PHP also has warnings, for example when using a continue statement within a switch case. By default, these errors are not reported, but you can turn this on with the warning cli flag, or by setting the warning to true in the configuration.

❤️ Sponsor me

Sponsor me

如果你喜欢我的项目并想支持它,点击这里 ❤️

Project supported by JetBrains

Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.

PHP 扩展包开发

想知道如何从零开始构建 PHP 扩展包?

请关注我的实战课程,我会在此课程中分享一些扩展开发经验 —— 《PHP 扩展包实战教程 - 从入门到发布》

License

MIT