All Projects → deoplete-plugins → Deoplete Go

deoplete-plugins / Deoplete Go

Licence: mit
Asynchronous Go completion for Neovim. deoplete source for Go.

Programming Languages

python
139335 projects - #7 most used programming language
go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Deoplete Go

Lens.vim
A Vim Automatic Window Resizing Plugin
Stars: ✭ 381 (-12.01%)
Mutual labels:  neovim, neovim-plugin
Barbar.nvim
A neovim tabline plugin.
Stars: ✭ 359 (-17.09%)
Mutual labels:  neovim, neovim-plugin
format.nvim
Neovim lua plugin to format the current buffer with external executables
Stars: ✭ 189 (-56.35%)
Mutual labels:  neovim, neovim-plugin
igs.nvim
A minimalist Neovim plugin that enhances the usage of git status inside Neovim.
Stars: ✭ 17 (-96.07%)
Mutual labels:  neovim, neovim-plugin
Nvimux
Neovim as a TMUX replacement
Stars: ✭ 302 (-30.25%)
Mutual labels:  neovim, neovim-plugin
nvim-dap-python
An extension for nvim-dap, providing default configurations for python and methods to debug individual test methods or classes.
Stars: ✭ 70 (-83.83%)
Mutual labels:  neovim, neovim-plugin
Vim Monokai Tasty
VIM Colour scheme
Stars: ✭ 279 (-35.57%)
Mutual labels:  neovim, neovim-plugin
black-nvim
A Neovim plugin to format your code using Black
Stars: ✭ 23 (-94.69%)
Mutual labels:  neovim, neovim-plugin
Blamer.nvim
A git blame plugin for neovim inspired by VS Code's GitLens plugin
Stars: ✭ 283 (-34.64%)
Mutual labels:  neovim, neovim-plugin
Gen tags.vim
Async plugin for vim and neovim to ease the use of ctags/gtags
Stars: ✭ 288 (-33.49%)
Mutual labels:  neovim, neovim-plugin
Nvim Dap
Debug Adapter Protocol client implementation for Neovim (>= 0.5)
Stars: ✭ 326 (-24.71%)
Mutual labels:  neovim, neovim-plugin
Vim Dadbod Ui
Simple UI for https://github.com/tpope/vim-dadbod
Stars: ✭ 315 (-27.25%)
Mutual labels:  neovim, neovim-plugin
null-ls.nvim
Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua.
Stars: ✭ 965 (+122.86%)
Mutual labels:  neovim, neovim-plugin
nrpattern.nvim
Neovim plugin to expand incrementing/decrementing to more formats.
Stars: ✭ 24 (-94.46%)
Mutual labels:  neovim, neovim-plugin
neogen
A better annotation generator. Supports multiple languages and annotation conventions.
Stars: ✭ 339 (-21.71%)
Mutual labels:  neovim, neovim-plugin
Iron.nvim
Interactive Repl Over Neovim
Stars: ✭ 265 (-38.8%)
Mutual labels:  neovim, neovim-plugin
nvim-lsp-smag
Seamless integration of language server locations into NeoVim
Stars: ✭ 60 (-86.14%)
Mutual labels:  neovim, neovim-plugin
agitator.nvim
No description or website provided.
Stars: ✭ 16 (-96.3%)
Mutual labels:  neovim, neovim-plugin
Go Client
Nvim Go client
Stars: ✭ 284 (-34.41%)
Mutual labels:  neovim, neovim-plugin
Dashboard Nvim
vim dashboard
Stars: ✭ 294 (-32.1%)
Mutual labels:  neovim, neovim-plugin

deoplete-go

Status
Travis CI Build Status
Gitter Join the chat at https://gitter.im/zchee/deoplete-go

Go source for deoplete.nvim use gocode.

Overview

Asynchronous Go completion for Neovim/Vim8. Use,

deoplete.nvim

Shougo/deoplete.nvim

Dark powered asynchronous completion framework for neovim/Vim8. Fastetst, Fully asynchronous, Nonblocking user interface, Customizable source for each languages, and more. The Nextgen word completion.

gocode

stamblerre/gocode

An autocompletion daemon for the Go programming language. Fastest, Context-sensitive, Server/Client architecture, Result caching. The de facto standard completion engine.


Required

deoplete.nvim

https://github.com/Shougo/deoplete.nvim

gocode

https://github.com/stamblerre/gocode


How to install

1. Install Neovim or Vim8

For neovim, see Neovim wiki.

2. Install deoplete

See https://github.com/Shougo/deoplete.nvim

3. Install latest of gocode

go get -u github.com/stamblerre/gocode

4. Install plugin and Build ujson module

deoplete-go using esnme/ultrajson json module. It's Python bindings for C library. Need compiling. So, If you use Plugin manager supported build process, set make commmand.

" dein.vim
call dein#add('Shougo/deoplete.nvim')
call dein#add('deoplete-plugins/deoplete-go', {'build': 'make'})

" NeoBundle
NeoBundle 'Shougo/deoplete.nvim'
NeoBundle 'deoplete-plugins/deoplete-go', {'build': {'unix': 'make'}}

" vim-plug
Plug 'Shougo/deoplete.nvim'
Plug 'deoplete-plugins/deoplete-go', { 'do': 'make'}

Available Settings

Setting value Default Required
g:deoplete#sources#go#gocode_binary '' Recommend
g:deoplete#sources#go#package_dot 0 No
g:deoplete#sources#go#sort_class [] Recommend
g:deoplete#sources#go#cgo 0 Any
g:deoplete#sources#go#goos '' No
g:deoplete#sources#go#source_importer 0 No
g:deoplete#sources#go#builtin_objects 0 No
g:deoplete#sources#go#unimported_packages 0 No
g:deoplete#sources#go#fallback_to_source 0 No

