@@ -78,7 +78,6 @@ module.exports = {
78
78
const tokenBeforeOpeningCurly = sourceCode . getTokenBefore ( openingCurly ) ;
79
79
const tokenAfterOpeningCurly = sourceCode . getTokenAfter ( openingCurly ) ;
80
80
const tokenBeforeClosingCurly = sourceCode . getTokenBefore ( closingCurly ) ;
81
- const tokenAfterClosingCurly = sourceCode . getTokenAfter ( closingCurly ) ;
82
81
const singleLineException = params . allowSingleLine && astUtils . isTokenOnSameLine ( openingCurly , closingCurly ) ;
83
82
84
83
if ( style !== "allman" && ! astUtils . isTokenOnSameLine ( tokenBeforeOpeningCurly , openingCurly ) ) {
@@ -112,23 +111,30 @@ module.exports = {
112
111
fix : fixer => fixer . insertTextBefore ( closingCurly , "\n" )
113
112
} ) ;
114
113
}
114
+ }
115
115
116
- if ( tokenAfterClosingCurly && tokenAfterClosingCurly . type === "Keyword" && new Set ( [ "else" , "catch" , "finally" ] ) . has ( tokenAfterClosingCurly . value ) ) {
117
- if ( style === "1tbs" && ! astUtils . isTokenOnSameLine ( closingCurly , tokenAfterClosingCurly ) ) {
118
- context . report ( {
119
- node : closingCurly ,
120
- message : CLOSE_MESSAGE ,
121
- fix : removeNewlineBetween ( closingCurly , tokenAfterClosingCurly )
122
- } ) ;
123
- }
116
+ /**
117
+ * Validates the location of a token that appears before a keyword (e.g. a newline before `else`)
118
+ * @param {Token } curlyToken The closing curly token. This is assumed to precede a keyword token (such as `else` or `finally`).
119
+ * @returns {void }
120
+ */
121
+ function validateCurlyBeforeKeyword ( curlyToken ) {
122
+ const keywordToken = sourceCode . getTokenAfter ( curlyToken ) ;
124
123
125
- if ( style !== "1tbs" && astUtils . isTokenOnSameLine ( closingCurly , tokenAfterClosingCurly ) ) {
126
- context . report ( {
127
- node : closingCurly ,
128
- message : CLOSE_MESSAGE_STROUSTRUP_ALLMAN ,
129
- fix : fixer => fixer . insertTextAfter ( closingCurly , "\n" )
130
- } ) ;
131
- }
124
+ if ( style === "1tbs" && ! astUtils . isTokenOnSameLine ( curlyToken , keywordToken ) ) {
125
+ context . report ( {
126
+ node : curlyToken ,
127
+ message : CLOSE_MESSAGE ,
128
+ fix : removeNewlineBetween ( curlyToken , keywordToken )
129
+ } ) ;
130
+ }
131
+
132
+ if ( style !== "1tbs" && astUtils . isTokenOnSameLine ( curlyToken , keywordToken ) ) {
133
+ context . report ( {
134
+ node : curlyToken ,
135
+ message : CLOSE_MESSAGE_STROUSTRUP_ALLMAN ,
136
+ fix : fixer => fixer . insertTextAfter ( curlyToken , "\n" )
137
+ } ) ;
132
138
}
133
139
}
134
140
@@ -154,6 +160,24 @@ module.exports = {
154
160
const openingCurly = sourceCode . getTokenBefore ( node . cases . length ? node . cases [ 0 ] : closingCurly ) ;
155
161
156
162
validateCurlyPair ( openingCurly , closingCurly ) ;
163
+ } ,
164
+ IfStatement ( node ) {
165
+ if ( node . consequent . type === "BlockStatement" && node . alternate ) {
166
+
167
+ // Handle the keyword after the `if` block (before `else`)
168
+ validateCurlyBeforeKeyword ( sourceCode . getLastToken ( node . consequent ) ) ;
169
+ }
170
+ } ,
171
+ TryStatement ( node ) {
172
+
173
+ // Handle the keyword after the `try` block (before `catch` or `finally`)
174
+ validateCurlyBeforeKeyword ( sourceCode . getLastToken ( node . block ) ) ;
175
+
176
+ if ( node . handler && node . finalizer ) {
177
+
178
+ // Handle the keyword after the `catch` block (before `finally`)
179
+ validateCurlyBeforeKeyword ( sourceCode . getLastToken ( node . handler . body ) ) ;
180
+ }
157
181
}
158
182
} ;
159
183
}
0 commit comments