{"id":13409451,"url":"https://github.com/mfussenegger/nvim-lint","last_synced_at":"2025-05-14T01:02:21.576Z","repository":{"id":37039442,"uuid":"338788079","full_name":"mfussenegger/nvim-lint","owner":"mfussenegger","description":"An asynchronous linter plugin for Neovim complementary to the built-in Language Server Protocol support.","archived":false,"fork":false,"pushed_at":"2024-10-17T09:06:18.000Z","size":488,"stargazers_count":1994,"open_issues_count":26,"forks_count":208,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-10-29T15:37:59.847Z","etag":null,"topics":["hacktoberfest","linter","neovim","neovim-plugin","syntax-checker"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mfussenegger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-14T11:18:45.000Z","updated_at":"2024-10-29T14:25:41.000Z","dependencies_parsed_at":"2023-11-19T21:22:25.535Z","dependency_job_id":"a715a6a7-9262-4c71-b064-49f8f5966c2b","html_url":"https://github.com/mfussenegger/nvim-lint","commit_stats":{"total_commits":423,"total_committers":194,"mean_commits":"2.1804123711340204","dds":0.7446808510638299,"last_synced_commit":"f707b3ae50417067fa63fdfe179b0bff6b380da1"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfussenegger%2Fnvim-lint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfussenegger%2Fnvim-lint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfussenegger%2Fnvim-lint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfussenegger%2Fnvim-lint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mfussenegger","download_url":"https://codeload.github.com/mfussenegger/nvim-lint/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248243497,"owners_count":21071054,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","linter","neovim","neovim-plugin","syntax-checker"],"created_at":"2024-07-30T20:01:00.930Z","updated_at":"2025-05-14T01:02:21.559Z","avatar_url":"https://github.com/mfussenegger.png","language":"Lua","funding_links":[],"categories":["LSP","Lua","neovim"],"sub_categories":["(requires Neovim 0.5)"],"readme":"# nvim-lint\n\nAn asynchronous linter plugin for Neovim (\u003e= 0.9.5) complementary to the\nbuilt-in Language Server Protocol support.\n\n## Motivation \u0026 Goals\n\nWith [ale][1] we already got an asynchronous linter, why write yet another one?\n\nBecause [ale][1] also includes its own language server client.\n\n`nvim-lint` instead has a more narrow scope: It spawns linters, parses their\noutput, and reports the results via the `vim.diagnostic` module.\n\n`nvim-lint` complements the built-in language server client for languages where\nthere are no language servers, or where standalone linters provide better\nresults.\n\n## Installation\n\n- Requires Neovim \u003e= 0.9.5\n- `nvim-lint` is a regular plugin and can be installed via the `:h packages`\n  mechanism or via a plugin manager.\n\nFor example:\n\n```bash\ngit clone \\\n    https://github.com/mfussenegger/nvim-lint.git\n    ~/.config/nvim/pack/plugins/start/nvim-lint\n```\n\n- If using [vim-plug][3]: `Plug 'mfussenegger/nvim-lint'`\n- If using [packer.nvim][4]: `use 'mfussenegger/nvim-lint'`\n\n\n## Usage\n\nConfigure the linters you want to run per file type. For example:\n\n```lua\nrequire('lint').linters_by_ft = {\n  markdown = {'vale'},\n}\n```\n\nTo get the `filetype` of a buffer you can run `:= vim.bo.filetype`.\nThe `filetype` can also be a compound `filetype`. For example, if you have a buffer\nwith a `filetype` like `yaml.ghaction`, you can use either `ghaction`, `yaml` or\nthe full `yaml.ghaction` as key in the `linters_by_ft` table and the linter\nwill be picked up in that buffer. This is useful for linters like\n[actionlint][actionlint] in combination with `vim.filetype` patterns like\n`[\".*/.github/workflows/.*%.yml\"] = \"yaml.ghaction\",`\n\n\nThen setup a `autocmd` to trigger linting. For example:\n\n```vimL\nau BufWritePost * lua require('lint').try_lint()\n```\n\nor with Lua auto commands:\n\n```lua\nvim.api.nvim_create_autocmd({ \"BufWritePost\" }, {\n  callback = function()\n\n    -- try_lint without arguments runs the linters defined in `linters_by_ft`\n    -- for the current filetype\n    require(\"lint\").try_lint()\n\n    -- You can call `try_lint` with a linter name or a list of names to always\n    -- run specific linters, independent of the `linters_by_ft` configuration\n    require(\"lint\").try_lint(\"cspell\")\n  end,\n})\n```\n\nSome linters require a file to be saved to disk, others support linting `stdin`\ninput. For such linters you could also define a more aggressive `autocmd`, for\nexample on the `InsertLeave` or `TextChanged` events.\n\n\nIf you want to customize how the diagnostics are displayed, read `:help\nvim.diagnostic.config`.\n\n\n## Available Linters\n\nThere is a generic linter called `compiler` that uses the `makeprg` and\n`errorformat` options of the current buffer.\n\nOther dedicated linters that are built-in are:\n\n| Tool                                   | Linter name            |\n| -------------------------------------- | ---------------------- |\n| Set via `makeprg`                      | `compiler`             |\n| [actionlint][actionlint]               | `actionlint`           |\n| [alex][alex]                           | `alex`                 |\n| [ameba][ameba]                         | `ameba`                |\n| [ansible-lint][ansible-lint]           | `ansible_lint`         |\n| [bandit][bandit]                       | `bandit`               |\n| [bash][bash]                           | `bash`                 |\n| [bean-check][bean-check]               | `bean_check`           |\n| [biomejs][biomejs]                     | `biomejs`              |\n| [blocklint][blocklint]                 | `blocklint`            |\n| [buf_lint][buf_lint]                   | `buf_lint`             |\n| [buildifier][buildifier]               | `buildifier`           |\n| [cfn-lint][cfn-lint]                   | `cfn_lint`             |\n| [cfn_nag][cfn_nag]                     | `cfn_nag`              |\n| [checkmake][checkmake]                 | `checkmake`            |\n| [checkpatch.pl][checkpatch]            | `checkpatch`           |\n| [checkstyle][checkstyle]               | `checkstyle`           |\n| [chktex][20]                           | `chktex`               |\n| [clang-tidy][23]                       | `clangtidy`            |\n| [clazy][30]                            | `clazy`                |\n| [clippy][clippy]                       | `clippy`               |\n| [clj-kondo][24]                        | `clj-kondo`            |\n| [cmakelint][cmakelint]                 | `cmakelint`            |\n| [codespell][18]                        | `codespell`            |\n| [commitlint][commitlint]               | `commitlint`           |\n| [cppcheck][22]                         | `cppcheck`             |\n| [cpplint][cpplint]                     | `cpplint`              |\n| [credo][credo]                         | `credo`                |\n| [cspell][36]                           | `cspell`               |\n| [cue][cue]                             | `cue`                  |\n| [curlylint][curlylint]                 | `curlylint`            |\n| [dash][dash]                           | `dash`                 |\n| [deadnix][deadnix]                     | `deadnix`              |\n| [deno][deno]                           | `deno`                 |\n| [dmypy][dmypy]                         | `dmypy`                |\n| [DirectX Shader Compiler][dxc]         | `dxc`                  |\n| [djlint][djlint]                       | `djlint`               |\n| [dotenv-linter][dotenv-linter]         | `dotenv_linter`        |\n| [editorconfig-checker][ec]             | `editorconfig-checker` |\n| [erb-lint][erb-lint]                   | `erb_lint`             |\n| [ESLint][25]                           | `eslint`               |\n| [eslint_d][37]                         | `eslint_d`             |\n| [eugene][eugene]                       | `eugene`               |\n| [fennel][fennel]                       | `fennel`               |\n| [fish][fish]                           | `fish`                 |\n| [Flake8][13]                           | `flake8`               |\n| [flawfinder][35]                       | `flawfinder`           |\n| [fortitude][fortitude]                 | `fortitude`            |\n| [gawk][gawk]                           | `gawk`                 |\n| [gdlint (gdtoolkit)][gdlint]           | `gdlint`               |\n| [GHDL][ghdl]                           | `ghdl`                 |\n| [gitlint][gitlint]                     | `gitlint`              |\n| [glslc][glslc]                         | `glslc`                |\n| [Golangci-lint][16]                    | `golangcilint`         |\n| [hadolint][28]                         | `hadolint`             |\n| [hledger][hledger]                     | `hledger`              |\n| [hlint][32]                            | `hlint`                |\n| [htmlhint][htmlhint]                   | `htmlhint`             |\n| [HTML Tidy][12]                        | `tidy`                 |\n| [Inko][17]                             | `inko`                 |\n| [janet][janet]                         | `janet`                |\n| [joker][joker]                         | `joker`                |\n| [jshint][jshint]                       | `jshint`               |\n| [jsonlint][jsonlint]                   | `jsonlint`             |\n| [ksh][ksh]                             | `ksh`                  |\n| [ktlint][ktlint]                       | `ktlint`               |\n| [lacheck][lacheck]                     | `lacheck`              |\n| [Languagetool][5]                      | `languagetool`         |\n| [luac][luac]                           | `luac`                 |\n| [luacheck][19]                         | `luacheck`             |\n| [markdownlint][26]                     | `markdownlint`         |\n| [markdownlint-cli2][markdownlint-cli2] | `markdownlint-cli2`    |\n| [markuplint][markuplint]               | `markuplint`           |\n| [mlint][34]                            | `mlint`                |\n| [Mypy][11]                             | `mypy`                 |\n| [Nagelfar][nagelfar]                   | `nagelfar`             |\n| [Nix][nix]                             | `nix`                  |\n| [npm-groovy-lint][npm-groovy-lint]     | `npm-groovy-lint`      |\n| [oelint-adv][oelint-adv]               | `oelint-adv`           |\n| [opa_check][opa_check]                 | `opa_check`            |\n| [oxlint][oxlint]                       | `oxlint`               |\n| [perlcritic][perlcritic]               | `perlcritic`           |\n| [perlimports][perlimports]             | `perlimports`          |\n| [phpcs][phpcs]                         | `phpcs`                |\n| [phpinsights][phpinsights]             | `phpinsights`          |\n| [phpmd][phpmd]                         | `phpmd`                |\n| [php][php]                             | `php`                  |\n| [phpstan][phpstan]                     | `phpstan`              |\n| [ponyc][ponyc]                         | `pony`                 |\n| [prisma-lint][prisma-lint]             | `prisma-lint`          |\n| [proselint][proselint]                 | `proselint`            |\n| [protolint][protolint]                 | `protolint`            |\n| [psalm][psalm]                         | `psalm`                |\n| [puppet-lint][puppet-lint]             | `puppet-lint`          |\n| [pycodestyle][pcs-docs]                | `pycodestyle`          |\n| [pydocstyle][pydocstyle]               | `pydocstyle`           |\n| [Pylint][15]                           | `pylint`               |\n| [pyproject-flake8][pflake8]            | `pflake8`              |\n| [quick-lint-js][quick-lint-js]         | `quick-lint-js`        |\n| [redocly][redocly]                     | `redolcy`              |\n| [regal][regal]                         | `regal`                |\n| [Revive][14]                           | `revive`               |\n| [rflint][rflint]                       | `rflint`               |\n| [robocop][robocop]                     | `robocop`              |\n| [rpmlint][rpmlint]                     | `rpmlint`              |\n| [RPM][rpm]                             | `rpmspec`              |\n| [rstcheck][rstcheck]                   | `rstcheck`             |\n| [rstlint][rstlint]                     | `rstlint`              |\n| [RuboCop][rubocop]                     | `rubocop`              |\n| [Ruby][ruby]                           | `ruby`                 |\n| [Ruff][ruff]                           | `ruff`                 |\n| [salt-lint][salt-lint]                 | `saltlint`             |\n| [Selene][31]                           | `selene`               |\n| [ShellCheck][10]                       | `shellcheck`           |\n| [slang][slang]                         | `slang`                |\n| [Snakemake][snakemake]                 | `snakemake`            |\n| [snyk][snyk]                           | `snyk_iac`             |\n| [Solhint][solhint]                     | `solhint`              |\n| [Spectral][spectral]                   | `spectral`             |\n| [sphinx-lint][sphinx-lint]             | `sphinx-lint`          |\n| [sqlfluff][sqlfluff]                   | `sqlfluff`             |\n| [sqruff][sqruff]                       | `sqruff`               |\n| [standardjs][standardjs]               | `standardjs`           |\n| [StandardRB][27]                       | `standardrb`           |\n| [statix check][33]                     | `statix`               |\n| [stylelint][29]                        | `stylelint`            |\n| [svlint][svlint]                       | `svlint`               |\n| [SwiftLint][swiftlint]                 | `swiftlint`            |\n| [systemd-analyze][systemd-analyze]     | `systemd-analyze`      |\n| [systemdlint][systemdlint]             | `systemdlint`          |\n| [tflint][tflint]                       | `tflint`               |\n| [tfsec][tfsec]                         | `tfsec`                |\n| [tlint][tlint]                         | `tlint`                |\n| [trivy][trivy]                         | `trivy`                |\n| [ts-standard][ts-standard]             | `ts-standard`          |\n| [twig-cs-fixer][twig-cs-fixer]         | `twig-cs-fixer`        |\n| [typos][typos]                         | `typos`                |\n| [Vala][vala-lint]                      | `vala_lint`            |\n| [Vale][8]                              | `vale`                 |\n| [Verilator][verilator]                 | `verilator`            |\n| [vint][21]                             | `vint`                 |\n| [VSG][vsg]                             | `vsg`                  |\n| [vulture][vulture]                     | `vulture`              |\n| [woke][woke]                           | `woke`                 |\n| [write-good][write-good]               | `write_good`           |\n| [yamllint][yamllint]                   | `yamllint`             |\n| [yq][yq]                               | `yq`                   |\n| [zizmor][zizmor]                       | `zizmor`               |\n| [zsh][zsh]                             | `zsh`                  |\n\n## Custom Linters\n\nYou can register custom linters by adding them to the `linters` table, but\nplease consider contributing a linter if it is missing.\n\n\n```lua\nrequire('lint').linters.your_linter_name = {\n  cmd = 'linter_cmd',\n  stdin = true, -- or false if it doesn't support content input via stdin. In that case the filename is automatically added to the arguments.\n  append_fname = true, -- Automatically append the file name to `args` if `stdin = false` (default: true)\n  args = {}, -- list of arguments. Can contain functions with zero arguments that will be evaluated once the linter is used.\n  stream = nil, -- ('stdout' | 'stderr' | 'both') configure the stream to which the linter outputs the linting result.\n  ignore_exitcode = false, -- set this to true if the linter exits with a code != 0 and that's considered normal.\n  env = nil, -- custom environment table to use with the external process. Note that this replaces the *entire* environment, it is not additive.\n  parser = your_parse_function\n}\n```\n\nInstead of declaring the linter as a table, you can also declare it as a\nfunction which returns the linter table in case you want to dynamically\ngenerate some of the properties.\n\n`your_parse_function` can be a function which takes three arguments:\n\n- `output`\n- `bufnr`\n- `linter_cwd`\n\n\nThe `output` is the output generated by the linter command.\nThe function must return a list of diagnostics as specified in `:help\ndiagnostic-structure`.\n\nYou can override the environment that the linting process runs in by setting\nthe `env` key, e.g.\n\n```lua\nenv = { [\"FOO\"] = \"bar\" }\n```\n\nNote that this completely overrides the environment, it does not add new\nenvironment variables. The one exception is that the `PATH` variable will be\npreserved if it is not explicitly set.\n\nYou can generate a parse function from a Lua pattern or from an `errorformat`\nusing the function in the `lint.parser` module:\n\n### from_errorformat\n\n```lua\nparser = require('lint.parser').from_errorformat(errorformat)\n```\n\nThe function takes two arguments: `errorformat` and `skeleton` (optional).\n\n\n### from_pattern\n\nCreates a parser function from a pattern.\n\n```lua\nparser = require('lint.parser').from_pattern(pattern, groups, severity_map, defaults, opts)\n```\n\n### pattern\n\nThe function allows to parse the linter's output using a pattern which can be either:\n\n- A Lua pattern. See `:help lua-patterns`.\n- A LPEG pattern object. See `:help vim.lpeg`.\n- A function (`fun(line: string):string[]`). It takes one parameter - a line\n  from the linter output and must return a string array with the matches. The\n  array should be empty if there was no match.\n\n\n### groups\n\nThe groups specify the result format of the pattern.\nAvailable groups:\n\n- `lnum`\n- `end_lnum`\n- `col`\n- `end_col`\n- `message`\n- `file`\n- `severity`\n- `code`\n\nThe order of the groups must match the order of the captures within the pattern.\nAn example:\n\n```lua\nlocal pattern = '[^:]+:(%d+):(%d+):(%w+):(.+)'\nlocal groups = { 'lnum', 'col', 'code', 'message' }\n```\n\nThe captures in the pattern correspond to the group at the same position.\n\n### severity\n\nA mapping from severity codes to diagnostic codes\n\n``` lua\ndefault_severity = {\n['error'] = vim.diagnostic.severity.ERROR,\n['warning'] = vim.diagnostic.severity.WARN,\n['information'] = vim.diagnostic.severity.INFO,\n['hint'] = vim.diagnostic.severity.HINT,\n}\n```\n\n### defaults\n\nThe defaults diagnostic values\n\n```lua\ndefaults = {[\"source\"] = \"mylint-name\"}\n```\n\n### opts\n\nAdditional options\n\n- `lnum_offset`: Added to `lnum`. Defaults to 0\n- `end_lnum_offset`: Added to `end_lnum`. Defaults to 0\n- `end_col_offset`: offset added to `end_col`. Defaults to `-1`, assuming\n  that the end-column position is exclusive.\n\n\n## Customize built-in linters\n\nYou can import a linter and modify its properties. An example:\n\n```lua\nlocal phpcs = require('lint').linters.phpcs\nphpcs.args = {\n  '-q',\n  -- \u003c- Add a new parameter here\n  '--report=json',\n  '-'\n}\n```\n\nYou can also post-process the diagnostics produced by a linter by wrapping it.\nFor example, to change the severity of all diagnostics created by `cspell`:\n\n```lua\nlocal lint = require(\"lint\")\nlint.linters.cspell = require(\"lint.util\").wrap(lint.linters.cspell, function(diagnostic)\n  diagnostic.severity = vim.diagnostic.severity.HINT\n  return diagnostic\nend)\n```\n\n\n## Display configuration\n\nSee `:help vim.diagnostic.config`.\n\nIf you want to have different settings per linter, you can get the `namespace`\nfor a linter via `require(\"lint\").get_namespace(\"linter_name\")`. An example:\n\n```lua\nlocal ns = require(\"lint\").get_namespace(\"my_linter_name\")\nvim.diagnostic.config({ virtual_text = true }, ns)\n```\n\n\n## Get the current running linters for your buffer\n\nYou can see which linters are running with `require(\"lint\").get_running()`.\nTo include the running linters in the status line you could format them like this:\n\n```lua\nlocal lint_progress = function()\n  local linters = require(\"lint\").get_running()\n  if #linters == 0 then\n      return \"󰦕\"\n  end\n  return \"󱉶 \" .. table.concat(linters, \", \")\nend\n```\n\n\n## Alternatives\n\n- [Ale][1]\n- [efm-langserver][6]\n- [diagnostic-languageserver][7]\n\n\n## Development ☢️\n\n\n### Run tests\n\nRunning tests requires [busted][busted].\n\nSee [neorocks][neorocks] or [Using Neovim as Lua interpreter with\nLuarocks][neovim-luarocks] for installation instructions.\n\n```bash\nbusted tests/\n```\n\n[1]: https://github.com/dense-analysis/ale\n[3]: https://github.com/junegunn/vim-plug\n[4]: https://github.com/wbthomason/packer.nvim\n[5]: https://languagetool.org/\n[6]: https://github.com/mattn/efm-langserver\n[7]: https://github.com/iamcco/diagnostic-languageserver\n[8]: https://github.com/errata-ai/vale\n[10]: https://www.shellcheck.net/\n[11]: http://mypy-lang.org/\n[12]: https://www.html-tidy.org/\n[13]: https://flake8.pycqa.org/\n[14]: https://github.com/mgechev/revive\n[15]: https://pylint.org/\n[16]: https://golangci-lint.run/\n[17]: https://inko-lang.org/\n[18]: https://github.com/codespell-project/codespell\n[19]: https://github.com/mpeterv/luacheck\n[20]: https://www.nongnu.org/chktex\n[21]: https://github.com/Vimjas/vint\n[22]: https://github.com/danmar/cppcheck/\n[23]: https://clang.llvm.org/extra/clang-tidy/\n[24]: https://github.com/clj-kondo/clj-kondo\n[25]: https://github.com/eslint/eslint\n[26]: https://github.com/DavidAnson/markdownlint\n[27]: https://github.com/testdouble/standard\n[28]: https://github.com/hadolint/hadolint\n[29]: https://github.com/stylelint/stylelint\n[30]: https://github.com/KDE/clazy\n[31]: https://github.com/Kampfkarren/selene\n[32]: https://github.com/ndmitchell/hlint\n[33]: https://github.com/NerdyPepper/statix\n[34]: https://www.mathworks.com/help/matlab/ref/mlint.html\n[35]: https://github.com/david-a-wheeler/flawfinder\n[36]: https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell\n[37]: https://github.com/mantoni/eslint_d.js\n[neorocks]: https://github.com/nvim-neorocks/neorocks\n[neovim-luarocks]: https://zignar.net/2023/01/21/using-luarocks-as-lua-interpreter-with-luarocks/\n[busted]: https://lunarmodules.github.io/busted/\n[ansible-lint]: https://docs.ansible.com/lint.html\n[pcs-docs]: https://pycodestyle.pycqa.org/en/latest/\n[pydocstyle]: https://www.pydocstyle.org/en/stable/\n[prisma-lint]: https://github.com/loop-payments/prisma-lint\n[checkpatch]: https://docs.kernel.org/dev-tools/checkpatch.html\n[checkstyle]: https://checkstyle.org/\n[jshint]: https://jshint.com/\n[jsonlint]: https://github.com/zaach/jsonlint\n[rflint]: https://github.com/boakley/robotframework-lint\n[robocop]: https://github.com/MarketSquare/robotframework-robocop\n[vsg]: https://github.com/jeremiah-c-leary/vhdl-style-guide\n[vulture]: https://github.com/jendrikseipp/vulture\n[yamllint]: https://github.com/adrienverge/yamllint\n[cpplint]: https://github.com/cpplint/cpplint\n[proselint]: https://github.com/amperser/proselint\n[protolint]: https://github.com/yoheimuta/protolint\n[cmakelint]: https://github.com/cmake-lint/cmake-lint\n[rstcheck]: https://github.com/myint/rstcheck\n[rstlint]: https://github.com/twolfson/restructuredtext-lint\n[ksh]: https://github.com/ksh93/ksh\n[ktlint]: https://github.com/pinterest/ktlint\n[php]: https://www.php.net/\n[phpcs]: https://github.com/squizlabs/PHP_CodeSniffer\n[phpinsights]: https://github.com/nunomaduro/phpinsights\n[phpmd]: https://phpmd.org/\n[phpstan]: https://phpstan.org/\n[psalm]: https://psalm.dev/\n[lacheck]: https://www.ctan.org/tex-archive/support/lacheck\n[luac]: https://www.lua.org/manual/5.1/luac.html\n[credo]: https://github.com/rrrene/credo\n[ghdl]: https://github.com/ghdl/ghdl\n[glslc]: https://github.com/google/shaderc\n[rubocop]: https://github.com/rubocop/rubocop\n[dxc]: https://github.com/microsoft/DirectXShaderCompiler\n[cfn-lint]: https://github.com/aws-cloudformation/cfn-lint\n[fennel]: https://github.com/bakpakin/Fennel\n[nix]: https://github.com/NixOS/nix\n[ruby]: https://github.com/ruby/ruby\n[npm-groovy-lint]: https://github.com/nvuillam/npm-groovy-lint\n[nagelfar]: https://nagelfar.sourceforge.net/\n[oelint-adv]: https://github.com/priv-kweihmann/oelint-adv\n[cfn_nag]: https://github.com/stelligent/cfn_nag\n[checkmake]: https://github.com/mrtazz/checkmake\n[ruff]: https://github.com/astral-sh/ruff\n[janet]: https://github.com/janet-lang/janet\n[bandit]: https://bandit.readthedocs.io/en/latest/\n[bash]: https://www.gnu.org/software/bash/\n[bean-check]: https://beancount.github.io/docs/running_beancount_and_generating_reports.html#bean-check\n[cue]: https://github.com/cue-lang/cue\n[curlylint]: https://www.curlylint.org/\n[sqlfluff]: https://github.com/sqlfluff/sqlfluff\n[sqruff]: https://github.com/quarylabs/sqruff\n[verilator]: https://verilator.org/guide/latest/\n[actionlint]: https://github.com/rhysd/actionlint\n[buf_lint]: https://github.com/bufbuild/buf\n[erb-lint]: https://github.com/shopify/erb-lint\n[tfsec]: https://github.com/aquasecurity/tfsec\n[tlint]: https://github.com/tighten/tlint\n[trivy]: https://github.com/aquasecurity/trivy\n[djlint]: https://djlint.com/\n[buildifier]: https://github.com/bazelbuild/buildtools/tree/master/buildifier\n[solhint]: https://protofire.github.io/solhint/\n[perlimports]: https://github.com/perl-ide/App-perlimports\n[perlcritic]: https://github.com/Perl-Critic/Perl-Critic\n[ponyc]: https://github.com/ponylang/ponyc\n[gdlint]: https://github.com/Scony/godot-gdscript-toolkit\n[rpmlint]: https://github.com/rpm-software-management/rpmlint\n[rpm]: https://rpm.org\n[ec]: https://github.com/editorconfig-checker/editorconfig-checker\n[dmypy]: https://mypy.readthedocs.io/en/stable/mypy_daemon.html\n[deno]: https://github.com/denoland/deno\n[standardjs]: https://standardjs.com/\n[biomejs]: https://github.com/biomejs/biome\n[commitlint]: https://commitlint.js.org\n[alex]: https://alexjs.com/\n[blocklint]: https://github.com/PrincetonUniversity/blocklint\n[woke]: https://docs.getwoke.tech/\n[write-good]: https://github.com/btford/write-good\n[dotenv-linter]: https://dotenv-linter.github.io/\n[puppet-lint]: https://github.com/puppetlabs/puppet-lint\n[snakemake]: https://snakemake.github.io\n[snyk]: https://github.com/snyk/cli\n[spectral]: https://github.com/stoplightio/spectral\n[sphinx-lint]: https://github.com/sphinx-contrib/sphinx-lint\n[gitlint]: https://github.com/jorisroovers/gitlint\n[pflake8]: https://github.com/csachs/pyproject-flake8\n[fish]: https://github.com/fish-shell/fish-shell\n[zsh]: https://www.zsh.org/\n[typos]: https://github.com/crate-ci/typos\n[joker]: https://github.com/candid82/joker\n[dash]: http://gondor.apana.org.au/~herbert/dash\n[deadnix]: https://github.com/astro/deadnix\n[salt-lint]: https://github.com/warpnet/salt-lint\n[quick-lint-js]: https://quick-lint-js.com\n[opa_check]: https://www.openpolicyagent.org/\n[oxlint]: https://oxc-project.github.io/\n[regal]: https://github.com/StyraInc/regal\n[vala-lint]: https://github.com/vala-lang/vala-lint\n[systemdlint]: https://github.com/priv-kweihmann/systemdlint\n[htmlhint]: https://htmlhint.com/\n[markuplint]: https://markuplint.dev/\n[markdownlint-cli2]: https://github.com/DavidAnson/markdownlint-cli2\n[swiftlint]: https://github.com/realm/SwiftLint\n[tflint]: https://github.com/terraform-linters/tflint\n[ameba]: https://github.com/crystal-ameba/ameba\n[eugene]: https://github.com/kaaveland/eugene\n[clippy]: https://github.com/rust-lang/rust-clippy\n[hledger]: https://hledger.org/\n[systemd-analyze]: https://man.archlinux.org/man/systemd-analyze.1\n[gawk]: https://www.gnu.org/software/gawk/\n[yq]: https://mikefarah.gitbook.io/yq\n[svlint]: https://github.com/dalance/svlint\n[slang]: https://github.com/MikePopoloski/slang\n[zizmor]: https://github.com/woodruffw/zizmor\n[ts-standard]: https://github.com/standard/ts-standard\n[twig-cs-fixer]: https://github.com/VincentLanglet/Twig-CS-Fixer\n[fortitude]: https://github.com/PlasmaFAIR/fortitude\n[redocly]: https://redocly.com/docs/cli/commands/lint\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfussenegger%2Fnvim-lint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmfussenegger%2Fnvim-lint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfussenegger%2Fnvim-lint/lists"}