extension.js 3.3 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
  log: () => {},
T
Tomas Vik 已提交
17 18 19 20 21 22 23 24
  logError: e => vscode.gitLabWorkflow.log(e.details || `${e.message}\n${e.stack}`),
  handleError: async e => {
    vscode.gitLabWorkflow.logError(e);
    const choice = await vscode.window.showErrorMessage(e.message, null, 'Show logs');
    if (choice === 'Show logs') {
      await vscode.commands.executeCommand('gl.showOutput');
    }
  },
25 26 27 28 29 30
};

const wrapWithCatch = command => async () => {
  try {
    await command();
  } catch (e) {
T
Tomas Vik 已提交
31
    await vscode.gitLabWorkflow.handleError(e);
32
  }
F
Fatih Acet 已提交
33
};
F
Fatih Acet 已提交
34

F
Fatih Acet 已提交
35
const registerSidebarTreeDataProviders = () => {
36
  const issuableDataProvider = new IssuableDataProvider();
37

F
Fatih Acet 已提交
38 39
  const currentBranchDataProvider = new CurrentBranchDataProvider();

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

45
  register('issuesAndMrs', issuableDataProvider);
F
Fatih Acet 已提交
46
  register('currentBranchInfo', currentBranchDataProvider);
47 48
};

49
const registerCommands = (context, outputChannel) => {
50 51 52 53 54 55
  const commands = {
    'gl.showIssuesAssignedToMe': openers.showIssues,
    'gl.showMergeRequestsAssignedToMe': openers.showMergeRequests,
    'gl.setToken': tokenInput.showInput,
    'gl.removeToken': tokenInput.removeTokenPicker,
    'gl.openActiveFile': openers.openActiveFile,
56
    'gl.copyLinkToActiveFile': openers.copyLinkToActiveFile,
57 58 59 60 61 62 63 64 65 66 67 68
    '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,
69
    'gl.showRichContent': webviewController.create,
70
    'gl.showOutput': () => outputChannel.show(),
71 72 73
  };

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

  registerSidebarTreeDataProviders();
};
79

80 81 82 83 84
const activate = context => {
  const outputChannel = vscode.window.createOutputChannel('GitLab Workflow');
  vscode.gitLabWorkflow.log = line => outputChannel.appendLine(line);

  registerCommands(context, outputChannel);
85
  webviewController.addDeps(context);
86
  tokenService.init(context);
F
Fatih Acet 已提交
87 88
};

89
exports.activate = activate;