@@ -15,6 +15,9 @@ interface TerraformCompletionContext extends vscode.CompletionContext {
1515 resourceType ?: string ;
1616}
1717
18+ const TEXT_MIN_SORT = "a" ;
19+ const TEXT_FILTER = " " ;
20+
1821export class TerraformTipsProvider implements CompletionItemProvider {
1922 document : TextDocument ;
2023 position : Position ;
@@ -30,7 +33,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
3033 const lineText = document . lineAt ( position . line ) . text ;
3134 const lineTillCurrentPosition = lineText . substring ( 0 , position . character ) ;
3235
33- // Are we trying to type a resource type?
36+ // Are we trying to type a top type?
3437 if ( this . isTopLevelType ( lineTillCurrentPosition ) ) {
3538 return this . getTopLevelType ( lineTillCurrentPosition ) ;
3639 }
@@ -49,7 +52,9 @@ export class TerraformTipsProvider implements CompletionItemProvider {
4952 let definedResourceTypes = this . getDefinedResourceTypes ( document ) ;
5053 let finalResourceTypes = _ . filter ( definedResourceTypes , o => ( o . indexOf ( resourceTypePrefix ) === 0 ) ) ;
5154 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 ;
5358 } ) ;
5459 }
5560 else if ( parts . length === 2 ) {
@@ -58,7 +63,11 @@ export class TerraformTipsProvider implements CompletionItemProvider {
5863
5964 // Get a list of all the names for this resource type
6065 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+ } ) ;
6271 }
6372 else if ( parts . length === 3 ) {
6473 // We're trying to type the exported field for the let
@@ -69,6 +78,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
6978 let c = new CompletionItem ( `${ o . name } (${ resourceType } )` , CompletionItemKind . Property ) ;
7079 c . detail = o . description ;
7180 c . insertText = o . name ;
81+ c . sortText = TEXT_MIN_SORT ;
7282 return c ;
7383 } ) ;
7484 return result ;
@@ -80,6 +90,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
8090
8191 // Are we trying to type a parameter to a resource?
8292 let possibleResources = this . checkTopLevelResource ( lineTillCurrentPosition ) ;
93+ // typing a resource type
8394 if ( possibleResources . length > 0 ) {
8495 return this . getHintsForStrings ( possibleResources ) ;
8596 }
@@ -88,7 +99,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
8899 const includeEqual = lineTillCurrentPosition . indexOf ( '=' ) ;
89100 // handle options
90101 if ( this . resourceType ) {
91- // when we typing a '=' character
102+ // typing a '=' character
92103 if ( endwithEqual ) {
93104 const lineBeforeEqualSign = lineTillCurrentPosition . substring ( 0 , includeEqual ) . trim ( ) ;
94105 // load options
@@ -99,6 +110,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
99110 this . resourceType = "" ;
100111 return ( options ) . length ? options : [ ] ;
101112 }
113+ this . resourceType = "" ;
102114 return [ ] ;
103115 }
104116
@@ -109,6 +121,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
109121 let line = document . lineAt ( i ) . text ;
110122 let parentType = this . getParentType ( line ) ;
111123 if ( parentType && parentType . type === "resource" ) {
124+ // typing a arg in resource
112125 const resourceType = this . getResourceTypeFromLine ( line ) ;
113126 const ret = this . getItemsForArgs ( resources [ resourceType ] . args , resourceType ) ;
114127 return ret ;
@@ -141,7 +154,10 @@ export class TerraformTipsProvider implements CompletionItemProvider {
141154 getOptionsFormArg ( opts : string [ ] ) : CompletionItem [ ] {
142155 return _ . map ( opts , opt => {
143156 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 ;
145161 return c ;
146162 } ) ;
147163 }
@@ -192,9 +208,11 @@ export class TerraformTipsProvider implements CompletionItemProvider {
192208
193209 getTopLevelType ( line : string ) : CompletionItem [ ] {
194210 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 ] ;
198216 }
199217 }
200218 return [ ] ;
@@ -233,7 +251,9 @@ export class TerraformTipsProvider implements CompletionItemProvider {
233251
234252 getHintsForStrings ( strings : string [ ] ) : CompletionItem [ ] {
235253 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 ;
237257 } ) ;
238258 }
239259
@@ -258,6 +278,7 @@ export class TerraformTipsProvider implements CompletionItemProvider {
258278 let c = new CompletionItem ( `${ o . name } (${ type } )` , CompletionItemKind . Property ) ;
259279 c . detail = o . description ;
260280 c . insertText = o . name ;
281+ c . sortText = TEXT_MIN_SORT ;
261282 return c ;
262283 } ) ;
263284 }
0 commit comments