LilyPond Contributor's Guide: 10.4 Finding functions

## 10.4 Finding functions

When making changes or fixing bugs in LilyPond, one of the initial challenges is finding out where in the code tree the functions to be modified live. With nearly 3000 files in the source tree, trial-and-error searching is generally ineffective. This section describes a process for finding interesting code.

### 10.4.1 Using the ROADMAP

The file ROADMAP is located in the main directory of the lilypond source. ROADMAP lists all of the directories in the LilyPond source tree, along with a brief description of the kind of files found in each directory. This can be a very helpful tool for deciding which directories to search when looking for a function.

### 10.4.2 Using grep to search

Having identified a likely subdirectory to search, the grep utility can be used to search for a function name. The format of the grep command is

>     grep -i functionName subdirectory/*

This command will search all the contents of the directory subdirectory/ and display every line in any of the files that contains functionName. The `-i` option makes `grep` ignore case – this can be very useful if you are not yet familiar with our capitalization conventions.

The most likely directories to grep for function names are ‘`scm/`’ for scheme files, ly/ for lilypond input (‘`*.ly`’) files, and ‘`lily/`’ for C++ files.

### 10.4.3 Using git grep to search

If you have used git to obtain the source, you have access to a powerful tool to search for functions. The command:

>     git grep functionName

will search through all of the files that are present in the git repository looking for functionName. It also presents the results of the search using `less`, so the results are displayed one page at a time.

### 10.4.4 Searching on the git repository at Savannah

You can also use the equivalent of git grep on the Savannah server.

- Go to http://git.sv.gnu.org/gitweb/?p=lilypond.git
- In the pulldown box that says commit, select grep.
- Type functionName in the search box, and hit enter/return

This will initiate a search of the remote git repository.

#### LilyPond — Contributor’s Guide