Skip to main content

Wrapper for the `ruff` command for (neo)vim's quickfix

Project description

ruff-quickfix

Version Python Versions Poetry

GitHub Actions Workflow Status Codacy grade Codacy coverage

This is a simple wrapper for the Python linter ruff that allows it to be easily used with (neo)vim's quickfix.

Why? I like Vim's quickfix and find it more useful in some situations over using an LSP. Also this is an excuse to learn publishing.

Screenshot

Install

pipx (recommended)

Note: Normal pip works as well, though you should give pipx a try!

  • PyPi: pipx install ruff-quickfix
  • GitHub: pipx install git+https://github.com/Nealium/ruff-quickfix
  • If you don't already have ruff you include it as an "extra"
    • pipx install ruff-quickfix[ruff]
    • if zsh: pipx install ruff-quickfix\[ruff\]

Source

Clone project: git clone https://github.com/Nealium/ruff-quickfix.git

  • Pipx: pipx install .
  • Pip: pip install .
  • Poetry: poetry install
  • From Wheel:
    • poetry install
    • poetry build
    • pipx install dist/*.whl

Home Manager (nix)

Note! This will crash on the first run as the sha256 isn't real. Once it crashes the error message will provide the actual sha256 that is required.

  1. Insert items into home.nix
  2. Replace rev with the most recent commit's hash
  3. Run
  4. Replace placeholder sha256 with actual hash from error message
  5. Re-run
  6. Validate: ruff-quickfix --help
{ config, pkgs, ... }:
let
  # other stuff..

  ruff-quickfix = import
    (pkgs.fetchFromGitHub
      {
        owner = "Nealium";
        repo = "ruff-quickfix";

        # "commit hash" (can be found on GitHub)
        rev = "{commit-hash}";

        # placeholder hash (replace after 1st run)
        sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
      }
    ) { inherit pkgs; };
in
  home.packages = [
    # other packages..

    ruff-quickfix
  ]

Config

Neovim

  • Location: ~/.config/nvim/after/ftplugin/python.lua
vim.opt.makeprg = [[ruff-quickfix %]]
vim.opt.errorformat = [[%f:%l:%c:%t:%m]]

Vim

  • Linux: ~/.vim/ftplugin/python.lua
  • Windows: ~/.vimfiles/ftplugin/python.lua
setlocal makeprg=ruff-quickfix\ %
setlocal errorformat=%f:%l:%c:%t:%m

Usage

The command can be manually called from any Python file by calling the ex command :make, which will lint your current buffer. I would recommend the plugin vim-qf for some quickfix niceties.

Advanced Usage

The main benefit of using the quickfix with a linter is that you can do more wider scope lints, example: the entire project, and have all errors in a single quickfix! This requires making custom user commands

Neovim

-- Current directory of focused buffer `:Druff`
vim.api.nvim_create_user_command("Druff", function()
    local _errorformat = vim.opt.errorformat
    vim.opt.errorformat = [[%f:%l:%c:%t:%m]]
    vim.g._cexpr = vim.fn.system({ "ruff-quickfix", vim.fn.expand("%:p:h") })
    vim.cmd([[:cexpr g:_cexpr]])
    vim.opt.errorformat = _errorformat
end, {})

-- Current working directory, "project wide" `:Pruff`
vim.api.nvim_create_user_command("Pruff", function()
    local _errorformat = vim.opt.errorformat
    vim.opt.errorformat = [[%f:%l:%c:%t:%m]]
    vim.g._cexpr = vim.fn.system({ "ruff-quickfix", vim.fn.getcwd() })
    vim.cmd([[:cexpr g:_cexpr]])
    vim.opt.errorformat = _errorformat
end, {})

Vim

" Current Directory of focused buffer `:Druff`
function! s:DirRuffMake()
    let l:_errorformat = &errorformat
    set errorformat=%f:%l:%c:%t:%m
    cexpr system( "ruff-quickfix " .. expand("%:p:h") )
    let &errorformat = l:_errorformat 
endfunction
command Druff call s:DirRuffMake()

-- Current working directory, "project wide" `:Pruff`
function! s:ProjectRuffMake()
    let l:_errorformat = &errorformat
    set errorformat=%A%f:%l:%c:%t:\ %m,%A%f:%l:\ %m,%A%f:(%l):\ %m,%-Z%p^%.%#,%-G%.%#
    cexpr system( "pylint --output-format=text --msg-template='{path}:{line}:{column}:{C}: [{symbol}] {msg}' --reports=no " .. expand("%:p:h") )
    let &errorformat = l:_errorformat 
endfunction
command Pruff call s:ProjectRuffMake()

Extras

Inside the extras directory you will find files that allow you to easily toggle between pylint and ruff. It also contains a standalone file of ruff-quickfix that doesn't require on click

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ruff_quickfix-0.2.0.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

ruff_quickfix-0.2.0-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file ruff_quickfix-0.2.0.tar.gz.

File metadata

  • Download URL: ruff_quickfix-0.2.0.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/6.9.3-76060903-generic

File hashes

Hashes for ruff_quickfix-0.2.0.tar.gz
Algorithm Hash digest
SHA256 250fff933e8b398e6fb8cd7688d0ed2d9e86d14fba3218773df1372b4ac4eccf
MD5 785673a948c0a508946a1e67f62926fc
BLAKE2b-256 73613a2cc1d15cb7f904960503b6967809a53a6246f78f5be55a60ad31df5fd4

See more details on using hashes here.

File details

Details for the file ruff_quickfix-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ruff_quickfix-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/6.9.3-76060903-generic

File hashes

Hashes for ruff_quickfix-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 89e7cc6822a990d31b816f9b174f8c8b154d7428f74734ddf3b056417fdfaefc
MD5 73421d504307c956feb7bcdb32898698
BLAKE2b-256 4d352082d22fafd27f3c6b1024c593e785fd023b8b5ed99a90ef919055c509f5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page