DEV Community

taku25
taku25

Posted on

Neovim x Unreal Engine: Visualizing Config Inheritance & Jumping to Super Classes [Weekly Update]

Introduction

Hello! I’m a developer who is frantically building plugins to make Neovim the most comfortable environment for Unreal Engine development.

My goal is to make Neovim function just like a full-fledged IDE (like Rider or Visual Studio) for UE5.
In this week's update, I've added a feature to instantly visualize the complex "Config (.ini)" hierarchy—a headache for every UE developer—and navigation features to boost coding speed.


⚠ Important: 1. Update tree-sitter-unreal-cpp

This step is mandatory to use the new features.
I have updated the parser to improve the accuracy of Unreal C++ analysis. However, due to how Treesitter works, you need to manually update the revision number in your configuration.

For features like AActor class analysis, the Symbols View, and the new Goto Super (described below) to work correctly, please overwrite your plugin config with the following settings (The Wiki has also been updated):

 { 
   'nvim-treesitter/nvim-treesitter',
    branch = "main",
    config = function(_, opts)
      vim.api.nvim_create_autocmd('User', { pattern = 'TSUpdate',
        callback = function()
          local parsers = require('nvim-treesitter.parsers')
          parsers.cpp = {
            install_info = {
              url  = 'https://github.com/taku25/tree-sitter-unreal-cpp',
              -- Please update from the old hash (89f34...) to the one below:
              revision  = '67198f1b35e052c6dbd587492ad53168d18a19a8', 
            },
          }
          parsers.ushader = {
            install_info = {
              url  = 'https://github.com/taku25/tree-sitter-unreal-shader',
              revision  = '26f0617475bb5d5accb4d55bd4cc5facbca81bbd',
            },
          }
       end
     })
     -- (Other installation settings...)
  end
}
Enter fullscreen mode Exit fullscreen mode

2. [Killer Feature] Config Explorer: Escape from Config Hell

The Unreal Engine Config (.ini) system is powerful but incredibly complex.
It starts with Engine/Config/Base.ini, then Project/Config/DefaultEngine.ini, overrides by WindowsEngine.ini, and even further overrides by DeviceProfiles...

"In the end, what is the actual final value of this parameter?" "Where was it overwritten?"
Have you ever gotten lost tracking this down?

To solve this, I implemented the Config Explorer.

Features:

  • Hierarchy View: Displays config values relevant to your project in a tree structure organized by platform.
  • Visualizing Inheritance: It merges and displays not just Default settings, but also platform-specific settings (Windows, Android, iOS) and even Device Profiles (like Android_Low).
  • History Tracking: You can track the history of a parameter: "In which file, on which line, and how was it changed (Overwritten, Added, Deleted)?"
  • Jump to Source: Select a history entry to instantly jump to the definition line in the original .ini file.

↑ It analyzes the actual project INIs and displays the final value and override history in one shot.

config_tree

3. Implement Virtual: Auto-generate Overrides

When overriding a virtual function in a parent class in C++, copying and pasting the signature between header files is tedious.
I've implemented the "Override function..." feature found in Rider and VS into Neovim.

  • It traverses the inheritance chain of the current class and lists available virtual functions.
  • Simply pick one from the list, and it adds the declaration (with override) to the header and copies the implementation code (with Super::Call) to your clipboard.

implement_virtual

4. Goto Super Definition / Implementation

"How was this function implemented in the parent class?"
To find out, we used to have to grep or trace the LSP hierarchy. Now, it's just one command.

  • :UDEV goto_super_def: Jump to the parent class function definition (Header).
  • :UDEV goto_super_impl: Jump to the parent class implementation (Source).

It recognizes the function name at the cursor, intelligently searches the inheritance tree, and jumps.

goto super

5. Symbols View Optimization (Lazy Initialization)

As projects grew larger, the initialization cost of the Symbol Tree (Class/Function view) started to become noticeable.
In this update, I completely refactored the architecture to perform analysis and initialization only at the moment it is needed (Lazy Loading).
This significantly improves Neovim startup time and file opening response.

6. Other Improvements

Small but useful fixes:

  1. UCM switch: Added support for file paths in Engine/Classes.
  2. UEP find_parents: Added support for UObject (making the inheritance tree much clearer).
  3. UEP tree: Fixed a bug where project files inside Plugins were hidden.
  4. UNL: Added .ini file parsing capability and standardized the C++ parser logic.

Conclusion

With this week's updates, Neovim is getting closer to a true "Unreal Engine Specialized IDE."
I believe the Config Explorer, in particular, is a unique feature not standard even in commercial IDEs.

If you find this useful or want to support the project, please check out the repositories.
While the number of Clones is increasing (yay!), the Star count is still a bit lonely (lol). Your Stars give me the motivation to develop the next feature!

[Links to Repositories]

Top comments (0)