Skip to content

Commit aa2ea0f

Browse files
committed
close/open view
1 parent 6599df7 commit aa2ea0f

File tree

13 files changed

+267
-224
lines changed

13 files changed

+267
-224
lines changed

lua/java-deps/config.lua

Lines changed: 5 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
local M = {
2-
async = false,
32
jdtls_name = "jdtls",
43
options = {
54
show_guides = true,
6-
show_path_details = true,
75
auto_close = false,
8-
width = 32,
6+
width = 40,
97
show_numbers = false,
108
show_relative_numbers = false,
119
preview_bg_highlight = "Pmenu",
@@ -14,22 +12,13 @@ local M = {
1412
position = "right",
1513
wrap = false,
1614
hierarchical_view = true,
17-
keymaps = { -- These keymaps can be a string or a table for multiple keys
18-
open_file = "o",
19-
close = { "<Esc>", "q" },
20-
show_help = "?",
21-
toggle_preview = "K",
22-
fold = "h",
23-
unfold = "l",
24-
fold_reset = "R",
15+
keymaps = {
16+
close = "q",
17+
toggle_fold = "o",
2518
},
2619
symbols = {
27-
CLASS = { icon = "󰠱", hl = "@class" },
28-
ENUM = { icon = "", hl = "@enum" },
29-
INTERFACE = { icon = "", hl = "@interface" },
30-
JAR = { icon = "", hl = "@conditional" },
20+
icons = {},
3121
},
32-
symbol_blacklist = {},
3322
},
3423
}
3524
M.setup = function(config)
@@ -41,22 +30,6 @@ end
4130
function M.has_numbers()
4231
return M.options.show_numbers or M.options.show_relative_numbers
4332
end
44-
local function has_value(tab, val)
45-
for _, value in ipairs(tab) do
46-
if value == val then
47-
return true
48-
end
49-
end
50-
51-
return false
52-
end
53-
54-
function M.is_symbol_blacklisted(kind)
55-
if kind == nil then
56-
return false
57-
end
58-
return has_value(M.options.symbol_blacklist, kind)
59-
end
6033

6134
function M.show_help()
6235
print("Current keymaps:")

lua/java-deps/highlight.lua

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,26 @@ local M = {
55
LineGuide = { link = "Comment" },
66
},
77
},
8-
vt = {
9-
nsid = vim.api.nvim_create_namespace("java-deps-virt-text"),
10-
highlights = {
11-
Comment = { link = "Comment" },
12-
},
13-
},
148
}
159

1610
M.init_hl = function()
1711
local ihlf = function(hls)
1812
for name, hl in pairs(hls.highlights) do
1913
if vim.fn.hlexists("JavaDeps" .. name) == 0 then
20-
vim.api.nvim_set_hl(hls.nsid, "JavaDeps" .. name, { link = hl.link })
14+
vim.api.nvim_set_hl(0, "JavaDeps" .. name, { link = hl.link })
2115
end
2216
end
2317
end
2418
ihlf(M.items)
25-
ihlf(M.vt)
2619
end
2720
M.clear_all_ns = function(bufnr)
2821
vim.api.nvim_buf_clear_namespace(bufnr, -1, 0, -1)
2922
end
3023

31-
M.clear_virt_text = function(bufnr)
32-
vim.api.nvim_buf_clear_namespace(bufnr, M.vt.nsid, 0, -1)
33-
end
34-
3524
---@param bufnr number
3625
---@param hl_info table
3726
---@param nodes TreeItem[]
38-
function M.add_icon_highlights(bufnr, hl_info, nodes)
27+
function M.add_item_highlights(bufnr, hl_info, nodes)
3928
for _, line_hl in ipairs(hl_info) do
4029
local line, hl_start, hl_end, hl_type = unpack(line_hl)
4130
vim.api.nvim_buf_add_highlight(bufnr, M.items.nsid, hl_type, line - 1, hl_start, hl_end)

lua/java-deps/init.lua

