11import { oneOf } from '@zardoy/utils'
2- import { groupBy , partition } from 'rambda'
2+ import { partition } from 'rambda'
3+ import { getAllPropertiesOfType } from './objectLiteralCompletions'
4+ import { sharedCompletionContext } from './sharedContext'
35
4- export default ( entries : ts . CompletionEntry [ ] , node : ts . Node | undefined , sourceFile : ts . SourceFile , program : ts . Program ) => {
6+ export default ( entries : ts . CompletionEntry [ ] ) => {
7+ const { node, program, c } = sharedCompletionContext
8+ if ( ! c ( 'fixSuggestionsSorting' ) ) return
59 if ( ! node ) return
610 // if (ts.isObjectLiteralExpression(node) && ts.isCallExpression(node.parent)) {
711 // const typeChecker = program.getTypeChecker()
@@ -10,6 +14,7 @@ export default (entries: ts.CompletionEntry[], node: ts.Node | undefined, source
1014 // }
1115 let rightNode : ts . Node | undefined
1216 const upperNode = ts . isIdentifier ( node ) ? node . parent : node
17+ if ( ts . isObjectLiteralExpression ( node ) ) rightNode = node
1318 if ( ts . isPropertyAccessExpression ( upperNode ) ) rightNode = upperNode . expression
1419 else if ( ts . isObjectBindingPattern ( node ) ) {
1520 if ( ts . isVariableDeclaration ( node . parent ) ) {
@@ -25,8 +30,8 @@ export default (entries: ts.CompletionEntry[], node: ts.Node | undefined, source
2530 }
2631 if ( ! rightNode ) return
2732 const typeChecker = program . getTypeChecker ( )
28- const type = typeChecker . getTypeAtLocation ( rightNode )
29- const sourceProps = type . getProperties ?. ( ) ?. map ( ( { name } ) => name )
33+ const type = typeChecker . getContextualType ( rightNode as ts . Expression ) ?? typeChecker . getTypeAtLocation ( rightNode )
34+ const sourceProps = getAllPropertiesOfType ( type , typeChecker ) ?. map ( ( { name } ) => name )
3035 // languageService.getSignatureHelpItems(fileName, position, {}))
3136 if ( ! sourceProps ) return
3237 // const entriesBySortText = groupBy(({ sortText }) => sortText, entries)
0 commit comments