refactor: move default language_server and formatter config to file_type_lsp.zig
From flow-syntax commit 410d19e633f237cd1602175450bd7d3bb03a1898.
This commit is contained in:
parent
dad954da1a
commit
cc3ac7e58d
2 changed files with 266 additions and 2 deletions
|
@ -23,6 +23,7 @@ pub const default = struct {
|
|||
pub const folder_icon = "";
|
||||
|
||||
fn from_file_type(file_type: syntax.FileType) @This() {
|
||||
const lsp_defaults: LspDefaults = static_file_type_lsp_defaults.get(file_type.name) orelse .{};
|
||||
return .{
|
||||
.name = file_type.name,
|
||||
.color = file_type.color,
|
||||
|
@ -33,8 +34,8 @@ fn from_file_type(file_type: syntax.FileType) @This() {
|
|||
.first_line_matches_content = if (file_type.first_line_matches) |flm| flm.content else null,
|
||||
.parser = file_type.name,
|
||||
.comment = file_type.comment,
|
||||
.formatter = file_type.formatter,
|
||||
.language_server = file_type.language_server,
|
||||
.formatter = lsp_defaults.formatter,
|
||||
.language_server = lsp_defaults.language_server,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -199,6 +200,46 @@ pub fn create_syntax_guess_file_type(
|
|||
return create_syntax(file_type, allocator, query_cache);
|
||||
}
|
||||
|
||||
const static_file_type_lsp_defaults_list = load_file_type_lsp_defaults(@import("file_type_lsp.zig"));
|
||||
const static_file_type_lsp_defaults = std.StaticStringMap(LspDefaults).initComptime(static_file_type_lsp_defaults_list);
|
||||
|
||||
const LspDefaults = struct {
|
||||
formatter: ?[]const []const u8 = null,
|
||||
language_server: ?[]const []const u8 = null,
|
||||
};
|
||||
const ListEntry = struct { []const u8, LspDefaults };
|
||||
|
||||
fn load_file_type_lsp_defaults(comptime Namespace: type) []const ListEntry {
|
||||
comptime switch (@typeInfo(Namespace)) {
|
||||
.@"struct" => |info| {
|
||||
var count = 0;
|
||||
for (info.decls) |_| count += 1;
|
||||
var construct_types: [count]ListEntry = undefined;
|
||||
var i = 0;
|
||||
for (info.decls) |decl| {
|
||||
const lang = decl.name;
|
||||
const args = @field(Namespace, lang);
|
||||
construct_types[i] = .{ lang, .{
|
||||
.formatter = if (@hasField(@TypeOf(args), "formatter")) vec(args.formatter) else null,
|
||||
.language_server = if (@hasField(@TypeOf(args), "language_server")) vec(args.language_server) else null,
|
||||
} };
|
||||
i += 1;
|
||||
}
|
||||
const types = construct_types;
|
||||
return &types;
|
||||
},
|
||||
else => @compileError("expected tuple or struct type"),
|
||||
};
|
||||
}
|
||||
|
||||
fn vec(comptime args: anytype) []const []const u8 {
|
||||
var cmd: []const []const u8 = &[_][]const u8{};
|
||||
inline for (args) |arg| {
|
||||
cmd = cmd ++ [_][]const u8{arg};
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
|
||||
const syntax = @import("syntax");
|
||||
const std = @import("std");
|
||||
const root = @import("root");
|
||||
|
|
223
src/file_type_lsp.zig
Normal file
223
src/file_type_lsp.zig
Normal file
|
@ -0,0 +1,223 @@
|
|||
pub const agda = .{};
|
||||
|
||||
pub const astro = .{
|
||||
.language_server = .{ "astro-ls", "--stdio" },
|
||||
};
|
||||
|
||||
pub const bash = .{
|
||||
.language_server = .{ "bash-language-server", "start" },
|
||||
.formatter = .{ "shfmt", "--indent", "4" },
|
||||
};
|
||||
|
||||
pub const c = .{
|
||||
.language_server = .{"clangd"},
|
||||
.formatter = .{"clang-format"},
|
||||
};
|
||||
|
||||
pub const @"c-sharp" = .{
|
||||
.language_server = .{ "OmniSharp", "-lsp" },
|
||||
.formatter = .{ "csharpier", "format" },
|
||||
};
|
||||
|
||||
pub const conf = .{};
|
||||
|
||||
pub const cmake = .{
|
||||
.language_server = .{"cmake-language-server"},
|
||||
.formatter = .{"cmake-format"},
|
||||
};
|
||||
|
||||
pub const cpp = .{
|
||||
.language_server = .{"clangd"},
|
||||
.formatter = .{"clang-format"},
|
||||
};
|
||||
|
||||
pub const css = .{
|
||||
.language_server = .{ "vscode-css-language-server", "--stdio" },
|
||||
};
|
||||
|
||||
pub const diff = .{};
|
||||
|
||||
pub const dockerfile = .{};
|
||||
|
||||
pub const dtd = .{};
|
||||
|
||||
pub const elixir = .{
|
||||
.language_server = .{"elixir-ls"},
|
||||
.formatter = .{ "mix", "format", "-" },
|
||||
};
|
||||
|
||||
pub const fish = .{};
|
||||
|
||||
pub const @"git-rebase" = .{};
|
||||
|
||||
pub const gitcommit = .{};
|
||||
|
||||
pub const gleam = .{
|
||||
.language_server = .{ "gleam", "lsp" },
|
||||
.formatter = .{ "gleam", "format", "--stdin" },
|
||||
};
|
||||
|
||||
pub const go = .{
|
||||
.language_server = .{"gopls"},
|
||||
.formatter = .{"gofmt"},
|
||||
};
|
||||
|
||||
pub const hare = .{};
|
||||
|
||||
pub const haskell = .{
|
||||
.language_server = .{ "haskell-language-server-wrapper", "lsp" },
|
||||
};
|
||||
|
||||
pub const html = .{
|
||||
.language_server = .{ "superhtml", "lsp" }, // https://github.com/kristoff-it/super-html.git
|
||||
.formatter = .{ "superhtml", "fmt", "--stdin" },
|
||||
};
|
||||
|
||||
pub const superhtml = .{
|
||||
.language_server = .{ "superhtml", "lsp" },
|
||||
.formatter = .{ "superhtml", "fmt", "--stdin-super" },
|
||||
};
|
||||
|
||||
pub const hurl = .{};
|
||||
|
||||
pub const java = .{};
|
||||
|
||||
pub const javascript = .{
|
||||
.language_server = .{ "typescript-language-server", "--stdio" },
|
||||
.formatter = .{ "prettier", "--parser", "typescript" },
|
||||
};
|
||||
|
||||
pub const json = .{
|
||||
.language_server = .{ "vscode-json-language-server", "--stdio" },
|
||||
.formatter = .{ "prettier", "--parser", "json" },
|
||||
};
|
||||
|
||||
pub const julia = .{
|
||||
.language_server = .{ "julia", "-e", "using LanguageServer; runserver()" },
|
||||
.formatter = .{ "julia", "-e", "using JuliaFormatter; print(format_text(read(stdin, String)))" },
|
||||
};
|
||||
|
||||
pub const kdl = .{};
|
||||
|
||||
pub const lua = .{
|
||||
.language_server = .{"lua-lsp"},
|
||||
};
|
||||
|
||||
pub const mail = .{};
|
||||
|
||||
pub const make = .{};
|
||||
|
||||
pub const markdown = .{
|
||||
.language_server = .{ "marksman", "server" },
|
||||
.formatter = .{ "prettier", "--parser", "markdown" },
|
||||
};
|
||||
|
||||
pub const @"markdown-inline" = .{};
|
||||
|
||||
pub const nasm = .{};
|
||||
|
||||
pub const nim = .{
|
||||
.language_server = .{"nimlangserver"},
|
||||
};
|
||||
|
||||
pub const nimble = .{};
|
||||
|
||||
pub const ninja = .{};
|
||||
|
||||
pub const nix = .{
|
||||
.language_server = .{"nixd"},
|
||||
.formatter = .{"alejandra"},
|
||||
};
|
||||
|
||||
pub const nu = .{
|
||||
.language_server = .{ "nu", "--lsp" },
|
||||
};
|
||||
|
||||
pub const ocaml = .{
|
||||
.language_server = .{ "ocamllsp", "--fallback-read-dot-merlin" },
|
||||
.formatter = .{ "ocamlformat", "--profile=ocamlformat", "-" },
|
||||
};
|
||||
|
||||
pub const odin = .{
|
||||
.language_server = .{"ols"},
|
||||
.formatter = .{ "odinfmt", "-stdin" },
|
||||
};
|
||||
|
||||
pub const openscad = .{
|
||||
.language_server = .{"openscad-lsp"},
|
||||
};
|
||||
|
||||
pub const org = .{};
|
||||
|
||||
pub const php = .{
|
||||
.language_server = .{ "intelephense", "--stdio" },
|
||||
};
|
||||
|
||||
pub const powershell = .{};
|
||||
|
||||
pub const proto = .{};
|
||||
|
||||
pub const purescript = .{};
|
||||
|
||||
pub const python = .{
|
||||
.language_server = .{"pylsp"},
|
||||
};
|
||||
|
||||
pub const regex = .{};
|
||||
|
||||
pub const rpmspec = .{};
|
||||
|
||||
pub const ruby = .{
|
||||
.language_server = .{"ruby-lsp"},
|
||||
};
|
||||
|
||||
pub const rust = .{
|
||||
.language_server = .{"rust-analyzer"},
|
||||
.formatter = .{"rustfmt"},
|
||||
};
|
||||
|
||||
pub const scheme = .{};
|
||||
|
||||
pub const sql = .{};
|
||||
|
||||
pub const @"ssh-config" = .{};
|
||||
|
||||
pub const swift = .{
|
||||
.language_server = .{"sourcekit-lsp"},
|
||||
.formatter = .{"swift-format"},
|
||||
};
|
||||
|
||||
pub const verilog = .{
|
||||
.language_server = .{"verible-verilog-ls"},
|
||||
.formatter = .{ "verible-verilog-format", "-" },
|
||||
};
|
||||
|
||||
pub const toml = .{};
|
||||
|
||||
pub const typescript = .{
|
||||
.language_server = .{ "typescript-language-server", "--stdio" },
|
||||
.formatter = .{ "prettier", "--parser", "typescript" },
|
||||
};
|
||||
|
||||
pub const typst = .{
|
||||
.language_server = .{"tinymist"},
|
||||
};
|
||||
|
||||
pub const uxntal = .{};
|
||||
|
||||
pub const vim = .{};
|
||||
|
||||
pub const xml = .{
|
||||
.formatter = .{ "xmllint", "--format", "-" },
|
||||
};
|
||||
|
||||
pub const yaml = .{};
|
||||
|
||||
pub const zig = .{
|
||||
.language_server = .{"zls"},
|
||||
.formatter = .{ "zig", "fmt", "--stdin" },
|
||||
};
|
||||
|
||||
pub const ziggy = .{};
|
||||
|
||||
pub const @"ziggy-schema" = .{};
|
Loading…
Add table
Add a link
Reference in a new issue