Skip to content

Commit 50543d0

Browse files
committed
WIP
1 parent fe824a1 commit 50543d0

File tree

1 file changed

+22
-70
lines changed

1 file changed

+22
-70
lines changed

src/Server.zig

Lines changed: 22 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1550,7 +1550,6 @@ fn openDocumentHandler(server: *Server, _: std.mem.Allocator, notification: type
15501550
return error.InternalError;
15511551
}
15521552

1553-
try server.document_store.trigramIndexUri(notification.textDocument.uri, server.offset_encoding);
15541553
try server.document_store.openDocument(notification.textDocument.uri, notification.textDocument.text);
15551554

15561555
if (server.client_capabilities.supports_publish_diagnostics) {
@@ -1932,21 +1931,28 @@ fn selectionRangeHandler(server: *Server, arena: std.mem.Allocator, request: typ
19321931
fn workspaceSymbolHandler(server: *Server, arena: std.mem.Allocator, request: types.WorkspaceSymbolParams) Error!lsp.ResultType("workspace/symbol") {
19331932
if (request.query.len < 3) return null;
19341933

1935-
// for (server.client_capabilities.workspace_folders) |workspace_folder| {
1936-
// const path = URI.parse(arena, workspace_folder) catch return error.InternalError;
1937-
// var dir = std.fs.cwd().openDir(path, .{ .iterate = true }) catch return error.InternalError;
1938-
// defer dir.close();
1939-
1940-
// var walker = try dir.walk(arena);
1941-
// defer walker.deinit();
1942-
1943-
// while (walker.next() catch return error.InternalError) |entry| {
1944-
// if (std.mem.eql(u8, std.fs.path.extension(entry.basename), ".zig")) {
1945-
// const uri = URI.pathRelative(arena, workspace_folder, entry.path) catch return error.InternalError;
1946-
// _ = try server.document_store.getOrConstructTrigramStore(uri);
1947-
// }
1948-
// }
1949-
// }
1934+
for (server.workspaces.items) |workspace| {
1935+
const path = Uri.parse(arena, workspace.uri) catch return error.InternalError;
1936+
var dir = std.fs.cwd().openDir(path, .{ .iterate = true }) catch return error.InternalError;
1937+
defer dir.close();
1938+
1939+
var walker = try dir.walk(arena);
1940+
defer walker.deinit();
1941+
1942+
while (walker.next() catch return error.InternalError) |entry| {
1943+
if (std.mem.eql(u8, std.fs.path.extension(entry.basename), ".zig")) {
1944+
const uri = Uri.fromPath(
1945+
arena,
1946+
std.fs.path.join(arena, &.{ path, entry.path }) catch return error.InternalError,
1947+
) catch return error.InternalError;
1948+
1949+
server.document_store.trigramIndexUri(
1950+
uri,
1951+
server.offset_encoding,
1952+
) catch return error.InternalError;
1953+
}
1954+
}
1955+
}
19501956

19511957
var symbols: std.ArrayListUnmanaged(types.WorkspaceSymbol) = .empty;
19521958
var declaration_buffer: std.ArrayListUnmanaged(TrigramStore.Declaration.Index) = .empty;
@@ -1977,60 +1983,6 @@ fn workspaceSymbolHandler(server: *Server, arena: std.mem.Allocator, request: ty
19771983
}
19781984
}
19791985

1980-
// var symbols = std.ArrayListUnmanaged(types.WorkspaceSymbol){};
1981-
// var candidate_decls_buffer = std.ArrayListUnmanaged(Analyser.Declaration.Index){};
1982-
1983-
// doc_loop: for (server.document_store.trigram_stores.keys(), server.document_store.trigram_stores.values()) |uri, trigram_store| {
1984-
// const handle = server.document_store.getOrLoadHandle(uri) orelse continue;
1985-
1986-
// const tree = handle.tree;
1987-
// const doc_scope = try handle.getDocumentScope();
1988-
1989-
// for (trigrams.items) |trigram| {
1990-
// if (!trigram_store.filter.contain(@bitCast(trigram))) continue :doc_loop;
1991-
// }
1992-
1993-
// candidate_decls_buffer.clearRetainingCapacity();
1994-
1995-
// const first = trigram_store.getDeclarationsForTrigram(trigrams.items[0]) orelse continue;
1996-
1997-
// try candidate_decls_buffer.resize(arena, first.len * 2);
1998-
1999-
// var len = first.len;
2000-
2001-
// @memcpy(candidate_decls_buffer.items[0..len], first);
2002-
// @memcpy(candidate_decls_buffer.items[len..], first);
2003-
2004-
// for (trigrams.items[1..]) |trigram| {
2005-
// len = workspace_symbols.mergeIntersection(
2006-
// trigram_store.getDeclarationsForTrigram(trigram) orelse continue :doc_loop,
2007-
// candidate_decls_buffer.items[len..],
2008-
// candidate_decls_buffer.items[0..len],
2009-
// );
2010-
// candidate_decls_buffer.items.len = len * 2;
2011-
// @memcpy(candidate_decls_buffer.items[len..], candidate_decls_buffer.items[0..len]);
2012-
// }
2013-
2014-
// candidate_decls_buffer.items.len = len;
2015-
2016-
// for (candidate_decls_buffer.items) |decl_idx| {
2017-
// const decl = doc_scope.declarations.get(@intFromEnum(decl_idx));
2018-
// const name_token = decl.nameToken(tree);
2019-
2020-
// // TODO: integrate with document_symbol.zig for right kind info
2021-
// try symbols.append(arena, .{
2022-
// .name = tree.tokenSlice(name_token),
2023-
// .kind = .Variable,
2024-
// .location = .{
2025-
// .Location = .{
2026-
// .uri = handle.uri,
2027-
// .range = offsets.tokenToRange(tree, name_token, server.offset_encoding),
2028-
// },
2029-
// },
2030-
// });
2031-
// }
2032-
// }
2033-
20341986
return .{ .array_of_WorkspaceSymbol = symbols.items };
20351987
}
20361988

0 commit comments

Comments
 (0)