2012-12-25 16 views
4

我正在使用PEAR PHP_Beautifier尝试格式化大量遗留代码,并实现数组元素的特定格式。在PHP_Beautify中抑制下一个令牌

我写了一个自定义过滤器:

class PHP_Beautifier_Filter_ArrayIndent extends PHP_Beautifier_Filter 
{ 
    public function t_array($sTag) 
    { 
     if (($this->oBeaut->getNextTokenContent(1) === '(') && 
      ($this->oBeaut->getNextTokenContent(2) !== ')')) { 
      // Don't use for Array type hinting 
      // Don't use for Empty array definition 
      $this->oBeaut->add($sTag); 
      $this->oBeaut->addNewlineIndent(); 
     } elseif ($this->oBeaut->getNextTokenContent(2) !== ')') { 
      // Ensure a space after type hinted array before argument name 
      $this->oBeaut->add($sTag . ' '); 
     } else { 
      // Empty array definition 
      $this->oBeaut->add($sTag); 
     } 
    } 
} 

我试图让下面的格式(与在同一行的“阵列”左大括号):

public function doSomething(array $params = array()) { 
    $dummy1 = array(); 
    $dummy2 = array (
     'Hello' => 'World', 
     'Goodnight' => 'Vienna' 
    ); 
} 

但我发现:

public function doSomething(array $params = array()) { 
    $dummy1 = array(); 
    $dummy2 = array 
    (
     'Hello' => 'World', 
     'Goodnight' => 'Vienna' 
    ); 
} 

是否有修改/抑制“t_array”后的下一个标记,或跳过它,这样任何方式我可以在我的过滤器中处理左花括号?

+0

我不知道的东西美化,但不会此行'$这个 - > oBeaut-> addNewlineIndent();'是什么原因造成的新的生产线,不该它会被删除或更改为不同的方法? –

+0

不幸的是,使用直线$ this-> oBeaut-> addIndent();保持“(”与“数组”相同的行,但给了我一个长(6空格)“阵列”和“(”...之间的缩进,没有添加缩进方法调用,我没有得到任何缩进数组值 –

+1

虽然你让我想:再看看我做了什么,如果(($ this-> oBeaut-> getNextTokenContent(1)==='(')&&($ this-> oBeaut- > getNextTokenContent(2)!==')')){ $ this-> oBeaut-> add($ sTag); } elseif($ this-> oBeaut-> getNextTokenContent(2)!==')') {//确保在参数名称之前键入提示阵列之后的空格 $ this-> oBeaut-> add($ sTag。''); } else { //空阵列定义 $ this-> oBeaut-> add ($ sTag); } 实际上给了我我需要的东西......作为回答发布为赏金 –

回答

1

不会这行$this->oBeaut->addNewlineIndent();是什么导致新行,不应该被删除或更改为不同的方法?

建议:

<?php 
if (($this->oBeaut->getNextTokenContent(1) === '(') && ($this->oBeaut->getNextTokenContent(2) !== ')')) { 
    $this->oBeaut->add($sTag); 
} elseif ($this->oBeaut->getNextTokenContent(2) !== ')') { 
    // Ensure a space after type hinted array before argument name 
    $this->oBeaut->add($sTag . ' '); 
} else { 
    // Empty array definition 
    $this->oBeaut->add($sTag); 
}