Experimental treesitter based neovim plugin to create intelligent implementations for C++
- Out-of class member function implementation
- Concrete class implement from Abstract class or Interface
- Add missing functions to obey Rule of 3
- Add missing functions to obey Rule of 5
Using paq
require "paq" {
"nvim-treesitter/nvim-treesitter",
"Badhi/nvim-treesitter-cpp-tools",
}
Using packer.nvim
use {
requires = { "nvim-treesitter/nvim-treesitter" },
"Badhi/nvim-treesitter-cpp-tools",
}
Using lazy.nvim
{
"Badhi/nvim-treesitter-cpp-tools",
dependencies = { "nvim-treesitter/nvim-treesitter" },
-- Optional: Configuration
opts = function()
local options = {
preview = {
quit = "q", -- optional keymapping for quit preview
accept = "<tab>", -- optional keymapping for accept preview
},
header_extension = "h", -- optional
source_extension = "cpp", -- optional
custom_define_class_function_commands = { -- optional
TSCppImplWrite = {
output_handle = require("nt-cpp-tools.output_handlers").get_add_to_cpp(),
},
--[[
<your impl function custom command name> = {
output_handle = function (str, context)
-- string contains the class implementation
-- do whatever you want to do with it
end
}
]]
},
}
return options
end,
-- End configuration
config = true,
}
Add the following config to your init script
Note: The config for this plugin, included in the
treesitter.config
is now moved to an independent config. Please make required changes
require 'nt-cpp-tools'.setup({
preview = {
quit = 'q', -- optional keymapping for quit preview
accept = '<tab>' -- optional keymapping for accept preview
},
header_extension = 'h', -- optional
source_extension = 'cxx', -- optional
custom_define_class_function_commands = { -- optional
TSCppImplWrite = {
output_handle = require'nt-cpp-tools.output_handlers'.get_add_to_cpp()
}
--[[
<your impl function custom command name> = {
output_handle = function (str, context)
-- string contains the class implementation
-- do whatever you want to do with it
end
}
]]
}
})
- Select the range of the class using visual mode
- Use below commands
Command | Feature |
---|---|
TSCppDefineClassFunc |
Implement out of class member functions subset of functions can be implemented by selecting required function declarations using visual mode or simply keeping the cursor on the function declaration before calling the command Supported special features 1. Templates (with default args) 2. Function arguments with default values 3. Nested classes (check test_cases for tested examples) |
TSCppMakeConcreteClass |
Create a concrete class implementing all the pure virtual functions |
TSCppRuleOf3 |
Adds the missing function declarations to the class to obey the Rule of 3 (if eligible) |
TSCppRuleOf5 |
Adds the missing function declarations to the class to obey the Rule of 5 (if eligible) |
TSCppDefineClassFunc
TSCppMakeConcreteClass
TSCppRuleOf3