Lines changed: 1 addition & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
local jdtls = require("java-deps.java.jdtls")
21
local config = require("java-deps.config")
32
local View = require("java-deps.view")
4-
local provider = require("java-deps.views.data_provider")
5-
local writer = require("java-deps.writer")
6-
local mappings = require("java-deps.mappings")
73
local highlight = require("java-deps.highlight")
84
-- debug
95
vim.g.java_deps = {
@@ -13,29 +9,11 @@ vim.g.java_deps = {
139
local M = {
1410
view = nil,
1511
state = {
16-
root_uri = nil,
17-
flattened_outline_items = {},
1812
code_buf = nil,
1913
code_win = nil,
20-
root_items = nil,
21-
current_node = nil,
22-
current_path = nil,
2314
},
2415
}
2516

26-
local function handle_projects()
27-
local uri = vim.uri_from_fname(jdtls.root_dir())
28-
local data = provider.DataProvider:new(uri, M.state.current_path)
29-
data:revealPaths()
30-
local result = data:flattenTree()
31-
local idx, item = data:findCurrentNode(result)
32-
writer.parse_and_write(M.view.bufnr, result)
33-
-- 设置光标位置
34-
if idx and item then
35-
vim.api.nvim_win_set_cursor(M.view.winnr, { idx, 0 })
36-
end
37-
end
38-
3917
function M.toggle_outline()
4018
if M.view:is_open() then
4119
M.close_outline()
@@ -46,23 +24,8 @@ end
4624

4725
function M.open_outline()
4826
if not M.view:is_open() then
49-
M.state.code_buf = vim.api.nvim_get_current_buf()
50-
M.state.current_path = vim.uri_from_bufnr(M.state.code_buf)
5127
M.view:open()
52-
mappings.init_mappings(M.view)
53-
writer.write_outline(M.view.bufnr, { "Loading..." })
54-
if config.async then
55-
local wf = coroutine.wrap(function()
56-
handle_projects()
57-
end)
58-
xpcall(wf, function(err)
59-
if err then
60-
print(err.message or vim.inspect(err))
61-
end
62-
end)
63-
else
64-
handle_projects()
65-
end
28+
M.view:revealPaths()
6629
end
6730
end
6831

lua/java-deps/java/IPackageRootNodeData.lua

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,20 @@ function IPackageRootNodeData:new()
1515
return setmetatable(INodeData:new(), self)
1616
end
1717

18+
---@param node INodeData
19+
---@return IPackageRootNodeData
20+
function IPackageRootNodeData:form(node)
21+
return setmetatable(node, self)
22+
end
23+
24+
function IPackageRootNodeData:getEntryKind()
25+
return self.entryKind
26+
end
27+
28+
function IPackageRootNodeData:getAttributes()
29+
return self.attributes
30+
end
31+
1832
M.IPackageRootNodeData = IPackageRootNodeData
1933

2034
return M

lua/java-deps/java/hieararchicalPackageNodeData.lua

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
local _n = require("java-deps.java.nodeData")
2-
local NodeKind = _n.NodeKind
2+
local _ipkg = require("java-deps.java.IPackageRootNodeData")
33
local INodeData = _n.INodeData
4+
local IPackageRootNodeData = _ipkg.IPackageRootNodeData
45
local M = {}
56

67
---@class HierarchicalPackageNodeData: INodeData
@@ -98,6 +99,10 @@ function HierarchicalPackageNodeData:getMetaData()
9899
return self._nodeData and self._nodeData.metaData
99100
end
100101

102+
function HierarchicalPackageNodeData:getEntryKind()
103+
return self._nodeData and IPackageRootNodeData:form(self._nodeData):getEntryKind()
104+
end
105+
101106
M.HierarchicalPackageNodeData = HierarchicalPackageNodeData
102107

103108
---@param packageList INodeData[]

lua/java-deps/java/lsp-command.lua

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@ M.execute_command_async = function(command, callback, bufnr)
3939
end
4040
end
4141
M.execute_command = function(command, bufnr)
42-
if config.async then
43-
return M.execute_command_async(command, nil, bufnr)
44-
end
4542
local client = M.get_client()
4643
if not client then
4744
return

lua/java-deps/mappings.lua

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
1+
local config = require("java-deps.config")
12
local M = {}
23

34
---@param view View
45
M.init_mappings = function(view)
56
vim.keymap.set("n", "h", function() end, { noremap = true, silent = true, buffer = view.bufnr })
67
vim.keymap.set("n", "l", function() end, { noremap = true, silent = true, buffer = view.bufnr })
8+
vim.keymap.set("n", config.options.keymaps.toggle_fold or "o", function()
9+
view:foldToggle()
10+
end, { noremap = true, silent = true, buffer = view.bufnr })
11+
12+
vim.keymap.set("n", config.options.keymaps.close or "q", function()
13+
view:close()
14+
end, { noremap = true, silent = true, buffer = view.bufnr })
715
end
816

917
return M

lua/java-deps/parser.lua

Lines changed: 13 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
local config = require("java-deps.config")
2-
local data_node = require("java-deps.views.data_node")
2+
local icons = require("java-deps.views.icons")
33
local M = {}
44

55
local function str_to_table(str)
@@ -38,83 +38,51 @@ function M.get_lines(flattened_outline_items)
3838
local marker_space = config.options.fold_markers and 1 or 0
3939

4040
local line = str_to_table(string.rep(" ", depth + marker_space))
41-
local running_length = 1
42-
43-
local function add_guide_hl(from, to)
44-
table.insert(hl_info, {
45-
node_line,
46-
from,
47-
to,
48-
"JavaDepsLineGuide",
49-
})
50-
end
5141

42+
local folded = node:is_foldable()
5243
for index, _ in ipairs(line) do
5344
-- all items start with a space (or two)
5445
if config.options.show_guides then
5546
if index == #line then
5647
-- add fold markers
57-
local folded = data_node.is_folded(node)
5848
if config.options.fold_markers and folded then
59-
if data_node.is_expanded(node) then
49+
if node:is_expanded() then
6050
line[index] = config.options.fold_markers[2]
6151
else
6252
line[index] = config.options.fold_markers[1]
6353
end
64-
65-
add_guide_hl(running_length, running_length + vim.fn.strlen(line[index]) - 1)
66-
67-
-- the root level has no vertical markers
6854
elseif depth > 1 then
6955
if node.isLast then
7056
line[index] = guides.markers.bottom
71-
add_guide_hl(running_length, running_length + vim.fn.strlen(guides.markers.bottom) - 1)
7257
else
7358
line[index] = guides.markers.middle
74-
add_guide_hl(running_length, running_length + vim.fn.strlen(guides.markers.middle) - 1)
7559
end
7660
end
77-
-- else if the parent was not the last in its group, add a
78-
-- vertical marker because there are items under us and we need
79-
-- to point to those
8061
elseif not node.hierarchy[index] and depth > 1 then
8162
line[index + marker_space] = guides.markers.vertical
82-
add_guide_hl(
83-
running_length - 1 + 2 * marker_space,
84-
running_length + vim.fn.strlen(guides.markers.vertical) - 1 + 2 * marker_space
85-
)
8663
end
8764
end
8865

8966
line[index] = line[index] .. " "
90-
91-
running_length = running_length + vim.fn.strlen(line[index])
9267
end
9368

94-
local final_prefix = line
69+
local string_prefix = ""
9570

96-
local string_prefix = table_to_str(final_prefix)
71+
for _, value in ipairs(line) do
72+
string_prefix = string_prefix .. tostring(value)
73+
end
9774

98-
table.insert(lines, string_prefix .. node.icon .. " " .. node.label)
75+
local hl_icon = icons.get_icon(node.data)
76+
local icon = hl_icon.icon
77+
table.insert(lines, string_prefix .. icon .. " " .. node.label)
9978

10079
local hl_start = #string_prefix
101-
local hl_end = #string_prefix + #node.icon
102-
local hl = config.options.symbols[node.kind]
103-
local hl_type = hl and hl.hl or "@lsp.type.class"
80+
local hl_end = #string_prefix + #icon
81+
local hl_type = hl_icon.hl or "Type"
10482
table.insert(hl_info, { node_line, hl_start, hl_end, hl_type })
105-
106-
node.prefix_length = #string_prefix + #node.icon + 1
83+
node.prefix_length = #string_prefix + #icon + 1
10784
end
10885
return lines, hl_info
10986
end
11087

111-
function M.get_details(flattened_outline_items)
112-
local lines = {}
113-
for _, value in ipairs(flattened_outline_items) do
114-
local detail
115-
-- TODO
116-
table.insert(lines, detail or "")
117-
end
118-
return lines
119-
end
12088
return M

0 commit comments

Comments
 (0)