mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-15 21:02:28 -06:00
0532ad2636
Why a comprehension is not indexed should now be a little
more transparent, when enabling debug output:
$ opa build --debug test.rego
compile.go:1832: test.rego:3: no index vars
While changing this, the debug mechanism got more stream-y:
the different WithDebug() options take io.Writer, and they're
passed along to different sub-components. Nothing is retrieved
after (for example) compiling, but during compilation, the
debug messages are written to the passed writer.
The debug logs for optimization and planning now also include
the source file locations (go) where a debug message was logged.
Signed-off-by: Stephan Renatus <stephan.renatus@gmail.com>
37 lines
1.0 KiB
Go
37 lines
1.0 KiB
Go
package debug
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
"log"
|
|
)
|
|
|
|
// Debug allows printing debug messages.
|
|
type Debug interface {
|
|
// Printf prints, with a short file:line-number prefix
|
|
Printf(format string, args ...interface{})
|
|
// Writer returns the writer being written to, which may be
|
|
// `ioutil.Discard` if no debug output is requested.
|
|
Writer() io.Writer
|
|
|
|
// Output allows tweaking the calldepth used for figuring
|
|
// out which Go source file location is the interesting one,
|
|
// i.e., which is included in the debug message. Useful for
|
|
// setting up local helper methods.
|
|
Output(calldepth int, s string) error
|
|
}
|
|
|
|
// New returns a new `Debug` outputting to the passed `sink`.
|
|
func New(sink io.Writer) Debug {
|
|
flags := log.Lshortfile
|
|
return log.New(sink, "", flags)
|
|
}
|
|
|
|
// Discard returns a new `Debug` that doesn't output anything.
|
|
// Note: We're not implementing the methods here with noop stubs
|
|
// since doing this way, we can propagate the "discarding" via
|
|
// `(Debug).Writer()`.
|
|
func Discard() Debug {
|
|
return New(ioutil.Discard)
|
|
}
|