Recommend this page to a friend! |
Download .zip |
Info | View files (157) | Download .zip | Reputation | Support forum (1) | Blog | Links |
Ratings | Unique User Downloads | Download Rankings | ||||
Not enough user ratings | Total: 284 | All time: 7,562 This week: 206 |
Version | License | PHP version | Categories | |||
phpcf 1.0.1 | GNU Lesser Genera... | 5.4 | PHP 5, Tools, Text processing |
Description | Author | |||
This package can reformat PHP code according to standard options. Innovation Award
|
Форматер был создан для того, чтобы в основном менять пробельные символы: переносы строк, отступы, пробелы вокруг операторов, и т.д. Таким образом, phpcf не заменяет другие схожие утилиты, такие как вышеупомянутый PHP Code Sniffer и PHP Coding Standards Fixer (http://cs.sensiolabs.org) от Фабьена Потенцьера. Он дополняет их, выполняя «грязную работу» по правильной расстановке пробелов и переносов строк в файле. Важно отметить, что наша утилита учитывает изначальное форматирование в файле и меняет только те пробелы, которые не соответствуют выбранному стандарту (в отличие от некоторых других решений, которые сначала удаляют все пробельные токены, а потом начинают форматирование).
Утилита расширяема и поддерживает произвольные наборы стилей. Можно достаточно легко определить свой стиль форматирования, который будет реализовать другой стандарт, отличный от нашего (стандарт кодирования в нашей компании очень близок к PSR).
Пример использования (команда “phpcf apply <filename>” форматирует указанный файл, а “phpcf check <filename>” проверяет форматирование и возвращает ненулевой exit-код в случае наличия неотформатированных фрагментов):
$ cat minifier.php
<?php
$tokens=token_get_all(file_get_contents($argv[1]));$contents='';foreach($tokens as $tok){if($tok[0]===T_WHITESPACE||$tok[0]===T_COMMENT)continue;if($tok[0]===T_AS||$tok[0]===T_ELSE)$contents.=' '.$tok[1].' '; else $contents.=is_array($tok)?$tok[1]:$tok;}echo$contents."\n";
$ phpcf apply minifier.php
minifier.php formatted successfully
$ cat minifier.php
<?php
$tokens = token_get_all(file_get_contents($argv[1]));
$contents = '';
foreach ($tokens as $tok) {
if ($tok[0] === T_WHITESPACE || $tok[0] === T_COMMENT) continue;
if ($tok[0] === T_AS || $tok[0] === T_ELSE) $contents .= ' ' . $tok[1] . ' ';
else $contents .= is_array($tok) ? $tok[1] : $tok;
}
echo $contents . "\n";
$ phpcf check minifier.php; echo $?
minifier.php does not need formatting
0
Помимо форматирования файла целиком, наша утилита также умеет форматировать часть файла. Для этого нужно указать диапазоны номеров строк через двоеточие:
$ cat zebra.php
<?php
echo "White "."strip".PHP_EOL;
echo "Black "."strip".PHP_EOL; // not formatted
echo "Arse".PHP_EOL;
$ phpcf apply zebra.php:1-2,4
zebra.php formatted successfully
$ cat zebra.php
<?php
echo "White " . "strip" . PHP_EOL;
echo "Black "."strip".PHP_EOL; // not formatted
echo "Arse" . PHP_EOL;
$ phpcf check zebra.php
zebra.php issues:
Expected one space before binary operators (= < > * . etc) on line 3 column 14
Expected one space after binary operators (= < > * . etc) on line 3 column 15
...
$ echo $?
1
Даже несмотря на то, что утилита написана на PHP, форматирование большинства файлов проходит за доли секунды. Но у нас большой репозиторий и много кода, так что мы написали расширение, которое, будучи подключенным, увеличивает производительность работы в сотню раз: весь наш репозиторий в 2 миллиона строк форматируется за 8 секунд на «ноутбучном» Core i7. Для использования расширения требуется его собрать из директории “ext/”, установить, включить “enable_dl = On” в php.ini или прописать его как extension.
Хотелось бы еще раз подчеркнуть, что phpcf прежде всего меняет пробельные символы и умеет делать лишь простейшие преобразования над кодом: например, заменять короткий открывающий тег на длинный или убирать последний закрывающий тег из файла. Помимо этого, phpcf умеет автоматически исправлять кириллицу в названиях функций на английские символы. Также не трогаются выражения, выровненные вручную с помощью пробелов. Это происходит из-за архитектуры — форматер работает как конечный автомат с правилами, которые задает пользователь, а не как набор «захардкоженных» замен (форматер поставляется с «конфигом по умолчанию», соответствующим нашим правилам форматирования). Поэтому, если вы хотите автоматическую замену “var” на “public” или похожих вещей, рекомендуем обратить внимание на PHP-CS-Fixer — он мало внимания уделяет пробельным символам (в отличие от phpcf), но зато умеет переписывать токены.
Files | / | phpcf-src |
Files | / | phpcf-src | / | ext |
File | Role | Description |
---|---|---|
config.m4 | Data | Auxiliary data |
CREDITS | Data | Auxiliary data |
phpcf.c | Data | Auxiliary data |
php_phpcf.h | Data | Auxiliary data |
Files | / | phpcf-src | / | src |
File | Role | Description | ||
---|---|---|---|---|
cli (8 files, 1 directory) | ||||
filter (3 files) | ||||
impl (2 files) | ||||
ClassLoader.php | Class | Class source | ||
defines.php | Conf. | Configuration script | ||
ExecStat.php | Class | Class source | ||
Formatter.php | Class | Class source | ||
FormattingResult.php | Class | Class source | ||
Helper.php | Class | Class source | ||
IFormatter.php | Class | Class source | ||
init.php | Conf. | Configuration script | ||
Options.php | Class | Class source |
Files | / | phpcf-src | / | src | / | cli |
File | Role | Description | ||
---|---|---|---|---|
git (5 files) | ||||
AbstractAction.php | Class | Class source | ||
ActionApply.php | Class | Class source | ||
ActionCheck.php | Class | Class source | ||
ActionPreview.php | Class | Class source | ||
ActionStdin.php | Class | Class source | ||
Ctx.php | Class | Class source | ||
Handler.php | Class | Class source | ||
IAction.php | Class | Class source |
Files | / | phpcf-src | / | src | / | cli | / | git |
File | Role | Description |
---|---|---|
ActionApply.php | Class | Class source |
ActionCheck.php | Class | Class source |
ActionPreview.php | Class | Class source |
GitCallback.php | Class | Class source |
Helper.php | Class | Class source |
Files | / | phpcf-src | / | src | / | filter |
File | Role | Description |
---|---|---|
StringAscii.php | Class | Class source |
StringAsciiMap.php | Class | Class source |
StringAsciiMapCyr.php | Class | Class source |
Files | / | phpcf-src | / | styles | / | default |
File | Role | Description |
---|---|---|
context-rules.php | Conf. | Configuration script |
formatting-rules.php | Conf. | Configuration script |
Files | / | phpcf-src | / | styles | / | example |
File | Role | Description |
---|---|---|
context-rules.php | Conf. | Configuration script |
formatting-rules.php | Conf. | Configuration script |
phpcf-class.php | Class | Class source |
test-in.php | Test | Unit test script |
test-out.php | Test | Unit test script |
Files | / | phpcf-src | / | test |
File | Role | Description | ||
---|---|---|---|---|
expected (55 files) | ||||
functional_dirty (4 files) | ||||
original (55 files) | ||||
PhpCfFunctional.php | Test | Unit test script | ||
PhpCfTest.php | Test | Unit test script |
Files | / | phpcf-src | / | test | / | expected |
File | Role | Description |
---|---|---|
alignment.php | Test | Unit test script |
anonymous.php | Test | Unit test script |
binary-operators.php | Test | Unit test script |
brace-after-comma.php | Test | Unit test script |
broken-switch.php | Test | Unit test script |
class-comm.php | Test | Unit test script |
classref-function.php | Test | Unit test script |
classref.php | Test | Unit test script |
close-tag-safe1.php | Test | Unit test script |
close-tag-safe2.php | Test | Unit test script |
close-tag-safe3.php | Test | Unit test script |
close-tag-unsafe1.php | Test | Unit test script |
closure.php | Test | Unit test script |
comments.php | Test | Unit test script |
const-comment.php | Test | Unit test script |
const-nl.php | Test | Unit test script |
cyrillic.php | Test | Unit test script |
declare.php | Test | Unit test script |
deref.php | Test | Unit test script |
empty-call.php | Test | Unit test script |
empty-method.php | Test | Unit test script |
empty-while-foreach.php | Test | Unit test script |
end-space.php | Test | Unit test script |
expression-static-call.php | Test | Unit test script |
finally.php | Test | Unit test script |
function-name.php | Test | Unit test script |
heredoc.php | Test | Unit test script |
if-comment.php | Test | Unit test script |
if.php | Test | Unit test script |
implements.php | Test | Unit test script |
increment.php | Test | Unit test script |
instanceof.php | Test | Unit test script |
long-arr.php | Test | Unit test script |
long-classdef.php | Test | Unit test script |
long-expr.php | Test | Unit test script |
long-params.php | Test | Unit test script |
long-signature-array.php | Test | Unit test script |
long-with-hint.php | Test | Unit test script |
longdef.php | Test | Unit test script |
ma-inst.php | Test | Unit test script |
multiline-concat.php | Test | Unit test script |
namespaces.php | Test | Unit test script |
opentag.php | Test | Unit test script |
phpcf.php | Test | Unit test script |
phpdoc.php | Test | Unit test script |
several-times-apply.php | Test | Unit test script |
short-array-ml.php | Test | Unit test script |
short-array.php | Test | Unit test script |
static.php | Test | Unit test script |
switch-case.php | Test | Unit test script |
ternary-ml.php | Test | Unit test script |
ternary.php | Test | Unit test script |
trait.php | Test | Unit test script |
type-hint.php | Test | Unit test script |
yield.php | Test | Unit test script |
Files | / | phpcf-src | / | test | / | functional_dirty |
File | Role | Description |
---|---|---|
Test_after_commit.php | Test | Unit test script |
Test_dirty.php | Test | Unit test script |
Test_new_branch_formatted.php | Test | Unit test script |
Test_new_commit.php | Test | Unit test script |
Files | / | phpcf-src | / | test | / | original |
File | Role | Description |
---|---|---|
alignment.php | Test | Unit test script |
anonymous.php | Test | Unit test script |
binary-operators.php | Test | Unit test script |
brace-after-comma.php | Test | Unit test script |
broken-switch.php | Test | Unit test script |
class-comm.php | Test | Unit test script |
classref-function.php | Test | Unit test script |
classref.php | Test | Unit test script |
close-tag-safe1.php | Test | Unit test script |
close-tag-safe2.php | Test | Unit test script |
close-tag-safe3.php | Test | Unit test script |
close-tag-unsafe1.php | Test | Unit test script |
closure.php | Test | Unit test script |
comments.php | Test | Unit test script |
const-comment.php | Test | Unit test script |
const-nl.php | Test | Unit test script |
cyrillic.php | Test | Unit test script |
declare.php | Test | Unit test script |
deref.php | Test | Unit test script |
empty-call.php | Test | Unit test script |
empty-method.php | Test | Unit test script |
empty-while-foreach.php | Test | Unit test script |
end-space.php | Test | Unit test script |
expression-static-call.php | Test | Unit test script |
finally.php | Test | Unit test script |
function-name.php | Test | Unit test script |
heredoc.php | Test | Unit test script |
if-comment.php | Test | Unit test script |
if.php | Test | Unit test script |
implements.php | Test | Unit test script |
increment.php | Test | Unit test script |
instanceof.php | Test | Unit test script |
long-arr.php | Test | Unit test script |
long-classdef.php | Test | Unit test script |
long-expr.php | Test | Unit test script |
long-params.php | Test | Unit test script |
long-signature-array.php | Test | Unit test script |
long-with-hint.php | Test | Unit test script |
longdef.php | Test | Unit test script |
ma-inst.php | Test | Unit test script |
multiline-concat.php | Test | Unit test script |
namespaces.php | Test | Unit test script |
opentag.php | Test | Unit test script |
phpcf.php | Test | Unit test script |
phpdoc.php | Test | Unit test script |
several-times-apply.php | Test | Unit test script |
short-array-ml.php | Test | Unit test script |
short-array.php | Test | Unit test script |
static.php | Test | Unit test script |
switch-case.php | Test | Unit test script |
ternary-ml.php | Test | Unit test script |
ternary.php | Test | Unit test script |
trait.php | Test | Unit test script |
type-hint.php | Test | Unit test script |
yield.php | Test | Unit test script |
Version Control | Unique User Downloads | Download Rankings | |||||||||||||||
100% |
|
|
Applications that use this package |
If you know an application of this package, send a message to the author to add a link here.
Related pages |
Github repo with summary |