mirror of
https://git.proxmox.com/git/pve-eslint
synced 2025-10-04 08:12:03 +00:00
616 lines
18 KiB
JavaScript
616 lines
18 KiB
JavaScript
/**
|
|
* @fileoverview Rule to flag non-matching identifiers
|
|
* @author Matthieu Larcher
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Requirements
|
|
//------------------------------------------------------------------------------
|
|
|
|
const rule = require("../../../lib/rules/id-match"),
|
|
{ RuleTester } = require("../../../lib/rule-tester");
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Tests
|
|
//------------------------------------------------------------------------------
|
|
|
|
const ruleTester = new RuleTester();
|
|
const error = { messageId: "notMatch", type: "Identifier" };
|
|
|
|
ruleTester.run("id-match", rule, {
|
|
valid: [
|
|
{
|
|
code: "__foo = \"Matthieu\"",
|
|
options: [
|
|
"^[a-z]+$",
|
|
{
|
|
onlyDeclarations: true
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "firstname = \"Matthieu\"",
|
|
options: ["^[a-z]+$"]
|
|
},
|
|
{
|
|
code: "first_name = \"Matthieu\"",
|
|
options: ["[a-z]+"]
|
|
},
|
|
{
|
|
code: "firstname = \"Matthieu\"",
|
|
options: ["^f"]
|
|
},
|
|
{
|
|
code: "last_Name = \"Larcher\"",
|
|
options: ["^[a-z]+(_[A-Z][a-z]+)*$"]
|
|
},
|
|
{
|
|
code: "param = \"none\"",
|
|
options: ["^[a-z]+(_[A-Z][a-z])*$"]
|
|
},
|
|
{
|
|
code: "function noUnder(){}",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "no_under()",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "foo.no_under2()",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "var foo = bar.no_under3;",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "var foo = bar.no_under4.something;",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "foo.no_under5.qux = bar.no_under6.something;",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "if (bar.no_under7) {}",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "var obj = { key: foo.no_under8 };",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "var arr = [foo.no_under9];",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "[foo.no_under10]",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "var arr = [foo.no_under11.qux];",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "[foo.no_under12.nesting]",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "if (foo.no_under13 === boom.no_under14) { [foo.no_under15] }",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "var myArray = new Array(); var myDate = new Date();",
|
|
options: ["^[a-z$]+([A-Z][a-z]+)*$"]
|
|
},
|
|
{
|
|
code: "var x = obj._foo;",
|
|
options: ["^[^_]+$"]
|
|
},
|
|
{
|
|
code: "var obj = {key: no_under}",
|
|
options: ["^[^_]+$", {
|
|
properties: true,
|
|
onlyDeclarations: true
|
|
}]
|
|
},
|
|
{
|
|
code: "var {key_no_under: key} = {}",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 }
|
|
},
|
|
{
|
|
code: "var { category_id } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true,
|
|
ignoreDestructuring: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 }
|
|
},
|
|
{
|
|
code: "var { category_id: category_id } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true,
|
|
ignoreDestructuring: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 }
|
|
},
|
|
{
|
|
code: "var { category_id = 1 } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true,
|
|
ignoreDestructuring: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 }
|
|
},
|
|
{
|
|
code: "var o = {key: 1}",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}]
|
|
},
|
|
{
|
|
code: "var o = {no_under16: 1}",
|
|
options: ["^[^_]+$", {
|
|
properties: false
|
|
}]
|
|
},
|
|
{
|
|
code: "obj.no_under17 = 2;",
|
|
options: ["^[^_]+$", {
|
|
properties: false
|
|
}]
|
|
},
|
|
{
|
|
code: "var obj = {\n no_under18: 1 \n};\n obj.no_under19 = 2;",
|
|
options: ["^[^_]+$", {
|
|
properties: false
|
|
}]
|
|
},
|
|
{
|
|
code: "obj.no_under20 = function(){};",
|
|
options: ["^[^_]+$", {
|
|
properties: false
|
|
}]
|
|
},
|
|
{
|
|
code: "var x = obj._foo2;",
|
|
options: ["^[^_]+$", {
|
|
properties: false
|
|
}]
|
|
}
|
|
],
|
|
invalid: [
|
|
{
|
|
code: "var __foo = \"Matthieu\"",
|
|
options: [
|
|
"^[a-z]+$",
|
|
{
|
|
onlyDeclarations: true
|
|
}
|
|
],
|
|
errors: [error]
|
|
},
|
|
{
|
|
code: "first_name = \"Matthieu\"",
|
|
options: ["^[a-z]+$"],
|
|
errors: [error]
|
|
},
|
|
{
|
|
code: "first_name = \"Matthieu\"",
|
|
options: ["^z"],
|
|
errors: [
|
|
error
|
|
]
|
|
},
|
|
{
|
|
code: "Last_Name = \"Larcher\"",
|
|
options: ["^[a-z]+(_[A-Z][a-z])*$"],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "var obj = {key: no_under}",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_under' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "function no_under21(){}",
|
|
options: ["^[^_]+$"],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "obj.no_under22 = function(){};",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "no_under23.foo = function(){};",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "[no_under24.baz]",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "if (foo.bar_baz === boom.bam_pow) { [no_under25.baz] }",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "foo.no_under26 = boom.bam_pow",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "var foo = { no_under27: boom.bam_pow }",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "foo.qux.no_under28 = { bar: boom.bam_pow }",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "var o = {no_under29: 1}",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [error
|
|
]
|
|
},
|
|
{
|
|
code: "obj.no_under30 = 2;",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
errors: [
|
|
{
|
|
messageId: "notMatch",
|
|
data: { name: "no_under30", pattern: "^[^_]+$" }
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "var { category_id: category_alias } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'category_alias' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "var { category_id: category_alias } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true,
|
|
ignoreDestructuring: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'category_alias' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "var { category_id: categoryId, ...other_props } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true,
|
|
ignoreDestructuring: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 2018 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'other_props' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "var { category_id } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'category_id' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "var { category_id = 1 } = query;",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'category_id' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import no_camelcased from \"external-module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import * as no_camelcased from \"external-module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "export * as no_camelcased from \"external-module\";",
|
|
options: ["^[^_]+$"],
|
|
parserOptions: { ecmaVersion: 2020, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import { no_camelcased } from \"external-module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import { no_camelcased as no_camel_cased } from \"external module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camel_cased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import { camelCased as no_camel_cased } from \"external module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camel_cased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import { camelCased, no_camelcased } from \"external-module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import { no_camelcased as camelCased, another_no_camelcased } from \"external-module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'another_no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import camelCased, { no_camelcased } from \"external-module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "import no_camelcased, { another_no_camelcased as camelCased } from \"external-module\";",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6, sourceType: "module" },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "function foo({ no_camelcased }) {};",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "function foo({ no_camelcased = 'default value' }) {};",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "const no_camelcased = 0; function foo({ camelcased_value = no_camelcased }) {}",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
},
|
|
{
|
|
message: "Identifier 'camelcased_value' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "const { bar: no_camelcased } = foo;",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "function foo({ value_1: my_default }) {}",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'my_default' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "function foo({ isCamelcased: no_camelcased }) {};",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "var { foo: bar_baz = 1 } = quz;",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'bar_baz' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
code: "const { no_camelcased = false } = bar;",
|
|
options: ["^[^_]+$", {
|
|
properties: true
|
|
}],
|
|
parserOptions: { ecmaVersion: 6 },
|
|
errors: [
|
|
{
|
|
message: "Identifier 'no_camelcased' does not match the pattern '^[^_]+$'.",
|
|
type: "Identifier"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
});
|