diff --git a/src/rules/prefer-readonly-type.ts b/src/rules/prefer-readonly-type.ts index 60f91d3a9..9bd5959cb 100644 --- a/src/rules/prefer-readonly-type.ts +++ b/src/rules/prefer-readonly-type.ts @@ -80,11 +80,10 @@ const defaultOptions: Options = { // The possible error messages. const errorMessages = { - array: "Only readonly arrays allowed.", - implicit: "Implicitly a mutable array. Only readonly arrays allowed.", - property: "A readonly modifier is required.", - tuple: "Only readonly tuples allowed.", - type: "Only readonly types allowed.", + arrayShouldBeReadonly: "Array should be readonly.", + propertyShouldBeReadonly: "This property should be readonly.", + tupleShouldBeReadonly: "Tuple should be readonly.", + typeShouldBeReadonly: "Type should be readonly.", } as const; // The meta data for this rule. @@ -137,7 +136,9 @@ function checkArrayOrTupleType( ? [ { node, - messageId: isTSTupleType(node) ? "tuple" : "array", + messageId: isTSTupleType(node) + ? "tupleShouldBeReadonly" + : "arrayShouldBeReadonly", fix: node.parent !== undefined && isTSArrayType(node.parent) ? (fixer) => [ @@ -166,7 +167,7 @@ function checkMappedType( : [ { node, - messageId: "property", + messageId: "propertyShouldBeReadonly", fix: (fixer) => fixer.insertTextBeforeRange( [node.range[0] + 1, node.range[1]], @@ -205,7 +206,7 @@ function checkTypeReference( ? [ { node, - messageId: "type", + messageId: "typeShouldBeReadonly", fix: (fixer) => fixer.replaceText(node.typeName, immutableType), }, ] @@ -238,7 +239,7 @@ function checkProperty( ? [ { node, - messageId: "property", + messageId: "propertyShouldBeReadonly", fix: isTSIndexSignature(node) || isTSPropertySignature(node) ? (fixer) => fixer.insertTextBefore(node, "readonly ") @@ -303,7 +304,7 @@ function checkForImplicitMutableArray( ? [ { node: declarator.node, - messageId: "implicit", + messageId: "arrayShouldBeReadonly", fix: (fixer) => fixer.insertTextAfter(declarator.id, ": readonly unknown[]"), }, diff --git a/tests/rules/prefer-readonly-type/ts/invalid.ts b/tests/rules/prefer-readonly-type/ts/invalid.ts index 6a28365e2..eca2b8e7d 100644 --- a/tests/rules/prefer-readonly-type/ts/invalid.ts +++ b/tests/rules/prefer-readonly-type/ts/invalid.ts @@ -13,7 +13,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 1, column: 26, @@ -30,7 +30,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 26, @@ -47,7 +47,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 23, @@ -64,7 +64,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 23, @@ -84,7 +84,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 2, column: 17, @@ -108,7 +108,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 3, column: 22, @@ -132,7 +132,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 3, column: 19, @@ -156,7 +156,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 3, column: 19, @@ -176,7 +176,7 @@ const tests: ReadonlyArray = [ };`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 2, column: 12, @@ -194,7 +194,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "tuple", + messageId: "tupleShouldBeReadonly", type: "TSTupleType", line: 1, column: 21, @@ -211,13 +211,13 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "tuple", + messageId: "tupleShouldBeReadonly", type: "TSTupleType", line: 1, column: 21, }, { - messageId: "tuple", + messageId: "tupleShouldBeReadonly", type: "TSTupleType", line: 1, column: 38, @@ -234,7 +234,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "tuple", + messageId: "tupleShouldBeReadonly", type: "TSTupleType", line: 1, column: 47, @@ -251,7 +251,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "tuple", + messageId: "tupleShouldBeReadonly", type: "TSTupleType", line: 1, column: 21, @@ -301,13 +301,13 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 3, column: 19, }, { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 11, column: 19, @@ -321,7 +321,7 @@ const tests: ReadonlyArray = [ output: `type Foo = ReadonlyArray;`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 12, @@ -345,7 +345,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 3, column: 19, @@ -365,7 +365,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 2, column: 14, @@ -389,7 +389,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 3, column: 19, @@ -403,7 +403,7 @@ const tests: ReadonlyArray = [ output: `const foo: ReadonlyArray = [];`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 12, @@ -417,7 +417,7 @@ const tests: ReadonlyArray = [ output: `const foo: readonly number[] = [1, 2, 3];`, errors: [ { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 1, column: 12, @@ -431,7 +431,7 @@ const tests: ReadonlyArray = [ output: `let x: Foo>;`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 12, @@ -445,7 +445,7 @@ const tests: ReadonlyArray = [ output: `let x: readonly (readonly string[])[];`, errors: [ { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 1, column: 17, @@ -463,13 +463,13 @@ const tests: ReadonlyArray = [ function bar(param: readonly unknown[] = [1, 2, 3]) {}`, errors: [ { - messageId: "implicit", + messageId: "arrayShouldBeReadonly", type: "VariableDeclarator", line: 1, column: 7, }, { - messageId: "implicit", + messageId: "arrayShouldBeReadonly", type: "AssignmentPattern", line: 2, column: 14, @@ -495,25 +495,25 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "ClassProperty", line: 2, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "ClassProperty", line: 3, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "ClassProperty", line: 4, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "ClassProperty", line: 5, column: 3, @@ -541,19 +541,19 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSParameterProperty", line: 3, column: 5, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSParameterProperty", line: 4, column: 5, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSParameterProperty", line: 5, column: 5, @@ -579,19 +579,19 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSIndexSignature", line: 2, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSIndexSignature", line: 5, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 5, column: 20, @@ -611,7 +611,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSIndexSignature", line: 1, column: 23, @@ -625,7 +625,7 @@ const tests: ReadonlyArray = [ output: `let foo: { readonly [key: string]: number };`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSIndexSignature", line: 1, column: 12, @@ -647,13 +647,13 @@ const tests: ReadonlyArray = [ }>;`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 2, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 3, column: 3, @@ -696,61 +696,61 @@ const tests: ReadonlyArray = [ };`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 2, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 3, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 4, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 5, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSIndexSignature", line: 6, column: 3, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 8, column: 5, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 9, column: 5, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 10, column: 5, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 11, column: 5, }, { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSIndexSignature", line: 12, column: 5, @@ -767,7 +767,7 @@ const tests: ReadonlyArray = [ };`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 1, column: 21, @@ -783,7 +783,7 @@ const tests: ReadonlyArray = [ const func = (x: { readonly [key in string]: number }) => {}`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSMappedType", line: 1, column: 18, @@ -811,7 +811,7 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 4, column: 7, @@ -833,7 +833,7 @@ const tests: ReadonlyArray = [ };`, errors: [ { - messageId: "property", + messageId: "propertyShouldBeReadonly", type: "TSPropertySignature", line: 3, column: 3, @@ -851,13 +851,13 @@ const tests: ReadonlyArray = [ function bar(...numbers: readonly number[]): readonly number[] {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 50, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 2, column: 46, @@ -875,13 +875,13 @@ const tests: ReadonlyArray = [ const bar = function(...numbers: readonly number[]): readonly number[] {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 58, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 2, column: 54, @@ -899,13 +899,13 @@ const tests: ReadonlyArray = [ const bar = (...numbers: readonly number[]): readonly number[] => {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 50, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 2, column: 46, @@ -935,13 +935,13 @@ const tests: ReadonlyArray = [ }`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 2, column: 43, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 6, column: 39, @@ -959,13 +959,13 @@ const tests: ReadonlyArray = [ function foo(...numbers: ReadonlyArray): Promise {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 58, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 2, column: 58, @@ -985,13 +985,13 @@ const tests: ReadonlyArray = [ function foo(...numbers: ReadonlyArray): Promise> {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 2, column: 62, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 3, column: 62, @@ -1009,13 +1009,13 @@ const tests: ReadonlyArray = [ function foo(...numbers: ReadonlyArray): readonly [number, readonly number[], number] {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 68, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 2, column: 68, @@ -1031,13 +1031,13 @@ const tests: ReadonlyArray = [ function foo(...numbers: ReadonlyArray): { readonly a: ReadonlyArray } | { readonly b: readonly string[] } {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 64, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 1, column: 96, @@ -1053,13 +1053,13 @@ const tests: ReadonlyArray = [ function foo(...numbers: ReadonlyArray): { readonly a: ReadonlyArray } & { readonly b: readonly string[] } {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 64, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 1, column: 96, @@ -1075,13 +1075,13 @@ const tests: ReadonlyArray = [ function foo(x: T): T extends ReadonlyArray ? string : readonly number[] {}`, errors: [ { - messageId: "type", + messageId: "typeShouldBeReadonly", type: "TSTypeReference", line: 1, column: 34, }, { - messageId: "array", + messageId: "arrayShouldBeReadonly", type: "TSArrayType", line: 1, column: 59,