AckslD / nvim-trevJ.lua

Nvim-plugin for doing the opposite of join-line (J) of arguments, powered by treesitter
MIT License
170 stars 10 forks source link

nvim-trevJ.lua

Nvim-plugin for doing the opposite of join-line (J) of arguments, powered by treesitter. The intention of the plugin is the same as revJ. However trevJ uses treesitter to figure out the formatting and in general does everything much more efficient and better, while not polluting registers, last visual selection etc. My intention is that anyone using revJ should have a smooth transfer to trevJ but both configuration and usage will necessarily be somewhat different and instead of making a breaking change for revJ I decided to make a new plugin. Also since it's anyway a complete re-write of the code.

Installation

For example using packer:

use {
  'AckslD/nvim-trevJ.lua',
  config = 'require("trevj").setup()',  -- optional call for configurating non-default filetypes etc

  -- uncomment if you want to lazy load
  -- module = 'trevj',

  -- an example for configuring a keybind, can also be done by filetype
  -- setup = function()
  --   vim.keymap.set('n', '<leader>j', function()
  --     require('trevj').format_at_cursor()
  --   end)
  -- end,
}

Configuration

When configuring a language you should specify the treesitter node types that contains the child nodes which should be put on separate lines. For example for the default configuration for lua looks as follows:

require('trevj').setup({
  containers = {
    lua = {
      table_constructor = {final_separator = ',', final_end_line = true},
      arguments = {final_separator = false, final_end_line = true},
      parameters = {final_separator = false, final_end_line = true},,
    },
    ... -- other filetypes
  },
})

where:

For existing languages you can override anything and defaults will be used for anything unspecified.

Supported Languages

Currently the following languages are supported by default:

You can add your own, of even better submit a PR for your favorite language.

Examples

default

{final_separator = ',', final_end_line = true}

becomes

{
  final_separator = ',',
  final_end_line = true,
}

no final separator

{final_separator = false, final_end_line = true}

becomes

{
  final_separator = false,
  final_end_line = true
}

no final separator, no final line

{final_separator = false, final_end_line = false}

becomes

{
  final_separator = false,
  final_end_line = false}

Usage

Call require('trevj').format_at_cursor() or bind a key to it. Note that you need to be inside the container treesitter node, otherwise a warning will be given.