iterative/vscode-dvc

View on GitHub
extension/src/setup/commands/register.ts

Summary

Maintainability
A
0 mins
Test Coverage
B
84%
import { commands } from 'vscode'
import {
  addRemoteToProject,
  pickRemoteAndModify,
  pickRemoteAndRemove,
  runCallbackOnDvcRoot
} from '.'
import { Setup } from '..'
import { run } from '../runner'
import { SetupSection } from '../webview/contract'
import { AvailableCommands, InternalCommands } from '../../commands/internal'
import {
  RegisteredCliCommands,
  RegisteredCommands
} from '../../commands/external'
import { getFirstWorkspaceFolder } from '../../vscode/workspaceFolders'

const registerSetupConfigCommands = (
  setup: Setup,
  internalCommands: InternalCommands
): void => {
  internalCommands.registerExternalCommand(
    RegisteredCommands.EXTENSION_CHECK_CLI_COMPATIBLE,
    () => run(setup)
  )

  setup.dispose.track(
    commands.registerCommand(RegisteredCommands.EXTENSION_SETUP_WORKSPACE, () =>
      setup.setupWorkspace()
    )
  )
  internalCommands.registerExternalCommand(
    RegisteredCommands.SELECT_FOCUSED_PROJECTS,
    () => setup.selectFocusedProjects()
  )
}

const registerSetupShowCommands = (
  setup: Setup,
  internalCommands: InternalCommands
): void => {
  internalCommands.registerExternalCommand(
    RegisteredCommands.SETUP_SHOW,
    async () => {
      await setup.showSetup()
    }
  )

  internalCommands.registerExternalCommand(
    RegisteredCommands.SETUP_SHOW_EXPERIMENTS,
    async () => {
      await setup.showSetup(SetupSection.EXPERIMENTS)
    }
  )

  internalCommands.registerExternalCommand(
    RegisteredCommands.SETUP_SHOW_DVC,
    async () => {
      await setup.showSetup(SetupSection.DVC)
    }
  )

  internalCommands.registerExternalCommand(
    RegisteredCommands.SETUP_SHOW_STUDIO_CONNECT,
    async () => {
      await setup.showSetup(SetupSection.STUDIO)
    }
  )

  internalCommands.registerExternalCommand(
    RegisteredCommands.SETUP_SHOW_STUDIO_SETTINGS,
    async () => {
      await setup.showSetup(SetupSection.STUDIO)
    }
  )
}

const registerSetupStudioCommands = (
  setup: Setup,
  internalCommands: InternalCommands
): void => {
  internalCommands.registerExternalCommand(
    RegisteredCommands.ADD_STUDIO_ACCESS_TOKEN,
    () => setup.saveStudioAccessToken()
  )

  internalCommands.registerExternalCommand(
    RegisteredCommands.UPDATE_STUDIO_ACCESS_TOKEN,
    () => setup.saveStudioAccessToken()
  )

  internalCommands.registerExternalCommand(
    RegisteredCommands.REMOVE_STUDIO_ACCESS_TOKEN,
    () => setup.removeStudioAccessToken()
  )
  internalCommands.registerExternalCommand(
    RegisteredCommands.ADD_STUDIO_URL,
    () => setup.saveStudioUrl()
  )
  internalCommands.registerExternalCommand(
    RegisteredCommands.UPDATE_STUDIO_URL,
    () => setup.saveStudioUrl()
  )
  internalCommands.registerExternalCommand(
    RegisteredCommands.REMOVE_STUDIO_URL,
    () => setup.removeStudioUrl()
  )
}

export const registerSetupCommands = (
  setup: Setup,
  internalCommands: InternalCommands
): void => {
  internalCommands.registerExternalCliCommand(
    RegisteredCliCommands.INIT,
    async () => {
      const root = getFirstWorkspaceFolder()
      if (root) {
        await internalCommands.executeCommand(AvailableCommands.INIT, root)
      }
    }
  )

  internalCommands.registerExternalCliCommand(
    RegisteredCliCommands.REMOTE_ADD,
    () => runCallbackOnDvcRoot(setup, internalCommands, addRemoteToProject)
  )

  internalCommands.registerExternalCliCommand(
    RegisteredCliCommands.REMOTE_MODIFY,
    () => runCallbackOnDvcRoot(setup, internalCommands, pickRemoteAndModify)
  )

  internalCommands.registerExternalCliCommand(
    RegisteredCliCommands.REMOTE_REMOVE,
    () => runCallbackOnDvcRoot(setup, internalCommands, pickRemoteAndRemove)
  )

  registerSetupConfigCommands(setup, internalCommands)
  registerSetupShowCommands(setup, internalCommands)
  registerSetupStudioCommands(setup, internalCommands)
}