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",
}
Append the following config to the nvim-treesitter config
nt_cpp_tools = {
enable = true,
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'nvim-treesitter.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