Skip to content

Commit 6599df7

Browse files
committed
date tree item
1 parent 8ade7ce commit 6599df7

File tree

15 files changed

+408
-238
lines changed

15 files changed

+408
-238
lines changed

lua/java-deps/config.lua

Lines changed: 54 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,76 @@
11
local M = {
2-
debug = false,
3-
jdtls_name = "jdtls",
4-
options = {
5-
show_guides = true,
6-
show_path_details = true,
7-
auto_close = false,
8-
width = 32,
9-
relative_width = true,
10-
show_numbers = false,
11-
show_relative_numbers = false,
12-
preview_bg_highlight = "Pmenu",
13-
winblend = 0,
14-
autofold_depth = 99,
15-
fold_markers = { "", "" },
16-
position = "right",
17-
wrap = false,
18-
hierarchical_view = true,
19-
keymaps = { -- These keymaps can be a string or a table for multiple keys
20-
open_file = "o",
21-
close = { "<Esc>", "q" },
22-
show_help = "?",
23-
toggle_preview = "K",
24-
fold = "h",
25-
unfold = "l",
26-
fold_all = "W",
27-
unfold_all = "E",
28-
fold_reset = "R",
29-
},
30-
symbols = {
31-
Workspace = { icon = "", hl = "@text.uri" },
32-
Project = { icon = "", hl = "@text.uri" },
33-
PackageRoot = { icon = "", hl = "@text.uri" },
34-
Package = { icon = "", hl = "@namespace" },
35-
PrimaryType = { icon = "󰠱", hl = "@type" },
36-
CompilationUnit = { icon = "", hl = "@text.uri" },
37-
ClassFile = { icon = "", hl = "@text.uri" },
38-
Container = { icon = "󰆧", hl = "@text.uri" },
39-
Folder = { icon = "󰉋", hl = "@method" },
40-
File = { icon = "󰈙", hl = "@method" },
41-
42-
CLASS = { icon = "󰠱", hl = "@class" },
43-
ENUM = { icon = "", hl = "@enum" },
44-
INTERFACE = { icon = "", hl = "@interface" },
45-
JAR = { icon = "", hl = "@conditional" },
46-
},
47-
symbol_blacklist = {},
48-
},
2+
async = false,
3+
jdtls_name = "jdtls",
4+
options = {
5+
show_guides = true,
6+
show_path_details = true,
7+
auto_close = false,
8+
width = 32,
9+
show_numbers = false,
10+
show_relative_numbers = false,
11+
preview_bg_highlight = "Pmenu",
12+
winblend = 0,
13+
fold_markers = { "", "" },
14+
position = "right",
15+
wrap = false,
16+
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",
25+
},
26+
symbols = {
27+
CLASS = { icon = "󰠱", hl = "@class" },
28+
ENUM = { icon = "", hl = "@enum" },
29+
INTERFACE = { icon = "", hl = "@interface" },
30+
JAR = { icon = "", hl = "@conditional" },
31+
},
32+
symbol_blacklist = {},
33+
},
4934
}
5035
M.setup = function(config)
51-
if config then
52-
M = vim.tbl_extend("force", M, config)
53-
end
36+
if config then
37+
M = vim.tbl_extend("force", M, config)
38+
end
5439
end
5540

5641
function M.has_numbers()
57-
return M.options.show_numbers or M.options.show_relative_numbers
42+
return M.options.show_numbers or M.options.show_relative_numbers
5843
end
5944
local function has_value(tab, val)
60-
for _, value in ipairs(tab) do
61-
if value == val then
62-
return true
63-
end
64-
end
45+
for _, value in ipairs(tab) do
46+
if value == val then
47+
return true
48+
end
49+
end
6550

66-
return false
51+
return false
6752
end
6853

6954
function M.is_symbol_blacklisted(kind)
70-
if kind == nil then
71-
return false
72-
end
73-
return has_value(M.options.symbol_blacklist, kind)
55+
if kind == nil then
56+
return false
57+
end
58+
return has_value(M.options.symbol_blacklist, kind)
7459
end
7560

