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...

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...

Researching Awl Pike

Last time... In my previous commit, I had the pleasure of studying the guns and their ammo and how they are reflected in the world of Cataclysm-DDA. This time, the some members of the community were buzzing about a 3-meter-long pointy stick called awl pike. Awl Pike The awl pike is basically an extra-long spear designed specifically for use in a formation attack. A formation of 3+ ranks hold the longest possible stick at their disposal and poke the enemy that stands in front of them or charging at them. It is very powerful weapon against things that stands in front of them, but due to the need for formation and the shear unwieldiness of the weapon, it is not very versatile and adaptable to changing circumstances. In a one-on-one combat, the weapon would be very difficult to stay effective. How do I know all this? Well, there was the entire discussion about it in the issue page. Like I said, this kind of games brings out the geeks from their closets and provide the floor to sp...