pve-eslint/eslint/tests/lib/rules/id-blacklist.js
Thomas Lamprecht 6f03646270 import 7.12.1 upstream release
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-10-29 11:42:45 +01:00

1360 lines
40 KiB
JavaScript

/**
* @fileoverview Tests for id-blacklist rule.
* @author Keith Cirkel
*/
"use strict";
//------------------------------------------------------------------------------
// Requirements
//------------------------------------------------------------------------------
const rule = require("../../../lib/rules/id-blacklist"),
{ RuleTester } = require("../../../lib/rule-tester");
//------------------------------------------------------------------------------
// Tests
//------------------------------------------------------------------------------
const ruleTester = new RuleTester();
const error = { messageId: "restricted", type: "Identifier" };
ruleTester.run("id-blacklist", rule, {
valid: [
{
code: "foo = \"bar\"",
options: ["bar"]
},
{
code: "bar = \"bar\"",
options: ["foo"]
},
{
code: "foo = \"bar\"",
options: ["f", "fo", "fooo", "bar"]
},
{
code: "function foo(){}",
options: ["bar"]
},
{
code: "foo()",
options: ["f", "fo", "fooo", "bar"]
},
{
code: "import { foo as bar } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" }
},
{
code: "export { foo as bar } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" }
},
{
code: "foo.bar()",
options: ["f", "fo", "fooo", "b", "ba", "baz"]
},
{
code: "var foo = bar.baz;",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz"]
},
{
code: "var foo = bar.baz.bing;",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "foo.bar.baz = bing.bong.bash;",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "if (foo.bar) {}",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "var obj = { key: foo.bar };",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "const {foo: bar} = baz",
options: ["foo"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "const {foo: {bar: baz}} = qux",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "function foo({ bar: baz }) {}",
options: ["bar"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "function foo({ bar: {baz: qux} }) {}",
options: ["bar", "baz"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "function foo({baz} = obj.qux) {}",
options: ["qux"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "function foo({ foo: {baz} = obj.qux }) {}",
options: ["qux"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "({a: bar = obj.baz});",
options: ["baz"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "({foo: {a: bar = obj.baz}} = qux);",
options: ["baz"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "var arr = [foo.bar];",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "[foo.bar]",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "[foo.bar.nesting]",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "if (foo.bar === bar.baz) { [foo.bar] }",
options: ["f", "fo", "fooo", "b", "ba", "barr", "bazz", "bingg"]
},
{
code: "var myArray = new Array(); var myDate = new Date();",
options: ["array", "date", "mydate", "myarray", "new", "var"]
},
{
code: "foo()",
options: ["foo"]
},
{
code: "foo.bar()",
options: ["bar"]
},
{
code: "foo.bar",
options: ["bar"]
},
{
code: "({foo: obj.bar.bar.bar.baz} = {});",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6 }
},
{
code: "({[obj.bar]: a = baz} = qux);",
options: ["bar"],
parserOptions: { ecmaVersion: 6 }
},
// references to global variables
{
code: "Number.parseInt()",
options: ["Number"]
},
{
code: "x = Number.NaN;",
options: ["Number"]
},
{
code: "var foo = undefined;",
options: ["undefined"]
},
{
code: "if (foo === undefined);",
options: ["undefined"]
},
{
code: "obj[undefined] = 5;", // creates obj["undefined"]. It should be disallowed, but the rule doesn't know values of globals and can't control computed access.
options: ["undefined"]
},
{
code: "foo = { [myGlobal]: 1 };",
options: ["myGlobal"],
parserOptions: { ecmaVersion: 6 },
globals: { myGlobal: "readonly" }
},
{
code: "({ myGlobal } = foo);", // writability doesn't affect the logic, it's always assumed that user doesn't have control over the names of globals.
options: ["myGlobal"],
parserOptions: { ecmaVersion: 6 },
globals: { myGlobal: "writable" }
},
{
code: "/* global myGlobal: readonly */ myGlobal = 5;",
options: ["myGlobal"]
},
{
code: "var foo = [Map];",
options: ["Map"],
env: { es6: true }
},
{
code: "var foo = { bar: window.baz };",
options: ["window"],
env: { browser: true }
}
],
invalid: [
{
code: "foo = \"bar\"",
options: ["foo"],
errors: [
error
]
},
{
code: "bar = \"bar\"",
options: ["bar"],
errors: [
error
]
},
{
code: "foo = \"bar\"",
options: ["f", "fo", "foo", "bar"],
errors: [
error
]
},
{
code: "function foo(){}",
options: ["f", "fo", "foo", "bar"],
errors: [
error
]
},
{
code: "import foo from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
error
]
},
{
code: "import * as foo from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
error
]
},
{
code: "export * as foo from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 2020, sourceType: "module" },
errors: [
error
]
},
{
code: "import { foo } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
error
]
},
{
code: "import { foo as bar } from 'mod'",
options: ["bar"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 17
}]
},
{
code: "import { foo as bar } from 'mod'",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 17
}]
},
{
code: "import { foo as foo } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 17
}]
},
{
code: "import { foo, foo as bar } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 10
}]
},
{
code: "import { foo as bar, foo } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 22
}]
},
{
code: "import foo, { foo as bar } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 8
}]
},
{
code: "var foo; export { foo as bar };",
options: ["bar"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 26
}]
},
{
code: "var foo; export { foo };",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 5
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 19
}
]
},
{
code: "var foo; export { foo as bar };",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 5
},
// reports each occurrence of local identifier, although it's renamed in this export specifier
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 19
}
]
},
{
code: "var foo; export { foo as foo };",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 5
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 19
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 26
}
]
},
{
code: "var foo; export { foo as bar };",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 5
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 19
},
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 26
}
]
},
{
code: "export { foo } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
error
]
},
{
code: "export { foo as bar } from 'mod'",
options: ["bar"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 17
}]
},
{
code: "export { foo as bar } from 'mod'",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 17
}]
},
{
code: "export { foo as foo } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 17
}]
},
{
code: "export { foo, foo as bar } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 10
}]
},
{
code: "export { foo as bar, foo } from 'mod'",
options: ["foo"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 22
}]
},
{
code: "foo.bar()",
options: ["f", "fo", "foo", "b", "ba", "baz"],
errors: [
error
]
},
{
code: "foo[bar] = baz;",
options: ["bar"],
errors: [{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier"
}]
},
{
code: "baz = foo[bar];",
options: ["bar"],
errors: [{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier"
}]
},
{
code: "var foo = bar.baz;",
options: ["f", "fo", "foo", "b", "ba", "barr", "bazz"],
errors: [
error
]
},
{
code: "var foo = bar.baz;",
options: ["f", "fo", "fooo", "b", "ba", "bar", "bazz"],
errors: [
error
]
},
{
code: "if (foo.bar) {}",
options: ["f", "fo", "foo", "b", "ba", "barr", "bazz", "bingg"],
errors: [
error
]
},
{
code: "var obj = { key: foo.bar };",
options: ["obj"],
errors: [
error
]
},
{
code: "var obj = { key: foo.bar };",
options: ["key"],
errors: [
error
]
},
{
code: "var obj = { key: foo.bar };",
options: ["foo"],
errors: [
error
]
},
{
code: "var arr = [foo.bar];",
options: ["arr"],
errors: [
error
]
},
{
code: "var arr = [foo.bar];",
options: ["foo"],
errors: [
error
]
},
{
code: "[foo.bar]",
options: ["f", "fo", "foo", "b", "ba", "barr", "bazz", "bingg"],
errors: [
error
]
},
{
code: "if (foo.bar === bar.baz) { [bing.baz] }",
options: ["f", "fo", "foo", "b", "ba", "barr", "bazz", "bingg"],
errors: [
error
]
},
{
code: "if (foo.bar === bar.baz) { [foo.bar] }",
options: ["f", "fo", "fooo", "b", "ba", "bar", "bazz", "bingg"],
errors: [
error
]
},
{
code: "var myArray = new Array(); var myDate = new Date();",
options: ["array", "date", "myDate", "myarray", "new", "var"],
errors: [
error
]
},
{
code: "var myArray = new Array(); var myDate = new Date();",
options: ["array", "date", "mydate", "myArray", "new", "var"],
errors: [
error
]
},
{
code: "foo.bar = 1",
options: ["bar"],
errors: [
error
]
},
{
code: "foo.bar.baz = 1",
options: ["bar", "baz"],
errors: [
error
]
},
{
code: "const {foo} = baz",
options: ["foo"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 8
}
]
},
{
code: "const {foo: bar} = baz",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 13
}
]
},
{
code: "const {[foo]: bar} = baz",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 9
},
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 15
}
]
},
{
code: "const {foo: {bar: baz}} = qux",
options: ["foo", "bar", "baz"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "baz" },
type: "Identifier",
column: 19
}
]
},
{
code: "const {foo: {[bar]: baz}} = qux",
options: ["foo", "bar", "baz"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 15
},
{
messageId: "restricted",
data: { name: "baz" },
type: "Identifier",
column: 21
}
]
},
{
code: "const {[foo]: {[bar]: baz}} = qux",
options: ["foo", "bar", "baz"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 9
},
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 17
},
{
messageId: "restricted",
data: { name: "baz" },
type: "Identifier",
column: 23
}
]
},
{
code: "function foo({ bar: baz }) {}",
options: ["bar", "baz"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "baz" },
type: "Identifier",
column: 21
}
]
},
{
code: "function foo({ bar: {baz: qux} }) {}",
options: ["bar", "baz", "qux"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "qux" },
type: "Identifier",
column: 27
}
]
},
{
code: "({foo: obj.bar} = baz);",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 12
}
]
},
{
code: "({foo: obj.bar.bar.bar.baz} = {});",
options: ["foo", "bar", "baz"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "baz" },
type: "Identifier",
column: 24
}
]
},
{
code: "({[foo]: obj.bar} = baz);",
options: ["foo", "bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 4
},
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 14
}
]
},
{
code: "({foo: { a: obj.bar }} = baz);",
options: ["bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 17
}
]
},
{
code: "({a: obj.bar = baz} = qux);",
options: ["bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 10
}
]
},
{
code: "({a: obj.bar.bar.baz = obj.qux} = obj.qux);",
options: ["a", "bar", "baz", "qux"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "baz" },
type: "Identifier",
column: 18
}
]
},
{
code: "({a: obj[bar] = obj.qux} = obj.qux);",
options: ["a", "bar", "baz", "qux"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 10
}
]
},
{
code: "({a: [obj.bar] = baz} = qux);",
options: ["bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 11
}
]
},
{
code: "({foo: { a: obj.bar = baz}} = qux);",
options: ["bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 17
}
]
},
{
code: "({foo: { [a]: obj.bar }} = baz);",
options: ["bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 19
}
]
},
{
code: "({...obj.bar} = baz);",
options: ["bar"],
parserOptions: { ecmaVersion: 9 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 10
}
]
},
{
code: "([obj.bar] = baz);",
options: ["bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 7
}
]
},
{
code: "const [bar] = baz;",
options: ["bar"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "bar" },
type: "Identifier",
column: 8
}
]
},
// not a reference to a global variable, because it isn't a reference to a variable
{
code: "foo.undefined = 1;",
options: ["undefined"],
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier"
}
]
},
{
code: "var foo = { undefined: 1 };",
options: ["undefined"],
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier"
}
]
},
{
code: "var foo = { undefined: undefined };",
options: ["undefined"],
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 13
}
]
},
{
code: "var foo = { Number() {} };",
options: ["Number"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier"
}
]
},
{
code: "class Foo { Number() {} }",
options: ["Number"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier"
}
]
},
{
code: "myGlobal: while(foo) { break myGlobal; } ",
options: ["myGlobal"],
globals: { myGlobal: "readonly" },
errors: [
{
messageId: "restricted",
data: { name: "myGlobal" },
type: "Identifier",
column: 1
},
{
messageId: "restricted",
data: { name: "myGlobal" },
type: "Identifier",
column: 30
}
]
},
// globals declared in the given source code are not excluded from consideration
{
code: "const foo = 1; bar = foo;",
options: ["foo"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 7
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 22
}
]
},
{
code: "let foo; foo = bar;",
options: ["foo"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 5
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 10
}
]
},
{
code: "bar = foo; var foo;",
options: ["foo"],
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 7
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 16
}
]
},
{
code: "function foo() {} var bar = foo;",
options: ["foo"],
errors: [
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 10
},
{
messageId: "restricted",
data: { name: "foo" },
type: "Identifier",
column: 29
}
]
},
{
code: "class Foo {} var bar = Foo;",
options: ["Foo"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "Foo" },
type: "Identifier",
column: 7
},
{
messageId: "restricted",
data: { name: "Foo" },
type: "Identifier",
column: 24
}
]
},
// redeclared globals are not excluded from consideration
{
code: "let undefined; undefined = 1;",
options: ["undefined"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 5
},
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 16
}
]
},
{
code: "foo = undefined; var undefined;",
options: ["undefined"],
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 7
},
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 22
}
]
},
{
code: "function undefined(){} x = undefined;",
options: ["undefined"],
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 10
},
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 28
}
]
},
{
code: "class Number {} x = Number.NaN;",
options: ["Number"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 7
},
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 21
}
]
},
/*
* Assignment to a property with a restricted name isn't allowed, in general.
* In this case, that restriction prevents creating a global variable with a restricted name.
*/
{
code: "/* globals myGlobal */ window.myGlobal = 5; foo = myGlobal;",
options: ["myGlobal"],
env: { browser: true },
errors: [
{
messageId: "restricted",
data: { name: "myGlobal" },
type: "Identifier",
column: 31
}
]
},
// disabled global variables
{
code: "var foo = undefined;",
options: ["undefined"],
globals: { undefined: "off" },
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier"
}
]
},
{
code: "/* globals Number: off */ Number.parseInt()",
options: ["Number"],
errors: [
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier"
}
]
},
{
code: "var foo = [Map];", // this actually isn't a disabled global: it was never enabled because es6 environment isn't enabled
options: ["Map"],
errors: [
{
messageId: "restricted",
data: { name: "Map" },
type: "Identifier"
}
]
},
// shadowed global variables
{
code: "if (foo) { let undefined; bar = undefined; }",
options: ["undefined"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 16
},
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier",
column: 33
}
]
},
{
code: "function foo(Number) { var x = Number.NaN; }",
options: ["Number"],
errors: [
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 14
},
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 32
}
]
},
{
code: "function foo() { var myGlobal; x = myGlobal; }",
options: ["myGlobal"],
globals: { myGlobal: "readonly" },
errors: [
{
messageId: "restricted",
data: { name: "myGlobal" },
type: "Identifier",
column: 22
},
{
messageId: "restricted",
data: { name: "myGlobal" },
type: "Identifier",
column: 36
}
]
},
{
code: "function foo(bar) { return Number.parseInt(bar); } const Number = 1;",
options: ["Number"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 28
},
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 58
}
]
},
{
code: "import Number from 'myNumber'; const foo = Number.parseInt(bar);",
options: ["Number"],
parserOptions: { ecmaVersion: 6, sourceType: "module" },
errors: [
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 8
},
{
messageId: "restricted",
data: { name: "Number" },
type: "Identifier",
column: 44
}
]
},
{
code: "var foo = function undefined() {};",
options: ["undefined"],
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier"
}
]
},
// this is a reference to a global variable, but at the same time creates a property with a restricted name
{
code: "var foo = { undefined }",
options: ["undefined"],
parserOptions: { ecmaVersion: 6 },
errors: [
{
messageId: "restricted",
data: { name: "undefined" },
type: "Identifier"
}
]
}
]
});