@@ -7,7 +7,7 @@ import * as ac from "atom/autocomplete-plus"
7
7
import { expect } from "chai"
8
8
import { createSpyConnection , createFakeEditor } from "../helpers.js"
9
9
import { TextSuggestion , SnippetSuggestion } from "../../lib/types/autocomplete-extended"
10
- import { CompletionItem , MarkupContent , InsertTextFormat , TextEdit , Command } from "../../lib/languageclient"
10
+ import { CompletionItem } from "../../lib/languageclient"
11
11
12
12
function createRequest ( {
13
13
prefix = "" ,
@@ -27,32 +27,6 @@ function createRequest({
27
27
}
28
28
}
29
29
30
- // Required and optional properties as of LSP 3.14.0
31
- function createCompletionItem (
32
- label : string ,
33
- optional : {
34
- kind ?: number
35
- detail ?: string
36
- documentation ?: string | MarkupContent
37
- deprecated ?: boolean
38
- preselect ?: boolean
39
- sortText ?: string
40
- filterText ?: string
41
- insertText ?: string
42
- insertTextFormat ?: InsertTextFormat
43
- textEdit ?: TextEdit
44
- additionalTextEdits ?: TextEdit [ ]
45
- commitCharacters ?: string [ ]
46
- command ?: Command
47
- data ?: any
48
- } = { }
49
- ) : CompletionItem {
50
- return {
51
- label,
52
- ...optional ,
53
- } as CompletionItem
54
- }
55
-
56
30
describe ( "AutoCompleteAdapter" , ( ) => {
57
31
function createActiveServerSpy ( ) : ActiveServer {
58
32
return {
@@ -64,32 +38,36 @@ describe("AutoCompleteAdapter", () => {
64
38
}
65
39
}
66
40
67
- const completionItems = [
68
- createCompletionItem ( "thisHasFiltertext" , {
41
+ const completionItems : CompletionItem [ ] = [
42
+ {
43
+ label : "thisHasFiltertext" ,
69
44
kind : ls . CompletionItemKind . Keyword ,
70
45
detail : "description1" ,
71
46
documentation : "a very exciting keyword" ,
72
47
filterText : "labrador" ,
73
48
sortText : "z" ,
74
- } ) ,
75
- createCompletionItem ( "label2" , {
49
+ } ,
50
+ {
51
+ label : "label2" ,
76
52
kind : ls . CompletionItemKind . Field ,
77
53
detail : "description2" ,
78
54
documentation : "a very exciting field" ,
79
55
filterText : "rabbit" ,
80
56
sortText : "a" ,
81
- } ) ,
82
- createCompletionItem ( "label3" , {
57
+ } ,
58
+ {
59
+ label : "label3" ,
83
60
kind : ls . CompletionItemKind . Variable ,
84
61
detail : "description3" ,
85
62
documentation : "a very exciting variable" ,
86
- } ) ,
87
- createCompletionItem ( "filteredout" , {
63
+ } ,
64
+ {
65
+ label : "filteredout" ,
88
66
kind : ls . CompletionItemKind . Snippet ,
89
67
detail : "description4" ,
90
68
documentation : "should not appear" ,
91
69
sortText : "zzz" ,
92
- } ) ,
70
+ } ,
93
71
]
94
72
95
73
const request = createRequest ( { prefix : "lab" } )
@@ -124,10 +102,10 @@ describe("AutoCompleteAdapter", () => {
124
102
} )
125
103
126
104
it ( "uses the sortText property to arrange completions when there is no prefix" , async ( ) => {
127
- const sortedItems = [
128
- createCompletionItem ( "a" , { sortText : "c" } ) ,
129
- createCompletionItem ( "b" ) ,
130
- createCompletionItem ( "c" , { sortText : "a" } ) ,
105
+ const sortedItems : CompletionItem [ ] = [
106
+ { label : "a" , sortText : "c" } ,
107
+ { label : "b" } ,
108
+ { label : "c" , sortText : "a" } ,
131
109
]
132
110
const results = await getResults ( sortedItems , { prefix : "" } )
133
111
@@ -146,17 +124,15 @@ describe("AutoCompleteAdapter", () => {
146
124
} )
147
125
148
126
describe ( "completeSuggestion" , ( ) => {
149
- const partialItems = [
150
- createCompletionItem ( "label1" ) ,
151
- createCompletionItem ( "label2" ) ,
152
- createCompletionItem ( "label3" ) ,
153
- ]
127
+ const partialItems : CompletionItem [ ] = [ { label : "label1" } , { label : "label2" } , { label : "label3" } ]
154
128
155
129
const server : ActiveServer = createActiveServerSpy ( )
156
130
sinon . stub ( server . connection , "completion" ) . resolves ( partialItems )
157
- sinon
158
- . stub ( server . connection , "completionItemResolve" )
159
- . resolves ( createCompletionItem ( "label3" , { detail : "description3" , documentation : "a very exciting variable" } ) )
131
+ sinon . stub ( server . connection , "completionItemResolve" ) . resolves ( {
132
+ label : "label3" ,
133
+ detail : "description3" ,
134
+ documentation : "a very exciting variable" ,
135
+ } as CompletionItem )
160
136
161
137
it ( "resolves suggestions via LSP given an AutoCompleteRequest" , async ( ) => {
162
138
const autoCompleteAdapter = new AutoCompleteAdapter ( )
@@ -198,40 +174,42 @@ describe("AutoCompleteAdapter", () => {
198
174
} )
199
175
200
176
describe ( "conversion of LSP completion to autocomplete+ completion" , ( ) => {
201
- const items = [
202
- createCompletionItem ( "align" , {
177
+ const items : CompletionItem [ ] = [
178
+ {
179
+ label : "align" ,
203
180
sortText : "a" ,
204
181
kind : ls . CompletionItemKind . Snippet ,
205
182
textEdit : {
206
183
range : { start : { line : 0 , character : 4 } , end : { line : 0 , character : 10 } } ,
207
184
newText : "hello world" ,
208
185
} ,
209
- } ) ,
210
- createCompletionItem ( "list" , {
186
+ } ,
187
+ {
188
+ label : "list" ,
211
189
sortText : "b" ,
212
190
kind : ls . CompletionItemKind . Constant ,
213
191
textEdit : {
214
192
range : { start : { line : 0 , character : 8 } , end : { line : 0 , character : 13 } } ,
215
193
newText : "shifted" ,
216
194
} ,
217
- } ) ,
218
- createCompletionItem ( "minimal" , {
219
- sortText : "c" ,
220
- } ) ,
221
- createCompletionItem ( "old" , {
195
+ } ,
196
+ { label : "minimal" , sortText : "c" } ,
197
+ {
198
+ label : "old" ,
222
199
sortText : "d" ,
223
200
documentation : "doc string" ,
224
201
insertText : "inserted" ,
225
202
insertTextFormat : ls . InsertTextFormat . Snippet ,
226
- } ) ,
227
- createCompletionItem ( "documented" , {
203
+ } ,
204
+ {
205
+ label : "documented" ,
228
206
sortText : "e" ,
229
207
detail : "details" ,
230
208
documentation : {
231
209
kind : "markdown" ,
232
210
value : "documentation" ,
233
211
} ,
234
- } ) ,
212
+ } ,
235
213
]
236
214
237
215
let server : ActiveServer
@@ -275,7 +253,7 @@ describe("AutoCompleteAdapter", () => {
275
253
} )
276
254
277
255
it ( "respects onDidConvertCompletionItem" , async ( ) => {
278
- sinon . stub ( server . connection , "completion" ) . resolves ( [ createCompletionItem ( "label" ) ] )
256
+ sinon . stub ( server . connection , "completion" ) . resolves ( [ { label : "label" } ] as CompletionItem [ ] )
279
257
const results = await autoCompleteAdapter . getSuggestions ( server , createRequest ( { } ) , ( c , a , r ) => {
280
258
; ( a as ac . TextSuggestion ) . text = c . label + " ok"
281
259
a . displayText = r . scopeDescriptor . getScopesArray ( ) [ 0 ]
@@ -294,14 +272,15 @@ describe("AutoCompleteAdapter", () => {
294
272
295
273
it ( "converts LSP CompletionItem to AutoComplete Suggestion without textEdit" , async ( ) => {
296
274
sinon . stub ( server . connection , "completion" ) . resolves ( [
297
- createCompletionItem ( "label" , {
275
+ {
276
+ label : "label" ,
298
277
insertText : "insert" ,
299
278
filterText : "filter" ,
300
279
kind : ls . CompletionItemKind . Keyword ,
301
280
detail : "keyword" ,
302
281
documentation : "a truly useful keyword" ,
303
- } ) ,
304
- ] )
282
+ } ,
283
+ ] as CompletionItem [ ] )
305
284
const result = ( await autoCompleteAdapter . getSuggestions ( server , createRequest ( { } ) ) ) [ 0 ]
306
285
expect ( ( result as TextSuggestion ) . text ) . equals ( "insert" )
307
286
expect ( result . displayText ) . equals ( "label" )
@@ -319,7 +298,8 @@ describe("AutoCompleteAdapter", () => {
319
298
} )
320
299
customRequest . editor . setText ( "foo #label bar" )
321
300
sinon . stub ( server . connection , "completion" ) . resolves ( [
322
- createCompletionItem ( "label" , {
301
+ {
302
+ label : "label" ,
323
303
insertText : "insert" ,
324
304
filterText : "filter" ,
325
305
kind : ls . CompletionItemKind . Variable ,
@@ -329,8 +309,8 @@ describe("AutoCompleteAdapter", () => {
329
309
range : { start : { line : 0 , character : 4 } , end : { line : 0 , character : 10 } } ,
330
310
newText : "newText" ,
331
311
} ,
332
- } ) ,
333
- ] )
312
+ } ,
313
+ ] as CompletionItem [ ] )
334
314
335
315
const result = ( await autoCompleteAdapter . getSuggestions ( server , customRequest ) ) [ 0 ]
336
316
expect ( result . displayText ) . equals ( "label" )
@@ -344,17 +324,16 @@ describe("AutoCompleteAdapter", () => {
344
324
345
325
it ( "converts LSP CompletionItem with insertText and filterText to AutoComplete Suggestion" , async ( ) => {
346
326
sinon . stub ( server . connection , "completion" ) . resolves ( [
347
- createCompletionItem ( "label" , {
327
+ {
328
+ label : "label" ,
348
329
insertText : "insert" ,
349
330
filterText : "filter" ,
350
331
kind : ls . CompletionItemKind . Keyword ,
351
332
detail : "detail" ,
352
333
documentation : "a very exciting keyword" ,
353
- } ) ,
354
- createCompletionItem ( "filteredOut" , {
355
- filterText : "nop" ,
356
- } ) ,
357
- ] )
334
+ } ,
335
+ { label : "filteredOut" , filterText : "nop" } ,
336
+ ] as CompletionItem [ ] )
358
337
359
338
const results = await autoCompleteAdapter . getSuggestions ( server , createRequest ( { prefix : "fil" } ) )
360
339
expect ( results . length ) . equals ( 1 )
@@ -369,11 +348,7 @@ describe("AutoCompleteAdapter", () => {
369
348
} )
370
349
371
350
it ( "converts LSP CompletionItem with missing documentation to AutoComplete Suggestion" , async ( ) => {
372
- sinon . stub ( server . connection , "completion" ) . resolves ( [
373
- createCompletionItem ( "label" , {
374
- detail : "detail" ,
375
- } ) ,
376
- ] )
351
+ sinon . stub ( server . connection , "completion" ) . resolves ( [ { label : "label" , detail : "detail" } ] as CompletionItem [ ] )
377
352
378
353
const result = ( await autoCompleteAdapter . getSuggestions ( server , createRequest ( { } ) ) ) [ 0 ]
379
354
expect ( result . rightLabel ) . equals ( "detail" )
@@ -382,12 +357,11 @@ describe("AutoCompleteAdapter", () => {
382
357
} )
383
358
384
359
it ( "converts LSP CompletionItem with markdown documentation to AutoComplete Suggestion" , async ( ) => {
385
- sinon . stub ( server . connection , "completion" ) . resolves ( [
386
- createCompletionItem ( "label" , {
387
- detail : "detail" ,
388
- documentation : { value : "Some *markdown*" , kind : "markdown" } ,
389
- } ) ,
390
- ] )
360
+ sinon
361
+ . stub ( server . connection , "completion" )
362
+ . resolves ( [
363
+ { label : "label" , detail : "detail" , documentation : { value : "Some *markdown*" , kind : "markdown" } } ,
364
+ ] as CompletionItem [ ] )
391
365
392
366
const result = ( await autoCompleteAdapter . getSuggestions ( server , createRequest ( { } ) ) ) [ 0 ]
393
367
expect ( result . rightLabel ) . equals ( "detail" )
@@ -396,12 +370,11 @@ describe("AutoCompleteAdapter", () => {
396
370
} )
397
371
398
372
it ( "converts LSP CompletionItem with plaintext documentation to AutoComplete Suggestion" , async ( ) => {
399
- sinon . stub ( server . connection , "completion" ) . resolves ( [
400
- createCompletionItem ( "label" , {
401
- detail : "detail" ,
402
- documentation : { value : "Some plain text" , kind : "plaintext" } ,
403
- } ) ,
404
- ] )
373
+ sinon
374
+ . stub ( server . connection , "completion" )
375
+ . resolves ( [
376
+ { label : "label" , detail : "detail" , documentation : { value : "Some plain text" , kind : "plaintext" } } ,
377
+ ] as CompletionItem [ ] )
405
378
406
379
const result = ( await autoCompleteAdapter . getSuggestions ( server , createRequest ( { } ) ) ) [ 0 ]
407
380
expect ( result . rightLabel ) . equals ( "detail" )
@@ -411,12 +384,13 @@ describe("AutoCompleteAdapter", () => {
411
384
412
385
it ( "converts LSP CompletionItem without insertText or filterText to AutoComplete Suggestion" , async ( ) => {
413
386
sinon . stub ( server . connection , "completion" ) . resolves ( [
414
- createCompletionItem ( "label" , {
387
+ {
388
+ label : "label" ,
415
389
kind : ls . CompletionItemKind . Keyword ,
416
390
detail : "detail" ,
417
391
documentation : "A very useful keyword" ,
418
- } ) ,
419
- ] )
392
+ } ,
393
+ ] as CompletionItem [ ] )
420
394
421
395
const result = ( await autoCompleteAdapter . getSuggestions ( server , createRequest ( { } ) ) ) [ 0 ]
422
396
expect ( ( result as TextSuggestion ) . text ) . equals ( "label" )
@@ -428,7 +402,7 @@ describe("AutoCompleteAdapter", () => {
428
402
} )
429
403
430
404
it ( "does not do anything if there is no textEdit" , async ( ) => {
431
- sinon . stub ( server . connection , "completion" ) . resolves ( [ createCompletionItem ( "" , { filterText : "rep" } ) ] )
405
+ sinon . stub ( server . connection , "completion" ) . resolves ( [ { label : "" , filterText : "rep" } ] as CompletionItem [ ] )
432
406
433
407
const result = ( await autoCompleteAdapter . getSuggestions ( server , createRequest ( { prefix : "rep" } ) ) ) [ 0 ]
434
408
expect ( ( result as TextSuggestion ) . text ) . equals ( "" )
@@ -440,14 +414,15 @@ describe("AutoCompleteAdapter", () => {
440
414
const customRequest = createRequest ( { prefix : "" , position : new Point ( 0 , 10 ) } )
441
415
customRequest . editor . setText ( "foo #align bar" )
442
416
sinon . stub ( server . connection , "completion" ) . resolves ( [
443
- createCompletionItem ( "align" , {
417
+ {
418
+ label : "align" ,
444
419
sortText : "a" ,
445
420
textEdit : {
446
421
range : { start : { line : 0 , character : 4 } , end : { line : 0 , character : 10 } } ,
447
422
newText : "hello world" ,
448
423
} ,
449
- } ) ,
450
- ] )
424
+ } ,
425
+ ] as CompletionItem [ ] )
451
426
const results = await autoCompleteAdapter . getSuggestions ( server , customRequest )
452
427
453
428
expect ( results [ 0 ] . displayText ) . equals ( "align" )
@@ -459,14 +434,15 @@ describe("AutoCompleteAdapter", () => {
459
434
const customRequest = createRequest ( { prefix : "" , position : new Point ( 0 , 8 ) } )
460
435
customRequest . editor . setText ( "foo #ali bar" )
461
436
sinon . stub ( server . connection , "completion" ) . resolves ( [
462
- createCompletionItem ( "align" , {
437
+ {
438
+ label : "align" ,
463
439
sortText : "a" ,
464
440
textEdit : {
465
441
range : { start : { line : 0 , character : 4 } , end : { line : 0 , character : 8 } } ,
466
442
newText : "hello world" ,
467
443
} ,
468
- } ) ,
469
- ] )
444
+ } ,
445
+ ] as CompletionItem [ ] )
470
446
471
447
let result = ( await autoCompleteAdapter . getSuggestions ( server , customRequest ) ) [ 0 ]
472
448
expect ( result . replacementPrefix ) . equals ( "#ali" )
@@ -509,7 +485,7 @@ describe("AutoCompleteAdapter", () => {
509
485
const customRequest = createRequest ( { prefix : "." , position : new Point ( 0 , 4 ) } )
510
486
customRequest . editor . setText ( "foo." )
511
487
server . capabilities . completionProvider ! . triggerCharacters = [ "." ]
512
- sinon . stub ( server . connection , "completion" ) . resolves ( [ createCompletionItem ( "bar" ) ] )
488
+ sinon . stub ( server . connection , "completion" ) . resolves ( [ { label : "bar" } ] as CompletionItem [ ] )
513
489
let result = ( await autoCompleteAdapter . getSuggestions ( server , customRequest ) ) [ 0 ]
514
490
expect ( result . replacementPrefix ) . equals ( "" )
515
491
customRequest . editor . setTextInBufferRange (
@@ -539,7 +515,7 @@ describe("AutoCompleteAdapter", () => {
539
515
it ( "includes non trigger character prefix in replacementPrefix" , async ( ) => {
540
516
const customRequest = createRequest ( { prefix : "foo" , position : new Point ( 0 , 3 ) } )
541
517
customRequest . editor . setText ( "foo" )
542
- sinon . stub ( server . connection , "completion" ) . resolves ( [ createCompletionItem ( "foobar" ) ] )
518
+ sinon . stub ( server . connection , "completion" ) . resolves ( [ { label : "foobar" } ] as CompletionItem [ ] )
543
519
let result = ( await autoCompleteAdapter . getSuggestions ( server , customRequest ) ) [ 0 ]
544
520
545
521
expect ( result . replacementPrefix ) . equals ( "foo" )
0 commit comments