7661
function M.show_help()
77-
print("Current keymaps:")
78-
print(vim.inspect(M.options.keymaps))
62+
print("Current keymaps:")
63+
print(vim.inspect(M.options.keymaps))
7964
end
8065

8166
function M.get_split_command()
82-
if M.options.position == "left" then
83-
return "topleft vs"
84-
else
85-
return "botright vs"
86-
end
67+
if M.options.position == "left" then
68+
return "topleft vs"
69+
else
70+
return "botright vs"
71+
end
8772
end
8873
function M.get_window_width()
89-
if M.options.relative_width then
90-
return math.ceil(vim.o.columns * (M.options.width / 100))
91-
else
92-
return M.options.width
93-
end
74+
return M.options.width
9475
end
9576
return M

lua/java-deps/debog.lua

Lines changed: 0 additions & 18 deletions
This file was deleted.

lua/java-deps/highlight.lua

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
local M = {
2+
items = {
3+
nsid = vim.api.nvim_create_namespace("java-deps-items"),
4+
highlights = {
5+
LineGuide = { link = "Comment" },
6+
},
7+
},
8+
vt = {
9+
nsid = vim.api.nvim_create_namespace("java-deps-virt-text"),
10+
highlights = {
11+
Comment = { link = "Comment" },
12+
},
13+
},
14+
}
15+
16+
M.init_hl = function()
17+
local ihlf = function(hls)
18+
for name, hl in pairs(hls.highlights) do
19+
if vim.fn.hlexists("JavaDeps" .. name) == 0 then
20+
vim.api.nvim_set_hl(hls.nsid, "JavaDeps" .. name, { link = hl.link })
21+
end
22+
end
23+
end
24+
ihlf(M.items)
25+
ihlf(M.vt)
26+
end
27+
M.clear_all_ns = function(bufnr)
28+
vim.api.nvim_buf_clear_namespace(bufnr, -1, 0, -1)
29+
end
30+
31+
M.clear_virt_text = function(bufnr)
32+
vim.api.nvim_buf_clear_namespace(bufnr, M.vt.nsid, 0, -1)
33+
end
34+
35+
---@param bufnr number
36+
---@param hl_info table
37+
---@param nodes TreeItem[]
38+
function M.add_icon_highlights(bufnr, hl_info, nodes)
39+
for _, line_hl in ipairs(hl_info) do
40+
local line, hl_start, hl_end, hl_type = unpack(line_hl)
41+
vim.api.nvim_buf_add_highlight(bufnr, M.items.nsid, hl_type, line - 1, hl_start, hl_end)
42+
end
43+
end
44+
45+
return M
Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ local config = require("java-deps.config")
33
local View = require("java-deps.view")
44
local provider = require("java-deps.views.data_provider")
55
local writer = require("java-deps.writer")
6+
local mappings = require("java-deps.mappings")
7+
local highlight = require("java-deps.highlight")
8+
-- debug
9+
vim.g.java_deps = {
10+
debug = true,
11+
}
612

