Skip to content

Latest commit

 

History

History
227 lines (157 loc) · 11.9 KB

README.md

File metadata and controls

227 lines (157 loc) · 11.9 KB

Sourcegraph: Cody + Code Search

Use Cody, the AI coding assistant, plus Code Search directly from your JetBrains IDE.

  • Cody is an AI coding assistant that helps you understand, write, and fix code faster. It uses advanced search to pull context from both local and remote codebases so that you can use context about APIs, symbols, and usage patterns from across your entire codebase at any scale, all from within your JetBrains IDE.
  • Code Search lets you search code across all your repositories and code hosts—even the code you don’t have locally.

Cody Features

Autocomplete

Cody autocompletes single lines or whole functions in any programming language, configuration file, or documentation. It’s powered by the latest instant LLMs for accuracy and performance.

Example of using code autocomplete

Chat

Answer questions about your entire codebase, specific files and symbols, or general programming topics.

For example, you can ask Cody:

  • "How is our app's secret storage implemented on Linux?"
  • "Where is the CI config for the web integration tests?"
  • "Write a new GraphQL resolver for the AuditLog"
  • "Why is the UserConnectionResolver giving an "unknown user" error, and how do I fix it?"
  • "Add helpful debug log statements"
  • "Make this work" (seriously, it often works—try it!)

Example of chatting with Cody

Built-in prompts

Streamline your development process by using prompts to understand, improve, fix, document, and generate unit tests for your code. Cody supports one-click prompts such as:

  • Explain code
  • Generate unit tests
  • Smell code

Choose your LLM

Cody users can select the LLM they want to use for chat and experiment to choose the best model for the job. Choose from multiple options including Claude 3.5 Sonnet, Gemini 1.5 Pro, and Mixtral 8x7B. Cody Pro users can also select Claude 3 Opus and GPT-4o. See the full list of model options here.

Administrators for Sourcegraph Enterprise instances can configure which model options to let team members choose from.

Usage

This plugin works for all Cody plans, including Cody Free, Cody Pro, and Cody Enterprise.

You can find detailed information about Cody's available plans on our website.

Programming language support

Cody works for any programming language because it uses LLMs trained on broad data. Cody works great with Python, Go, JavaScript, and TypeScript code.

Code search

Cody is powered by Sourcegraph’s code search and uses context of your codebase to extend its capabilities. By using context from your chosen repositories, Cody is able to give more accurate answers and generate idiomatic code.

For example:

  • Ask Cody to generate an API call. Cody can gather context on your API schema to inform the code it writes.
  • Ask Cody to find where in your codebase a specific component is defined. Cody can retrieve and describe the exact files where that component is written.
  • Ask Cody questions that require an understanding of multiple files. For example, ask Cody how frontend data is populated in a React app; Cody can find the React component definitions to understand what data is being passed and where it originates.

Cody Enterprise

Cody Enterprise can retrieve context from your entire remote codebase using code search. This allows Cody to understand and answer questions about any of your code, even the repositories that don't live on your local machine.

Contact us to set up a trial of Cody Enterprise. If you’re an existing Sourcegraph Enterprise customer, contact your technical advisor.

Feedback

License

Cody's code is open source (Apache License 2.0).

Code Search features

  • Search with Sourcegraph directly from inside the IDE
  • Instantly search in all open source repos and your private code
  • Peek into any remote repo in the IDE, without checking it out locally

URL sharing features

  • Create URLs to specific code blocks to share them with your teammates
  • Open your files on Sourcegraph

Supported IDEs JetBrains Plugin

The plugin works with all JetBrains IDEs, including:

  • IntelliJ IDEA
  • IntelliJ IDEA Community Edition
  • PhpStorm
  • WebStorm
  • PyCharm
  • PyCharm Community Edition
  • RubyMine
  • AppCode
  • CLion
  • GoLand
  • DataGrip
  • Rider
  • Android Studio

Versions 2022+ Recommended

Exception: Due to a Java bug, search doesn't work with IDE versions 2021.1 and 2021.2 for users with Apple Silicone CPUs.

Installation

  • Open settings
    • Windows: Go to File | Settings (or use Ctrl+Alt+S)
    • Mac: Go to IntelliJ IDEA | Preferences (or use ⌘,)
  • Click Plugins in the left-hand pane, then the Marketplace tab at the top
  • Search for Sourcegraph, then click the Install button
  • Make sure that the git command is available in your PATH. We’re going to get rid of this dependency, but for now, the plugin relies on it.
  • Restart your IDE if needed
  • To search with Sourcegraph, press Alt+S (⌥S on Mac).
  • To share a link to your code or search through the website, right-click in the editor, and choose an action under the Sourcegraph context menu item.
  • To use your private Sourcegraph instance, open Settings | Tools | Sourcegraph and enter your URL and access token.

