- Fix windows name, Currently
[:setloclist()] [Location List] [-]- Reference to neomake, or research neovim core code?
- Super data racy
- Display the corresponding function(file) to preview window like buffer that current cursor (test)function
- Follow the cursor position with delay time
- Automatically generate and insert the typical Go comment based current cursor or selected words.
- Parses AST, determine
*ast.Ident.Obj.Kindaka*ast.ObjKindtype *ast.Pkg:- Package
*ast.File.Nameimplements ...
- Package
*ast.Con:*ast.ValueSpec.Name??? ...
*ast.Typ:- (A|The)
*ast.TypeSpec.Namerepresents a ... // (A|The) is optional
- (A|The)
*ast.Var:*ast.ValueSpec.Nameis the ...
*ast.Fun:*ast.FuncDecl.Namereturns the ...
*ast.Lbl:- Need?
- Support
interface, like func (f *Foo) String():- String implements a fmt.Stringer interface.
func (f *Foo) Error():- Error implements a error.Error interface.
- Parses AST, determine
- Commands
-
GoBuild -
GoCoverage -
GoInstall -
GoTest -
GoLint
-
- Implements highlight
signto error & warning (like YCM, vim-flake8)- Use
echoerror & warning message when move cursor to this line
- Use
- Goal is easy to analysis for Go sources
- Alternative tagbar feature
- Support jump to child AST with any key-mapping
- Support tagbar like jump to
func, type, var, constsource position with<CR>mapping
- Support display the current cursor
<cword>AST
- Implements
GoWatchcommand - Watch the
*.go,*.cand other cgo files in the current package and automatically real build - Use
inotifyfor Linux,fseventsfor OS X- Create
go-notifypackage?
- Create
- Show build and watch log in the split buffer
- Re-highlighting color syntax for current buffer based by AST information
delve debugging
https://github.com/derekparker/delve
https://blog.gopheracademy.com/advent-2015/debugging-with-delve/
- Debugging use
delve - Support
debugcommand- Build from current sources
- Support
execcommand- Execute go binary
- Support
connectcommand- Currently use dlv headless feature and api.
connectcommand should be execute with standalone.
- Currently use dlv headless feature and api.
- Stepping exection(
continue,next,step,step-instruction) with pc sign and color highlight- If debug a large output command, sometimes freezing the neovim. need state(busy) check
-
lldb.nvimlike Debugging UI - vs-code and go-debug like UI interface
- Highlight the current hitting breakpoint with fadeout (but too far)
- Set breakpoint with
signand key mapping - Ref: Microsoft vs-code feature
- Ref: go-debug - go debugger for atom
- Support all cgo feature
- Use go-clang: https://github.com/go-clang/v3.7
- Go cgo internal sources:
- Definition(Jump to)
C.func or var source - cgo completion was Implemented
deoplete-gouse libclang-python3
- gotests (
GoGenerateTest)
- Use
go testfeature
https://github.com/fatih/vim-go/blob/master/autoload/go/alternate.vim
- Implements
GoTestSwitchcommand - Jump to the corresponding (test)function based by parses the AST information
- Instead of
GoAlternate
https://github.com/fatih/vim-go/blob/master/autoload/go/cmd.vim#L16
- Fix display the wrong file path to the
quickfixorlocation-list- Fixed but less than perfect
- Inline build(no spawn
go build) if possible
https://github.com/fatih/vim-go/blob/master/autoload/go/cmd.vim
- Implements
GoCoveragecommand -
go test -coverprofile - Support other coverage tools
- goveralls: https://github.com/mattn/goveralls
https://github.com/fatih/vim-go/blob/master/autoload/go/complete.vim#L99
- Implements
GoInfocommand use guru - Support timer without vim's
updatetimevalue - Do not re-call if same code on current cursor
https://github.com/fatih/vim-go/blob/master/autoload/go/cmd.vim#L145
- Implements
GoInstallcommand
https://github.com/fatih/vim-go/blob/master/autoload/go/lint.vim
- Goal is full analysis to Go sources and lint, like
flake8tool- Will create yet another
gometalintertool from scratch if necessary -
flake8is defact standard in Python, Refer toflake8internal and plugin interface
- Will create yet another
- Implements
golintonly command (GoLint) - Implements
govetonly command (GoVet) - Support other linter tools
- errcheck: https://github.com/kisielk/errcheck
- lll: https://github.com/walle/lll
https://github.com/fatih/vim-go/blob/master/autoload/go/cmd.vim#L188
- Implements
GoTestcommand output to neovim terminal feature - Support
run=funcflag - Support GoTestCompile(?)
- Support unsaved file (buffer)
-
definitionsubcommand support use cgo file (need fixgurucore)- Tentatively workaround: https://github.com/zchee/nvim-go/commit/950aa062bd0e7086de3c11753e1bc4ea083e6334
- Less than perfect. Maybe can't parse the
structprovided behavior
- Implements tags flag feature
- Support stacking
| Done | vim-go commands | vim-go functions | nvim-go | async |
|---|---|---|---|---|
GoInstallBinaries |
s:GoInstallBinaries(-1) |
Not support | - | |
GoUpdateBinaries |
s:GoInstallBinaries(1) |
Not support | - | |
GoPath |
go#path#GoPath(<f-args>) |
- | - | |
GoRename |
go#rename#Rename(<bang>0,<f-args>) |
Gorename |
Yes | |
GoGuruScope |
go#guru#Scope(<f-args>) |
- | - | |
GoImplements |
go#guru#Implements(<count>) |
GoGuruImplements |
Yes | |
GoCallees |
go#guru#Callees(<count>) |
GoGuruCallees |
Yes | |
GoDescribe |
go#guru#Describe(<count>) |
GoGuruDescribe |
Yes | |
GoCallers |
go#guru#Callers(<count>) |
GoGuruCallers |
Yes | |
GoCallstack |
go#guru#Callstack(<count>) |
GoGuruCallstack |
Yes | |
GoFreevars |
go#guru#Freevars(<count>) |
GoGuruFreevars |
Yes | |
GoChannelPeers |
go#guru#ChannelPeers(<count>) |
GoGuruChannelPeers |
Yes | |
GoReferrers |
go#guru#Referrers(<count>) |
GoGuruReferrers |
Yes | |
GoGuruTags |
go#guru#Tags(<f-args>) |
- | - | |
GoSameIds |
go#guru#SameIds(<count>) |
- | - | |
GoFiles |
go#tool#Files() |
- | - | |
GoDeps |
go#tool#Deps() |
- | - | |
GoInfo |
go#complete#Info(0) |
- | - | |
GoBuild |
go#cmd#Build(<bang>0,<f-args>) |
Gobuild |
Yes | |
GoGenerate |
go#cmd#Generate(<bang>0,<f-args>) |
- | - | |
GoRun |
go#cmd#Run(<bang>0,<f-args>) |
Gorun |
Yes | |
GoInstall |
go#cmd#Install(<bang>0, <f-args>) |
- | - | |
GoTest |
go#cmd#Test(<bang>0, 0, <f-args>) |
Gotest |
Yes | |
GoTestFunc |
go#cmd#TestFunc(<bang>0, <f-args>) |
- | - | |
GoTestCompile |
go#cmd#Test(<bang>0, 1, <f-args>) |
- | - | |
GoCoverage |
go#coverage#Buffer(<bang>0, <f-args>) |
- | - | |
GoCoverageClear |
go#coverage#Clear() |
- | - | |
GoCoverageToggle |
go#coverage#BufferToggle(<bang>0, <f-args>) |
- | - | |
GoCoverageBrowser |
go#coverage#Browser(<bang>0, <f-args>) |
- | - | |
GoPlay |
go#play#Share(<count>, <line1>, <line2>) |
- | - | |
GoDef |
go#def#Jump('') |
call GoGuru('definition') |
Yes | |
GoDefPop |
go#def#StackPop(<f-args>) |
- | - | |
GoDefStack |
go#def#Stack(<f-args>) |
- | - | |
GoDefStackClear |
go#def#StackClear(<f-args>) |
- | - | |
GoDoc |
go#doc#Open('new', 'split', <f-args>) |
- | - | |
GoDocBrowser |
go#doc#OpenBrowser(<f-args>) |
- | - | |
GoFmt |
go#fmt#Format(-1) |
Gofmt |
Any | |
GoImports |
go#fmt#Format(1) |
Gofmt |
Any | |
GoDrop |
go#import#SwitchImport(0, '', <f-args>, '') |
- | - | |
GoImport |
go#import#SwitchImport(1, '', <f-args>, '<bang>') |
- | - | |
GoImportAs |
go#import#SwitchImport(1, <f-args>, '<bang>') |
- | - | |
GoMetaLinter |
go#lint#Gometa(0, <f-args>) |
Gometalinter |
Yes | |
GoLint |
go#lint#Golint(<f-args>) |
- | - | |
GoVet |
go#lint#Vet(<bang>0, <f-args>) |
- | - | |
GoErrCheck |
go#lint#Errcheck(<f-args>) |
- | - | |
GoAlternate |
go#alternate#Switch(<bang>0, '') |
GoTestSwitch |
Yes | |
GoDecls |
ctrlp#init(ctrlp#decls#cmd(0, <q-args>)) |
- | - | |
GoDeclsDir |
ctrlp#init(ctrlp#decls#cmd(1, <q-args>)) |
- | - |