@@ -30,10 +30,10 @@ export default (entries: ts.CompletionEntry[], _node: ts.Node | undefined, posit
30
30
if ( postfixRemoveLength === undefined ) return entries
31
31
const nodeBeforeDot = findChildContainingPosition ( ts , sourceFile , position - postfixRemoveLength - 1 )
32
32
if ( ! nodeBeforeDot ) return entries
33
- if ( ! ts . isIdentifier ( nodeBeforeDot ) ) return entries
34
- const cleanSourceText = nodeBeforeDot . text . replace ( / ^ (?: a l l ) ? ( .+ ?) (?: L i s t ) ? $ / , '$1' )
35
- let inferredName = singular ( cleanSourceText )
33
+ const cleanSourceText = getItemNameFromNode ( nodeBeforeDot ) ?. replace ( / ^ (?: a l l ) ? ( .+ ?) (?: L i s t ) ? $ / , '$1' )
34
+ let inferredName = cleanSourceText && singular ( cleanSourceText )
36
35
const defaultItemName = c ( 'arrayMethodsSnippets.defaultItemName' )
36
+ // both can be undefined
37
37
if ( inferredName === cleanSourceText ) {
38
38
if ( defaultItemName === false ) return entries
39
39
inferredName = defaultItemName
@@ -50,3 +50,15 @@ export default (entries: ts.CompletionEntry[], _node: ts.Node | undefined, posit
50
50
}
51
51
} )
52
52
}
53
+
54
+ const getItemNameFromNode = ( node : ts . Node ) => {
55
+ if ( ts . isIdentifier ( node ) ) return node . text
56
+ if ( ts . isCallExpression ( node ) && ts . isPropertyAccessExpression ( node . parent ) ) {
57
+ node = node . parent
58
+ while ( ts . isCallExpression ( node ) || ts . isPropertyAccessExpression ( node ) ) {
59
+ node = node . expression
60
+ if ( ts . isIdentifier ( node ) ) return node . text
61
+ }
62
+ }
63
+ return undefined
64
+ }
0 commit comments