mirror of
https://github.com/kennethreitz/bake.git
synced 2026-06-05 23:00:17 +00:00
cleanup
This commit is contained in:
+30
@@ -0,0 +1,30 @@
|
||||
/*---------------------------------------------------------
|
||||
* Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*--------------------------------------------------------*/
|
||||
'use strict';
|
||||
var request = require('request');
|
||||
|
||||
var fallbackVersion = '^1.36.0';
|
||||
var promise = new Promise(function(resolve, reject) {
|
||||
request.get('https://vscode-update.azurewebsites.net/api/releases/stable', { headers: { "X-API-Version": "2" } }, function(error, response, body) {
|
||||
if (!error && response.statusCode === 200) {
|
||||
try {
|
||||
var tagsAndCommits = JSON.parse(body);
|
||||
if (Array.isArray(tagsAndCommits) && tagsAndCommits.length > 0) {
|
||||
var segments = tagsAndCommits[0].version.split('.');
|
||||
if (segments.length === 3) {
|
||||
resolve('^' + segments[0] + '.' + segments[1] + '.0');
|
||||
return;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('Problem parsing version: ' + body, e);
|
||||
}
|
||||
} else {
|
||||
console.log('Unable to fetch latest vscode version: ' + (error || ('Status code: ' + response.statusCode + ', ' + body)));
|
||||
}
|
||||
resolve(fallbackVersion);
|
||||
});
|
||||
});
|
||||
|
||||
module.exports.getLatestVSCodeVersion = function() { return promise; };
|
||||
Generated
Vendored
+125
@@ -0,0 +1,125 @@
|
||||
|
||||
/*---------------------------------------------------------
|
||||
* Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*--------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var plistParser = require('fast-plist');
|
||||
var request = require('request');
|
||||
|
||||
function convertGrammar(location, extensionConfig) {
|
||||
extensionConfig.languageId = '';
|
||||
extensionConfig.languageName = '';
|
||||
extensionConfig.languageScopeName = '';
|
||||
extensionConfig.languageExtensions = [];
|
||||
|
||||
if (!location) {
|
||||
extensionConfig.languageContent = '';
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
if (location.match(/\w*:\/\//)) {
|
||||
// load from url
|
||||
return new Promise(function (resolve, reject) {
|
||||
request(location, function (error, response, body) {
|
||||
if (!error && response.statusCode == 200) {
|
||||
var contentDisposition = response.headers['content-disposition'];
|
||||
var fileName = '';
|
||||
if (contentDisposition) {
|
||||
var fileNameMatch = contentDisposition.match(/filename="([^"]*)/);
|
||||
if (fileNameMatch) {
|
||||
fileName = fileNameMatch[1];
|
||||
}
|
||||
}
|
||||
processContent(extensionConfig, fileName, body).then(resolve, reject);
|
||||
} else {
|
||||
reject("Problems loading language definition file: " + error);
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
// load from disk
|
||||
var body = null;
|
||||
// trim the spaces of the location path
|
||||
location = location.trim()
|
||||
try {
|
||||
body = fs.readFileSync(location);
|
||||
} catch (error) {
|
||||
return Promise.reject("Problems loading language definition file: " + error.message);
|
||||
}
|
||||
if (body) {
|
||||
return processContent(extensionConfig, path.basename(location), body.toString());
|
||||
} else {
|
||||
return Promise.reject("Problems loading language definition file: Not found");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function processContent(extensionConfig, fileName, body) {
|
||||
var languageInfo;
|
||||
if (path.extname(fileName) === '.json') {
|
||||
try {
|
||||
languageInfo = JSON.parse(body);
|
||||
} catch (e) {
|
||||
return Promise.reject("Language definition file could not be parsed asn JSON: " + e.toString());
|
||||
}
|
||||
} else {
|
||||
if (body.indexOf('<!DOCTYPE plist') === -1) {
|
||||
return Promise.reject("Language definition file does not contain 'DOCTYPE plist'. Make sure the file content is really plist-XML.");
|
||||
}
|
||||
|
||||
try {
|
||||
languageInfo = plistParser.parse(body);
|
||||
} catch (e) {
|
||||
return Promise.reject("Language definition file could not be parsed: " + e.toString());
|
||||
}
|
||||
}
|
||||
if (!languageInfo) {
|
||||
return Promise.reject("Language definition file could not be parsed. Make sure it is a valid plist or JSON file.");
|
||||
}
|
||||
|
||||
extensionConfig.languageName = languageInfo.name || '';
|
||||
|
||||
// evaluate language id
|
||||
var languageId = '';
|
||||
var languageScopeName;
|
||||
|
||||
if (languageInfo.scopeName) {
|
||||
languageScopeName = languageInfo.scopeName;
|
||||
|
||||
var lastIndexOfDot = languageInfo.scopeName.lastIndexOf('.');
|
||||
if (lastIndexOfDot) {
|
||||
languageId = languageInfo.scopeName.substring(lastIndexOfDot + 1);
|
||||
}
|
||||
}
|
||||
if (!languageId && fileName) {
|
||||
var lastIndexOfDot2 = fileName.lastIndexOf('.');
|
||||
if (lastIndexOfDot2 && fileName.substring(lastIndexOfDot2 + 1) == 'tmLanguage') {
|
||||
languageId = fileName.substring(0, lastIndexOfDot2);
|
||||
}
|
||||
}
|
||||
if (!languageId && languageInfo.name) {
|
||||
languageId = languageInfo.name.toLowerCase().replace(/[^\w-_]/, '');
|
||||
}
|
||||
if (!fileName) {
|
||||
fileName = languageId + '.tmLanguage';
|
||||
}
|
||||
|
||||
extensionConfig.languageFileName = fileName;
|
||||
extensionConfig.languageId = languageId;
|
||||
extensionConfig.name = languageId;
|
||||
extensionConfig.languageScopeName = languageScopeName;
|
||||
|
||||
// evaluate file extensions
|
||||
if (Array.isArray(languageInfo.fileTypes)) {
|
||||
extensionConfig.languageExtensions = languageInfo.fileTypes.map(function (ft) { return '.' + ft; });
|
||||
} else {
|
||||
extensionConfig.languageExtensions = languageId ? ['.' + languageId] : [];
|
||||
}
|
||||
extensionConfig.languageContent = body;
|
||||
return Promise.resolve(extensionConfig);
|
||||
};
|
||||
|
||||
exports.convertGrammar = convertGrammar;
|
||||
+752
@@ -0,0 +1,752 @@
|
||||
/*---------------------------------------------------------
|
||||
* Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*--------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
let Generator = require('yeoman-generator');
|
||||
let yosay = require('yosay');
|
||||
|
||||
let path = require('path');
|
||||
let validator = require('./validator');
|
||||
let snippetConverter = require('./snippetConverter');
|
||||
let themeConverter = require('./themeConverter');
|
||||
let grammarConverter = require('./grammarConverter');
|
||||
let env = require('./env');
|
||||
let childProcess = require('child_process');
|
||||
let chalk = require('chalk');
|
||||
let sanitize = require("sanitize-filename");
|
||||
let localization = require('./localization');
|
||||
|
||||
module.exports = class extends Generator {
|
||||
|
||||
constructor(args, opts) {
|
||||
super(args, opts);
|
||||
this.option('extensionType', { type: String });
|
||||
this.option('extensionName', { type: String });
|
||||
this.option('extensionDescription', { type: String });
|
||||
this.option('extensionDisplayName', { type: String });
|
||||
|
||||
this.option('extensionParam', { type: String });
|
||||
this.option('extensionParam2', { type: String });
|
||||
|
||||
this.extensionConfig = Object.create(null);
|
||||
this.extensionConfig.installDependencies = false;
|
||||
}
|
||||
|
||||
initializing() {
|
||||
|
||||
// Welcome
|
||||
this.log(yosay('Welcome to the Visual Studio Code Extension generator!'));
|
||||
|
||||
// evaluateEngineVersion
|
||||
let extensionConfig = this.extensionConfig;
|
||||
return env.getLatestVSCodeVersion().then(version => { extensionConfig.vsCodeEngine = version; });
|
||||
}
|
||||
|
||||
prompting() {
|
||||
let generator = this;
|
||||
let prompts = {
|
||||
// Ask for extension type
|
||||
askForType: () => {
|
||||
let extensionType = generator.options['extensionType'];
|
||||
if (extensionType) {
|
||||
let extensionTypes = ['colortheme', 'language', 'snippets', 'command-ts', 'command-js', 'extensionpack'];
|
||||
if (extensionTypes.indexOf(extensionType) !== -1) {
|
||||
generator.extensionConfig.type = 'ext-' + extensionType;
|
||||
} else {
|
||||
generator.log("Invalid extension type: " + extensionType + '. Possible types are :' + extensionTypes.join(', '));
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'list',
|
||||
name: 'type',
|
||||
message: 'What type of extension do you want to create?',
|
||||
choices: [{
|
||||
name: 'New Extension (TypeScript)',
|
||||
value: 'ext-command-ts'
|
||||
},
|
||||
{
|
||||
name: 'New Extension (JavaScript)',
|
||||
value: 'ext-command-js'
|
||||
},
|
||||
{
|
||||
name: 'New Color Theme',
|
||||
value: 'ext-colortheme'
|
||||
},
|
||||
{
|
||||
name: 'New Language Support',
|
||||
value: 'ext-language'
|
||||
},
|
||||
{
|
||||
name: 'New Code Snippets',
|
||||
value: 'ext-snippets'
|
||||
},
|
||||
{
|
||||
name: 'New Keymap',
|
||||
value: 'ext-keymap'
|
||||
},
|
||||
{
|
||||
name: 'New Extension Pack',
|
||||
value: 'ext-extensionpack'
|
||||
},
|
||||
{
|
||||
name: 'New Language Pack (Localization)',
|
||||
value: 'ext-localization'
|
||||
}
|
||||
]
|
||||
}).then(typeAnswer => {
|
||||
generator.extensionConfig.type = typeAnswer.type;
|
||||
});
|
||||
},
|
||||
|
||||
askForThemeInfo: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-colortheme') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.extensionConfig.isCustomization = true;
|
||||
return generator.prompt({
|
||||
type: 'list',
|
||||
name: 'themeImportType',
|
||||
message: 'Do you want to import or convert an existing TextMate color theme?',
|
||||
choices: [
|
||||
{
|
||||
name: 'No, start fresh',
|
||||
value: 'new'
|
||||
},
|
||||
{
|
||||
name: 'Yes, import an existing theme but keep it as tmTheme file.',
|
||||
value: 'import-keep'
|
||||
},
|
||||
{
|
||||
name: 'Yes, import an existing theme and inline it in the Visual Studio Code color theme file.',
|
||||
value: 'import-inline'
|
||||
}
|
||||
]
|
||||
}).then(answer => {
|
||||
let inline = true;
|
||||
let type = answer.themeImportType;
|
||||
if (type === 'import-keep' || type === 'import-inline') {
|
||||
generator.log("Enter the location (URL (http, https) or file name) of the tmTheme file, e.g., http://www.monokai.nl/blog/wp-content/asdev/Monokai.tmTheme.");
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'themeURL',
|
||||
message: 'URL or file name to import:'
|
||||
}).then(urlAnswer => {
|
||||
return themeConverter.convertTheme(urlAnswer.themeURL, generator.extensionConfig, type === 'import-inline', generator);
|
||||
});
|
||||
} else {
|
||||
return themeConverter.convertTheme(null, generator.extensionConfig, false, generator);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
askForLanguageInfo: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-language') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
generator.extensionConfig.isCustomization = true;
|
||||
generator.log("Enter the URL (http, https) or the file path of the tmLanguage grammar or press ENTER to start with a new grammar.");
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'tmLanguageURL',
|
||||
message: 'URL or file to import, or none for new:',
|
||||
}).then(urlAnswer => {
|
||||
return grammarConverter.convertGrammar(urlAnswer.tmLanguageURL, generator.extensionConfig);
|
||||
});
|
||||
},
|
||||
|
||||
askForSnippetsInfo: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-snippets') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
generator.extensionConfig.isCustomization = true;
|
||||
let extensionParam = generator.options['extensionParam'];
|
||||
|
||||
if (extensionParam) {
|
||||
let count = snippetConverter.processSnippetFolder(extensionParam, generator);
|
||||
if (count <= 0) {
|
||||
generator.log('')
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.log("Folder location that contains Text Mate (.tmSnippet) and Sublime snippets (.sublime-snippet) or press ENTER to start with a new snippet file.");
|
||||
|
||||
let snippetPrompt = () => {
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'snippetPath',
|
||||
message: 'Folder name for import or none for new:'
|
||||
}).then(snippetAnswer => {
|
||||
let count = 0;
|
||||
let snippetPath = snippetAnswer.snippetPath;
|
||||
|
||||
if (typeof snippetPath === 'string' && snippetPath.length > 0) {
|
||||
snippetConverter.processSnippetFolder(snippetPath, generator);
|
||||
} else {
|
||||
generator.extensionConfig.snippets = {};
|
||||
generator.extensionConfig.languageId = null;
|
||||
}
|
||||
|
||||
if (count < 0) {
|
||||
return snippetPrompt();
|
||||
}
|
||||
});
|
||||
};
|
||||
return snippetPrompt();
|
||||
},
|
||||
|
||||
|
||||
askForLocalizationLanguageId: () => {
|
||||
return localization.askForLanguageId(generator);
|
||||
},
|
||||
|
||||
askForLocalizationLanguageName: () => {
|
||||
return localization.askForLanguageName(generator);
|
||||
},
|
||||
|
||||
askForLocalizedLocalizationLanguageName: () => {
|
||||
return localization.askForLocalizedLanguageName(generator);
|
||||
},
|
||||
|
||||
askForExtensionPackInfo: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-extensionpack') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
generator.extensionConfig.isCustomization = true;
|
||||
const defaultExtensionList = ['publisher.extensionName'];
|
||||
|
||||
const getExtensionList = () =>
|
||||
new Promise((resolve, reject) => {
|
||||
childProcess.exec(
|
||||
'code --list-extensions',
|
||||
(error, stdout, stderr) => {
|
||||
if (error) {
|
||||
generator.env.error(error);
|
||||
} else {
|
||||
let out = stdout.trim();
|
||||
if (out.length > 0) {
|
||||
generator.extensionConfig.extensionList = out.split(/\s/);
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
const extensionParam = generator.options['extensionParam'];
|
||||
if (extensionParam) {
|
||||
switch (extensionParam.toString().trim().toLowerCase()) {
|
||||
case 'n':
|
||||
generator.extensionConfig.extensionList = defaultExtensionList;
|
||||
return Promise.resolve();
|
||||
case 'y':
|
||||
return getExtensionList();
|
||||
}
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'confirm',
|
||||
name: 'addExtensions',
|
||||
message: 'Add the currently installed extensions to the extension pack?',
|
||||
default: true
|
||||
}).then(addExtensionsAnswer => {
|
||||
generator.extensionConfig.extensionList = defaultExtensionList;
|
||||
if (addExtensionsAnswer.addExtensions) {
|
||||
return getExtensionList();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// Ask for extension display name ("displayName" in package.json)
|
||||
askForExtensionDisplayName: () => {
|
||||
let extensionDisplayName = generator.options['extensionDisplayName'];
|
||||
if (extensionDisplayName) {
|
||||
generator.extensionConfig.displayName = extensionDisplayName;
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'displayName',
|
||||
message: 'What\'s the name of your extension?',
|
||||
default: generator.extensionConfig.displayName
|
||||
}).then(displayNameAnswer => {
|
||||
generator.extensionConfig.displayName = displayNameAnswer.displayName;
|
||||
});
|
||||
},
|
||||
|
||||
// Ask for extension id ("name" in package.json)
|
||||
askForExtensionId: () => {
|
||||
let extensionName = generator.options['extensionName'];
|
||||
if (extensionName) {
|
||||
generator.extensionConfig.name = extensionName;
|
||||
return Promise.resolve();
|
||||
}
|
||||
let def = generator.extensionConfig.name;
|
||||
if (!def && generator.extensionConfig.displayName) {
|
||||
def = generator.extensionConfig.displayName.toLowerCase().replace(/[^a-z0-9]/g, '-');
|
||||
}
|
||||
if (!def) {
|
||||
def == '';
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'name',
|
||||
message: 'What\'s the identifier of your extension?',
|
||||
default: def,
|
||||
validate: validator.validateExtensionId
|
||||
}).then(nameAnswer => {
|
||||
generator.extensionConfig.name = nameAnswer.name;
|
||||
});
|
||||
},
|
||||
|
||||
// Ask for extension description
|
||||
askForExtensionDescription: () => {
|
||||
let extensionDescription = generator.options['extensionDescription'];
|
||||
if (extensionDescription) {
|
||||
generator.extensionConfig.description = extensionDescription;
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'description',
|
||||
message: 'What\'s the description of your extension?'
|
||||
}).then(descriptionAnswer => {
|
||||
generator.extensionConfig.description = descriptionAnswer.description;
|
||||
});
|
||||
},
|
||||
|
||||
askForJavaScriptInfo: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-command-js') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.extensionConfig.checkJavaScript = false;
|
||||
return generator.prompt({
|
||||
type: 'confirm',
|
||||
name: 'checkJavaScript',
|
||||
message: 'Enable JavaScript type checking in \'jsconfig.json\'?',
|
||||
default: false
|
||||
}).then(strictJavaScriptAnswer => {
|
||||
generator.extensionConfig.checkJavaScript = strictJavaScriptAnswer.checkJavaScript;
|
||||
});
|
||||
},
|
||||
|
||||
askForGit: () => {
|
||||
if (['ext-command-ts', 'ext-command-js'].indexOf(generator.extensionConfig.type) === -1) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'confirm',
|
||||
name: 'gitInit',
|
||||
message: 'Initialize a git repository?',
|
||||
default: true
|
||||
}).then(gitAnswer => {
|
||||
generator.extensionConfig.gitInit = gitAnswer.gitInit;
|
||||
});
|
||||
},
|
||||
|
||||
askForThemeName: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-colortheme') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'themeName',
|
||||
message: 'What\'s the name of your theme shown to the user?',
|
||||
default: generator.extensionConfig.themeName,
|
||||
validate: validator.validateNonEmpty
|
||||
}).then(nameAnswer => {
|
||||
generator.extensionConfig.themeName = nameAnswer.themeName;
|
||||
});
|
||||
},
|
||||
|
||||
askForBaseTheme: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-colortheme') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return generator.prompt({
|
||||
type: 'list',
|
||||
name: 'themeBase',
|
||||
message: 'Select a base theme:',
|
||||
choices: [{
|
||||
name: "Dark",
|
||||
value: "vs-dark"
|
||||
},
|
||||
{
|
||||
name: "Light",
|
||||
value: "vs"
|
||||
},
|
||||
{
|
||||
name: "High Contrast",
|
||||
value: "hc-black"
|
||||
}
|
||||
]
|
||||
}).then(themeBase => {
|
||||
generator.extensionConfig.themeBase = themeBase.themeBase;
|
||||
});
|
||||
},
|
||||
|
||||
askForLanguageId: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-language') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
generator.log('Enter the id of the language. The id is an identifier and is single, lower-case name such as \'php\', \'javascript\'');
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'languageId',
|
||||
message: 'Language id:',
|
||||
default: generator.extensionConfig.languageId,
|
||||
}).then(idAnswer => {
|
||||
generator.extensionConfig.languageId = idAnswer.languageId;
|
||||
});
|
||||
},
|
||||
|
||||
askForLanguageName: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-language') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
generator.log('Enter the name of the language. The name will be shown in the VS Code editor mode selector.');
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'languageName',
|
||||
message: 'Language name:',
|
||||
default: generator.extensionConfig.languageName,
|
||||
}).then(nameAnswer => {
|
||||
generator.extensionConfig.languageName = nameAnswer.languageName;
|
||||
});
|
||||
},
|
||||
|
||||
askForLanguageExtensions: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-language') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
generator.log('Enter the file extensions of the language. Use commas to separate multiple entries (e.g. .ruby, .rb)');
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'languageExtensions',
|
||||
message: 'File extensions:',
|
||||
default: generator.extensionConfig.languageExtensions.join(', '),
|
||||
}).then(extAnswer => {
|
||||
generator.extensionConfig.languageExtensions = extAnswer.languageExtensions.split(',').map(e => { return e.trim(); });
|
||||
});
|
||||
},
|
||||
|
||||
askForLanguageScopeName: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-language') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.log('Enter the root scope name of the grammar (e.g. source.ruby)');
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'languageScopeName',
|
||||
message: 'Scope names:',
|
||||
default: generator.extensionConfig.languageScopeName,
|
||||
}).then(extAnswer => {
|
||||
generator.extensionConfig.languageScopeName = extAnswer.languageScopeName;
|
||||
});
|
||||
},
|
||||
|
||||
askForSnippetLanguage: () => {
|
||||
if (generator.extensionConfig.type !== 'ext-snippets') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
let extensionParam2 = generator.options['extensionParam2'];
|
||||
|
||||
if (extensionParam2) {
|
||||
generator.extensionConfig.languageId = extensionParam2;
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
generator.log('Enter the language for which the snippets should appear. The id is an identifier and is single, lower-case name such as \'php\', \'javascript\'');
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'languageId',
|
||||
message: 'Language id:',
|
||||
default: generator.extensionConfig.languageId
|
||||
}).then(idAnswer => {
|
||||
generator.extensionConfig.languageId = idAnswer.languageId;
|
||||
});
|
||||
},
|
||||
|
||||
askForPackageManager: () => {
|
||||
if (['ext-command-ts', 'ext-command-js', 'ext-localization'].indexOf(generator.extensionConfig.type) === -1) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.extensionConfig.pkgManager = 'npm';
|
||||
return generator.prompt({
|
||||
type: 'list',
|
||||
name: 'pkgManager',
|
||||
message: 'Which package manager to use?',
|
||||
choices: [
|
||||
{
|
||||
name: 'npm',
|
||||
value: 'npm'
|
||||
},
|
||||
{
|
||||
name: 'yarn',
|
||||
value: 'yarn'
|
||||
}
|
||||
]
|
||||
}).then(pckgManagerAnswer => {
|
||||
generator.extensionConfig.pkgManager = pckgManagerAnswer.pkgManager;
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
// run all prompts in sequence. Results can be ignored.
|
||||
let result = Promise.resolve();
|
||||
for (let taskName in prompts) {
|
||||
let prompt = prompts[taskName];
|
||||
result = result.then(_ => {
|
||||
return new Promise((s, r) => {
|
||||
setTimeout(_ => prompt().then(s, r), 0); // set timeout is required, otherwise node hangs
|
||||
});
|
||||
})
|
||||
}
|
||||
return result;
|
||||
}
|
||||
// Write files
|
||||
writing() {
|
||||
this.sourceRoot(path.join(__dirname, './templates/' + this.extensionConfig.type));
|
||||
|
||||
switch (this.extensionConfig.type) {
|
||||
case 'ext-colortheme':
|
||||
this._writingColorTheme();
|
||||
break;
|
||||
case 'ext-language':
|
||||
this._writingLanguage();
|
||||
break;
|
||||
case 'ext-snippets':
|
||||
this._writingSnippets();
|
||||
break;
|
||||
case 'ext-keymap':
|
||||
this._writingKeymaps();
|
||||
break;
|
||||
case 'ext-command-ts':
|
||||
this._writingCommandTs();
|
||||
break;
|
||||
case 'ext-command-js':
|
||||
this._writingCommandJs();
|
||||
break;
|
||||
case 'ext-extensionpack':
|
||||
this._writingExtensionPack();
|
||||
break;
|
||||
case 'ext-localization':
|
||||
localization.writingLocalizationExtension(this);
|
||||
break;
|
||||
default:
|
||||
//unknown project type
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Write Color Theme Extension
|
||||
_writingExtensionPack() {
|
||||
let context = this.extensionConfig;
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscode', context.name + '/.vscode');
|
||||
this.fs.copyTpl(this.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
this.fs.copy(this.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.fs.copy(this.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
this.fs.copy(this.sourceRoot() + '/gitattributes', context.name + '/.gitattributes');
|
||||
}
|
||||
}
|
||||
|
||||
// Write Color Theme Extension
|
||||
_writingColorTheme() {
|
||||
|
||||
let context = this.extensionConfig;
|
||||
if (context.tmThemeFileName) {
|
||||
this.fs.copyTpl(this.sourceRoot() + '/themes/theme.tmTheme', context.name + '/themes/' + context.tmThemeFileName, context);
|
||||
}
|
||||
context.themeFileName = sanitize(context.themeName + '-color-theme.json');
|
||||
if (context.themeContent) {
|
||||
context.themeContent.name = context.themeName;
|
||||
this.fs.copyTpl(this.sourceRoot() + '/themes/color-theme.json', context.name + '/themes/' + context.themeFileName, context);
|
||||
} else {
|
||||
if (context.themeBase === 'vs') {
|
||||
this.fs.copyTpl(this.sourceRoot() + '/themes/new-light-color-theme.json', context.name + '/themes/' + context.themeFileName, context);
|
||||
} else if (context.themeBase === 'hc') {
|
||||
this.fs.copyTpl(this.sourceRoot() + '/themes/new-hc-color-theme.json', context.name + '/themes/' + context.themeFileName, context);
|
||||
} else {
|
||||
this.fs.copyTpl(this.sourceRoot() + '/themes/new-dark-color-theme.json', context.name + '/themes/' + context.themeFileName, context);
|
||||
}
|
||||
}
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscode', context.name + '/.vscode');
|
||||
this.fs.copyTpl(this.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
this.fs.copy(this.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.fs.copy(this.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
this.fs.copy(this.sourceRoot() + '/gitattributes', context.name + '/.gitattributes');
|
||||
}
|
||||
}
|
||||
|
||||
// Write Language Extension
|
||||
_writingLanguage() {
|
||||
let context = this.extensionConfig;
|
||||
if (!context.languageContent) {
|
||||
context.languageFileName = sanitize(context.languageId + '.tmLanguage.json');
|
||||
|
||||
this.fs.copyTpl(this.sourceRoot() + '/syntaxes/new.tmLanguage.json', context.name + '/syntaxes/' + context.languageFileName, context);
|
||||
} else {
|
||||
this.fs.copyTpl(this.sourceRoot() + '/syntaxes/language.tmLanguage', context.name + '/syntaxes/' + sanitize(context.languageFileName), context);
|
||||
}
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscode', context.name + '/.vscode');
|
||||
this.fs.copyTpl(this.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/language-configuration.json', context.name + '/language-configuration.json', context);
|
||||
this.fs.copy(this.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.fs.copy(this.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
this.fs.copy(this.sourceRoot() + '/gitattributes', context.name + '/.gitattributes');
|
||||
}
|
||||
}
|
||||
|
||||
// Write Snippets Extension
|
||||
_writingSnippets() {
|
||||
let context = this.extensionConfig;
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscode', context.name + '/.vscode');
|
||||
this.fs.copyTpl(this.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/snippets/snippets.json', context.name + '/snippets/snippets.json', context);
|
||||
this.fs.copy(this.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.fs.copy(this.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
this.fs.copy(this.sourceRoot() + '/gitattributes', context.name + '/.gitattributes');
|
||||
}
|
||||
}
|
||||
|
||||
// Write Snippets Extension
|
||||
_writingKeymaps() {
|
||||
let context = this.extensionConfig;
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscode', context.name + '/.vscode');
|
||||
this.fs.copyTpl(this.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
this.fs.copy(this.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.fs.copy(this.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
this.fs.copy(this.sourceRoot() + '/gitattributes', context.name + '/.gitattributes');
|
||||
}
|
||||
}
|
||||
|
||||
// Write Command Extension (TypeScript)
|
||||
_writingCommandTs() {
|
||||
let context = this.extensionConfig;
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscode', context.name + '/.vscode');
|
||||
this.fs.copy(this.sourceRoot() + '/src/test', context.name + '/src/test');
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.fs.copy(this.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
}
|
||||
this.fs.copyTpl(this.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/tsconfig.json', context.name + '/tsconfig.json', context);
|
||||
|
||||
this.fs.copyTpl(this.sourceRoot() + '/src/extension.ts', context.name + '/src/extension.ts', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/tslint.json', context.name + '/tslint.json');
|
||||
|
||||
this.extensionConfig.installDependencies = true;
|
||||
}
|
||||
|
||||
// Write Command Extension (JavaScript)
|
||||
_writingCommandJs() {
|
||||
let context = this.extensionConfig;
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscode', context.name + '/.vscode');
|
||||
this.fs.copy(this.sourceRoot() + '/test', context.name + '/test');
|
||||
|
||||
this.fs.copy(this.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.fs.copy(this.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
}
|
||||
|
||||
this.fs.copyTpl(this.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/jsconfig.json', context.name + '/jsconfig.json', context);
|
||||
|
||||
this.fs.copyTpl(this.sourceRoot() + '/extension.js', context.name + '/extension.js', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
this.fs.copyTpl(this.sourceRoot() + '/.eslintrc.json', context.name + '/.eslintrc.json', context);
|
||||
|
||||
this.extensionConfig.installDependencies = true;
|
||||
}
|
||||
|
||||
// Installation
|
||||
install() {
|
||||
process.chdir(this.extensionConfig.name);
|
||||
|
||||
if (this.extensionConfig.installDependencies) {
|
||||
this.installDependencies({
|
||||
yarn: this.extensionConfig.pkgManager === 'yarn',
|
||||
npm: this.extensionConfig.pkgManager === 'npm',
|
||||
bower: false
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// End
|
||||
end() {
|
||||
|
||||
// Git init
|
||||
if (this.extensionConfig.gitInit) {
|
||||
this.spawnCommand('git', ['init', '--quiet']);
|
||||
}
|
||||
|
||||
this.log('');
|
||||
this.log('Your extension ' + this.extensionConfig.name + ' has been created!');
|
||||
this.log('');
|
||||
this.log('To start editing with Visual Studio Code, use the following commands:');
|
||||
this.log('');
|
||||
this.log(' cd ' + this.extensionConfig.name);
|
||||
this.log(' code .');
|
||||
this.log('');
|
||||
this.log('Open vsc-extension-quickstart.md inside the new extension for further instructions');
|
||||
this.log('on how to modify, test and publish your extension.');
|
||||
this.log('');
|
||||
|
||||
if (this.extensionConfig.type === 'ext-extensionpack') {
|
||||
this.log(chalk.default.yellow('Please review the "extensionPack" in the "package.json" before publishing the extension pack.'));
|
||||
this.log('');
|
||||
}
|
||||
|
||||
this.log('For more information, also visit http://code.visualstudio.com and follow us @code.');
|
||||
this.log('\r\n');
|
||||
}
|
||||
}
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
/*---------------------------------------------------------
|
||||
* Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*--------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
|
||||
exports.askForLanguageId = (generator) => {
|
||||
if (generator.extensionConfig.type !== 'ext-localization') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.extensionConfig.isCustomization = true;
|
||||
generator.log("Enter the language identifier as used on transifex (e.g. bg, zh-Hant).");
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'lpLanguageId',
|
||||
message: 'Language id:',
|
||||
}).then(answer => {
|
||||
generator.extensionConfig.lpLanguageId = answer.lpLanguageId;
|
||||
if (!generator.options['extensionName']) {
|
||||
generator.options['extensionName'] = "vscode-language-pack-" + answer.lpLanguageId;
|
||||
}
|
||||
return Promise.resolve();
|
||||
});
|
||||
}
|
||||
|
||||
exports.askForLanguageName = (generator) => {
|
||||
if (generator.extensionConfig.type !== 'ext-localization') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.extensionConfig.isCustomization = true;
|
||||
generator.log("Enter the language name in English (e.g. 'Bulgarian', 'Dutch').");
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'lpLanguageName',
|
||||
message: 'Language name:',
|
||||
}).then(answer => {
|
||||
generator.extensionConfig.lpLanguageName = answer.lpLanguageName;
|
||||
if (!generator.options['extensionDisplayName']) {
|
||||
generator.options['extensionDisplayName'] = answer.lpLanguageName + " Language Pack";
|
||||
}
|
||||
if (!generator.options['extensionDescription']) {
|
||||
generator.options['extensionDescription'] = "Language pack extension for " + answer.lpLanguageName;
|
||||
}
|
||||
return Promise.resolve();
|
||||
});
|
||||
}
|
||||
|
||||
exports.askForLocalizedLanguageName = (generator) => {
|
||||
if (generator.extensionConfig.type !== 'ext-localization') {
|
||||
return Promise.resolve();
|
||||
}
|
||||
generator.extensionConfig.isCustomization = true;
|
||||
generator.log("Enter the language name in " + generator.extensionConfig.lpLanguageName);
|
||||
return generator.prompt({
|
||||
type: 'input',
|
||||
name: 'lpLocalizedLanguageName',
|
||||
message: 'Localized language name:',
|
||||
}).then(answer => {
|
||||
generator.extensionConfig.lpLocalizedLanguageName = answer.lpLocalizedLanguageName;
|
||||
return Promise.resolve();
|
||||
});
|
||||
}
|
||||
|
||||
exports.writingLocalizationExtension = (generator) => {
|
||||
|
||||
var context = generator.extensionConfig;
|
||||
|
||||
generator.fs.copyTpl(generator.sourceRoot() + '/package.json', context.name + '/package.json', context);
|
||||
generator.fs.copyTpl(generator.sourceRoot() + '/vsc-extension-quickstart.md', context.name + '/vsc-extension-quickstart.md', context);
|
||||
generator.fs.copyTpl(generator.sourceRoot() + '/README.md', context.name + '/README.md', context);
|
||||
generator.fs.copyTpl(generator.sourceRoot() + '/CHANGELOG.md', context.name + '/CHANGELOG.md', context);
|
||||
generator.fs.copy(generator.sourceRoot() + '/vscodeignore', context.name + '/.vscodeignore');
|
||||
generator.fs.copy(generator.sourceRoot() + '/gitignore', context.name + '/.gitignore');
|
||||
generator.fs.copy(generator.sourceRoot() + '/gitattributes', context.name + '/.gitattributes');
|
||||
|
||||
context.installDependencies = true;
|
||||
}
|
||||
Generated
Vendored
+156
@@ -0,0 +1,156 @@
|
||||
/*---------------------------------------------------------
|
||||
* Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*--------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var plistParser = require('fast-plist');
|
||||
|
||||
function processSnippetFolder(folderPath, generator) {
|
||||
var errors = [], snippets = {};
|
||||
var snippetCount = 0;
|
||||
var languageId = null;
|
||||
|
||||
var count = convert(folderPath);
|
||||
if (count <= 0) {
|
||||
generator.log("No valid snippets found in " + folderPath + (errors.length > 0 ? '.\n' + errors.join('\n'): ''));
|
||||
return count;
|
||||
}
|
||||
generator.extensionConfig.snippets = snippets;
|
||||
generator.extensionConfig.languageId = languageId;
|
||||
generator.log(count + " snippet(s) found and converted." + (errors.length > 0 ? '\n\nProblems while converting: \n' + errors.join('\n'): ''));
|
||||
return count;
|
||||
|
||||
function convert(folderPath) {
|
||||
|
||||
var files = getFolderContent(folderPath, errors);
|
||||
if (errors.length > 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
files.forEach(function (fileName) {
|
||||
var extension = path.extname(fileName).toLowerCase();
|
||||
var snippet;
|
||||
if (extension === '.tmsnippet') {
|
||||
snippet = convertTextMate(path.join(folderPath, fileName));
|
||||
} else if (extension === '.sublime-snippet') {
|
||||
snippet = convertSublime(path.join(folderPath, fileName));
|
||||
}
|
||||
if (snippet) {
|
||||
if (snippet.prefix && snippet.body) {
|
||||
snippets[getId(snippet.prefix)] = snippet;
|
||||
snippetCount++;
|
||||
guessLanguage(snippet.scope);
|
||||
} else {
|
||||
var filePath = path.join(folderPath, fileName);
|
||||
if (!snippet.prefix) {
|
||||
errors.push(filePath + ": Missing property 'tabTrigger'. Snippet skipped.");
|
||||
} else {
|
||||
errors.push(filePath + ": Missing property 'content'. Snippet skipped.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
return snippetCount;
|
||||
}
|
||||
|
||||
|
||||
function getId(prefix) {
|
||||
if (snippets.hasOwnProperty(prefix)) {
|
||||
var counter = 1;
|
||||
while (snippets.hasOwnProperty(prefix + counter)) {
|
||||
counter++;
|
||||
}
|
||||
return prefix + counter;
|
||||
}
|
||||
return prefix;
|
||||
}
|
||||
|
||||
function guessLanguage(scopeName) {
|
||||
if (!languageId && scopeName) {
|
||||
var match;
|
||||
if (match = /(source|text)\.(\w+)/.exec(scopeName)) {
|
||||
languageId = match[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function convertTextMate(filePath) {
|
||||
var body = getFileContent(filePath, errors);
|
||||
if (!body) {
|
||||
return;
|
||||
}
|
||||
var value;
|
||||
try {
|
||||
value = plistParser.parse(body);
|
||||
} catch (e) {
|
||||
generator.log(filePath + " not be parsed: " + e.toString());
|
||||
return undefined;
|
||||
}
|
||||
if (!value) {
|
||||
generator.log(filePath + " not be parsed. Make sure it is a valid plist file. ");
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return {
|
||||
prefix: value.tabTrigger,
|
||||
body: value.content,
|
||||
description: value.name,
|
||||
scope: value.scope
|
||||
}
|
||||
}
|
||||
|
||||
function convertSublime(filePath) {
|
||||
var body = getFileContent(filePath, errors);
|
||||
if (!body) {
|
||||
return;
|
||||
}
|
||||
|
||||
var parsed = plistParser.parse(body);
|
||||
|
||||
var snippet = {
|
||||
prefix: parsed['tabtrigger'],
|
||||
body: parsed['content'],
|
||||
description: parsed['description'],
|
||||
scope: parsed['scope']
|
||||
};
|
||||
|
||||
return snippet;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function getFolderContent(folderPath, errors) {
|
||||
try {
|
||||
return fs.readdirSync(folderPath);
|
||||
} catch (e) {
|
||||
errors.push("Unable to access " + folderPath + ": " + e.message);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function getFileContent(filePath, errors) {
|
||||
try {
|
||||
var content = fs.readFileSync(filePath).toString();
|
||||
if (content === '') {
|
||||
errors.push(filePath + ": Empty file content");
|
||||
}
|
||||
return content;
|
||||
} catch (e) {
|
||||
errors.push(filePath + ": Problems loading file content: " + e.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function isFile(filePath) {
|
||||
try {
|
||||
return fs.statSync(filePath).isFile()
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
exports.processSnippetFolder = processSnippetFolder;
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-colortheme/CHANGELOG.md
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" extension will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
Generated
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
# README
|
||||
## This is the README for your extension "<%= name %>"
|
||||
You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
|
||||
|
||||
* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
|
||||
* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
|
||||
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
|
||||
|
||||
### For more information
|
||||
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
|
||||
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
|
||||
|
||||
**Enjoy!**
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
* text=auto
|
||||
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
*.vsix
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-colortheme/package.json
Generated
Vendored
+21
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Themes"
|
||||
],
|
||||
"contributes": {
|
||||
"themes": [
|
||||
{
|
||||
"label": <%- JSON.stringify(themeName) %>,
|
||||
"uiTheme": <%- JSON.stringify(themeBase) %>,
|
||||
"path": <%- JSON.stringify("./themes/" + themeFileName) %>
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
<%-JSON.stringify(themeContent, null, '\t')%>
|
||||
Generated
Vendored
+629
@@ -0,0 +1,629 @@
|
||||
{
|
||||
"name": <%-JSON.stringify(themeName)%>,
|
||||
"type": "dark",
|
||||
"colors": {
|
||||
"editor.background": "#263238",
|
||||
"editor.foreground": "#eeffff",
|
||||
"activityBarBadge.background": "#007acc",
|
||||
"sideBarTitle.foreground": "#bbbbbb"
|
||||
},
|
||||
"tokenColors": [
|
||||
{
|
||||
"name": "Comment",
|
||||
"scope": [
|
||||
"comment",
|
||||
"punctuation.definition.comment"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#546E7A"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Variables",
|
||||
"scope": [
|
||||
"variable",
|
||||
"string constant.other.placeholder"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#EEFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Colors",
|
||||
"scope": [
|
||||
"constant.other.color"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#ffffff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Invalid",
|
||||
"scope": [
|
||||
"invalid",
|
||||
"invalid.illegal"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FF5370"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Keyword, Storage",
|
||||
"scope": [
|
||||
"keyword",
|
||||
"storage.type",
|
||||
"storage.modifier"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Operator, Misc",
|
||||
"scope": [
|
||||
"keyword.control",
|
||||
"constant.other.color",
|
||||
"punctuation",
|
||||
"meta.tag",
|
||||
"punctuation.definition.tag",
|
||||
"punctuation.separator.inheritance.php",
|
||||
"punctuation.definition.tag.html",
|
||||
"punctuation.definition.tag.begin.html",
|
||||
"punctuation.definition.tag.end.html",
|
||||
"punctuation.section.embedded",
|
||||
"keyword.other.template",
|
||||
"keyword.other.substitution"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#89DDFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Tag",
|
||||
"scope": [
|
||||
"entity.name.tag",
|
||||
"meta.tag.sgml",
|
||||
"markup.deleted.git_gutter"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#f07178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Function, Special Method",
|
||||
"scope": [
|
||||
"entity.name.function",
|
||||
"meta.function-call",
|
||||
"variable.function",
|
||||
"support.function",
|
||||
"keyword.other.special-method"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#82AAFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Block Level Variables",
|
||||
"scope": [
|
||||
"meta.block variable.other"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#f07178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Other Variable, String Link",
|
||||
"scope": [
|
||||
"support.other.variable",
|
||||
"string.other.link"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#f07178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Number, Constant, Function Argument, Tag Attribute, Embedded",
|
||||
"scope": [
|
||||
"constant.numeric",
|
||||
"constant.language",
|
||||
"support.constant",
|
||||
"constant.character",
|
||||
"constant.escape",
|
||||
"variable.parameter",
|
||||
"keyword.other.unit",
|
||||
"keyword.other"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#F78C6C"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "String, Symbols, Inherited Class, Markup Heading",
|
||||
"scope": [
|
||||
"string",
|
||||
"constant.other.symbol",
|
||||
"constant.other.key",
|
||||
"entity.other.inherited-class",
|
||||
"markup.heading",
|
||||
"markup.inserted.git_gutter",
|
||||
"meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C3E88D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Class, Support",
|
||||
"scope": [
|
||||
"entity.name",
|
||||
"support.type",
|
||||
"support.class",
|
||||
"support.orther.namespace.use.php",
|
||||
"meta.use.php",
|
||||
"support.other.namespace.php",
|
||||
"markup.changed.git_gutter",
|
||||
"support.type.sys-types"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FFCB6B"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Entity Types",
|
||||
"scope": [
|
||||
"support.type"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#B2CCD6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS Class and Support",
|
||||
"scope": [
|
||||
"source.css support.type.property-name",
|
||||
"source.sass support.type.property-name",
|
||||
"source.scss support.type.property-name",
|
||||
"source.less support.type.property-name",
|
||||
"source.stylus support.type.property-name",
|
||||
"source.postcss support.type.property-name"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#B2CCD6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Sub-methods",
|
||||
"scope": [
|
||||
"entity.name.module.js",
|
||||
"variable.import.parameter.js",
|
||||
"variable.other.class.js"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FF5370"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Language methods",
|
||||
"scope": [
|
||||
"variable.language"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#FF5370"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "entity.name.method.js",
|
||||
"scope": [
|
||||
"entity.name.method.js"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#82AAFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "meta.method.js",
|
||||
"scope": [
|
||||
"meta.class-method.js entity.name.function.js",
|
||||
"variable.function.constructor"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#82AAFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Attributes",
|
||||
"scope": [
|
||||
"entity.other.attribute-name"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "HTML Attributes",
|
||||
"scope": [
|
||||
"text.html.basic entity.other.attribute-name.html",
|
||||
"text.html.basic entity.other.attribute-name"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#FFCB6B"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS Classes",
|
||||
"scope": [
|
||||
"entity.other.attribute-name.class"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FFCB6B"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS ID's",
|
||||
"scope": [
|
||||
"source.sass keyword.control"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#82AAFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Inserted",
|
||||
"scope": [
|
||||
"markup.inserted"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C3E88D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Deleted",
|
||||
"scope": [
|
||||
"markup.deleted"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FF5370"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Changed",
|
||||
"scope": [
|
||||
"markup.changed"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Regular Expressions",
|
||||
"scope": [
|
||||
"string.regexp"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#89DDFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Escape Characters",
|
||||
"scope": [
|
||||
"constant.character.escape"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#89DDFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "URL",
|
||||
"scope": [
|
||||
"*url*",
|
||||
"*link*",
|
||||
"*uri*"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "underline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Decorators",
|
||||
"scope": [
|
||||
"tag.decorator.js entity.name.tag.js",
|
||||
"tag.decorator.js punctuation.definition.tag.js"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#82AAFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ES7 Bind Operator",
|
||||
"scope": [
|
||||
"source.js constant.other.object.key.js string.unquoted.label.js"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#FF5370"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 0",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 1",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FFCB6B"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 2",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#F78C6C"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 3",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FF5370"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 4",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C17E70"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 5",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#82AAFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 6",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#f07178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 7",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JSON Key - Level 8",
|
||||
"scope": [
|
||||
"source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C3E88D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Plain",
|
||||
"scope": [
|
||||
"text.html.markdown",
|
||||
"punctuation.definition.list_item.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#EEFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Markup Raw Inline",
|
||||
"scope": [
|
||||
"text.html.markdown markup.inline.raw.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Markup Raw Inline Punctuation",
|
||||
"scope": [
|
||||
"text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#65737E"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Heading",
|
||||
"scope": [
|
||||
"markdown.heading",
|
||||
"markup.heading | markup.heading entity.name",
|
||||
"markup.heading.markdown punctuation.definition.heading.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C3E88D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup - Italic",
|
||||
"scope": [
|
||||
"markup.italic"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#f07178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup - Bold",
|
||||
"scope": [
|
||||
"markup.bold",
|
||||
"markup.bold string"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "bold",
|
||||
"foreground": "#f07178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup - Bold-Italic",
|
||||
"scope": [
|
||||
"markup.bold markup.italic",
|
||||
"markup.italic markup.bold",
|
||||
"markup.quote markup.bold",
|
||||
"markup.bold markup.italic string",
|
||||
"markup.italic markup.bold string",
|
||||
"markup.quote markup.bold string"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "bold",
|
||||
"foreground": "#f07178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup - Underline",
|
||||
"scope": [
|
||||
"markup.underline"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "underline",
|
||||
"foreground": "#F78C6C"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Blockquote",
|
||||
"scope": [
|
||||
"markup.quote punctuation.definition.blockquote.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#65737E"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup - Quote",
|
||||
"scope": [
|
||||
"markup.quote"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Link",
|
||||
"scope": [
|
||||
"string.other.link.title.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#82AAFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Link Description",
|
||||
"scope": [
|
||||
"string.other.link.description.title.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Link Anchor",
|
||||
"scope": [
|
||||
"constant.other.reference.link.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#FFCB6B"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup - Raw Block",
|
||||
"scope": [
|
||||
"markup.raw.block"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#C792EA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Raw Block Fenced",
|
||||
"scope": [
|
||||
"markup.raw.block.fenced.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#00000050"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Fenced Bode Block",
|
||||
"scope": [
|
||||
"punctuation.definition.fenced.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#00000050"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Fenced Bode Block Variable",
|
||||
"scope": [
|
||||
"markup.raw.block.fenced.markdown",
|
||||
"variable.language.fenced.markdown",
|
||||
"punctuation.section.class.end"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#EEFFFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Fenced Language",
|
||||
"scope": [
|
||||
"variable.language.fenced.markdown"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#65737E"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markdown - Separator",
|
||||
"scope": [
|
||||
"meta.separator"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "bold",
|
||||
"foreground": "#65737E"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup - Table",
|
||||
"scope": [
|
||||
"markup.table"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#EEFFFF"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+386
@@ -0,0 +1,386 @@
|
||||
{
|
||||
"name": <%-JSON.stringify(themeName)%>,
|
||||
"type": "hc",
|
||||
"colors": {
|
||||
"editor.background": "#000000",
|
||||
"editor.foreground": "#ffffff"
|
||||
},
|
||||
"tokenColors": [
|
||||
{
|
||||
"scope": "emphasis",
|
||||
"settings": {
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "strong",
|
||||
"settings": {
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.diff.header",
|
||||
"settings": {
|
||||
"foreground": "#000080"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "comment",
|
||||
"settings": {
|
||||
"foreground": "#7ca668"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "constant.language",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"constant.numeric",
|
||||
"constant.other.color.rgb-value",
|
||||
"constant.other.rgb-value",
|
||||
"support.constant.color"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "constant.regexp",
|
||||
"settings": {
|
||||
"foreground": "#b46695"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "entity.name.tag",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "entity.name.tag.css",
|
||||
"settings": {
|
||||
"foreground": "#d7ba7d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "entity.other.attribute-name",
|
||||
"settings": {
|
||||
"foreground": "#9cdcfe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"source.css entity.other.attribute-name",
|
||||
"source.css.less entity.other.attribute-name.id",
|
||||
"source.scss entity.other.attribute-name"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d7ba7d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "invalid",
|
||||
"settings": {
|
||||
"foreground": "#f44747"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.underline",
|
||||
"settings": {
|
||||
"fontStyle": "underline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.bold",
|
||||
"settings": {
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.heading",
|
||||
"settings": {
|
||||
"foreground": "#6796e6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.italic",
|
||||
"settings": {
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.inserted",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.deleted",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "markup.changed",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.selector",
|
||||
"settings": {
|
||||
"foreground": "#d7ba7d"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "brackets of XML/HTML tags",
|
||||
"scope": [
|
||||
"punctuation.definition.tag"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#808080"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.preprocessor",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.preprocessor.string",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.preprocessor.numeric",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "meta.structure.dictionary.key.python",
|
||||
"settings": {
|
||||
"foreground": "#9cdcfe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "storage",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "storage.type",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "storage.modifier",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string.tag",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string.value",
|
||||
"settings": {
|
||||
"foreground": "#ce9178"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "string.regexp",
|
||||
"settings": {
|
||||
"foreground": "#d16969"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "JavaScript string interpolation ${}",
|
||||
"scope": [
|
||||
"punctuation.definition.template-expression.begin.js",
|
||||
"punctuation.definition.template-expression.begin.ts",
|
||||
"punctuation.definition.template-expression.end.ts",
|
||||
"punctuation.definition.template-expression.end.js"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"support.type.vendored.property-name",
|
||||
"support.type.property-name",
|
||||
"variable.css",
|
||||
"variable.scss",
|
||||
"variable.other.less"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d4d4d4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword.control",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword.operator",
|
||||
"settings": {
|
||||
"foreground": "#d4d4d4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": [
|
||||
"keyword.operator.new",
|
||||
"keyword.operator.expression",
|
||||
"keyword.operator.cast",
|
||||
"keyword.operator.sizeof",
|
||||
"keyword.operator.logical.python"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "keyword.other.unit",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "support.function.git-rebase",
|
||||
"settings": {
|
||||
"foreground": "#d4d4d4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "constant.sha.git-rebase",
|
||||
"settings": {
|
||||
"foreground": "#b5cea8"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "coloring of the Java import and package identifiers",
|
||||
"scope": [
|
||||
"storage.modifier.import.java",
|
||||
"variable.language.wildcard.java",
|
||||
"storage.modifier.package.java"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#d4d4d4"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "coloring of the TS this",
|
||||
"scope": "variable.language.this",
|
||||
"settings": {
|
||||
"foreground": "#569cd6"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Function declarations",
|
||||
"scope": [
|
||||
"entity.name.function",
|
||||
"support.function",
|
||||
"support.constant.handlebars"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#DCDCAA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Types declaration and references",
|
||||
"scope": [
|
||||
"meta.return-type",
|
||||
"support.class",
|
||||
"support.type",
|
||||
"entity.name.type",
|
||||
"entity.name.class",
|
||||
"source.cs storage.type"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#4EC9B0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Types declaration and references, TS grammar specific",
|
||||
"scope": [
|
||||
"meta.type.cast.expr",
|
||||
"meta.type.new.expr",
|
||||
"support.constant.math",
|
||||
"support.constant.dom",
|
||||
"support.constant.json",
|
||||
"entity.other.inherited-class"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#4EC9B0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Control flow keywords",
|
||||
"scope": "keyword.control",
|
||||
"settings": {
|
||||
"foreground": "#C586C0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Variable and parameter name",
|
||||
"scope": [
|
||||
"variable",
|
||||
"meta.definition.variable.name",
|
||||
"support.variable"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#9CDCFE"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Object keys, TS grammar specific",
|
||||
"scope": [
|
||||
"meta.object-literal.key",
|
||||
"meta.object-literal.key entity.name.function"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#9CDCFE"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS property value",
|
||||
"scope": [
|
||||
"support.constant.property-value",
|
||||
"support.constant.font-name",
|
||||
"support.constant.media-type",
|
||||
"support.constant.media",
|
||||
"constant.other.color.rgb-value",
|
||||
"constant.other.rgb-value",
|
||||
"support.constant.color"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#CE9178"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+413
@@ -0,0 +1,413 @@
|
||||
{
|
||||
"name": <%-JSON.stringify(themeName)%>,
|
||||
"type": "light",
|
||||
"colors": {
|
||||
"editor.background": "#f5f5f5",
|
||||
"editor.foreground": "#333333"
|
||||
},
|
||||
"tokenColors": [
|
||||
{
|
||||
"name": "Comments",
|
||||
"scope": [
|
||||
"comment",
|
||||
"punctuation.definition.comment"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#AAAAAA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Comments: Preprocessor",
|
||||
"scope": "comment.block.preprocessor",
|
||||
"settings": {
|
||||
"fontStyle": "",
|
||||
"foreground": "#AAAAAA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Comments: Documentation",
|
||||
"scope": [
|
||||
"comment.documentation",
|
||||
"comment.block.documentation"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#448C27"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Invalid - Illegal",
|
||||
"scope": "invalid.illegal",
|
||||
"settings": {
|
||||
"foreground": "#660000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Operators",
|
||||
"scope": "keyword.operator",
|
||||
"settings": {
|
||||
"foreground": "#777777"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Keywords",
|
||||
"scope": [
|
||||
"keyword",
|
||||
"storage"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#4B83CD"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Types",
|
||||
"scope": [
|
||||
"storage.type",
|
||||
"support.type"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#7A3E9D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Language Constants",
|
||||
"scope": [
|
||||
"constant.language",
|
||||
"support.constant",
|
||||
"variable.language"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#AB6526"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Variables",
|
||||
"scope": [
|
||||
"variable",
|
||||
"support.variable"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#7A3E9D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Functions",
|
||||
"scope": [
|
||||
"entity.name.function",
|
||||
"support.function"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "bold",
|
||||
"foreground": "#AA3731"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Classes",
|
||||
"scope": [
|
||||
"entity.name.type",
|
||||
"entity.other.inherited-class",
|
||||
"support.class"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "bold",
|
||||
"foreground": "#7A3E9D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Exceptions",
|
||||
"scope": "entity.name.exception",
|
||||
"settings": {
|
||||
"foreground": "#660000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Sections",
|
||||
"scope": "entity.name.section",
|
||||
"settings": {
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Numbers, Characters",
|
||||
"scope": [
|
||||
"constant.numeric",
|
||||
"constant.character",
|
||||
"constant"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#AB6526"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Strings",
|
||||
"scope": "string",
|
||||
"settings": {
|
||||
"foreground": "#448C27"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Strings: Escape Sequences",
|
||||
"scope": "constant.character.escape",
|
||||
"settings": {
|
||||
"foreground": "#777777"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Strings: Regular Expressions",
|
||||
"scope": "string.regexp",
|
||||
"settings": {
|
||||
"foreground": "#4B83CD"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Strings: Symbols",
|
||||
"scope": "constant.other.symbol",
|
||||
"settings": {
|
||||
"foreground": "#AB6526"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Punctuation",
|
||||
"scope": "punctuation",
|
||||
"settings": {
|
||||
"foreground": "#777777"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "HTML: Doctype Declaration",
|
||||
"scope": [
|
||||
"meta.tag.sgml.doctype",
|
||||
"meta.tag.sgml.doctype string",
|
||||
"meta.tag.sgml.doctype entity.name.tag",
|
||||
"meta.tag.sgml punctuation.definition.tag.html"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#AAAAAA"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "HTML: Tags",
|
||||
"scope": [
|
||||
"meta.tag",
|
||||
"punctuation.definition.tag.html",
|
||||
"punctuation.definition.tag.begin.html",
|
||||
"punctuation.definition.tag.end.html"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#91B3E0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "HTML: Tag Names",
|
||||
"scope": "entity.name.tag",
|
||||
"settings": {
|
||||
"foreground": "#4B83CD"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "HTML: Attribute Names",
|
||||
"scope": [
|
||||
"meta.tag entity.other.attribute-name",
|
||||
"entity.other.attribute-name.html"
|
||||
],
|
||||
"settings": {
|
||||
"fontStyle": "italic",
|
||||
"foreground": "#91B3E0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "HTML: Entities",
|
||||
"scope": [
|
||||
"constant.character.entity",
|
||||
"punctuation.definition.entity"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#AB6526"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS: Selectors",
|
||||
"scope": [
|
||||
"meta.selector",
|
||||
"meta.selector entity",
|
||||
"meta.selector entity punctuation",
|
||||
"entity.name.tag.css"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#7A3E9D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS: Property Names",
|
||||
"scope": [
|
||||
"meta.property-name",
|
||||
"support.type.property-name"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#AB6526"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS: Property Values",
|
||||
"scope": [
|
||||
"meta.property-value",
|
||||
"meta.property-value constant.other",
|
||||
"support.constant.property-value"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#448C27"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "CSS: Important Keyword",
|
||||
"scope": "keyword.other.important",
|
||||
"settings": {
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Changed",
|
||||
"scope": "markup.changed",
|
||||
"settings": {
|
||||
"foreground": "#000000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Deletion",
|
||||
"scope": "markup.deleted",
|
||||
"settings": {
|
||||
"foreground": "#000000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Emphasis",
|
||||
"scope": "markup.italic",
|
||||
"settings": {
|
||||
"fontStyle": "italic"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Error",
|
||||
"scope": "markup.error",
|
||||
"settings": {
|
||||
"foreground": "#660000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Insertion",
|
||||
"scope": "markup.inserted",
|
||||
"settings": {
|
||||
"foreground": "#000000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Link",
|
||||
"scope": "meta.link",
|
||||
"settings": {
|
||||
"foreground": "#4B83CD"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Output",
|
||||
"scope": [
|
||||
"markup.output",
|
||||
"markup.raw"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#777777"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Prompt",
|
||||
"scope": "markup.prompt",
|
||||
"settings": {
|
||||
"foreground": "#777777"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Heading",
|
||||
"scope": "markup.heading",
|
||||
"settings": {
|
||||
"foreground": "#AA3731"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Strong",
|
||||
"scope": "markup.bold",
|
||||
"settings": {
|
||||
"fontStyle": "bold"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Traceback",
|
||||
"scope": "markup.traceback",
|
||||
"settings": {
|
||||
"foreground": "#660000"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup: Underline",
|
||||
"scope": "markup.underline",
|
||||
"settings": {
|
||||
"fontStyle": "underline"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup Quote",
|
||||
"scope": "markup.quote",
|
||||
"settings": {
|
||||
"foreground": "#7A3E9D"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup Lists",
|
||||
"scope": "markup.list",
|
||||
"settings": {
|
||||
"foreground": "#4B83CD"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup Styling",
|
||||
"scope": [
|
||||
"markup.bold",
|
||||
"markup.italic"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#448C27"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Markup Inline",
|
||||
"scope": "markup.inline.raw",
|
||||
"settings": {
|
||||
"fontStyle": "",
|
||||
"foreground": "#AB6526"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Extra: Diff Range",
|
||||
"scope": [
|
||||
"meta.diff.range",
|
||||
"meta.diff.index",
|
||||
"meta.separator"
|
||||
],
|
||||
"settings": {
|
||||
"foreground": "#434343"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Extra: Diff From",
|
||||
"scope": "meta.diff.header.from-file",
|
||||
"settings": {
|
||||
"foreground": "#434343"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Extra: Diff To",
|
||||
"scope": "meta.diff.header.to-file",
|
||||
"settings": {
|
||||
"foreground": "#434343"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
<%- tmThemeContent %>
|
||||
Generated
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
# Welcome to your VS Code Extension
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* This folder contains all of the files necessary for your color theme extension.
|
||||
* `package.json` - this is the manifest file that defines the location of the theme file and specifies the base theme of the theme.
|
||||
* `themes/<%= themeFileName %>` - the color theme definition file.
|
||||
|
||||
## Get up and running straight away
|
||||
|
||||
* Press `F5` to open a new window with your extension loaded.
|
||||
* Open `File > Preferences > Color Themes` and pick your color theme.
|
||||
* Open a file that has a language associated. The languages' configured grammar will tokenize the text and assign 'scopes' to the tokens. To examine these scopes, invoke the `Inspect TM Scopes` command from the Command Palette (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) .
|
||||
|
||||
## Make changes
|
||||
|
||||
* Changes to the theme file are automatically applied to the Extension Development Host window.
|
||||
|
||||
## Adopt your theme to Visual Studio Code
|
||||
|
||||
* The token colorization is done based on standard TextMate themes. Colors are matched against one or more scopes.
|
||||
|
||||
To learn more about scopes and how they're used, check out the [color theme](https://code.visualstudio.com/api/extension-guides/color-theme) documentation.
|
||||
|
||||
## Install your extension
|
||||
|
||||
* To start using your extension with Visual Studio Code copy it into the `<user home>/.vscode/extensions` folder and restart Code.
|
||||
* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.
|
||||
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// A launch configuration that launches the extension inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-colortheme/vscodeignore
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
Generated
Vendored
+23
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": false,
|
||||
"commonjs": true,
|
||||
"es6": true,
|
||||
"node": true
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaFeatures": {
|
||||
"jsx": true
|
||||
},
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
"no-const-assign": "warn",
|
||||
"no-this-before-super": "warn",
|
||||
"no-undef": "warn",
|
||||
"no-unreachable": "warn",
|
||||
"no-unused-vars": "warn",
|
||||
"constructor-super": "warn",
|
||||
"valid-typeof": "warn"
|
||||
}
|
||||
}
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-command-js/CHANGELOG.md
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" extension will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
Generated
Vendored
+65
@@ -0,0 +1,65 @@
|
||||
# <%= name %> README
|
||||
|
||||
This is the README for your extension "<%= name %>". After writing up a brief description, we recommend including the following sections.
|
||||
|
||||
## Features
|
||||
|
||||
Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.
|
||||
|
||||
For example if there is an image subfolder under your extension project workspace:
|
||||
|
||||
\!\[feature X\]\(images/feature-x.png\)
|
||||
|
||||
> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
|
||||
|
||||
## Requirements
|
||||
|
||||
If you have any requirements or dependencies, add a section describing those and how to install and configure them.
|
||||
|
||||
## Extension Settings
|
||||
|
||||
Include if your extension adds any VS Code settings through the `contributes.configuration` extension point.
|
||||
|
||||
For example:
|
||||
|
||||
This extension contributes the following settings:
|
||||
|
||||
* `myExtension.enable`: enable/disable this extension
|
||||
* `myExtension.thing`: set to `blah` to do something
|
||||
|
||||
## Known Issues
|
||||
|
||||
Calling out known issues can help limit users opening duplicate issues against your extension.
|
||||
|
||||
## Release Notes
|
||||
|
||||
Users appreciate release notes as you update your extension.
|
||||
|
||||
### 1.0.0
|
||||
|
||||
Initial release of ...
|
||||
|
||||
### 1.0.1
|
||||
|
||||
Fixed issue #.
|
||||
|
||||
### 1.1.0
|
||||
|
||||
Added features X, Y, and Z.
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Working with Markdown
|
||||
|
||||
**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
|
||||
|
||||
* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
|
||||
* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
|
||||
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
|
||||
|
||||
### For more information
|
||||
|
||||
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
|
||||
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
|
||||
|
||||
**Enjoy!**
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-command-js/extension.js
Generated
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
// The module 'vscode' contains the VS Code extensibility API
|
||||
// Import the module and reference it with the alias vscode in your code below
|
||||
const vscode = require('vscode');
|
||||
|
||||
// this method is called when your extension is activated
|
||||
// your extension is activated the very first time the command is executed
|
||||
|
||||
/**
|
||||
* @param {vscode.ExtensionContext} context
|
||||
*/
|
||||
function activate(context) {
|
||||
|
||||
// Use the console to output diagnostic information (console.log) and errors (console.error)
|
||||
// This line of code will only be executed once when your extension is activated
|
||||
console.log('Congratulations, your extension "<%= name %>" is now active!');
|
||||
|
||||
// The command has been defined in the package.json file
|
||||
// Now provide the implementation of the command with registerCommand
|
||||
// The commandId parameter must match the command field in package.json
|
||||
let disposable = vscode.commands.registerCommand('extension.helloWorld', function () {
|
||||
// The code you place here will be executed every time your command is executed
|
||||
|
||||
// Display a message box to the user
|
||||
vscode.window.showInformationMessage('Hello World!');
|
||||
});
|
||||
|
||||
context.subscriptions.push(disposable);
|
||||
}
|
||||
exports.activate = activate;
|
||||
|
||||
// this method is called when your extension is deactivated
|
||||
function deactivate() {}
|
||||
|
||||
module.exports = {
|
||||
activate,
|
||||
deactivate
|
||||
}
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
node_modules
|
||||
.vscode-test/
|
||||
*.vsix
|
||||
Generated
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"checkJs": <%- JSON.stringify(checkJavaScript) %>, /* Typecheck .js files. */
|
||||
"lib": [
|
||||
"es6"
|
||||
]
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
]
|
||||
}
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-command-js/package.json
Generated
Vendored
+36
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Other"
|
||||
],
|
||||
"activationEvents": [
|
||||
"onCommand:extension.helloWorld"
|
||||
],
|
||||
"main": "./extension.js",
|
||||
"contributes": {
|
||||
"commands": [{
|
||||
"command": "extension.helloWorld",
|
||||
"title": "Hello World"
|
||||
}]
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node ./test/runTest.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/glob": "^7.1.1",
|
||||
"@types/mocha": "^5.2.6",
|
||||
"@types/node": "^10.12.21",
|
||||
"@types/vscode": <%- JSON.stringify(vsCodeEngine) %>,
|
||||
"eslint": "^5.13.0",
|
||||
"glob": "^7.1.4",
|
||||
"mocha": "^6.1.4",
|
||||
"typescript": "^3.3.1",
|
||||
"vscode-test": "^1.2.0"
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+23
@@ -0,0 +1,23 @@
|
||||
const path = require('path');
|
||||
|
||||
const { runTests } = require('vscode-test');
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
// The folder containing the Extension Manifest package.json
|
||||
// Passed to `--extensionDevelopmentPath`
|
||||
const extensionDevelopmentPath = path.resolve(__dirname, '../');
|
||||
|
||||
// The path to the extension test script
|
||||
// Passed to --extensionTestsPath
|
||||
const extensionTestsPath = path.resolve(__dirname, './suite/index');
|
||||
|
||||
// Download VS Code, unzip it and run the integration test
|
||||
await runTests({ extensionDevelopmentPath, extensionTestsPath });
|
||||
} catch (err) {
|
||||
console.error('Failed to run tests');
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
const assert = require('assert');
|
||||
const { before } = require('mocha');
|
||||
|
||||
// You can import and use all API from the 'vscode' module
|
||||
// as well as import your extension to test it
|
||||
const vscode = require('vscode');
|
||||
// const myExtension = require('../extension');
|
||||
|
||||
suite('Extension Test Suite', () => {
|
||||
before(() => {
|
||||
vscode.window.showInformationMessage('Start all tests.');
|
||||
});
|
||||
|
||||
test('Sample test', () => {
|
||||
assert.equal(-1, [1, 2, 3].indexOf(5));
|
||||
assert.equal(-1, [1, 2, 3].indexOf(0));
|
||||
});
|
||||
});
|
||||
Generated
Vendored
+42
@@ -0,0 +1,42 @@
|
||||
const path = require('path');
|
||||
const Mocha = require('mocha');
|
||||
const glob = require('glob');
|
||||
|
||||
function run() {
|
||||
// Create the mocha test
|
||||
const mocha = new Mocha({
|
||||
ui: 'tdd'
|
||||
});
|
||||
// Use any mocha API
|
||||
mocha.useColors(true);
|
||||
|
||||
const testsRoot = path.resolve(__dirname, '..');
|
||||
|
||||
return new Promise((c, e) => {
|
||||
glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
|
||||
if (err) {
|
||||
return e(err);
|
||||
}
|
||||
|
||||
// Add files to the test suite
|
||||
files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
|
||||
|
||||
try {
|
||||
// Run the mocha test
|
||||
mocha.run(failures => {
|
||||
if (failures > 0) {
|
||||
e(new Error(`${failures} tests failed.`));
|
||||
} else {
|
||||
c();
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
e(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
run
|
||||
};
|
||||
Generated
Vendored
+39
@@ -0,0 +1,39 @@
|
||||
# Welcome to your VS Code Extension
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* This folder contains all of the files necessary for your extension.
|
||||
* `package.json` - this is the manifest file in which you declare your extension and command.
|
||||
* The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin.
|
||||
* `extension.js` - this is the main file where you will provide the implementation of your command.
|
||||
* The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`.
|
||||
* We pass the function containing the implementation of the command as the second parameter to `registerCommand`.
|
||||
|
||||
## Get up and running straight away
|
||||
|
||||
* Press `F5` to open a new window with your extension loaded.
|
||||
* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`.
|
||||
* Set breakpoints in your code inside `extension.js` to debug your extension.
|
||||
* Find output from your extension in the debug console.
|
||||
|
||||
## Make changes
|
||||
|
||||
* You can relaunch the extension from the debug toolbar after changing code in `extension.js`.
|
||||
* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
|
||||
|
||||
## Explore the API
|
||||
|
||||
* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`.
|
||||
|
||||
## Run tests
|
||||
|
||||
* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`.
|
||||
* Press `F5` to run the tests in a new window with your extension loaded.
|
||||
* See the output of the test result in the debug console.
|
||||
* Make changes to `src/test/suite/extension.test.js` or create new test files inside the `test/suite` folder.
|
||||
* The provided test runner will only consider files matching the name pattern `**.test.ts`.
|
||||
* You can create folders inside the `test` folder to structure your tests any way you want.
|
||||
## Go further
|
||||
|
||||
* [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace.
|
||||
* Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration).
|
||||
Generated
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the extensions.json format
|
||||
"recommendations": [
|
||||
"dbaeumer.vscode-eslint"
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+28
@@ -0,0 +1,28 @@
|
||||
// A launch configuration that launches the extension inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Run Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Extension Tests",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}",
|
||||
"--extensionTestsPath=${workspaceFolder}/test/suite/index"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-command-js/vscodeignore
Generated
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
test/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
**/jsconfig.json
|
||||
**/*.map
|
||||
**/.eslintrc.json
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-command-ts/CHANGELOG.md
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" extension will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
Generated
Vendored
+65
@@ -0,0 +1,65 @@
|
||||
# <%= name %> README
|
||||
|
||||
This is the README for your extension "<%= name %>". After writing up a brief description, we recommend including the following sections.
|
||||
|
||||
## Features
|
||||
|
||||
Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.
|
||||
|
||||
For example if there is an image subfolder under your extension project workspace:
|
||||
|
||||
\!\[feature X\]\(images/feature-x.png\)
|
||||
|
||||
> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
|
||||
|
||||
## Requirements
|
||||
|
||||
If you have any requirements or dependencies, add a section describing those and how to install and configure them.
|
||||
|
||||
## Extension Settings
|
||||
|
||||
Include if your extension adds any VS Code settings through the `contributes.configuration` extension point.
|
||||
|
||||
For example:
|
||||
|
||||
This extension contributes the following settings:
|
||||
|
||||
* `myExtension.enable`: enable/disable this extension
|
||||
* `myExtension.thing`: set to `blah` to do something
|
||||
|
||||
## Known Issues
|
||||
|
||||
Calling out known issues can help limit users opening duplicate issues against your extension.
|
||||
|
||||
## Release Notes
|
||||
|
||||
Users appreciate release notes as you update your extension.
|
||||
|
||||
### 1.0.0
|
||||
|
||||
Initial release of ...
|
||||
|
||||
### 1.0.1
|
||||
|
||||
Fixed issue #.
|
||||
|
||||
### 1.1.0
|
||||
|
||||
Added features X, Y, and Z.
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Working with Markdown
|
||||
|
||||
**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
|
||||
|
||||
* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
|
||||
* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
|
||||
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
|
||||
|
||||
### For more information
|
||||
|
||||
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
|
||||
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
|
||||
|
||||
**Enjoy!**
|
||||
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
out
|
||||
node_modules
|
||||
.vscode-test/
|
||||
*.vsix
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-command-ts/package.json
Generated
Vendored
+40
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Other"
|
||||
],
|
||||
"activationEvents": [
|
||||
"onCommand:extension.helloWorld"
|
||||
],
|
||||
"main": "./out/extension.js",
|
||||
"contributes": {
|
||||
"commands": [{
|
||||
"command": "extension.helloWorld",
|
||||
"title": "Hello World"
|
||||
}]
|
||||
},
|
||||
"scripts": {
|
||||
"vscode:prepublish": "<%= pkgManager %> run compile",
|
||||
"compile": "tsc -p ./",
|
||||
"watch": "tsc -watch -p ./",
|
||||
"pretest": "<%= pkgManager %> run compile",
|
||||
"test": "node ./out/test/runTest.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/glob": "^7.1.1",
|
||||
"@types/mocha": "^5.2.6",
|
||||
"@types/node": "^10.12.21",
|
||||
"@types/vscode": <%- JSON.stringify(vsCodeEngine) %>,
|
||||
"glob": "^7.1.4",
|
||||
"mocha": "^6.1.4",
|
||||
"typescript": "^3.3.1",
|
||||
"tslint": "^5.12.1",
|
||||
"vscode-test": "^1.2.0"
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
// The module 'vscode' contains the VS Code extensibility API
|
||||
// Import the module and reference it with the alias vscode in your code below
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
// this method is called when your extension is activated
|
||||
// your extension is activated the very first time the command is executed
|
||||
export function activate(context: vscode.ExtensionContext) {
|
||||
|
||||
// Use the console to output diagnostic information (console.log) and errors (console.error)
|
||||
// This line of code will only be executed once when your extension is activated
|
||||
console.log('Congratulations, your extension "<%= name %>" is now active!');
|
||||
|
||||
// The command has been defined in the package.json file
|
||||
// Now provide the implementation of the command with registerCommand
|
||||
// The commandId parameter must match the command field in package.json
|
||||
let disposable = vscode.commands.registerCommand('extension.helloWorld', () => {
|
||||
// The code you place here will be executed every time your command is executed
|
||||
|
||||
// Display a message box to the user
|
||||
vscode.window.showInformationMessage('Hello World!');
|
||||
});
|
||||
|
||||
context.subscriptions.push(disposable);
|
||||
}
|
||||
|
||||
// this method is called when your extension is deactivated
|
||||
export function deactivate() {}
|
||||
Generated
Vendored
+23
@@ -0,0 +1,23 @@
|
||||
import * as path from 'path';
|
||||
|
||||
import { runTests } from 'vscode-test';
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
// The folder containing the Extension Manifest package.json
|
||||
// Passed to `--extensionDevelopmentPath`
|
||||
const extensionDevelopmentPath = path.resolve(__dirname, '../../');
|
||||
|
||||
// The path to test runner
|
||||
// Passed to --extensionTestsPath
|
||||
const extensionTestsPath = path.resolve(__dirname, './suite/index');
|
||||
|
||||
// Download VS Code, unzip it and run the integration test
|
||||
await runTests({ extensionDevelopmentPath, extensionTestsPath });
|
||||
} catch (err) {
|
||||
console.error('Failed to run tests');
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
import * as assert from 'assert';
|
||||
import { before } from 'mocha';
|
||||
|
||||
// You can import and use all API from the 'vscode' module
|
||||
// as well as import your extension to test it
|
||||
import * as vscode from 'vscode';
|
||||
// import * as myExtension from '../extension';
|
||||
|
||||
suite('Extension Test Suite', () => {
|
||||
before(() => {
|
||||
vscode.window.showInformationMessage('Start all tests.');
|
||||
});
|
||||
|
||||
test('Sample test', () => {
|
||||
assert.equal(-1, [1, 2, 3].indexOf(5));
|
||||
assert.equal(-1, [1, 2, 3].indexOf(0));
|
||||
});
|
||||
});
|
||||
Generated
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
import * as path from 'path';
|
||||
import * as Mocha from 'mocha';
|
||||
import * as glob from 'glob';
|
||||
|
||||
export function run(): Promise<void> {
|
||||
// Create the mocha test
|
||||
const mocha = new Mocha({
|
||||
ui: 'tdd',
|
||||
});
|
||||
mocha.useColors(true);
|
||||
|
||||
const testsRoot = path.resolve(__dirname, '..');
|
||||
|
||||
return new Promise((c, e) => {
|
||||
glob('**/**.test.js', { cwd: testsRoot }, (err, files) => {
|
||||
if (err) {
|
||||
return e(err);
|
||||
}
|
||||
|
||||
// Add files to the test suite
|
||||
files.forEach(f => mocha.addFile(path.resolve(testsRoot, f)));
|
||||
|
||||
try {
|
||||
// Run the mocha test
|
||||
mocha.run(failures => {
|
||||
if (failures > 0) {
|
||||
e(new Error(`${failures} tests failed.`));
|
||||
} else {
|
||||
c();
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
e(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
Generated
Vendored
+21
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es6",
|
||||
"outDir": "out",
|
||||
"lib": [
|
||||
"es6"
|
||||
],
|
||||
"sourceMap": true,
|
||||
"rootDir": "src",
|
||||
"strict": true /* enable all strict type-checking options */
|
||||
/* Additional Checks */
|
||||
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
||||
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
".vscode-test"
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"rules": {
|
||||
"no-string-throw": true,
|
||||
"no-unused-expression": true,
|
||||
"no-duplicate-variable": true,
|
||||
"curly": true,
|
||||
"class-name": true,
|
||||
"semicolon": [
|
||||
true,
|
||||
"always"
|
||||
],
|
||||
"triple-equals": true
|
||||
},
|
||||
"defaultSeverity": "warning"
|
||||
}
|
||||
Generated
Vendored
+42
@@ -0,0 +1,42 @@
|
||||
# Welcome to your VS Code Extension
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* This folder contains all of the files necessary for your extension.
|
||||
* `package.json` - this is the manifest file in which you declare your extension and command.
|
||||
* The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin.
|
||||
* `src/extension.ts` - this is the main file where you will provide the implementation of your command.
|
||||
* The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`.
|
||||
* We pass the function containing the implementation of the command as the second parameter to `registerCommand`.
|
||||
|
||||
## Get up and running straight away
|
||||
|
||||
* Press `F5` to open a new window with your extension loaded.
|
||||
* Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`.
|
||||
* Set breakpoints in your code inside `src/extension.ts` to debug your extension.
|
||||
* Find output from your extension in the debug console.
|
||||
|
||||
## Make changes
|
||||
|
||||
* You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`.
|
||||
* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
|
||||
|
||||
|
||||
## Explore the API
|
||||
|
||||
* You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`.
|
||||
|
||||
## Run tests
|
||||
|
||||
* Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`.
|
||||
* Press `F5` to run the tests in a new window with your extension loaded.
|
||||
* See the output of the test result in the debug console.
|
||||
* Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder.
|
||||
* The provided test runner will only consider files matching the name pattern `**.test.ts`.
|
||||
* You can create folders inside the `test` folder to structure your tests any way you want.
|
||||
|
||||
## Go further
|
||||
|
||||
* Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension).
|
||||
* [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace.
|
||||
* Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration).
|
||||
Generated
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
{
|
||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||
// for the documentation about the extensions.json format
|
||||
"recommendations": [
|
||||
"ms-vscode.vscode-typescript-tslint-plugin"
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+36
@@ -0,0 +1,36 @@
|
||||
// A launch configuration that compiles the extension and then opens it inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Run Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/out/**/*.js"
|
||||
],
|
||||
"preLaunchTask": "npm: watch"
|
||||
},
|
||||
{
|
||||
"name": "Extension Tests",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}",
|
||||
"--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
|
||||
],
|
||||
"outFiles": [
|
||||
"${workspaceFolder}/out/test/**/*.js"
|
||||
],
|
||||
"preLaunchTask": "npm: watch"
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
// Place your settings in this file to overwrite default and user settings.
|
||||
{
|
||||
"files.exclude": {
|
||||
"out": false // set this to true to hide the "out" folder with the compiled JS files
|
||||
},
|
||||
"search.exclude": {
|
||||
"out": true // set this to false to include "out" folder in search results
|
||||
},
|
||||
// Turn off tsc task auto detection since we have the necessary tasks as npm scripts
|
||||
"typescript.tsc.autoDetect": "off"
|
||||
}
|
||||
Generated
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "npm",
|
||||
"script": "watch",
|
||||
"problemMatcher": "$tsc-watch",
|
||||
"isBackground": true,
|
||||
"presentation": {
|
||||
"reveal": "never"
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-command-ts/vscodeignore
Generated
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
out/test/**
|
||||
src/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
**/tsconfig.json
|
||||
**/tslint.json
|
||||
**/*.map
|
||||
**/*.ts
|
||||
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" extension pack will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-extensionpack/README.md
Generated
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
# README
|
||||
|
||||
## This is the README for your extension pack "<%= name %>"
|
||||
|
||||
You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
|
||||
|
||||
* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
|
||||
* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
|
||||
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
|
||||
|
||||
## For more information
|
||||
|
||||
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
|
||||
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
|
||||
|
||||
**Enjoy!**
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
* text=auto
|
||||
|
||||
contrib/bake-vscode/node_modules/generator-code/generators/app/templates/ext-extensionpack/gitignore
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
*.vsix
|
||||
Generated
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Extension Packs"
|
||||
],
|
||||
"extensionPack": [ <% for (i=0; i<extensionList.length-1; i++) { %>
|
||||
"<%- extensionList[i] %>", <%}%>
|
||||
"<%- extensionList[extensionList.length-1]%>"
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+21
@@ -0,0 +1,21 @@
|
||||
# Welcome to your VS Code Extension Pack
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* This folder contains all of the files necessary for your extension pack.
|
||||
* `package.json` - this is the manifest file that defines the list of extensions of the extension pack.
|
||||
|
||||
## Get up and running straight away
|
||||
|
||||
* Press `F5` to open a new window with your extension loaded.
|
||||
* Open `Extensions Viewlet` and check your extensions are installed.
|
||||
|
||||
## Make changes
|
||||
|
||||
* You can relaunch the extension from the debug toolbar after making changes to the files listed above.
|
||||
* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
|
||||
|
||||
## Install your extension
|
||||
|
||||
* To start using your extension with Visual Studio Code copy it into the `<user home>/.vscode/extensions` folder and restart Code.
|
||||
* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.
|
||||
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// A launch configuration that launches the extension inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" extension will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
Generated
Vendored
+13
@@ -0,0 +1,13 @@
|
||||
# README
|
||||
## This is the README for your extension "<%= name %>"
|
||||
You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
|
||||
|
||||
* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
|
||||
* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
|
||||
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
|
||||
|
||||
### For more information
|
||||
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
|
||||
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
|
||||
|
||||
**Enjoy!**
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
* text=auto
|
||||
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
*.vsix
|
||||
Generated
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Keymaps"
|
||||
],
|
||||
"contributes": {
|
||||
"keybindings": [
|
||||
{
|
||||
"key": "ctrl+.",
|
||||
"command": "workbench.action.showCommands"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
# Welcome to your VS Code Extension
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* This folder contains all of the files necessary for your extension pack.
|
||||
* `package.json` - this is the manifest file that defines the list of keybindings of the extension.
|
||||
|
||||
## Get up and running straight away
|
||||
|
||||
* Press `F5` to open a new window with your extension loaded.
|
||||
* Press `Ctrl + .` instead of `Ctrl + Shift + P`
|
||||
* Verify that it will launch the Command Palette listing all available commands. The `Ctrl + .` keyboard shortcut was added as an example to you.
|
||||
|
||||
## Make changes
|
||||
|
||||
* You can relaunch the extension from the debug toolbar after making changes to the files listed above.
|
||||
* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
|
||||
|
||||
## Install your extension
|
||||
|
||||
* To start using your extension with Visual Studio Code copy it into the `<user home>/.vscode/extensions` folder and restart Code.
|
||||
* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.
|
||||
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// A launch configuration that launches the extension inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" extension will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
Generated
Vendored
+65
@@ -0,0 +1,65 @@
|
||||
# <%= name %> README
|
||||
|
||||
This is the README for your extension "<%= name %>". After writing up a brief description, we recommend including the following sections.
|
||||
|
||||
## Features
|
||||
|
||||
Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.
|
||||
|
||||
For example if there is an image subfolder under your extension project workspace:
|
||||
|
||||
\!\[feature X\]\(images/feature-x.png\)
|
||||
|
||||
> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
|
||||
|
||||
## Requirements
|
||||
|
||||
If you have any requirements or dependencies, add a section describing those and how to install and configure them.
|
||||
|
||||
## Extension Settings
|
||||
|
||||
Include if your extension adds any VS Code settings through the `contributes.configuration` extension point.
|
||||
|
||||
For example:
|
||||
|
||||
This extension contributes the following settings:
|
||||
|
||||
* `myExtension.enable`: enable/disable this extension
|
||||
* `myExtension.thing`: set to `blah` to do something
|
||||
|
||||
## Known Issues
|
||||
|
||||
Calling out known issues can help limit users opening duplicate issues against your extension.
|
||||
|
||||
## Release Notes
|
||||
|
||||
Users appreciate release notes as you update your extension.
|
||||
|
||||
### 1.0.0
|
||||
|
||||
Initial release of ...
|
||||
|
||||
### 1.0.1
|
||||
|
||||
Fixed issue #.
|
||||
|
||||
### 1.1.0
|
||||
|
||||
Added features X, Y, and Z.
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Working with Markdown
|
||||
|
||||
**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
|
||||
|
||||
* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
|
||||
* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
|
||||
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
|
||||
|
||||
### For more information
|
||||
|
||||
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
|
||||
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
|
||||
|
||||
**Enjoy!**
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
* text=auto
|
||||
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
*.vsix
|
||||
Generated
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"comments": {
|
||||
// symbol used for single line comment. Remove this entry if your language does not support line comments
|
||||
"lineComment": "//",
|
||||
// symbols used for start and end a block comment. Remove this entry if your language does not support block comments
|
||||
"blockComment": [ "/*", "*/" ]
|
||||
},
|
||||
// symbols used as brackets
|
||||
"brackets": [
|
||||
["{", "}"],
|
||||
["[", "]"],
|
||||
["(", ")"]
|
||||
],
|
||||
// symbols that are auto closed when typing
|
||||
"autoClosingPairs": [
|
||||
["{", "}"],
|
||||
["[", "]"],
|
||||
["(", ")"],
|
||||
["\"", "\""],
|
||||
["'", "'"]
|
||||
],
|
||||
// symbols that that can be used to surround a selection
|
||||
"surroundingPairs": [
|
||||
["{", "}"],
|
||||
["[", "]"],
|
||||
["(", ")"],
|
||||
["\"", "\""],
|
||||
["'", "'"]
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Programming Languages"
|
||||
],
|
||||
"contributes": {
|
||||
"languages": [{
|
||||
"id": <%- JSON.stringify(languageId) %>,
|
||||
"aliases": [<%- JSON.stringify(languageName) %>, <%- JSON.stringify(languageId) %>],
|
||||
"extensions": <%- JSON.stringify(languageExtensions) %>,
|
||||
"configuration": "./language-configuration.json"
|
||||
}],
|
||||
"grammars": [{
|
||||
"language": <%- JSON.stringify(languageId) %>,
|
||||
"scopeName": <%- JSON.stringify(languageScopeName) %>,
|
||||
"path": <%- JSON.stringify("./syntaxes/" + languageFileName) %>
|
||||
}]
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
<%- languageContent %>
|
||||
Generated
Vendored
+32
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
|
||||
"name": <%-JSON.stringify(languageName)%>,
|
||||
"patterns": [
|
||||
{
|
||||
"include": "#keywords"
|
||||
},
|
||||
{
|
||||
"include": "#strings"
|
||||
}
|
||||
],
|
||||
"repository": {
|
||||
"keywords": {
|
||||
"patterns": [{
|
||||
"name": "keyword.control.<%-languageId%>",
|
||||
"match": "\\b(if|while|for|return)\\b"
|
||||
}]
|
||||
},
|
||||
"strings": {
|
||||
"name": "string.quoted.double.<%-languageId%>",
|
||||
"begin": "\"",
|
||||
"end": "\"",
|
||||
"patterns": [
|
||||
{
|
||||
"name": "constant.character.escape.<%-languageId%>",
|
||||
"match": "\\\\."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"scopeName": <%-JSON.stringify(languageScopeName)%>
|
||||
}
|
||||
Generated
Vendored
+29
@@ -0,0 +1,29 @@
|
||||
# Welcome to your VS Code Extension
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* This folder contains all of the files necessary for your extension.
|
||||
* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension.
|
||||
* `syntaxes/<%= languageFileName %>` - this is the Text mate grammar file that is used for tokenization.
|
||||
* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets.
|
||||
|
||||
## Get up and running straight away
|
||||
|
||||
* Make sure the language configuration settings in `language-configuration.json` are accurate.
|
||||
* Press `F5` to open a new window with your extension loaded.
|
||||
* Create a new file with a file name suffix matching your language.
|
||||
* Verify that syntax highlighting works and that the language configuration settings are working.
|
||||
|
||||
## Make changes
|
||||
|
||||
* You can relaunch the extension from the debug toolbar after making changes to the files listed above.
|
||||
* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
|
||||
|
||||
## Add more language features
|
||||
|
||||
* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs
|
||||
|
||||
## Install your extension
|
||||
|
||||
* To start using your extension with Visual Studio Code copy it into the `<user home>/.vscode/extensions` folder and restart Code.
|
||||
* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.
|
||||
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// A launch configuration that launches the extension inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" language pack will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
Generated
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
# <%= lpLanguageName %> Language Pack for VS Code
|
||||
|
||||
Adds localization for <%= lpLanguageName %> to VS Code.
|
||||
|
||||
The translated strings are maintained here:
|
||||
* [vscode-editor project](https://www.transifex.com/microsoft-oss/vscode-editor/language/<%= lpLanguageId %>/)
|
||||
* [vscode-workbench project](https://www.transifex.com/microsoft-oss/vscode-workbench/language/<%= lpLanguageId %>/)
|
||||
* [vscode-extensions project](https://www.transifex.com/microsoft-oss/vscode-extensions/language/<%= lpLanguageId %>/)
|
||||
|
||||
If you'd like to participate in the translation, see https://github.com/Microsoft/Localization/wiki/Visual-Studio-Code-Community-Localization-Project for more information.
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
* text=auto
|
||||
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
*.vsix
|
||||
Generated
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Language Packs"
|
||||
],
|
||||
"contributes": {
|
||||
"localizations": [{
|
||||
"languageId": <%- JSON.stringify(lpLanguageId) %>,
|
||||
"languageName": <%- JSON.stringify(lpLanguageName) %>,
|
||||
"localizedLanguageName": <%- JSON.stringify(lpLocalizedLanguageName) %>
|
||||
}]
|
||||
},
|
||||
"scripts": {
|
||||
"update": "cd ../vscode && <%= pkgManager %> run update-localization-extension <%- lpLanguageId %>"
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+123
@@ -0,0 +1,123 @@
|
||||
# Welcome to the <%= lpLanguageName %> language pack
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* `package.json` - the manifest file, defining the name and description of the localization extension. It also contains the `localizations` contribution point that defines the language id:
|
||||
|
||||
```json
|
||||
"contributes": {
|
||||
"localization": [{
|
||||
"languageId": <%- JSON.stringify(lpLanguageId) %>,
|
||||
"languageName": <%- JSON.stringify(lpLanguageName) %>,
|
||||
"localizedLanguageName": <%- JSON.stringify(lpLocalizedLanguageName) %>
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
* `translations` - the folder containing the translation strings
|
||||
|
||||
To create/update the `translations` folder with the latest strings from transifex, follow these steps:
|
||||
|
||||
* Get an API token from https://www.transifex.com/user/settings/api. The token needs to have access to the `vscode-editor`, `vscode-workbench` and `vscode-extensions` projects.
|
||||
* Set the API token to the environment variable `TRANSIFEX_API_TOKEN`.
|
||||
* Check out the `master` branch of the [VS Code repository](https://github.com/Microsoft/vscode).
|
||||
* Preferably, place the VSCode repo next to the language pack extension (so both have the same parent folder).
|
||||
* `cd vscode` and run `yarn` to initialize the VS Code repo. More information on how to build VS Code you can find [here](https://github.com/Microsoft/vscode/wiki/How-to-Contribute).
|
||||
* If the language pack extension is placed next to the VS Code repository: `npm run update-localization-extension <%- lpLanguageId %>`
|
||||
* Otherwise: `npm run update-localization-extension {path_to_lang_pack_ext}`
|
||||
* This will download translation files to the folder `translations`
|
||||
* `package.json` will be modified and add a `translations` property with paths to each extension's translations will be added.
|
||||
|
||||
```json
|
||||
"contributes": {
|
||||
"localizations": [
|
||||
{
|
||||
"languageId": <%- JSON.stringify(lpLanguageId) %>,
|
||||
"languageName": <%- JSON.stringify(lpLanguageName) %>,
|
||||
"localizedLanguageName": <%- JSON.stringify(lpLocalizedLanguageName) %>,
|
||||
"translations": [
|
||||
{
|
||||
"id": "vscode",
|
||||
"path": "./translations/main.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.emmet",
|
||||
"path": "./translations/extensions/emmet.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.css",
|
||||
"path": "./translations/extensions/css.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.grunt",
|
||||
"path": "./translations/extensions/grunt.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.git",
|
||||
"path": "./translations/extensions/git.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.gulp",
|
||||
"path": "./translations/extensions/gulp.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.jake",
|
||||
"path": "./translations/extensions/jake.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.html",
|
||||
"path": "./translations/extensions/html.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.json",
|
||||
"path": "./translations/extensions/json.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.markdown",
|
||||
"path": "./translations/extensions/markdown.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.merge-conflict",
|
||||
"path": "./translations/extensions/merge-conflict.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.npm",
|
||||
"path": "./translations/extensions/npm.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.php",
|
||||
"path": "./translations/extensions/php.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.extension-editing",
|
||||
"path": "./translations/extensions/extension-editing.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.typescript",
|
||||
"path": "./translations/extensions/typescript.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.configuration-editing",
|
||||
"path": "./translations/extensions/configuration-editing.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "vscode.javascript",
|
||||
"path": "./translations/extensions/javascript.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "ms-vscode.node-debug2",
|
||||
"path": "./translations/extensions/vscode-node-debug2.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "msjsdiag.debugger-for-chrome",
|
||||
"path": "./translations/extensions/vscode-chrome-debug.i18n.json"
|
||||
},
|
||||
{
|
||||
"id": "ms-vscode.node-debug",
|
||||
"path": "./translations/extensions/vscode-node-debug.i18n.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
Generated
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
node_modules
|
||||
Generated
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
All notable changes to the "<%= name %>" extension will be documented in this file.
|
||||
|
||||
Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
- Initial release
|
||||
Generated
Vendored
+65
@@ -0,0 +1,65 @@
|
||||
# <%= name %> README
|
||||
|
||||
This is the README for your extension "<%= name %>". After writing up a brief description, we recommend including the following sections.
|
||||
|
||||
## Features
|
||||
|
||||
Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.
|
||||
|
||||
For example if there is an image subfolder under your extension project workspace:
|
||||
|
||||
\!\[feature X\]\(images/feature-x.png\)
|
||||
|
||||
> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
|
||||
|
||||
## Requirements
|
||||
|
||||
If you have any requirements or dependencies, add a section describing those and how to install and configure them.
|
||||
|
||||
## Extension Settings
|
||||
|
||||
Include if your extension adds any VS Code settings through the `contributes.configuration` extension point.
|
||||
|
||||
For example:
|
||||
|
||||
This extension contributes the following settings:
|
||||
|
||||
* `myExtension.enable`: enable/disable this extension
|
||||
* `myExtension.thing`: set to `blah` to do something
|
||||
|
||||
## Known Issues
|
||||
|
||||
Calling out known issues can help limit users opening duplicate issues against your extension.
|
||||
|
||||
## Release Notes
|
||||
|
||||
Users appreciate release notes as you update your extension.
|
||||
|
||||
### 1.0.0
|
||||
|
||||
Initial release of ...
|
||||
|
||||
### 1.0.1
|
||||
|
||||
Fixed issue #.
|
||||
|
||||
### 1.1.0
|
||||
|
||||
Added features X, Y, and Z.
|
||||
|
||||
-----------------------------------------------------------------------------------------------------------
|
||||
|
||||
## Working with Markdown
|
||||
|
||||
**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
|
||||
|
||||
* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
|
||||
* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
|
||||
* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
|
||||
|
||||
### For more information
|
||||
|
||||
* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
|
||||
* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
|
||||
|
||||
**Enjoy!**
|
||||
Generated
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
* text=auto
|
||||
|
||||
Generated
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
node_modules
|
||||
*.vsix
|
||||
Generated
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": <%- JSON.stringify(name) %>,
|
||||
"displayName": <%- JSON.stringify(displayName) %>,
|
||||
"description": <%- JSON.stringify(description) %>,
|
||||
"version": "0.0.1",
|
||||
"engines": {
|
||||
"vscode": <%- JSON.stringify(vsCodeEngine) %>
|
||||
},
|
||||
"categories": [
|
||||
"Snippets"
|
||||
],
|
||||
"contributes": {
|
||||
"snippets": [
|
||||
{
|
||||
"language": <%- JSON.stringify(languageId) %>,
|
||||
"path": "./snippets/snippets.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
<%- JSON.stringify(snippets, null, '\t') %>
|
||||
Generated
Vendored
+23
@@ -0,0 +1,23 @@
|
||||
# Welcome to your VS Code Extension
|
||||
|
||||
## What's in the folder
|
||||
|
||||
* This folder contains all of the files necessary for your extension.
|
||||
* `package.json` - this is the manifest file that defines the location of the snippet file and specifies the language of the snippets.
|
||||
* `snippets/snippets.json` - the file containing all snippets.
|
||||
|
||||
## Get up and running straight away
|
||||
|
||||
* Press `F5` to open a new window with your extension loaded.
|
||||
* Create a new file with a file name suffix matching your language.
|
||||
* Verify that your snippets are proposed on intellisense.
|
||||
|
||||
## Make changes
|
||||
|
||||
* You can relaunch the extension from the debug toolbar after making changes to the files listed above.
|
||||
* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
|
||||
|
||||
## Install your extension
|
||||
|
||||
* To start using your extension with Visual Studio Code copy it into the `<user home>/.vscode/extensions` folder and restart Code.
|
||||
* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.
|
||||
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
// A launch configuration that launches the extension inside a new window
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Extension",
|
||||
"type": "extensionHost",
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": [
|
||||
"--extensionDevelopmentPath=${workspaceFolder}"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
.vscode/**
|
||||
.vscode-test/**
|
||||
.gitignore
|
||||
vsc-extension-quickstart.md
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
/*---------------------------------------------------------
|
||||
* Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*--------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var plistParser = require('fast-plist');
|
||||
var request = require('request');
|
||||
|
||||
function convertTheme(location, extensionConfig, inline, generator) {
|
||||
if (!location) {
|
||||
extensionConfig.tmThemeFileName = '';
|
||||
extensionConfig.tmThemeContent = '';
|
||||
} else if (location.match(/\w*:\/\//)) {
|
||||
// load from url
|
||||
return new Promise(function (resolve, reject) {
|
||||
request(location, function (error, response, body) {
|
||||
if (!error && response.statusCode == 200) {
|
||||
var tmThemeFileName = null;
|
||||
if (!inline) {
|
||||
var contentDisposition = response.headers['content-disposition'];
|
||||
if (contentDisposition) {
|
||||
var fileNameMatch = contentDisposition.match(/filename="([^"]*)/);
|
||||
if (fileNameMatch) {
|
||||
tmThemeFileName = fileNameMatch[1];
|
||||
}
|
||||
}
|
||||
if (!tmThemeFileName) {
|
||||
var lastSlash = location.lastIndexOf('/');
|
||||
if (lastSlash) {
|
||||
tmThemeFileName = location.substr(lastSlash + 1);
|
||||
} else {
|
||||
tmThemeFileName = 'theme.tmTheme';
|
||||
}
|
||||
}
|
||||
}
|
||||
processContent(extensionConfig, tmThemeFileName, body, generator);
|
||||
resolve();
|
||||
} else {
|
||||
if (error) {
|
||||
reject("Problems loading theme: " + error);
|
||||
} else {
|
||||
reject("Problems loading theme: HTTP status " + response.statusCode);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
// load from disk
|
||||
var body = null;
|
||||
try {
|
||||
body = fs.readFileSync(location);
|
||||
} catch (error) {
|
||||
return Promise.reject("Problems loading theme: " + error.message);
|
||||
}
|
||||
if (body) {
|
||||
var fileName = null;
|
||||
if (!inline) {
|
||||
fileName = path.basename(location);
|
||||
}
|
||||
processContent(extensionConfig, fileName, body.toString(), generator);
|
||||
} else {
|
||||
return Promise.reject("Problems loading theme: Not found");
|
||||
}
|
||||
}
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
function processContent(extensionConfig, tmThemeFileName, body, generator) {
|
||||
var themeNameMatch = body.match(/<key>name<\/key>\s*<string>([^<]*)/);
|
||||
var themeName = themeNameMatch ? themeNameMatch[1] : '';
|
||||
|
||||
extensionConfig.themeContent = migrate(body, tmThemeFileName, generator);
|
||||
if (tmThemeFileName) {
|
||||
if (tmThemeFileName.indexOf('.tmTheme') === -1) {
|
||||
tmThemeFileName = tmThemeFileName + '.tmTheme';
|
||||
}
|
||||
extensionConfig.tmThemeFileName = tmThemeFileName;
|
||||
extensionConfig.tmThemeContent = body;
|
||||
}
|
||||
extensionConfig.themeName = themeName;
|
||||
extensionConfig.displayName = themeName;
|
||||
};
|
||||
|
||||
// mapping from old tmTheme setting to new workbench color ids
|
||||
var mappings = {
|
||||
"background": ["editor.background"],
|
||||
"foreground": ["editor.foreground"],
|
||||
"hoverHighlight": ["editor.hoverHighlightBackground"],
|
||||
"linkForeground": ["editorLink.foreground"],
|
||||
"selection": ["editor.selectionBackground"],
|
||||
"inactiveSelection": ["editor.inactiveSelectionBackground"],
|
||||
"selectionHighlightColor": ["editor.selectionHighlightBackground"],
|
||||
"wordHighlight": ["editor.wordHighlightBackground"],
|
||||
"wordHighlightStrong": ["editor.wordHighlightStrongBackground"],
|
||||
"findMatchHighlight": ["editor.findMatchHighlightBackground", "peekViewResult.matchHighlightBackground"],
|
||||
"currentFindMatchHighlight": ["editor.findMatchBackground"],
|
||||
"findRangeHighlight": ["editor.findRangeHighlightBackground"],
|
||||
"referenceHighlight": ["peekViewEditor.matchHighlightBackground"],
|
||||
"lineHighlight": ["editor.lineHighlightBackground"],
|
||||
"rangeHighlight": ["editor.rangeHighlightBackground"],
|
||||
"caret": ["editorCursor.foreground"],
|
||||
"invisibles": ["editorWhitespace.foreground"],
|
||||
"guide": ["editorIndentGuide.background"],
|
||||
"ansiBlack": ["terminal.ansiBlack"], "ansiRed": ["terminal.ansiRed"], "ansiGreen": ["terminal.ansiGreen"], "ansiYellow": ["terminal.ansiYellow"],
|
||||
"ansiBlue": ["terminal.ansiBlue"], "ansiMagenta": ["terminal.ansiMagenta"], "ansiCyan": ["terminal.ansiCyan"], "ansiWhite": ["terminal.ansiWhite"],
|
||||
"ansiBrightBlack": ["terminal.ansiBrightBlack"], "ansiBrightRed": ["terminal.ansiBrightRed"], "ansiBrightGreen": ["terminal.ansiBrightGreen"],
|
||||
"ansiBrightYellow": ["terminal.ansiBrightYellow"], "ansiBrightBlue": ["terminal.ansiBrightBlue"], "ansiBrightMagenta": ["terminal.ansiBrightMagenta"],
|
||||
"ansiBrightCyan": ["terminal.ansiBrightCyan"], "ansiBrightWhite": ["terminal.ansiBrightWhite"]
|
||||
};
|
||||
|
||||
function migrate(content, tmThemeFileName, generator) {
|
||||
try {
|
||||
let result = {};
|
||||
var theme;
|
||||
try {
|
||||
theme = plistParser.parse(content);
|
||||
} catch (e) {
|
||||
generator.log(tmThemeFileName + " not be parsed: " + e.toString());
|
||||
return undefined;
|
||||
}
|
||||
let settings = theme.settings;
|
||||
if (Array.isArray(settings)) {
|
||||
let colorMap = {};
|
||||
for (let entry of settings) {
|
||||
let scope = entry.scope;
|
||||
if (scope) {
|
||||
let parts = scope.split(',').map(p => p.trim());
|
||||
if (parts.length > 1) {
|
||||
entry.scope = parts;
|
||||
}
|
||||
} else {
|
||||
var entrySettings = entry.settings;
|
||||
let notSupported = [];
|
||||
for (let entry in entrySettings) {
|
||||
let mapping = mappings[entry];
|
||||
if (mapping) {
|
||||
for (let newKey of mapping) {
|
||||
colorMap[newKey] = entrySettings[entry];
|
||||
}
|
||||
if (entry !== 'foreground' && entry !== 'background') {
|
||||
delete entrySettings[entry];
|
||||
}
|
||||
} else {
|
||||
notSupported.push(entry);
|
||||
}
|
||||
}
|
||||
if (notSupported.length > 0) {
|
||||
generator.log('Note: the following theming properties are not supported by VSCode and will be ignored: ' + notSupported.join(', '))
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!tmThemeFileName) {
|
||||
result.tokenColors = settings;
|
||||
} else {
|
||||
result.tokenColors = './' + tmThemeFileName;
|
||||
}
|
||||
result.colors = colorMap;
|
||||
}
|
||||
return result
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
exports.convertTheme = convertTheme;
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
/*---------------------------------------------------------
|
||||
* Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*--------------------------------------------------------*/
|
||||
var nameRegex = /^[a-z0-9][a-z0-9\-]*$/i;
|
||||
|
||||
module.exports.validatePublisher = function(publisher) {
|
||||
if (!publisher) {
|
||||
return "Missing publisher name";
|
||||
}
|
||||
|
||||
if (!nameRegex.test(publisher)) {
|
||||
return "Invalid publisher name";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports.validateExtensionId = function(id) {
|
||||
if (!id) {
|
||||
return "Missing extension identifier";
|
||||
}
|
||||
|
||||
if (!nameRegex.test(id)) {
|
||||
return "Invalid extension identifier";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
module.exports.validateNonEmpty = function(name) {
|
||||
return name && name.length > 0;
|
||||
}
|
||||
Reference in New Issue
Block a user