我试图获得" Fucntion List" notepad ++(v 6.7.5)上的功能,用于Perl的类(或包,用perl的说法)。默认情况下,仅支持包外的常规子例程。
以下是功能列表配置文件中的XML代码段(位于我的Windows机器上的C:\ Users \ user \ AppData \ Roaming \ Notepad ++ \ functionList.xml)。我添加了" classRange"节点我自己在默认"功能"之上节点
编辑:由于用户stribizhev
,下面是更正后的XML更新:我已经评论了"正常"函数部分,因为它导致我的所有方法在函数列表中出现两次。
<parser id="perl_function" displayName="Perl">
<classRange mainExpr="^package.*?(?=\npackage|\Z)">
<className>
<nameExpr expr="\s\K[^;]+"/>
</className>
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
</classRange>
<!--
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{" displayMode="$className->$functionName">
<functionName>
<nameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
-->
</parser>
此文档为here。
答案 0 :(得分:3)
最有可能的,您应该使用funcNameExpr
代替nameExpr
:
示例:
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
答案 1 :(得分:0)
funcNameExpr或取消注释对我不起作用。有效的方法-用括号注释掉三个正则表达式行:
#\(
#[^()]*
#\)
由于Perl在函数名称正确后不考虑括号,因此我没有这样的含义。括号可以位于函数的每个调用处,但不能位于函数所在的地方。