//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------
+
const alwaysError = { messageId: "always" };
const neverError = { messageId: "never" };
// Tests
//------------------------------------------------------------------------------
-const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 6 } });
+const ruleTester = new RuleTester({ parserOptions: { ecmaVersion: 2022 } });
ruleTester.run("lines-between-class-members", rule, {
valid: [
"class foo{ bar(){}\n\n;;baz(){}}",
"class foo{ bar(){};\n\nbaz(){}}",
+ "class C {\naaa;\n\n#bbb;\n\nccc(){}\n\n#ddd(){}\n}",
+
{ code: "class foo{ bar(){}\nbaz(){}}", options: ["never"] },
{ code: "class foo{ bar(){}\n/*comments*/baz(){}}", options: ["never"] },
{ code: "class foo{ bar(){}\n//comments\nbaz(){}}", options: ["never"] },
{ code: "class foo{ bar(){}\n\n//comments\nbaz(){}}", options: ["always"] },
{ code: "class foo{ bar(){}\nbaz(){}}", options: ["always", { exceptAfterSingleLine: true }] },
- { code: "class foo{ bar(){\n}\n\nbaz(){}}", options: ["always", { exceptAfterSingleLine: true }] }
+ { code: "class foo{ bar(){\n}\n\nbaz(){}}", options: ["always", { exceptAfterSingleLine: true }] },
+ { code: "class foo{\naaa;\n#bbb;\nccc(){\n}\n\n#ddd(){\n}\n}", options: ["always", { exceptAfterSingleLine: true }] },
+
+ // semicolon-less style (semicolons are at the beginning of lines)
+ { code: "class C { foo\n\n;bar }", options: ["always"] },
+ { code: "class C { foo\n;bar }", options: ["always", { exceptAfterSingleLine: true }] },
+ { code: "class C { foo\n;bar }", options: ["never"] }
],
invalid: [
{
output: "class A {\nfoo() {}\n\n/* comment */;\n;\nbar() {}\n}",
options: ["always"],
errors: [alwaysError]
+ }, {
+ code: "class C {\nfield1\nfield2\n}",
+ output: "class C {\nfield1\n\nfield2\n}",
+ options: ["always"],
+ errors: [alwaysError]
+ }, {
+ code: "class C {\n#field1\n#field2\n}",
+ output: "class C {\n#field1\n\n#field2\n}",
+ options: ["always"],
+ errors: [alwaysError]
+ }, {
+ code: "class C {\nfield1\n\nfield2\n}",
+ output: "class C {\nfield1\nfield2\n}",
+ options: ["never"],
+ errors: [neverError]
+ }, {
+ code: "class C {\nfield1 = () => {\n}\nfield2\nfield3\n}",
+ output: "class C {\nfield1 = () => {\n}\n\nfield2\nfield3\n}",
+ options: ["always", { exceptAfterSingleLine: true }],
+ errors: [alwaysError]
+ },
+ {
+ code: "class C { foo;bar }",
+ output: "class C { foo;\nbar }",
+ options: ["always"],
+ errors: [alwaysError]
+ },
+ {
+ code: "class C { foo;\nbar; }",
+ output: "class C { foo;\n\nbar; }",
+ options: ["always"],
+ errors: [alwaysError]
+ },
+ {
+ code: "class C { foo;\n;bar }",
+ output: "class C { foo;\n\n;bar }",
+ options: ["always"],
+ errors: [alwaysError]
+ },
+
+ // semicolon-less style (semicolons are at the beginning of lines)
+ {
+ code: "class C { foo\n;bar }",
+ output: "class C { foo\n\n;bar }",
+ options: ["always"],
+ errors: [alwaysError]
+ },
+ {
+ code: "class C { foo\n\n;bar }",
+ output: "class C { foo\n;bar }",
+ options: ["never"],
+ errors: [neverError]
+ },
+ {
+ code: "class C { foo\n;;bar }",
+ output: "class C { foo\n\n;;bar }",
+ options: ["always"],
+ errors: [alwaysError]
}
]
});