@@ -39,11 +39,30 @@ export default (entries: ts.CompletionEntry[], position: number, sourceFile: ts.
3939 inferredName = defaultItemName
4040 }
4141
42+ // workaround for
43+ // https://github.com/microsoft/vscode/blob/4765b898acb38a44f9dd8fa7ed48e833fff6ecc6/extensions/typescript-language-features/src/languageFeatures/completions.ts#L99
44+ // (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
46+ const resetRangeKinds = fullText . slice ( position - 1 , position ) === '.' && [
47+ ts . ScriptElementKind . constElement ,
48+ ts . ScriptElementKind . memberFunctionElement ,
49+ ts . ScriptElementKind . memberVariableElement ,
50+ ]
51+
52+ const arrayItemSnippet = c ( 'arrayMethodsSnippets.addArgTabStop' ) ? `(\${2:${ inferredName } })` : inferredName
53+ let insertInnerSnippet = `${ arrayItemSnippet } => $3`
54+ if ( c ( 'arrayMethodsSnippets.addOuterTabStop' ) ) insertInnerSnippet = `\${1:${ insertInnerSnippet } }`
55+
4256 return entries . map ( entry => {
43- if ( ! arrayMethodsToPatch . includes ( entry . name . replace ( / ^ ★ / , '' ) ) ) return entry
44- const arrayItemSnippet = c ( 'arrayMethodsSnippets.addArgTabStop' ) ? `(\${2:${ inferredName } })` : inferredName
45- let insertInnerSnippet = `${ arrayItemSnippet } => $3`
46- if ( c ( 'arrayMethodsSnippets.addOuterTabStop' ) ) insertInnerSnippet = `\${1:${ insertInnerSnippet } }`
57+ if ( ! arrayMethodsToPatch . includes ( entry . name . replace ( / ^ ★ / , '' ) ) ) {
58+ if ( resetRangeKinds && resetRangeKinds . includes ( entry . kind ) && ! entry . replacementSpan ) {
59+ return {
60+ ...entry ,
61+ replacementSpan : { start : position , length : 0 } ,
62+ }
63+ }
64+ return entry
65+ }
4766 return {
4867 ...entry ,
4968 insertText : `${ entry . insertText ?? entry . name } (${ insertInnerSnippet } )` ,
0 commit comments