diff --git a/src/main/java/com/cflint/plugins/core/AbortChecker.java b/src/main/java/com/cflint/plugins/core/AbortChecker.java
new file mode 100644
index 000000000..f5360ec90
--- /dev/null
+++ b/src/main/java/com/cflint/plugins/core/AbortChecker.java
@@ -0,0 +1,29 @@
+package com.cflint.plugins.core;
+
+import ro.fortsoft.pf4j.Extension;
+import cfml.parsing.cfscript.CFFunctionExpression;
+import cfml.parsing.cfscript.script.CFAbortStatement;
+import cfml.parsing.cfscript.script.CFExpressionStatement;
+import cfml.parsing.cfscript.script.CFScriptStatement;
+
+import com.cflint.BugInfo;
+import com.cflint.BugList;
+import com.cflint.plugins.CFLintScannerAdapter;
+import com.cflint.plugins.Context;
+
+@Extension
+public class AbortChecker extends CFLintScannerAdapter {
+ final String severity = "WARNING";
+
+ public void expression(final CFScriptStatement expression, final Context context, final BugList bugs) {
+ System.out.println(expression.getClass().getName());
+
+ if (expression instanceof CFAbortStatement) {
+ int lineNo = ((CFAbortStatement) expression).getLine();
+ bugs.add(new BugInfo.BugInfoBuilder().setLine(lineNo).setMessageCode("AVOID_USING_ABORT")
+ .setSeverity(severity).setFilename(context.getFilename())
+ .setMessage("Abort statement at " + lineNo + ". Avoid using abort in production code.")
+ .build());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/cflint.definition.xml b/src/main/resources/cflint.definition.xml
index f522dde99..f12e7ddc2 100644
--- a/src/main/resources/cflint.definition.xml
+++ b/src/main/resources/cflint.definition.xml
@@ -87,6 +87,11 @@
+
+
+ INFO
+
+
Avoid using <${tagName}> tags. Use cfquery and cfstoredproc instead.
diff --git a/src/test/java/com/cflint/TestAbortChecker.java b/src/test/java/com/cflint/TestAbortChecker.java
new file mode 100644
index 000000000..f3136d5d6
--- /dev/null
+++ b/src/test/java/com/cflint/TestAbortChecker.java
@@ -0,0 +1,56 @@
+package com.cflint;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import cfml.parsing.reporting.ParseException;
+
+import com.cflint.config.CFLintPluginInfo.PluginInfoRule;
+import com.cflint.config.CFLintPluginInfo.PluginInfoRule.PluginMessage;
+import com.cflint.config.ConfigRuntime;
+import com.cflint.plugins.core.AbortChecker;
+
+public class TestAbortChecker {
+
+ private CFLint cfBugs;
+
+ @Before
+ public void setUp() {
+ final ConfigRuntime conf = new ConfigRuntime();
+ final PluginInfoRule pluginRule = new PluginInfoRule();
+ pluginRule.setName("AbortChecker");
+ pluginRule.addParameter("tagName", "cfabort");
+ conf.getRules().add(pluginRule);
+ final PluginMessage pluginMessage = new PluginMessage("AVOID_USING_ABORT");
+ pluginMessage.setSeverity("WARNING");
+ pluginRule.getMessages().add(pluginMessage);
+ cfBugs = new CFLint(conf, new AbortChecker());
+ }
+
+ @Test
+ public void test_no_abort() throws ParseException, IOException {
+ final String cfcSrc = "\r\n"
+ + "a = 23;\r\n"
+ + "";
+ cfBugs.process(cfcSrc, "test");
+ assertEquals(0, cfBugs.getBugs().getBugList().size());
+ }
+
+ @Test
+ public void test_abort() throws ParseException, IOException {
+ final String cfcSrc = "\r\n"
+ + "abort;\r\n"
+ + "";
+ cfBugs.process(cfcSrc, "test");
+ final List result = cfBugs.getBugs().getBugList().values().iterator().next();
+ assertEquals(1, result.size());
+ assertEquals("AVOID_USING_ABORT", result.get(0).getMessageCode());
+ assertEquals(2, result.get(0).getLine());
+ }
+
+}