@@ -227,6 +227,31 @@ namespace ts.OutliningElementsCollector {
227
227
return spanForTemplateLiteral ( < TemplateExpression | NoSubstitutionTemplateLiteral > n ) ;
228
228
case SyntaxKind . ArrayBindingPattern :
229
229
return spanForNode ( n , /*autoCollapse*/ false , /*useFullStart*/ ! isBindingElement ( n . parent ) , SyntaxKind . OpenBracketToken ) ;
230
+ case SyntaxKind . ArrowFunction :
231
+ return spanForArrowFunction ( < ArrowFunction > n ) ;
232
+ case SyntaxKind . CallExpression :
233
+ return spanForCallExpression ( < CallExpression > n ) ;
234
+ }
235
+
236
+ function spanForCallExpression ( node : CallExpression ) : OutliningSpan | undefined {
237
+ if ( ! node . arguments . length ) {
238
+ return undefined ;
239
+ }
240
+ const openToken = findChildOfKind ( node , SyntaxKind . OpenParenToken , sourceFile ) ;
241
+ const closeToken = findChildOfKind ( node , SyntaxKind . CloseParenToken , sourceFile ) ;
242
+ if ( ! openToken || ! closeToken || positionsAreOnSameLine ( openToken . pos , closeToken . pos , sourceFile ) ) {
243
+ return undefined ;
244
+ }
245
+
246
+ return spanBetweenTokens ( openToken , closeToken , node , sourceFile , /*autoCollapse*/ false , /*useFullStart*/ true ) ;
247
+ }
248
+
249
+ function spanForArrowFunction ( node : ArrowFunction ) : OutliningSpan | undefined {
250
+ if ( isBlock ( node . body ) || positionsAreOnSameLine ( node . body . getFullStart ( ) , node . body . getEnd ( ) , sourceFile ) ) {
251
+ return undefined ;
252
+ }
253
+ const textSpan = createTextSpanFromBounds ( node . body . getFullStart ( ) , node . body . getEnd ( ) ) ;
254
+ return createOutliningSpan ( textSpan , OutliningSpanKind . Code , createTextSpanFromNode ( node ) ) ;
230
255
}
231
256
232
257
function spanForJSXElement ( node : JsxElement ) : OutliningSpan | undefined {
0 commit comments