README.rst 26 KB

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