@@ -15,6 +15,9 @@ interface TerraformCompletionContext extends vscode.CompletionContext {
15
15
resourceType ?: string ;
16
16
}
17
17
18
+ const TEXT_MIN_SORT = "a" ;
19
+ const TEXT_FILTER = " " ;
20
+
18
21
export class TerraformTipsProvider implements CompletionItemProvider {
19
22
document : TextDocument ;
20
23
position : Position ;
@@ -30,7 +33,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
30
33
const lineText = document . lineAt ( position . line ) . text ;
31
34
const lineTillCurrentPosition = lineText . substring ( 0 , position . character ) ;
32
35
33
- // Are we trying to type a resource type?
36
+ // Are we trying to type a top type?
34
37
if ( this . isTopLevelType ( lineTillCurrentPosition ) ) {
35
38
return this . getTopLevelType ( lineTillCurrentPosition ) ;
36
39
}
@@ -49,7 +52,9 @@ export class TerraformTipsProvider implements CompletionItemProvider {
49
52
let definedResourceTypes = this . getDefinedResourceTypes ( document ) ;
50
53
let finalResourceTypes = _ . filter ( definedResourceTypes , o => ( o . indexOf ( resourceTypePrefix ) === 0 ) ) ;
51
54
return _ . map ( finalResourceTypes , o => {
52
- return new CompletionItem ( o , CompletionItemKind . Field ) ;
55
+ const c = new CompletionItem ( o , CompletionItemKind . Field ) ;
56
+ c . sortText = TEXT_MIN_SORT ;
57
+ return c ;
53
58
} ) ;
54
59
}
55
60
else if ( parts . length === 2 ) {
@@ -58,7 +63,11 @@ export class TerraformTipsProvider implements CompletionItemProvider {
58
63
59
64
// Get a list of all the names for this resource type
60
65
let names = this . getNamesForResourceType ( document , resourceType ) ;
61
- return _ . map ( names , o => new CompletionItem ( o , CompletionItemKind . Field ) ) ;
66
+ return _ . map ( names , o => {
67
+ const c = new CompletionItem ( o , CompletionItemKind . Field ) ;
68
+ c . sortText = TEXT_MIN_SORT ;
69
+ return c ;
70
+ } ) ;
62
71
}
63
72
else if ( parts . length === 3 ) {
64
73
// We're trying to type the exported field for the let
@@ -69,6 +78,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
69
78
let c = new CompletionItem ( `${ o . name } (${ resourceType } )` , CompletionItemKind . Property ) ;
70
79
c . detail = o . description ;
71
80
c . insertText = o . name ;
81
+ c . sortText = TEXT_MIN_SORT ;
72
82
return c ;
73
83
} ) ;
74
84
return result ;
@@ -80,6 +90,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
80
90
81
91
// Are we trying to type a parameter to a resource?
82
92
let possibleResources = this . checkTopLevelResource ( lineTillCurrentPosition ) ;
93
+ // typing a resource type
83
94
if ( possibleResources . length > 0 ) {
84
95
return this . getHintsForStrings ( possibleResources ) ;
85
96
}
@@ -88,7 +99,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
88
99
const includeEqual = lineTillCurrentPosition . indexOf ( '=' ) ;
89
100
// handle options
90
101
if ( this . resourceType ) {
91
- // when we typing a '=' character
102
+ // typing a '=' character
92
103
if ( endwithEqual ) {
93
104
const lineBeforeEqualSign = lineTillCurrentPosition . substring ( 0 , includeEqual ) . trim ( ) ;
94
105
// load options
@@ -99,6 +110,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
99
110
this . resourceType = "" ;
100
111
return ( options ) . length ? options : [ ] ;
101
112
}
113
+ this . resourceType = "" ;
102
114
return [ ] ;
103
115
}
104
116
@@ -109,6 +121,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
109
121
let line = document . lineAt ( i ) . text ;
110
122
let parentType = this . getParentType ( line ) ;
111
123
if ( parentType && parentType . type === "resource" ) {
124
+ // typing a arg in resource
112
125
const resourceType = this . getResourceTypeFromLine ( line ) ;
113
126
const ret = this . getItemsForArgs ( resources [ resourceType ] . args , resourceType ) ;
114
127
return ret ;
@@ -141,7 +154,10 @@ export class TerraformTipsProvider implements CompletionItemProvider {
141
154
getOptionsFormArg ( opts : string [ ] ) : CompletionItem [ ] {
142
155
return _ . map ( opts , opt => {
143
156
let c = new CompletionItem ( opt , CompletionItemKind . Value ) ;
144
- c . insertText = "\"" + opt + "\"" ;
157
+ const text = "\ \"" + opt + "\"" ;
158
+ c . insertText = text ;
159
+ c . sortText = TEXT_MIN_SORT ;
160
+ c . filterText = TEXT_FILTER ;
145
161
return c ;
146
162
} ) ;
147
163
}
@@ -192,9 +208,11 @@ export class TerraformTipsProvider implements CompletionItemProvider {
192
208
193
209
getTopLevelType ( line : string ) : CompletionItem [ ] {
194
210
for ( const element of topLevelTypes ) {
195
- let resourceType = element ;
196
- if ( resourceType . startsWith ( line ) ) {
197
- return [ new CompletionItem ( resourceType , CompletionItemKind . Enum ) ] ;
211
+ let topType = element ;
212
+ if ( topType . startsWith ( line ) ) {
213
+ const c = new CompletionItem ( topType , CompletionItemKind . Enum ) ;
214
+ c . sortText = TEXT_MIN_SORT ;
215
+ return [ c ] ;
198
216
}
199
217
}
200
218
return [ ] ;
@@ -233,7 +251,9 @@ export class TerraformTipsProvider implements CompletionItemProvider {
233
251
234
252
getHintsForStrings ( strings : string [ ] ) : CompletionItem [ ] {
235
253
return _ . map ( strings , s => {
236
- return new CompletionItem ( s , CompletionItemKind . Enum ) ;
254
+ const c = new CompletionItem ( s , CompletionItemKind . Enum ) ;
255
+ c . sortText = TEXT_MIN_SORT ;
256
+ return c ;
237
257
} ) ;
238
258
}
239
259
@@ -258,6 +278,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
258
278
let c = new CompletionItem ( `${ o . name } (${ type } )` , CompletionItemKind . Property ) ;
259
279
c . detail = o . description ;
260
280
c . insertText = o . name ;
281
+ c . sortText = TEXT_MIN_SORT ;
261
282
return c ;
262
283
} ) ;
263
284
}
0 commit comments