You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: import_command_runner.go
    path of file: ./repos/atlantis/server/events
    
    the code of the file until where you have to start completion: package events

import (
	"github.com/runatlantis/atlantis/server/events/command"
	"github.com/runatlantis/atlantis/server/events/vcs"
)

func NewImportCommandRunner(
	pullUpdater *PullUpdater,
	pullReqStatusFetcher vcs.PullReqStatusFetcher,
	prjCmdBuilder ProjectImportCommandBuilder,
	prjCmdRunner ProjectImportCommandRunner,
	SilenceNoProjects bool,
) *ImportCommandRunner {
	return &ImportCommandRunner{
		pullUpdater:          pullUpdater,
		pullReqStatusFetcher: pullReqStatusFetcher,
		prjCmdBuilder:        prjCmdBuilder,
		prjCmdRunner:         prjCmdRunner,
		SilenceNoProjects:    SilenceNoProjects,
	}
}

type ImportCommandRunner struct {
	pullUpdater          *PullUpdater
	pullReqStatusFetcher vcs.PullReqStatusFetcher
	prjCmdBuilder        ProjectImportCommandBuilder
	prjCmdRunner         ProjectImportCommandRunner
	SilenceNoProjects    bool
}

func (v *ImportCommandRunner) Run(ctx *command.Context, cmd *CommentCommand) {
	var err error
	// Get the mergeable status before we set any build statuses of our own.
	// We do
    
func (v *ImportCommandRunner) Run(ctx *command.Context, cmd *CommentCommand) {
	var err error
	// Get the mergeable status before we set any build statuses of our own.
	// We do this here because when we set a "Pending" status, if users have
	// required the Atlantis status checks to pass, then we've now changed
	// the mergeability status of the pull request.
	// This sets the approved, mergeable, and sqlocked status in the context.
	ctx.PullRequestStatus, err = v.pullReqStatusFetcher.FetchPullStatus(ctx.Log, ctx.Pull)
	if err != nil {
		// On error we continue the request with mergeable assumed false.
		// We want to continue because not all import will need this status,
		// only if they rely on the mergeability requirement.
		// All PullRequestStatus fields are set to false by default when error.
		ctx.Log.Warn("unable to get pull request status: %s. Continuing with mergeable and approved assumed false", err)
	}

	var projectCmds []command.ProjectContext
	projectCmds, err = v.prjCmdBuilder.BuildImportCommands(ctx, cmd)
	if err != nil {
		ctx.Log.Warn("Error %s", err)
	}

	if len(projectCmds) == 0 && v.SilenceNoProjects {
		ctx.Log.Info("determined there was no project to run import in.")
		return
	}
	var result command.Result
	if len(projectCmds) > 1 {
		// There is no usecase to kick terraform import into multiple projects.
		// To avoid incorrect import, suppress to execute terraform import in multiple projects.
		result = command.Result{
			Failure: "import cannot run on multiple projects. please specify one project.",
		}
	} else {
		result = runProjectCmds(projectCmds, v.prjCmdRunner.Import)
	}
	v.pullUpdater.updatePull(ctx, cmd, result)
}