Skip to main content

Working with neovim.

The Overview

I use vim every day. In the course of my use, I ran across neovim, a folk of vim with aim to introduce new features, such as asynchronous disk operation. I wanted to submit my first patch in hacktoberfest to this project.

What is neovim

This is a folk of vim. It has multiple aims, such as decreasing bloat, implement asynchronous disk operation, and to be a drop-in replacement of vim. It also aims to adopt different development culture than that of vim where the course of development is more open to the community. While all of them are interesting goals catering to specific needs, I am most interested in the asynchronous disk operation using libuv.

What is libuv

libuv is a set of libraries designed to perform asynchronous disk operations. It is widely used in projects such as node.js, and of course, neovim.

What is the issue

libuv has introduced uv_fs_copyfile() method. I intend on implementing this function in neovim. So far, I found two locations where neovim copies a file over, and they have to do with buffer. As far as I can tell, there is no dedicated function for copying of file; the logic is embedded right into a huge function called file_mess() and uses buffer write function to do the writing.

Contributing to neovim

Every project has their own way, or an agreement, as to how community would work together to contribute code. Neovim has decided to take an approach that maximizes github features to communicate what is going on in different parts of the code.

Method and culture

When working on a particular issue, first, the coder must create a pull request regarding the issue as soon as possible with [WIP] tag. This serves to let others know that someone is working on the issue. As the development is ready to be presented, the tag is changed to [RFC], meaning requesting review. Once it has reached maturity with sufficient reviews, the tag turns into [RDY], ready and waiting to be merged. I have made my [WIP] pull request on implementing uv_fs_copyfile().

Difficulties

As I am looking at the C code, a procedural language, currently, I am daunted by the sheer size of some of the function, and how different functions are interacting with each other. This is surprisingly different from my experience with C++, or Object Oriented Programming in general; I am used to seeing objects interacting with each other using member functions that does one thing really well. Currently, I am looking at file_mess() function call that is spanning several hundreds of lines doing just about everything. I am trying to understand how I should approach the situation: should I make my own small function and then call it in the file_mess(), or should I follow the way it is written and try to code right into the logic? Perhaps I am missing the point and there is already a function for copyfile? I only see buffer write function, which seem more a general purpose write function, being used in the code, though. I am unwilling to alter a general purpose function for the specific purpose of copying the file, either. Well, I am going to look a bit further into it before making a decision as to how I will approach it.

Comments

Popular posts from this blog

Creating a patch for GNU GCC using Git

Overview and Target Audience The GNU GCC project followed a blend of a traditional method with contemporary git tools when it comes to contributing code, making the experience unique from some other, git-based projects. This blog post will explore different aspects of the process, helpful commands, and various scripts that would make the experience more pleasent for new contributors. While this blog aims to help new contributors get acustomed to the GNU GCC code culture and make contributing easier, it must be stressed that this is not in any way in-depth exploration of the process. This should help you put your first foot forward; the community will help you take the rest of the steps from that point on. This post also assumes the user is in a POSIX environment (e.g. Linux, FreeBSD). Git and GNU As stated in this phoronix post , GNU GCC made a full transition to git early 2020. As of this writing, the community seems to be adjusting to the new tools. GNU GCC hosts its own git serve

Setting up IRC

About IRC Internet Relay Chat was once the most popular real-time communication method that uses computer for a large spectrum of community groups. While it has largely been supplanted by more contemporarly methods for most people, IRC is still a prefered means of communication among older software projects like GCC. The Client As an old technology that is also very favored among programmers, IRC has many clients with different flavors, from GUI to CLI to headless. As a linux user with strong attraction to tmux, I chose weechat. Depending on your distro or OS, install your client first. Configuring Weechat I will be using GCC channel in OFTC server as the example. How are we configuring this? While Weechat has a configuration file, Weechat officially advises against using the file to configure the program behavior. Instead, it promotes `/set` dialog within the client to set the proper configuration. Connect to server Let's first connect to server. The `#gcc` channel is host

Debugging with GCC: GIMPLE

GCC and GIMPLE One of the very first thing GCC asks the GSoC applicants to do, even before writing the application, is to try various different debugging techniques using GCC. I was personally familiar with the basic, compile-with-g-flag-and-use-gdb method. Turns out, there's more: GIMPLE. A Simple but Non-trivial Program Problem Description The instruction asks to compile a simple but non-trivial program with some flags that generates debugging information: -O3 -S -fdump-tree-all -fdump-ipa-all -fdump-rtl-all . Because I was keep reading on ways to debug GCC just prior to the statement, I immediately thought "GCC" and tried make -j8 CXXFLAGS="-O3 -S -fdump-tree-all -fdump-ipa-all -fdump-rtl-all" . This was a mistake: turns out, GCC can't be compiled with those flags. Thankfully, GCC developers have a very active IRC channel for me to signal SOS. Resolution jakub and segher were quick to respond to my call for help. jakub: it isn't meant that y