nochso/phormat

PHP source formatter with a single style - essentially godoc for PHP

Installs: 7

Dependents: 0

Suggesters: 0

Security: 0

Stars: 4

Watchers: 2

Forks: 0

Open Issues: 1

Type:application

0.1.5 2016-04-23 20:07 UTC

This package is not auto-updated.

Last update: 2024-04-13 16:56:38 UTC


README

write me to read me License Latest tag on Github Travis CI build status Coverage status

Phormat formats PHP source code.

Differences to other fixers or PSR2:

  • You can not influence the style, similar to gofmt.
  • Tabs for indentation.
  • Opening braces { on the same line: ) {
  • No extra whitespacy lines in code or comments.
  • Use statements are always sorted.
  • Optional re-arranging of class level elements.
  • Fast. Check out the benchmarks.

Introduction, goals and scope

Phormat is a pretty printer based on nikic/php-parser. It discards any formatting and prints source code in a uniform style. Custom formatting options are out of scope.

The chosen style is personal preference and attempts to keep the line count low while keeping the code readable.

You're anti-PSR! Why do you hate FIG?

I'm not. I don't. This is not a replacement, improvement or critique of PSR2 but merely an alternative you're free to ignore.

PSR2 is quite widespread for a reason and has helped lots of projects decide on a common style. However it does not mean everybody loves it personally or that it is a de-facto standard you must adhere to. The questions of tabs vs. spaces or placement of braces will always be part of a holy war as it comes down to personal preference.

In the end, it's best for collaboration if a project has a well defined style that is easy for contributors to adhere to. Which is easily possible for both PSR2 and phormat.

See php-cs-fixer for a great way to adhere to PSR2.

Requirements

This project is written for and tested with PHP 5.6, 7.0 and HHVM.

Installation

For end-users the PHAR version is preferred. To install it globally:

  1. Download the PHAR file from the latest release.
  2. Make it executable: chmod +x phormat.phar
  3. Move it somewhere within your PATH: sudo cp phormat.phar /usr/local/bin/phormat

As local Composer development dependency per project:

composer require --dev nochso/phormat

As global Composer dependency:

composer global require nochso/phormat

Usage

As a local dependency php vendor/bin/phormat or if installed globally just phormat.

phormat [options] <path>
phormat [options] <path1> <path2> ...

By default PHP files from the specified paths will be overwritten. See the options below to override this behaviour.

If path is a folder it will be searched recursively for files ending with *.php.

Native PHP templates will be skipped to avoid messing up their formatting. Templates are detected by looking for alternative syntax for control structures like if (true): .. endif;

Command line options

Arguments
    <paths>
        One or many paths to files or directories.

Options
    -d, --diff
        Preview diff of formatted code. Implies --no-output.

    -s, --summary
        Show a status summary for each file.

    -o, --order
        Change order of class elements:
        constants > properties > methods
        static > abstract > *
        public > protected > private
        __* > has* > is* > get* > set* > add* > remove* > enable* > disable* > *

    -p, --print
        Print full output of formatted code. Implies --no-output.

    -n, --no-output
        Do not overwrite source files.

    -h, --help
        Show this help.

    --version
        Show version information.

    --self-update
        Update phormat to the latest version.

Contributing

Feedback, bug reports and pull requests are always welcome.

Please read the contributing guide for instructions.

Change log

See CHANGELOG.md for the full history of changes between releases.

[Unreleased]

Changed

  • Improved line wrapping: Use a soft limit of 100 characters for lines made of ., || and &&.

[0.1.5] - 2016-04-23

Changed

  • Allow self-update without public key.

[0.1.4] - 2016-04-23

Added

  • Show warnings when xdebug or xdebug-profiling is enabled.

Changed

  • Put closing parenthesis of multiple lines on a new line.
  • Use statements are always sorted.
  • Separate classes, interfaces and traits.
  • Keep use and group-use statements together.

License

This project is released under the MIT license. See LICENSE.md for the full text.