Settings

List of in-app settings and how to use them

  • Authorization: List of accounts that can be used to interact with the plugin. Each account can be configured with:
    • Server: The URL of your Sourcegraph instance. It can be configured with your private instance if you're adding an enterprise account.
    • Token: See our user docs for a video guide on how to create an access token.
    • Custom request headers: Any custom headers to send with every request to Sourcegraph.
      • Use any number of pairs: header1, value1, header2, value2, ....
      • Example: Authorization, Bearer 1234567890, X-My-Header, My-Value.
      • Whitespace around commas doesn't matter.
  • Default branch name: The branch to use if the current branch is not yet pushed to the remote.
    • Usually "main" or "master", but can be any name
  • Remote URL replacements: You can replace specific strings in your repo's remote URL.
    • Use any number of pairs: search1, replacement1, search2, replacement2, ....
    • Pairs are replaced from left to right. Whitespace around commas doesn't matter.
    • Important: The replacements are done on the Git remote-formatted URL, not the URL you see in the browser!
      • Example replacement subject for Git: [email protected]:sourcegraph/sourcegraph.git
      • Example replacement subject for Perforce: [email protected]:depot-name.perforce
      • Anatomy of the replacement subjects:
        • The username is not used.
        • Between the @ and the : is the hostname
        • After the : is the organization/repo name (for Git) or the depot name (for Perforce)
        • The .git / .perforce extension is not used.
      • When you do the replacements, make sure you keep the colon.
      • In the case of a custom repositoryPathPattern being set for your code host in your private Sourcegraph instance, you may try to set up a pattern that uses the @, :, and .git/.perforce boundaries, or specify a replacement pair for each repo or each depot you may have. If none of these solutions work for you, please raise this at [email protected], and we'll prioritize making this more convenient.
  • Globbing: Determines whether you can specify sets of filenames with wildcard characters.
  • Cody completions: Enables/disables Cody completions in the editor.
    • The completions are disabled by default.

Git remote setting

By default, the plugin will use the git remote called origin to determine which repository on Sourcegraph corresponds to your local repository. If your origin remote doesn't match Sourcegraph, you may instead configure a Git remote by the name of sourcegraph. It will take priority when creating Sourcegraph links.

Setting levels

You can configure the plugin on three levels:

  1. Project-level On the project level you are able to configure your default account, default branch name and remote url replacements
  2. Application-level All other settings are stored here

System Properties

Autocomplete system properties

In order to disable newly introduced features we are giving an option to disable them via system properties:

  1. Disable formatting autocomplete elements cody.autocomplete.enableFormatting=false

Managing Custom Keymaps

A screenshot of the JetBrains preferences panel inside the Keymap tab

You can configure JetBrains to set custom keymaps for Sourcegraph actions:

  1. Open the JetBrains preferences panel and go to the Keymap page.
  2. Filter by "sourcegraph" to see actions supplied by this plugin.
  3. Now select an option to overwrite the keymap information and supply the new bindings.

Use Ollama models for Chat & Commands

Experience experimental chat and command support with Ollama running locally:

  1. Install and run Ollama.
  2. Set the OLLAMA_HOST to 0.0.0.0.
    1. Please refer to the official Ollama docs for how to set environment variables on your platform.
  3. Set the OLLAMA_ORIGINS to *.
  4. Install or restart your Ollama app.
  5. Select a chat model (a model that includes instruct or chat, e.g., codegemma:instruct, llama3:instruct) from the Ollama Library.
  6. Pull the chat model locally (Example: ollama pull codegemma:instruct).
  7. Once the chat model is downloaded successfully, open Cody in your IDE.
  8. Open a new Cody chat.
  9. In the new chat window, you should see the chat model you've pulled in the dropdown list at the top.

Note: You can run ollama list in your terminal to see what Ollama models are currently available on your machine.

Questions & Feedback

If you have any questions, feedback, or bug report, we appreciate if you open an issue on GitHub.

Uninstallation

  • Open settings
    • Windows: Go to File | Settings (or use Ctrl+Alt+S)
    • Mac: Go to IntelliJ IDEA | Preferences (or use ⌘,)
  • Click Plugins in the left-hand pane, then the Installed tab at the top
  • Find Sourcegraph → Right click → Uninstall (or uncheck to disable)