提交 a42976ec 编写于 作者: B Benjamin Pasero

Merge branch 'master' into ben/stacks

......@@ -6,7 +6,6 @@
var gulp = require('gulp');
var fs = require('fs');
var path = require('path');
var os = require('os');
var es = require('event-stream');
var azure = require('gulp-azure-storage');
var electron = require('gulp-atom-electron');
......@@ -202,10 +201,11 @@ function packageTask(platform, arch, opts) {
.map(function (d) { return ['node_modules/' + d + '/**', '!node_modules/' + d + '/**/{test,tests}/**']; }));
var deps = gulp.src(depsSrc, { base: '.', dot: true })
.pipe(util.cleanNodeModule('fsevents', ['binding.gyp', 'fsevents.cc', 'build/**', 'src/**', 'test/**'], true))
.pipe(util.cleanNodeModule('oniguruma', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], true))
.pipe(util.cleanNodeModule('windows-mutex', ['binding.gyp', 'build/**', 'src/**'], true))
.pipe(util.cleanNodeModule('native-keymap', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], true));
.pipe(util.cleanNodeModule('fsevents', ['binding.gyp', 'fsevents.cc', 'build/**', 'src/**', 'test/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('oniguruma', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('windows-mutex', ['binding.gyp', 'build/**', 'src/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('native-keymap', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['**/*.node']))
.pipe(util.cleanNodeModule('pty.js', ['binding.gyp', 'build/**', 'src/**', 'deps/**'], ['build/Release/**']));
var all = es.merge(
api,
......
......@@ -183,7 +183,7 @@ exports.skipDirectories = function () {
});
};
exports.cleanNodeModule = function (name, excludes, isNative) {
exports.cleanNodeModule = function (name, excludes, includes) {
var glob = function (path) { return '**/node_modules/' + name + (path ? '/' + path : ''); };
var negate = function (str) { return '!' + str; };
......@@ -194,8 +194,9 @@ exports.cleanNodeModule = function (name, excludes, isNative) {
var nodeModuleInput = input.pipe(allFilter);
var output = nodeModuleInput.pipe(filter(globs));
if (isNative) {
output = es.merge(output, nodeModuleInput.pipe(filter(glob('**/*.node'))));
if (includes) {
var includeGlobs = includes.map(glob);
output = es.merge(output, nodeModuleInput.pipe(filter(includeGlobs)));
}
output = output.pipe(allFilter.restore);
......
:root {
--spacing-unit: 6px;
--cell-padding: (4 * var(--spacing-unit));
}
body {
padding-left: calc(4 * var(--spacing-unit, 5px));
}
\ No newline at end of file
[
{
"c": ":",
"t": "attribute-name.css.definition.entity.meta.other.pseudo-class.punctuation.selector",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.entity.other.attribute-name.css rgb(215, 186, 125)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.entity.other.attribute-name.css rgb(128, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.entity.other.attribute-name.css rgb(215, 186, 125)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.entity.other.attribute-name.css rgb(128, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.entity.other.attribute-name.css rgb(215, 186, 125)"
}
},
{
"c": "root",
"t": "attribute-name.css.entity.meta.other.pseudo-class.selector",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.entity.other.attribute-name.css rgb(215, 186, 125)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.entity.other.attribute-name.css rgb(128, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.entity.other.attribute-name.css rgb(215, 186, 125)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.entity.other.attribute-name.css rgb(128, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.entity.other.attribute-name.css rgb(215, 186, 125)"
}
},
{
"c": " ",
"t": "css.meta.selector",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.meta.selector rgb(215, 186, 125)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.meta.selector rgb(128, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.meta.selector rgb(215, 186, 125)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.meta.selector rgb(128, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.meta.selector rgb(215, 186, 125)"
}
},
{
"c": "{",
"t": "begin.css.meta.property-list.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": " ",
"t": "css.meta.property-list",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "--spacing-unit",
"t": "css.meta.property-list.property-name.support.type.variable",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.support.type.property-name rgb(156, 220, 254)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.support.type.property-name.css rgb(255, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.support.type.property-name rgb(156, 220, 254)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.support.type.property-name.css rgb(255, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.support.type.property-name rgb(212, 212, 212)"
}
},
{
"c": ":",
"t": "css.key-value.meta.property-list.property-value.punctuation.separator",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": " ",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "6",
"t": "constant.css.meta.numeric.property-list.property-value",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.constant.numeric rgb(181, 206, 168)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.constant.numeric rgb(9, 136, 90)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.constant.numeric rgb(181, 206, 168)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.constant.numeric rgb(9, 136, 90)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.constant.numeric rgb(181, 206, 168)"
}
},
{
"c": "px",
"t": "constant.css.keyword.meta.numeric.other.property-list.property-value.unit",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.keyword.other.unit rgb(181, 206, 168)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.keyword.other.unit rgb(9, 136, 90)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.keyword.other.unit rgb(181, 206, 168)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.keyword.other.unit rgb(9, 136, 90)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.keyword.other.unit rgb(181, 206, 168)"
}
},
{
"c": ";",
"t": "css.meta.property-list.property-value.punctuation.rule.terminator",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": " ",
"t": "css.meta.property-list",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "--cell-padding",
"t": "css.meta.property-list.property-name.support.type.variable",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.support.type.property-name rgb(156, 220, 254)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.support.type.property-name.css rgb(255, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.support.type.property-name rgb(156, 220, 254)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.support.type.property-name.css rgb(255, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.support.type.property-name rgb(212, 212, 212)"
}
},
{
"c": ":",
"t": "css.key-value.meta.property-list.property-value.punctuation.separator",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": " (",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "4",
"t": "constant.css.meta.numeric.property-list.property-value",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.constant.numeric rgb(181, 206, 168)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.constant.numeric rgb(9, 136, 90)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.constant.numeric rgb(181, 206, 168)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.constant.numeric rgb(9, 136, 90)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.constant.numeric rgb(181, 206, 168)"
}
},
{
"c": " * ",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "var",
"t": "css.function.meta.misc.property-list.property-value.support",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.support.property-value rgb(206, 145, 120)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.support.property-value rgb(4, 81, 165)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.support.property-value rgb(4, 81, 165)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "(",
"t": "css.function.meta.property-list.property-value.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "--spacing-unit",
"t": "css.meta.property-list.property-name.property-value.support.type.variable",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.support.type.property-name rgb(156, 220, 254)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.support.type.property-name.css rgb(255, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.support.type.property-name rgb(156, 220, 254)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.support.type.property-name.css rgb(255, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.support.type.property-name rgb(212, 212, 212)"
}
},
{
"c": ")",
"t": "css.function.meta.property-list.property-value.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": ")",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": ";",
"t": "css.meta.property-list.property-value.punctuation.rule.terminator",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "}",
"t": "css.end.meta.property-list.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "body",
"t": "css.entity.meta.name.selector.tag",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.entity.name.selector rgb(215, 186, 125)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.entity.name.selector rgb(128, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.entity.name.selector rgb(215, 186, 125)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.entity.name.selector rgb(128, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.entity.name.selector rgb(215, 186, 125)"
}
},
{
"c": " ",
"t": "css.meta.selector",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.meta.selector rgb(215, 186, 125)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.meta.selector rgb(128, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.meta.selector rgb(215, 186, 125)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.meta.selector rgb(128, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.meta.selector rgb(215, 186, 125)"
}
},
{
"c": "{",
"t": "begin.css.meta.property-list.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": " ",
"t": "css.meta.property-list",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "padding-left",
"t": "css.meta.property-list.property-name.support.type",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.support.type.property-name rgb(156, 220, 254)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.support.type.property-name.css rgb(255, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.support.type.property-name rgb(156, 220, 254)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.support.type.property-name.css rgb(255, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.support.type.property-name rgb(212, 212, 212)"
}
},
{
"c": ":",
"t": "css.key-value.meta.property-list.property-value.punctuation.separator",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": " calc(",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "4",
"t": "constant.css.meta.numeric.property-list.property-value",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.constant.numeric rgb(181, 206, 168)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.constant.numeric rgb(9, 136, 90)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.constant.numeric rgb(181, 206, 168)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.constant.numeric rgb(9, 136, 90)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.constant.numeric rgb(181, 206, 168)"
}
},
{
"c": " * ",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "var",
"t": "css.function.meta.misc.property-list.property-value.support",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.support.property-value rgb(206, 145, 120)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.support.property-value rgb(4, 81, 165)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.support.property-value rgb(4, 81, 165)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "(",
"t": "css.function.meta.property-list.property-value.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "--spacing-unit",
"t": "css.meta.property-list.property-name.property-value.support.type.variable",
"r": {
"dark_plus": ".vs-dark.vscode-theme-defaults-themes-dark_plus-json .token.support.type.property-name rgb(156, 220, 254)",
"light_plus": ".vs.vscode-theme-defaults-themes-light_plus-json .token.support.type.property-name.css rgb(255, 0, 0)",
"dark_vs": ".vs-dark.vscode-theme-defaults-themes-dark_vs-json .token.support.type.property-name rgb(156, 220, 254)",
"light_vs": ".vs.vscode-theme-defaults-themes-light_vs-json .token.support.type.property-name.css rgb(255, 0, 0)",
"hc_black": ".hc-black.vscode-theme-defaults-themes-hc_black-json .token.support.type.property-name rgb(212, 212, 212)"
}
},
{
"c": ", 5px",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": ")",
"t": "css.function.meta.property-list.property-value.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": ")",
"t": "css.meta.property-list.property-value",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": ";",
"t": "css.meta.property-list.property-value.punctuation.rule.terminator",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
},
{
"c": "}",
"t": "css.end.meta.property-list.punctuation.section",
"r": {
"dark_plus": ".vs-dark .token rgb(212, 212, 212)",
"light_plus": ".vs .token rgb(0, 0, 0)",
"dark_vs": ".vs-dark .token rgb(212, 212, 212)",
"light_vs": ".vs .token rgb(0, 0, 0)",
"hc_black": ".hc-black .token rgb(255, 255, 255)"
}
}
]
\ No newline at end of file
:root {
--spacing-unit: 6px;
--cell-padding: (4 * var(--spacing-unit));
}
body {
padding-left: calc(4 * var(--spacing-unit, 5px));
}
\ No newline at end of file
{
"account": "monacobuild",
"container": "debuggers",
"zip": "73e0456/node-debug.zip",
"zip": "407a8b6/node-debug.zip",
"output": ""
}
......@@ -128,7 +128,26 @@ export default class TypeScriptFormattingProvider implements DocumentRangeFormat
return this.ensureFormatOptions(document, options, token).then(() => {
return this.client.execute('formatonkey', args, token).then((response): TextEdit[] => {
return response.body.map(this.codeEdit2SingleEditOperation);
let edits = response.body;
let result: TextEdit[] = [];
for (let edit of edits) {
let textEdit = this.codeEdit2SingleEditOperation(edit);
let range = textEdit.range;
// Work around for https://github.com/Microsoft/TypeScript/issues/6700.
// Check if we have an edit at the beginning of the line which only removes white spaces and leaves
// an empty line. Drop those edits
if (range.start.character === 0 && range.start.line === range.end.line && textEdit.newText === '') {
let lText = document.lineAt(range.start.line).text;
// If the edit leaves something on the line keep the edit (note that the end character is exclusive).
// Keep it also if it removes something else than whitespace
if (lText.trim().length > 0 || lText.length > range.end.character) {
result.push(textEdit);
}
} else {
result.push(textEdit);
}
}
return result;
}, (err: any) => {
return [];
});
......
......@@ -1659,7 +1659,7 @@
<key>type-parameters</key>
<dict>
<key>begin</key>
<string>([a-zA-Z_$][\w$]*)?(&lt;)(?=(([a-zA-Z_$][\w$.]*)(&lt;([a-zA-Z_$][\w$.,\s]+)&gt;)?[,\s]*)+&gt;)</string>
<string>([a-zA-Z_$][\w$]*)?(&lt;)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
......
......@@ -2025,7 +2025,7 @@
<key>type-parameters</key>
<dict>
<key>begin</key>
<string>([a-zA-Z_$][\w$]*)?(&lt;)(?=(([a-zA-Z_$][\w$.]*)(&lt;([a-zA-Z_$][\w$.,\s]+)&gt;)?[,\s]*)+&gt;)</string>
<string>([a-zA-Z_$][\w$]*)?(&lt;)</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
......
for(var i=0;i<9;i++){for(var j;i>j;j++){if(j+i<3)console.log(i>j);}}
let x: Thenable<void> = new Promise<A<E, e.F>>();
\ No newline at end of file
for(var i=0;i<9;i++){for(var j;i>j;j++){if(j+i<3)console.log(i>j);}}
let x: Thenable<void> = new Promise<A<E, e.F>>();
\ No newline at end of file
:root {
--spacing-unit: 6px;
--cell-padding: (4 * var(--spacing-unit));
}
body {
padding-left: calc(4 * var(--spacing-unit, 5px));
}
\ No newline at end of file
......@@ -131,6 +131,16 @@ export class Throttler {
}
}
// TODO@Joao: can the previous throttler be replaced with this?
export class SimpleThrottler {
private current = TPromise.as(null);
queue<T>(promiseTask: ITask<TPromise<T>>): TPromise<T> {
return this.current = this.current.then(() => promiseTask());
}
}
/**
* A helper to delay execution of a task that is being requested often.
*
......
......@@ -7,7 +7,7 @@ import nls = require('vs/nls');
import * as path from 'path';
import { createWriteStream } from 'fs';
import { Readable } from 'stream';
import { nfcall, ninvoke, sequence } from 'vs/base/common/async';
import { nfcall, ninvoke, SimpleThrottler } from 'vs/base/common/async';
import { mkdirp, rimraf } from 'vs/base/node/pfs';
import { Promise, TPromise } from 'vs/base/common/winjs.base';
import { open as openZip, Entry, ZipFile } from 'yauzl';
......@@ -50,10 +50,11 @@ function extractEntry(stream: Readable, fileName: string, mode: number, targetPa
function extractZip(zipfile: ZipFile, targetPath: string, options: IOptions): Promise {
return new Promise((c, e) => {
const promiseFactory: { (): Promise; }[] = [];
const throttler = new SimpleThrottler();
let last = TPromise.as(null);
zipfile.once('error', e);
zipfile.once('close', () => sequence(promiseFactory).then(c, e));
zipfile.once('close', () => last.then(c, e));
zipfile.on('entry', (entry: Entry) => {
if (!options.sourcePathRegex.test(entry.fileName)) {
return;
......@@ -63,7 +64,7 @@ function extractZip(zipfile: ZipFile, targetPath: string, options: IOptions): Pr
const fileName = entry.fileName.replace(options.sourcePathRegex, '');
const mode = modeFromEntry(entry);
promiseFactory.push(() => stream.then(stream => extractEntry(stream, fileName, mode, targetPath, options)));
last = throttler.queue(() => stream.then(stream => extractEntry(stream, fileName, mode, targetPath, options)));
});
});
}
......
......@@ -210,6 +210,19 @@ suite('Glob', () => {
assert(!glob.match(p, '/some.js/test'));
assert(!glob.match(p, '\\some.js\\test'));
p = '**/project.json';
assert(glob.match(p, 'project.json'));
assert(glob.match(p, '/project.json'));
assert(glob.match(p, 'some/folder/project.json'));
assert(!glob.match(p, 'some/folder/file_project.json'));
assert(!glob.match(p, 'some/folder/fileproject.json'));
assert(!glob.match(p, '/rrproject.json'));
assert(!glob.match(p, 'some/rrproject.json'));
assert(!glob.match(p, 'rrproject.json'));
assert(!glob.match(p, '\\rrproject.json'));
assert(!glob.match(p, 'some\\rrproject.json'));
p = 'test/**';
assert(glob.match(p, 'test'));
assert(glob.match(p, 'test/foo.js'));
......
......@@ -64,7 +64,8 @@ class Main {
const isInstalled = installed.some(e => getExtensionId(e) === id);
if (isInstalled) {
return TPromise.wrapError(localize('alreadyInstalled', "Extension '{0}' is already installed.", id));
console.log(localize('alreadyInstalled', "Extension '{0}' is already installed.", id));
return TPromise.as(null);
}
return this.extensionGalleryService.query({ ids: [id] })
......
......@@ -88,6 +88,7 @@ export function registerCompletionItemProvider(languageId:string, provider:Compl
let adapter = new SuggestAdapter(provider);
return modes.SuggestRegistry.register(languageId, {
triggerCharacters: provider.triggerCharacters,
shouldAutotriggerSuggest: true,
provideCompletionItems: (model:editorCommon.IReadOnlyModel, position:Position, token:CancellationToken): Thenable<modes.ISuggestResult[]> => {
return adapter.provideCompletionItems(model, position, token);
},
......
......@@ -851,6 +851,10 @@ export abstract class CommonCodeEditor extends EventEmitter implements IActionPr
this.emit(editorCommon.EventType.ModelRawContentChanged, e);
break;
case editorCommon.EventType.ModelContentChanged2:
this.emit(editorCommon.EventType.ModelContentChanged2, e);
break;
case editorCommon.EventType.ModelOptionsChanged:
this.emit(editorCommon.EventType.ModelOptionsChanged, e);
break;
......
......@@ -97,46 +97,69 @@ export class EditableTextModel extends TextModelWithDecorations implements edito
};
});
for (let i = 0, len = this._trimAutoWhitespaceLines.length; i < len; i++) {
let trimLineNumber = this._trimAutoWhitespaceLines[i];
let maxLineColumn = this.getLineMaxColumn(trimLineNumber);
let allowTrimLine = true;
// Sometimes, auto-formatters change ranges automatically which can cause undesired auto whitespace trimming near the cursor
// We'll use the following heuristic: if the edits occur near the cursor, then it's ok to trim auto whitespace
let editsAreNearCursors = true;
for (let i = 0, len = beforeCursorState.length; i < len; i++) {
let sel = beforeCursorState[i];
let foundEditNearSel = false;
for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {
let editRange = incomingEdits[j].range;
let editText = incomingEdits[j].text;
if (trimLineNumber < editRange.startLineNumber || trimLineNumber > editRange.endLineNumber) {
// `trimLine` is completely outside this edit
continue;
let selIsAbove = editRange.startLineNumber > sel.endLineNumber;
let selIsBelow = sel.startLineNumber > editRange.endLineNumber;
if (!selIsAbove && !selIsBelow) {
foundEditNearSel = true;
break;
}
}
if (!foundEditNearSel) {
editsAreNearCursors = false;
break;
}
}
// At this point:
// editRange.startLineNumber <= trimLine <= editRange.endLineNumber
if (
trimLineNumber === editRange.startLineNumber && editRange.startColumn === maxLineColumn
&& editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(0) === '\n'
) {
// This edit inserts a new line (and maybe other text) after `trimLine`
continue;
if (editsAreNearCursors) {
for (let i = 0, len = this._trimAutoWhitespaceLines.length; i < len; i++) {
let trimLineNumber = this._trimAutoWhitespaceLines[i];
let maxLineColumn = this.getLineMaxColumn(trimLineNumber);
let allowTrimLine = true;
for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {
let editRange = incomingEdits[j].range;
let editText = incomingEdits[j].text;
if (trimLineNumber < editRange.startLineNumber || trimLineNumber > editRange.endLineNumber) {
// `trimLine` is completely outside this edit
continue;
}
// At this point:
// editRange.startLineNumber <= trimLine <= editRange.endLineNumber
if (
trimLineNumber === editRange.startLineNumber && editRange.startColumn === maxLineColumn
&& editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(0) === '\n'
) {
// This edit inserts a new line (and maybe other text) after `trimLine`
continue;
}
// Looks like we can't trim this line as it would interfere with an incoming edit
allowTrimLine = false;
break;
}
// Looks like we can't trim this line as it would interfere with an incoming edit
allowTrimLine = false;
break;
}
if (allowTrimLine) {
editOperations.push({
identifier: null,
range: new Range(trimLineNumber, 1, trimLineNumber, maxLineColumn),
text: null,
forceMoveMarkers: false,
isAutoWhitespaceEdit: false
});
}
if (allowTrimLine) {
editOperations.push({
identifier: null,
range: new Range(trimLineNumber, 1, trimLineNumber, maxLineColumn),
text: null,
forceMoveMarkers: false,
isAutoWhitespaceEdit: false
});
}
}
this._trimAutoWhitespaceLines = null;
......
......@@ -391,6 +391,8 @@ export interface ISuggestSupport {
triggerCharacters: string[];
shouldAutotriggerSuggest: boolean;
filter?: IFilter;
provideCompletionItems(model:editorCommon.IReadOnlyModel, position:Position, token:CancellationToken): ISuggestResult[] | Thenable<ISuggestResult[]>;
......
......@@ -35,6 +35,10 @@ export class TextualSuggestSupport implements ISuggestSupport {
return [];
}
public get shouldAutotriggerSuggest(): boolean {
return true;
}
public get filter(): IFilter {
return matchesStrictPrefix;
}
......
......@@ -129,6 +129,10 @@ export class SuggestController implements IEditorContribution {
}
private triggerCharacterHandler(character: string, groups: ISuggestSupport[][]): void {
groups = groups.map(supports => {
return supports.filter(support => support.shouldAutotriggerSuggest);
});
if (groups.length > 0) {
this.triggerSuggest(character, groups).done(null, onUnexpectedError);
}
......
......@@ -82,7 +82,7 @@ class Context {
}
const supports = SuggestRegistry.all(model);
this.isAutoTriggerEnabled = (supports.length > 0);
this.isAutoTriggerEnabled = supports.some(s => s.shouldAutotriggerSuggest);
}
public shouldAutoTrigger(): boolean {
......
......@@ -10,7 +10,11 @@ import {EditOperation} from 'vs/editor/common/core/editOperation';
import {Position} from 'vs/editor/common/core/position';
import {Range} from 'vs/editor/common/core/range';
import {Selection} from 'vs/editor/common/core/selection';
import {EndOfLinePreference, EventType, Handler, IPosition, ISelection, IEditorOptions, DefaultEndOfLine, ITextModelCreationOptions} from 'vs/editor/common/editorCommon';
import {
EndOfLinePreference, EventType, Handler, IPosition, ISelection, IEditorOptions,
DefaultEndOfLine, ITextModelCreationOptions, ICommand,
ITokenizedModel, IEditOperationBuilder, ICursorStateComputerData
} from 'vs/editor/common/editorCommon';
import {Model} from 'vs/editor/common/model/model';
import {IMode, IRichEditSupport, IndentAction} from 'vs/editor/common/modes';
import {RichEditSupport} from 'vs/editor/common/modes/supports/richEditSupport';
......@@ -2184,6 +2188,49 @@ suite('Editor Controller - Cursor Configuration', () => {
});
});
test('issue #6862: Editor removes auto inserted indentation when formatting on type', () => {
usingCursor({
text: [
'function foo (params: string) {}'
],
modelOpts: {
insertSpaces: true,
tabSize: 4,
detectIndentation: false,
defaultEOL: DefaultEndOfLine.LF,
trimAutoWhitespace: true
},
mode: new OnEnterMode(IndentAction.IndentOutdent),
}, (model, cursor) => {
moveTo(cursor, 1, 32);
cursorCommand(cursor, H.Type, { text: '\n' }, 'keyboard');
assert.equal(model.getLineContent(1), 'function foo (params: string) {');
assert.equal(model.getLineContent(2), ' ');
assert.equal(model.getLineContent(3), '}');
class TestCommand implements ICommand {
private _selectionId: string = null;
public getEditOperations(model: ITokenizedModel, builder: IEditOperationBuilder): void {
builder.addEditOperation(new Range(1, 13, 1, 14), '');
this._selectionId = builder.trackSelection(cursor.getSelection());
}
public computeCursorState(model: ITokenizedModel, helper: ICursorStateComputerData): Selection {
return helper.getTrackedSelection(this._selectionId);
}
}
cursor.trigger('autoFormat', Handler.ExecuteCommand, new TestCommand());
assert.equal(model.getLineContent(1), 'function foo(params: string) {');
assert.equal(model.getLineContent(2), ' ');
assert.equal(model.getLineContent(3), '}');
});
});
test('removeAutoWhitespace on: removes only whitespace the cursor added 2', () => {
usingCursor({
text: [
......
......@@ -359,6 +359,7 @@ export class CSSMode extends AbstractMode {
modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: [' ', ':'],
shouldAutotriggerSuggest: true,
provideCompletionItems: (model, position, token): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._provideCompletionItems(model.uri, position));
}
......
......@@ -131,6 +131,7 @@ export class HandlebarsMode extends htmlMode.HTMLMode<htmlWorker.HTMLWorker> {
modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: ['.', ':', '<', '"', '=', '/'],
shouldAutotriggerSuggest: true,
provideCompletionItems: (model, position, token): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._provideCompletionItems(model.uri, position));
}
......
......@@ -339,6 +339,7 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode impl
modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: ['.', ':', '<', '"', '=', '/'],
shouldAutotriggerSuggest: true,
provideCompletionItems: (model, position, token): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._provideCompletionItems(model.uri, position));
}
......
......@@ -94,6 +94,7 @@ export class JSONMode extends AbstractMode {
modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: [],
shouldAutotriggerSuggest: true,
provideCompletionItems: (model, position, token): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._provideCompletionItems(model.uri, position));
}
......
......@@ -233,6 +233,7 @@ export class LESSMode extends AbstractMode {
modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: [],
shouldAutotriggerSuggest: true,
provideCompletionItems: (model, position, token): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._provideCompletionItems(model.uri, position));
}
......
......@@ -22,7 +22,7 @@ import {AbstractMode, ModeWorkerManager} from 'vs/editor/common/modes/abstractMo
import {createRichEditSupport} from 'vs/editor/common/modes/monarch/monarchDefinition';
import {createTokenizationSupport} from 'vs/editor/common/modes/monarch/monarchLexer';
import {RichEditSupport} from 'vs/editor/common/modes/supports/richEditSupport';
import {TextualSuggestSupport} from 'vs/editor/common/modes/supports/suggestSupport';
import {wireCancellationToken} from 'vs/base/common/async';
export const language =
<Types.ILanguage>{
......@@ -235,9 +235,13 @@ export class MarkdownMode extends AbstractMode implements Modes.IEmitOutputSuppo
this.richEditSupport = new RichEditSupport(this.getId(), null, createRichEditSupport(lexer));
Modes.SuggestRegistry.register(this.getId(),
new TextualSuggestSupport(editorWorkerService, configurationService),
true);
Modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: [],
shouldAutotriggerSuggest: false,
provideCompletionItems: (model, position, token) => {
return wireCancellationToken(token, editorWorkerService.textualSuggest(model.uri, position));
}
}, true);
}
private _worker<T>(runner:(worker:MarkdownWorker.MarkdownWorker)=>WinJS.TPromise<T>): WinJS.TPromise<T> {
......
......@@ -80,6 +80,7 @@ export class RAZORMode extends htmlMode.HTMLMode<RAZORWorker> {
modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: ['.', ':', '<', '"', '=', '/'],
shouldAutotriggerSuggest: true,
provideCompletionItems: (model, position, token): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._provideCompletionItems(model.uri, position));
}
......
......@@ -334,6 +334,7 @@ export class SASSMode extends AbstractMode {
modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: [],
shouldAutotriggerSuggest: true,
provideCompletionItems: (model, position, token): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._provideCompletionItems(model.uri, position));
}
......
......@@ -172,6 +172,10 @@ class SuggestAdapter extends Adapter implements modes.ISuggestSupport {
return ['.'];
}
public get shouldAutotriggerSuggest(): boolean {
return true;
}
provideCompletionItems(model:editorCommon.IReadOnlyModel, position:Position, token:CancellationToken): Thenable<modes.ISuggestResult[]> {
const wordInfo = model.getWordUntilPosition(position);
const resource = model.uri;
......
......@@ -36,6 +36,7 @@ export class NormalizedKeybindingItem {
command: string;
when: KbExpr;
isDefault: boolean;
actualCommand: string;
public static fromKeybindingItem(source:IKeybindingItem, isDefault:boolean): NormalizedKeybindingItem {
let when: KbExpr = null;
......@@ -48,6 +49,7 @@ export class NormalizedKeybindingItem {
constructor(keybinding: number, command: string, when: KbExpr, isDefault: boolean) {
this.keybinding = keybinding;
this.command = command;
this.actualCommand = this.command ? this.command.replace(/^\^/, '') : this.command;
this.when = when;
this.isDefault = isDefault;
}
......@@ -115,7 +117,7 @@ export class KeybindingResolver {
}
private static _isTargetedForRemoval(defaultKb:NormalizedKeybindingItem, keybinding:number, command:string, when:KbExpr): boolean {
if (defaultKb.command !== command) {
if (defaultKb.actualCommand !== command) {
return false;
}
if (keybinding) {
......
......@@ -271,6 +271,33 @@ suite('Keybinding Service', () => {
]);
});
test('issue #612#issuecomment-222109084 cannot remove keybindings for commands with ^', function() {
let defaults:IKeybindingItem[] = [{
command: '^yes1',
when: KbExpr.equals('1', 'a'),
keybinding: KeyCode.KEY_A,
weight1: 0,
weight2: 0
}, {
command: 'yes2',
when: KbExpr.equals('2', 'b'),
keybinding: KeyCode.KEY_B,
weight1: 0,
weight2: 0
}];
let overrides:IKeybindingItem[] = [{
command: '-yes1',
when: null,
keybinding: KeyCode.KEY_A,
weight1: 0,
weight2: 0
}];
let actual = KeybindingResolver.combine(defaults, overrides);
assert.deepEqual(actual, [
new NormalizedKeybindingItem(KeyCode.KEY_B, 'yes2', KbExpr.equals('2', 'b'), true)
]);
});
test('normalizeRule', function() {
let key1IsTrue = KbExpr.equals('key1', true);
let key1IsNotFalse = KbExpr.notEquals('key1', false);
......
......@@ -976,6 +976,7 @@ export class MainThreadLanguageFeatures {
$registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[]): TPromise<any> {
this._registrations[handle] = modes.SuggestRegistry.register(selector, <modes.ISuggestSupport>{
triggerCharacters: triggerCharacters,
shouldAutotriggerSuggest: true,
provideCompletionItems: (model:IReadOnlyModel, position:EditorPosition, token:CancellationToken): Thenable<modes.ISuggestResult[]> => {
return wireCancellationToken(token, this._proxy.$provideCompletionItems(handle, model.uri, position));
},
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册