@@ -39,11 +39,30 @@ export default (entries: ts.CompletionEntry[], position: number, sourceFile: ts.
39
39
inferredName = defaultItemName
40
40
}
41
41
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
+
42
56
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
+ }
47
66
return {
48
67
...entry ,
49
68
insertText : `${ entry . insertText ?? entry . name } (${ insertInnerSnippet } )` ,
0 commit comments