713
local M = {
814
view = nil,
@@ -22,8 +28,12 @@ local function handle_projects()
2228
local data = provider.DataProvider:new(uri, M.state.current_path)
2329
data:revealPaths()
2430
local result = data:flattenTree()
25-
vim.print(vim.inspect(result))
31+
local idx, item = data:findCurrentNode(result)
2632
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
2737
end
2838

2939
function M.toggle_outline()
@@ -39,12 +49,19 @@ function M.open_outline()
3949
M.state.code_buf = vim.api.nvim_get_current_buf()
4050
M.state.current_path = vim.uri_from_bufnr(M.state.code_buf)
4151
M.view:open()
42-
local wf = coroutine.wrap(function()
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
4364
handle_projects()
44-
end)
45-
local ok, err = pcall(wf)
46-
if not ok then
47-
print(err.message or vim.inspect(err))
4865
end
4966
end
5067
end
@@ -56,6 +73,7 @@ end
5673
function M.setup(opts)
5774
config.setup(opts)
5875
M.view = View:new()
76+
highlight.init_hl()
5977
end
6078

6179
return M

lua/java-deps/java/hieararchicalPackageNodeData.lua

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ local M = {}
66
---@class HierarchicalPackageNodeData: INodeData
77
---@field displayName string
88
---@field name string
9-
---@field nodeData? INodeData
9+
---@field _nodeData? INodeData
1010
---@field children HierarchicalPackageNodeData[]
1111
local HierarchicalPackageNodeData = INodeData:new()
1212
HierarchicalPackageNodeData.__index = HierarchicalPackageNodeData
@@ -28,59 +28,76 @@ function HierarchicalPackageNodeData:compressTree()
2828
local child = self.children[1]
2929
self.name = self.name .. "." .. child.displayName
3030
self.displayName = self.displayName .. "." .. child.displayName
31-
self.children = self.children
32-
self.nodeData = self.nodeData
31+
self.children = child.children
32+
self._nodeData = child._nodeData
3333
end
3434
for _, child in ipairs(self.children) do
3535
child:compressTree()
3636
end
3737
end
3838
---@param packages string[]
39-
---@param _nodeData INodeData
40-
function HierarchicalPackageNodeData:addSubPackage(packages, _nodeData)
39+
---@param nodeData INodeData
40+
function HierarchicalPackageNodeData:addSubPackage(packages, nodeData)
4141
if #packages == 0 then
42-
self.nodeData = _nodeData
43-
-- TODO
42+
self._nodeData = nodeData
4443
return
4544
end
4645
local subPackageDisplayName = table.remove(packages, 1)
47-
local childNode = nil
46+
---@type HierarchicalPackageNodeData?
47+
local childNode
4848
for _, child in ipairs(self.children) do
4949
if child.displayName == subPackageDisplayName then
5050
childNode = child
5151
break
5252
end
5353
end
5454
if childNode then
55-
childNode:addSubPackage(packages, _nodeData)
55+
childNode:addSubPackage(packages, nodeData)
5656
else
5757
local newNode = HierarchicalPackageNodeData:new(subPackageDisplayName, self.name)
58-
newNode:addSubPackage(packages, _nodeData)
58+
newNode:addSubPackage(packages, nodeData)
5959
table.insert(self.children, newNode)
6060
end
6161
end
62-
function HierarchicalPackageNodeData:get_getUri()
63-
return self.nodeData and self.nodeData.uri
62+
63+
function HierarchicalPackageNodeData:isPackage()
64+
return self._nodeData ~= nil
6465
end
65-
function HierarchicalPackageNodeData:get_moduleName()
66-
return self.nodeData and self.nodeData.moduleName
66+
67+
function HierarchicalPackageNodeData:getDisplayName()
68+
return self.displayName
6769
end
6870

69-
function HierarchicalPackageNodeData:get_path()
70-
return self.nodeData and self.nodeData.path
71+
function HierarchicalPackageNodeData:getName()
72+
return self.name
73+
end
74+
function HierarchicalPackageNodeData:getModuleName()
75+
return self._nodeData and self._nodeData.moduleName
76+
end
77+
function HierarchicalPackageNodeData:getPath()
78+
return self._nodeData and self._nodeData.path
7179
end
7280

73-
function HierarchicalPackageNodeData:get_kind()
74-
return self.nodeData and self.nodeData.kind or NodeKind.Package
81+
function HierarchicalPackageNodeData:getHandlerIdentifier()
82+
return self._nodeData and self._nodeData.handlerIdentifier
7583
end
7684

77-
function HierarchicalPackageNodeData:isPackage()
78-
return self.nodeData ~= nil
85+
function HierarchicalPackageNodeData:getUri()
86+
return self._nodeData and self._nodeData.uri
7987
end
8088

81-
function HierarchicalPackageNodeData:handlerIdentifier()
82-
return self.nodeData and self.nodeData.handlerIdentifier
89+
function HierarchicalPackageNodeData:getKind()
90+
return self._nodeData and self._nodeData.kind
8391
end
92+
93+
function HierarchicalPackageNodeData:getChildren()
94+
return self.children
95+
end
96+
97+
function HierarchicalPackageNodeData:getMetaData()
98+
return self._nodeData and self._nodeData.metaData
99+
end
100+
84101
M.HierarchicalPackageNodeData = HierarchicalPackageNodeData
85102

86103
---@param packageList INodeData[]

0 commit comments

Comments
 (0)