Skip to content

Commit a3f755f

Browse files
committed
[skip ci] feat: improve inferring name of arrays:
`users.map(user => ).filter(user => )` also suggest `item` in more locations
1 parent 9e03573 commit a3f755f

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

typescript/src/completions/arrayMethods.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ export default (entries: ts.CompletionEntry[], _node: ts.Node | undefined, posit
3030
if (postfixRemoveLength === undefined) return entries
3131
const nodeBeforeDot = findChildContainingPosition(ts, sourceFile, position - postfixRemoveLength - 1)
3232
if (!nodeBeforeDot) return entries
33-
if (!ts.isIdentifier(nodeBeforeDot)) return entries
34-
const cleanSourceText = nodeBeforeDot.text.replace(/^(?:all)?(.+?)(?:List)?$/, '$1')
35-
let inferredName = singular(cleanSourceText)
33+
const cleanSourceText = getItemNameFromNode(nodeBeforeDot)?.replace(/^(?:all)?(.+?)(?:List)?$/, '$1')
34+
let inferredName = cleanSourceText && singular(cleanSourceText)
3635
const defaultItemName = c('arrayMethodsSnippets.defaultItemName')
36+
// both can be undefined
3737
if (inferredName === cleanSourceText) {
3838
if (defaultItemName === false) return entries
3939
inferredName = defaultItemName
@@ -50,3 +50,15 @@ export default (entries: ts.CompletionEntry[], _node: ts.Node | undefined, posit
5050
}
5151
})
5252
}
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

Comments
 (0)