anaconda_go
AnacondaGO 为您的 Sublime Text 3 添加了 Golang 的自动完成、代码检查和 IDE 功能
详细信息
安装量
- 总计 39K
- Win 28K
- Mac 6K
- Linux 4K
8月6日 | 8月5日 | 8月4日 | 8月3日 | 8月2日 | 8月1日 | 7月31日 | 7月30日 | 7月29日 | 7月28日 | 7月27日 | 7月26日 | 7月25日 | 7月24日 | 7月23日 | 7月22日 | 7月21日 | 7月20日 | 7月19日 | 7月18日 | 7月17日 | 7月16日 | 7月15日 | 7月14日 | 7月13日 | 7月12日 | 7月11日 | 7月10日 | 7月9日 | 7月8日 | 7月7日 | 7月6日 | 7月5日 | 7月4日 | 7月3日 | 7月2日 | 7月1日 | 6月30日 | 6月29日 | 6月28日 | 6月27日 | 6月26日 | 6月25日 | 6月24日 | 6月23日 | 6月22日 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 10 | 5 | 1 | 4 | 5 | 3 | 1 | 3 | 3 | 11 | 2 | 11 | 3 | 6 | 7 | 3 | 5 | 6 | 1 | 4 | 7 | 6 | 3 | 1 | 5 | 5 | 6 | 3 | 4 | 7 | 2 | 5 | 4 | 5 | 2 | 8 | 10 | 4 | 6 | 2 | 3 | 3 | 6 | 5 | 3 | 7 |
Mac | 0 | 2 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 3 | 0 | 0 | 0 | 3 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 2 | 1 | 0 | 0 | 1 | 0 |
Linux | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
自述文件
|
_` | __ \ _` | __| _ \ __ \ _` | _` | _` | _ \
( | | | ( | ( ( | | | ( | ( | ( | ( |
\__,_| _| _| \__,_| \___| \___/ _| _| \__,_| \__,_| \__, | \___/
|___/
The Sublime Text 3 Go IDE
AnacondaGO 使用 anaconda 的异步引擎为您的 Sublime Text 3 添加 Golang 的自动完成、代码检查和 IDE 功能,因此它不会使您的 Sublime Text 冻结。
注意:AnacondaGO 本身不包括任何按键绑定,因为我们认为软件包的按键绑定会干扰其他功能,不过,我们在这个相同的自述文件中提供了一些按键绑定的建议。
目录
注意!
该项目正在积极开发中,请报告您发现的所有问题,包括足够有用的信息,“它不起作用”这样的票证对我们都无益。当您打开新的票证时,请遵守以下规则
- 添加您的 ST3 构建版本
- 添加您的 Anaconda 版本
- 添加您的 AnacondaGO 版本
- 添加您的 Go 版本、GOPATH 和 GOROOT 以及如果您使用某些类型的供应商
- 添加您的 Python 解释器版本
- 添加您的操作系统版本
- 尽可能详细和详尽地说明
- 提供如何重现问题的说明
- 尽可能提供有关您环境的信息
AnacondaGO 不是 GoSublime 的分支,它也并不试图作为 GoSublime 的替代品或实现 GoSublime 已经实现的功能。这是一个全新的适用于 Sublime Text 3 的 Go 语言包,采用了其独特的方法和视角。
支持平台
AnacondaGO 已在 GNU/Linux 上开发和测试,效果非常好。不同平台的状态如下:
- GNU/Linux: 测试版
- OS X: 测试版
- Windows: 测试版(测试不足)
依赖关系
- Anaconda 插件针对 Sublime Text 3
- Go
依赖关系安装
AnacondaGO 尝试在启动时安装所有依赖,它会从系统中推断您的 Go 配置,但如果您无法从系统中推断出您 Go 设置的情况下,您可能需要定义 anaconda_go_GOROOT
和 anaconda_go_GOPATH
。
注意:AnacondaGO 不会使用内置的 ST3 Python 解释器,有关 anaconda 和 python_interpreter
的更多信息,请参阅anaconda 的官方文档
插件安装
Anaconda 将在您尝试安装 AnacondaGO 时自动安装。如果您直接从 git 仓库安装 anaconda,则必须首先克隆 anaconda,然后切换到您的 Sublime Text 3 包 目录,并在其中克隆 anaconda。
git clone https://github.com/DamnWidget/anaconda.git anaconda
安装 AnacondaGO 插件
- 显示命令面板(在 OS X 上为
cmd+shift+p
,在 Linux/Windows 上为ctrl+shift+p
) - 键入
install
,然后从选项列表中选择Package Control: Install package
- 键入
anaconda_go
并按回车键
特性
AnacondaGO 通过内部使用不同的 Go 工具实现了许多功能。一些功能需要作用域,默认情况下,AnacondaGO 会尝试将您编辑代码的目录与活动的 GOPATH
进行比较以推断您的项目作用域,但用户可以在“anconda_go_guru_scope”设置选项中定义任何范围,只需添加一系列以逗号分隔的包列表。
实现状态
一些功能仍在开发中
- [x] 上下文相关的自动完成
- [x] 不合法语法检查(linting)
- [x] 代码风格 linting
- [x] 可疑或难闻的代码块分析(linting)
- [x] 冗余代码块分析(linting)
- [x] 函数复杂度分析(linting)
- [x] 死代码分析(linting)
- [x] 不效率的数据结构分析(linting)
- [x] 文件和包符号导航(包括变量、结构和函数)
- [x] 光标下方符号分析和导航
- [x] 探索安装的包和展示文档
- [x] 实现接口的辅助工具
- [x] 文件保存时的自动格式化和导入
- [x] 显示光标下符号的文档
- [x] 探索包并展示其文档
- [x] 查找符号引用者
- [x] 函数调用和堆栈分析
- [x] Channels 分析
- [x] 接口实现分析
- [x] 指针分析(静态解引用)
- [ ] 集成调试器?
注意:AnacondaGO 的所有功能并未在此列出。要获取完整列表,请打开 命令面板 并键入 AnacondaGO,您将获得所有可用的操作列表(请确保在键入时您的光标不在注释或字符串上,因为许多 AnacondaGO 命令在这些内容上会自动禁用)。
自动完成
自动完成总是激活的,不需要任何配置或快捷键,只需在您的 ST3 中编写代码即可
代码检查
AnacondaGO 支持多个 linting 工具。可以通过在 AnacondaGO 包配置中将 anaconda_go_linting
设置为 false
来禁用 linting。
相关配置
默认的代码检查配置可以查看以下内容:
代码检查器 | 描述 | 默认设置 |
---|---|---|
aligncheck | 检查结构体的对齐 | 启用 |
deadcode | 查找并报告未使用代码 | 启用 |
dupl | 查找并报告可能重复的代码 | 启用 |
errcheck | 检查错误报告是否被使用 | 启用 |
gas | 报告可能导致安全问题的常见编程错误 | 启用 |
goconst | 报告可以被定义为常量的重复字符串 | 启用 |
gocyclo | 报告函数的环路复杂度 | 启用 |
goling | 代码风格检查器 | 启用 |
gosimple | 报告代码中的简化情况 | 启用 |
gotype | 类似于Go编译器的语法和语义分析 | 启用 |
ineffassign | 检测赋值给现有变量但未使用的情况 | 启用 |
interfacer | 建议使用更窄的接口作为函数参数 | 启用 |
staticcheck | 检查函数输入的正确性 | 启用 |
structcheck | 报告未使用的结构体字段 | 启用 |
unconvert | 检测冗余的类型转换 | 启用 |
varcheck | 报告未使用的全局变量和常量 | 启用 |
go vet | 报告潜在的错误或恶臭代码 | 启用 |
go vet –shadow | 报告可能被意外隐藏的变量 | 启用 |
test | 显示从标准库测试模块中测试失败的地点 | 禁用 |
lll | 报告过长的行 | 禁用 |
testify | 显示失败的testify断言的地点 | 禁用 |
unused | 查找未使用的变量(相当冗余) | 禁用 |
请注意,在某些情况下,由于AnacondaGO优先考虑错误代码而不是警告,并且清理报告行,以在任何时候每行不超过一个错误,因此多个这些代码检查器可以在同一行中报告相同的错误。如果有两个不同的错误在一个行中,当一个被修复时,另一个将出现。
特定的代码检查器配置
一些代码检查器接受影响其行为的配置参数,这些参数可以通过在AnacondaGO配置中设置特定选项来配置。
仅执行快速的代码检查器
如果您觉得代码检查器报告非常慢,您可以尝试仅运行快速的代码检查器。在配置中
"anaconda_go_fast_linters_only": true
注意: 这将独立于其他配置禁用结构化检查器、变量检查器、错误检查器、对齐检查器、testify、test、interfacer、unconvert 和 deadcode。
设置lll的最大行长度
用户可以通过将anaconda_go_max_line_length
设置为他们想要的任何数值来为lll代码检查器指定最大行长度,默认值为120。
注意: lll代码检查器默认是禁用的。
设置环路复杂度阈值
可以通过将anaconda_go_gocyclo_threshold
设置为用户想要的任何值来调整gocyclo的复杂度阈值,默认值为10。
设置golint的最小置信度
用户可以通过将anaconda_go_min_confidence
设置为想要的任何小数值来设置golint在报告中报告某物是问题的最小置信度,默认值为0.80。
设置goconst的最小出现次数
可以通过将anaconda_go_min_occurrences
设置为所需的任何值来定义重复的字符串需要被goconst报告的最小次数,默认值是3。
设置goconst的最小长度
Goconst将忽略任何长度低于anaconda_go_min_const_length
的字符串,默认值为3。
重复阈值
如果dupl报告一个代码块为重复的阈值将包含至少有anaconda_go_dupl_threshold
字符克隆的 sequence,默认值是50。
启用测试的代码检查
如果用户想要用支持它的代码检查器对测试进行代码检查,只需将anaconda_go_lint_test
设置为true。
忽略gas警告
如果用户确定可以忽略来自Anaconda的安全报告,她可以通过在报告行的末尾添加注释来这样做,内容为“go // nosec
##### Ignore arbitrary reports
Arbitrary reports could be disabled adding regular expressions to the `anaconda_go_exclude_regexps`
### Jump to definition (goto)
AnacondaGO can jump to whatever symbol definition (if the source is available).
#### Usage
Put the cursor over the symbol you want to jump to, open the *Command Palette* and select **AnacondaGO: Goto Definition**
#### Suggested Keybinding
Our suggested key binding for this feature is:
```javascript
{ "keys": ["alt+k", "alt+g"], "command": "anaconda_go_goto", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go) - comment", "match_all": false}
]
}
相关配置
默认情况下,AnacondaGO会尝试使用guru
来查找定义,但如果感觉guru
太慢,用户可以启用godef
,设置anaconda_go_guru_usage
的值。有以下三种模式
模式 | 描述 | 默认 |
---|---|---|
总是 | 仅使用Guru | 是 |
回退 | 默认使用Godef,如果Godef无法检索到结果,则切换到Guru | 否 |
从不 | 无论什么情况,都使用Godef | 否 |
查找函数调用者
在代码中查找可能是函数调用目标的可能方法。此查询使用指针分析,因此需要作用域。
使用方法
将光标放在函数调用表达式中,然后打开命令面板并选择AnacondaGO: 获取可能函数调用者,您也可以通过右键单击使用相同的上下文菜单项。
建议按键绑定
{ "keys": ["alt+k", "alt+c"], "command": "anaconda_go_callees" , "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
查找函数被调用者
查找光标下函数的可能调用者。此查询使用指针分析,因此需要作用域。
使用方法
将光标放在函数调用表达式中,然后打开命令面板并选择AnacondaGO: 获取函数调用者,您也可以通过右键单击使用相同的上下文菜单项。
建议按键绑定
{ "keys": ["alt+Shift+k", "alt+Shift+c"], "command": "anaconda_go_callers" , "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
获取函数调用堆栈(近似的)
此命令返回从调用图根到光标下函数的路径。此查询使用指针分析,因此需要作用域。
使用方法
将光标放在函数调用表达式中,然后打开命令面板并选择AnacondaGO: 获取调用堆栈。
取消指针引用
此功能显示可能指向的指针的可能对象列表,它还适用于其他引用类型,如切片、函数、映射和通道。此查询使用指针分析,因此需要作用域。
使用方法
将光标放在引用上,然后打开命令面板并选择AnacondaGO: 取消引用指针。您也可以使用右键单击的相同上下文菜单选项。
建议按键绑定
{ "keys": ["alt+k", "alt+p"], "command": "anaconda_go_pointsto" , "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
获取引用者
此功能查找扫描所有必要的包(在$GOPATH和$GOROOT内)中光标下符号的所有引用。
使用方法
将光标放在引用上,然后打开命令面板并选择AnacondaGO: 获取引用者。您也可以使用右键单击的相同上下文菜单选项。
建议按键绑定
{ "keys": ["alt+k", "alt+r"], "command": "anaconda_go_referrers", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
实现
查找实现光标下符号的接口,如果符号本身是一个接口,它也将返回实现它的具体类型的集合。
使用方法
将光标放在引用上,然后打开命令面板并选择AnacondaGO: 实现。您也可以使用右键单击的相同上下文菜单选项。
建议按键绑定
{ "keys": ["alt+k", "alt+i"], "command": "anaconda_go_referrers", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
浏览文件功能
用户随时可以浏览当前正在编辑的文件中的函数定义
使用方法
在命令面板中选择AnacondaGO: 浏览文件函数并按回车键,将显示包含在文件中所有定义的函数的面板,并可以使用箭头键进行导航。
建议按键绑定
{ "keys": ["alt+k", "alt+f"], "command": "anaconda_go_explore_file_funcs", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
浏览文件结构
用户也可以随时浏览文件中定义的所有结构
使用方法
在命令面板中选择AnacondaGO: 浏览文件结构并按回车键。
建议按键绑定
我们为此功能建议的按键绑定是:“javascript { “keys”: [“alt+k”, “alt+s”], “command”: “anaconda_go_explore_file_structs”, “context”: [{“key”: “selector”, “operator”: “equal”, “operand”: “(source.go)”, “match_all”: false}] }
### Browse file declarations
The user can also browse over all the file functions and structs at once at any time
#### Usage
In the *Command Palette* select **AnacondaGO: Browse File Symbols** and press enter.
#### Suggested keybinding
Our suggested key binding for this feature is:
```javascript
{ "keys": ["alt+k", "alt+y"], "command": "anaconda_go_explore_file_decls", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
浏览包功能
用户可以浏览包含当前正在编辑的文件的包中所有函数
使用方法
在命令面板中选择< используеться>а浏览包功能并按Enter键,将显示一个包含文件上所有定义函数的面板,可以使用箭头键进行导航。如果用户选择尚未打开的文件的函数,它将在新的缓冲区中打开。
建议按键绑定
我们建议为此功能设置按键组合:“javascript { "keys": ["alt+Shift+k", "alt+f"], "command": "anaconda_go_explore_package_funcs", "context": [{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}]}
### Browse package structures
The user can also browse all the package defined structures at any time
#### Usage
In the *Command Palette* select **AnacondaGO: Browse Package Structs** and press enter.
#### Suggested keybinding
Our suggested key binding for this feature is:
```javascript
{ "keys": ["alt+Shift+k", "alt+s"], "command": "anaconda_go_explore_package_structs", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
]
}
浏览包声明
用户还可以浏览包括变量、常量、函数和结构体在内的所有包声明
使用方法
在命令面板中选择浏览包符号并按Enter键。
建议按键绑定
我们建议为此功能设置按键组合:“javascript { "keys": ["alt+Shift+k", "alt+y"], "command": "anaconda_go_explore_package_decls", "context": [{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}]}
### Explore Packages
In a similar way, AnacondaGO offers a panel to explore all the packages installed in your `GOPATH` as well as all the packages present in the standard library.
#### Usage
In the *Command Palette* select **AnacondaGO: Explore Packages** and press enter
### Symbol under the cursor analysis and navigation
AnacondaGO is able to analyze whatever (non ambiguous) symbol under the current cursor position and present a panel with information or a browsing panel.
#### Usage
Just situate the cursor over the symbol that you want to analyze and use the *Command Palette* command **AnacondaGO: Analyze Symbol**. Alternatively you can also click the right mouse button and select the same option in the contextual menu that is shown under the AnacondaGO menu entry.
If you want to browse the symbol contents use the *Command Palette* command **AnacondaGO: Browse Symbol**. Alternatively you can also click the right mouse button and select the same option in the contextual menu that is shown under the Anaconda menu entry.
#### Suggested keybindings
Out suggested key bindings for this feature are:
```javascript
{ "keys": ["alt+k", "alt+a"], "command": "anaconda_go_analyze_symbol", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
],
"args": { "operation": "analyze" }
},
{ "keys": ["alt+k", "alt+b"], "command": "anaconda_go_browse_symbol", "context":
[
{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}
],
"args": { "operation": "browse" }
}
显示光标下符号的文档
用户可以使用go_doc
或gogetdoc
查找光标下当前符号的文档,并在底部的面板中检索文档。
使用方法
只需将光标置于您想要检索文档的符号上,并使用命令面板&命令**AnacondaGO: 显示文档**>。您也可以单击鼠标右键,并在AnacondaGO菜单项下显示的上下文菜单中选择相同选项。
建议按键组合
我们建议为此功能设置的按键组合是:“javascript { "keys": ["alt+k", "alt+d"], "command": "anaconda_go_doc", "context": [{"key": "selector", "operator": "equal", "operand": "(source.go)", "match_all": false}]}
#### Related Configuration
AnacondaGO uses `gogetdoc` and `go doc` to retrieve documentation but `gogetdoc` is used by default (as it is able to find symbols that `go get` is not) if for some reason you prefer to use `go get` you can force it's usage setting the value of the `anaconda_go_force_go_doc_usage` setting to `true`.
You can also retrieve any unexported symbol documentation when using `go doc` by setting `anaconda_go_doc_private_symbols` to `true` (it is already true by default).
### Show Packages Documentation (Linux and OSX only)
AnacondaGO offers a simple to use installed packages documentation explorer that rely always on `go doc`. Using it you don't have the need to open your browser to retrieve documentation about any package in the standard library or any other installed package in your `GOPATH`.
#### Usage
Open the *Command Palette* and use the command **AnacondaGO: Show Packages Documentation**.
## Known Issues
### Go runtime update
If you update the Golang runtime you may need to update several packages for code linting/autocomplete.
go get -u golang.org/x/tools/cmd/godoc go get -u golang.org/x/tools/cmd/vet go get -u golang.org/x/tools/cmd/goimports go get -u golang.org/x/tools/cmd/gorename go get -u golang.org/x/tools/cmd/gotype go get -u golang.org/x/tools/cmd/guru go get -u github.com/golang/lint/golint go get -u github.com/nsf/gocode
The run `gocode close` from any terminal and restart sublime.
## License
This program is distributed under the terms of the GNU GPL v3. See the [LICENSE][license] file for more details.