Enhancing Code Completion for Rust in Cody
sourcegraph.com
sourcegraph.com
BTW, Cody is open source (Apache 2): https://github.com/sourcegraph/cody.
> Although most LLMs are trained on corpora that include several programming languages, we often observe differential performance across languages, especially languages like Rust that are not well represented in popular training datasets.
Interesting! My experience with Rust and Copilot is that Rust is actually a relatively strong language for Copilot, in many ways. I suspect that this might be a mix of different things:
- Is the training set code for Rust relatively high-quality?
- Do strongly-typed languages have a better chance of catching incorrect completions quickly?
But I tend to write my code in a style that easily passes the borrow checker 99% of the time. I keep mutation very local, and rely on a more "functional" architecture. So Copilot is naturally going to write new code in the same borrow-checker-friendly style, which may keep it out of trouble.
When using ChatGPT, I've actually had more luck asking it to write Python, and then to translate the Python into Rust. ChatGPT seems to be better at algorithms in Python, and it's surprisingly good (in my personal experience) at inserting the fine details of Rust types and references when translating.
For 2, we're working on it! And eventually we'll support cross-repository refactors in Cody using our batch changes (https://sourcegraph.com/docs/batch-changes). What kind of refactors do you want to make?
2. A reasonable near-term goal could be to make changes in one file propagate across the code base, so it remains consistent. This requires analyzing the call graph, which is something Sourcegraph already knows how to do. The next step could be to execute multi-file refactors without specifying which files to modify; e.g., "add support for WebAuthn using our auth provider's SDK".
2. Your "reasonable near-term goal" is right in line with what we are thinking. Basically, "auto-edits" is f(edit that meets deterministic trigger criteria) --> multi-file diff. Here are some examples we have in mind; any others you had in mind?
update a type signature --> ripple that change across to all call sites/value literals (kinda like symbolic rename does today, but for more than just the name)
rename something --> update the docs
change code with a comment nearby --> update the comment if it's now invalid
update a func impl --> propose a new test case
All are experimental and not enabled by default, but you can peek at them if you're interested.
1. (experimental) LSP-based context — https://github.com/sourcegraph/cody/pull/3493
2. (experimental) TypeScript tsc context — https://github.com/sourcegraph/cody/pull/3843
3. (experimental) OpenCtx, which can pull in diagnostics from tools outside your editor — https://openctx.org/
And then of course the agent to actually iterate on the generated code based on this feedback.
We're really excited about this stuff, and it'll arrive in Cody when we can get it to a high quality bar and prove it helps.
If the user preferred reduced latency and had the RAM, is that an option?
https://sourcegraph.com/blog/local-code-completion-with-olla...
I just used Cody with Ollama for local inference on a flight where the wifi was broken, and it never fails to blow my mind: https://x.com/sqs/status/1803269013310759236.