Skip to content

Commit 6fa2be5

Browse files
committed
fix(array-methods): make sure array methods work in all cases e.g. with [], always lowercase first
feat(array-methods): Add a way (setting) to insert first letter only as inferred item name
1 parent 7c6c447 commit 6fa2be5

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

typescript/src/completions/arrayMethods.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import pluralize from 'pluralize'
2+
import { lowerCaseFirst } from '@zardoy/utils'
23
import { GetConfig } from '../types'
34
import { findChildContainingPosition, getLineTextBeforePos } from '../utils'
45

@@ -29,20 +30,30 @@ export default (entries: ts.CompletionEntry[], position: number, sourceFile: ts.
2930
const nodeBeforeDot = findChildContainingPosition(ts, sourceFile, position - postfixRemoveLength - 1)
3031
if (!nodeBeforeDot) return
3132

32-
const cleanSourceText = getItemNameFromNode(nodeBeforeDot)?.replace(/^(?:all)?(.+?)(?:List)?$/, '$1')
33+
let inferred = true
34+
const defaultItemName = {
35+
get value() {
36+
inferred = false
37+
return c('arrayMethodsSnippets.defaultItemName')
38+
},
39+
}
40+
const cleanSourceText = lowerCaseFirst(getItemNameFromNode(nodeBeforeDot)?.replace(/^(?:all)?(.+?)(?:List)?$/, '$1') ?? '') || defaultItemName.value
3341
if (!cleanSourceText) return
3442
let inferredName = pluralize.singular(cleanSourceText)
35-
const defaultItemName = c('arrayMethodsSnippets.defaultItemName')
3643
// both can be undefined
3744
if (inferredName === cleanSourceText) {
38-
if (defaultItemName === false) return
39-
inferredName = defaultItemName
45+
if (defaultItemName.value === false) return
46+
inferredName = defaultItemName.value
47+
}
48+
49+
if (inferredName && c('arrayMethodsSnippets.inferredFirstLetterOnly')) {
50+
inferredName = inferredName[0]!
4051
}
4152

4253
// workaround for
4354
// https://github.com/microsoft/vscode/blob/4765b898acb38a44f9dd8fa7ed48e833fff6ecc6/extensions/typescript-language-features/src/languageFeatures/completions.ts#L99
4455
// (overriding default range)
45-
// after []. .fill was appearing above .filter becuase .filter is snippet in insertText, not changing insertText of .fill so vscode method completions calls work as expected
56+
// after []. .fill was appearing above .filter because .filter is snippet in insertText, not changing insertText of .fill so vscode method completions calls work as expected
4657
const resetRangeKinds = fullText.slice(position - 1, position) === '.' && [
4758
ts.ScriptElementKind.constElement,
4859
ts.ScriptElementKind.memberFunctionElement,

0 commit comments

Comments
 (0)