@@ -16,17 +16,16 @@ import {
16
16
TextEdit ,
17
17
} from '../languageclient' ;
18
18
import {
19
- AutocompleteSuggestion ,
20
- AutocompleteRequest ,
21
19
Point ,
22
20
TextEditor ,
23
21
} from 'atom' ;
22
+ import * as ac from 'atom/autocomplete-plus' ;
24
23
25
24
interface SuggestionCacheEntry {
26
25
isIncomplete : boolean ;
27
26
triggerPoint : Point ;
28
27
triggerChar : string ;
29
- suggestionMap : Map < AutocompleteSuggestion , [ CompletionItem , boolean ] > ;
28
+ suggestionMap : Map < ac . AnySuggestion , [ CompletionItem , boolean ] > ;
30
29
}
31
30
32
31
// Public: Adapts the language server protocol "textDocument/completion" to the Atom
@@ -56,11 +55,11 @@ export default class AutocompleteAdapter {
56
55
// AutoComplete+ suggestions to display.
57
56
public async getSuggestions (
58
57
server : ActiveServer ,
59
- request : AutocompleteRequest ,
60
- onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : AutocompleteSuggestion ,
61
- request : AutocompleteRequest ) => void ,
58
+ request : ac . SuggestionsRequestedEvent ,
59
+ onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : ac . AnySuggestion ,
60
+ request : ac . SuggestionsRequestedEvent ) => void ,
62
61
minimumWordLength ?: number ,
63
- ) : Promise < AutocompleteSuggestion [ ] > {
62
+ ) : Promise < ac . AnySuggestion [ ] > {
64
63
const triggerChars =
65
64
server . capabilities . completionProvider != null ?
66
65
server . capabilities . completionProvider . triggerCharacters || [ ] : [ ] ;
@@ -119,11 +118,11 @@ export default class AutocompleteAdapter {
119
118
// Returns a {Promise} of an {atom$AutocompleteSuggestion} with the resolved AutoComplete+ suggestion.
120
119
public async completeSuggestion (
121
120
server : ActiveServer ,
122
- suggestion : AutocompleteSuggestion ,
123
- request : AutocompleteRequest ,
124
- onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : AutocompleteSuggestion ,
125
- request : AutocompleteRequest ) => void ,
126
- ) : Promise < AutocompleteSuggestion > {
121
+ suggestion : ac . AnySuggestion ,
122
+ request : ac . SuggestionsRequestedEvent ,
123
+ onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : ac . AnySuggestion ,
124
+ request : ac . SuggestionsRequestedEvent ) => void ,
125
+ ) : Promise < ac . AnySuggestion > {
127
126
const cache = this . _suggestionCache . get ( server ) ;
128
127
if ( cache ) {
129
128
const originalCompletionItem = cache . suggestionMap . get ( suggestion ) ;
@@ -144,7 +143,7 @@ export default class AutocompleteAdapter {
144
143
//
145
144
// * `suggestions` An {Array} of {atom$AutocompleteSuggestion}s to set the replacementPrefix on.
146
145
// * `prefix` The {string} containing the prefix that should be set as replacementPrefix on all suggestions.
147
- public static setReplacementPrefixOnSuggestions ( suggestions : AutocompleteSuggestion [ ] , prefix : string ) : void {
146
+ public static setReplacementPrefixOnSuggestions ( suggestions : ac . AnySuggestion [ ] , prefix : string ) : void {
148
147
for ( const suggestion of suggestions ) {
149
148
suggestion . replacementPrefix = prefix ;
150
149
}
@@ -158,7 +157,7 @@ export default class AutocompleteAdapter {
158
157
// * `triggerChars` The {Array} of {string}s that can be trigger characters.
159
158
//
160
159
// Returns a {string} containing the matching trigger character or an empty string if one was not matched.
161
- public static getTriggerCharacter ( request : AutocompleteRequest , triggerChars : string [ ] ) : string {
160
+ public static getTriggerCharacter ( request : ac . SuggestionsRequestedEvent , triggerChars : string [ ] ) : string {
162
161
// AutoComplete-Plus considers text after a symbol to be a new trigger. So we should look backward
163
162
// from the current cursor position to see if one is there and thus simulate it.
164
163
const buffer = request . editor . getBuffer ( ) ;
@@ -188,7 +187,7 @@ export default class AutocompleteAdapter {
188
187
// * `triggerPoint` The {atom$Point} where the trigger started.
189
188
//
190
189
// Returns a {string} containing the prefix including the trigger character.
191
- public static getPrefixWithTrigger ( request : AutocompleteRequest , triggerPoint : Point ) : string {
190
+ public static getPrefixWithTrigger ( request : ac . SuggestionsRequestedEvent , triggerPoint : Point ) : string {
192
191
return request . editor
193
192
. getBuffer ( )
194
193
. getTextInRange ( [ [ triggerPoint . row , triggerPoint . column ] , request . bufferPosition ] ) ;
@@ -205,7 +204,7 @@ export default class AutocompleteAdapter {
205
204
// * `position` the position within the text document to display completion request for.
206
205
// * `context` containing the trigger character and kind.
207
206
public static createCompletionParams (
208
- request : AutocompleteRequest , triggerCharacter : string ) : CompletionParams {
207
+ request : ac . SuggestionsRequestedEvent , triggerCharacter : string ) : CompletionParams {
209
208
return {
210
209
textDocument : Convert . editorToTextDocumentIdentifier ( request . editor ) ,
211
210
position : Convert . pointToPosition ( request . bufferPosition ) ,
@@ -238,15 +237,16 @@ export default class AutocompleteAdapter {
238
237
// Returns a {Map} of AutoComplete+ suggestions ordered by the CompletionItems sortText.
239
238
public completionItemsToSuggestions (
240
239
completionItems : CompletionItem [ ] | CompletionList ,
241
- request : AutocompleteRequest ,
242
- onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : AutocompleteSuggestion ,
243
- request : AutocompleteRequest ) => void ,
244
- ) : Map < AutocompleteSuggestion , [ CompletionItem , boolean ] > {
240
+ request : ac . SuggestionsRequestedEvent ,
241
+ onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : ac . AnySuggestion ,
242
+ request : ac . SuggestionsRequestedEvent ) => void ,
243
+ ) : Map < ac . AnySuggestion , [ CompletionItem , boolean ] > {
245
244
return new Map ( ( Array . isArray ( completionItems ) ? completionItems : completionItems . items || [ ] )
246
245
. sort ( ( a , b ) => ( a . sortText || a . label ) . localeCompare ( b . sortText || b . label ) )
247
- . map < [ AutocompleteSuggestion , [ CompletionItem , boolean ] ] > (
246
+ . map < [ ac . AnySuggestion , [ CompletionItem , boolean ] ] > (
248
247
( s ) => [
249
- AutocompleteAdapter . completionItemToSuggestion ( s , { } , request , onDidConvertCompletionItem ) ,
248
+ AutocompleteAdapter . completionItemToSuggestion (
249
+ s , { } as ac . AnySuggestion , request , onDidConvertCompletionItem ) ,
250
250
[ s , false ] ] ) ) ;
251
251
}
252
252
@@ -261,14 +261,14 @@ export default class AutocompleteAdapter {
261
261
// Returns the {atom$AutocompleteSuggestion} passed in as suggestion with the conversion applied.
262
262
public static completionItemToSuggestion (
263
263
item : CompletionItem ,
264
- suggestion : AutocompleteSuggestion ,
265
- request : AutocompleteRequest ,
266
- onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : AutocompleteSuggestion ,
267
- request : AutocompleteRequest ) => void ,
268
- ) : AutocompleteSuggestion {
269
- AutocompleteAdapter . applyCompletionItemToSuggestion ( item , suggestion ) ;
270
- AutocompleteAdapter . applyTextEditToSuggestion ( item . textEdit , request . editor , suggestion ) ;
271
- AutocompleteAdapter . applySnippetToSuggestion ( item , suggestion ) ;
264
+ suggestion : ac . AnySuggestion ,
265
+ request : ac . SuggestionsRequestedEvent ,
266
+ onDidConvertCompletionItem ?: ( item : CompletionItem , suggestion : ac . AnySuggestion ,
267
+ request : ac . SuggestionsRequestedEvent ) => void ,
268
+ ) : ac . AnySuggestion {
269
+ AutocompleteAdapter . applyCompletionItemToSuggestion ( item , suggestion as ac . TextSuggestion ) ;
270
+ AutocompleteAdapter . applyTextEditToSuggestion ( item . textEdit , request . editor , suggestion as ac . TextSuggestion ) ;
271
+ AutocompleteAdapter . applySnippetToSuggestion ( item , suggestion as ac . SnippetSuggestion ) ;
272
272
if ( onDidConvertCompletionItem != null ) {
273
273
onDidConvertCompletionItem ( item , suggestion , request ) ;
274
274
}
@@ -282,7 +282,7 @@ export default class AutocompleteAdapter {
282
282
// * `suggestion` The {atom$AutocompleteSuggestion} to merge the conversion into.
283
283
//
284
284
// Returns an {atom$AutocompleteSuggestion} created from the {CompletionItem}.
285
- public static applyCompletionItemToSuggestion ( item : CompletionItem , suggestion : AutocompleteSuggestion ) {
285
+ public static applyCompletionItemToSuggestion ( item : CompletionItem , suggestion : ac . TextSuggestion ) {
286
286
suggestion . text = item . insertText || item . label ;
287
287
suggestion . displayText = item . label ;
288
288
suggestion . type = AutocompleteAdapter . completionKindToSuggestionType ( item . kind ) ;
@@ -313,7 +313,7 @@ export default class AutocompleteAdapter {
313
313
public static applyTextEditToSuggestion (
314
314
textEdit : TextEdit | undefined ,
315
315
editor : TextEditor ,
316
- suggestion : AutocompleteSuggestion ,
316
+ suggestion : ac . TextSuggestion ,
317
317
) : void {
318
318
if ( textEdit ) {
319
319
suggestion . replacementPrefix = editor . getTextInBufferRange ( Convert . lsRangeToAtomRange ( textEdit . range ) ) ;
@@ -327,9 +327,9 @@ export default class AutocompleteAdapter {
327
327
// * `item` An {CompletionItem} containing the completion items to be merged into.
328
328
// * `suggestion` The {atom$AutocompleteSuggestion} to merge the conversion into.
329
329
//
330
- public static applySnippetToSuggestion ( item : CompletionItem , suggestion : AutocompleteSuggestion ) : void {
330
+ public static applySnippetToSuggestion ( item : CompletionItem , suggestion : ac . SnippetSuggestion ) : void {
331
331
if ( item . insertTextFormat === InsertTextFormat . Snippet ) {
332
- suggestion . snippet = item . textEdit != null ? item . textEdit . newText : item . insertText ;
332
+ suggestion . snippet = item . textEdit != null ? item . textEdit . newText : ( item . insertText || '' ) ;
333
333
}
334
334
}
335
335
0 commit comments