diff --git a/cmd/cue/cmd/common.go b/cmd/cue/cmd/common.go index 869229d80..933542928 100644 --- a/cmd/cue/cmd/common.go +++ b/cmd/cue/cmd/common.go @@ -32,6 +32,7 @@ import ( "cuelang.org/go/cue/parser" "cuelang.org/go/cue/token" "cuelang.org/go/internal" + "cuelang.org/go/internal/cuedebug" "cuelang.org/go/internal/encoding" "cuelang.org/go/internal/filetypes" ) @@ -57,8 +58,8 @@ func defaultConfig() (*config, error) { parser.FromVersion(version), parser.ParseComments, } - // TODO: consolidate all options into a single CUE_DEBUG variable. - if os.Getenv("CUE_DEBUG_PARSER_TRACE") != "" { + cuedebug.Init() + if cuedebug.Flags.ParserTrace { options = append(options, parser.Trace) } return parser.ParseFile(name, src, options...) diff --git a/cmd/cue/cmd/help.go b/cmd/cue/cmd/help.go index c6498d831..b9373d59e 100644 --- a/cmd/cue/cmd/help.go +++ b/cmd/cue/cmd/help.go @@ -317,6 +317,8 @@ If an environment variable is unset or empty, sensible default setting is used. Force fields in stucts to be sorted lexicographically. toolsflow Print task dependency mermaid graphs in 'cue cmd'. + parsertrace + Print a trace of parsed CUE productions. CUE_EXPERIMENT and CUE_DEBUG are comma-separated lists of key-value strings, where the value is a boolean "true" or "1" if omitted. For example: diff --git a/cmd/cue/cmd/testdata/script/parser_trace.txtar b/cmd/cue/cmd/testdata/script/parser_trace.txtar index 13b659802..8f320d3ea 100644 --- a/cmd/cue/cmd/testdata/script/parser_trace.txtar +++ b/cmd/cue/cmd/testdata/script/parser_trace.txtar @@ -1,4 +1,4 @@ -env CUE_DEBUG_PARSER_TRACE=1 +env CUE_DEBUG=parsertrace=1 exec cue vet -c=false schema.cue cmp stdout parser-trace.stdout diff --git a/internal/cuedebug/cuedebug.go b/internal/cuedebug/cuedebug.go index f52add976..a71f575b8 100644 --- a/internal/cuedebug/cuedebug.go +++ b/internal/cuedebug/cuedebug.go @@ -47,6 +47,9 @@ type Config struct { // ToolsFlow causes [cuelang.org/go/tools/flow] to print a task dependency mermaid graph. ToolsFlow bool + + // ParserTrace causes [cuelang.org/go/cue/parser] to print a trace of parsed productions. + ParserTrace bool } // Init initializes Flags. Note: this isn't named "init" because we