plugins/neotest: move to by-name

This commit is contained in:
Austin Horstman 2024-09-09 13:00:29 -05:00
parent 0f83298f2c
commit 9d323f3ec7
No known key found for this signature in database
26 changed files with 0 additions and 2 deletions

View file

@ -0,0 +1,87 @@
# List of adapter names (without the `neotest-` prefix).
# The corresponding `pkgs.vimPlugins.neotest-NAME` package has to exist.
# When adding a new adapter, update the tests accordingly:
# - Add the adapter to `all-adapters` in `tests/test-sources/plugins/neotest/default.nix`
# - Add a more complete test case in `tests/test-sources/plugins/neotest/NAME.nix`
{
bash = {
treesitter-parser = "bash";
};
dart = {
treesitter-parser = "dart";
};
deno = {
treesitter-parser = "javascript";
};
dotnet = {
treesitter-parser = "c_sharp";
};
elixir = {
treesitter-parser = "elixir";
};
foundry = {
treesitter-parser = "solidity";
};
go = {
treesitter-parser = "go";
};
golang = {
treesitter-parser = "go";
};
gradle = {
treesitter-parser = "kotlin,java";
};
gtest = {
treesitter-parser = "cpp";
};
hardhat = {
treesitter-parser = "javascript";
packageName = "hardhat-nvim";
};
haskell = {
treesitter-parser = "haskell";
};
java = {
treesitter-parser = "java";
};
jest = {
treesitter-parser = "javascript";
};
minitest = {
treesitter-parser = "ruby";
};
pest = {
treesitter-parser = "php";
};
phpunit = {
treesitter-parser = "php";
};
playwright = {
treesitter-parser = "typescript";
settingsSuffix = settingsLua: ".adapter(${settingsLua})";
};
plenary = {
treesitter-parser = "lua";
};
python = {
treesitter-parser = "python";
};
rspec = {
treesitter-parser = "ruby";
};
rust = {
treesitter-parser = "rust";
};
scala = {
treesitter-parser = "scala";
};
testthat = {
treesitter-parser = "r";
};
vitest = {
treesitter-parser = "javascript";
};
zig = {
treesitter-parser = "zig";
};
}

View file

@ -0,0 +1,62 @@
{
lib,
config,
pkgs,
...
}:
with lib;
let
inherit (lib.nixvim) mkSettingsOption toLuaObject;
supportedAdapters = import ./adapters-list.nix;
mkAdapter =
name:
{
treesitter-parser,
packageName ? "neotest-${name}",
settingsSuffix ? settingsLua: "(${settingsLua})",
}:
{
options.plugins.neotest.adapters.${name} = {
enable = mkEnableOption name;
package = lib.mkPackageOption pkgs name {
default = [
"vimPlugins"
packageName
];
};
settings = mkSettingsOption { description = "settings for the `${name}` adapter."; };
};
config =
let
cfg = config.plugins.neotest.adapters.${name};
in
mkIf cfg.enable {
extraPlugins = [ cfg.package ];
assertions = [
{
assertion = config.plugins.neotest.enable;
message = "Nixvim: you have enabled `plugins.neotest.adapters.${name}` but `plugins.neotest.enable` is `false`.";
}
];
warnings = optional (!config.plugins.treesitter.enable) ''
Nixvim (plugins.neotest.adapters.${name}): This adapter requires `treesitter` to be enabled.
You might want to set `plugins.treesitter.enable = true` and ensure that the `${props.treesitter-parser}` parser is enabled.
'';
plugins.neotest.settings.adapters =
let
settingsString = optionalString (cfg.settings != { }) (settingsSuffix (toLuaObject cfg.settings));
in
[ "require('neotest-${name}')${settingsString}" ];
};
};
in
{
imports = mapAttrsToList mkAdapter supportedAdapters;
}

View file

@ -0,0 +1,40 @@
{
lib,
...
}:
with lib;
let
inherit (lib.nixvim) mkRaw;
in
lib.nixvim.neovim-plugin.mkNeovimPlugin {
name = "neotest";
maintainers = [ maintainers.GaetanLepage ];
imports = [ ./adapters.nix ];
settingsOptions = (import ./options.nix { inherit lib; }) // {
adapters = mkOption {
type = with types; listOf strLua;
default = [ ];
apply = map mkRaw;
# NOTE: We hide this option from the documentation as users should use the top-level
# `adapters` option.
# They can still directly append raw lua code to this `settings.adapters` option.
# In this case, they are responsible for explicitly installing the manually added adapters.
visible = false;
};
};
settingsExample = {
quickfix.enabled = false;
output = {
enabled = true;
open_on_run = true;
};
output_panel = {
enabled = true;
open = "botright split | resize 15";
};
};
}

View file

