[javascript] New rule AvoidConsoleStatements (#5126)
Merge pull request #5126 from adangel:js-rule-avoidconsolestatements
This commit is contained in:
@ -7745,6 +7745,15 @@
|
|||||||
"contributions": [
|
"contributions": [
|
||||||
"bug"
|
"bug"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"login": "dschach",
|
||||||
|
"name": "David Schach",
|
||||||
|
"avatar_url": "https://avatars.githubusercontent.com/u/636977?v=4",
|
||||||
|
"profile": "https://github.com/dschach",
|
||||||
|
"contributions": [
|
||||||
|
"bug"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -40,6 +40,8 @@ are no longer available.
|
|||||||
#### New Rules
|
#### New Rules
|
||||||
* The new Java rule {%rule java/multithreading/AvoidSynchronizedStatement %} finds synchronization blocks that
|
* The new Java rule {%rule java/multithreading/AvoidSynchronizedStatement %} finds synchronization blocks that
|
||||||
could cause performance issues with virtual threads due to pinning.
|
could cause performance issues with virtual threads due to pinning.
|
||||||
|
* The new JavaScript rule {%rule ecmascript/performance/AvoidConsoleStatements %} finds any function calls
|
||||||
|
on the Console API (e.g. `console.log`). Using these in production code might negatively impact performance.
|
||||||
|
|
||||||
### 🐛 Fixed Issues
|
### 🐛 Fixed Issues
|
||||||
* apex-performance
|
* apex-performance
|
||||||
@ -59,6 +61,8 @@ are no longer available.
|
|||||||
* [#5162](https://github.com/pmd/pmd/issues/5162): \[java] SingularField: False-positive when preceded by synchronized block
|
* [#5162](https://github.com/pmd/pmd/issues/5162): \[java] SingularField: False-positive when preceded by synchronized block
|
||||||
* java-multithreading
|
* java-multithreading
|
||||||
* [#5175](https://github.com/pmd/pmd/issues/5175): \[java] Update AvoidSynchronizedAtMethodLevel message to mention ReentrantLock, new rule AvoidSynchronizedStatement
|
* [#5175](https://github.com/pmd/pmd/issues/5175): \[java] Update AvoidSynchronizedAtMethodLevel message to mention ReentrantLock, new rule AvoidSynchronizedStatement
|
||||||
|
* javascript-performance
|
||||||
|
* [#5105](https://github.com/pmd/pmd/issues/5105): \[javascript] Prohibit any console methods
|
||||||
* plsql
|
* plsql
|
||||||
* [#5125](https://github.com/pmd/pmd/pull/5125): \[plsql] Improve merge statement (order of merge insert/update flexible, allow prefixes in column names)
|
* [#5125](https://github.com/pmd/pmd/pull/5125): \[plsql] Improve merge statement (order of merge insert/update flexible, allow prefixes in column names)
|
||||||
* plsql-bestpractices
|
* plsql-bestpractices
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
rulesets.filenames=\
|
rulesets.filenames=\
|
||||||
category/ecmascript/bestpractices.xml,\
|
category/ecmascript/bestpractices.xml,\
|
||||||
category/ecmascript/codestyle.xml,\
|
category/ecmascript/codestyle.xml,\
|
||||||
category/ecmascript/errorprone.xml
|
category/ecmascript/errorprone.xml,\
|
||||||
|
category/ecmascript/performance.xml
|
||||||
|
|
||||||
#
|
#
|
||||||
#empty categories:
|
#empty categories:
|
||||||
@ -13,5 +14,4 @@ rulesets.filenames=\
|
|||||||
#category/ecmascript/design.xml,
|
#category/ecmascript/design.xml,
|
||||||
#category/ecmascript/documentation.xml,
|
#category/ecmascript/documentation.xml,
|
||||||
#category/ecmascript/multithreading.xml,
|
#category/ecmascript/multithreading.xml,
|
||||||
#category/ecmascript/performance.xml,
|
|
||||||
#category/ecmascript/security.xml,
|
#category/ecmascript/security.xml,
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
<ruleset name="Performance"
|
<ruleset name="Performance"
|
||||||
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
|
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
@ -9,4 +8,42 @@
|
|||||||
Rules that flag suboptimal code.
|
Rules that flag suboptimal code.
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
|
<rule name="AvoidConsoleStatements"
|
||||||
|
language="ecmascript"
|
||||||
|
since="7.5.0"
|
||||||
|
message="Avoid console statements since they negatively impact performance"
|
||||||
|
class="net.sourceforge.pmd.lang.rule.xpath.XPathRule"
|
||||||
|
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_ecmascript_performance.html#avoidconsolestatements">
|
||||||
|
<description>
|
||||||
|
Using the console for logging in production might negatively impact performance.
|
||||||
|
In addition, logging could expose sensitive data.
|
||||||
|
</description>
|
||||||
|
<priority>3</priority>
|
||||||
|
<properties>
|
||||||
|
<property name="xpath">
|
||||||
|
<value>
|
||||||
|
<![CDATA[
|
||||||
|
//FunctionCall[PropertyGet
|
||||||
|
[Name[1][@Identifier = 'console']]
|
||||||
|
[Name[2][@Identifier]]
|
||||||
|
]
|
||||||
|
|
|
||||||
|
//FunctionCall[PropertyGet
|
||||||
|
[PropertyGet[1]
|
||||||
|
[Name[1][@Identifier = 'window']]
|
||||||
|
[Name[2][@Identifier = 'console']]
|
||||||
|
]
|
||||||
|
[Name[1][@Identifier]]
|
||||||
|
]
|
||||||
|
|
||||||
|
]]>
|
||||||
|
</value>
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
<example><![CDATA[
|
||||||
|
var myObj = getData();
|
||||||
|
console.log(myObj); // bad
|
||||||
|
console.debug("myObj:", myObj); // bad
|
||||||
|
]]></example>
|
||||||
|
</rule>
|
||||||
</ruleset>
|
</ruleset>
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.sourceforge.pmd.lang.ecmascript.rule.performance;
|
||||||
|
|
||||||
|
import net.sourceforge.pmd.test.PmdRuleTst;
|
||||||
|
|
||||||
|
class AvoidConsoleStatementsTest extends PmdRuleTst {
|
||||||
|
// no additional unit tests
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<test-data
|
||||||
|
xmlns="http://pmd.sourceforge.net/rule-tests"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests https://pmd.github.io/schema/rule-tests_1_0_0.xsd">
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>Any console method should be flagged</description>
|
||||||
|
<expected-problems>9</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
console.log('foo');
|
||||||
|
console.error('foo');
|
||||||
|
console.info('foo');
|
||||||
|
console.warn('foo');
|
||||||
|
console.debug('foo');
|
||||||
|
console.trace('foo');
|
||||||
|
console.assert(false, 'foo');
|
||||||
|
console.dir(myObj);
|
||||||
|
console.group('label');
|
||||||
|
]]></code>
|
||||||
|
</test-code>
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>Any console method via window.console should be flagged</description>
|
||||||
|
<expected-problems>9</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
window.console.log('foo');
|
||||||
|
window.console.error('foo');
|
||||||
|
window.console.info('foo');
|
||||||
|
window.console.warn('foo');
|
||||||
|
window.console.debug('foo');
|
||||||
|
window.console.trace('foo');
|
||||||
|
window.console.assert(false, 'foo');
|
||||||
|
window.console.dir(myObj);
|
||||||
|
window.console.group('label');
|
||||||
|
]]></code>
|
||||||
|
</test-code>
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>Other similar methods shouldn't be flagged</description>
|
||||||
|
<expected-problems>0</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
var MyFoo = {
|
||||||
|
debug: function(a) {
|
||||||
|
// ...
|
||||||
|
},
|
||||||
|
console: {
|
||||||
|
debug: function(a) {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
MyFoo.debug('bar'); // ok, it is not console.debug
|
||||||
|
MyFoo.console.debug('bar'); // ok, it is not console.debug
|
||||||
|
]]></code>
|
||||||
|
</test-code>
|
||||||
|
</test-data>
|
Reference in New Issue
Block a user