Files
codeql/javascript/ql/test/query-tests/Expressions/ExprHasNoEffect/tst.js
2020-01-03 11:07:35 +01:00

78 lines
1.5 KiB
JavaScript

'use strict'; // OK
'use struct'; // OK (flagged by UnknownDirective.ql)
23; // NOT OK
void(23); // OK
23, foo(); // NOT OK
foo(23, 42); // OK
foo((23, bar())); // NOT OK
foo((bar(), 23)); // OK
1,f(); // NOT OK
// OK
/**
* @type {function(int) : string}
*/
String.prototype.slice;
// OK
/** @typedef {(string|number)} */
goog.NumberLike;
// NOT OK
/** Useless */
x;
// OK (magic DOM property)
elt.clientTop;
// OK (xUnit fixture)
[Fixture]
function tst() {}
// OK: bad style, but most likely intentional
(0, o.m)();
(0, o["m"])();
function tst() {
// OK: bad style, but most likely intentional
(0, eval)("42");
}
function f() {
var x;
"foo"; // NOT OK
}
try {
doSomethingDangerous();
} catch(e) {
new Error("Told you so"); // NOT OK
new SyntaxError("Why didn't you listen to me?"); // NOT OK
new Error(computeSnarkyMessage(e)); // NOT OK
new UnknownError(); // OK
}
function g() {
var o = {};
Object.defineProperty(o, "trivialGetter1", { get: function(){} });
o.trivialGetter1; // OK
Object.defineProperty(o, "trivialNonGetter1", "foo");
o.trivialNonGetter1; // NOT OK
var getterDef1 = { get: function(){} };
Object.defineProperty(o, "nonTrivialGetter1", getterDef1);
o.nonTrivialGetter1; // OK
var getterDef2 = { };
unknownPrepareGetter(getterDef2);
Object.defineProperty(o, "nonTrivialNonGetter1", getterDef2);
o.nonTrivialNonGetter1; // OK
Object.defineProperty(o, "nonTrivialGetter2", unknownGetterDef());
o.nonTrivialGetter2; // OK
(o: empty); // OK.
};