@@ -37,7 +37,7 @@ internal class HaxeComplete
37
37
public HaxeCompleteStatus Status ;
38
38
public string Errors ;
39
39
private HaxeCompleteResult result ;
40
- private HaxePositionCompleteResult positionResult ;
40
+ private List < HaxePositionResult > positionResults ;
41
41
42
42
readonly IHaxeCompletionHandler handler ;
43
43
readonly string FileName ;
@@ -58,23 +58,27 @@ public HaxeComplete(ScintillaControl sci, ASExpr expr, bool autoHide, IHaxeCompl
58
58
59
59
public void GetList ( HaxeCompleteResultHandler < HaxeCompleteResult > callback )
60
60
{
61
- PluginBase . MainForm . CallCommand ( "Save" , null ) ;
61
+ StartThread ( callback , ( ) => result ) ;
62
+ }
62
63
63
- ThreadPool . QueueUserWorkItem ( _ =>
64
- {
65
- Status = ParseLines ( handler . GetCompletion ( BuildHxmlArgs ( ) ) ) ;
66
- Notify ( callback , result ) ;
67
- } ) ;
64
+ public void GetPosition ( HaxeCompleteResultHandler < HaxePositionResult > callback )
65
+ {
66
+ StartThread ( callback , ( ) => positionResults . Count > 0 ? positionResults [ 0 ] : null ) ;
67
+ }
68
+
69
+ public void GetUsages ( HaxeCompleteResultHandler < List < HaxePositionResult > > callback )
70
+ {
71
+ StartThread ( callback , ( ) => positionResults ) ;
68
72
}
69
73
70
- public void GetPosition ( HaxeCompleteResultHandler < HaxePositionCompleteResult > callback )
74
+ private void StartThread < T > ( HaxeCompleteResultHandler < T > callback , Func < T > resultFunc )
71
75
{
72
76
PluginBase . MainForm . CallCommand ( "Save" , null ) ;
73
77
74
78
ThreadPool . QueueUserWorkItem ( _ =>
75
79
{
76
80
Status = ParseLines ( handler . GetCompletion ( BuildHxmlArgs ( ) ) ) ;
77
- Notify ( callback , positionResult ) ;
81
+ Notify ( callback , resultFunc ( ) ) ;
78
82
} ) ;
79
83
}
80
84
@@ -121,8 +125,7 @@ string[] BuildHxmlArgs()
121
125
else
122
126
hxmlArgs . Add ( GetMainClassName ( ) ) ;
123
127
124
- String mode = ( CompilerService == HaxeCompilerService . COMPLETION ) ? "" : "@position" ;
125
- hxmlArgs . Insert ( 0 , String . Format ( "--display \" {0}\" @{1}{2}" , FileName , pos , mode ) ) ;
128
+ hxmlArgs . Insert ( 0 , String . Format ( "--display \" {0}\" @{1}{2}" , FileName , pos , GetMode ( ) ) ) ;
126
129
hxmlArgs . Insert ( 1 , "-D use_rtti_doc" ) ;
127
130
hxmlArgs . Insert ( 2 , "-D display-details" ) ;
128
131
@@ -131,6 +134,20 @@ string[] BuildHxmlArgs()
131
134
return hxmlArgs . ToArray ( ) ;
132
135
}
133
136
137
+ string GetMode ( )
138
+ {
139
+ switch ( CompilerService )
140
+ {
141
+ case HaxeCompilerService . POSITION :
142
+ return "@position" ;
143
+
144
+ case HaxeCompilerService . USAGE :
145
+ return "@usage" ;
146
+ }
147
+
148
+ return "" ;
149
+ }
150
+
134
151
void QuotePath ( List < string > hxmlArgs )
135
152
{
136
153
for ( int i = 0 ; i < hxmlArgs . Count ; i ++ )
@@ -235,6 +252,7 @@ HaxeCompleteStatus ProcessList(XmlTextReader reader)
235
252
{
236
253
result = new HaxeCompleteResult ( ) ;
237
254
result . Members = new MemberList ( ) ;
255
+ positionResults = new List < HaxePositionResult > ( ) ;
238
256
MemberModel member = null ;
239
257
240
258
while ( reader . Read ( ) )
@@ -244,7 +262,19 @@ HaxeCompleteStatus ProcessList(XmlTextReader reader)
244
262
switch ( reader . Name )
245
263
{
246
264
case "list" :
247
- return HaxeCompleteStatus . MEMBERS ;
265
+ switch ( CompilerService )
266
+ {
267
+ case HaxeCompilerService . COMPLETION :
268
+ return HaxeCompleteStatus . MEMBERS ;
269
+
270
+ case HaxeCompilerService . POSITION :
271
+ return HaxeCompleteStatus . POSITION ;
272
+
273
+ case HaxeCompilerService . USAGE :
274
+ return HaxeCompleteStatus . USAGE ;
275
+ }
276
+ break ;
277
+
248
278
case "i" :
249
279
member = null ;
250
280
break ;
@@ -273,16 +303,16 @@ HaxeCompleteStatus ProcessList(XmlTextReader reader)
273
303
break ;
274
304
275
305
case "pos" :
276
- positionResult = ExtractPos ( reader ) ;
277
- return HaxeCompleteStatus . POSITION ;
306
+ positionResults . Add ( ExtractPos ( reader ) ) ;
307
+ break ;
278
308
}
279
309
}
280
310
return HaxeCompleteStatus . MEMBERS ;
281
311
}
282
312
283
- HaxePositionCompleteResult ExtractPos ( XmlTextReader reader )
313
+ HaxePositionResult ExtractPos ( XmlTextReader reader )
284
314
{
285
- var result = new HaxePositionCompleteResult ( ) ;
315
+ var result = new HaxePositionResult ( ) ;
286
316
287
317
string value = ReadValue ( reader ) ;
288
318
Match match = rePosition . Match ( value ) ;
@@ -388,13 +418,15 @@ enum HaxeCompleteStatus: int
388
418
ERROR = 2 ,
389
419
TYPE = 3 ,
390
420
MEMBERS = 4 ,
391
- POSITION = 5
421
+ POSITION = 5 ,
422
+ USAGE = 6
392
423
}
393
424
394
425
enum HaxeCompilerService
395
426
{
396
427
COMPLETION ,
397
- POSITION
428
+ POSITION ,
429
+ USAGE
398
430
}
399
431
400
432
class HaxeCompleteResult
@@ -403,7 +435,7 @@ class HaxeCompleteResult
403
435
public MemberList Members ;
404
436
}
405
437
406
- class HaxePositionCompleteResult
438
+ class HaxePositionResult
407
439
{
408
440
public string Path ;
409
441
public HaxePositionCompleteRangeType RangeType ;
0 commit comments