Experimental treesitter based neovim plugin to create intelligent implementations for C++
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
}
]]
}
})
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 commandSupported special features1. Templates (with default args)2. Function arguments with default values3. 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