@@ -2,6 +2,7 @@ import { createRule } from '../util';
2
2
import {
3
3
AST_NODE_TYPES ,
4
4
TSESTree ,
5
+ TSESLint ,
5
6
} from '@typescript-eslint/experimental-utils' ;
6
7
7
8
type MessageIds = 'preferRecord' | 'preferIndexSignature' ;
@@ -66,6 +67,7 @@ export default createRule<Options, MessageIds>({
66
67
node : TSESTree . Node ,
67
68
prefix : string ,
68
69
postfix : string ,
70
+ safeFix = true ,
69
71
) : void {
70
72
if ( members . length !== 1 ) {
71
73
return ;
@@ -98,14 +100,16 @@ export default createRule<Options, MessageIds>({
98
100
context . report ( {
99
101
node,
100
102
messageId : 'preferRecord' ,
101
- fix ( fixer ) {
102
- const key = sourceCode . getText ( keyType . typeAnnotation ) ;
103
- const value = sourceCode . getText ( valueType . typeAnnotation ) ;
104
- const record = member . readonly
105
- ? `Readonly<Record<${ key } , ${ value } >>`
106
- : `Record<${ key } , ${ value } >` ;
107
- return fixer . replaceText ( node , `${ prefix } ${ record } ${ postfix } ` ) ;
108
- } ,
103
+ fix : safeFix
104
+ ? ( fixer ) : TSESLint . RuleFix => {
105
+ const key = sourceCode . getText ( keyType . typeAnnotation ) ;
106
+ const value = sourceCode . getText ( valueType . typeAnnotation ) ;
107
+ const record = member . readonly
108
+ ? `Readonly<Record<${ key } , ${ value } >>`
109
+ : `Record<${ key } , ${ value } >` ;
110
+ return fixer . replaceText ( node , `${ prefix } ${ record } ${ postfix } ` ) ;
111
+ }
112
+ : null ,
109
113
} ) ;
110
114
}
111
115
@@ -128,6 +132,7 @@ export default createRule<Options, MessageIds>({
128
132
node ,
129
133
`type ${ node . id . name } ${ genericTypes } = ` ,
130
134
';' ,
135
+ ! node . extends ?. length ,
131
136
) ;
132
137
} ,
133
138
} ;
0 commit comments