11--- @class PhpUseSort
2- local M = {}
2+ local PhpUseSort = {}
33
44local ts = vim .treesitter
55local parsers = require (" nvim-treesitter.parsers" )
@@ -13,7 +13,17 @@ local t = function(node)
1313 p (ts .get_node_text (node , 0 ))
1414end
1515
16- local function sort_use_statements (use_statements , sort_order )
16+ local function sort_use_statements (use_statements , order_by , sort_order )
17+ if order_by == " alphabetical" then
18+ table.sort (use_statements , function (a , b )
19+ if sort_order == " desc" then
20+ return a .statement > b .statement
21+ end
22+ return a .statement < b .statement
23+ end )
24+ return
25+ end
26+
1727 table.sort (use_statements , function (a , b )
1828 local len_a , len_b = # a .statement , # b .statement
1929
@@ -88,7 +98,7 @@ local function update_buffer(range, use_statements)
8898end
8999
90100local function setup_autocmd ()
91- local options = M .get_config_options ()
101+ local options = PhpUseSort .get_config_options ()
92102 if not options .autocmd then
93103 return
94104 end
@@ -101,23 +111,52 @@ local function setup_autocmd()
101111 })
102112end
103113
114+ local function get_completions (context )
115+ local completions = {}
116+ local words = vim .split (context , " %s" )
117+ local current_word = words [# words ] or " "
118+
119+ if # words == 2 and current_word == " " then
120+ completions = { " length" , " alphabetical" }
121+ elseif # words == 3 and current_word == " " then
122+ completions = { " asc" , " desc" }
123+ end
124+
125+ return completions
126+ end
127+
104128local function setup_command ()
105129 vim .api .nvim_create_user_command (" PhpUseSort" , function (opts )
106- M .main (opts .args )
130+ local args = vim .split (opts .args , " %s" )
131+ local order_by = args [1 ] or " "
132+ local sort_order = args [2 ] or " "
133+
134+ PhpUseSort .main (order_by , sort_order )
107135 end , {
108136 nargs = " ?" ,
109137 complete = function (_ , _ , _ )
110- return { " asc" , " desc" }
138+ local context = vim .fn .getcmdline ()
139+
140+ if context ~= nil then
141+ return get_completions (context )
142+ else
143+ return {}
144+ end
111145 end ,
112- desc = " Sort PHP use lines by length. Accepts sorting options." ,
146+ desc = " Sort PHP use lines by length or alphabetical order . Accepts sorting options." ,
113147 })
114148end
115149
116- function M .get_config_options ()
150+ -- complete = "custom,ListUsers",
151+ -- local function ListUsers(A, L, P)
152+ -- return { "asc", "desc" }
153+ -- end
154+
155+ function PhpUseSort .get_config_options ()
117156 return require (" php-use-sort.config" ).options
118157end
119158
120- function M .main (sort_order )
159+ function PhpUseSort .main (order_by , sort_order )
121160 local parser = parsers .get_parser ()
122161
123162 if not parser then
@@ -140,21 +179,22 @@ function M.main(sort_order)
140179 return
141180 end
142181
143- local options = M .get_config_options ()
144-
145- sort_order = sort_order ~= " " and sort_order or options .order
182+ local options = PhpUseSort .get_config_options ()
146183
147184 local use_statements , range = extract_use_statements (root , lang , options .rm_unused )
148185
149- sort_use_statements (use_statements , sort_order )
186+ sort_order = sort_order ~= " " and sort_order or options .order
187+ order_by = order_by ~= " " and order_by or options .order_by
188+
189+ sort_use_statements (use_statements , order_by , sort_order )
150190
151191 update_buffer (range , use_statements )
152192end
153193
154- function M .setup (options )
194+ function PhpUseSort .setup (options )
155195 require (" php-use-sort.config" ).setup (options .opts )
156196 setup_command ()
157197 setup_autocmd ()
158198end
159199
160- return M
200+ return PhpUseSort
0 commit comments