func Current() Reporter {
	if currentReporter == nil {
		if MachineReadable {
			currentReporter = newJSONConsole(os.Stdout, IsParallel, 0)
		} else if SimpleConsoleOutput {
			currentReporter = newSimpleConsole(os.Stdout)
		} else if Verbose {
			currentReporter = newVerboseColoredConsole(os.Stdout)
		} else {
			currentReporter = newColoredConsole(os.Stdout)
		}
	}
	return currentReporter
}
Current returns the current instance of Reporter, if present. Else, it returns a new Reporter.
package reporter
import (
	"fmt"
	"io"
	"os"
	"runtime/debug"
	"sync"
	"github.com/getgauge/gauge-proto/go/gauge_messages"
	"github.com/getgauge/gauge/execution/event"
	"github.com/getgauge/gauge/execution/result"
	"github.com/getgauge/gauge/formatter"
	"github.com/getgauge/gauge/gauge"
	"github.com/getgauge/gauge/logger"
)
var IsParallel bool
var NumberOfExecutionStreams int
var SimpleConsoleOutput bool
var Verbose bool
var MachineReadable bool
const newline = "\n"
type Reporter interface {
	SuiteStart()
	SpecStart(*gauge.Specification, result.Result)
	SpecEnd(*gauge.Specification, result.Result)
	ScenarioStart(*gauge.Scenario, *gauge_messages.ExecutionInfo, result.Result)
	ScenarioEnd(*gauge.Scenario, result.Result, *gauge_messages.ExecutionInfo)
	StepStart(string)
	StepEnd(gauge.Step, result.Result, *gauge_messages.ExecutionInfo)
	ConceptStart(string)
	ConceptEnd(result.Result)
	DataTable(string)
	SuiteEnd(result.Result)
	Errorf(string, ...interface{})
	io.Writer
}
var currentReporter Reporter
func reporter(e event.ExecutionEvent) Reporter {
	if IsParallel {
		return ParallelReporter(e.Stream)
	}
	return Current()
}