An open API service indexing awesome lists of open source software.

https://github.com/huytd/comby-search

A code search tool based on Comby
https://github.com/huytd/comby-search

code-search comby hacktoberfest

Last synced: 6 months ago
JSON representation

A code search tool based on Comby

Awesome Lists containing this project

README

          

# Comby Search

Comby Search is a convenience wrapper around [Comby](https://github.com/comby-tools/comby) to provide the code searching functionality.

![](metadata/screenshot.gif)

## Why Comby Search? Why Comby?

Because Comby by default provided the code rewrite function and does not have a pretty output when doing `-match-only`. Comby Search
wrapped around Comby and parse the `-match-only` output to make it easier to search and see the result.

And why using Comby? See here for more details: https://github.com/comby-tools/comby#isnt-a-regex-approach-like-sed-good-enough

But TL;DR: Comby provides a better search comparing to Regex. It handles whitespaces automatically (if you ever tried search multilines of codes in Regex, you'll know), context aware (for example, it will not match commented code),...

## Dependencies

Comby Search rely on these tools, you should have them installed first:

- Comby (https://github.com/comby-tools/comby)
- Ripgrep (https://github.com/BurntSushi/ripgrep)

## Install

You can install via `cargo` with:

```
cargo install comby-search
```

Or compile it from source.

## Usage

```
Usage: cb [OPTIONS]

Arguments:
Your code search query

Options:
-f, --filter File filter pattern, for example: '*.ts,!*.spec.ts'
-l, --line-margin Number of lines to display before and after the matched search result
-h, --help Print help
```

To start a new search, run the command below. See [Comby's Documentation](https://comby.dev/docs/basic-usage) for more information about the search syntax.

```
$ cb ''
```

For example:

```
$ cb 'struct :[A] { :[B] }'
```

You can also limit the scope of the search to some specific files with:

```
$ cb -f '*.ts,*.java,!*.js' 'struct :[A] { :[B] }'
```

By default, the matched result will be displayed with a margin of 3 lines before and after, you can change this with the `--line-margin` or `-l` option:

```
$cb -l 10 'foo'
```

## Examples

Here are some example search with `cb`.

1. Find all arrow functions in TSX files

```
$ cb -f '*.tsx,*.jsx' 'const :[1] = (:[2]) => { :[3] }'
```

2. Is there any call to the `superFoo` function with an empty string as argument?

```
$ cb 'superFoo(:[2] "" :[3])'
```

3. Find all for loop in all Java files, but not in test files

```
$ cb -f '!*Test.java' 'for ([:1]) { :[2] }'
```

4. Find all Rust functions that return a String

```
$ cb -f '*.rs' 'fn :[1] (:[2]) -> String'
```

5. Find Rust traits (can you tell the different?)

```
$ cb 'trait :[1] { fn :[2](:[3]); }'

# and

$ cb 'trait :[1] { fn :[2](:[3]) -> :[4]; }'
```