@ -0,0 +1,225 @@
{ lib }:
with lib;
let
inherit (lib.nixvim) defaultNullOpts mkNullOrOption mkNullOrLuaFn;
in
{
#################################################
# CoreConfig
discovery = {
enabled = defaultNullOpts.mkBool true "Enable discovery.";
concurrent = defaultNullOpts.mkUnsignedInt 0 ''
Number of workers to parse files concurrently.
0 automatically assigns number based on CPU.
Set to 1 if experiencing lag.
'';
filter_dir = mkNullOrLuaFn ''
`fun(name: string, rel_path: string, root: string): boolean`
A function to filter directories when searching for test files.
Receives the name, path relative to project root and project root path.
'';
};
running = {
concurrent = defaultNullOpts.mkBool true ''
Run tests concurrently when an adapter provides multiple commands to run.
'';
};
default_strategy = defaultNullOpts.mkStr "integrated" ''
The default strategy.
'';
#################################################
# Config
log_level = defaultNullOpts.mkLogLevel "warn" ''
Minimum log levels.
'';
consumers = defaultNullOpts.mkAttrsOf types.strLuaFn { } ''
key: string
value: lua function
'';
icons = defaultNullOpts.mkAttrsOf (with types; either str (listOf str)) {
child_indent = "";
child_prefix = "";
collapsed = "";
expanded = "";
failed = "";
final_child_indent = " ";
final_child_prefix = "";
non_collapsible = "";
passed = "";
running = "";
running_animated = [
"/"
"|"
"\\"
"-"
"/"
"|"
"\\"
"-"
];
skipped = "";
unknown = "";
watching = "";
} "Icons used throughout the UI. Defaults use VSCode's codicons.";
highlights = defaultNullOpts.mkAttrsOf types.str {
adapter_name = "NeotestAdapterName";
border = "NeotestBorder";
dir = "NeotestDir";
expand_marker = "NeotestExpandMarker";
failed = "NeotestFailed";
file = "NeotestFile";
focused = "NeotestFocused";
indent = "NeotestIndent";
marked = "NeotestMarked";
namespace = "NeotestNamespace";
passed = "NeotestPassed";
running = "NeotestRunning";
select_win = "NeotestWinSelect";
skipped = "NeotestSkipped";
target = "NeotestTarget";
test = "NeotestTest";
unknown = "NeotestUnknown";
watching = "NeotestWatching";
} "";
floating = {
border = defaultNullOpts.mkStr "rounded" "Border style.";
max_height = defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) 0.6 ''
Max height of window as proportion of NeoVim window.
'';
max_width = defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) 0.6 ''
Max width of window as proportion of NeoVim window.
'';
options = defaultNullOpts.mkAttrsOf types.anything { } ''
Window local options to set on floating windows (e.g. winblend).
'';
};
strategies = {
integrated = {
height = defaultNullOpts.mkUnsignedInt 40 ''
height to pass to the pty running commands.
'';
width = defaultNullOpts.mkUnsignedInt 120 ''
Width to pass to the pty running commands.
'';
};
};
summary = {
enabled = defaultNullOpts.mkBool true "Whether to enable summary.";
animated = defaultNullOpts.mkBool true "Enable/disable animation of icons.";
follow = defaultNullOpts.mkBool true "Expand user's current file.";
expandErrors = defaultNullOpts.mkBool true "Expand all failed positions.";
mappings = defaultNullOpts.mkAttrsOf (with types; either str (listOf str)) {
attach = "a";
clear_marked = "M";
clear_target = "T";
debug = "d";
debug_marked = "D";
expand = [
"<CR>"
"<2-LeftMouse>"
];
expand_all = "e";
jumpto = "i";
mark = "m";
next_failed = "J";
output = "o";
prev_failed = "K";
run = "r";
run_marked = "R";
short = "O";
stop = "u";
target = "t";
watch = "w";
} "Buffer mappings for summary window.";
open = defaultNullOpts.mkStr "botright vsplit | vertical resize 50" ''
A command or function to open a window for the summary.
Either a string or a function that returns an integer.
'';
};
output = {
enabled = defaultNullOpts.mkBool true "Enable output.";
open_on_run = defaultNullOpts.mkNullable (with types; either str bool) "short" ''
Open nearest test result after running.
'';
};
output_panel = {
enabled = defaultNullOpts.mkBool true "Enable output panel.";
open = defaultNullOpts.mkStr "botright split | resize 15" ''
A command or function to open a window for the output panel.
Either a string or a function that returns an integer.
'';
};
quickfix = {
enabled = defaultNullOpts.mkBool true "Enable quickfix.";
open = defaultNullOpts.mkNullable (with types; either bool str) false ''
Set to true to open quickfix on startup, or a function to be called when the quickfix
results are set.
'';
};
status = {
enabled = defaultNullOpts.mkBool true "Enable status.";
virtual_text = defaultNullOpts.mkBool false "Display status using virtual text.";
signs = defaultNullOpts.mkBool true "Display status using signs.";
};
state = {
enabled = defaultNullOpts.mkBool true "Enable state.";
};
watch = {
enabled = defaultNullOpts.mkBool true "Enable watch.";
symbol_queries = mkNullOrOption (with types; attrsOf (maybeRaw str)) ''
Treesitter queries or functions to capture symbols that are used for querying the LSP
server for definitions to link files.
If it is a function then the return value should be a list of node ranges.
'';
filter_path = mkNullOrLuaFn ''
`(fun(path: string, root: string): boolean)`
Returns whether the watcher should inspect a path for dependencies.
Default ignores paths not under root or common package manager directories.
'';
};
diagnostic = {
enabled = defaultNullOpts.mkBool true "Enable diagnostic.";
severity = defaultNullOpts.mkSeverity "error" ''
Diagnostic severity, one of `vim.diagnostic.severity`.
'';
};
}