extension.js 3.2 KB
Newer Older
1
const vscode = require('vscode');
F
Fatih Acet 已提交
2
const openers = require('./openers');
3
const tokenInput = require('./token_input');
4
const tokenService = require('./token_service');
F
Fatih Acet 已提交
5
const pipelineActionsPicker = require('./pipeline_actions_picker');
F
Fatih Acet 已提交
6
const searchInput = require('./search_input');
F
Fatih Acet 已提交
7
const snippetInput = require('./snippet_input');
F
Fatih Acet 已提交
8
const sidebar = require('./sidebar');
F
Fatih Acet 已提交
9
const ciConfigValidator = require('./ci_config_validator');
10
const webviewController = require('./webview_controller');
F
Fatih Acet 已提交
11
const IssuableDataProvider = require('./data_providers/issuable').DataProvider;
F
Fatih Acet 已提交
12
const CurrentBranchDataProvider = require('./data_providers/current_branch').DataProvider;
13

F
Fatih Acet 已提交
14 15
vscode.gitLabWorkflow = {
  sidebarDataProviders: [],
16 17 18 19 20 21 22 23 24 25 26 27 28 29
  log: () => {},
};

const wrapWithCatch = command => async () => {
  try {
    await command();
  } catch (e) {
    vscode.gitLabWorkflow.log(e.details || `${e.message}\n${e.stack}`);

    const choice = await vscode.window.showErrorMessage(e.message, null, 'Show logs');
    if (choice === 'Show logs') {
      vscode.commands.executeCommand('gl.showOutput');
    }
  }
F
Fatih Acet 已提交
30
};
F
Fatih Acet 已提交
31

F
Fatih Acet 已提交
32
const registerSidebarTreeDataProviders = () => {
33
  const issuableDataProvider = new IssuableDataProvider();
34

F
Fatih Acet 已提交
35 36
  const currentBranchDataProvider = new CurrentBranchDataProvider();

F
Fatih Acet 已提交
37 38 39
  const register = (name, provider) => {
    vscode.window.registerTreeDataProvider(name, provider);
    vscode.gitLabWorkflow.sidebarDataProviders.push(provider);
40
  };
F
Fatih Acet 已提交
41

42
  register('issuesAndMrs', issuableDataProvider);
F
Fatih Acet 已提交
43
  register('currentBranchInfo', currentBranchDataProvider);
44 45
};

46
const registerCommands = (context, outputChannel) => {
47 48 49 50 51 52
  const commands = {
    'gl.showIssuesAssignedToMe': openers.showIssues,
    'gl.showMergeRequestsAssignedToMe': openers.showMergeRequests,
    'gl.setToken': tokenInput.showInput,
    'gl.removeToken': tokenInput.removeTokenPicker,
    'gl.openActiveFile': openers.openActiveFile,
53
    'gl.copyLinkToActiveFile': openers.copyLinkToActiveFile,
54 55 56 57 58 59 60 61 62 63 64 65
    'gl.openCurrentMergeRequest': openers.openCurrentMergeRequest,
    'gl.openCreateNewIssue': openers.openCreateNewIssue,
    'gl.openCreateNewMR': openers.openCreateNewMr,
    'gl.openProjectPage': openers.openProjectPage,
    'gl.openCurrentPipeline': openers.openCurrentPipeline,
    'gl.pipelineActions': pipelineActionsPicker.showPicker,
    'gl.issueSearch': searchInput.showIssueSearchInput,
    'gl.mergeRequestSearch': searchInput.showMergeRequestSearchInput,
    'gl.compareCurrentBranch': openers.compareCurrentBranch,
    'gl.createSnippet': snippetInput.show,
    'gl.validateCIConfig': ciConfigValidator.validate,
    'gl.refreshSidebar': sidebar.refresh,
66
    'gl.showRichContent': webviewController.create,
67
    'gl.showOutput': () => outputChannel.show(),
68 69 70
  };

  Object.keys(commands).forEach(cmd => {
71
    context.subscriptions.push(vscode.commands.registerCommand(cmd, wrapWithCatch(commands[cmd])));
72 73 74 75
  });

  registerSidebarTreeDataProviders();
};
76

77 78 79 80 81
const activate = context => {
  const outputChannel = vscode.window.createOutputChannel('GitLab Workflow');
  vscode.gitLabWorkflow.log = line => outputChannel.appendLine(line);

  registerCommands(context, outputChannel);
82
  webviewController.addDeps(context);
83
  tokenService.init(context);
F
Fatih Acet 已提交
84 85
};

86
exports.activate = activate;