Skip to content

async fast minimalist plugin make format easy in neovim

License

Notifications You must be signed in to change notification settings

maximyurevich/guard.nvim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

guard.nvim

Async formatting and linting utility for neovim.

Features

  • Blazingly fast
  • Async using coroutine and luv spawn
  • Builtin support for popular formatters and linters
  • Easy configuration for custom tools
  • Light-weight

Usage

Use any plugin manager you like. Guard is configured as follows:

local ft = require('guard.filetype')

ft('lang'):fmt('format-tool-1')
       :append('format-tool-2')
       :lint('lint-tool-1')
       :append('lint-tool-2')

-- Call setup() LAST!
require('guard').setup({
    -- the only options for the setup function
    fmt_on_save = true,
    -- Use lsp if no formatter was defined for this filetype
    lsp_as_default_formatter = false,
})
  • Use GuardFmt to manually call format, when there is a visual selection only the selection is formatted.
  • GuardDisable disables auto format for the current buffer, you can also GuardDisable 16 (the buffer number)
  • Use GuardEnable to re-enable auto format, usage is the same as GuardDisable

Example Configuration

Format c files with clang-format and lint with clang-tidy:

ft('c'):fmt('clang-format')
       :lint('clang-tidy')

Or use lsp to format go files first, then format with golines, then lint with golangci:

ft('go'):fmt('lsp')
        :append('golines')
        :lint('golangci')

Register multiple filetypes to a single linter or formatter:

ft('typescript,javascript,typescriptreact'):fmt('prettier')

Custom Configuration

Easily configure your custom formatter if not in the defaults:

{
    cmd              -- string: tool command
    args             -- table: command arugments
    fname            -- string: insert filename to args tail
    stdin            -- boolean: pass buffer contents into stdin
    timeout          -- integer
    ignore_pattern   -- table: ignore run format when pattern match
    ignore_error     -- boolean: when has lsp error ignore format
    find             -- string: format if the file is found in the lsp root dir
    env              -- table: environment variables passed to cmd (key value pair)

    --special
    fn       -- function: if fn is set other field will not take effect
}

For example, format your assembly with asmfmt:

ft('asm'):fmt({
    cmd = 'asmfmt',
    stdin = true
})

Consult the builtin tools if needed.

Supported Tools

Formatters

Linters

Troubleshooting

If guard does not auto format on save, run checkhealth first.

License MIT

About

async fast minimalist plugin make format easy in neovim

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 100.0%