8

是否有任何 ColdFusion IDE/IDE 插件允许您执行类似于 Visual Studio 的go to definitionfind 用法的操作(此页面上有一些详细信息)?

例如,在一个.cfc文件中,我可能有:

<cfset variables.fooResult = CreateObject(
    "component",
    "Components.com.company.myClass").fooMethod()>

myClass.cfc我有:

<cffunction name="fooMethod" access="public">
    <!-- function body -->
</cffunction>

如果我.fooMethod在第一个文件中设置了光标,则转到定义操作应该将我放在该方法的声明中myClass.cfc

目前我正在使用 Eclipse 的CFEclipse插件来查看一些遗留的 ColdFusion。

4

2 回答 2

4

CFEclipse 没有这个功能,部分原因是 CFML 是一种动态语言,在解析方面具有相当的复杂性。

在大多数情况下,您可以使用正则表达式搜索来帮助您找到最合适的方式。

函数定义

要查找函数定义,大多数时候搜索...

(name="|ion )methodname

...就足够了,而且比以下更彻底的形式更快:

(<cffunction\s+name\s*=\s*['"]|\bfunction\s+)methodname

函数调用

要查找函数调用,只需执行以下操作:

methodname\s*\(

虽然反对你可能需要更彻底,但:

['"]methodname['"]\s*\]\s*\(

...如果使用了括号表示法。

您可能还想检查cfinvoke的使用情况:

<cfinvoke[^>]+?method\s*=\s*['"]methodname

当然,如果您有以下代码,这些方法都不会找到:

<cfset meth = "methodname" />
<cfinvoke ... method="#meth#" />

...也没有任何其他形式的动态方法名称。


如果您确实需要彻底查找所有实例,最好单独搜索方法名称(或包装为\bmethodname\b),然后手动遍历使用它的任何变量的代码。

于 2013-09-09T17:34:23.250 回答
3

如果你使用

<cfset c = new Components.com.company.myClass()>
<cfset variables.fooResult = c.fooMethod()>

我相信在 CFBuilder 中你可以点击 Ctrl 并且 CFC 类和方法会变成一个超链接。请参阅http://www.adobe.com/ca/products/coldfusion-builder/features.html上的“代码洞察” 。 它在工作时有效,在映射不正确或某些语法可能不受支持时无效。我不确定他们是否支持这种CreateObject()方式。

没有 find 用法,因为 CF 不是静态语言。但是,除非代码动态调用方法或使用Evaulate()

于 2013-09-09T17:32:27.940 回答