Skip to content

nvimdev/guard.nvim

Repository files navigation

LuaRocks GitHub Actions Workflow Status GitHub Actions Workflow Status

Async formatting and linting utility for neovim 0.10+.

Features

  • Async and blazingly fast
  • Builtin support for popular formatters and linters
  • Minimal API allowing for full customization
  • Light-weight

TLDR

help guard.nvim-tldr

  • Install with your favorite package manager
nvimdev/guard.nvim
  • Register formatters:
local ft = require('guard.filetype')
ft('c'):fmt('clang-format')
formatter-demo-nosound.mp4
  • Register linters
local ft = require('guard.filetype')
ft('lua'):lint('selene')
linter-demo-nosound.mp4
  • They can also be chained together:
local ft = require('guard.filetype')
ft('haskell'):fmt('ormolu')
             :lint('hlint')
  • Formatters and linters can also be chained:
local ft = require('guard.filetype')
ft('python'):fmt('isort')
            :append('black')
            :lint('mypy')
            :append('mypyc')
            :append('dmypy')
  • You can register the same formatter for multiple filetypes:
local ft = require('guard.filetype')
ft('typescript,javascript,typescriptreact'):fmt('prettier')
  • Lint all your files with codespell
-- this does not work with formatters
ft('*'):lint('codespell')
  • Custom formatters:
-- always use 4 spaces for c files
ft('c'):fmt({
    cmd = "clang-format",
    args = { "--style={IndentWidth: 4}" },
    stdin = true,
})

Usage

help guard.nvim-usage

Some presets can be configured via vim.g.guard_config

-- defaults
vim.g.guard_config = {
    -- format on write to buffer
    fmt_on_save = true,
    -- use lsp if no formatter was defined for this filetype
    lsp_as_default_formatter = false,
    -- whether or not to save the buffer after formatting
    save_on_fmt = true,
    -- automatic linting
    auto_lint = true,
    -- how frequently can linters be called
    lint_interval = 500
}

Here are all the Guard subcommands

Name Desc
Guard fmt Manually call format, also works with visual mode (best effort range formatting)
Guard lint Manually request for lint
Guard enable-fmt Turns auto formatting on for the current buffer
Guard disable-fmt Turns auto formatting off for the current buffer
Guard enable-lint Turns linting on for the current buffer
Guard disable-lint Turns linting off for the current buffer

Further configuration

You can easily create your own configuration that's not in guard-collection, see help guard.nvim-creating-new-configurations.

For more niche use cases, help guard.nvim-advanced-tips demonstrates how to:

  • Write your own formatting logic using the fn field.
  • Write your own linting logic using the fn field.
  • Leverage guard's autocmds to create a formatting status indicator.
  • Creating a dynamic formatter that respects neovom tab/space settings.
CUSTOMIZE.md
ADVANCED.md

About

Lightweight, fast and async formatting and linting plugin for Neovim

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Languages