Nvim treesitter cpp tools
C++ Helper Snippets Using Treesitter
Experimental treesitter based neovim plugin to create intelligent implementations for C++ The project is written primarily in Lua, distributed under the Apache License 2.0 license, first published in 2021. Key topics include: cpp, lua, neovim, nvim, nvim-treesitter.
nt-cpp-tools
Experimental treesitter based neovim plugin to create intelligent implementations for C++
Features
- 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
Install
Using paq
luarequire "paq" { "nvim-treesitter/nvim-treesitter", "Badhi/nvim-treesitter-cpp-tools", }
Using packer.nvim
luause { requires = { "nvim-treesitter/nvim-treesitter" }, "Badhi/nvim-treesitter-cpp-tools", }
Using lazy.nvim
lua{ "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, }
Setup
Add the following config to your init script
Note: The config for this plugin, included in the
treesitter.configis now moved to an independent config. Please make required changes
luarequire '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 } ]] } })
Usage
- Select the range of the class using visual mode
- Use below commands
| Command | Feature |
|---|---|
TSCppDefineClassFunc | Implement out of class member functions<br><br> 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<br><br>Supported special features<br>1. Templates (with default args)<br>2. Function arguments with default values<br>3. Nested classes<br>(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) |
Example
TSCppDefineClassFunc

TSCppMakeConcreteClass

TSCppRuleOf3

Contributors
Showing top 7 contributors by commit count.
This article is auto-generated from Badhi/nvim-treesitter-cpp-tools via the GitHub API.Last fetched: 6/27/2026
