mvdan / Goreduce
Licence: bsd-3-clause
Reduce Go programs
Stars: ✭ 201
Programming Languages
go
31211 projects - #10 most used programming language
goreduce
Reduce a program to its simplest form as long as it produces a compiler error or any output (such as a panic) matching a regular expression.
go get -u mvdan.cc/goreduce
Example
func main() {
a := []int{1, 2, 3}
if true {
a = append(a, 4)
}
a[1] = -2
println(a[10])
}
goreduce -match 'index out of range' .
func main() {
a := []int{}
println(a[0])
}
For more usage information, see goreduce -h
.
Design
- The tool should be reproducible, giving the same output for an input program as long as external factors don't modify its behavior
- The rules should be as simple and composable as possible
- Rules should avoid generating changes that they can know won't compile
Rules
Removing
Before | After | |
---|---|---|
statement | a; b |
a or b
|
index | a[1] |
a |
slice | a[:2] |
a or a[:]
|
binary part |
a + b , a && b
|
a or b
|
unary op |
-a , !a
|
a |
star | *a |
a |
parentheses | (a) |
a |
if/else | if a { b } else c |
b or c
|
defer | defer f() |
f() |
go | go f() |
f() |
basic value | 123, "foo" |
0, "" |
composite value | T{a, b} |
T{} |
Inlining
Before | After | |
---|---|---|
const | const c = 0; f(c) |
f(0) |
var | v := false; f(v) |
f(false) |
case | case x: a |
a |
block | { a } |
a |
simple call | f() |
{ body } |
Resolving
Before | After | |
---|---|---|
integer op | 2 * 3 |
6 |
string op | "foo" + "bar" |
"foobar" |
slice | "foo"[1:] |
"oo" |
index | "foo"[0] |
'f' |
builtin | len("foo") |
3 |
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].