go-pry

command module
Version: v0.0.0-...-12ce946 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 26, 2021 License: MIT Imports: 10 Imported by: 0

README

go-pry

go-pry - an interactive REPL for Go that allows you to drop into your code at any point.

Tests GoDoc

go-pry

Example

go-pry Animated Example go-pry Example

Usage

Install go-pry

go get github.com/d4l3k/go-pry
go install -i github.com/d4l3k/go-pry

Add the pry statement to the code

package main

import "github.com/d4l3k/go-pry/pry"

func main() {
  a := 1
  pry.Pry()
}

Run the code as you would normally with the go command. go-pry is just a wrapper.

# Run
go-pry run readme.go

If you want completions to work properly, also install gocode if it is not installed in your system

go get -u github.com/nsf/gocode

How does it work?

go-pry is built using a combination of meta programming as well as a massive amount of reflection. When you invoke the go-pry command it looks at the Go files in the mentioned directories (or the current in cases such as go-pry build) and processes them. Since Go is a compiled language there's no way to dynamically get in scope variables, and even if there was, unused imports would be automatically removed for optimization purposes. Thus, go-pry has to find every instance of pry.Pry() and inject a large blob of code that contains references to all in scope variables and functions as well as those of the imported packages. When doing this it makes a copy of your file to .<filename>.gopry and modifies the <filename>.go then passes the command arguments to the standard go command. Once the command exits, it restores the files.

If the program unexpectedly fails there is a custom command go-pry restore [files] that will move the files back. An alternative is to just remove the pry.Apply(...) line.

Inspiration

go-pry is greatly inspired by Pry REPL for Ruby.

License

go-pry is licensed under the MIT license.

Made by Tristan Rice.

Documentation

The Go Gopher

There is no documentation for this package.

Source Files

Directories

Path Synopsis
example
playground
pry
safebuffer
safebuffer is a goroutine safe bytes.Buffer.
safebuffer is a goroutine safe bytes.Buffer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL