-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinternal.lua
More file actions
67 lines (59 loc) · 1.7 KB
/
Copy pathinternal.lua
File metadata and controls
67 lines (59 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
local M = {}
local ts = vim.treesitter
local store = require("css-angular.store")
local query = require("css-angular.querys").internal_selectors
local cmp = require("cmp")
local config = require("css-angular.config").config
---@param bufnr number
M.init = function(bufnr, file_name)
vim.print(file_name)
local selectors = store.get(bufnr, "selectors") or {
classes = {},
ids = {},
}
local seen_classes = {}
local seen_ids = {}
-- Populate seen selectors to avoid duplicates
for _, class in ipairs(selectors.classes) do
seen_classes[class.label] = true
end
for _, id in ipairs(selectors.ids) do
seen_ids[id.label] = true
end
local parser = ts.get_parser(bufnr, config.style_extention)
local parse = parser:parse()
local root = parse[1]:root()
local qp = ts.query.parse(config.style_extention, query)
vim.cmd('echoerr "error"')
for _, match, _ in qp:iter_matches(root, bufnr, 0, -1, { all = true }) do
for _, nodes in pairs(match) do
for _, node in ipairs(nodes) do
if node:type() == "id_name" then
local val = ts.get_node_text(node, bufnr)
if not seen_ids[val] then
seen_ids[val] = true
table.insert(selectors.ids, {
label = val,
kind = cmp.lsp.CompletionItemKind.Enum,
source = file_name,
provider = "Internal",
})
end
elseif node:type() == "class_name" then
local val = ts.get_node_text(node, bufnr)
if not seen_classes[val] then
seen_classes[val] = true
table.insert(selectors.classes, {
label = val,
kind = cmp.lsp.CompletionItemKind.Enum,
source = file_name,
provider = "Internal",
})
end
end
end
end
end
store.set(bufnr, "selectors", selectors)
end
return M