From 77ee861ca208fd7f5a674ac0c442f92009ae42d7 Mon Sep 17 00:00:00 2001
From: Jaana Burcu Dogan
Date: Wed, 14 Jun 2017 12:41:14 -0700
Subject: [PATCH] doc: add an editor guide
The Go ecosystem provides many tools to make Go
development more productive and seamless. Document
the availability of the editor plugins and IDEs,
add an overview of feature support and screencasts.
Updates #20398.
Updates #20402.
Updates #20399.
Updates #20401.
Updates #20569.
Change-Id: I0c6cb48eb4e3848807aaad78390493e14f097916
Reviewed-on: https://go-review.googlesource.com/45772
Reviewed-by: Steve Francia
---
doc/docs.html | 6 ++
doc/editors.html | 210 +++++++++++++++++++++++++++++++++++++++
doc/editors/gogland.png | Bin 0 -> 9430 bytes
doc/editors/vimgo.png | Bin 0 -> 7591 bytes
doc/editors/vscodego.png | Bin 0 -> 3373 bytes
5 files changed, 216 insertions(+)
create mode 100644 doc/editors.html
create mode 100644 doc/editors/gogland.png
create mode 100644 doc/editors/vimgo.png
create mode 100644 doc/editors/vscodego.png
diff --git a/doc/docs.html b/doc/docs.html
index 1ccd1f3fe7..92392e2596 100644
--- a/doc/docs.html
+++ b/doc/docs.html
@@ -57,6 +57,12 @@ explains how to use the go command to fetch, build, and
install packages, commands, and run tests.
+
+
+A document that summarizes commonly used editor plugins and IDEs with
+Go support.
+
+
A document that gives tips for writing clear, idiomatic Go code.
diff --git a/doc/editors.html b/doc/editors.html
new file mode 100644
index 0000000000..dd74446d7b
--- /dev/null
+++ b/doc/editors.html
@@ -0,0 +1,210 @@
+
+
+
Introduction
+
+
+ This document lists commonly used editor plugins and IDEs from the Go ecosystem
+ that makes Go development more productive and seamless.
+ A comphensive list of editor support and IDEs for Go development is available on
+ the wiki.
+
+
+Options
+
+The Go ecosystem provides a variety of editor plugins and IDEs to enhance your day-to-day
+editing, navigation, testing, and debugging experience.
+
+
+
+- Vim Go: a plugin for Vim to provide Go programming language support
+- Visual Studio Code Go:
+an extension for Visual Studio Code to provide support for the Go programming language
+- Gogland: Gogland is distributed either as standalone IDE
+or a plugin for the IntelliJ Platform IDEs
+
+
+
+Note that these are only a few top solutions, a more comphensive
+community maintained list of
+IDEs and text editor plugins
+is available at the wiki.
+
+
+
+Each development environment provides a large variety of static and dynamic tool integrations.
+The following feature matrix lists and compares the most significant features.
+
+
+
+
+ |
+  Vim Go |
+  Visual Studio Code Go |
+  Gogland |
+
+
+ Editing features |
+
+
+ Build and run from the editor/IDE |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Autocompletion of identifers (variable, method, and function names) |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Autocompletion based on type |
+ No |
+ No |
+ Yes |
+
+
+ Rename identifiers |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Auto format, build, vet, and lint on save |
+ Yes |
+ Yes |
+ Yes1 |
+
+
+ Auto insert import paths and remove unused on save |
+ Yes |
+ Yes |
+ Yes2 |
+
+
+ Auto generate JSON, XML tags for struct fields |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Navigation features |
+
+
+ Display documentation inline, or open godoc in browser |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Switch between *.go and *_test.go file |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Jump to definition and referees |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Look up for interface implementations |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Search for callers and callees |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Testing and debugging features |
+
+
+ Debugger support |
+ No |
+ Yes |
+ Yes |
+
+
+ Run a single test case, all tests from file, or all tests from a package |
+ Yes |
+ Yes |
+ Yes |
+
+
+ Auto generate tests for packages, files and identifiers |
+ No |
+ Yes |
+ No |
+
+
+ Debug tests |
+ No |
+ Yes |
+ Yes |
+
+
+ Display test coverage |
+ Yes |
+ Yes |
+ Yes |
+
+
+ |
+ Install |
+ Install |
+ Install |
+
+
+
+
+1: Possible when enabled via Settings > Go > On Save, go vet and golint are available via plugins. Also runs tests on save if configured.
+
+2: Additionally, user input can disambiguate when two or more options are available.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/doc/editors/gogland.png b/doc/editors/gogland.png
new file mode 100644
index 0000000000000000000000000000000000000000..842f089e4ad9851cc2823ea0c17e02e577b2fcb1
GIT binary patch
literal 9430
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
literal 0
HcmV?d00001
diff --git a/doc/editors/vimgo.png b/doc/editors/vimgo.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf317eff32f178ecc2b33291fa8f0290072489ea
GIT binary patch
literal 7591
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