Skip to content

Commit 79fac76

Browse files
feat: add order by and it can be alphabetical or length
1 parent 9b23085 commit 79fac76

File tree

3 files changed

+64
-21
lines changed

3 files changed

+64
-21
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Install the plugin with your preferred package manager:
3636
},
3737
ft = "php",
3838
opts = {
39+
order_by = "length",
3940
order = "asc",
4041
autocmd = true,
4142
rm_unused = true,
@@ -58,6 +59,7 @@ Install the plugin with your preferred package manager:
5859

5960
```lua
6061
{
62+
order_by = "length", ---@type "length" | "alphabetical"
6163
order = "asc", ---@type "asc" | "desc"
6264
autocmd = false, -- create an autocmd group if true
6365
rm_unused = false, -- remove lines that "is declared but not used."

lua/php-use-sort/config.lua

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
1-
local M = {}
1+
local Config = {}
22

3-
M.namespace = vim.api.nvim_create_namespace("PhpUseSort")
3+
Config.namespace = vim.api.nvim_create_namespace("PhpUseSort")
44

55
---@class Options
66
local defaults = {
7+
order_by = "length",
78
order = "asc",
89
autocmd = false,
910
rm_unused = false,
1011
}
1112

1213
---@type Options
13-
M.options = {}
14+
Config.options = {}
1415

1516
---@param options? Options
16-
function M.setup(options)
17-
M.options = vim.tbl_deep_extend("force", {}, defaults, options or {})
17+
function Config.setup(options)
18+
Config.options = vim.tbl_deep_extend("force", {}, defaults, options or {})
1819
end
1920

20-
M.setup()
21+
Config.setup()
2122

22-
return M
23+
return Config

lua/php-use-sort/init.lua

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---@class PhpUseSort
2-
local M = {}
2+
local PhpUseSort = {}
33

44
local ts = vim.treesitter
55
local parsers = require("nvim-treesitter.parsers")
@@ -13,7 +13,17 @@ local t = function(node)
1313
p(ts.get_node_text(node, 0))
1414
end
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)
8898
end
8999

90100
local 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
})
102112
end
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+
104128
local 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
})
114148
end
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
118157
end
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)
152192
end
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()
158198
end
159199

160-
return M
200+
return PhpUseSort

0 commit comments

Comments
 (0)