@@ -4,45 +4,6 @@ defmodule IEx.Autocomplete do
4
4
defrecord Mod , name: nil , type: nil
5
5
defrecord Fun , name: nil , arities: [ ]
6
6
7
- defprotocol Entry do
8
- @ moduledoc false
9
- def to_entries ( entry )
10
- def to_uniq_entries ( entry )
11
- def to_hint ( entry , hint )
12
- end
13
-
14
- defimpl Entry , for: Mod do
15
- @ moduledoc false
16
-
17
- def to_entries ( mod ) do
18
- [ mod . name ]
19
- end
20
-
21
- def to_uniq_entries ( _fun ) do
22
- [ ]
23
- end
24
-
25
- def to_hint ( Mod [ name : name ] , hint ) do
26
- :binary . part ( name , size ( hint ) , size ( name ) - size ( hint ) ) <> "."
27
- end
28
- end
29
-
30
- defimpl Entry , for: Fun do
31
- @ moduledoc false
32
-
33
- def to_entries ( fun ) do
34
- lc a inlist fun . arities , do: "#{ fun . name } /#{ a } "
35
- end
36
-
37
- def to_uniq_entries ( fun ) do
38
- to_entries ( fun )
39
- end
40
-
41
- def to_hint ( Fun [ name : name ] , hint ) do
42
- :binary . part ( name , size ( hint ) , size ( name ) - size ( hint ) )
43
- end
44
- end
45
-
46
7
def expand ( [ ] ) do
47
8
funs = module_funs ( IEx.Helpers ) ++ module_funs ( Kernel )
48
9
mods = [ Mod [ name : "Elixir" , type: :elixir ] ]
@@ -129,8 +90,8 @@ defmodule IEx.Autocomplete do
129
90
end
130
91
131
92
defp format_expansion ( [ uniq ] , hint ) do
132
- hint = Entry . to_hint ( uniq , hint )
133
- uniq = if hint == "" , do: Entry . to_uniq_entries ( uniq ) , else: [ ]
93
+ hint = to_hint ( uniq , hint )
94
+ uniq = if hint == "" , do: to_uniq_entries ( uniq ) , else: [ ]
134
95
yes ( hint , uniq )
135
96
end
136
97
@@ -139,7 +100,7 @@ defmodule IEx.Autocomplete do
139
100
length = byte_size ( hint )
140
101
prefix = :binary . longest_common_prefix ( binary )
141
102
if prefix in [ 0 , length ] do
142
- entries = Enum . reduce ( entries , [ ] , fn e , acc -> Entry . to_entries ( e ) ++ acc end )
103
+ entries = Enum . reduce ( entries , [ ] , fn e , acc -> to_entries ( e ) ++ acc end )
143
104
yes ( "" , entries )
144
105
else
145
106
yes ( :binary . part ( first . name , prefix , length - prefix ) , [ ] )
@@ -270,4 +231,30 @@ defmodule IEx.Autocomplete do
270
231
271
232
defp ensure_loaded ( Elixir ) , do: { :error , :nofile }
272
233
defp ensure_loaded ( mod ) , do: Code . ensure_compiled ( mod )
234
+
235
+ ## Ad-hoc conversions
236
+
237
+ defp to_entries ( Mod [ name : name ] ) do
238
+ [ name ]
239
+ end
240
+
241
+ defp to_entries ( Fun [ name : name , arities: arities ] ) do
242
+ lc a inlist arities , do: "#{ name } /#{ a } "
243
+ end
244
+
245
+ defp to_uniq_entries ( Mod [ ]) do
246
+ [ ]
247
+ end
248
+
249
+ defp to_uniq_entries ( Fun [ ] = fun ) do
250
+ to_entries ( fun )
251
+ end
252
+
253
+ defp to_hint ( Mod [ name : name ] , hint ) do
254
+ :binary . part ( name , size ( hint ) , size ( name ) - size ( hint ) ) <> "."
255
+ end
256
+
257
+ defp to_hint ( Fun [ name : name ] , hint ) do
258
+ :binary . part ( name , size ( hint ) , size ( name ) - size ( hint ) )
259
+ end
273
260
end
0 commit comments