The Golang Build Sublime Text package is structured as follows:
- The primary user interaction happens through the Sublime Text build system, which parses the "Go.sublime-build" file
- The primary build task is "go build", but variants exists for "go test", "go install", "go clean" and cross-compile, which is "go build" with GOOS and GOARCH set. All of these tasks are executing by the Sublime Text command named "golang_build".
- Additional Sublime Text commands are implemented that implement the following
functionality:
- "golang_build_get" provides an interface to "go get"
- "golang_terminal" opens a terminal to the Go workspace with all appropriate environment variables set
- "golang_build_cancel" allows users to kill an in-process build
- "golang_build_reopen" allows users to reopen the build output panel Each of these commands is exposed to the command palette via the file Default.sublime-commands
- Configuration uses the Package Control dependency golangconfig, which allows users to set settings globally in Sublime Text, for each OS globally, per-project, or for each OS in a project
- Settings exist that allow users to customize command line flags on a per-task-basis
As is dictated by the Sublime Text API, the following list shows a mapping of command to Python class name:
golang_build
:GolangBuildCommand()
golang_build_get
:GolangBuildGetCommand()
golang_build_cancel
:GolangBuildCancelCommand()
golang_build_reopen
:GolangBuildReopenCommand()
golang_build_terminal
:GolangBuildTerminalCommand()
For golang_build
and golang_build_get
, the commands display output to the
user via an output panel. Normally with Sublime Text when a reference to the
sublime.View
object for an output panel is requested, any existing content is
erased. To prevent a jarring experience for users when a build is interrupted,
a reference to each window's Golang Build output panel is held in memory and
re-used when a user interrupts a running build with a new invocation.
The GolangProcess()
class reprents an invocation of the go
executable, and
provides a queue of output information. This output queue is processed by a
GolangProcessPrinter()
object which adds environment information before the
output starts, and summary information once completed. There is one
GolangPanel()
object per Sublime Text window, and it contains a lock to ensure
that only one GolangProcessPrinter()
may be displaying output at a time to
prevent interleaved output.