@@ -78,6 +78,28 @@ export default createRule("array-bracket-spacing", {
7878 singleElementException : isOptionSet ( "singleValue" ) ,
7979 objectsInArraysException : isOptionSet ( "objectsInArrays" ) ,
8080 arraysInArraysException : isOptionSet ( "arraysInArrays" ) ,
81+ isOpeningBracketMustBeSpaced ( node : AST . JSONArrayExpression ) {
82+ if ( options . singleElementException && node . elements . length === 1 ) {
83+ return ! options . spaced ;
84+ }
85+ const firstElement = node . elements [ 0 ] ;
86+ return firstElement &&
87+ ( ( options . objectsInArraysException && isObjectType ( firstElement ) ) ||
88+ ( options . arraysInArraysException && isArrayType ( firstElement ) ) )
89+ ? ! options . spaced
90+ : options . spaced ;
91+ } ,
92+ isClosingBracketMustBeSpaced ( node : AST . JSONArrayExpression ) {
93+ if ( options . singleElementException && node . elements . length === 1 ) {
94+ return ! options . spaced ;
95+ }
96+ const lastElement = node . elements [ node . elements . length - 1 ] ;
97+ return lastElement &&
98+ ( ( options . objectsInArraysException && isObjectType ( lastElement ) ) ||
99+ ( options . arraysInArraysException && isArrayType ( lastElement ) ) )
100+ ? ! options . spaced
101+ : options . spaced ;
102+ } ,
81103 } ;
82104
83105 /**
@@ -189,57 +211,25 @@ export default createRule("array-bracket-spacing", {
189211 const second = sourceCode . getFirstToken ( node as any , 1 ) ! ;
190212 const last = sourceCode . getLastToken ( node as any ) ! ;
191213 const penultimate = sourceCode . getTokenBefore ( last ) ! ;
192- const firstElement = node . elements [ 0 ] ;
193- const lastElement = node . elements [ node . elements . length - 1 ] ;
194-
195- const openingBracketMustBeSpaced =
196- ( firstElement &&
197- options . objectsInArraysException &&
198- isObjectType ( firstElement ) ) ||
199- ( firstElement &&
200- options . arraysInArraysException &&
201- isArrayType ( firstElement ) ) ||
202- ( options . singleElementException && node . elements . length === 1 )
203- ? ! options . spaced
204- : options . spaced ;
205-
206- const closingBracketMustBeSpaced =
207- ( lastElement &&
208- options . objectsInArraysException &&
209- isObjectType ( lastElement ) ) ||
210- ( lastElement &&
211- options . arraysInArraysException &&
212- isArrayType ( lastElement ) ) ||
213- ( options . singleElementException && node . elements . length === 1 )
214- ? ! options . spaced
215- : options . spaced ;
216214
217215 if ( isTokenOnSameLine ( first , second ) ) {
218- if (
219- openingBracketMustBeSpaced &&
220- ! sourceCode . isSpaceBetweenTokens ( first , second )
221- )
222- reportRequiredBeginningSpace ( node , first ) ;
223-
224- if (
225- ! openingBracketMustBeSpaced &&
226- sourceCode . isSpaceBetweenTokens ( first , second )
227- )
228- reportNoBeginningSpace ( node , first ) ;
216+ if ( options . isOpeningBracketMustBeSpaced ( node ) ) {
217+ if ( ! sourceCode . isSpaceBetween ( first , second ) )
218+ reportRequiredBeginningSpace ( node , first ) ;
219+ } else {
220+ if ( sourceCode . isSpaceBetween ( first , second ) )
221+ reportNoBeginningSpace ( node , first ) ;
222+ }
229223 }
230224
231225 if ( first !== penultimate && isTokenOnSameLine ( penultimate , last ) ) {
232- if (
233- closingBracketMustBeSpaced &&
234- ! sourceCode . isSpaceBetweenTokens ( penultimate , last )
235- )
236- reportRequiredEndingSpace ( node , last ) ;
237-
238- if (
239- ! closingBracketMustBeSpaced &&
240- sourceCode . isSpaceBetweenTokens ( penultimate , last )
241- )
242- reportNoEndingSpace ( node , last ) ;
226+ if ( options . isClosingBracketMustBeSpaced ( node ) ) {
227+ if ( ! sourceCode . isSpaceBetween ( penultimate , last ) )
228+ reportRequiredEndingSpace ( node , last ) ;
229+ } else {
230+ if ( sourceCode . isSpaceBetween ( penultimate , last ) )
231+ reportNoEndingSpace ( node , last ) ;
232+ }
243233 }
244234 }
245235
0 commit comments