// ***************************************************************************** // Copyright (C) 2019 Ericsson and others. // // This program and the accompanying materials are made available under the // terms of the Eclipse Public License v. 2.0 which is available at // http://www.eclipse.org/legal/epl-2.0. // // This Source Code may also be made available under the following Secondary // Licenses when the conditions for such availability set forth in the Eclipse // Public License v. 2.0 are satisfied: GNU General Public License, version 2 // with the GNU Classpath Exception which is available at // https://www.gnu.org/software/classpath/license.html. // // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 // ***************************************************************************** /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { injectable } from '@theia/core/shared/inversify'; import { QuickPickValue } from '@theia/core/lib/browser'; import { nls } from '@theia/core'; /** The representation of a task template used in the auto-generation of `tasks.json` */ export interface TaskTemplateEntry { id: string; label: string; description: string; sort?: string; // string used in the sorting. If `undefined` the label is used in sorting. autoDetect: boolean; // not supported in Theia content: string; } const dotnetBuild: TaskTemplateEntry = { id: 'dotnetCore', label: '.NET Core', sort: 'NET Core', autoDetect: false, // not supported in Theia description: nls.localizeByDefault('Executes .NET Core build command'), content: [ '{', '\t// See https://go.microsoft.com/fwlink/?LinkId=733558', '\t// for the documentation about the tasks.json format', '\t"version": "2.0.0",', '\t"tasks": [', '\t\t{', '\t\t\t"label": "build",', '\t\t\t"command": "dotnet",', '\t\t\t"type": "shell",', '\t\t\t"args": [', '\t\t\t\t"build",', '\t\t\t\t// Ask dotnet build to generate full paths for file names.', '\t\t\t\t"/property:GenerateFullPaths=true",', '\t\t\t\t// Do not generate summary otherwise it leads to duplicate errors in Problems panel', '\t\t\t\t"/consoleloggerparameters:NoSummary"', '\t\t\t],', '\t\t\t"group": "build",', '\t\t\t"presentation": {', '\t\t\t\t"reveal": "silent"', '\t\t\t},', '\t\t\t"problemMatcher": "$msCompile"', '\t\t}', '\t]', '}' ].join('\n') }; const msbuild: TaskTemplateEntry = { id: 'msbuild', label: 'MSBuild', autoDetect: false, // not supported in Theia description: nls.localizeByDefault('Executes the build target'), content: [ '{', '\t// See https://go.microsoft.com/fwlink/?LinkId=733558', '\t// for the documentation about the tasks.json format', '\t"version": "2.0.0",', '\t"tasks": [', '\t\t{', '\t\t\t"label": "build",', '\t\t\t"type": "shell",', '\t\t\t"command": "msbuild",', '\t\t\t"args": [', '\t\t\t\t// Ask msbuild to generate full paths for file names.', '\t\t\t\t"/property:GenerateFullPaths=true",', '\t\t\t\t"/t:build",', '\t\t\t\t// Do not generate summary otherwise it leads to duplicate errors in Problems panel', '\t\t\t\t"/consoleloggerparameters:NoSummary"', '\t\t\t],', '\t\t\t"group": "build",', '\t\t\t"presentation": {', '\t\t\t\t// Reveal the output only if unrecognized errors occur.', '\t\t\t\t"reveal": "silent"', '\t\t\t},', '\t\t\t// Use the standard MS compiler pattern to detect errors, warnings and infos', '\t\t\t"problemMatcher": "$msCompile"', '\t\t}', '\t]', '}' ].join('\n') }; const maven: TaskTemplateEntry = { id: 'maven', label: 'maven', sort: 'MVN', autoDetect: false, // not supported in Theia description: nls.localizeByDefault('Executes common maven commands'), content: [ '{', '\t// See https://go.microsoft.com/fwlink/?LinkId=733558', '\t// for the documentation about the tasks.json format', '\t"version": "2.0.0",', '\t"tasks": [', '\t\t{', '\t\t\t"label": "verify",', '\t\t\t"type": "shell",', '\t\t\t"command": "mvn -B verify",', '\t\t\t"group": "build"', '\t\t},', '\t\t{', '\t\t\t"label": "test",', '\t\t\t"type": "shell",', '\t\t\t"command": "mvn -B test",', '\t\t\t"group": "test"', '\t\t}', '\t]', '}' ].join('\n') }; const command: TaskTemplateEntry = { id: 'externalCommand', label: 'Others', autoDetect: false, // not supported in Theia description: nls.localizeByDefault('Example to run an arbitrary external command'), content: [ '{', '\t// See https://go.microsoft.com/fwlink/?LinkId=733558', '\t// for the documentation about the tasks.json format', '\t"version": "2.0.0",', '\t"tasks": [', '\t\t{', '\t\t\t"label": "echo",', '\t\t\t"type": "shell",', '\t\t\t"command": "echo Hello"', '\t\t}', '\t]', '}' ].join('\n') }; @injectable() export class TaskTemplateSelector { selectTemplates(): QuickPickValue[] { const templates: TaskTemplateEntry[] = [ dotnetBuild, msbuild, maven ].sort((a, b) => (a.sort || a.label).localeCompare(b.sort || b.label) ); templates.push(command); return templates.map(t => ({ label: t.label, description: t.description, value: t })); } }