feat: make --no-syntax just disable syntax highlighting and not language server support

This commit is contained in:
CJ van den Berg 2024-10-12 19:56:51 +02:00
parent 5182756f1d
commit f4dd30b1c2
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
2 changed files with 15 additions and 14 deletions

View file

@ -26,7 +26,7 @@ query: *Query,
injections: *Query,
tree: ?*treez.Tree = null,
pub fn create(file_type: *const FileType, allocator: std.mem.Allocator, content: []const u8) !*Self {
pub fn create(file_type: *const FileType, allocator: std.mem.Allocator) !*Self {
const self = try allocator.create(Self);
self.* = .{
.allocator = allocator,
@ -38,18 +38,17 @@ pub fn create(file_type: *const FileType, allocator: std.mem.Allocator, content:
};
errdefer self.destroy();
try self.parser.setLanguage(self.lang);
try self.refresh_full(content);
return self;
}
pub fn create_file_type(allocator: std.mem.Allocator, content: []const u8, lang_name: []const u8) !*Self {
pub fn create_file_type(allocator: std.mem.Allocator, lang_name: []const u8) !*Self {
const file_type = FileType.get_by_name(lang_name) orelse return error.NotFound;
return create(file_type, allocator, content);
return create(file_type, allocator);
}
pub fn create_guess_file_type(allocator: std.mem.Allocator, content: []const u8, file_path: ?[]const u8) !*Self {
const file_type = FileType.guess(file_path, content) orelse return error.NotFound;
return create(file_type, allocator, content);
return create(file_type, allocator);
}
pub fn destroy(self: *Self) void {

View file

@ -248,6 +248,7 @@ pub const Editor = struct {
} = .{},
syntax: ?*syntax = null,
syntax_no_render: bool = false,
syntax_refresh_full: bool = false,
syntax_token: usize = 0,
syntax_refresh_update: bool = false,
@ -427,7 +428,7 @@ pub const Editor = struct {
if (self.buffer) |_| try self.close();
self.buffer = new_buf;
self.syntax = if (tp.env.get().is("no-syntax")) null else syntax: {
self.syntax = syntax: {
if (new_buf.root.lines() > root_mod.max_syntax_lines)
break :syntax null;
const lang_override = tp.env.get().str("language");
@ -435,13 +436,14 @@ pub const Editor = struct {
defer content.deinit();
try new_buf.root.store(content.writer(), new_buf.file_eol_mode);
const syn = if (lang_override.len > 0)
syntax.create_file_type(self.allocator, content.items, lang_override) catch null
syntax.create_file_type(self.allocator, lang_override) catch null
else
syntax.create_guess_file_type(self.allocator, content.items, self.file_path) catch null;
if (syn) |syn_|
project_manager.did_open(file_path, syn_.file_type, self.lsp_version, try content.toOwnedSlice()) catch {};
break :syntax syn;
};
self.syntax_no_render = tp.env.get().is("no-syntax");
const ftn = if (self.syntax) |syn| syn.file_type.name else "text";
const fti = if (self.syntax) |syn| syn.file_type.icon else "🖹";
@ -3063,6 +3065,7 @@ pub const Editor = struct {
if (self.syntax_token == token)
return;
if (self.syntax) |syn| {
if (self.syntax_no_render) return;
if (!self.syntax_refresh_update)
self.syntax_refresh_full = true;
if (self.syntax_refresh_full) {
@ -3083,13 +3086,12 @@ pub const Editor = struct {
var content = std.ArrayList(u8).init(self.allocator);
defer content.deinit();
try root.store(content.writer(), eol_mode);
self.syntax = if (tp.env.get().is("no-syntax"))
null
else
syntax.create_guess_file_type(self.allocator, content.items, self.file_path) catch |e| switch (e) {
error.NotFound => null,
else => return e,
};
self.syntax = syntax.create_guess_file_type(self.allocator, content.items, self.file_path) catch |e| switch (e) {
error.NotFound => null,
else => return e,
};
if (self.syntax_no_render) return;
if (self.syntax) |syn| try syn.refresh_full(content.items);
}
}