目标
我正在开发一个为Coldfusion CFscript创建Varscoper的项目.基本上,这意味着检查源代码文件以确保开发人员正确地使用var他们的变量.
在使用ANTLR V4几天后,我有一个语法,在GUI视图中生成一个非常好的解析树.现在,使用该树,我需要一种方法来以编程方式在节点上爬行和寻找变量声明,并确保如果它们在函数内部,则它们具有适当的范围.如果可能的话,我宁愿不在语法文件中这样做,因为这需要将语言的定义与此特定任务混合.
我试过的
我最近的尝试是使用ParserRuleContext并尝试通过它的children通过getPayload().在检查了类之后,getPayLoad()我会有一个ParserRuleContext对象或一个Token对象.不幸的是,使用它我永远无法找到获取特定节点的实际规则类型的方法,只有它包含文本.每个节点的规则类型都是必需的,因为该文本节点是否是被忽略的右手表达式,变量赋值或函数声明都很重要.
问题
这是我的示例java代码:
Cfscript.java
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.Trees;
public class Cfscript {
public static void main(String[] args) throws Exception {
ANTLRInputStream input = new ANTLRFileStream(args[0]);
CfscriptLexer lexer = new CfscriptLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
CfscriptParser parser = new CfscriptParser(tokens);
parser.setBuildParseTree(true);
ParserRuleContext tree = parser.component();
tree.inspect(parser); // show in gui
/*
Recursively go though tree finding function declarations and …Run Code Online (Sandbox Code Playgroud) 我们正在使用TFS并为我们的Dev提供不同的分支.
在分支A中,我们进行了迁移以更改列大小
在分支B中,我们进行了迁移以添加新表.这个分支不知道分支A修改!!
两个修改都合并到主分支.
当我执行更新数据库时,它执行2迁移,但最后告诉我有待更改.如果我执行Add-Migration,它将创建与第一次迁移相同的(在分支A中).
无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.
是因为我上一次迁移的属性Target de IMigrationMetadata的内容中缺少某些东西,因为它不知道第一次迁移?
是否可以处理不同TFS分支中的迁移?
.net coldfusion entity-framework ef-code-first ef-migrations
目前我通过以下两种方法之一将字符串换成新行:
<cfset someStr="This is line 1" & Chr(10) & "This is line 2" & Chr(10) & "This is line 3" />
Run Code Online (Sandbox Code Playgroud)
要么
<cfset NL=Chr(10) />
<cfset someStr="This is line 1#NL#This is line 2#NL#This is line 3" />
Run Code Online (Sandbox Code Playgroud)
还有更像Java/C++的方式吗?更像是这样我的意思是:
<cfset someStr="This is line 1\nThis is line 2\nThis is line 3" />
Run Code Online (Sandbox Code Playgroud) 我正在使用Coldfusion.我想将两个字符串连接到相同的结构键中,但我不断收到"无法将x转换为布尔值"的错误.
例如:
<cfset myStruct.string1 = nodes[1].string1.XmlText>
<cfset mystruct.string2 = nodes[1].string2.XmlText>
Run Code Online (Sandbox Code Playgroud)
以下都不起作用
<cfset myStruct.concatendatedSring = nodes[1].string1.XmlText AND nodes[1].string2.XmlText>
<cfset myStruct.concatendatedSring = myStruct.string1 AND myStruct.string2>
Run Code Online (Sandbox Code Playgroud)
为什么两种方法都无效?
为什么ColdFusion中的数学运算似乎不受浮点数学问题的影响?拿代码:
result = 0.06 + 0.01;
writedump(result);
writedump(result.getClass().getName());
Run Code Online (Sandbox Code Playgroud)
哪个输出
0.07
java.lang.Double中
然而,相当的Java代码产生了我在添加两个双精度时所期望的:
public static void main(String[] args) {
double a = 0.01d;
double b = 0.06d;
System.out.println(a + b); //0.06999999999999999
}
Run Code Online (Sandbox Code Playgroud)
这是我期望从ColdFusion看到的,因为浮动数学的现实(http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html).
ColdFusion在幕后做了一些"魔术"还是我在这里看到一个孤立的异常?
为了调试我想将某些变量转储到我的网页上.我怎么能从cfscript标签内做到这一点?
我尝试了以下但它不起作用:
<cfscript>
...
<cfif cgi.REMOTE_ADDR eq "IP">
<cfdump var="#var1#"><br/>
</cfif>
...
</cfscript>
Run Code Online (Sandbox Code Playgroud)
关于可以做什么的任何线索?
您在使用CF-ORM(Hibernate)的ColdFusion 9中观察到的一些内容应该注意什么?
我的任务是经历一些最近遭受过相当讨厌的SQL注入攻击的ColdFusion站点.基本上我的工作涉及向<cfqueryparam所有内联sql 添加>标签.在大多数情况下,我已经把它弄下来了,但有人能告诉我如何使用cfqueryparam与LIKE运算符?
如果我的查询如下所示:
select * from Foo where name like '%Bob%'
Run Code Online (Sandbox Code Playgroud)
我的<cfqueryparam>标签应该是什么样的?
我希望能够将字符串数字(如"1,427.76")转换为coldfusion中的数字,但逗号会使其失败.除了必须删除逗号之外,还有一种简单的方法吗?
<cfset string = "1,427.75">
<cfset number = string * 100>
Run Code Online (Sandbox Code Playgroud)
尝试对其执行数学运算时发生错误.如果删除逗号它工作正常但我从数据库计算得到逗号.
我试图使用本文中的说明发现Java Runtime中的受信任权限列表.当我输入以下命令时:
C:\ColdFusion8\runtime\jre\lib>keytool -list -storepass changeit -noprompt -keystore
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
'keytool'不被识别为内部或外部命令,可操作程序或批处理文件.
我检查了包含我的keytool可执行文件的目录是否在路径中.(在我的Windows 7机器上,它在C:\Program Files (x86)\Java\jre6\bin)尽管如此,命令行将无法识别该keytool命令.
我假设doc中提到了两个单独的命令:
C:\CFusionMX\runtime\jre\lib>keytool -list -storepass changeit -noprompt -keystore
C:\CFusionMX\runtime\jre\lib\security\cacerts
编辑:
那么我可以使用以下过程而不是答案中提到的复杂步骤吗?
然后我点击"安装证书"选项
打开证书导入向导窗口,我单击Next我看到两个选项
我决定选择选项(b),但我很困惑我应该选择哪个证书库.