@@ -97,6 +97,21 @@ export default util.createRule<Options, MessageIds>({
97
97
return '' ;
98
98
}
99
99
100
+ function isNodeParentModuleDeclaration ( node : TSESTree . Node ) : boolean {
101
+ if ( ! node . parent ) {
102
+ return false ;
103
+ }
104
+
105
+ if ( node . parent . type === AST_NODE_TYPES . TSModuleDeclaration ) {
106
+ return true ;
107
+ }
108
+
109
+ if ( node . parent . type === AST_NODE_TYPES . Program ) {
110
+ return false ;
111
+ }
112
+ return isNodeParentModuleDeclaration ( node . parent ) ;
113
+ }
114
+
100
115
return {
101
116
TSMethodSignature ( methodNode ) : void {
102
117
if ( mode === 'method' ) {
@@ -112,61 +127,79 @@ export default util.createRule<Options, MessageIds>({
112
127
getMethodKey ( element ) === getMethodKey ( methodNode ) ,
113
128
)
114
129
: [ ] ;
130
+ const isParentModule = isNodeParentModuleDeclaration ( methodNode ) ;
115
131
116
132
if ( duplicatedKeyMethodNodes . length > 0 ) {
133
+ if ( isParentModule ) {
134
+ context . report ( {
135
+ node : methodNode ,
136
+ messageId : 'errorMethod' ,
137
+ } ) ;
138
+ } else {
139
+ context . report ( {
140
+ node : methodNode ,
141
+ messageId : 'errorMethod' ,
142
+ * fix ( fixer ) {
143
+ const methodNodes = [
144
+ methodNode ,
145
+ ...duplicatedKeyMethodNodes ,
146
+ ] . sort ( ( a , b ) => ( a . range [ 0 ] < b . range [ 0 ] ? - 1 : 1 ) ) ;
147
+ const typeString = methodNodes . reduce (
148
+ ( str , node , idx , nodes ) => {
149
+ const params = getMethodParams ( node ) ;
150
+ const returnType = getMethodReturnType ( node ) ;
151
+ return `${ str } (${ params } => ${ returnType } )${
152
+ idx !== nodes . length - 1 ? ' & ' : ''
153
+ } `;
154
+ } ,
155
+ '' ,
156
+ ) ;
157
+ const key = getMethodKey ( methodNode ) ;
158
+ const delimiter = getDelimiter ( methodNode ) ;
159
+ yield fixer . replaceText (
160
+ methodNode ,
161
+ `${ key } : ${ typeString } ${ delimiter } ` ,
162
+ ) ;
163
+ for ( const node of duplicatedKeyMethodNodes ) {
164
+ const lastToken = sourceCode . getLastToken ( node ) ;
165
+ if ( lastToken ) {
166
+ const nextToken = sourceCode . getTokenAfter ( lastToken ) ;
167
+ if ( nextToken ) {
168
+ yield fixer . remove ( node ) ;
169
+ yield fixer . replaceTextRange (
170
+ [ lastToken . range [ 1 ] , nextToken . range [ 0 ] ] ,
171
+ '' ,
172
+ ) ;
173
+ }
174
+ }
175
+ }
176
+ } ,
177
+ } ) ;
178
+ }
179
+ return ;
180
+ }
181
+
182
+ if ( isParentModule ) {
117
183
context . report ( {
118
184
node : methodNode ,
119
185
messageId : 'errorMethod' ,
120
- * fix ( fixer ) {
121
- const methodNodes = [
122
- methodNode ,
123
- ...duplicatedKeyMethodNodes ,
124
- ] . sort ( ( a , b ) => ( a . range [ 0 ] < b . range [ 0 ] ? - 1 : 1 ) ) ;
125
- const typeString = methodNodes . reduce ( ( str , node , idx , nodes ) => {
126
- const params = getMethodParams ( node ) ;
127
- const returnType = getMethodReturnType ( node ) ;
128
- return `${ str } (${ params } => ${ returnType } )${
129
- idx !== nodes . length - 1 ? ' & ' : ''
130
- } `;
131
- } , '' ) ;
186
+ } ) ;
187
+ } else {
188
+ context . report ( {
189
+ node : methodNode ,
190
+ messageId : 'errorMethod' ,
191
+ fix : fixer => {
132
192
const key = getMethodKey ( methodNode ) ;
193
+ const params = getMethodParams ( methodNode ) ;
194
+ const returnType = getMethodReturnType ( methodNode ) ;
133
195
const delimiter = getDelimiter ( methodNode ) ;
134
- yield fixer . replaceText (
196
+ return fixer . replaceText (
135
197
methodNode ,
136
- `${ key } : ${ typeString } ${ delimiter } ` ,
198
+ `${ key } : ${ params } => ${ returnType } ${ delimiter } ` ,
137
199
) ;
138
- for ( const node of duplicatedKeyMethodNodes ) {
139
- const lastToken = sourceCode . getLastToken ( node ) ;
140
- if ( lastToken ) {
141
- const nextToken = sourceCode . getTokenAfter ( lastToken ) ;
142
- if ( nextToken ) {
143
- yield fixer . remove ( node ) ;
144
- yield fixer . replaceTextRange (
145
- [ lastToken . range [ 1 ] , nextToken . range [ 0 ] ] ,
146
- '' ,
147
- ) ;
148
- }
149
- }
150
- }
151
200
} ,
152
201
} ) ;
153
- return ;
154
202
}
155
-
156
- context . report ( {
157
- node : methodNode ,
158
- messageId : 'errorMethod' ,
159
- fix : fixer => {
160
- const key = getMethodKey ( methodNode ) ;
161
- const params = getMethodParams ( methodNode ) ;
162
- const returnType = getMethodReturnType ( methodNode ) ;
163
- const delimiter = getDelimiter ( methodNode ) ;
164
- return fixer . replaceText (
165
- methodNode ,
166
- `${ key } : ${ params } => ${ returnType } ${ delimiter } ` ,
167
- ) ;
168
- } ,
169
- } ) ;
170
203
} ,
171
204
TSPropertySignature ( propertyNode ) : void {
172
205
const typeNode = propertyNode . typeAnnotation ?. typeAnnotation ;
0 commit comments