Function list with PHP with abstract functions
-
I use function list with PHP files with abstract class.
But abstract functions are not shown in the tree view.
I have try to fix the functionList.xml file but a round bracket left in each class member in the treeview like : “GetPresentation(” instead of “GetPresentation”
Sample of abstract class and function in php
abstract class PageZZZ extends PageAAA { abstract public function GetPresentation(); function MetaCSS() { return '<link rel="stylesheet" type="text/css" href="zzz.css" media="all" >'; } }
in order to view GetPresentation in the function list i have done that in function list :
In the parser php_function > classRange > function
I replace
<function mainExpr="^\s*((static|public|protected|private|final)*(\s+(static|public|protected|private|final))+\s+)?(function\s+)+(\w+(\s+\w+)?(\s+|\*\s+|\s+\*|\s+\*\s+))?(\w+\s*::)?(?!(if|while|for|switch))[\w~]+\s*\([^\{]*\{" > <functionName> <funcNameExpr expr="(?!(if|while|for|switch))\w+\s*\([^\{]*" /> <!-- comment out the following node to display the method with parameters --> <funcNameExpr expr="(?!(if|while|for|switch))\w+" /> </functionName> </function>
by
<function mainExpr="^[\s]*((abstract|static|public|protected|private|final)\s+)*(function)\s+([\w]+[\w\d_]*)\s*\(" > <functionName> <funcNameExpr expr="(?!(abstract|static|public|protected|private|final)function)[\w_]+[\s]*\(" /> <!-- comment below node if want display method with parmas <funcNameExpr expr="(?!(if|while|for|switch))[\w_]+"/> --> </functionName> </function>
it’s seem to work but an additionnal “(” appear.
-
Hello, Florent,
The solution consists to change the end of the
expr
attribute but a positive look-ahead ,(?=\()
, instead of the\(
form !So expr=
"(?!(abstract|static|public|protected|private|final)function)[\w_]+[\s]*(?=\()"
Secondly, I try to simplify, a bit, your two regexes :
-
The
\s
,\d
,\w
can be written, outside a class character. So, for instance, the syntax\s*
is strictly equivalent to the[\s]*
one ! -
The
\w
syntax is a single word character, and is equivalent to the class character[\d_\u\l
. That is to say it represents any single digit OR the underscore character OR any upper-case letter, accentuated or not OR any lower-case letter, accentuated or not -
I also deleted some round brackets couples as they create groups, which are not used later on, anyway !
-
Finally, I suppose, like in most languages, that the first character of a function name must be a letter or an underscore ( Thanks to MAPJe71 ) and all the other characters, of the name, are, simply, word characters
If so, the mainExpr attribute can be simplified into :
^\s*((abstract|static|public|protected|private|final)\s+)*function\s+[\u\l_]\w*\s*\(
And the expr attribute is, simply :
(?!(abstract|static|public|protected|private|final)function)\w+\s*(?=\()
Best Regards,
guy038
-
-
First character of a function name can also be an underscore.
-
Thanks guy038 and MAPJe71 for this precious help.
It’s works geat.
In addition,
constructors are like :
function __construct() { ... }
So MAPJe71 is right a function can start with “_”
According to that remark, i change [\u\l] to [\u\l_] in mainExpr :
mainExpr="^\s*((abstract|static|public|protected|private|final)\s+)*function\s+[\u\l_]\w*\s*\("
REM : The functionListxml in the 7.2.2 zip file containts really different RE
<function mainExpr="^\s*((static|public|protected|private|final)*(\s+(static|public|protected|private|final))+\s+)?(function\s+)+(\w+(\s+\w+)?(\s+|\*\s+|\s+\*|\s+\*\s+))?(\w+\s*::)?(?!(if|while|for|switch))[\w~]+\s*\([^\{]*\{" > <functionName> <funcNameExpr expr="(?!(if|while|for|switch))\w+\s*\([^\{]*" /> <!-- comment out the following node to display the method with parameters --> <funcNameExpr expr="(?!(if|while|for|switch))\w+" /> </functionName> </function>
-
The functionListxml in the 7.2.2 zip file containts really different RE
That’s correct and it will change in the near future.
-
Florent and MAPJe71,
Thanks to you, both, for this this precision ! So, I’ve just updated my previous mail !
And, after added your last example function __construct() { … }, in a new PHP file, the
__construct
function does appear, too, in the FunctionList panel :-)Cheers,
guy038
BTW, I don’t know the PHP language, at all, but, about regexes, up to now, I can manage ;-))
-
Nice!
RE seem to be so powerful.