1
1
import { 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'
3
5
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
5
9
if ( ! node ) return
6
10
// if (ts.isObjectLiteralExpression(node) && ts.isCallExpression(node.parent)) {
7
11
// const typeChecker = program.getTypeChecker()
@@ -10,6 +14,7 @@ export default (entries: ts.CompletionEntry[], node: ts.Node | undefined, source
10
14
// }
11
15
let rightNode : ts . Node | undefined
12
16
const upperNode = ts . isIdentifier ( node ) ? node . parent : node
17
+ if ( ts . isObjectLiteralExpression ( node ) ) rightNode = node
13
18
if ( ts . isPropertyAccessExpression ( upperNode ) ) rightNode = upperNode . expression
14
19
else if ( ts . isObjectBindingPattern ( node ) ) {
15
20
if ( ts . isVariableDeclaration ( node . parent ) ) {
@@ -25,8 +30,8 @@ export default (entries: ts.CompletionEntry[], node: ts.Node | undefined, source
25
30
}
26
31
if ( ! rightNode ) return
27
32
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 )
30
35
// languageService.getSignatureHelpItems(fileName, position, {}))
31
36
if ( ! sourceProps ) return
32
37
// const entriesBySortText = groupBy(({ sortText }) => sortText, entries)
0 commit comments