Compare commits

..

No commits in common. "f830553166bbf38963413c638d9240d71a0ea8bb" and "a3051d49aa5f32d9ceab672bad52d591b8a78a8e" have entirely different histories.

6 changed files with 43 additions and 63 deletions

View file

@ -37,7 +37,7 @@ jobs:
uses: DeterminateSystems/nix-installer-action@main uses: DeterminateSystems/nix-installer-action@main
- name: Check formatting via Alejandra - name: Check formatting via Alejandra
run: nix run nixpkgs#alejandra -- --check . --exclude npins run: nix run nixpkgs#alejandra -- -c .
check-typos: check-typos:
name: "Check source tree for typos" name: "Check source tree for typos"

View file

@ -289,9 +289,8 @@
[rice-cracker-dev](https://github.com/rice-cracker-dev): [rice-cracker-dev](https://github.com/rice-cracker-dev):
- `eslint_d` now checks for configuration files to load. - `eslint_d` now checks for configuration files to load.
- Fix an error where `eslint_d` fails to load. - Fixed an error where `eslint_d` fails to load.
- Add required files support for linters under `vim.diagnostics.nvim-lint.linters.*.required_files`. - Added required files support for linters under `vim.diagnostics.nvim-lint.linters.*.required_files`.
- Add global function `nvf_lint` under `vim.diagnostics.nvim-lint.lint_function`.
[Sc3l3t0n](https://github.com/Sc3l3t0n): [Sc3l3t0n](https://github.com/Sc3l3t0n):

6
flake.lock generated
View file

@ -38,11 +38,11 @@
}, },
"mnw": { "mnw": {
"locked": { "locked": {
"lastModified": 1744592022, "lastModified": 1744497692,
"narHash": "sha256-QuWrCRiF3CUM99sgj3gXbIzB1IAVWS5IEfFHadbMA2g=", "narHash": "sha256-ikWRNR/P/aKCCySZnUfF1W0u0t6rSoJgQgKeDdCBAK8=",
"owner": "Gerg-L", "owner": "Gerg-L",
"repo": "mnw", "repo": "mnw",
"rev": "cf9e19413b6c2d995b55565cd99facf9c751b653", "rev": "c5322a2bf74c0066fd15ca35721561397a2e7eab",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -14,7 +14,7 @@
env.RUSTC_BOOTSTRAP = true; env.RUSTC_BOOTSTRAP = true;
useFetchCargoVendor = true; useFetchCargoVendor = true;
cargoHash = "sha256-MWElqh7ENJ6CbLOnvz0DsP5YYu+e+y12GSUOfW1IKGU="; cargoHash = "sha256-F1wh/TjYoiIbDY3J/prVF367MKk3vwM7LqOpRobOs7I=";
nativeBuildInputs = [gitMinimal]; nativeBuildInputs = [gitMinimal];
}; };

View file

@ -29,7 +29,40 @@ in {
end end
end end
nvf_lint = ${toLuaObject cfg.lint_function} function nvf_lint(buf)
local ft = vim.api.nvim_get_option_value("filetype", { buf = buf })
local linters = require("lint").linters
local linters_from_ft = require("lint").linters_by_ft[ft]
-- if no linter is configured for this filetype, stops linting
if linters_from_ft == nil then return end
for _, name in ipairs(linters_from_ft) do
local linter = linters[name]
assert(linter, 'Linter with name `' .. name .. '` not available')
if type(linter) == "function" then
linter = linter()
end
-- for require("lint").lint() to work, linter.name must be set
linter.name = linter.name or name
local cwd = linter.required_files
-- if no configuration files are configured, lint
if cwd == nil then
require("lint").lint(linter)
else
-- if configuration files are configured and present in the project, lint
for _, fn in ipairs(cwd) do
local path = vim.fs.joinpath(linter.cwd or vim.fn.getcwd(), fn);
if vim.uv.fs_stat(path) then
require("lint").lint(linter)
break
end
end
end
end
end
''; '';
}; };
}) })

View file

@ -1,8 +1,7 @@
{lib, ...}: let {lib, ...}: let
inherit (lib.options) mkOption mkEnableOption literalExpression; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) nullOr attrsOf listOf str either submodule bool enum; inherit (lib.types) nullOr attrsOf listOf str either submodule bool enum;
inherit (lib.nvim.types) luaInline; inherit (lib.nvim.types) luaInline;
inherit (lib.generators) mkLuaInline;
linterType = submodule { linterType = submodule {
options = { options = {
@ -74,11 +73,8 @@
required_files = mkOption { required_files = mkOption {
type = nullOr (listOf str); type = nullOr (listOf str);
default = null; default = null;
description = "Required files to lint. These files must exist relative to the cwd of the linter or else this linter will be skipped";
example = ["eslint.config.js"]; example = ["eslint.config.js"];
description = ''
Required files to lint. These files must exist relative to the cwd
of the linter or else this linter will be skipped
'';
}; };
}; };
}; };
@ -128,53 +124,5 @@ in {
}; };
lint_after_save = mkEnableOption "autocmd to lint after each save" // {default = true;}; lint_after_save = mkEnableOption "autocmd to lint after each save" // {default = true;};
lint_function = mkOption {
type = luaInline;
default = mkLuaInline ''
function(buf)
local ft = vim.api.nvim_get_option_value("filetype", { buf = buf })
local linters = require("lint").linters
local linters_from_ft = require("lint").linters_by_ft[ft]
-- if no linter is configured for this filetype, stops linting
if linters_from_ft == nil then return end
for _, name in ipairs(linters_from_ft) do
local linter = linters[name]
assert(linter, 'Linter with name `' .. name .. '` not available')
if type(linter) == "function" then
linter = linter()
end
-- for require("lint").lint() to work, linter.name must be set
linter.name = linter.name or name
local cwd = linter.required_files
-- if no configuration files are configured, lint
if cwd == nil then
require("lint").lint(linter)
else
-- if configuration files are configured and present in the project, lint
for _, fn in ipairs(cwd) do
local path = vim.fs.joinpath(linter.cwd or vim.fn.getcwd(), fn);
if vim.uv.fs_stat(path) then
require("lint").lint(linter)
break
end
end
end
end
end
'';
example = literalExpression ''
mkLuaInline '''
function(buf)
require("lint").try_lint()
end
'''
'';
description = "Define the global function nvf_lint which is used by nvf to lint.";
};
}; };
} }