2012-04-04 33 views
1

這是後話正則表達式愛好者:)如何找到不與返回空隙註解的方法

FLOW3的代碼公約要求,你應該註釋不以@返回無效返回任何方法:

/** 
* A method 
* 
* @return void 
*/ 

我總是忘記它,想用正則表達式的NetBeans,我已經錯過了所有的方法...

到目前爲止,我得到了

\*\s[^@return]+.*(\n)\s.\*/ 

不工作得很好:

/** 
* Method that gets matched. 
* 
* @param string $comment 
*/ 
public function aMethod() { 
    // Some Code 
} 

/** 
* A method that does not get matched and shouldn't. 
* 
* @param string $test 
* @return void 
*/ 
public function anotherMethod($test) { 
    // Some Code 
} 


/** 
* A variable that get's matched but should not 
    * be matched. 
* 
* @var string 
*/ 
protected $var; 

/** 
* Why is this method getting matched? 
* 
* @return void 
*/ 
private function thirdMethod() { 
     // Code 
    } 

你會如何搭配呢?

這裏是一個正則表達式測試儀的example

+0

這是一個javascript代碼吧?所以無效的函數可能會以任何空迴歸或根本沒有回報結束? – abugnais 2012-04-04 12:40:41

+0

這是PHP。在這種情況下,實際實施並不重要,因爲我只是想搜索評論。 但是:void意味着沒有回報。 – shredding 2012-04-04 12:54:25

回答

2

負向後斷言可能會有所幫助:

\*\s*@[a-z]+(?<!return)\s+.+\s*\*/\s*(?:public|protected|private)?\s+function 

這將匹配它沒有返回:作爲文檔塊的最後一行的任何功能。它可能有一些誤報,即@返回在那裏但不在最後一行,但這是一個好的開始。

請注意,這在Regex測試程序中不起作用,因爲JavaScript不支持lookbehind斷言。 Here's an example

+0

謝謝。我不知道這些lookarounds在Javascript中不起作用,也許這就是我失敗的原因,因爲我嘗試了,但它在正則表達式測試中不起作用。 – shredding 2012-04-04 13:19:19

+0

嗯。它不能識別我在netbeans中缺少的@return空白,但我想這是因爲lookarounds是buggy(http://netbeans.org/bugzilla/show_bug.cgi?id=181878)。非常感謝您的意見。 – shredding 2012-04-04 13:36:15

+1

你有沒有考慮過使用類似[PHP_CodeSniffer](http://pear.php.net/package/PHP_CodeSniffer)? Typo3似乎有[他們自己的嗅探](http://forge.typo3.org/projects/team-forge/wiki/The_sniffs_with_code_examples#Comments),但你所追求的具體內容缺乏。 Squiz FunctionCommentSniff確實解決了這個問題。 – cmbuckley 2012-04-04 16:15:17

相關問題