Skip to content

sourcegraph/sg.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2facfaf · Jan 12, 2024
Oct 11, 2023
Dec 14, 2023
Aug 11, 2023
Jan 12, 2024
Dec 14, 2023
Dec 14, 2023
Jan 12, 2024
Jan 12, 2024
Jan 12, 2024
Dec 14, 2023
Jan 12, 2024
Jun 28, 2023
Jul 17, 2023
Aug 11, 2023
Jan 12, 2024
Jan 12, 2024
Aug 25, 2023
Dec 14, 2023
Oct 10, 2023
Oct 17, 2023
Oct 11, 2023
Jan 9, 2023
Jul 17, 2023
May 24, 2021
Jul 17, 2023

Repository files navigation

sg.nvim

Status: Beta

Table of Contents

sg.nvim is a plugin focused on bringing many of the features of sourcegraph.com and Cody into Neovim.

Setup

To login, either:

  • Run :SourcegraphLogin after following installation instructions for sourcegraph.com usage.
  • Run :SourcegraphLogin! and provide an endpoint and access token to be stored.
  • Use the SRC_ENDPOINT and SRC_ACCESS_TOKEN environment variables to manage tokens for enterprise usage.

See :help sg.auth for more information.

You can check that you're logged in by then running :checkhealth sg

Installation

Requirements

Requires:

  • nvim 0.9 or nvim nightly
  • Node.js >= 18.17.0 (LTS) at runtime for cody-agent.js

(By default, sg.nvim downloads released binaries from Github. If you prefer to build the plugin yourself, you'll need cargo to build)

  • Currently uses plenary.nvim and telescope.nvim for some features.
    • If you would like to use something else for search functionality, please make an issue and I can look into adding support.

Install

Regardless of installation method, you must call require("sg").setup { ... } in your config.

lazy.nvim
-- Use your favorite package manager to install, for example in lazy.nvim
--  Optionally, you can also install nvim-telescope/telescope.nvim to use some search functionality.
return {
  {
    "sourcegraph/sg.nvim",
    dependencies = { "nvim-lua/plenary.nvim", --[[ "nvim-telescope/telescope.nvim ]] },

    -- If you have a recent version of lazy.nvim, you don't need to add this!
    build = "nvim -l build/init.lua",
  },
}
packer.nvim
-- Packer.nvim, also make sure to install nvim-lua/plenary.nvim
use { 'sourcegraph/sg.nvim', run = 'nvim -l build/init.lua' }

-- You'll also need plenary.nvim
use { 'nvim-lua/plenary.nvim' }

-- And optionally, you can install telescope for some search functionality
--  "nvim-lua/plenary.nvim", --[[ "nvim-telescope/telescope.nvim ]] 
vim-plug
" Using vim-plug
Plug 'sourcegraph/sg.nvim', { 'do': 'nvim -l build/init.lua' }

" Required for various utilities
Plug 'nvim-lua/plenary.nvim'

" Required if you want to use some of the search functionality
Plug 'nvim-telescope/telescope.nvim'

After installation, run :checkhealth sg.

(Nix instructions at the end of the readme)

Configuration:

-- Sourcegraph configuration. All keys are optional
require("sg").setup {
  -- Pass your own custom attach function
  --    If you do not pass your own attach function, then the following maps are provide:
  --        - gd -> goto definition
  --        - gr -> goto references
  on_attach = your_custom_lsp_attach_function
}
" Example mapping for doing searches from within neovim (may change) using telescope.
" (requires telescope.nvim to be installed)
nnoremap <space>ss <cmd>lua require('sg.extensions.telescope').fuzzy_search_results()<CR>

Demos:

Features:

Cody:

  • Chat interface and associated commands
  • Autocompletions, prompted
  • Autocompletions, suggested

Sourcegraph Browsing:

  • Read files:
    • Directly from sourcegraph links: :edit <sourcegraph url>
      • sg.nvim will automatically add protocols for handling https://sourcegraph.com/* links.
    • Directly from buffer names: :edit sg://github.com/tjdevries/sam.py/-/src/sam.py
    • Use :SourcegraphLink to get a link for the location under your cursor
  • Reading non-files:
    • Repository roots
    • Folders
      • Expand Folders
      • Unexpand Folders
      • Open file from folder
  • Use builtin LSP client to connect to SG
    • Goto Definition
    • Goto References
      • <20 references
  • Basic Search
    • literal, regexp and structural search support
    • type:symbol support
    • repo support
  • More? Make an issue with something you're missing :)

Nix(OS)

The project is packaged as a Nix Flake. Consume it as you normally would. For reference, see:

sg = let
  system = "x86_64-linux";
  package = inputs.sg-nvim.packages.${system}.default;
in {
  inherit package;
  init = pkgs.writeTextFile {
    name = "sg.lua";
    text = ''
      return function()
        package.cpath = package.cpath .. ";" .. "${package}/lib/?.so"
      end
    '';
  };
};

For Nix contributors and maintainers:

  • Feel free to nix flake update every once in a while to make sure flake.lock is up-to-date
  • Minimal sg.nvim-integrated neovim package for testing and example
  • Integrate sg.nvim + Cody onto nixpkgs:vimPlugins