为Perl配置记事本++“功能列表”
问题描述:
我试图在记事本++(v 6.7.5)上使用类(或软件包,以perl的说法)为Perl工作的“功能列表”功能。默认情况下,仅支持软件包外的常规子例程。为Perl配置记事本++“功能列表”
下面是来自函数列表配置文件(位于我的Windows计算机上的C:\ Users \ user \ AppData \ Roaming \ Notepad ++ \ functionList.xml)中存在问题的XML片段。我自己在默认的“功能”节点之上添加了“classRange”节点。
编辑:下面是更正后的XML,这要归功于用户stribizhev
更新:我已经注释掉“正常”的功能部分,因为它引起了我的所有方法在功能列表中出现两次。
<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。
答
最可能的是,你应该使用funcNameExpr
而不是nameExpr
:
例子:
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
答
我想你的XML在记事本++ 6.8.1,虽然它的工作对Perl有 '包',我没有包的纯脚本现在不能生成子目录。我取消了注释掉的注释,它修复了这个问题,但确实表现出你提到的行为 - 在“包裹”中将子项加倍。
我发现了以下工作很好,甚至忽略了POD潜艇(可能还有为例使用),因此它们不会添加到列表中:
<parser id="perl_function" displayName="Perl" commentExpr="(#.*?$|(__END__.*\Z))">
<classRange mainExpr="(?<=^package).*?(?=\npackage|\Z)">
<className>
<nameExpr expr="\s\K[^;]+"/>
</className>
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{">
<functionName>
<funcNameExpr expr="(sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
</classRange>
<function mainExpr="^[\s]*(?<!#)[\s]*sub[\s]+[\w]+[\s]*\(?[^\)\(]*?\)?[\n\s]*\{">
<functionName>
<nameExpr expr="(?:sub[\s]+)?\K[\w]+"/>
</functionName>
</function>
</parser>
感谢你的快速和正确的答案! ! – beasy 2015-03-24 23:13:29