shipwithjev

Catalog / Tools & apps

0480GitHub

jev.nvim

Neovim plugin that splits the buffer into functions with Treesitter, scores each against a plain-language question with Jev, and ranks answers by probability in the quickfix…

valentynkit/jev.nvimREADME ↗
# jev.nvim

[](https://github.com/valentynkit/jev.nvim/actions/workflows/ci.yml)



Ask the buffer a question in plain language. Every function in it gets judged, and the
answers land in quickfix ranked by probability.

```vim
:Jev builds a SQL query by string concatenation
```



## What the clip shows

It opens on the grep you write when you go looking for SQL injection:

```console
$ rg -n 'SELECT.*\+' fixtures/corpus/
5 matches
```

Five, and every one of them is a `+`. There are twelve. Lua concatenates with `..`, Rust
with `format!`, Python with an f-string, TypeScript with a template literal. One idea,
five syntaxes, and the regex that catches one catches none of the rest. That is not noise,
it is a false negative: you searched, you got five, you stopped.

Then the same question in English, over the same twelve files:

```
errors.rs |14 col 1| 0.98  find_user
errors.ts |14 col 1| 0.97  findUser
errors.py |20 col 1| 0.96  find_user
errors.js |13 col 1| 0.95  findUser
report.rs |15 col 1| 0.95  report_query
errors.go |20 col 1| 0.94  findUser
errors.lua|14 col 1| 0.93  M.find_user
report.py |14 col 1| 0.93  report_query
```

grep is shaped like the language. The question is not.

The clip is rendered against the plugin's test fake so it runs from a clean clone, which
means the probabilities in it are fixtures rather than measurements. `demo/README.md` lists
exactly what is staged for the camera and what is not.

## Why

grep needs the pattern, and half the searches worth running have no pattern. "Where do we
retry without a backoff." "Which handlers touch the database before checking auth." "What
swallows an exception and returns a default." You know the shape of the answer, not the
string.

jev.nvim splits the buffer with treesitter and sends one question per func

Also filed under Tools & apps