@@ -41,7 +41,7 @@ internal class HaxeComplete
41
41
public HaxeCompleteStatus Status ;
42
42
public string Errors ;
43
43
private HaxeCompleteResult result ;
44
- private HaxePositionCompleteResult positionResult ;
44
+ private List < HaxePositionResult > positionResults ;
45
45
46
46
readonly IHaxeCompletionHandler handler ;
47
47
readonly string FileName ;
@@ -62,23 +62,27 @@ public HaxeComplete(ScintillaControl sci, ASExpr expr, bool autoHide, IHaxeCompl
62
62
63
63
public void GetList ( HaxeCompleteResultHandler < HaxeCompleteResult > callback )
64
64
{
65
- PluginBase . MainForm . CallCommand ( "Save" , null ) ;
65
+ StartThread ( callback , ( ) => result ) ;
66
+ }
66
67
67
- ThreadPool . QueueUserWorkItem ( _ =>
68
- {
69
- Status = ParseLines ( handler . GetCompletion ( BuildHxmlArgs ( ) ) ) ;
70
- Notify ( callback , result ) ;
71
- } ) ;
68
+ public void GetPosition ( HaxeCompleteResultHandler < HaxePositionResult > callback )
69
+ {
70
+ StartThread ( callback , ( ) => positionResults . Count > 0 ? positionResults [ 0 ] : null ) ;
72
71
}
73
72
74
- public void GetPosition ( HaxeCompleteResultHandler < HaxePositionCompleteResult > callback )
73
+ public void GetUsages ( HaxeCompleteResultHandler < List < HaxePositionResult > > callback )
74
+ {
75
+ StartThread ( callback , ( ) => positionResults ) ;
76
+ }
77
+
78
+ private void StartThread < T > ( HaxeCompleteResultHandler < T > callback , Func < T > resultFunc )
75
79
{
76
80
PluginBase . MainForm . CallCommand ( "Save" , null ) ;
77
81
78
82
ThreadPool . QueueUserWorkItem ( _ =>
79
83
{
80
84
Status = ParseLines ( handler . GetCompletion ( BuildHxmlArgs ( ) ) ) ;
81
- Notify ( callback , positionResult ) ;
85
+ Notify ( callback , resultFunc ( ) ) ;
82
86
} ) ;
83
87
}
84
88
@@ -113,8 +117,7 @@ string[] BuildHxmlArgs()
113
117
QuotePath ( hxmlArgs ) ;
114
118
EscapeMacros ( hxmlArgs ) ;
115
119
116
- String mode = ( CompilerService == HaxeCompilerService . COMPLETION ) ? "" : "@position" ;
117
- hxmlArgs . Insert ( 0 , String . Format ( "--display \" {0}\" @{1}{2}" , FileName , pos , mode ) ) ;
120
+ hxmlArgs . Insert ( 0 , String . Format ( "--display \" {0}\" @{1}{2}" , FileName , pos , GetMode ( ) ) ) ;
118
121
hxmlArgs . Insert ( 1 , "-D use_rtti_doc" ) ;
119
122
hxmlArgs . Insert ( 2 , "-D display-details" ) ;
120
123
@@ -123,6 +126,20 @@ string[] BuildHxmlArgs()
123
126
return hxmlArgs . ToArray ( ) ;
124
127
}
125
128
129
+ private string GetMode ( )
130
+ {
131
+ switch ( CompilerService )
132
+ {
133
+ case HaxeCompilerService . POSITION :
134
+ return "@position" ;
135
+
136
+ case HaxeCompilerService . USAGE :
137
+ return "@usage" ;
138
+ }
139
+
140
+ return "" ;
141
+ }
142
+
126
143
private void RemoveComments ( List < string > hxmlArgs )
127
144
{
128
145
for ( int i = 0 ; i < hxmlArgs . Count ; i ++ )
@@ -189,6 +206,7 @@ int GetDisplayPosition()
189
206
break ;
190
207
191
208
case HaxeCompilerService . POSITION :
209
+ case HaxeCompilerService . USAGE :
192
210
pos = Sci . WordEndPosition ( Sci . CurrentPos , true ) + 1 ;
193
211
break ;
194
212
}
@@ -258,6 +276,7 @@ HaxeCompleteStatus ProcessList(XmlTextReader reader)
258
276
{
259
277
result = new HaxeCompleteResult ( ) ;
260
278
result . Members = new MemberList ( ) ;
279
+ positionResults = new List < HaxePositionResult > ( ) ;
261
280
MemberModel member = null ;
262
281
263
282
while ( reader . Read ( ) )
@@ -267,8 +286,20 @@ HaxeCompleteStatus ProcessList(XmlTextReader reader)
267
286
switch ( reader . Name )
268
287
{
269
288
case "list" :
270
- result . Members . Sort ( ) ;
271
- return HaxeCompleteStatus . MEMBERS ;
289
+ switch ( CompilerService )
290
+ {
291
+ case HaxeCompilerService . COMPLETION :
292
+ result . Members . Sort ( ) ;
293
+ return HaxeCompleteStatus . MEMBERS ;
294
+
295
+ case HaxeCompilerService . POSITION :
296
+ return HaxeCompleteStatus . POSITION ;
297
+
298
+ case HaxeCompilerService . USAGE :
299
+ return HaxeCompleteStatus . USAGE ;
300
+ }
301
+ break ;
302
+
272
303
case "i" :
273
304
member = null ;
274
305
break ;
@@ -297,18 +328,18 @@ HaxeCompleteStatus ProcessList(XmlTextReader reader)
297
328
break ;
298
329
299
330
case "pos" :
300
- positionResult = ExtractPos ( reader ) ;
301
- return HaxeCompleteStatus . POSITION ;
331
+ positionResults . Add ( ExtractPos ( reader ) ) ;
332
+ break ;
302
333
}
303
334
}
304
335
305
336
result . Members . Sort ( ) ;
306
337
return HaxeCompleteStatus . MEMBERS ;
307
338
}
308
339
309
- HaxePositionCompleteResult ExtractPos ( XmlTextReader reader )
340
+ HaxePositionResult ExtractPos ( XmlTextReader reader )
310
341
{
311
- var result = new HaxePositionCompleteResult ( ) ;
342
+ var result = new HaxePositionResult ( ) ;
312
343
313
344
string value = ReadValue ( reader ) ;
314
345
Match match = rePosition . Match ( value ) ;
@@ -414,13 +445,15 @@ enum HaxeCompleteStatus: int
414
445
ERROR = 2 ,
415
446
TYPE = 3 ,
416
447
MEMBERS = 4 ,
417
- POSITION = 5
448
+ POSITION = 5 ,
449
+ USAGE = 6
418
450
}
419
451
420
452
enum HaxeCompilerService
421
453
{
422
454
COMPLETION ,
423
- POSITION
455
+ POSITION ,
456
+ USAGE
424
457
}
425
458
426
459
class HaxeCompleteResult
@@ -429,7 +462,7 @@ class HaxeCompleteResult
429
462
public MemberList Members ;
430
463
}
431
464
432
- class HaxePositionCompleteResult
465
+ class HaxePositionResult
433
466
{
434
467
public string Path ;
435
468
public HaxePositionCompleteRangeType RangeType ;
0 commit comments