g:deoplete#sources#go#gocode_binary

gocode Binary

Default ''
Required Recommend
Type string
Example $GOPATH.'/bin/gocode'

deoplete-go will directly call gocode. Not vim bypass due to the omnifunc. By default (not set), Find the gocode binary in $PATH environment. This setting is Recommend. If you set it, deoplete-go spared look for the binary. It will improve performance.

Also, If you want to use a different from the first found gocode binary from $PATH then set:

let g:deoplete#sources#go#gocode_binary = '/path/to/gocode'

g:deoplete#sources#go#package_dot

Automatically insert dot after package name

Default 0
Required No
Type int
Example 1

Automatically insert dot (period) when you select package name in popup menu. By default, no dot (period) is inserted after a package name.

If you would prefer adding a period then set:

let g:deoplete#sources#go#package_dot = 1

g:deoplete#sources#go#sort_class

Class Sorting and Ignore

Default []
Required Recommend
Type list
Example See bellow exmaple

By default, the completion word list is in the sort order of gocode. Same as omnifunc. If you want to change it to an arbitrary order, set it.

Available values are [package, func, type, var, const]. If you did not include any value, it will always be hidden in the completion list.

To display all words while sorting, set:

let g:deoplete#sources#go#sort_class = ['package', 'func', 'type', 'var', 'const']

g:deoplete#sources#go#pointer

Support pointer match

Default 0
Required Any
Type int
Example 1

Support pointer (*) match. Example are bellow code. | is cursor.

type Foo struct {
  FooName string
}

func NewFoo() *Foo {
  return &Foo{}
}

func (f *|

g:deoplete#sources#go#cgo

cgo complete use libclang-python3

Default 0
Required Any
Type int
Example 1

If current buffer has import "C" also #include <foo.h> and when you type C., deoplete-go will display the C function in the foo.h.

Simple example is below. | is cursor.

package main

/*
#include <stdlib.h>
*/
import "C"
import (
	"fmt"
)

func main() {
	fmt.Printf()
	C.|
}

Will return the pid_t, malloc, free and more.

The real example uses libgit2.

package main

/*
#include <git2.h>
*/
import "C"
import (
	"log"
	"os"
	"path/filepath"

	"github.com/libgit2/git2go"
)

func main() {
	repoPath := filepath.Join(os.Getenv("GOPATH"), "src/github.com/libgit2/git2go")
	gitRepo, err := git.OpenRepository(repoPath)

	C.git_blame_|

	if err != nil {
		log.Fatal(err)
	}
	commitOid, err := gitRepo.Head()
	if err != nil {

	}
}

Will return that completion list.

cgo_libgit2

Now support current buffer only. TODO: Support parses .c, .h file.

g:deoplete#sources#go#cgo#libclang_path

libclang shared library path for cgo complete

Default
Required Any
Type string
Example /opt/llvm/lib/libclang.dylib

libclang shared library path option. In darwin, libclang.dylib, In Linux, libclang.so.

g:deoplete#sources#go#cgo#std

C language standard version

Default c11
Required Any
Type string
Example c99

C language standard version option. If not set, deoplete-go uses c11(latest) version.

g:deoplete#sources#go#auto_goos

Automatically set GOOS environment variable when calling gocode

Default 0
Required No
Type boolean
Example 1

When enabled, deoplete-go will try to set GOOS by checking the file name for name_<OS>.go. If not found, the file will be checked for a // +build <OS> directive. If the file's OS doesn't match your OS (e.g. file_darwin.go while on linux), CGO_ENABLED=0 will also be set.

Note: There may be a 5-10 second delay if gocode needs to compile the platform-specific sources for the first time.

g:deoplete#sources#go#source_importer

Enable source importer

Default 0
Required No
Type int
Example 1

When enabled, deoplete-go can complete external packages.

It is deprecated option. You should use the latest gocode. https://github.com/mdempsky/gocode/pull/71

g:deoplete#sources#go#builtin_objects

Propose builtin objects

Default 0
Required No
Type int
Example 1

When enabled, deoplete-go can complete builtin objects.

g:deoplete#sources#go#unimported_packages

Propose completions for unimported standard library packages

Default 0
Required No
Type int
Example 1

When enabled, deoplete-go can complete standard library packages that are not explicitely imported yet.

g:deoplete#sources#go#fallback_to_source

Scan source files when a dependency is not found on the GOPATH

Default 0
Required No
Type int
Example 1

When enabled, deoplete-go will try the source importer when it fails to find a dependency on the GOPATH.


Sample init.vim

" neocomplete like
set completeopt+=noinsert
" deoplete.nvim recommend
set completeopt+=noselect

" Path to python interpreter for neovim
let g:python3_host_prog  = '/path/to/python3'
" Skip the check of neovim module
let g:python3_host_skip_check = 1

" Run deoplete.nvim automatically
let g:deoplete#enable_at_startup = 1
" deoplete-go settings
let g:deoplete#sources#go#gocode_binary = $GOPATH.'/bin/gocode'
let g:deoplete#sources#go#sort_class = ['package', 'func', 'type', 'var', 'const']

TODO:

  • [x] Parse included cgo (C, C++ language) headers on current buffer
    • ctags will be blocking deoplete.nvim
  • [x] Support static json caching
  • [x] Support Go stdlib package import "***" name completion
    • This feature has been implemented in gocode. Thanks @nhooyr!
  • [x] Execute gocode binary instead of call vim function
  • [x] Get and parse completion list of json format. such as ycm
  • [x] When there is no candidate infomation, deoplete will cause an error
  • [x] Support fizzy matching
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].