
ãã®åé¡ã解決ããããã«ã次ã®ããšãã§ããã³ãŒããã©ãŒãããããŒã«ãå®è£ ããããšã«ããŸããã
- ãã¡ã€ã«èªäœã«è§Šããããšãªãããªã¹ãã®åœ¢åŒã§ãã©ãŒãããæšæºã®éæºæ ã«é¢ããã¡ãã»ãŒãžã衚瀺ããŸãã
- èŠã€ãã£ããã¹ãŠã®ãã©ãŒãããã®åé¡ãèªåçã«ä¿®æ£ããŸãã
- ãã¡ã€ã«ã®äžéšã®ã¿ããã©ãŒãããã§ããŸãïŒå±¥æŽã倱ããªãããã«ããªããžããªå šäœãããã«åãã©ãŒãããããå¿ èŠã¯ãããŸããïŒã
ãã®ãããªããŒã«ãäœæããããã®åºç€ãšãªã2ã€ã®ãããžã§ã¯ããPHP BeautifierãšPHP Code Snifferãæ€èšããŸããã 1ã€ç®ã¯ã³ãŒãããã©ãŒãããã§ããŸãããã蚺æãå°å·ã§ããŸããã§ããã2ã€ç®ã¯ãå察ã«ã蚺æãå°å·ã§ããŸãããããã¡ã€ã«ããã©ãŒãããã§ããŸããã§ããã æ®å¿µãªããããããã®ãããžã§ã¯ãã¯äž¡æ¹ãšããç§ãã¡ã®æšå®ã§ã¯ããããã«æ¬ ããŠããæ©èœãè¿œå ããã®ã«ããŸãé©ããŠããªããããæ°ãããŠãŒãã£ãªãã£-phpcfïŒPHP Code FormatterïŒãäœæãããŸããã éå»2幎éãgit pre-receiveããã¯ãšããŠæ©èœããŠãããã³ãŒãã£ã³ã°æšæºã«åŸã£ãŠãã©ãŒããããããŠããªãå€æŽãæåŠïŒïŒïŒããããã«æ§æãããŠããŸãã
æåŸã«ããŠãŒãã£ãªãã£ã®ãœãŒã¹ã³ãŒããäžè¬å ¬éããŸãïŒ github.com/badoo/phpcf
æ©èœæ§
ãã©ãŒããã¿ã¯ãåºæ¬çã«ç©ºçœãå€æŽããããã«äœæãããŸããïŒæ¹è¡ãã€ã³ãã³ããæŒç®åã®åšãã®ã¹ããŒã¹ãªã©ã ãããã£ãŠãphpcfã¯ãåè¿°ã®PHP Code SnifferãFabien Potencierã®PHP Coding Standards Fixerãªã©ã®ä»ã®åæ§ã®ãŠãŒãã£ãªãã£ã眮ãæããŸããã ããã¯ããããè£å®ãããã¡ã€ã«å ã®ã¹ããŒã¹ãšæ¹è¡ã®æ£ããé 眮ã§ãæ±ãäœæ¥ããå®è¡ããŸãã ãŠãŒãã£ãªãã£ããã¡ã€ã«ã®åæãã©ãŒããããèæ ®ããéžæããæšæºã«å¯Ÿå¿ããªãã¹ããŒã¹ã®ã¿ãå€æŽããããšã«æ³šæããããšãéèŠã§ãïŒæåã«ãã¹ãŠã®ç©ºçœããŒã¯ã³ãåé€ããŠãããã©ãŒããããéå§ããä»ã®ãœãªã¥ãŒã·ã§ã³ãšã¯ç°ãªããŸãïŒã
ãã®ãŠãŒãã£ãªãã£ã¯æ¡åŒµå¯èœã§ãããã«ã¹ã¿ã ã¹ã¿ã€ã«ã»ããããµããŒãããŠããŸãã ç¬èªã®ãã©ãŒãããã¹ã¿ã€ã«ãéåžžã«ç°¡åã«å®çŸ©ã§ããŸããããã«ãããåœç€Ÿãšã¯ç°ãªãæšæºãå®è£ ãããŸãïŒåœç€Ÿã®ã³ãŒãã£ã³ã°æšæºã¯PSRã«éåžžã«è¿ãïŒã
䜿çšäŸïŒãphpcf apply <filename>ãã³ãã³ãã¯æå®ããããã¡ã€ã«ããã©ãŒããããããphpcf check <filename>ãã¯ãã©ãŒãããããã§ãã¯ããæªãã©ãŒãããã®ãã©ã°ã¡ã³ããããå Žåã¯ãŒã以å€ã®çµäºã³ãŒããè¿ããŸãïŒïŒ
$ 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ã§èšè¿°ãããŠããŸãããã»ãšãã©ã®ãã¡ã€ã«ã¯äžç¬ã§ãã©ãŒããããããŸãã ãããã倧ããªãªããžããªãšå€æ°ã®ã³ãŒãããããããæ¥ç¶ãããšçç£æ§ã100åã«åäžããæ¡åŒµæ©èœãäœæããŸããã200äžè¡ã®ãªããžããªå šäœããããŒãããã¯ãCore i7ã§8ç§ã§ãã©ãŒããããããŸãã æ¡åŒµæ©èœã䜿çšããã«ã¯ããext /ããã£ã¬ã¯ããªããåéããã€ã³ã¹ããŒã«ããphp.iniã§ãenable_dl = Onããæå¹ã«ããããæ¡åŒµæ©èœãšããŠç»é²ããå¿ èŠããããŸãã
phpcfã¯ãŸãæåã«ç©ºçœãå€æŽããã³ãŒãäžã§æãåçŽãªå€æããã§ããªãããšãããäžåºŠåŒ·èª¿ããããšæããŸããããšãã°ãçãéå§ã¿ã°ãé·ãã¿ã°ã«çœ®ãæãããããã¡ã€ã«ããæåŸã®çµäºã¿ã°ãåé€ããŸãã ããã«ãphpcfã¯ãè±èªã®æåã®é¢æ°åã®ããªã«æåãèªåçã«ä¿®æ£ã§ããŸãã ãŸããã¹ããŒã¹ã§æåã§é 眮ãããåŒã¯åœ±é¿ãåããŸããã ããã¯ã¢ãŒããã¯ãã£ãŒã«ãããã®ã§ã-ãã©ãŒããã¿ãŒã¯ãããŒãã³ãŒãããã眮æã®ã»ãããšããŠã§ã¯ãªãããŠãŒã¶ãŒãèšå®ããã«ãŒã«ãæã€ã¹ããŒããã·ã³ãšããŠæ©èœããŸãïŒãã©ãŒããã¿ãŒã«ã¯ããã©ãŒãããã«ãŒã«ã«äžèŽãããããã©ã«ãæ§æããä»å±ããŸãïŒã ãããã£ãŠããvarãããpublicããŸãã¯åæ§ã®ãã®ã«èªåçã«çœ®ãæããå Žåã¯ãPHP-CS-Fixerã«æ³šæããããšããå§ãããŸã-phpcfãšã¯ç°ãªãã空çœæåã«ã¯ã»ãšãã©æ³šæãæããŸããããããŒã¯ã³ãæžãæããããšãã§ããŸãã
PHPããŒãžã§ã³ã®ãµããŒã
åœåããã©ãŒããã¿ã¯PHP 5.3ã§åäœããããã ãããµããŒãããŠããŸããã çŸæç¹ã§ã¯ãPHP 5.4ããã³5.5ã®æ§æãå®å šã«ãµããŒãããŠããããã©ãŒããã¿ãŒãæ©èœããã«ã¯ã5.4以äžã®PHPããŒãžã§ã³ãå¿ èŠã§ãã PHPã®ä»¥åã®ããŒãžã§ã³åãã®ã³ãŒãããã©ãŒãããããå Žåã¯ããããè¡ãããšãã§ããŸãããphpcfèªäœã¯PHP 5.4+ã䜿çšããŠèµ·åããå¿ èŠããããŸãã
phpcfã¯ãããšãã°äžåè¡¡ãªæ¬åŒ§ãå«ããæªå®æããã¡ã€ã«ããã©ãŒãããã§ããªãããšã«æ³šæããŠãã ããããã®å Žåããšã©ãŒã¡ãã»ãŒãžã衚瀺ããããã¡ã€ã«ã¯åã«ãã©ãŒããããããŸããã ããã«ãå Žåã«ãã£ãŠã¯ããã©ãŒããã¿èªäœããã¡ã€ã«ã®æ§æããã§ãã¯ããªããããã€ã³ã¿ãŒããªã¿ãŒã®èŠ³ç¹ãããç¡å¹ãªãã³ãŒãããã©ãŒãããã§ããŸãã
PHPã®å°æ¥ã®ããŒãžã§ã³ã®ãµããŒãã«é¢ããŠãphpcfã¢ãŒããã¯ãã£ã¯ããã¡ã€ã«ã«ããªãã¿ã®ãªããããŒã¯ãŒããšããŒã¯ã³ãè¿œå ãŸãã¯äŒè°ãããšããããããåã«ç¡èŠããŠãã®ãŸãŸã«ãããããªãã®ã§ãã ãããã£ãŠãphpcfã¯ãã§ã«PHPã®å°æ¥ã®ããŒãžã§ã³ããµããŒãããŠããŸãããæªç¥ã®ããŒã¯ã³ã«ã¯ãã©ãŒãããã«ãŒã«ãé©çšãããªãããšã«æ³šæããŠãã ããã
Gitçµ±åãµããŒã
ãŠãŒãã£ãªãã£ãããŠã³ããŒããããšãããã§ãã¯ããããã¬ãã¥ãŒãããé©çšãã¢ã¯ã·ã§ã³ã ãã§ãªããã-gitããµãã£ãã¯ã¹ãä»ããåãã¢ã¯ã·ã§ã³ãããããšã«æ°ä»ãã§ãããã Badooã§ã¯ãããŒãžã§ã³ç®¡çã·ã¹ãã ãšããŠGitã䜿çšããŸããããã©ã«ãã§ã¯ãå€æŽãããè¡ã®ã¿ããã§ãã¯ããã³ãã©ãŒããããããŸãã éçºè ã«å€æŽãããè¡ã®çªå·ãæãåºãããªãããã«ã次ã®ããã«æ©èœããã* -gitãã³ãã³ããäœæããŸããã
- ã€ã³ããã¯ã¹ã«è¿œå ããããã³ããããããŠããªããå€æŽã衚瀺ããŸãã
- çŸåšã®ãã©ã³ãã§è¡ãããããorigin / masterããã³origin / <current-branch>ã«ååšããªãå€æŽã衚瀺ããŸãïŒå¯Ÿå¿ãããã©ã³ãã¯git push / git pullã§æŽæ°ãããŸãïŒãã€ãŸãããŸã ãªããžããªã«éä¿¡ãããŠããŸããã
- ïŒ1ïŒããã³ïŒ2ïŒã«ããè¡ã«ã®ã¿æžåŒèšå®ãé©çšããŸãã
æ©èœãã©ã³ãã§éçºã䜿çšããåæã«ãã¹ã¿ãŒãã©ã³ãã«è£œåã³ãŒãããããããã-gitãã³ãã³ãã¯ãã®ãããŒã«åãããŠèª¿æŽãããäžèšã®ã¢ã«ãŽãªãºã ã«åŸã£ãŠå€æŽãããè¡ã決å®ããŸãã
䜿çšäŸïŒ
(master) $ git checkout -b some_feature (some_feature) $ vim test.php # test.php (some_feature) $ phpcf apply-git # , test.php formatted successfully
phpcfã¯ã©ã¹ãçŽæ¥äœ¿çšãã
ãŠãŒãã£ãªãã£ãšããŠphpcfã䜿çšããããšã«å ããŠãæ¡åŒµæ©èœæ¡åŒµãå«ããphpcfã¯ã©ã¹ãçŽæ¥äœ¿çšããããšãã§ããŸãã ãã®æ©èœã¯ãPHPãã¡ã€ã«ããã©ãŒãããããããã®WebãµãŒãã¹ãäœæãããªã©ãããŸããŸãªã¿ã¹ã¯ã«åœ¹ç«ã¡ãŸãã å¿ èŠã«å¿ããŠãã³ãŒãã¬ãã¥ãŒããã»ã¹ã§äœ¿çšããŸãããã©ã³ãã§è¡ãããå€æŽã衚瀺ããå Žåããã©ãŒãããã«ã®ã¿é¢é£ããå€æŽã衚瀺ããªãæ¹æ³ã¯ããããŸããïŒãã®ããããã¡ã€ã«ã®2ã€ã®ããŒãžã§ã³ã¯å®å šã«ãã©ãŒããããããå€ããã®ãšæ°ãããã®ãããããã®åŸããããã®éã®å·®åãèæ ®ãããŸãïŒ
phpcfã¯ã©ã¹ãçŽæ¥äœ¿çšããäŸïŒ
<?php // require_once __PHPCF_SRC . '/src/init.php'; // $Options = new \Phpcf\Options(); // ( ) $Options->setTabSequence(' '); // 3-4 Tab $Options->setMaxLineLength(130); // 120 $Options->setCustomStyle('style'); // $Options->toggleCyrillicFilter(true|false); // $Options->usePure(true); // extension $Formatter = new \Phpcf\Formatter($Options); // $Formatter->formatFile('file.php'); // $Formatter->formatFile('file.php:1-40,65'); // // $Formatter->format('<?php phpinfo()'); // $Formatter->format($code, [1, 2, 10]); // // \Phpcf\FormattingResult $Result->getContent(); // $Result->wasFormatted(); // bool, $Result->getIssues(); // array, $Result->getError(); // \Exception|null
PHPStormã®äŸã§ã®IDEãšã®çµ±å
PHPStormã®äœ¿çšäžã«ãã©ãŒããã¿ã䜿çšããŠPHPã³ãŒãããã©ãŒãããã§ããããã«ããå Žåã¯ã次ã®æé ãå®è¡ã§ããŸãã
1.git clone https://github.com/badoo/phpcf.git
2. PHPStormã§ãèšå®ã«ç§»åãããå€éšããŒã«ãã»ã¯ã·ã§ã³ãèŠã€ããŸãã
3. [è¿œå ...]ãã¯ãªãã¯ããŠããã£ãŒã«ãã«å ¥åããŸãã
ååïŒãã¡ã€ã«å šäœããã©ãŒããããã
ã°ã«ãŒãïŒphpcf
ãã³ã³ãœãŒã«ãéããã®ãã§ãã¯ãå€ããŸãïŒéªéã«ãªããªãããã«ïŒ
ããã°ã©ã ïŒphp
ãã©ã¡ãŒã¿ãŒïŒpath_to_phpcf.git / phpcf apply $ FilePath $
äœæ¥ãã£ã¬ã¯ããªïŒä»»æ
ååïŒåœ¢åŒã®éžæ
ã°ã«ãŒãïŒphpcf
ãã³ã³ãœãŒã«ãéããã®ãã§ãã¯ãå€ããŸãïŒéªéã«ãªããªãããã«ïŒ
ããã°ã©ã ïŒphp
ãã©ã¡ãŒã¿ãŒïŒpath_to_phpcf.git / phpcf apply $ FilePath $ïŒ$ SelectionStartLine $-$ SelectionEndLine $
äœæ¥ãã£ã¬ã¯ããªïŒä»»æ
ãã®åŸããããããŒã察å¿ããã¢ã¯ã·ã§ã³ã«æ·»ä»ãããã¡ã€ã«å šäœãŸãã¯éžæãããã©ã°ã¡ã³ãã®ã¿ããã©ãŒãããã§ããŸãã
ããã«ããphpcf check-git --emacsãã®æäœãåãæ¹æ³ã§èšå®ã§ããŸãããã®ã¢ãŒãã§ã¯ãphpcfã¯ãã¡ã€ã«åãè¡çªå·ãšãšãã«emacsã¹ã¿ã€ã«ã§åºåããŸããããã«ããããªã³ã¯ãã¯ãªãã¯ããŠåºåã§æå®ãããè¡ã«ç§»åã§ããŸãã
å®è£
äœæ¥ã®éçšã§ããã©ãŒããã¿ã¯æ¬¡ã®æé ãå®è¡ããŸãã
- ãã©ãŒããããããã¡ã€ã«åãšè¡çªå·ã®ãªã¹ããæºåããŸãã
- token_get_allïŒprepareTokensïŒãåŒã³åºããŠããã¡ã€ã«ã®ããŒã¯ã³ã®ãªã¹ããååŸããŸãã
- ããã¯ãå®è¡ããæ©èœã䜿çšããŠããŒã¯ã³ãåäžã®åœ¢åŒã«å€æããäžéšã®ããŒã¯ã³ãä»ã®ããŒã¯ã³ã«çœ®ãæããããšãã§ããŸãã
- ããã»ã¹ïŒïŒã¡ãœããã®åŒã³åºããããã¯ãç¶æ ãã·ã³Phpcf \ Impl \ Fsmã䜿çšããŠãã¹ãŠã®ããŒã¯ã³ãæž¡ãããã©ãŒãããã¢ã¯ã·ã§ã³ïŒexecïŒã®é åãæ§æããŸãã
- execïŒïŒã¡ãœããã®åŒã³åºããçæãããã¢ã¯ã·ã§ã³ã®é åãåŠçãããæçµçãªæååã«å€æãããŸãã
詳现
ã¯ã©ã¹Phpcf \ Impl \ Fsmã¯ãç¶æ ãã¹ã¿ãã¯ïŒé åïŒãšããŠè¡šãããæéç¶æ ãã·ã³ã§ãã ã¹ã¿ãã¯ã®äžçªäžã®èŠçŽ ã¯ãç¶æ é·ç§»èŠåã«äœ¿çšãããŸãã
äžè¬çã«ãã¹ããŒããã·ã³ã®ã«ãŒã«ã¯æ¬¡ã®ãšããã§ãã
ãã©ãŒããã¿ã¯åºæ¬çã«èšèšãããŠããã®ã§ã空çœããŒã¯ã³ã®å 容ã®ã¿ãå¶åŸ¡ããŸãïŒããã¯ãé€ãïŒã ãã¹ãŠã®ãã©ãŒãããèŠåã¯ã$ controlsé åã§å®çŸ©ããã次ã®åœ¢åŒã§æ瀺ãããŸãã
ããšãã°ãã$ a = $ b;ããªã©ãåãã¹ããŒã¹ã«å¯ŸããŠç°ãªãã«ãŒã«ãå®çŸ©ãããŠããå Žå "="ã®åŸãã¹ããŒã¹ã1ã€å ¥ããå¿ èŠãããã$ bã®å-ãã¹ãŠã®ã¹ããŒã¹ãåé€ããŸããã«ãŒã«ã®é©çšé åºã¯åªå é äœã«ãã£ãŠç°ãªããŸãã æäœã®åªå 床ã«ã€ããŠã¯ããPHPCF_EX-constantsãã»ã¯ã·ã§ã³ã§èª¬æããŠããŸããã«ãŒã«ãé«ãã»ã©ãåªå 床ãé«ããªããŸãã
$ token_hook_namesããããã£ã¯ãprepareTokensã¡ãœããããã®ããŒã¯ã³ãæ€åºãããšãã«åŒã³åºãå¿ èŠãããã¡ãœããã®ååãå®çŸ©ããŸãã ããã¯ã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
ããŒã¯ã³ã®ããã¯ã®ç°¡åãªèª¬æãšãããã¯ã®åºçŸçç±ãšãã®ã¢ã¯ã·ã§ã³ã®èª¬æïŒ
ããã¯ãããŒã¯ã³ã®å 容ãå€æŽããå Žåã¯ããããè¡ãæš©å©ããããã©ããã確èªããå¿ èŠããããŸã
ã ããã§ãªãå Žåãããã¯ã¯ããŒã¯ã³ã®å 容ãå€æŽããã¹ãã§ã¯ãããŸãããããã®çªå·ãå€æŽããããŒã¯ã³ããã®ã³ã³ããŒãã³ãéšåã«åå²ã§ããŸãã äŸã¯tokenHookOpenTagã§ãããŠãŒã¶ãŒããã¡ã€ã«ã®äžéšã®ã¿ããã©ãŒãããããããã«èŠæ±ããå Žåãéå§ã¿ã°ã®å 容ã¯ãã§ãã¯ããŸããããéå§ã¿ã°ãã空çœãåé¢ããŸãã éå§ã¿ã°ãšåäžè¡ã³ã¡ã³ãã®åŸã®è¡æ°ïŒããã³ã€ã³ãã³ãïŒãæ£ããèæ ®ããããã«ã空çœã®åé¢ãå¿ èŠã§ãã
ã¯ã©ã¹Phpcf \ Impl \ Fsmã®èª¬æ-ããŒã¯ã³ã解æããããã®ã¹ããŒããã·ã³
ã¯ã©ã¹Phpcf \ Impl \ Fsmã¯ãç¶æ ãã¹ã¿ãã¯ïŒé åïŒãšããŠè¡šãããæéç¶æ ãã·ã³ã§ãã ã¹ã¿ãã¯ã®äžçªäžã®èŠçŽ ã¯ãç¶æ é·ç§»èŠåã«äœ¿çšãããŸãã
<?php $fsm_context_rules = array( 'CTX_SOMETHING' => array( // , = CTX_SOMETHING 'T_1' => 'CTX_OTHER_THING', // T_1 CTX_OTHER_THING 'T_2' => array('CTX_OTHER_THING'), // T_2 push(CTX_OTHER_THING) 'T_3' => -2, // T_3 pop() 2 // N M // , 'T_4' => array(PHPCF_CTX_NOW => N, PHPCF_CTX_NEXT => M), // c 'T_5' => array('REPLACE' => array(-2, array('CTX_OTHER_THING')), // , , ), );
äžè¬çã«ãã¹ããŒããã·ã³ã®ã«ãŒã«ã¯æ¬¡ã®ãšããã§ãã
<?php $fsm_context_rules = array( '<context_name>[ ... <context_name>]' => array( '<token_code>[ ... <token_code>]' => <context_rule>, ), ); $context_rule = '<context_name>'; // <context_name> $context_rule = array('<context_name>'); // <context_name>, <context_name> $context_rule = -N; // N , N â // , PHPCF_CTX_NOW, , // PHPCF_CTX_NEXT ( debug "delayed rule") $context_rule = array(PHPCF_CTX_NOW => <context_rule>, PHPCF_CTX_NEXT => <context_rule>);
ãã©ãŒãããèŠåã®é åïŒ$ã³ã³ãããŒã«
ãã©ãŒããã¿ã¯åºæ¬çã«èšèšãããŠããã®ã§ã空çœããŒã¯ã³ã®å 容ã®ã¿ãå¶åŸ¡ããŸãïŒããã¯ãé€ãïŒã ãã¹ãŠã®ãã©ãŒãããèŠåã¯ã$ controlsé åã§å®çŸ©ããã次ã®åœ¢åŒã§æ瀺ãããŸãã
<?php $controls = array( '<token_code>[ ... <token_code>]' => array( // , ['<context>' => <formatting_rule>,] // <formatting_rule> PHPCF_KEY_ALL => <formatting_rule>, // <formatting_rule>, ), ); $formatting_rule = array( PHPCF_KEY_DESCR_LEFT => '<description>', // , PHPCF_KEY_LEFT => PHPCF_EX_<action>, // , PHPCF_KEY_DESCR_RIGHT => '<description>', // PHPCF_KEY_RIGHT => PHPCF_EX_<action>, // , ); // : 'T_AS T_ELSEIF T_ELSE T_CATCH' => array( // "as", "elseif", "else" "catch" PHPCF_KEY_ALL => array( // PHPCF_KEY_DESCR_LEFT => 'One space before as, elseif, else, catch', PHPCF_KEY_LEFT => PHPCF_EX_SHRINK_SPACES_STRONG, // ( ) PHPCF_KEY_DESCR_RIGHT => 'One space after as, elseif, else, catch', // PHPCF_KEY_RIGHT => PHPCF_EX_SHRINK_SPACES_STRONG, // ) ),
ããšãã°ãã$ a = $ b;ããªã©ãåãã¹ããŒã¹ã«å¯ŸããŠç°ãªãã«ãŒã«ãå®çŸ©ãããŠããå Žå "="ã®åŸãã¹ããŒã¹ã1ã€å ¥ããå¿ èŠãããã$ bã®å-ãã¹ãŠã®ã¹ããŒã¹ãåé€ããŸããã«ãŒã«ã®é©çšé åºã¯åªå é äœã«ãã£ãŠç°ãªããŸãã æäœã®åªå 床ã«ã€ããŠã¯ããPHPCF_EX-constantsãã»ã¯ã·ã§ã³ã§èª¬æããŠããŸããã«ãŒã«ãé«ãã»ã©ãåªå 床ãé«ããªããŸãã
ããŒã¯ã³ããã¯
$ token_hook_namesããããã£ã¯ãprepareTokensã¡ãœããããã®ããŒã¯ã³ãæ€åºãããšãã«åŒã³åºãå¿ èŠãããã¡ãœããã®ååãå®çŸ©ããŸãã ããã¯ã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
<?php namespace Phpcf\Impl; class Pure implements \Phpcf\IFormatter { /* * $idx_tokens array(T_SOMETHING => 'T_SOMETHING'), * * * $i_value , token_get_all * * $this->tokens each() * : tokenHookStr * * , * * * , : */ private function tokenHookDoNothing($idx_tokens, $i_value) { if (is_array($i_value)) { $this->current_line = $i_value[2]; return array( array( PHPCF_KEY_CODE => $idx_tokens[$i_value[0]], PHPCF_KEY_TEXT => $i_value[1], PHPCF_KEY_LINE => $this->current_line, ) ); // set correct current line for next token if it does not have line number $this->current_line += substr_count($i_value[1], "\n"); } return array( array( PHPCF_KEY_CODE => $i_value, PHPCF_KEY_TEXT => $i_value, PHPCF_KEY_LINE => $this->current_line, ) ); } }
ããŒã¯ã³ã®ããã¯ã®èª¬æ
ããŒã¯ã³ã®ããã¯ã®ç°¡åãªèª¬æãšãããã¯ã®åºçŸçç±ãšãã®ã¢ã¯ã·ã§ã³ã®èª¬æïŒ
- tokenHookHeredocãtokenHookStrïŒããã©ã«ãã§ã¯ãPHPã¯HEREDOCãäºéåŒçšç¬ŠãæãåŒçšç¬Šå ã®ããã¹ãããããŒã¯ã³åãããããã§å€æ°ãéžæããŸãã ãã©ãŒããã¿ã¯è¡ã«è§ŠããŠã¯ãªããªããããå 容ã¯1ã€ã®ããŒã¯ã³ã«çµåãããŸãã
- tokenHookOpenBraceã¯ãæ¬åŒ§å ã®åŒãé·ãïŒããã©ã«ãã§ã¯120æåïŒããåŒã§æ¹è¡ã䜿çšãããŠããå ŽåãããŒã¯ã³ "ïŒ"ã "ïŒ_LONG"ã«å€æããŸãããlongãé åãšãshortãé åãåºå¥ããããã«äœ¿çšãããé¢æ°ã®åŒã³åºããšå®çŸ©;
- tokenHookCheckUnaryã¯ãæŒç®åãåé æŒç®åïŒããšãã°ãã+ããã-ããïŒïŒãã©ãããå€å¥ããŸãã ã«ãŒã«å ã®ã³ã³ããã¹ãéã®é·ç§»ã®æ°ãæžããã®ã«åœ¹ç«ã¡ãŸãã
- tokenHookStaticã¯ããstatic :: HELLOãã®ãããªåŒã³åºãããpublic static functionããšããŠã®äœ¿çšããåé¢ããŸãã ãŸããç¶æ é·ç§»ã®ããžãã¯ãç°¡çŽ åããã®ã«ã圹ç«ã¡ãŸãã
- tokenHookClassdefã¯ãããŒã¯ãŒãã®åŸã«æ¹è¡ ïŒããšãã°ããconst \ nãïŒããããšå€æãããconst \ n var1 = 1ã\ n var2 = 2;ããªã©ã®æ§é ãæ£ãããã©ãŒãããããããã«äœ¿çšãããããšã決å®ããŸãã
- tokenHookOpenTagã¯ãéå§ã¿ã°ãé·ãããšã確èªããéå§ã¿ã°ãã空çœãåé¢ããŸãïŒã<ïŒphp \ nãã2ã€ã®ããŒã¯ã³ã«å€æããŸãïŒã<ïŒphpããšã\ nãïŒã
- tokenHookCloseTagã¯ããã¡ã€ã«ã®æåŸã«çµäºã¿ã°ããªãããšã確èªããŸãã
- tokenHookIncrementã¯ãå€æ°ã®ã©ã¡ãåŽãæŒç®åã++ããŸãã¯ã-ãã§ãããã決å®ããŸãã ã³ã³ããã¹ãéã®é·ç§»ã®ããžãã¯ãç°¡çŽ åããããã«äœãããŸããã
- tokenHookWhiteSpaceã¯ãåŒãã¹ããŒã¹ã§æ£åœåãããããšã決å®ããT_WHITESPACEãT_WHITESPACE_ALIGNEDã«çœ®ãæããŸããT_WHITESPACE_ALIGNEDã¯ããã©ãŒãããæã«å€æŽãããŸããã
- tokenHookElseã¯ãelseãåäžè¡ããããã¯ãå«ããã決å®ããŸãã ããžãã¯ãç°¡çŽ åããããã«äœãããŸããã
- tokenHookCommentã¯ãåäžè¡ã®ã³ã¡ã³ããã//ãã§å§ãŸãããšã確èªããããŒã¯ã³ããæ¹è¡ãåé¢ããŸãïŒã// something \ nãã¯ã// somethingããšã\ nãã«ãªããŸãïŒã
- tokenHookTStringã¯ããã®T_STRINGãã¡ãœãããŸãã¯é¢æ°ã®ååã§ããå ŽåãT_STRINGã®ååãT_FUNCTION_NAMEã«å€æŽããŸãã ã³ã³ããã¹ãéã®é·ç§»ã®ããžãã¯ãç°¡çŽ åããããã«äœãããŸããã
- tokenHookBinaryã¯ãã¹ããŒãã¡ã³ãã次ã®è¡ã«è»¢éããç¶æ³ãåŠçããããã«äœ¿çšãããŸãã
- tokenHookCommaã¯ãé·ãé åã®æ°ããè¡ã«ã©ããã§ããã³ã³ãã®å Žåããããããã_LONGãã«å€æããŸãã
- tokenHookFunctionã¯ãå¿åé¢æ°ãšéå¿åé¢æ°ãäºãã«åé¢ããŸãã
ããã¯ãããŒã¯ã³ã®å 容ãå€æŽããå Žåã¯ããããè¡ãæš©å©ããããã©ããã確èªããå¿ èŠããããŸã
($can_change_tokens = !isset($this->lines) || isset($this->lines[$this->current_line]))
ã ããã§ãªãå Žåãããã¯ã¯ããŒã¯ã³ã®å 容ãå€æŽããã¹ãã§ã¯ãããŸãããããã®çªå·ãå€æŽããããŒã¯ã³ããã®ã³ã³ããŒãã³ãéšåã«åå²ã§ããŸãã äŸã¯tokenHookOpenTagã§ãããŠãŒã¶ãŒããã¡ã€ã«ã®äžéšã®ã¿ããã©ãŒãããããããã«èŠæ±ããå Žåãéå§ã¿ã°ã®å 容ã¯ãã§ãã¯ããŸããããéå§ã¿ã°ãã空çœãåé¢ããŸãã éå§ã¿ã°ãšåäžè¡ã³ã¡ã³ãã®åŸã®è¡æ°ïŒããã³ã€ã³ãã³ãïŒãæ£ããèæ ®ããããã«ã空çœã®åé¢ãå¿ èŠã§ãã
åç §è³æ
PHP Beautifier-pear.php.net/package/PHP_Beautifier
PHPã³ãŒãã¹ããã¡ãŒ-pear.php.net/package/PHP_CodeSniffer
PHP CS Fixer-github.com/fabpot/PHP-CS-Fixer
phpcfãŠãŒãã£ãªãã£-github.com/badoo/phpcf
ç§ãã¡ã®èšäºãèªãã§ãããŠããããšããç§ãã¡ã¯ããªãã®ææ¡ãã³ã¡ã³ããèãæºåãã§ããŠããŸãã ãã®ãŠãŒãã£ãªãã£ã®äœ¿çšãã楜ãã¿ãã ããã
Yuri youROCK NasretdinovãPHPéçºè Badoo
Alexander Alexkrash Krasheninnikov ãPHPéçºè Badoo