@@ -1893,15 +1893,7 @@ namespace ts.Completions {
18931893 let existingName : __String | undefined ;
18941894
18951895 if ( isSpreadAssignment ( m ) ) {
1896- const expression = m . expression ;
1897- const symbol = typeChecker . getSymbolAtLocation ( expression ) ;
1898- const type = symbol && typeChecker . getTypeOfSymbolAtLocation ( symbol , expression ) ;
1899- const properties = type && ( < ObjectType > type ) . properties ;
1900- if ( properties ) {
1901- properties . forEach ( property => {
1902- membersDeclaredBySpreadAssignment . set ( property . name , true ) ;
1903- } ) ;
1904- }
1896+ setMembersDeclaredBySpreadAssignment ( m , membersDeclaredBySpreadAssignment ) ;
19051897 }
19061898 else if ( isBindingElement ( m ) && m . propertyName ) {
19071899 // include only identifiers in completion list
@@ -1926,6 +1918,18 @@ namespace ts.Completions {
19261918 return filteredSymbols ;
19271919 }
19281920
1921+ function setMembersDeclaredBySpreadAssignment ( declaration : SpreadAssignment | JsxSpreadAttribute , membersDeclaredBySpreadAssignment : Map < boolean > ) {
1922+ const expression = declaration . expression ;
1923+ const symbol = typeChecker . getSymbolAtLocation ( expression ) ;
1924+ const type = symbol && typeChecker . getTypeOfSymbolAtLocation ( symbol , expression ) ;
1925+ const properties = type && ( < ObjectType > type ) . properties ;
1926+ if ( properties ) {
1927+ properties . forEach ( property => {
1928+ membersDeclaredBySpreadAssignment . set ( property . name , true ) ;
1929+ } ) ;
1930+ }
1931+ }
1932+
19291933 // Set SortText to OptionalMember if it is an optinoal member
19301934 function setSortTextToOptionalMember ( ) {
19311935 symbols . forEach ( m => {
@@ -2009,15 +2013,7 @@ namespace ts.Completions {
20092013 seenNames . set ( attr . name . escapedText , true ) ;
20102014 }
20112015 else if ( isJsxSpreadAttribute ( attr ) ) {
2012- const expression = attr . expression ;
2013- const symbol = typeChecker . getSymbolAtLocation ( expression ) ;
2014- const type = symbol && typeChecker . getTypeOfSymbolAtLocation ( symbol , expression ) ;
2015- const properties = type && ( < ObjectType > type ) . properties ;
2016- if ( properties ) {
2017- properties . forEach ( property => {
2018- membersDeclaredBySpreadAssignment . set ( property . name , true ) ;
2019- } ) ;
2020- }
2016+ setMembersDeclaredBySpreadAssignment ( attr , membersDeclaredBySpreadAssignment ) ;
20212017 }
20222018 }
20232019 const filteredSymbols = symbols . filter ( a => ! seenNames . get ( a . escapedName ) ) ;
0 commit comments