Skip to content

Commit 35de441

Browse files
committed
fix: don't skip this when insert text for method completions is enabled
fixes #148 test: add first tests for insert text mode!
1 parent d6d1ff4 commit 35de441

File tree

7 files changed

+37
-8
lines changed

7 files changed

+37
-8
lines changed

typescript/src/completions/functionCompletions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export default (entries: ts.CompletionEntry[]) => {
4444
if (!methodSnippet || resolveData.isAmbiguous) return
4545
return {
4646
...entry,
47-
insertText: insertTextAfterEntry(entry, `(${methodSnippet.map((x, i) => `$\{${i + 1}:${x}}`).join(', ')})`),
47+
insertText: insertTextAfterEntry(entry.insertText ?? entry.name, `(${methodSnippet.map((x, i) => `$\{${i + 1}:${x}}`).join(', ')})`),
4848
labelDetails: {
4949
detail: `(${methodSnippet.join(', ')})`,
5050
description: ts.displayPartsToString(entry.sourceDisplay),

typescript/src/completions/objectLiteralCompletions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export default (prior: ts.CompletionInfo): ts.CompletionEntry[] | void => {
6666
const insertSnippetVariant = completingStyleMap.find(([, detector]) => detector(type!, typeChecker))?.[0] ?? fallbackSnippet
6767
if (!insertSnippetVariant) continue
6868
const [insertSnippetText, insertSnippetPreview] = typeof insertSnippetVariant === 'function' ? insertSnippetVariant() : insertSnippetVariant
69-
let insertText = insertTextAfterEntry(entry, insertSnippetText)
69+
let insertText = insertTextAfterEntry(entry.name, insertSnippetText)
7070
if (node.getSourceFile().getFullText()[position] === ',') insertText = insertText.slice(0, -1)
7171
const index = entries.indexOf(entry)
7272
entries.splice(index + (keepOriginal === 'before' ? 1 : 0), keepOriginal === 'remove' ? 1 : 0, {

typescript/src/completionsAtPosition.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import _ from 'lodash'
22
import { compact } from '@zardoy/utils'
33
import escapeStringRegexp from 'escape-string-regexp'
44
import inKeywordCompletions from './completions/inKeywordCompletions'
5-
// import * as emmet from '@vscode/emmet-helper'
65
import isInBannedPosition from './completions/isInBannedPosition'
76
import { GetConfig } from './types'
87
import { findChildContainingExactPosition, findChildContainingPosition, isTs5, patchMethod } from './utils'

typescript/src/utils.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,7 @@ export const patchMethod = <T, K extends keyof T>(obj: T, method: K, overriden:
295295
}
296296
}
297297

298-
export const insertTextAfterEntry = (entryOrName: ts.CompletionEntry | string, appendText: string) =>
299-
(typeof entryOrName === 'string' ? entryOrName : entryOrName.name).replace(/\$/g, '\\$') + appendText
298+
export const insertTextAfterEntry = (entryOrName: string, appendText: string) => entryOrName.replace(/\$/g, '\\$') + appendText
300299

301300
export const matchParents: MatchParentsType = (node, treeToCompare) => {
302301
let first = true

typescript/test/completions.spec.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { isGoodPositionMethodCompletion } from '../src/completions/isGoodPositio
55
import { findChildContainingExactPosition, isTs5 } from '../src/utils'
66
import handleCommand from '../src/specialCommands/handle'
77
import constructMethodSnippet from '../src/constructMethodSnippet'
8-
import { defaultConfigFunc, entrypoint, settingsOverride, sharedLanguageService } from './shared'
8+
import { currentTestingContext, defaultConfigFunc, entrypoint, settingsOverride, sharedLanguageService } from './shared'
99
import { fileContentsSpecialPositions, fourslashLikeTester, getCompletionsAtPosition, overrideSettings } from './testing'
1010

1111
const { languageService, languageServiceHost, updateProject, getCurrentFile } = sharedLanguageService
@@ -124,6 +124,12 @@ const compareMethodSnippetAgainstMarker = (inputMarkers: number[], marker: numbe
124124
expect(Array.isArray(expected) ? methodSnippet : snippetToInsert, `At marker ${marker}`).toEqual(expected)
125125
}
126126

127+
const assertCompletionInsertText = (marker: number, entryName: string | undefined, insertTextExpected: string) => {
128+
const { entries } = getCompletionsAtPosition(currentTestingContext.markers[marker]!)!
129+
const entry = entryName === undefined ? entries[0] : entries.find(({ name }) => name === entryName)
130+
expect(entry?.insertText).toEqual(insertTextExpected)
131+
}
132+
127133
describe('Method snippets', () => {
128134
test('Misc', () => {
129135
const [, _, markers] = fileContentsSpecialPositions(/* ts */ `
@@ -286,6 +292,24 @@ describe('Method snippets', () => {
286292
compareMethodSnippetAgainstMarker(markers, 1, 'ambiguous')
287293
compareMethodSnippetAgainstMarker(markers, 2, 'ambiguous')
288294
})
295+
296+
test('methodSnippetsInsertText all', () => {
297+
overrideSettings({
298+
methodSnippetsInsertText: 'all',
299+
})
300+
fileContentsSpecialPositions(/* ts */ `
301+
const a = (a, b) => {}
302+
a/*1*/
303+
304+
class A {
305+
test() {
306+
test/*2*/
307+
}
308+
}
309+
`)
310+
assertCompletionInsertText(1, 'a', 'a(${1:a}, ${2:b})')
311+
assertCompletionInsertText(2, 'test', 'this.test()')
312+
})
289313
})
290314

291315
test('Emmet completion', () => {

typescript/test/shared.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ export const settingsOverride: Partial<Configuration> = {
1919
tupleHelpSignature: true,
2020
}
2121
export const defaultConfigFunc = await getDefaultConfigFunc(settingsOverride)
22+
23+
export const currentTestingContext = {
24+
markers: [] as number[],
25+
}

typescript/test/testing.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import _ from 'lodash'
22
import { getCompletionsAtPosition as getCompletionsAtPositionRaw } from '../src/completionsAtPosition'
33
import { Configuration } from '../src/types'
4-
import { defaultConfigFunc, entrypoint, sharedLanguageService, settingsOverride } from './shared'
4+
import { defaultConfigFunc, entrypoint, sharedLanguageService, settingsOverride, currentTestingContext } from './shared'
55

66
interface CompletionPartMatcher {
77
names?: string[]
@@ -29,7 +29,9 @@ export const getCompletionsAtPosition = (pos: number, { fileName = entrypoint, s
2929
const result = getCompletionsAtPositionRaw(
3030
fileName,
3131
pos,
32-
{},
32+
{
33+
includeCompletionsWithInsertText: true,
34+
},
3335
defaultConfigFunc,
3436
languageService,
3537
languageServiceHost.getScriptSnapshot(entrypoint)!,
@@ -163,5 +165,6 @@ export const fileContentsSpecialPositions = (contents: string, fileName = entryp
163165
if (process.env.CI) throw new Error('Only positions not allowed on CI')
164166
return cursorPositionsOnly
165167
}
168+
currentTestingContext.markers = cursorPositions[2]
166169
return cursorPositions
167170
}

0 commit comments

Comments
 (0)