Skip to content

Commit 0f979d5

Browse files
committed
fix(method-snippets): now method snippets always insert single-line snippet
test: don't fail other tests when one is failing
1 parent 51f0340 commit 0f979d5

File tree

3 files changed

+82
-34
lines changed

3 files changed

+82
-34
lines changed

typescript/src/constructMethodSnippet.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,15 @@ export default (languageService: ts.LanguageService, sourceFile: ts.SourceFile,
4444
ts.factory.createParameterDeclaration(
4545
undefined,
4646
valueDeclaration.dotDotDotToken,
47-
!ts.isIdentifier(valueDeclaration.name) && insertMode !== 'always-declaration'
48-
? cloneBindingName(valueDeclaration.name)
49-
: valueDeclaration.name,
47+
insertMode === 'always-declaration' ? valueDeclaration.name : cloneBindingName(valueDeclaration.name),
5048
insertMode === 'always-declaration' ? valueDeclaration.questionToken : undefined,
5149
undefined,
52-
insertMode === 'always-declaration' ? valueDeclaration.initializer : undefined,
50+
insertMode === 'always-declaration' && valueDeclaration.initializer
51+
? ts.setEmitFlags(
52+
tsFull.factory.cloneNode(valueDeclaration.initializer as any),
53+
ts.EmitFlags.SingleLine | ts.EmitFlags.NoAsciiEscaping,
54+
)
55+
: undefined,
5356
),
5457
valueDeclaration.getSourceFile(),
5558
)
@@ -65,6 +68,7 @@ export default (languageService: ts.LanguageService, sourceFile: ts.SourceFile,
6568
// return `(${paramsToInsert.map((param, i) => `\${${i + 1}:${param.replaceAll}}`).join(', ')})`
6669

6770
function cloneBindingName(node: ts.BindingName): ts.BindingName {
71+
if (ts.isIdentifier(node)) return ts.factory.createIdentifier(node.text)
6872
return elideInitializerAndSetEmitFlags(node) as ts.BindingName
6973
function elideInitializerAndSetEmitFlags(node: ts.Node): ts.Node {
7074
let visited = ts.visitEachChild(

typescript/test/completions.spec.ts

Lines changed: 60 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { findChildContainingExactPosition } from '../src/utils'
55
import handleCommand from '../src/specialCommands/handle'
66
import _ from 'lodash'
77
import { defaultConfigFunc, entrypoint, settingsOverride, sharedLanguageService } from './shared'
8-
import { fileContentsSpecialPositions, fourslashLikeTester, getCompletionsAtPosition } from './testing'
8+
import { fileContentsSpecialPositions, fourslashLikeTester, getCompletionsAtPosition, overrideSettings } from './testing'
99
import constructMethodSnippet from '../src/constructMethodSnippet'
1010

1111
const { languageService, languageServiceHost, updateProject, getCurrentFile } = sharedLanguageService
@@ -150,33 +150,54 @@ describe('Method snippets', () => {
150150
} = {}, ...c): void
151151
}
152152
baz/*5*/
153+
154+
// should ignores comments
155+
declare const withComments = (
156+
a: boolean,
157+
// comment
158+
b: boolean,
159+
/* jsdoc */
160+
c: boolean
161+
) => void
162+
163+
withComments/*6*/
153164
`)
154165

155166
compareMethodSnippetAgainstMarker(markers, 1, null)
156167
compareMethodSnippetAgainstMarker(markers, 2, '()')
157168
compareMethodSnippetAgainstMarker(markers, 3, '(a)')
158169
compareMethodSnippetAgainstMarker(markers, 4, '($b)')
159170
compareMethodSnippetAgainstMarker(markers, 5, '(a, b, { d, e: {} }, ...c)')
171+
compareMethodSnippetAgainstMarker(markers, 6, '(a, b, c)')
160172
})
161173

162174
test('Insert text = always-declaration', () => {
163-
settingsOverride['methodSnippets.insertText'] = 'always-declaration'
175+
overrideSettings({
176+
'methodSnippets.insertText': 'always-declaration',
177+
})
164178
const [, _, markers] = fileContentsSpecialPositions(/* ts */ `
165179
declare const baz: {
166-
(a: string = "test", b?, {
167-
d = false,
168-
e: {}
169-
} = { }, ...c): void
180+
(
181+
a: string =
182+
"super" +
183+
"test",
184+
b?, {
185+
d = false,
186+
e: {}
187+
} = { },
188+
...c
189+
): void
170190
}
171191
baz/*1*/
172192
`)
173193

174-
compareMethodSnippetAgainstMarker(markers, 1, '(a = "test", b?, { d = false, e: {} } = {}, ...c)')
175-
settingsOverride['methodSnippets.insertText'] = 'binding-name'
194+
compareMethodSnippetAgainstMarker(markers, 1, '(a = "super" + "test", b?, { d = false, e: {} } = {}, ...c)')
176195
})
177196

178197
test('methodSnippets.skip', () => {
179-
settingsOverride['methodSnippets.skip'] = 'optional-and-rest'
198+
overrideSettings({
199+
'methodSnippets.skip': 'optional-and-rest',
200+
})
180201
const [, _, markers] = fileContentsSpecialPositions(/* ts */ `
181202
declare const baz: {
182203
(a: string = "test", b?, {
@@ -327,7 +348,9 @@ test('Switch Case Exclude Covered', () => {
327348
})
328349

329350
test('Case-sensetive completions', () => {
330-
settingsOverride.caseSensitiveCompletions = true
351+
overrideSettings({
352+
caseSensitiveCompletions: true,
353+
})
331354
const [_positivePositions, _negativePositions, numPositions] = fileContentsSpecialPositions(/* ts */ `
332355
const a = {
333356
TestItem: 5,
@@ -348,7 +371,9 @@ test('Case-sensetive completions', () => {
348371
})
349372

350373
test('Fix properties sorting', () => {
351-
settingsOverride.fixSuggestionsSorting = true
374+
overrideSettings({
375+
fixSuggestionsSorting: true,
376+
})
352377
const tester = fourslashLikeTester(/* tsx */ `
353378
let a: {
354379
d
@@ -386,6 +411,9 @@ test('Fix properties sorting', () => {
386411
// ts 5
387412
test.todo('Change to function kind', () => {
388413
settingsOverride['experiments.changeKindToFunction'] = true
414+
overrideSettings({
415+
'experiments.changeKindToFunction': true,
416+
})
389417
const tester = fourslashLikeTester(/* ts */ `
390418
// declare const foo: boolean
391419
const foo = () => {}
@@ -579,37 +607,40 @@ test('In Keyword Completions', () => {
579607
"insertText": "a",
580608
"isSnippet": true,
581609
"kind": "string",
610+
"labelDetails": {
611+
"description": "2, 3",
612+
},
582613
"name": "a",
583-
"sourceDisplay": [
584-
{
585-
"kind": "text",
586-
"text": "2, 3",
587-
},
588-
],
614+
"replacementSpan": {
615+
"length": 0,
616+
"start": 101,
617+
},
589618
},
590619
{
591620
"insertText": "b",
592621
"isSnippet": true,
593622
"kind": "string",
623+
"labelDetails": {
624+
"description": "2",
625+
},
594626
"name": "☆b",
595-
"sourceDisplay": [
596-
{
597-
"kind": "text",
598-
"text": "2",
599-
},
600-
],
627+
"replacementSpan": {
628+
"length": 0,
629+
"start": 101,
630+
},
601631
},
602632
{
603633
"insertText": "c",
604634
"isSnippet": true,
605635
"kind": "string",
636+
"labelDetails": {
637+
"description": "3",
638+
},
606639
"name": "☆c",
607-
"sourceDisplay": [
608-
{
609-
"kind": "text",
610-
"text": "3",
611-
},
612-
],
640+
"replacementSpan": {
641+
"length": 0,
642+
"start": 101,
643+
},
613644
},
614645
],
615646
"prevCompletionsMap": {

typescript/test/testing.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import _ from 'lodash'
22
import { getCompletionsAtPosition as getCompletionsAtPositionRaw } from '../src/completionsAtPosition'
3-
import { defaultConfigFunc, entrypoint, sharedLanguageService } from './shared'
3+
import { Configuration } from '../src/types'
4+
import { defaultConfigFunc, entrypoint, sharedLanguageService, settingsOverride } from './shared'
45

56
interface CompletionPartMatcher {
67
names?: string[]
@@ -48,6 +49,18 @@ export const getCompletionsAtPosition = (pos: number, { fileName = entrypoint, s
4849
}
4950
}
5051

52+
// shouldn't be used twice in the same test
53+
export const overrideSettings = (newOverrides: Partial<Configuration>) => {
54+
const oldOverrides = { ...settingsOverride, ...Object.fromEntries(Object.entries(newOverrides).map(([key]) => [key, undefined])) }
55+
Object.assign(settingsOverride, newOverrides)
56+
let cleaned = false
57+
afterEach(() => {
58+
if (cleaned) return
59+
cleaned = true
60+
Object.assign(settingsOverride, oldOverrides)
61+
})
62+
}
63+
5164
export const fourslashLikeTester = (contents: string, fileName = entrypoint) => {
5265
const [positive, _negative, numberedPositions] = fileContentsSpecialPositions(contents, fileName)
5366

0 commit comments

Comments
 (0)