README.rst 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  1. PHP Coding Standards Fixer
  2. ==========================
  3. The PHP Coding Standards Fixer tool fixes *most* issues in your code when you
  4. want to follow the PHP coding standards as defined in the PSR-1 and PSR-2
  5. documents and many more.
  6. If you are already using a linter to identify coding standards problems in your
  7. code, you know that fixing them by hand is tedious, especially on large
  8. projects. This tool does not only detect them, but also fixes them for you.
  9. Requirements
  10. ------------
  11. PHP needs to be a minimum version of PHP 5.3.6.
  12. Installation
  13. ------------
  14. Locally
  15. ~~~~~~~
  16. Download the `php-cs-fixer.phar`_ file and store it somewhere on your computer.
  17. Globally (manual)
  18. ~~~~~~~~~~~~~~~~~
  19. You can run these commands to easily access ``php-cs-fixer`` from anywhere on
  20. your system:
  21. .. code-block:: bash
  22. $ wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer
  23. or with curl:
  24. .. code-block:: bash
  25. $ curl http://get.sensiolabs.org/php-cs-fixer.phar -o php-cs-fixer
  26. then:
  27. .. code-block:: bash
  28. $ sudo chmod a+x php-cs-fixer
  29. $ sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer
  30. Then, just run ``php-cs-fixer``.
  31. Globally (Composer)
  32. ~~~~~~~~~~~~~~~~~~~
  33. To install PHP-CS-Fixer, install Composer and issue the following command:
  34. .. code-block:: bash
  35. $ ./composer.phar global require fabpot/php-cs-fixer
  36. Then make sure you have ``~/.composer/vendor/bin`` in your ``PATH`` and
  37. you're good to go:
  38. .. code-block:: bash
  39. export PATH="$PATH:$HOME/.composer/vendor/bin"
  40. Globally (homebrew)
  41. ~~~~~~~~~~~~~~~~~~~
  42. PHP-CS-Fixer is part of the homebrew-php project. Follow the installation
  43. instructions at https://github.com/homebrew/homebrew-php if you don't
  44. already have it.
  45. .. code-block:: bash
  46. $ brew install homebrew/php/php-cs-fixer
  47. Update
  48. ------
  49. Locally
  50. ~~~~~~~
  51. The ``self-update`` command tries to update ``php-cs-fixer`` itself:
  52. .. code-block:: bash
  53. $ php php-cs-fixer.phar self-update
  54. Globally (manual)
  55. ~~~~~~~~~~~~~~~~~
  56. You can update ``php-cs-fixer`` through this command:
  57. .. code-block:: bash
  58. $ sudo php-cs-fixer self-update
  59. Globally (Composer)
  60. ~~~~~~~~~~~~~~~~~~~
  61. You can update ``php-cs-fixer`` through this command:
  62. .. code-block:: bash
  63. $ ./composer.phar global update fabpot/php-cs-fixer
  64. Globally (homebrew)
  65. ~~~~~~~~~~~~~~~~~~~
  66. You can update ``php-cs-fixer`` through this command:
  67. .. code-block:: bash
  68. $ brew upgrade php-cs-fixer
  69. Usage
  70. -----
  71. The ``fix`` command tries to fix as much coding standards
  72. problems as possible on a given file or files in a given directory and its subdirectories:
  73. .. code-block:: bash
  74. php php-cs-fixer.phar fix /path/to/dir
  75. php php-cs-fixer.phar fix /path/to/file
  76. The ``--format`` option can be used to set the output format of the results; ``txt`` (default one), ``xml`` or ``json``.
  77. The ``--verbose`` option will show the applied fixers. When using the ``txt`` format it will also displays progress notifications.
  78. The ``--rules`` option limits the rules to apply on the
  79. project:
  80. .. code-block:: bash
  81. php php-cs-fixer.phar fix /path/to/project --rules=@PSR2
  82. By default, all PSR fixers are run.
  83. The ``--rules`` option lets you choose the exact fixers to
  84. apply (the fixer names must be separated by a comma):
  85. .. code-block:: bash
  86. php php-cs-fixer.phar fix /path/to/dir --rules=linefeed,short_tag,indentation
  87. You can also blacklist the fixers you don't want by placing a dash in front of the fixer name, if this is more convenient,
  88. using ``-name_of_fixer``:
  89. .. code-block:: bash
  90. php php-cs-fixer.phar fix /path/to/dir --rules=-short_tag,-indentation
  91. When using combinations of exact and blacklist fixers, applying exact fixers along with above blacklisted results:
  92. .. code-block:: bash
  93. php php-cs-fixer.phar fix /path/to/project --rules=@Symfony,-@PSR1,-return,strict
  94. A combination of ``--dry-run`` and ``--diff`` will
  95. display a summary of proposed fixes, leaving your files unchanged.
  96. The ``--allow-risky`` option allows you to set whether riskys fixer may run. Default value is taken from config file.
  97. Risky fixer is a fixer, which could change code behaviour. By default no risky fixers are run.
  98. The command can also read from standard input, in which case it won't
  99. automatically fix anything:
  100. .. code-block:: bash
  101. cat foo.php | php php-cs-fixer.phar fix --diff -
  102. Choose from the list of available fixers:
  103. * **alias_functions** [@Symfony]
  104. Master functions shall be used
  105. instead of aliases.
  106. * **align_double_arrow**
  107. Align double arrow symbols in
  108. consecutive lines.
  109. * **align_equals**
  110. Align equals symbols in
  111. consecutive lines.
  112. * **array_element_no_space_before_comma** [@Symfony]
  113. In array declaration, there
  114. MUST NOT be a whitespace
  115. before each comma.
  116. * **array_element_white_space_after_comma** [@Symfony]
  117. In array declaration, there
  118. MUST be a whitespace after
  119. each comma.
  120. * **blankline_after_open_tag** [@Symfony]
  121. Ensure there is no code on the
  122. same line as the PHP open tag
  123. and it is followed by a
  124. blankline.
  125. * **braces** [@PSR2, @Symfony]
  126. The body of each structure
  127. MUST be enclosed by braces.
  128. Braces should be properly
  129. placed. Body of braces should
  130. be properly indented.
  131. * **concat_with_spaces**
  132. Concatenation should be used
  133. with at least one whitespace
  134. around.
  135. * **concat_without_spaces** [@Symfony]
  136. Concatenation should be used
  137. without spaces.
  138. * **double_arrow_multiline_whitespaces** [@Symfony]
  139. Operator => should not be
  140. surrounded by multi-line
  141. whitespaces.
  142. * **duplicate_semicolon** [@Symfony]
  143. Remove duplicated semicolons.
  144. * **echo_to_print**
  145. Converts echo language
  146. construct to print if
  147. possible.
  148. * **elseif** [@PSR2, @Symfony]
  149. The keyword elseif should be
  150. used instead of else if so
  151. that all control keywords look
  152. like single words.
  153. * **empty_return** [@Symfony]
  154. A return statement wishing to
  155. return nothing should be
  156. simply "return".
  157. * **encoding** [@PSR1, @PSR2, @Symfony]
  158. PHP code MUST use only UTF-8
  159. without BOM (remove BOM).
  160. * **eof_ending** [@PSR2, @Symfony]
  161. A file must always end with a
  162. single empty line feed.
  163. * **ereg_to_preg**
  164. Replace deprecated ereg
  165. regular expression functions
  166. with preg. (Risky fixer!)
  167. * **extra_empty_lines** [@Symfony]
  168. Removes extra empty lines.
  169. * **function_call_space** [@PSR2, @Symfony]
  170. When making a method or
  171. function call, there MUST NOT
  172. be a space between the method
  173. or function name and the
  174. opening parenthesis.
  175. * **function_declaration** [@PSR2, @Symfony]
  176. Spaces should be properly
  177. placed in a function
  178. declaration.
  179. * **function_typehint_space** [@Symfony]
  180. Add missing space between
  181. function's argument and its
  182. typehint.
  183. * **header_comment**
  184. Add, replace or remove header
  185. comment.
  186. * **include** [@Symfony]
  187. Include and file path should
  188. be divided with a single
  189. space. File path should not be
  190. placed under brackets.
  191. * **indentation** [@PSR2, @Symfony]
  192. Code MUST use an indent of 4
  193. spaces, and MUST NOT use tabs
  194. for indenting.
  195. * **line_after_namespace** [@PSR2, @Symfony]
  196. There MUST be one blank line
  197. after the namespace
  198. declaration.
  199. * **linefeed** [@PSR2, @Symfony]
  200. All PHP files must use the
  201. Unix LF (linefeed) line
  202. ending.
  203. * **list_commas** [@Symfony]
  204. Remove trailing commas in list
  205. function calls.
  206. * **logical_not_operators_with_spaces**
  207. Logical NOT operators (!)
  208. should have leading and
  209. trailing whitespaces.
  210. * **logical_not_operators_with_successor_space**
  211. Logical NOT operators (!)
  212. should have one trailing
  213. whitespace.
  214. * **long_array_syntax**
  215. Arrays should use the long
  216. syntax.
  217. * **lowercase_constants** [@PSR2, @Symfony]
  218. The PHP constants true, false,
  219. and null MUST be in lower
  220. case.
  221. * **lowercase_keywords** [@PSR2, @Symfony]
  222. PHP keywords MUST be in lower
  223. case.
  224. * **method_argument_space** [@PSR2, @Symfony]
  225. In method arguments and method
  226. call, there MUST NOT be a
  227. space before each comma and
  228. there MUST be one space after
  229. each comma.
  230. * **method_separation** [@Symfony]
  231. Methods must be separated with
  232. one blank line.
  233. * **multiline_array_trailing_comma** [@Symfony]
  234. PHP multi-line arrays should
  235. have a trailing comma.
  236. * **multiline_spaces_before_semicolon**
  237. Multi-line whitespace before
  238. closing semicolon are
  239. prohibited.
  240. * **multiple_use** [@PSR2, @Symfony]
  241. There MUST be one use keyword
  242. per declaration.
  243. * **namespace_no_leading_whitespace** [@Symfony]
  244. The namespace declaration line
  245. shouldn't contain leading
  246. whitespace.
  247. * **new_with_braces** [@Symfony]
  248. All instances created with new
  249. keyword must be followed by
  250. braces.
  251. * **newline_after_open_tag**
  252. Ensure there is no code on the
  253. same line as the PHP open tag.
  254. * **no_blank_lines_after_class_opening** [@Symfony]
  255. There should be no empty lines
  256. after class opening brace.
  257. * **no_blank_lines_before_namespace**
  258. There should be no blank lines
  259. before a namespace
  260. declaration.
  261. * **no_empty_lines_after_phpdocs** [@Symfony]
  262. There should not be blank
  263. lines between docblock and the
  264. documented element.
  265. * **object_operator** [@Symfony]
  266. There should not be space
  267. before or after object
  268. T_OBJECT_OPERATOR.
  269. * **operators_spaces** [@Symfony]
  270. Binary operators should be
  271. surrounded by at least one
  272. space.
  273. * **ordered_use**
  274. Ordering use statements.
  275. * **parenthesis** [@PSR2, @Symfony]
  276. There MUST NOT be a space
  277. after the opening parenthesis.
  278. There MUST NOT be a space
  279. before the closing
  280. parenthesis.
  281. * **php4_constructor**
  282. Convert PHP4-style
  283. constructors to __construct.
  284. (Risky fixer!)
  285. * **php_closing_tag** [@PSR2, @Symfony]
  286. The closing ?> tag MUST be
  287. omitted from files containing
  288. only PHP.
  289. * **php_unit_construct**
  290. PHPUnit assertion method calls
  291. like "->assertSame(true,
  292. $foo)" should be written with
  293. dedicated method like
  294. "->assertTrue($foo)". (Risky
  295. fixer!)
  296. * **php_unit_strict**
  297. PHPUnit methods like
  298. "assertSame" should be used
  299. instead of "assertEquals".
  300. (Risky fixer!)
  301. * **phpdoc_align** [@Symfony]
  302. All items of the @param,
  303. @throws, @return, @var, and
  304. @type phpdoc tags must be
  305. aligned vertically.
  306. * **phpdoc_indent** [@Symfony]
  307. Docblocks should have the same
  308. indentation as the documented
  309. subject.
  310. * **phpdoc_inline_tag** [@Symfony]
  311. Fix PHPDoc inline tags, make
  312. inheritdoc always inline.
  313. * **phpdoc_no_access** [@Symfony]
  314. @access annotations should be
  315. omitted from phpdocs.
  316. * **phpdoc_no_empty_return** [@Symfony]
  317. @return void and @return null
  318. annotations should be omitted
  319. from phpdocs.
  320. * **phpdoc_no_package** [@Symfony]
  321. @package and @subpackage
  322. annotations should be omitted
  323. from phpdocs.
  324. * **phpdoc_order**
  325. Annotations in phpdocs should
  326. be ordered so that param
  327. annotations come first, then
  328. throws annotations, then
  329. return annotations.
  330. * **phpdoc_scalar** [@Symfony]
  331. Scalar types should always be
  332. written in the same form.
  333. "int", not "integer"; "bool",
  334. not "boolean"; "float", not
  335. "real" or "double".
  336. * **phpdoc_separation** [@Symfony]
  337. Annotations in phpdocs should
  338. be grouped together so that
  339. annotations of the same type
  340. immediately follow each other,
  341. and annotations of a different
  342. type are separated by a single
  343. blank line.
  344. * **phpdoc_summary** [@Symfony]
  345. Phpdocs summary should end in
  346. either a full stop,
  347. exclamation mark, or question
  348. mark.
  349. * **phpdoc_to_comment** [@Symfony]
  350. Docblocks should only be used
  351. on structural elements.
  352. * **phpdoc_trim** [@Symfony]
  353. Phpdocs should start and end
  354. with content, excluding the
  355. very first and last line of
  356. the docblocks.
  357. * **phpdoc_type_to_var** [@Symfony]
  358. @type should always be written
  359. as @var.
  360. * **phpdoc_types** [@Symfony]
  361. The correct case must be used
  362. for standard PHP types in
  363. phpdoc.
  364. * **phpdoc_var_to_type**
  365. @var should always be written
  366. as @type.
  367. * **phpdoc_var_without_name** [@Symfony]
  368. @var and @type annotations
  369. should not contain the
  370. variable name.
  371. * **pre_increment** [@Symfony]
  372. Pre
  373. incrementation/decrementation
  374. should be used if possible.
  375. * **print_to_echo** [@Symfony]
  376. Converts print language
  377. construct to echo if possible.
  378. * **psr0**
  379. Classes must be in a path that
  380. matches their namespace, be at
  381. least one namespace deep and
  382. the class name should match
  383. the file name. (Risky fixer!)
  384. * **remove_leading_slash_use** [@Symfony]
  385. Remove leading slashes in use
  386. clauses.
  387. * **remove_lines_between_uses** [@Symfony]
  388. Removes line breaks between
  389. use statements.
  390. * **return** [@Symfony]
  391. An empty line feed should
  392. precede a return statement.
  393. * **self_accessor** [@Symfony]
  394. Inside a classy element "self"
  395. should be preferred to the
  396. class name itself.
  397. * **short_array_syntax**
  398. PHP arrays should use the PHP
  399. 5.4 short-syntax.
  400. * **short_bool_cast** [@Symfony]
  401. Short cast bool using double
  402. exclamation mark should not be
  403. used.
  404. * **short_echo_tag**
  405. Replace short-echo <?= with
  406. long format <?php echo syntax.
  407. * **short_tag** [@PSR1, @PSR2, @Symfony]
  408. PHP code must use the long
  409. <?php ?> tags or the
  410. short-echo <?= ?> tags; it
  411. must not use the other tag
  412. variations.
  413. * **single_array_no_trailing_comma** [@Symfony]
  414. PHP single-line arrays should
  415. not have trailing comma.
  416. * **single_blank_line_before_namespace** [@Symfony]
  417. There should be exactly one
  418. blank line before a namespace
  419. declaration.
  420. * **single_line_after_imports** [@PSR2, @Symfony]
  421. Each namespace use MUST go on
  422. its own line and there MUST be
  423. one blank line after the use
  424. statements block.
  425. * **single_quote** [@Symfony]
  426. Convert double quotes to
  427. single quotes for simple
  428. strings.
  429. * **spaces_before_semicolon** [@Symfony]
  430. Single-line whitespace before
  431. closing semicolon are
  432. prohibited.
  433. * **spaces_cast** [@Symfony]
  434. A single space should be
  435. between cast and variable.
  436. * **standardize_not_equal** [@Symfony]
  437. Replace all <> with !=.
  438. * **strict**
  439. Comparison should be strict.
  440. (Risky fixer!)
  441. * **strict_param**
  442. Functions should be used with
  443. $strict param. (Risky fixer!)
  444. * **ternary_spaces** [@Symfony]
  445. Standardize spaces around
  446. ternary operator.
  447. * **trailing_spaces** [@PSR2, @Symfony]
  448. Remove trailing whitespace at
  449. the end of non-blank lines.
  450. * **trim_array_spaces** [@Symfony]
  451. Arrays should be formatted
  452. like function/method
  453. arguments, without leading or
  454. trailing single line space.
  455. * **unalign_double_arrow** [@Symfony]
  456. Unalign double arrow symbols.
  457. * **unalign_equals** [@Symfony]
  458. Unalign equals symbols.
  459. * **unary_operators_spaces** [@Symfony]
  460. Unary operators should be
  461. placed adjacent to their
  462. operands.
  463. * **unneeded_control_parentheses** [@Symfony]
  464. Removes unneeded parentheses
  465. around control statements.
  466. * **unused_use** [@Symfony]
  467. Unused use statements must be
  468. removed.
  469. * **visibility** [@PSR2, @Symfony]
  470. Visibility MUST be declared on
  471. all properties and methods;
  472. abstract and final MUST be
  473. declared before the
  474. visibility; static MUST be
  475. declared after the visibility.
  476. * **whitespacy_lines** [@Symfony]
  477. Remove trailing whitespace at
  478. the end of blank lines.
  479. The ``--config`` option customizes the files to analyse, based
  480. on some well-known directory structures:
  481. .. code-block:: bash
  482. # For the Symfony 2.3+ branch
  483. php php-cs-fixer.phar fix /path/to/sf23 --config=sf23
  484. Choose from the list of available configurations:
  485. * **default** A default configuration
  486. * **magento** The configuration for a Magento application
  487. * **sf23** The configuration for the Symfony 2.3+ branch
  488. The ``--dry-run`` option displays the files that need to be
  489. fixed but without actually modifying them:
  490. .. code-block:: bash
  491. php php-cs-fixer.phar fix /path/to/code --dry-run
  492. Instead of using command line options to customize the fixer, you can save the
  493. project configuration in a ``.php_cs.dist`` file in the root directory
  494. of your project. The file must return an instance of ``Symfony\CS\ConfigInterface``,
  495. which lets you configure the rules, the files and directories that
  496. need to be analyzed. You may also create ``.php_cs`` file, which is
  497. the local configuration that will be used instead of the project configuration. It
  498. is a good practice to add that file into your ``.gitignore`` file.
  499. With the ``--config-file`` option you can specify the path to the
  500. ``.php_cs`` file.
  501. The example below will add two fixers to the default list of PSR2 set fixers:
  502. .. code-block:: php
  503. <?php
  504. $finder = Symfony\CS\Finder\DefaultFinder::create()
  505. ->exclude('somedir')
  506. ->in(__DIR__)
  507. ;
  508. return Symfony\CS\Config\Config::create()
  509. ->setRules(array(
  510. '@PSR2' => true,
  511. 'strict_param' => true,
  512. 'short_array_syntax' => true,
  513. ))
  514. ->finder($finder)
  515. ;
  516. You may also use a blacklist for the Fixers instead of the above shown whitelist approach.
  517. The following example shows how to use all ``Symfony`` Fixers but the ``short_tag`` Fixer.
  518. .. code-block:: php
  519. <?php
  520. $finder = Symfony\CS\Finder\DefaultFinder::create()
  521. ->exclude('somedir')
  522. ->in(__DIR__)
  523. ;
  524. return Symfony\CS\Config\Config::create()
  525. ->setRules(array(
  526. '@Symfony' => true,
  527. 'short_tag' => false,
  528. ))
  529. ->finder($finder)
  530. ;
  531. By using ``--using-cache`` option with yes or no you can set if the caching
  532. mechanism should be used.
  533. Caching
  534. -------
  535. The caching mechanism is enabled by default. This will speed up further runs by
  536. fixing only files that were modified since the last run. The tool will fix all
  537. files if the tool version has changed or the list of fixers has changed.
  538. Cache is supported only for tool downloaded as phar file or installed via
  539. composer.
  540. Cache can be disabled via ``--using-cache`` option or config file:
  541. .. code-block:: php
  542. <?php
  543. return Symfony\CS\Config\Config::create()
  544. ->setUsingCache(false)
  545. ;
  546. Cache file can be specified via ``--cache-file`` option or config file:
  547. .. code-block:: php
  548. <?php
  549. return Symfony\CS\Config\Config::create()
  550. ->setCacheFile(__DIR__.'/.php_cs.cache')
  551. ;
  552. Using PHP CS Fixer on Travis
  553. ----------------------------
  554. Require ``fabpot/php-cs-fixer`` as a `dev`` dependency:
  555. .. code-block:: bash
  556. $ ./composer.phar require --dev fabpot/php-cs-fixer
  557. Create a build file to run ``php-cs-fixer`` on Travis. It's advisable to create a dedicated directory
  558. for PHP CS Fixer cache files and have Travis cache it between builds.
  559. .. code-block:: yaml
  560. language: php
  561. php:
  562. - 5.5
  563. sudo: false
  564. cache:
  565. directories:
  566. - "$HOME/.composer/cache"
  567. - "$HOME/.php-cs-fixer"
  568. before_script:
  569. - mkdir -p "$HOME/.php-cs-fixer"
  570. script:
  571. - vendor/bin/php-cs-fixer fix --cache-file "$HOME/.php-cs-fixer/.php_cs.cache" --dry-run --diff --verbose
  572. Note: This will only trigger a build if you have a subscription for Travis
  573. or are using their free open source plan.
  574. Helpers
  575. -------
  576. Dedicated plugins exist for:
  577. * `Atom`_
  578. * `NetBeans`_
  579. * `PhpStorm`_
  580. * `Sublime Text`_
  581. * `Vim`_
  582. Contribute
  583. ----------
  584. The tool comes with quite a few built-in fixers and finders, but everyone is
  585. more than welcome to `contribute`_ more of them.
  586. Fixers
  587. ~~~~~~
  588. A *fixer* is a class that tries to fix one CS issue (a ``Fixer`` class must
  589. implement ``FixerInterface``).
  590. Configs
  591. ~~~~~~~
  592. A *config* knows about the CS rules and the files and directories that must be
  593. scanned by the tool when run in the directory of your project. It is useful for
  594. projects that follow a well-known directory structures (like for Symfony
  595. projects for instance).
  596. .. _php-cs-fixer.phar: http://get.sensiolabs.org/php-cs-fixer.phar
  597. .. _Atom: https://github.com/Glavin001/atom-beautify
  598. .. _NetBeans: http://plugins.netbeans.org/plugin/49042/php-cs-fixer
  599. .. _PhpStorm: http://tzfrs.de/2015/01/automatically-format-code-to-match-psr-standards-with-phpstorm
  600. .. _Sublime Text: https://github.com/benmatselby/sublime-phpcs
  601. .. _Vim: https://github.com/stephpy/vim-php-cs-fixer
  602. .. _contribute: https://github.com/FriendsOfPhp/php-cs-fixer/blob/master/CONTRIBUTING.md