Merge branch 'master' into aeschli/saveUntitledWorkspaceOnRenderer

This commit is contained in:
Martin Aeschlimann
2019-03-06 15:53:34 +01:00
562 changed files with 12371 additions and 7876 deletions
+7 -3
View File
@@ -152,9 +152,13 @@ async function publish(commit: string, quality: string, platform: string, type:
const queuedBy = process.env['BUILD_QUEUEDBY']!;
const sourceBranch = process.env['BUILD_SOURCEBRANCH']!;
const isReleased = quality === 'insider'
&& /^master$|^refs\/heads\/master$/.test(sourceBranch)
&& /Project Collection Service Accounts|Microsoft.VisualStudio.Services.TFS/.test(queuedBy);
const isReleased = (
// Insiders: nightly build from master
(quality === 'insider' && /^master$|^refs\/heads\/master$/.test(sourceBranch) && /Project Collection Service Accounts|Microsoft.VisualStudio.Services.TFS/.test(queuedBy)) ||
// Exploration: any build from electron-4.0.x branch
(quality === 'exploration' && /^electron-4.0.x$|^refs\/heads\/electron-4.0.x$/.test(sourceBranch))
);
console.log('Publishing...');
console.log('Quality:', quality);
+1 -1
View File
@@ -16,7 +16,7 @@
},
{
"name": "ms-vscode.node-debug2",
"version": "1.32.0",
"version": "1.32.1",
"repo": "https://github.com/Microsoft/vscode-node-debug2",
"metadata": {
"id": "36d19e17-7569-4841-a001-947eb18602b2",
+91
View File
@@ -0,0 +1,91 @@
"use strict";
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
const https = require("https");
const fs = require("fs");
const path = require("path");
const cp = require("child_process");
function ensureDir(filepath) {
if (!fs.existsSync(filepath)) {
ensureDir(path.dirname(filepath));
fs.mkdirSync(filepath);
}
}
function download(options, destination) {
ensureDir(path.dirname(destination));
return new Promise((c, e) => {
const fd = fs.openSync(destination, 'w');
const req = https.get(options, (res) => {
res.on('data', (chunk) => {
fs.writeSync(fd, chunk);
});
res.on('end', () => {
fs.closeSync(fd);
c();
});
});
req.on('error', (reqErr) => {
console.error(`request to ${options.host}${options.path} failed.`);
console.error(reqErr);
e(reqErr);
});
});
}
const MARKER_ARGUMENT = `_download_fork_`;
function base64encode(str) {
return Buffer.from(str, 'utf8').toString('base64');
}
function base64decode(str) {
return Buffer.from(str, 'base64').toString('utf8');
}
function downloadInExternalProcess(options) {
const url = `https://${options.requestOptions.host}${options.requestOptions.path}`;
console.log(`Downloading ${url}...`);
return new Promise((c, e) => {
const child = cp.fork(__filename, [MARKER_ARGUMENT, base64encode(JSON.stringify(options))], {
stdio: ['pipe', 'pipe', 'pipe', 'ipc']
});
let stderr = [];
child.stderr.on('data', (chunk) => {
stderr.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
});
child.on('exit', (code) => {
if (code === 0) {
// normal termination
console.log(`Finished downloading ${url}.`);
c();
}
else {
// abnormal termination
console.error(Buffer.concat(stderr).toString());
e(new Error(`Download of ${url} failed.`));
}
});
});
}
exports.downloadInExternalProcess = downloadInExternalProcess;
function _downloadInExternalProcess() {
let options;
try {
options = JSON.parse(base64decode(process.argv[3]));
}
catch (err) {
console.error(`Cannot read arguments`);
console.error(err);
process.exit(-1);
return;
}
download(options.requestOptions, options.destinationPath).then(() => {
process.exit(0);
}, (err) => {
console.error(err);
process.exit(-2);
});
}
if (process.argv.length >= 4 && process.argv[2] === MARKER_ARGUMENT) {
// running as forked download script
_downloadInExternalProcess();
}
+111
View File
@@ -0,0 +1,111 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as https from 'https';
import * as fs from 'fs';
import * as path from 'path';
import * as cp from 'child_process';
function ensureDir(filepath: string) {
if (!fs.existsSync(filepath)) {
ensureDir(path.dirname(filepath));
fs.mkdirSync(filepath);
}
}
function download(options: https.RequestOptions, destination: string): Promise<void> {
ensureDir(path.dirname(destination));
return new Promise<void>((c, e) => {
const fd = fs.openSync(destination, 'w');
const req = https.get(options, (res) => {
res.on('data', (chunk) => {
fs.writeSync(fd, chunk);
});
res.on('end', () => {
fs.closeSync(fd);
c();
});
});
req.on('error', (reqErr) => {
console.error(`request to ${options.host}${options.path} failed.`);
console.error(reqErr);
e(reqErr);
});
});
}
const MARKER_ARGUMENT = `_download_fork_`;
function base64encode(str: string): string {
return Buffer.from(str, 'utf8').toString('base64');
}
function base64decode(str: string): string {
return Buffer.from(str, 'base64').toString('utf8');
}
export interface IDownloadRequestOptions {
host: string;
path: string;
}
export interface IDownloadOptions {
requestOptions: IDownloadRequestOptions;
destinationPath: string;
}
export function downloadInExternalProcess(options: IDownloadOptions): Promise<void> {
const url = `https://${options.requestOptions.host}${options.requestOptions.path}`;
console.log(`Downloading ${url}...`);
return new Promise<void>((c, e) => {
const child = cp.fork(
__filename,
[MARKER_ARGUMENT, base64encode(JSON.stringify(options))],
{
stdio: ['pipe', 'pipe', 'pipe', 'ipc']
}
);
let stderr: Buffer[] = [];
child.stderr.on('data', (chunk) => {
stderr.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
});
child.on('exit', (code) => {
if (code === 0) {
// normal termination
console.log(`Finished downloading ${url}.`);
c();
} else {
// abnormal termination
console.error(Buffer.concat(stderr).toString());
e(new Error(`Download of ${url} failed.`));
}
});
});
}
function _downloadInExternalProcess() {
let options: IDownloadOptions;
try {
options = JSON.parse(base64decode(process.argv[3]));
} catch (err) {
console.error(`Cannot read arguments`);
console.error(err);
process.exit(-1);
return;
}
download(options.requestOptions, options.destinationPath).then(() => {
process.exit(0);
}, (err) => {
console.error(err);
process.exit(-2);
});
}
if (process.argv.length >= 4 && process.argv[2] === MARKER_ARGUMENT) {
// running as forked download script
_downloadInExternalProcess();
}
+8
View File
@@ -234,6 +234,14 @@ const finalEditorResourcesTask = task.define('final-editor-resources', () => {
}))
.pipe(gulp.dest('out-monaco-editor-core')),
// version.txt
gulp.src('build/monaco/version.txt')
.pipe(es.through(function (data) {
data.contents = Buffer.from(`monaco-editor-core: https://github.com/Microsoft/vscode/tree/${sha1}`);
this.emit('data', data);
}))
.pipe(gulp.dest('out-monaco-editor-core')),
// README.md
gulp.src('build/monaco/README-npm.md')
.pipe(es.through(function (data) {
+2 -2
View File
@@ -81,7 +81,7 @@ const indentationFilter = [
'!src/typings/**/*.d.ts',
'!extensions/**/*.d.ts',
'!**/*.{svg,exe,png,bmp,scpt,bat,cmd,cur,ttf,woff,eot,md,ps1,template,yaml,yml,d.ts.recipe,ico,icns}',
'!build/{lib,tslintRules}/**/*.js',
'!build/{lib,tslintRules,download}/**/*.js',
'!build/**/*.sh',
'!build/azure-pipelines/**/*.js',
'!build/azure-pipelines/**/*.config',
@@ -228,7 +228,7 @@ function hygiene(some) {
let formatted = result.dest.replace(/\r\n/gm, '\n');
if (original !== formatted) {
console.error('File not formatted:', file.relative);
console.error("File not formatted. Run the 'Format Document' command to fix it:", file.relative);
errorCount++;
}
cb(null, file);
+1 -1
View File
@@ -69,7 +69,7 @@ const vscodeResources = [
'out-build/vs/base/browser/ui/octiconLabel/octicons/**',
'out-build/vs/workbench/browser/media/*-theme.css',
'out-build/vs/workbench/contrib/debug/**/*.json',
'out-build/vs/workbench/contrib/execution/**/*.scpt',
'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
'out-build/vs/workbench/contrib/webview/electron-browser/webview-pre.js',
'out-build/vs/**/markdown.css',
'out-build/vs/workbench/contrib/tasks/**/*.json',
+2 -2
View File
@@ -55,11 +55,11 @@
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/execution",
"name": "vs/workbench/contrib/extensions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/extensions",
"name": "vs/workbench/contrib/externalTerminal",
"project": "vscode-workbench"
},
{
+37
View File
@@ -14,6 +14,8 @@ const fs = require("fs");
const _rimraf = require("rimraf");
const git = require("./git");
const VinylFile = require("vinyl");
const download_1 = require("../download/download");
const REPO_ROOT = path.join(__dirname, '../../');
const NoCancellationToken = { isCancellationRequested: () => false };
function incremental(streamProvider, initial, supportsCancellation) {
const input = es.through();
@@ -221,3 +223,38 @@ function versionStringToNumber(versionStr) {
return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10);
}
exports.versionStringToNumber = versionStringToNumber;
function download(requestOptions) {
const result = es.through();
const filename = path.join(REPO_ROOT, `.build/tmp-${Date.now()}-${path.posix.basename(requestOptions.path)}`);
const opts = {
requestOptions: requestOptions,
destinationPath: filename
};
download_1.downloadInExternalProcess(opts).then(() => {
fs.stat(filename, (err, stat) => {
if (err) {
result.emit('error', err);
return;
}
fs.readFile(filename, (err, data) => {
if (err) {
result.emit('error', err);
return;
}
fs.unlink(filename, () => {
result.emit('data', new VinylFile({
path: path.normalize(requestOptions.path),
stat: stat,
base: path.normalize(requestOptions.path),
contents: data
}));
result.emit('end');
});
});
});
}, (err) => {
result.emit('error', err);
});
return result;
}
exports.download = download;
+38
View File
@@ -17,6 +17,9 @@ import * as git from './git';
import * as VinylFile from 'vinyl';
import { ThroughStream } from 'through';
import * as sm from 'source-map';
import { IDownloadOptions, downloadInExternalProcess, IDownloadRequestOptions } from '../download/download';
const REPO_ROOT = path.join(__dirname, '../../');
export interface ICancellationToken {
isCancellationRequested(): boolean;
@@ -280,3 +283,38 @@ export function versionStringToNumber(versionStr: string) {
return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10);
}
export function download(requestOptions: IDownloadRequestOptions): NodeJS.ReadWriteStream {
const result = es.through();
const filename = path.join(REPO_ROOT, `.build/tmp-${Date.now()}-${path.posix.basename(requestOptions.path)}`);
const opts: IDownloadOptions = {
requestOptions: requestOptions,
destinationPath: filename
};
downloadInExternalProcess(opts).then(() => {
fs.stat(filename, (err, stat) => {
if (err) {
result.emit('error', err);
return;
}
fs.readFile(filename, (err, data) => {
if (err) {
result.emit('error', err);
return;
}
fs.unlink(filename, () => {
result.emit('data', new VinylFile({
path: path.normalize(requestOptions.path),
stat: stat,
base: path.normalize(requestOptions.path),
contents: data
}));
result.emit('end');
});
});
});
}, (err) => {
result.emit('error', err);
});
return result;
}
+25
View File
@@ -7,6 +7,31 @@ herein, whether by implication, estoppel or otherwise.
%% nodejs path library (https://github.com/nodejs/node/tree/43dd49c9782848c25e5b03448c8a0f923f13c158)
=========================================
Copyright Joyent, Inc. and other Node contributors.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to permit
persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF nodejs path library NOTICES AND INFORMATION
%% promise-polyfill version 8.1.0 (https://github.com/taylorhakes/promise-polyfill)
=========================================
+2
View File
@@ -13,6 +13,7 @@ import { QuickOpenWidget } from './vs/base/parts/quickopen/browser/quickOpenWidg
import { WorkbenchAsyncDataTree } from './vs/platform/list/browser/listService';
import { SyncDescriptor0, SyncDescriptor1, SyncDescriptor2, SyncDescriptor3, SyncDescriptor4, SyncDescriptor5, SyncDescriptor6, SyncDescriptor7, SyncDescriptor8 } from './vs/platform/instantiation/common/descriptors';
import { DiffNavigator } from './vs/editor/browser/widget/diffNavigator';
import { DocumentRangeFormattingEditProvider } from './vs/editor/common/modes';
import * as editorAPI from './vs/editor/editor.api';
(function () {
@@ -32,6 +33,7 @@ import * as editorAPI from './vs/editor/editor.api';
a = (<SimpleWorkerClient<any>>b).getProxyObject; // IWorkerClient
a = create1;
a = create2;
a = (<DocumentRangeFormattingEditProvider>b).extensionId;
// injection madness
a = (<SyncDescriptor0<any>>b).ctor;
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "monaco-editor-core",
"private": true,
"version": "0.14.3",
"version": "0.16.0",
"description": "A browser based code editor",
"author": "Microsoft Corporation",
"license": "MIT",
View File
+2 -2
View File
@@ -6,8 +6,8 @@
var updateGrammar = require('../../../build/npm/update-grammar');
updateGrammar.update('atom/language-c', 'grammars/c.cson', './syntaxes/c.tmLanguage.json');
updateGrammar.update('atom/language-c', 'grammars/c%2B%2B.cson', './syntaxes/cpp.tmLanguage.json');
updateGrammar.update('jeff-hykin/cpp-textmate-grammar', '/syntaxes/c.tmLanguage.json', './syntaxes/c.tmLanguage.json');
updateGrammar.update('jeff-hykin/cpp-textmate-grammar', '/syntaxes/cpp.tmLanguage.json', './syntaxes/cpp.tmLanguage.json');
// `source.c.platform` which is still included by other grammars
updateGrammar.update('textmate/c.tmbundle', 'Syntaxes/Platform.tmLanguage', './syntaxes/platform.tmLanguage.json');
+5 -5
View File
@@ -4,14 +4,14 @@
"component": {
"type": "git",
"git": {
"name": "atom/language-c",
"repositoryUrl": "https://github.com/atom/language-c",
"commitHash": "9c0c5f202741a5647025db8d5df5fefba47b036c"
"name": "jeff-hykin/cpp-textmate-grammar",
"repositoryUrl": "https://github.com/jeff-hykin/cpp-textmate-grammar",
"commitHash": "d57808aa3db2242f1f2be1aec19649a852aaa52e"
}
},
"license": "MIT",
"version": "0.58.1",
"description": "The files syntaxes/c.json and syntaxes/c++.json were derived from the Atom package https://atom.io/packages/language-c which was originally converted from the C TextMate bundle https://github.com/textmate/c.tmbundle."
"version": "1.4.5",
"description": "The files syntaxes/c.json and syntaxes/c++.json were derived from https://github.com/atom/language-c which was originally converted from the C TextMate bundle https://github.com/textmate/c.tmbundle."
},
{
"component": {
+256 -50
View File
@@ -1,10 +1,10 @@
{
"information_for_contributors": [
"This file has been converted from https://github.com/atom/language-c/blob/master/grammars/c.cson",
"This file has been converted from https://github.com/jeff-hykin/cpp-textmate-grammar/blob/master//syntaxes/c.tmLanguage.json",
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
"version": "https://github.com/atom/language-c/commit/9c0c5f202741a5647025db8d5df5fefba47b036c",
"version": "https://github.com/jeff-hykin/cpp-textmate-grammar/commit/9de911d74546b9ae74c57e404515935a0405e696",
"name": "C",
"scopeName": "source.c",
"patterns": [
@@ -50,6 +50,9 @@
{
"include": "#operators"
},
{
"include": "#operator_overload"
},
{
"include": "#numbers"
},
@@ -57,7 +60,7 @@
"include": "#strings"
},
{
"begin": "(?x)\n^\\s* ((\\#)\\s*define) \\s+ # define\n((?<id>[a-zA-Z_$][\\w$]*)) # macro name\n(?:\n (\\()\n (\n \\s* \\g<id> \\s* # first argument\n ((,) \\s* \\g<id> \\s*)* # additional arguments\n (?:\\.\\.\\.)? # varargs ellipsis?\n )\n (\\))\n)?",
"begin": "(?x)\n^\\s* ((\\#)\\s*define) \\s+\t# define\n((?<id>[a-zA-Z_$][\\w$]*))\t # macro name\n(?:\n (\\()\n\t(\n\t \\s* \\g<id> \\s*\t\t # first argument\n\t ((,) \\s* \\g<id> \\s*)* # additional arguments\n\t (?:\\.\\.\\.)?\t\t\t# varargs ellipsis?\n\t)\n (\\))\n)?",
"beginCaptures": {
"1": {
"name": "keyword.control.directive.define.c"
@@ -90,8 +93,8 @@
]
},
{
"begin": "^\\s*((#)\\s*(error|warning))\\b",
"captures": {
"begin": "^\\s*((#)\\s*(error|warning))\\b\\s*",
"beginCaptures": {
"1": {
"name": "keyword.control.directive.diagnostic.$3.c"
},
@@ -99,17 +102,61 @@
"name": "punctuation.definition.directive.c"
}
},
"end": "(?<!\\\\)(?=\\n)|(?=//)|(?=/\\*(?!.*\\\\\\s*\\n))",
"end": "(?<!\\\\)(?=\\n)",
"name": "meta.preprocessor.diagnostic.c",
"patterns": [
{
"include": "#comments"
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.c"
}
},
"end": "\"|(?<!\\\\)(?=\\s*\\n)",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.c"
}
},
"name": "string.quoted.double.c",
"patterns": [
{
"include": "#line_continuation_character"
}
]
},
{
"include": "#strings"
"begin": "'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.c"
}
},
"end": "'|(?<!\\\\)(?=\\s*\\n)",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.c"
}
},
"name": "string.quoted.single.c",
"patterns": [
{
"include": "#line_continuation_character"
}
]
},
{
"include": "#line_continuation_character"
"begin": "[^'\"]",
"end": "(?<!\\\\)(?=\\s*\\n)",
"name": "string.unquoted.single.c",
"patterns": [
{
"include": "#line_continuation_character"
},
{
"include": "#comments"
}
]
}
]
},
@@ -269,8 +316,8 @@
"include": "#parens"
},
{
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\s*\\()\n(?=\n (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n |\n (?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)",
"end": "(?<=\\))(?!\\w)",
"begin": "(?!(?:not|compl|sizeof|new|delete|not_eq|bitand|xor|bitor|and|or|throw|and_eq|xor_eq|or_eq|alignof|alignas|typeid|noexcept|static_cast|dynamic_cast|const_cast|reinterpret_cast|while|for|do|if|else|goto|switch|try|catch|return|break|case|continue|default|auto|void|char|short|int|signed|unsigned|long|float|double|bool|wchar_t|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t|const|static|volatile|register|restrict|constexpr|extern|inline|mutable|friend|NULL|true|false|TRUE|FALSE|nullptr|class|struct|union|enum|explicit|virtual|mutable|constexpr|consteval|private|protected|public|if|elif|else|endif|ifdef|ifndef|define|undef|include|line|error|warning|pragma|_Pragma|defined|__has_include|__has_cpp_attribute|this|template|namespace|using|operator|typedef|decltype|typename|asm|__asm__|atomic_cancel|atomic_commit|atomic_noexcept|concept|co_await|co_return|co_yield|export|import|module|reflexpr|requires|synchronized|thread_local|audit|axiom|transaction_safe|transaction_safe_dynamic)\\s*\\()(?=[a-zA-Z_][a-zA-Z0-9_]*\\s*\\()",
"end": "(?<=\\))",
"name": "meta.function.c",
"patterns": [
{
@@ -282,15 +329,31 @@
"include": "#line_continuation_character"
},
{
"match": "(\\[)|(\\])",
"captures": {
"name": "meta.bracket.square.access.c",
"begin": "([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\]\\)]))?(\\[)(?!\\])",
"beginCaptures": {
"1": {
"name": "punctuation.definition.begin.bracket.square.c"
"name": "variable.object.c"
},
"2": {
"name": "punctuation.definition.begin.bracket.square.c"
}
},
"end": "\\]",
"endCaptures": {
"0": {
"name": "punctuation.definition.end.bracket.square.c"
}
}
},
"patterns": [
{
"include": "#function-call-innards"
}
]
},
{
"name": "storage.modifier.array.bracket.square.c",
"match": "\\[\\s*\\]"
},
{
"match": ";",
@@ -302,8 +365,56 @@
}
],
"repository": {
"access": {
"probably_a_parameter": {
"match": "(?:([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?==)|(?<=(?:[a-zA-Z0-9_]\\s|[&*>\\]\\)]))\\s*([a-zA-Z_][a-zA-Z0-9_]*)\\s*(?=(?:\\[\\]\\s*)?(?:,|\\))))",
"captures": {
"1": {
"name": "variable.parameter.probably.defaulted.c"
},
"2": {
"name": "variable.parameter.probably.c"
}
}
},
"operator_overload": {
"begin": "((?:[a-zA-Z_][a-zA-Z0-9_]*\\s*(?:<(?:[\\s<>,\\w])*>\\s*)?::)*)(operator)((?:\\s*(?:\\+\\+|\\-\\-|\\(\\)|\\[\\]|\\->|\\+\\+|\\-\\-|\\+|\\-|!|~|\\*|&|\\->\\*|\\*|\\/|%|\\+|\\-|<<|>>|<=>|<|<=|>|>=|==|!=|&|\\^|\\||&&|\\|\\||=|\\+=|\\-=|\\*=|\\/=|%=|<<=|>>=|&=|\\^=|\\|=|,)|\\s+(?:(?:new|new\\[\\]|delete|delete\\[\\])|[a-zA-Z_][a-zA-Z0-9_]*)))\\s*(\\()",
"beginCaptures": {
"1": {
"name": "entity.scope.c"
},
"2": {
"name": "entity.name.operator.overload.c"
},
"3": {
"name": "entity.name.operator.overloadee.c"
},
"4": {
"name": "punctuation.section.parameters.begin.bracket.round.c"
}
},
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.section.parameters.end.bracket.round.c"
}
},
"name": "meta.function.definition.parameters.operator-overload.c",
"patterns": [
{
"include": "#probably_a_parameter"
},
{
"include": "#function-innards"
}
]
},
"access-method": {
"name": "meta.function-call.member.c",
"begin": "([a-zA-Z_][a-zA-Z_0-9]*|(?<=[\\]\\)]))\\s*(?:(\\.)|(->))((?:(?:[a-zA-Z_][a-zA-Z_0-9]*)\\s*(?:(?:\\.)|(?:->)))*)\\s*([a-zA-Z_][a-zA-Z_0-9]*)(\\()",
"beginCaptures": {
"1": {
"name": "variable.object.c"
},
"2": {
"name": "punctuation.separator.dot-access.c"
},
@@ -311,10 +422,81 @@
"name": "punctuation.separator.pointer-access.c"
},
"4": {
"name": "variable.other.member.c"
"patterns": [
{
"match": "\\.",
"name": "punctuation.separator.dot-access.c"
},
{
"match": "->",
"name": "punctuation.separator.pointer-access.c"
},
{
"match": "[a-zA-Z_][a-zA-Z_0-9]*",
"name": "variable.object.c"
},
{
"name": "everything.else",
"match": ".+"
}
]
},
"5": {
"name": "entity.name.function.member.c"
},
"6": {
"name": "punctuation.section.arguments.begin.bracket.round.function.member.c"
}
},
"match": "((\\.)|(->))\\s*(([a-zA-Z_][a-zA-Z_0-9]*)\\b(?!\\s*\\())?"
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.section.arguments.end.bracket.round.function.member.c"
}
},
"patterns": [
{
"include": "#function-call-innards"
}
]
},
"access-member": {
"name": "variable.object.access.c",
"match": "(?:([a-zA-Z_][a-zA-Z0-9_]*)|(?<=\\]|\\)))\\s*(?:((?:\\.|\\.\\*))|((?:->|->\\*)))\\s*((?:[a-zA-Z_][a-zA-Z0-9_]*\\s*(?:\\.|->)\\s*)*)\\b(?!(?:auto|void|char|short|int|signed|unsigned|long|float|double|bool|wchar_t|u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t))([a-zA-Z_][a-zA-Z0-9_]*)\\b(?!\\()",
"captures": {
"1": {
"name": "variable.object.c"
},
"2": {
"name": "punctuation.separator.dot-access.c"
},
"3": {
"name": "punctuation.separator.pointer-access.c"
},
"4": {
"patterns": [
{
"match": "\\.",
"name": "punctuation.separator.dot-access.c"
},
{
"match": "->",
"name": "punctuation.separator.pointer-access.c"
},
{
"match": "[a-zA-Z_][a-zA-Z0-9_]*",
"name": "variable.object.c"
},
{
"match": ".+",
"name": "everything.else"
}
]
},
"5": {
"name": "variable.other.member.c"
}
}
},
"block": {
"patterns": [
@@ -352,25 +534,36 @@
"include": "#preprocessor-rule-conditional-block"
},
{
"include": "#access"
"include": "#access-method"
},
{
"include": "#libc"
"include": "#access-member"
},
{
"include": "#c_function_call"
},
{
"captures": {
"name": "meta.initialization.c",
"begin": "(?x)\n(?:\n (?:\n\t(?=\\s)(?<!else|new|return)\n\t(?<=\\w) \\s+(and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas) # or word + space before name\n )\n)\n(\n (?:[A-Za-z_][A-Za-z0-9_]*+ | :: )++ # actual name\n |\n (?:(?<=operator) (?:[-*&<>=+!]+ | \\(\\) | \\[\\]))\n)\n\\s*(\\() # opening bracket",
"beginCaptures": {
"1": {
"name": "variable.other.c"
},
"2": {
"name": "punctuation.definition.parameters.c"
"name": "punctuation.section.parens.begin.bracket.round.initialization.c"
}
},
"match": "(?x)\n(?:\n (?:\n (?=\\s)(?<!else|new|return)\n (?<=\\w) \\s+ # or word + space before name\n )\n)\n(\n (?:[A-Za-z_][A-Za-z0-9_]*+ | :: )++ # actual name\n |\n (?:(?<=operator) (?:[-*&<>=+!]+ | \\(\\) | \\[\\]))\n)\n\\s*(\\() # opening bracket",
"name": "meta.initialization.c"
"end": "\\)",
"endCaptures": {
"0": {
"name": "punctuation.section.parens.end.bracket.round.initialization.c"
}
},
"patterns": [
{
"include": "#function-call-innards"
}
]
},
{
"begin": "{",
@@ -400,7 +593,7 @@
]
},
"c_function_call": {
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(?=\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)",
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\s*\\()\n(?=\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)",
"end": "(?<=\\))(?!\\w)",
"name": "meta.function-call.c",
"patterns": [
@@ -488,17 +681,6 @@
}
]
},
"libc": {
"captures": {
"1": {
"name": "punctuation.whitespace.support.function.leading.c"
},
"2": {
"name": "support.function.C99.c"
}
},
"match": "(?x) (\\s*) \\b\n(_Exit|(?:nearbyint|nextafter|nexttoward|netoward|nan)[fl]?|a(?:cos|sin)h?[fl]?|abort|abs|asctime|assert\n|atan(?:[h2]?[fl]?)?|atexit|ato[ifl]|atoll|bsearch|btowc|cabs[fl]?|cacos|cacos[fl]|cacosh[fl]?\n|calloc|carg[fl]?|casinh?[fl]?|catanh?[fl]?|cbrt[fl]?|ccosh?[fl]?|ceil[fl]?|cexp[fl]?|cimag[fl]?\n|clearerr|clock|clog[fl]?|conj[fl]?|copysign[fl]?|cosh?[fl]?|cpow[fl]?|cproj[fl]?|creal[fl]?\n|csinh?[fl]?|csqrt[fl]?|ctanh?[fl]?|ctime|difftime|div|erfc?[fl]?|exit|fabs[fl]?\n|exp(?:2[fl]?|[fl]|m1[fl]?)?|fclose|fdim[fl]?|fe[gs]et(?:env|exceptflag|round)|feclearexcept\n|feholdexcept|feof|feraiseexcept|ferror|fetestexcept|feupdateenv|fflush|fgetpos|fgetw?[sc]\n|floor[fl]?|fmax?[fl]?|fmin[fl]?|fmod[fl]?|fopen|fpclassify|fprintf|fputw?[sc]|fread|free|freopen\n|frexp[fl]?|fscanf|fseek|fsetpos|ftell|fwide|fwprintf|fwrite|fwscanf|genv|get[sc]|getchar|gmtime\n|gwc|gwchar|hypot[fl]?|ilogb[fl]?|imaxabs|imaxdiv|isalnum|isalpha|isblank|iscntrl|isdigit|isfinite\n|isgraph|isgreater|isgreaterequal|isinf|isless(?:equal|greater)?|isw?lower|isnan|isnormal|isw?print\n|isw?punct|isw?space|isunordered|isw?upper|iswalnum|iswalpha|iswblank|iswcntrl|iswctype|iswdigit|iswgraph\n|isw?xdigit|labs|ldexp[fl]?|ldiv|lgamma[fl]?|llabs|lldiv|llrint[fl]?|llround[fl]?|localeconv|localtime\n|log[2b]?[fl]?|log1[p0][fl]?|longjmp|lrint[fl]?|lround[fl]?|malloc|mbr?len|mbr?towc|mbsinit|mbsrtowcs\n|mbstowcs|memchr|memcmp|memcpy|memmove|memset|mktime|modf[fl]?|perror|pow[fl]?|printf|puts|putw?c(?:har)?\n|qsort|raise|rand|remainder[fl]?|realloc|remove|remquo[fl]?|rename|rewind|rint[fl]?|round[fl]?|scalbl?n[fl]?\n|scanf|setbuf|setjmp|setlocale|setvbuf|signal|signbit|sinh?[fl]?|snprintf|sprintf|sqrt[fl]?|srand|sscanf\n|strcat|strchr|strcmp|strcoll|strcpy|strcspn|strerror|strftime|strlen|strncat|strncmp|strncpy|strpbrk\n|strrchr|strspn|strstr|strto[kdf]|strtoimax|strtol[dl]?|strtoull?|strtoumax|strxfrm|swprintf|swscanf\n|system|tan|tan[fl]|tanh[fl]?|tgamma[fl]?|time|tmpfile|tmpnam|tolower|toupper|trunc[fl]?|ungetw?c|va_arg\n|va_copy|va_end|va_start|vfw?printf|vfw?scanf|vprintf|vscanf|vsnprintf|vsprintf|vsscanf|vswprintf|vswscanf\n|vwprintf|vwscanf|wcrtomb|wcscat|wcschr|wcscmp|wcscoll|wcscpy|wcscspn|wcsftime|wcslen|wcsncat|wcsncmp|wcsncpy\n|wcspbrk|wcsrchr|wcsrtombs|wcsspn|wcsstr|wcsto[dkf]|wcstoimax|wcstol[dl]?|wcstombs|wcstoull?|wcstoumax|wcsxfrm\n|wctom?b|wmem(?:set|chr|cpy|cmp|move)|wprintf|wscanf)\\b"
},
"line_continuation_character": {
"patterns": [
{
@@ -520,6 +702,7 @@
]
},
"parens": {
"name": "punctuation.section.parens",
"begin": "\\(",
"beginCaptures": {
"0": {
@@ -539,6 +722,7 @@
]
},
"parens-block": {
"name": "punctuation.section.parens.block",
"begin": "\\(",
"beginCaptures": {
"0": {
@@ -554,6 +738,10 @@
"patterns": [
{
"include": "#block_innards"
},
{
"match": "(?<!:):(?!:)",
"name": "punctuation.range-based.cpp"
}
]
},
@@ -637,10 +825,10 @@
},
"patterns": [
{
"include": "#access"
"include": "#access-method"
},
{
"include": "#libc"
"include": "#access-member"
},
{
"include": "#c_function_call"
@@ -708,7 +896,7 @@
"string_escaped_char": {
"patterns": [
{
"match": "(?x)\\\\ (\n\\\\ |\n[abefnprtv'\"?] |\n[0-3]\\d{,2} |\n[4-7]\\d? |\nx[a-fA-F0-9]{,2} |\nu[a-fA-F0-9]{,4} |\nU[a-fA-F0-9]{,8} )",
"match": "(?x)\\\\ (\n\\\\\t\t\t |\n[abefnprtv'\"?] |\n[0-3]\\d{,2}\t |\n[4-7]\\d?\t\t|\nx[a-fA-F0-9]{,2} |\nu[a-fA-F0-9]{,4} |\nU[a-fA-F0-9]{,8} )",
"name": "constant.character.escape.c"
},
{
@@ -720,7 +908,7 @@
"string_placeholder": {
"patterns": [
{
"match": "(?x) %\n(\\d+\\$)? # field (argument #)\n[#0\\- +']* # flags\n[,;:_]? # separator character (AltiVec)\n((-?\\d+)|\\*(-?\\d+\\$)?)? # minimum field width\n(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)? # precision\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\n[diouxXDOUeEfFgGaACcSspn%] # conversion type",
"match": "(?x) %\n(\\d+\\$)?\t\t\t\t\t\t # field (argument #)\n[#0\\- +']*\t\t\t\t\t\t # flags\n[,;:_]?\t\t\t\t\t\t\t # separator character (AltiVec)\n((-?\\d+)|\\*(-?\\d+\\$)?)?\t\t # minimum field width\n(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?\t# precision\n(hh|h|ll|l|j|t|z|q|L|vh|vl|v|hv|hl)? # length modifier\n[diouxXDOUeEfFgGaACcSspn%]\t\t # conversion type",
"name": "constant.other.placeholder.c"
},
{
@@ -736,8 +924,16 @@
"storage_types": {
"patterns": [
{
"match": "\\b(asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\b",
"name": "storage.type.c"
"match": "(?:(?<![a-zA-Z0-9_])(?:u_char|u_short|u_int|u_long|ushort|uint|u_quad_t|quad_t|qaddr_t|caddr_t|daddr_t|div_t|dev_t|fixpt_t|blkcnt_t|blksize_t|gid_t|in_addr_t|in_port_t|ino_t|key_t|mode_t|nlink_t|id_t|pid_t|off_t|segsz_t|swblk_t|uid_t|id_t|clock_t|size_t|ssize_t|time_t|useconds_t|suseconds_t|pthread_attr_t|pthread_cond_t|pthread_condattr_t|pthread_mutex_t|pthread_mutexattr_t|pthread_once_t|pthread_rwlock_t|pthread_rwlockattr_t|pthread_t|pthread_key_t|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|int_least8_t|int_least16_t|int_least32_t|int_least64_t|uint_least8_t|uint_least16_t|uint_least32_t|uint_least64_t|int_fast8_t|int_fast16_t|int_fast32_t|int_fast64_t|uint_fast8_t|uint_fast16_t|uint_fast32_t|uint_fast64_t|intptr_t|uintptr_t|intmax_t|intmax_t|uintmax_t|uintmax_t)(?![a-zA-Z0-9_])|_Bool|_Complex|_Imaginary)",
"name": "storage.type.built-in.c"
},
{
"match": "(?<![a-zA-Z0-9_])(?:auto|void|char|short|int|signed|unsigned|long|float|double|bool|wchar_t)(?![a-zA-Z0-9_])",
"name": "storage.type.built-in.primitive.c"
},
{
"match": "\\b(asm|__asm__|enum|struct|union)\\b",
"name": "storage.type.$1.c"
}
]
},
@@ -1670,7 +1866,7 @@
"name": "punctuation.section.parens.end.bracket.round.c"
},
{
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\s*\\()\n(?=\n (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n |\n (?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)",
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas|asm|__asm__|auto|bool|_Bool|char|_Complex|double|enum|float|_Imaginary|int|long|short|signed|struct|typedef|union|unsigned|void)\\s*\\()\n(?=\n (?:[A-Za-z_][A-Za-z0-9_]*+|::)++\\s*\\( # actual name\n |\n (?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\\s*\\(\n)",
"end": "(?<=\\))(?!\\w)|(?<!\\\\)(?=\\s*\\n)",
"name": "meta.function.c",
"patterns": [
@@ -1729,10 +1925,10 @@
]
},
{
"include": "#access"
"include": "#access-method"
},
{
"include": "#libc"
"include": "#access-member"
},
{
"include": "$base"
@@ -1780,13 +1976,16 @@
"include": "#vararg_ellipses"
},
{
"include": "#access"
"include": "#access-method"
},
{
"include": "#access-member"
},
{
"include": "#operators"
},
{
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()",
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()",
"beginCaptures": {
"1": {
"name": "entity.name.function.c"
@@ -1846,7 +2045,8 @@
"include": "#vararg_ellipses"
},
{
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()",
"name": "meta.function.definition.parameters",
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()",
"beginCaptures": {
"1": {
"name": "entity.name.function.c"
@@ -1862,6 +2062,9 @@
}
},
"patterns": [
{
"include": "#probably_a_parameter"
},
{
"include": "#function-innards"
}
@@ -1900,13 +2103,16 @@
"include": "#storage_types"
},
{
"include": "#access"
"include": "#access-method"
},
{
"include": "#access-member"
},
{
"include": "#operators"
},
{
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()",
"begin": "(?x)\n(?!(?:while|for|do|if|else|switch|catch|enumerate|return|typeid|alignof|alignas|sizeof|[cr]?iterate|and|and_eq|bitand|bitor|compl|not|not_eq|or|or_eq|typeid|xor|xor_eq|alignof|alignas)\\s*\\()\n(\n(?:[A-Za-z_][A-Za-z0-9_]*+|::)++ # actual name\n|\n(?:(?<=operator)(?:[-*&<>=+!]+|\\(\\)|\\[\\]))\n)\n\\s*(\\()",
"beginCaptures": {
"1": {
"name": "entity.name.function.c"
File diff suppressed because it is too large Load Diff
@@ -1,7 +1,7 @@
[
{
"c": "#",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c punctuation.definition.directive.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp punctuation.definition.directive.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -12,7 +12,7 @@
},
{
"c": "ifndef",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -23,7 +23,7 @@
},
{
"c": " ",
"t": "source.cpp meta.preprocessor.c",
"t": "source.cpp meta.preprocessor.cpp",
"r": {
"dark_plus": "meta.preprocessor: #569CD6",
"light_plus": "meta.preprocessor: #0000FF",
@@ -34,7 +34,7 @@
},
{
"c": "_UCRT",
"t": "source.cpp meta.preprocessor.c entity.name.function.preprocessor.c",
"t": "source.cpp meta.preprocessor.cpp entity.name.function.preprocessor.cpp",
"r": {
"dark_plus": "entity.name.function: #DCDCAA",
"light_plus": "entity.name.function: #795E26",
@@ -45,7 +45,7 @@
},
{
"c": " ",
"t": "source.cpp meta.preprocessor.macro.c",
"t": "source.cpp meta.preprocessor.macro.cpp",
"r": {
"dark_plus": "meta.preprocessor: #569CD6",
"light_plus": "meta.preprocessor: #0000FF",
@@ -56,7 +56,7 @@
},
{
"c": "#",
"t": "source.cpp meta.preprocessor.macro.c keyword.control.directive.define.c punctuation.definition.directive.c",
"t": "source.cpp meta.preprocessor.macro.cpp keyword.control.directive.define.cpp punctuation.definition.directive.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -67,7 +67,7 @@
},
{
"c": "define",
"t": "source.cpp meta.preprocessor.macro.c keyword.control.directive.define.c",
"t": "source.cpp meta.preprocessor.macro.cpp keyword.control.directive.define.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -78,7 +78,7 @@
},
{
"c": " ",
"t": "source.cpp meta.preprocessor.macro.c",
"t": "source.cpp meta.preprocessor.macro.cpp",
"r": {
"dark_plus": "meta.preprocessor: #569CD6",
"light_plus": "meta.preprocessor: #0000FF",
@@ -89,7 +89,7 @@
},
{
"c": "_UCRT",
"t": "source.cpp meta.preprocessor.macro.c entity.name.function.preprocessor.c",
"t": "source.cpp meta.preprocessor.macro.cpp entity.name.function.preprocessor.cpp",
"r": {
"dark_plus": "entity.name.function: #DCDCAA",
"light_plus": "entity.name.function: #795E26",
@@ -100,7 +100,7 @@
},
{
"c": "#",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c punctuation.definition.directive.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp punctuation.definition.directive.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -111,7 +111,7 @@
},
{
"c": "endif",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -1,7 +1,7 @@
[
{
"c": "#",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c punctuation.definition.directive.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp punctuation.definition.directive.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -12,7 +12,7 @@
},
{
"c": "ifndef",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -23,7 +23,7 @@
},
{
"c": " ",
"t": "source.cpp meta.preprocessor.c",
"t": "source.cpp meta.preprocessor.cpp",
"r": {
"dark_plus": "meta.preprocessor: #569CD6",
"light_plus": "meta.preprocessor: #0000FF",
@@ -34,7 +34,7 @@
},
{
"c": "_UCRT",
"t": "source.cpp meta.preprocessor.c entity.name.function.preprocessor.c",
"t": "source.cpp meta.preprocessor.cpp entity.name.function.preprocessor.cpp",
"r": {
"dark_plus": "entity.name.function: #DCDCAA",
"light_plus": "entity.name.function: #795E26",
@@ -45,7 +45,7 @@
},
{
"c": "#",
"t": "source.cpp meta.preprocessor.macro.c keyword.control.directive.define.c punctuation.definition.directive.c",
"t": "source.cpp meta.preprocessor.macro.cpp keyword.control.directive.define.cpp punctuation.definition.directive.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -56,7 +56,7 @@
},
{
"c": "define",
"t": "source.cpp meta.preprocessor.macro.c keyword.control.directive.define.c",
"t": "source.cpp meta.preprocessor.macro.cpp keyword.control.directive.define.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -67,7 +67,7 @@
},
{
"c": " ",
"t": "source.cpp meta.preprocessor.macro.c",
"t": "source.cpp meta.preprocessor.macro.cpp",
"r": {
"dark_plus": "meta.preprocessor: #569CD6",
"light_plus": "meta.preprocessor: #0000FF",
@@ -78,7 +78,7 @@
},
{
"c": "_UCRT",
"t": "source.cpp meta.preprocessor.macro.c entity.name.function.preprocessor.c",
"t": "source.cpp meta.preprocessor.macro.cpp entity.name.function.preprocessor.cpp",
"r": {
"dark_plus": "entity.name.function: #DCDCAA",
"light_plus": "entity.name.function: #795E26",
@@ -89,7 +89,7 @@
},
{
"c": "#",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c punctuation.definition.directive.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp punctuation.definition.directive.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -100,7 +100,7 @@
},
{
"c": "endif",
"t": "source.cpp meta.preprocessor.c keyword.control.directive.conditional.c",
"t": "source.cpp meta.preprocessor.cpp keyword.control.directive.conditional.cpp",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -9,8 +9,8 @@ import * as fs from 'fs';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
import { languages, window, commands, ExtensionContext, Range, Position, CompletionItem, CompletionItemKind, TextEdit, SnippetString, workspace, TextDocument, SelectionRange, SelectionRangeKind } from 'vscode';
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, Disposable, TextDocumentIdentifier } from 'vscode-languageclient';
import { languages, window, commands, ExtensionContext, Range, Position, CompletionItem, CompletionItemKind, TextEdit, SnippetString, workspace, TextDocument, SelectionRange } from 'vscode';
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, Disposable } from 'vscode-languageclient';
import { getCustomDataPathsInAllWorkspaces, getCustomDataPathsFromAllExtensions } from './customData';
// this method is called when vs code is activated
@@ -83,43 +83,23 @@ export function activate(context: ExtensionContext) {
context.subscriptions.push(languages.registerSelectionRangeProvider(selector, {
async provideSelectionRanges(document: TextDocument, positions: Position[]): Promise<SelectionRange[][]> {
const textDocument = client.code2ProtocolConverter.asTextDocumentIdentifier(document);
return Promise.all(positions.map(async position => {
const rawRanges = await client.sendRequest<Range[]>('$/textDocument/selectionRange', { textDocument, position });
if (Array.isArray(rawRanges)) {
return rawRanges.map(r => {
const rawResult = await client.sendRequest<SelectionRange[][]>('$/textDocument/selectionRanges', { textDocument, positions: positions.map(client.code2ProtocolConverter.asPosition) });
if (Array.isArray(rawResult)) {
return rawResult.map(rawSelectionRanges => {
return rawSelectionRanges.map(selectionRange => {
return {
range: client.protocol2CodeConverter.asRange(r),
kind: SelectionRangeKind.Declaration
range: client.protocol2CodeConverter.asRange(selectionRange.range),
kind: selectionRange.kind
};
});
}
return [];
}));
});
}
return [];
}
}));
});
});
const selectionRangeProvider = {
async provideSelectionRanges(document: TextDocument, positions: Position[]): Promise<SelectionRange[][]> {
const textDocument = TextDocumentIdentifier.create(document.uri.toString());
return Promise.all(positions.map(async position => {
const rawRanges: Range[] = await client.sendRequest('$/textDocument/selectionRange', { textDocument, position });
return rawRanges.map(r => {
const actualRange = new Range(new Position(r.start.line, r.start.character), new Position(r.end.line, r.end.character));
return {
range: actualRange,
kind: SelectionRangeKind.Declaration
};
});
}));
}
};
documentSelector.forEach(selector => {
languages.registerSelectionRangeProvider(selector, selectionRangeProvider);
});
function initCompletionProvider(): Disposable {
const regionCompletionRegExpr = /^(\s*)(\/(\*\s*(#\w*)?)?)?$/;
@@ -726,7 +726,7 @@
]
},
"dependencies": {
"vscode-languageclient": "^5.1.0",
"vscode-languageclient": "^5.2.1",
"vscode-nls": "^4.0.0"
},
"devDependencies": {
@@ -1,5 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
module.exports = {};
@@ -9,7 +9,6 @@
const withDefaults = require('../../shared.webpack.config');
const path = require('path');
var webpack = require('webpack');
module.exports = withDefaults({
context: path.join(__dirname),
@@ -19,12 +18,5 @@ module.exports = withDefaults({
output: {
filename: 'cssServerMain.js',
path: path.join(__dirname, 'dist')
},
plugins: [
new webpack.NormalModuleReplacementPlugin(
/[/\\]vscode-languageserver[/\\]lib[/\\]files\.js/,
require.resolve('./build/filesFillIn')
),
new webpack.IgnorePlugin(/vertx/)
],
}
});
@@ -9,8 +9,8 @@
},
"main": "./out/cssServerMain",
"dependencies": {
"vscode-css-languageservice": "^3.0.13-next.12",
"vscode-languageserver": "^5.1.0"
"vscode-css-languageservice": "^4.0.0-next.3",
"vscode-languageserver": "^5.3.0-next.2"
},
"devDependencies": {
"@types/mocha": "2.2.33",
@@ -335,14 +335,14 @@ connection.onFoldingRanges((params, token) => {
}, null, `Error while computing folding ranges for ${params.textDocument.uri}`, token);
});
connection.onRequest('$/textDocument/selectionRange', async (params, token) => {
connection.onRequest('$/textDocument/selectionRanges', async (params, token) => {
return runSafe(() => {
const document = documents.get(params.textDocument.uri);
const position: Position = params.position;
const positions: Position[] = params.positions;
if (document) {
const stylesheet = stylesheets.get(document);
return getLanguageService(document).getSelectionRanges(document, position, stylesheet);
return getLanguageService(document).getSelectionRanges(document, positions, stylesheet);
}
return Promise.resolve(null);
}, null, `Error while computing selection ranges for ${params.textDocument.uri}`, token);
@@ -229,12 +229,12 @@ supports-color@5.4.0:
dependencies:
has-flag "^3.0.0"
vscode-css-languageservice@^3.0.13-next.12:
version "3.0.13-next.12"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13-next.12.tgz#8d20828e41bc7dcf44cdba4b2e476393780a7793"
integrity sha512-5B3NYU2DBFhbUvMuTg7kBlc9COHyr/pbR1cDzXGFwemQG8W6ERsgn+eftPHFbcug1kwBjPVSoMgtw/czKpboHQ==
vscode-css-languageservice@^4.0.0-next.3:
version "4.0.0-next.3"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.0-next.3.tgz#e9529f3b4ddf95c9a3e5dc2a6d701a38280ffa98"
integrity sha512-/xmbWpIQLw+HZ/3LsaE2drHFSNJbM9mZ8bKR5NUiu2ZUr10WbGxX0j/GDZB3LlMmdSHQGgRQ5hTM/Ic2PuBDRw==
dependencies:
vscode-languageserver-types "^3.13.0"
vscode-languageserver-types "^3.14.0"
vscode-nls "^4.0.0"
vscode-jsonrpc@^4.0.0:
@@ -242,25 +242,25 @@ vscode-jsonrpc@^4.0.0:
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"
integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==
vscode-languageserver-protocol@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0.tgz#710d8e42119bb3affb1416e1e104bd6b4d503595"
integrity sha512-2ZGKwI+P2ovQll2PGAp+2UfJH+FK9eait86VBUdkPd9HRlm8e58aYT9pV/NYanHOcp3pL6x2yTLVCFMcTer0mg==
vscode-languageserver-protocol@3.15.0-next.1:
version "3.15.0-next.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.0-next.1.tgz#1e45e224d7eef8c79b4bed75b9dcb1930d2ab8ed"
integrity sha512-LXF0d9s3vxFBxVQ4aKl/XghdEMAncGt3dh4urIYa9Is43g3MfIQL9fC44YZtP+XXOrI2rpZU8lRNN01U1V6CDg==
dependencies:
vscode-jsonrpc "^4.0.0"
vscode-languageserver-types "3.13.0"
vscode-languageserver-types "3.14.0"
vscode-languageserver-types@3.13.0, vscode-languageserver-types@^3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4"
integrity sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA==
vscode-languageserver-types@3.14.0, vscode-languageserver-types@^3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743"
integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==
vscode-languageserver@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.1.0.tgz#012a28f154cc7a848c443d217894942e4c3eeb39"
integrity sha512-CIsrgx2Y5VHS317g/HwkSTWYBIQmy0DwEyZPmB2pEpVOhYFwVsYpbiJwHIIyLQsQtmRaO4eA2xM8KPjNSdXpBw==
vscode-languageserver@^5.3.0-next.2:
version "5.3.0-next.2"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.3.0-next.2.tgz#31ce4c34d68b517b400ca9e211e43f8d868b8dcc"
integrity sha512-n5onRw9naMrRHp2jnOn+ZwN1n+tTfzftWLPonjp1FWf/iCZWIlnw2TyF/Hn+SDGhLoVtoghmxhwEQaxEAfLHvw==
dependencies:
vscode-languageserver-protocol "3.13.0"
vscode-languageserver-protocol "3.15.0-next.1"
vscode-uri "^1.0.6"
vscode-nls@^4.0.0:
+14 -14
View File
@@ -167,26 +167,26 @@ vscode-jsonrpc@^4.0.0:
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"
integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==
vscode-languageclient@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.1.0.tgz#650ab0dc9fd0daaade058a8471aaff5bc3f9580e"
integrity sha512-Z95Kps8UqD4o17HE3uCkZuvenOsxHVH46dKmaGVpGixEFZigPaVuVxLM/JWeIY9aRenoC0ZD9CK1O7L4jpffKg==
vscode-languageclient@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.2.1.tgz#7cfc83a294c409f58cfa2b910a8cfeaad0397193"
integrity sha512-7jrS/9WnV0ruqPamN1nE7qCxn0phkH5LjSgSp9h6qoJGoeAKzwKz/PF6M+iGA/aklx4GLZg1prddhEPQtuXI1Q==
dependencies:
semver "^5.5.0"
vscode-languageserver-protocol "3.13.0"
vscode-languageserver-protocol "3.14.1"
vscode-languageserver-protocol@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0.tgz#710d8e42119bb3affb1416e1e104bd6b4d503595"
integrity sha512-2ZGKwI+P2ovQll2PGAp+2UfJH+FK9eait86VBUdkPd9HRlm8e58aYT9pV/NYanHOcp3pL6x2yTLVCFMcTer0mg==
vscode-languageserver-protocol@3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz#b8aab6afae2849c84a8983d39a1cf742417afe2f"
integrity sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==
dependencies:
vscode-jsonrpc "^4.0.0"
vscode-languageserver-types "3.13.0"
vscode-languageserver-types "3.14.0"
vscode-languageserver-types@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4"
integrity sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA==
vscode-languageserver-types@3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743"
integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==
vscode-nls@^4.0.0:
version "4.0.0"
+69 -33
View File
@@ -23,41 +23,77 @@
"launch": {
"properties": {
"serverReadyAction": {
"type": "object",
"markdownDescription": "%debug.server.ready.serverReadyAction.description%",
"default": {
"action": "openExternally"
},
"properties": {
"pattern": {
"type": "string",
"markdownDescription": "%debug.server.ready.pattern.description%",
"default": "listening on port ([0-9]+)"
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"markdownDescription": "%debug.server.ready.serverReadyAction.description%",
"default": {
"action": "openExternally"
},
"properties": {
"action": {
"type": "string",
"enum": [
"openExternally"
],
"enumDescriptions": [
"%debug.server.ready.action.openExternally.description%",
"%debug.server.ready.action.debugWithChrome.description%"
],
"markdownDescription": "%debug.server.ready.action.description%",
"default": "openExternally"
},
"pattern": {
"type": "string",
"markdownDescription": "%debug.server.ready.pattern.description%",
"default": "listening on port ([0-9]+)"
},
"uriFormat": {
"type": "string",
"markdownDescription": "%debug.server.ready.uriFormat.description%",
"default": "http://localhost:%s"
}
}
},
"uriFormat": {
"type": "string",
"markdownDescription": "%debug.server.ready.uriFormat.description%",
"default": "http://localhost:%s"
},
"action": {
"type": "string",
"enum": [
"openExternally",
"debugWithChrome"
],
"enumDescriptions": [
"%debug.server.ready.action.openExternally.description%",
"%debug.server.ready.action.debugWithChrome.description%"
],
"markdownDescription": "%debug.server.ready.action.description%",
"default": "openExternally"
},
"webRoot": {
"type": "string",
"markdownDescription": "%debug.server.ready.webRoot.description%",
"default": "${workspaceFolder}"
{
"type": "object",
"additionalProperties": false,
"markdownDescription": "%debug.server.ready.serverReadyAction.description%",
"default": {
"action": "openExternally"
},
"properties": {
"action": {
"type": "string",
"enum": [
"debugWithChrome"
],
"enumDescriptions": [
"%debug.server.ready.action.openExternally.description%",
"%debug.server.ready.action.debugWithChrome.description%"
],
"markdownDescription": "%debug.server.ready.action.description%",
"default": "openExternally"
},
"pattern": {
"type": "string",
"markdownDescription": "%debug.server.ready.pattern.description%",
"default": "listening on port ([0-9]+)"
},
"uriFormat": {
"type": "string",
"markdownDescription": "%debug.server.ready.uriFormat.description%",
"default": "http://localhost:%s"
},
"webRoot": {
"type": "string",
"markdownDescription": "%debug.server.ready.webRoot.description%",
"default": "${workspaceFolder}"
}
}
}
}
]
}
}
}
+126 -60
View File
@@ -7,7 +7,6 @@ import * as vscode from 'vscode';
//import * as nls from 'vscode-nls';
import * as util from 'util';
const trackers = new Set<string>();
const PATTERN = 'listening on.* (https?://\\S+|[0-9]+)'; // matches "listening on port 3000" or "Now listening on: https://localhost:5001"
const URI_FORMAT = 'http://localhost:%s';
@@ -20,13 +19,123 @@ interface ServerReadyAction {
webRoot?: string;
}
class ServerReadyDetector extends vscode.Disposable {
static detectors = new Map<vscode.DebugSession, ServerReadyDetector>();
private hasFired = false;
private regexp: RegExp;
private disposables: vscode.Disposable[] = [];
static start(session: vscode.DebugSession): ServerReadyDetector | undefined {
if (session.configuration.serverReadyAction) {
let detector = ServerReadyDetector.detectors.get(session);
if (!detector) {
detector = new ServerReadyDetector(session);
ServerReadyDetector.detectors.set(session, detector);
}
return detector;
}
return undefined;
}
static stop(session: vscode.DebugSession): void {
let detector = ServerReadyDetector.detectors.get(session);
if (detector) {
ServerReadyDetector.detectors.delete(session);
detector.dispose();
}
}
private constructor(private session: vscode.DebugSession) {
super(() => this.internalDispose());
this.regexp = new RegExp(session.configuration.serverReadyAction.pattern || PATTERN);
}
private internalDispose() {
this.disposables.forEach(d => d.dispose());
this.disposables = [];
}
trackTerminals() {
// TODO: listen only on the Terminal associated with the debug session
vscode.window.terminals.forEach(terminal => {
this.disposables.push(terminal.onDidWriteData(s => {
this.detectPattern(s);
}));
});
}
detectPattern(s: string): void {
if (!this.hasFired) {
const result = this.regexp.exec(s);
if (result && result.length === 2) {
this.openExternalWithString(this.session, result[1]);
this.hasFired = true;
this.internalDispose();
}
}
}
private openExternalWithString(session: vscode.DebugSession, portOrUriString: string) {
if (portOrUriString) {
if (/^[0-9]+$/.test(portOrUriString)) {
const args: ServerReadyAction = session.configuration.serverReadyAction;
portOrUriString = util.format(args.uriFormat || URI_FORMAT, portOrUriString);
}
this.openExternalWithUri(session, portOrUriString);
}
}
private openExternalWithUri(session: vscode.DebugSession, uri: string) {
const args: ServerReadyAction = session.configuration.serverReadyAction;
switch (args.action || 'openExternally') {
case 'openExternally':
vscode.env.openExternal(vscode.Uri.parse(uri));
break;
case 'debugWithChrome':
vscode.debug.startDebugging(session.workspaceFolder, {
type: 'chrome',
name: 'Chrome Debug',
request: 'launch',
url: uri,
webRoot: args.webRoot || WEB_ROOT
});
break;
default:
// not supported
break;
}
}
}
export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(vscode.debug.onDidChangeActiveDebugSession(session => {
if (session && session.configuration.serverReadyAction) {
const detector = ServerReadyDetector.start(session);
if (detector) {
detector.trackTerminals();
}
}
}));
context.subscriptions.push(vscode.debug.onDidTerminateDebugSession(session => {
ServerReadyDetector.stop(session);
}));
const trackers = new Set<string>();
context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('*', {
resolveDebugConfiguration(_folder: vscode.WorkspaceFolder | undefined, debugConfiguration: vscode.DebugConfiguration) {
const args: ServerReadyAction = debugConfiguration.serverReadyAction;
if (debugConfiguration.type && args) {
startTrackerForType(context, debugConfiguration.type);
if (debugConfiguration.type && debugConfiguration.serverReadyAction) {
if (!trackers.has(debugConfiguration.type)) {
trackers.add(debugConfiguration.type);
startTrackerForType(context, debugConfiguration.type);
}
}
return debugConfiguration;
}
@@ -35,63 +144,20 @@ export function activate(context: vscode.ExtensionContext) {
function startTrackerForType(context: vscode.ExtensionContext, type: string) {
if (!trackers.has(type)) {
trackers.add(type);
// scan debug console output for a PORT message
context.subscriptions.push(vscode.debug.registerDebugAdapterTrackerFactory(type, {
createDebugAdapterTracker(session: vscode.DebugSession) {
const args: ServerReadyAction = session.configuration.serverReadyAction;
if (args) {
const regexp = new RegExp(args.pattern || PATTERN);
let hasFired = false;
return {
onDidSendMessage: m => {
if (!hasFired && m.type === 'event' && m.event === 'output' && m.body.output) {
const result = regexp.exec(m.body.output);
if (result && result.length === 2) {
openExternalWithString(session, result[1]);
hasFired = true;
}
}
// scan debug console output for a PORT message
context.subscriptions.push(vscode.debug.registerDebugAdapterTrackerFactory(type, {
createDebugAdapterTracker(session: vscode.DebugSession) {
const detector = ServerReadyDetector.start(session);
if (detector) {
return {
onDidSendMessage: m => {
if (m.type === 'event' && m.event === 'output' && m.body.output) {
detector.detectPattern(m.body.output);
}
};
}
return undefined;
}
};
}
}));
}
}
function openExternalWithString(session: vscode.DebugSession, portOrUriString: string) {
if (portOrUriString) {
if (/^[0-9]+$/.test(portOrUriString)) {
const args: ServerReadyAction = session.configuration.serverReadyAction;
portOrUriString = util.format(args.uriFormat || URI_FORMAT, portOrUriString);
return undefined;
}
openExternalWithUri(session, portOrUriString);
}
}
function openExternalWithUri(session: vscode.DebugSession, uri: string) {
const args: ServerReadyAction = session.configuration.serverReadyAction;
switch (args.action || 'openExternally') {
case 'openExternally':
vscode.env.openExternal(vscode.Uri.parse(uri));
break;
case 'debugWithChrome':
vscode.debug.startDebugging(session.workspaceFolder, {
type: 'chrome',
name: 'Chrome Debug',
request: 'launch',
url: uri,
webRoot: args.webRoot || WEB_ROOT
});
break;
default:
// not supported
break;
}
}));
}
+1
View File
@@ -4,4 +4,5 @@
*--------------------------------------------------------------------------------------------*/
/// <reference path='../../../../src/vs/vscode.d.ts'/>
/// <reference path='../../../../src/vs/vscode.proposed.d.ts'/>
/// <reference types='@types/node'/>
+1
View File
@@ -1150,6 +1150,7 @@
"%config.postCommitCommand.sync%"
],
"markdownDescription": "%config.postCommitCommand%",
"scope": "resource",
"default": "none"
},
"git.showInlineOpenFileAction": {
+8 -4
View File
@@ -649,14 +649,16 @@ export class CommandCenter {
if (!(resource instanceof Resource)) {
// can happen when called from a keybinding
console.log('WHAT');
resource = this.getSCMResource();
}
if (resource) {
const resources = ([resource, ...resourceStates] as Resource[])
.filter(r => r.type !== Status.DELETED && r.type !== Status.INDEX_DELETED);
uris = resources.map(r => r.resourceUri);
uris = ([resource, ...resourceStates] as Resource[])
.filter(r => r.type !== Status.DELETED && r.type !== Status.INDEX_DELETED)
.map(r => r.resourceUri);
} else if (window.activeTextEditor) {
uris = [window.activeTextEditor.document.uri];
}
}
@@ -665,6 +667,7 @@ export class CommandCenter {
}
const activeTextEditor = window.activeTextEditor;
for (const uri of uris) {
const opts: TextDocumentShowOptions = {
preserveFocus,
@@ -2117,6 +2120,7 @@ export class CommandCenter {
uri = uri ? uri : (window.activeTextEditor && window.activeTextEditor.document.uri);
this.outputChannel.appendLine(`git.getSCMResource.uri ${uri && uri.toString()}`);
for (const r of this.model.repositories.map(r => r.root)) {
this.outputChannel.appendLine(`repo root ${r}`);
}
+1 -2
View File
@@ -20,7 +20,6 @@ class GitIgnoreDecorationProvider implements DecorationProvider {
private disposables: Disposable[] = [];
constructor(private model: Model) {
//todo@joh -> events when the ignore status actually changes, not only when the file changes
this.onDidChangeDecorations = fireEvent(anyEvent<any>(
filterEvent(workspace.onDidSaveTextDocument, e => e.fileName.endsWith('.gitignore')),
model.onDidOpenRepository,
@@ -119,7 +118,7 @@ class GitDecorationProvider implements DecorationProvider {
const uris = new Set([...this.decorations.keys()].concat([...newDecorations.keys()]));
this.decorations = newDecorations;
this._onDidChangeDecorations.fire([...uris.values()].map(Uri.parse));
this._onDidChangeDecorations.fire([...uris.values()].map(value => Uri.parse(value, true)));
}
private collectDecorationData(group: GitResourceGroup, bucket: Map<string, DecorationData>): void {
+1 -1
View File
@@ -206,7 +206,7 @@ export class Resource implements SourceControlResourceState {
case Status.INDEX_ADDED:
case Status.INTENT_TO_ADD:
return new ThemeColor('gitDecoration.addedResourceForeground');
case Status.INDEX_RENAMED: // todo@joh - special color?
case Status.INDEX_RENAMED:
case Status.UNTRACKED:
return new ThemeColor('gitDecoration.untrackedResourceForeground');
case Status.IGNORED:
@@ -8,7 +8,7 @@ import * as fs from 'fs';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
import { languages, ExtensionContext, IndentAction, Position, TextDocument, Range, CompletionItem, CompletionItemKind, SnippetString, workspace, SelectionRange, SelectionRangeKind } from 'vscode';
import { languages, ExtensionContext, IndentAction, Position, TextDocument, Range, CompletionItem, CompletionItemKind, SnippetString, workspace, SelectionRange } from 'vscode';
import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, RequestType, TextDocumentPositionParams } from 'vscode-languageclient';
import { EMPTY_ELEMENTS } from './htmlEmptyTagsShared';
import { activateTagClosing } from './tagClosing';
@@ -92,18 +92,18 @@ export function activate(context: ExtensionContext) {
context.subscriptions.push(languages.registerSelectionRangeProvider(selector, {
async provideSelectionRanges(document: TextDocument, positions: Position[]): Promise<SelectionRange[][]> {
const textDocument = client.code2ProtocolConverter.asTextDocumentIdentifier(document);
return Promise.all(positions.map(async position => {
const rawRanges = await client.sendRequest<Range[]>('$/textDocument/selectionRange', { textDocument, position });
if (Array.isArray(rawRanges)) {
return rawRanges.map(r => {
const rawResult = await client.sendRequest<SelectionRange[][]>('$/textDocument/selectionRanges', { textDocument, positions: positions.map(client.code2ProtocolConverter.asPosition) });
if (Array.isArray(rawResult)) {
return rawResult.map(rawSelectionRanges => {
return rawSelectionRanges.map(selectionRange => {
return {
range: client.protocol2CodeConverter.asRange(r),
kind: SelectionRangeKind.Declaration
range: client.protocol2CodeConverter.asRange(selectionRange.range),
kind: selectionRange.kind
};
});
}
return [];
}));
});
}
return [];
}
}));
});
@@ -176,7 +176,7 @@
},
"dependencies": {
"vscode-extension-telemetry": "0.1.1",
"vscode-languageclient": "^5.1.0",
"vscode-languageclient": "^5.2.1",
"vscode-nls": "^4.0.0"
},
"devDependencies": {
@@ -1,5 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
module.exports = {};
@@ -9,7 +9,6 @@
const withDefaults = require('../../shared.webpack.config');
const path = require('path');
var webpack = require('webpack');
module.exports = withDefaults({
context: path.join(__dirname),
@@ -22,12 +21,5 @@ module.exports = withDefaults({
},
externals: {
'typescript': 'commonjs typescript'
},
plugins: [
new webpack.NormalModuleReplacementPlugin(
/[/\\]vscode-languageserver[/\\]lib[/\\]files\.js/,
require.resolve('./build/filesFillIn')
),
new webpack.IgnorePlugin(/vertx/)
],
}
});
@@ -9,10 +9,10 @@
},
"main": "./out/htmlServerMain",
"dependencies": {
"vscode-css-languageservice": "^3.0.13-next.10",
"vscode-html-languageservice": "^2.1.11",
"vscode-languageserver": "^5.1.0",
"vscode-languageserver-types": "^3.13.0",
"vscode-css-languageservice": "^4.0.0-next.3",
"vscode-html-languageservice": "^3.0.0-next.3",
"vscode-languageserver": "^5.3.0-next.2",
"vscode-languageserver-types": "^3.14.0",
"vscode-nls": "^4.0.0",
"vscode-uri": "^1.0.6"
},
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IHTMLDataProvider, HTMLDataProvider } from 'vscode-html-languageservice';
import { IHTMLDataProvider, newHTMLDataProvider } from 'vscode-html-languageservice';
import * as fs from 'fs';
export function getDataProviders(dataPaths?: string[]): IHTMLDataProvider[] {
@@ -18,7 +18,7 @@ export function getDataProviders(dataPaths?: string[]): IHTMLDataProvider[] {
if (fs.existsSync(path)) {
const htmlData = JSON.parse(fs.readFileSync(path, 'utf-8'));
providers.push(new HTMLDataProvider(`customProvider${i}`, htmlData));
providers.push(newHTMLDataProvider(`customProvider${i}`, htmlData));
}
} catch (err) {
console.log(`Failed to load tag from ${path}`);
@@ -455,15 +455,15 @@ connection.onFoldingRanges((params, token) => {
}, null, `Error while computing folding regions for ${params.textDocument.uri}`, token);
});
connection.onRequest('$/textDocument/selectionRange', async (params, token) => {
connection.onRequest('$/textDocument/selectionRanges', async (params, token) => {
return runSafe(() => {
const document = documents.get(params.textDocument.uri);
const position: Position = params.position;
const positions: Position[] = params.positions;
if (document) {
const htmlMode = languageModes.getMode('html');
if (htmlMode && htmlMode.doSelection) {
return htmlMode.doSelection(document, position);
if (htmlMode && htmlMode.getSelectionRanges) {
return htmlMode.getSelectionRanges(document, positions);
}
}
return Promise.resolve(null);
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { getLanguageModelCache } from '../languageModelCache';
import { LanguageService as HTMLLanguageService, HTMLDocument, DocumentContext, FormattingOptions, HTMLFormatConfiguration } from 'vscode-html-languageservice';
import { LanguageService as HTMLLanguageService, HTMLDocument, DocumentContext, FormattingOptions, HTMLFormatConfiguration, SelectionRange } from 'vscode-html-languageservice';
import { TextDocument, Position, Range, CompletionItem, FoldingRange } from 'vscode-languageserver-types';
import { LanguageMode, Workspace } from './languageModes';
import { getPathCompletionParticipant } from './pathCompletion';
@@ -15,8 +15,8 @@ export function getHTMLMode(htmlLanguageService: HTMLLanguageService, workspace:
getId() {
return 'html';
},
doSelection(document: TextDocument, position: Position): Range[] {
return htmlLanguageService.getSelectionRanges(document, position);
getSelectionRanges(document: TextDocument, positions: Position[]): SelectionRange[][] {
return htmlLanguageService.getSelectionRanges(document, positions);
},
doComplete(document: TextDocument, position: Position, settings = workspace.settings) {
let options = settings && settings.html && settings.html.suggest;
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { getLanguageService as getHTMLLanguageService, DocumentContext, IHTMLDataProvider } from 'vscode-html-languageservice';
import { getLanguageService as getHTMLLanguageService, DocumentContext, IHTMLDataProvider, SelectionRange } from 'vscode-html-languageservice';
import {
CompletionItem, Location, SignatureHelp, Definition, TextEdit, TextDocument, Diagnostic, DocumentLink, Range,
Hover, DocumentHighlight, CompletionList, Position, FormattingOptions, SymbolInformation, FoldingRange
@@ -31,7 +31,7 @@ export interface Workspace {
export interface LanguageMode {
getId(): string;
doSelection?: (document: TextDocument, position: Position) => Range[];
getSelectionRanges?: (document: TextDocument, positions: Position[]) => SelectionRange[][];
doValidation?: (document: TextDocument, settings?: Settings) => Diagnostic[];
doComplete?: (document: TextDocument, position: Position, settings?: Settings) => CompletionList;
doResolve?: (document: TextDocument, item: CompletionItem) => CompletionItem;
@@ -229,20 +229,20 @@ supports-color@5.4.0:
dependencies:
has-flag "^3.0.0"
vscode-css-languageservice@^3.0.13-next.10:
version "3.0.13-next.10"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13-next.10.tgz#f5822e832b06e1e91ec96c528bab83bb07251c35"
integrity sha512-zKwzo3GVhrAllYDM4afL8q1XCHixsI8tP3SyLrWGzp0Nc9P+bbjKQeC26VcaOb0dtkgfpB/vfBPf+4yOs4s/pw==
vscode-css-languageservice@^4.0.0-next.3:
version "4.0.0-next.3"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-4.0.0-next.3.tgz#e9529f3b4ddf95c9a3e5dc2a6d701a38280ffa98"
integrity sha512-/xmbWpIQLw+HZ/3LsaE2drHFSNJbM9mZ8bKR5NUiu2ZUr10WbGxX0j/GDZB3LlMmdSHQGgRQ5hTM/Ic2PuBDRw==
dependencies:
vscode-languageserver-types "^3.13.0"
vscode-languageserver-types "^3.14.0"
vscode-nls "^4.0.0"
vscode-html-languageservice@^2.1.11:
version "2.1.11"
resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.1.11.tgz#56fc25cf64793a9eaef2f571a0ecd591eaed26c1"
integrity sha512-wfENgWb7JjEhwsRHXhairumuxAGnFcMUwIut5P7SxGwNrJMDXkgfs6OUBZycQpbaXTkMEvwsKNKFqUQppW7P4g==
vscode-html-languageservice@^3.0.0-next.3:
version "3.0.0-next.3"
resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-3.0.0-next.3.tgz#a0230c57375deb21fadbfa0210a770ca6e06d425"
integrity sha512-vPdZ17JSr8kAAnjNjdiH4jYySaJrXqnbT3OhnGXqc51R3jnwMXV/Jf72ctXptbpiUQM3ifHnfUcxwO+34tw6Lw==
dependencies:
vscode-languageserver-types "^3.13.0"
vscode-languageserver-types "^3.14.0"
vscode-nls "^4.0.0"
vscode-uri "^1.0.6"
@@ -251,25 +251,25 @@ vscode-jsonrpc@^4.0.0:
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"
integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==
vscode-languageserver-protocol@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0.tgz#710d8e42119bb3affb1416e1e104bd6b4d503595"
integrity sha512-2ZGKwI+P2ovQll2PGAp+2UfJH+FK9eait86VBUdkPd9HRlm8e58aYT9pV/NYanHOcp3pL6x2yTLVCFMcTer0mg==
vscode-languageserver-protocol@3.15.0-next.1:
version "3.15.0-next.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.0-next.1.tgz#1e45e224d7eef8c79b4bed75b9dcb1930d2ab8ed"
integrity sha512-LXF0d9s3vxFBxVQ4aKl/XghdEMAncGt3dh4urIYa9Is43g3MfIQL9fC44YZtP+XXOrI2rpZU8lRNN01U1V6CDg==
dependencies:
vscode-jsonrpc "^4.0.0"
vscode-languageserver-types "3.13.0"
vscode-languageserver-types "3.14.0"
vscode-languageserver-types@3.13.0, vscode-languageserver-types@^3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4"
integrity sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA==
vscode-languageserver-types@3.14.0, vscode-languageserver-types@^3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743"
integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==
vscode-languageserver@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.1.0.tgz#012a28f154cc7a848c443d217894942e4c3eeb39"
integrity sha512-CIsrgx2Y5VHS317g/HwkSTWYBIQmy0DwEyZPmB2pEpVOhYFwVsYpbiJwHIIyLQsQtmRaO4eA2xM8KPjNSdXpBw==
vscode-languageserver@^5.3.0-next.2:
version "5.3.0-next.2"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.3.0-next.2.tgz#31ce4c34d68b517b400ca9e211e43f8d868b8dcc"
integrity sha512-n5onRw9naMrRHp2jnOn+ZwN1n+tTfzftWLPonjp1FWf/iCZWIlnw2TyF/Hn+SDGhLoVtoghmxhwEQaxEAfLHvw==
dependencies:
vscode-languageserver-protocol "3.13.0"
vscode-languageserver-protocol "3.15.0-next.1"
vscode-uri "^1.0.6"
vscode-nls@^4.0.0:
+14 -14
View File
@@ -45,26 +45,26 @@ vscode-jsonrpc@^4.0.0:
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"
integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==
vscode-languageclient@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.1.0.tgz#650ab0dc9fd0daaade058a8471aaff5bc3f9580e"
integrity sha512-Z95Kps8UqD4o17HE3uCkZuvenOsxHVH46dKmaGVpGixEFZigPaVuVxLM/JWeIY9aRenoC0ZD9CK1O7L4jpffKg==
vscode-languageclient@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.2.1.tgz#7cfc83a294c409f58cfa2b910a8cfeaad0397193"
integrity sha512-7jrS/9WnV0ruqPamN1nE7qCxn0phkH5LjSgSp9h6qoJGoeAKzwKz/PF6M+iGA/aklx4GLZg1prddhEPQtuXI1Q==
dependencies:
semver "^5.5.0"
vscode-languageserver-protocol "3.13.0"
vscode-languageserver-protocol "3.14.1"
vscode-languageserver-protocol@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0.tgz#710d8e42119bb3affb1416e1e104bd6b4d503595"
integrity sha512-2ZGKwI+P2ovQll2PGAp+2UfJH+FK9eait86VBUdkPd9HRlm8e58aYT9pV/NYanHOcp3pL6x2yTLVCFMcTer0mg==
vscode-languageserver-protocol@3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz#b8aab6afae2849c84a8983d39a1cf742417afe2f"
integrity sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==
dependencies:
vscode-jsonrpc "^4.0.0"
vscode-languageserver-types "3.13.0"
vscode-languageserver-types "3.14.0"
vscode-languageserver-types@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4"
integrity sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA==
vscode-languageserver-types@3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743"
integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==
vscode-nls@^4.0.0:
version "4.0.0"
@@ -6,6 +6,8 @@
import * as path from 'path';
import * as fs from 'fs';
import * as nls from 'vscode-nls';
import { xhr, XHRResponse, getErrorStatusDescription } from 'request-light';
const localize = nls.loadMessageBundle();
import { workspace, window, languages, commands, ExtensionContext, extensions, Uri, LanguageConfiguration, Diagnostic, StatusBarAlignment, TextEditor, TextDocument, Position, SelectionRange } from 'vscode';
@@ -93,6 +95,9 @@ export function activate(context: ExtensionContext) {
let clientOptions: LanguageClientOptions = {
// Register the server for json documents
documentSelector,
initializationOptions: {
handledSchemaProtocols: ['file'] // language server only loads file-URI. Fetching schemas with other protocols ('http'...) are made on the client.
},
synchronize: {
// Synchronize the setting section 'json' to the server
configurationSection: ['json', 'http'],
@@ -138,11 +143,20 @@ export function activate(context: ExtensionContext) {
// handle content request
client.onRequest(VSCodeContentRequest.type, (uriPath: string) => {
let uri = Uri.parse(uriPath);
return workspace.openTextDocument(uri).then(doc => {
return doc.getText();
}, error => {
return Promise.reject(error);
});
if (uri.scheme !== 'http' && uri.scheme !== 'https') {
return workspace.openTextDocument(uri).then(doc => {
return doc.getText();
}, error => {
return Promise.reject(error);
});
} else {
const headers = { 'Accept-Encoding': 'gzip, deflate' };
return xhr({ url: uriPath, followRedirects: 5, headers }).then(response => {
return response.responseText;
}, (error: XHRResponse) => {
return Promise.reject(error.responseText || getErrorStatusDescription(error.status) || error.toString());
});
}
});
let handleContentChange = (uri: Uri) => {
@@ -9,6 +9,7 @@
const withDefaults = require('../shared.webpack.config');
const path = require('path');
var webpack = require('webpack');
module.exports = withDefaults({
context: path.join(__dirname, 'client'),
@@ -18,5 +19,9 @@ module.exports = withDefaults({
output: {
filename: 'jsonMain.js',
path: path.join(__dirname, 'client', 'dist')
}
},
plugins: [
new webpack.IgnorePlugin(/vertx/) // request-light dependendeny
]
});
@@ -102,10 +102,11 @@
},
"dependencies": {
"vscode-extension-telemetry": "0.1.1",
"vscode-languageclient": "^5.1.0",
"vscode-nls": "^4.0.0"
"vscode-languageclient": "^5.2.1",
"vscode-nls": "^4.0.0",
"request-light": "^0.2.4"
},
"devDependencies": {
"@types/node": "^10.12.21"
}
}
}
@@ -1,5 +0,0 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
module.exports = {};
@@ -21,10 +21,6 @@ module.exports = withDefaults({
path: path.join(__dirname, 'dist')
},
plugins: [
new webpack.NormalModuleReplacementPlugin(
/[/\\]vscode-languageserver[/\\]lib[/\\]files\.js/,
require.resolve('./build/filesFillIn')
),
new webpack.IgnorePlugin(/vertx/)
],
new webpack.IgnorePlugin(/vertx/) // request-light dependendeny
]
});
@@ -12,10 +12,10 @@
},
"main": "./out/jsonServerMain",
"dependencies": {
"jsonc-parser": "^2.0.2",
"jsonc-parser": "^2.0.3",
"request-light": "^0.2.4",
"vscode-json-languageservice": "^3.3.0-next.4",
"vscode-languageserver": "^5.1.0",
"vscode-json-languageservice": "^3.3.0-next.6",
"vscode-languageserver": "^5.3.0-next.2",
"vscode-nls": "^4.0.0",
"vscode-uri": "^1.0.6"
},
@@ -54,10 +54,10 @@ https-proxy-agent@^2.2.1:
agent-base "^4.1.0"
debug "^3.1.0"
jsonc-parser@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.0.2.tgz#42fcf56d70852a043fadafde51ddb4a85649978d"
integrity sha512-TSU435K5tEKh3g7bam1AFf+uZrISheoDsLlpmAo6wWZYqjsnd09lHYK1Qo+moK4Ikifev1Gdpa69g4NELKnCrQ==
jsonc-parser@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.0.3.tgz#6d4199ccab7f21ff5d2a4225050c54e981fb21a2"
integrity sha512-WJi9y9ABL01C8CxTKxRRQkkSpY/x2bo4Gy0WuiZGrInxQqgxQpvkBCLNcDYcHOSdhx4ODgbFcgAvfL49C+PHgQ==
ms@2.0.0:
version "2.0.0"
@@ -73,13 +73,13 @@ request-light@^0.2.4:
https-proxy-agent "^2.2.1"
vscode-nls "^4.0.0"
vscode-json-languageservice@^3.3.0-next.4:
version "3.3.0-next.4"
resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.3.0-next.4.tgz#e13b2fd5665b754ee94608a506407cd12b63d64d"
integrity sha512-tD8w2SvwERj3392q34xXKA/i76WWK7YwmP9eoLdKvdfMRwXB7a0MYWPoYZD4HycwvavAlbJ2x18vP4G7+BFA+A==
vscode-json-languageservice@^3.3.0-next.6:
version "3.3.0-next.6"
resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.3.0-next.6.tgz#711f121b44ba443a89f3fb01a01c611f2547079f"
integrity sha512-i1tyLiodWc7y6lR9C4cat+OUSptj8Duk1Ybm1FaMzhNfOTFttSiwrBw1otNb+QwI65VEj7EAEBQHRLeQOWznMw==
dependencies:
jsonc-parser "^2.0.2"
vscode-languageserver-types "^3.13.0"
jsonc-parser "^2.0.3"
vscode-languageserver-types "^3.14.0"
vscode-nls "^4.0.0"
vscode-uri "^1.0.6"
@@ -88,25 +88,25 @@ vscode-jsonrpc@^4.0.0:
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"
integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==
vscode-languageserver-protocol@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0.tgz#710d8e42119bb3affb1416e1e104bd6b4d503595"
integrity sha512-2ZGKwI+P2ovQll2PGAp+2UfJH+FK9eait86VBUdkPd9HRlm8e58aYT9pV/NYanHOcp3pL6x2yTLVCFMcTer0mg==
vscode-languageserver-protocol@3.15.0-next.1:
version "3.15.0-next.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.0-next.1.tgz#1e45e224d7eef8c79b4bed75b9dcb1930d2ab8ed"
integrity sha512-LXF0d9s3vxFBxVQ4aKl/XghdEMAncGt3dh4urIYa9Is43g3MfIQL9fC44YZtP+XXOrI2rpZU8lRNN01U1V6CDg==
dependencies:
vscode-jsonrpc "^4.0.0"
vscode-languageserver-types "3.13.0"
vscode-languageserver-types "3.14.0"
vscode-languageserver-types@3.13.0, vscode-languageserver-types@^3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4"
integrity sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA==
vscode-languageserver-types@3.14.0, vscode-languageserver-types@^3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743"
integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==
vscode-languageserver@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.1.0.tgz#012a28f154cc7a848c443d217894942e4c3eeb39"
integrity sha512-CIsrgx2Y5VHS317g/HwkSTWYBIQmy0DwEyZPmB2pEpVOhYFwVsYpbiJwHIIyLQsQtmRaO4eA2xM8KPjNSdXpBw==
vscode-languageserver@^5.3.0-next.2:
version "5.3.0-next.2"
resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.3.0-next.2.tgz#31ce4c34d68b517b400ca9e211e43f8d868b8dcc"
integrity sha512-n5onRw9naMrRHp2jnOn+ZwN1n+tTfzftWLPonjp1FWf/iCZWIlnw2TyF/Hn+SDGhLoVtoghmxhwEQaxEAfLHvw==
dependencies:
vscode-languageserver-protocol "3.13.0"
vscode-languageserver-protocol "3.15.0-next.1"
vscode-uri "^1.0.6"
vscode-nls@^4.0.0:
+82 -14
View File
@@ -7,6 +7,13 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.21.tgz#7e8a0c34cf29f4e17a36e9bd0ea72d45ba03908e"
integrity sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==
agent-base@4, agent-base@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
dependencies:
es6-promisify "^5.0.0"
applicationinsights@1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.0.8.tgz#db6e3d983cf9f9405fe1ee5ba30ac6e1914537b5"
@@ -16,6 +23,20 @@ applicationinsights@1.0.8:
diagnostic-channel-publishers "0.2.1"
zone.js "0.7.6"
debug@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
debug@^3.1.0:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
dependencies:
ms "^2.1.1"
diagnostic-channel-publishers@0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
@@ -28,6 +49,53 @@ diagnostic-channel@0.2.0:
dependencies:
semver "^5.3.0"
es6-promise@^4.0.3:
version "4.2.6"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f"
integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
dependencies:
es6-promise "^4.0.3"
http-proxy-agent@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
dependencies:
agent-base "4"
debug "3.1.0"
https-proxy-agent@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
dependencies:
agent-base "^4.1.0"
debug "^3.1.0"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
request-light@^0.2.4:
version "0.2.4"
resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.2.4.tgz#3cea29c126682e6bcadf7915353322eeba01a755"
integrity sha512-pM9Fq5jRnSb+82V7M97rp8FE9/YNeP2L9eckB4Szd7lyeclSIx02aIpPO/6e4m6Dy31+FBN/zkFMTd2HkNO3ow==
dependencies:
http-proxy-agent "^2.1.0"
https-proxy-agent "^2.2.1"
vscode-nls "^4.0.0"
semver@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
@@ -50,26 +118,26 @@ vscode-jsonrpc@^4.0.0:
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9"
integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==
vscode-languageclient@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.1.0.tgz#650ab0dc9fd0daaade058a8471aaff5bc3f9580e"
integrity sha512-Z95Kps8UqD4o17HE3uCkZuvenOsxHVH46dKmaGVpGixEFZigPaVuVxLM/JWeIY9aRenoC0ZD9CK1O7L4jpffKg==
vscode-languageclient@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-5.2.1.tgz#7cfc83a294c409f58cfa2b910a8cfeaad0397193"
integrity sha512-7jrS/9WnV0ruqPamN1nE7qCxn0phkH5LjSgSp9h6qoJGoeAKzwKz/PF6M+iGA/aklx4GLZg1prddhEPQtuXI1Q==
dependencies:
semver "^5.5.0"
vscode-languageserver-protocol "3.13.0"
vscode-languageserver-protocol "3.14.1"
vscode-languageserver-protocol@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.13.0.tgz#710d8e42119bb3affb1416e1e104bd6b4d503595"
integrity sha512-2ZGKwI+P2ovQll2PGAp+2UfJH+FK9eait86VBUdkPd9HRlm8e58aYT9pV/NYanHOcp3pL6x2yTLVCFMcTer0mg==
vscode-languageserver-protocol@3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz#b8aab6afae2849c84a8983d39a1cf742417afe2f"
integrity sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==
dependencies:
vscode-jsonrpc "^4.0.0"
vscode-languageserver-types "3.13.0"
vscode-languageserver-types "3.14.0"
vscode-languageserver-types@3.13.0:
version "3.13.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4"
integrity sha512-BnJIxS+5+8UWiNKCP7W3g9FlE7fErFw0ofP5BXJe7c2tl0VeWh+nNHFbwAS2vmVC4a5kYxHBjRy0UeOtziemVA==
vscode-languageserver-types@3.14.0:
version "3.14.0"
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743"
integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==
vscode-nls@^4.0.0:
version "4.0.0"
@@ -153,6 +153,14 @@
{
"command": "markdown.preview.toggleLock",
"when": "markdownPreviewFocus"
},
{
"command": "markdown.preview.refresh",
"when": "editorLangId == markdown"
},
{
"command": "markdown.preview.refresh",
"when": "markdownPreviewFocus"
}
]
},
@@ -315,4 +323,4 @@
"webpack": "^4.1.0",
"webpack-cli": "^2.0.10"
}
}
}
@@ -298,7 +298,7 @@
},
{
"c": "void",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.function.objc meta.return-type.objc storage.type.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.function.objc meta.return-type.objc storage.type.built-in.primitive.c",
"r": {
"dark_plus": "storage.type: #569CD6",
"light_plus": "storage.type: #0000FF",
@@ -639,7 +639,7 @@
},
{
"c": "(",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.begin.bracket.round.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block punctuation.section.parens.begin.bracket.round.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -650,7 +650,7 @@
},
{
"c": "NSDocumentDirectory",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c support.constant.cocoa",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block support.constant.cocoa",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -661,7 +661,7 @@
},
{
"c": ",",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.delimiter.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block punctuation.separator.delimiter.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -672,7 +672,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -683,7 +683,7 @@
},
{
"c": "NSUserDomainMask",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c support.constant.cocoa",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block support.constant.cocoa",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -694,7 +694,7 @@
},
{
"c": ",",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.delimiter.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block punctuation.separator.delimiter.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -705,7 +705,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -716,7 +716,7 @@
},
{
"c": "true",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c constant.language.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block constant.language.c",
"r": {
"dark_plus": "constant.language: #569CD6",
"light_plus": "constant.language: #0000FF",
@@ -727,7 +727,7 @@
},
{
"c": ")",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.end.bracket.round.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.block punctuation.section.parens.end.bracket.round.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -738,7 +738,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -749,7 +749,7 @@
},
{
"c": "0",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c constant.numeric.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c constant.numeric.c",
"r": {
"dark_plus": "constant.numeric: #B5CEA8",
"light_plus": "constant.numeric: #09885A",
@@ -760,7 +760,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -848,7 +848,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -859,7 +859,7 @@
},
{
"c": "NSOpenPanel",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c support.class.cocoa",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c support.class.cocoa",
"r": {
"dark_plus": "support.class: #4EC9B0",
"light_plus": "support.class: #267F99",
@@ -870,7 +870,7 @@
},
{
"c": " openPanel",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -881,7 +881,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -914,7 +914,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -925,7 +925,7 @@
},
{
"c": "panel setAllowedFileTypes:",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -935,8 +935,19 @@
}
},
{
"c": "[[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -947,7 +958,7 @@
},
{
"c": "NSArray",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c support.class.cocoa",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c support.class.cocoa",
"r": {
"dark_plus": "support.class: #4EC9B0",
"light_plus": "support.class: #267F99",
@@ -958,7 +969,7 @@
},
{
"c": " alloc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -969,7 +980,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -980,7 +991,7 @@
},
{
"c": " initWithObjects:",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -991,7 +1002,7 @@
},
{
"c": "@\"",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc punctuation.definition.string.begin.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc punctuation.definition.string.begin.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1002,7 +1013,7 @@
},
{
"c": "ipa",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1013,7 +1024,7 @@
},
{
"c": "\"",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc punctuation.definition.string.end.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc punctuation.definition.string.end.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1024,7 +1035,7 @@
},
{
"c": ",",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.delimiter.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.separator.delimiter.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1035,7 +1046,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1046,7 +1057,7 @@
},
{
"c": "@\"",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc punctuation.definition.string.begin.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc punctuation.definition.string.begin.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1057,7 +1068,7 @@
},
{
"c": "xcarchive",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1068,7 +1079,7 @@
},
{
"c": "\"",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc punctuation.definition.string.end.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc punctuation.definition.string.end.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1079,7 +1090,7 @@
},
{
"c": ",",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.delimiter.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.separator.delimiter.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1090,7 +1101,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1101,7 +1112,7 @@
},
{
"c": "@\"",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc punctuation.definition.string.begin.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc punctuation.definition.string.begin.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1112,7 +1123,7 @@
},
{
"c": "app",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1123,7 +1134,7 @@
},
{
"c": "\"",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c string.quoted.double.objc punctuation.definition.string.end.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c string.quoted.double.objc punctuation.definition.string.end.objc",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1134,7 +1145,7 @@
},
{
"c": ",",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.delimiter.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.separator.delimiter.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1145,7 +1156,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1156,7 +1167,7 @@
},
{
"c": "nil",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c constant.language.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c constant.language.objc",
"r": {
"dark_plus": "constant.language: #569CD6",
"light_plus": "constant.language: #0000FF",
@@ -1166,8 +1177,19 @@
}
},
{
"c": "]]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1200,7 +1222,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1211,7 +1233,7 @@
},
{
"c": "panel beginWithCompletionHandler:",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1222,7 +1244,7 @@
},
{
"c": "^",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c keyword.operator.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c keyword.operator.c",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -1233,7 +1255,7 @@
},
{
"c": "(",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.begin.bracket.round.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.begin.bracket.round.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1244,7 +1266,7 @@
},
{
"c": "NSInteger",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c support.type.cocoa.leopard",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c support.type.cocoa.leopard",
"r": {
"dark_plus": "support.type: #4EC9B0",
"light_plus": "support.type: #267F99",
@@ -1255,7 +1277,7 @@
},
{
"c": " result",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1266,7 +1288,7 @@
},
{
"c": ")",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.end.bracket.round.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.end.bracket.round.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1277,7 +1299,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1288,7 +1310,7 @@
},
{
"c": "{",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.block.begin.bracket.curly.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.block.begin.bracket.curly.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1299,7 +1321,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1310,7 +1332,7 @@
},
{
"c": "if",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c keyword.control.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c keyword.control.c",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -1321,7 +1343,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1332,7 +1354,7 @@
},
{
"c": "(",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.begin.bracket.round.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.block punctuation.section.parens.begin.bracket.round.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1343,7 +1365,7 @@
},
{
"c": "result ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.block",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1354,7 +1376,7 @@
},
{
"c": "==",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c keyword.operator.comparison.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.block keyword.operator.comparison.c",
"r": {
"dark_plus": "keyword.operator: #D4D4D4",
"light_plus": "keyword.operator: #000000",
@@ -1365,7 +1387,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.block",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1376,7 +1398,7 @@
},
{
"c": "NSFileHandlingPanelOKButton",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c support.constant.cocoa",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.block support.constant.cocoa",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1387,7 +1409,7 @@
},
{
"c": ")",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.parens.end.bracket.round.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.parens.block punctuation.section.parens.end.bracket.round.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1398,7 +1420,7 @@
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1409,7 +1431,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1420,29 +1442,29 @@
},
{
"c": "self",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c variable.object.access.c variable.object.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
"hc_black": "variable: #9CDCFE"
}
},
{
"c": ".",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.dot-access.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c variable.object.access.c punctuation.separator.dot-access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
"hc_black": "variable: #9CDCFE"
}
},
{
"c": "inputTextField",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c variable.other.member.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c variable.object.access.c variable.other.member.c",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
@@ -1453,7 +1475,7 @@
},
{
"c": " setStringValue:",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1464,7 +1486,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1475,29 +1497,29 @@
},
{
"c": "panel",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c variable.object.access.c variable.object.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
"hc_black": "variable: #9CDCFE"
}
},
{
"c": ".",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.dot-access.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c variable.object.access.c punctuation.separator.dot-access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
"hc_black": "variable: #9CDCFE"
}
},
{
"c": "URL",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c variable.other.member.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c variable.object.access.c variable.other.member.c",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
@@ -1508,51 +1530,7 @@
},
{
"c": " path",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "]]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": ";",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.terminator.statement.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "}",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.section.block.end.bracket.curly.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1563,7 +1541,62 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": ";",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.terminator.statement.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "}",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.section.block.end.bracket.curly.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1651,7 +1684,7 @@
},
{
"c": "int",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c storage.type.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c storage.type.built-in.primitive.c",
"r": {
"dark_plus": "storage.type: #569CD6",
"light_plus": "storage.type: #0000FF",
@@ -1728,7 +1761,7 @@
},
{
"c": "float",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c storage.type.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c storage.type.built-in.primitive.c",
"r": {
"dark_plus": "storage.type: #569CD6",
"light_plus": "storage.type: #0000FF",
@@ -2299,8 +2332,19 @@
}
},
{
"c": "[[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
}
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2311,7 +2355,7 @@
},
{
"c": "UITapGestureRecognizer alloc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2322,7 +2366,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2333,7 +2377,7 @@
},
{
"c": " initWithTarget:self action:",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2344,7 +2388,7 @@
},
{
"c": "@",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.selector.objc storage.type.objc punctuation.definition.storage.type.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.selector.objc storage.type.objc punctuation.definition.storage.type.objc",
"r": {
"dark_plus": "storage.type: #569CD6",
"light_plus": "storage.type: #0000FF",
@@ -2355,7 +2399,7 @@
},
{
"c": "selector",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.selector.objc storage.type.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.selector.objc storage.type.objc",
"r": {
"dark_plus": "storage.type: #569CD6",
"light_plus": "storage.type: #0000FF",
@@ -2366,7 +2410,7 @@
},
{
"c": "(",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.selector.objc punctuation.definition.storage.type.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.selector.objc punctuation.definition.storage.type.objc",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2377,7 +2421,7 @@
},
{
"c": "handleTap:",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.selector.objc meta.selector.method-name.objc support.function.any-method.name-of-parameter.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.selector.objc meta.selector.method-name.objc support.function.any-method.name-of-parameter.objc",
"r": {
"dark_plus": "support.function: #DCDCAA",
"light_plus": "support.function: #795E26",
@@ -2388,7 +2432,7 @@
},
{
"c": ")",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.selector.objc punctuation.definition.storage.type.objc",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c meta.selector.objc punctuation.definition.storage.type.objc",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2399,7 +2443,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2498,7 +2542,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2509,7 +2553,7 @@
},
{
"c": "NSMutableArray",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c support.class.cocoa",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c support.class.cocoa",
"r": {
"dark_plus": "support.class: #4EC9B0",
"light_plus": "support.class: #267F99",
@@ -2520,7 +2564,7 @@
},
{
"c": " array",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2531,7 +2575,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2564,7 +2608,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2575,7 +2619,7 @@
},
{
"c": "gestureRecognizers addObject:tapGesture",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2586,7 +2630,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2619,7 +2663,7 @@
},
{
"c": "[",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.begin.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.begin.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2629,8 +2673,8 @@
}
},
{
"c": "gestureRecognizers addObjectsFromArray:scnView",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"c": "gestureRecognizers addObjectsFromArray:",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2639,20 +2683,31 @@
"hc_black": "default: #FFFFFF"
}
},
{
"c": "scnView",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c variable.object.access.c variable.object.c",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "variable: #9CDCFE"
}
},
{
"c": ".",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.dot-access.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c variable.object.access.c punctuation.separator.dot-access.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
"hc_black": "variable: #9CDCFE"
}
},
{
"c": "gestureRecognizers",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c variable.other.member.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c variable.object.access.c variable.other.member.c",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
@@ -2663,7 +2718,7 @@
},
{
"c": "]",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.definition.end.bracket.square.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c meta.bracket.square.access.c punctuation.definition.end.bracket.square.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2684,7 +2739,7 @@
}
},
{
"c": " scnView",
"c": " ",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c",
"r": {
"dark_plus": "default: #D4D4D4",
@@ -2695,19 +2750,30 @@
}
},
{
"c": ".",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c punctuation.separator.dot-access.c",
"c": "scnView",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c variable.object.access.c variable.object.c",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "default: #FFFFFF"
"hc_black": "variable: #9CDCFE"
}
},
{
"c": ".",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c variable.object.access.c punctuation.separator.dot-access.c",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
"hc_black": "variable: #9CDCFE"
}
},
{
"c": "gestureRecognizers",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c variable.other.member.c",
"t": "source.objc meta.implementation.objc meta.scope.implementation.objc meta.function-with-body.objc meta.block.c variable.object.access.c variable.other.member.c",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
+1 -1
View File
@@ -3,7 +3,7 @@
"version": "0.0.1",
"description": "Dependencies shared by all extensions",
"dependencies": {
"typescript": "3.3.3333"
"typescript": "3.3.3"
},
"scripts": {
"postinstall": "node ./postinstall"
+1 -1
View File
@@ -10,7 +10,7 @@
"contributes": {
"languages": [{
"id": "python",
"extensions": [ ".py", ".rpy", ".pyw", ".cpy", ".gyp", ".gypi", ".snakefile", ".smk", ".pyi"],
"extensions": [ ".py", ".rpy", ".pyw", ".cpy", ".gyp", ".gypi", ".snakefile", ".smk", ".pyi", ".ipy"],
"aliases": [ "Python", "py" ],
"firstLine": "^#!\\s*/.*\\bpython[0-9.-]*\\b",
"configuration": "./language-configuration.json"
-2
View File
@@ -51,8 +51,6 @@ module.exports = function withDefaults(/**@type WebpackConfig*/extConfig) {
},
externals: {
'vscode': 'commonjs vscode', // ignored because it doesn't exist
// "vscode-extension-telemetry": 'commonjs vscode-extension-telemetry', // commonly used
},
output: {
// all output goes into `dist`.
@@ -13,11 +13,17 @@ import * as languageModeIds from '../utils/languageModeIds';
import { ResourceMap } from '../utils/resourceMap';
import * as typeConverters from '../utils/typeConverters';
enum BufferKind {
const enum BufferKind {
TypeScript = 1,
JavaScript = 2,
}
const enum BufferState {
Initial = 1,
Open = 2,
Closed = 2,
}
function mode2ScriptKind(mode: string): 'TS' | 'TSX' | 'JS' | 'JSX' | undefined {
switch (mode) {
case languageModeIds.typescript: return 'TS';
@@ -30,6 +36,8 @@ function mode2ScriptKind(mode: string): 'TS' | 'TSX' | 'JS' | 'JSX' | undefined
class SyncedBuffer {
private state = BufferState.Initial;
constructor(
private readonly document: vscode.TextDocument,
public readonly filepath: string,
@@ -63,6 +71,7 @@ class SyncedBuffer {
}
this.client.executeWithoutWaitingForResponse('open', args);
this.state = BufferState.Open;
}
public get resource(): vscode.Uri {
@@ -91,9 +100,14 @@ class SyncedBuffer {
file: this.filepath
};
this.client.executeWithoutWaitingForResponse('close', args);
this.state = BufferState.Closed;
}
public onContentChanged(events: vscode.TextDocumentContentChangeEvent[]): void {
if (this.state !== BufferState.Open) {
console.error(`Unexpected buffer state: ${this.state}`);
}
for (const { range, text } of events) {
const args: Proto.ChangeRequestArgs = {
insertString: text,
@@ -217,47 +217,16 @@ export default class TypeScriptServiceClientHost extends Disposable {
return;
}
(this.findLanguage(this.client.toResource(body.configFile))).then(language => {
this.findLanguage(this.client.toResource(body.configFile)).then(language => {
if (!language) {
return;
}
if (body.diagnostics.length === 0) {
language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), []);
} else if (body.diagnostics.length >= 1) {
vscode.workspace.openTextDocument(vscode.Uri.file(body.configFile)).then((document) => {
let curly: [number, number, number] | undefined = undefined;
let nonCurly: [number, number, number] | undefined = undefined;
let diagnostic: vscode.Diagnostic;
for (let index = 0; index < document.lineCount; index++) {
const line = document.lineAt(index);
const text = line.text;
const firstNonWhitespaceCharacterIndex = line.firstNonWhitespaceCharacterIndex;
if (firstNonWhitespaceCharacterIndex < text.length) {
if (text.charAt(firstNonWhitespaceCharacterIndex) === '{') {
curly = [index, firstNonWhitespaceCharacterIndex, firstNonWhitespaceCharacterIndex + 1];
break;
} else {
const matches = /\s*([^\s]*)(?:\s*|$)/.exec(text.substr(firstNonWhitespaceCharacterIndex));
if (matches && matches.length >= 1) {
nonCurly = [index, firstNonWhitespaceCharacterIndex, firstNonWhitespaceCharacterIndex + matches[1].length];
}
}
}
}
const match = curly || nonCurly;
if (match) {
diagnostic = new vscode.Diagnostic(new vscode.Range(match[0], match[1], match[0], match[2]), body.diagnostics[0].text);
} else {
diagnostic = new vscode.Diagnostic(new vscode.Range(0, 0, 0, 0), body.diagnostics[0].text);
}
if (diagnostic) {
diagnostic.source = language.diagnosticSource;
language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), [diagnostic]);
}
}, _error => {
language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), [new vscode.Diagnostic(new vscode.Range(0, 0, 0, 0), body.diagnostics[0].text)]);
});
}
language.configFileDiagnosticsReceived(this.client.toResource(body.configFile), body.diagnostics.map(tsDiag => {
const diagnostic = new vscode.Diagnostic(typeConverters.Range.fromTextSpan(tsDiag), body.diagnostics[0].text);
diagnostic.source = language.diagnosticSource;
return diagnostic;
}));
});
}
@@ -63,16 +63,17 @@ export namespace WorkspaceEdit {
edits: Iterable<Proto.FileCodeEdits>
): vscode.WorkspaceEdit {
return withFileCodeEdits(new vscode.WorkspaceEdit(), client, edits);
}
export function withFileCodeEdits(
workspaceEdit: vscode.WorkspaceEdit,
client: ITypeScriptServiceClient,
edits: Iterable<Proto.FileCodeEdits>
): vscode.WorkspaceEdit {
for (const edit of edits) {
const resource = client.toResource(edit.fileName);
for (const textChange of edit.textChanges) {
workspaceEdit.replace(client.toResource(edit.fileName),
workspaceEdit.replace(resource,
Range.fromTextSpan(textChange),
textChange.newText);
}
@@ -74,23 +74,6 @@ suite('commands namespace tests', () => {
});
test('api-command: vscode.previewHtml', async function () {
let registration = workspace.registerTextDocumentContentProvider('speciale', {
provideTextDocumentContent(uri) {
return `content of URI <b>${uri.toString()}</b>`;
}
});
let virtualDocumentUri = Uri.parse('speciale://authority/path');
let title = 'A title';
const success = await commands.executeCommand('vscode.previewHtml', virtualDocumentUri, ViewColumn.Three, title);
assert.ok(success);
registration.dispose();
});
test('api-command: vscode.diff', function () {
let registration = workspace.registerTextDocumentContentProvider('sc', {
@@ -488,7 +488,21 @@ suite('workspace-namespace', () => {
});
test('findFiles', () => {
return vscode.workspace.findFiles('*.png').then((res) => {
return vscode.workspace.findFiles('**/*.png').then((res) => {
assert.equal(res.length, 2);
assert.equal(basename(vscode.workspace.asRelativePath(res[0])), 'image.png');
});
});
test('findFiles - exclude', () => {
return vscode.workspace.findFiles('**/*.png').then((res) => {
assert.equal(res.length, 2);
assert.equal(basename(vscode.workspace.asRelativePath(res[0])), 'image.png');
});
});
test('findFiles, exclude', () => {
return vscode.workspace.findFiles('**/*.png', '**/sub/**').then((res) => {
assert.equal(res.length, 1);
assert.equal(basename(vscode.workspace.asRelativePath(res[0])), 'image.png');
});
+4 -4
View File
@@ -2,7 +2,7 @@
# yarn lockfile v1
typescript@3.3.3333:
version "3.3.3333"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3333.tgz#171b2c5af66c59e9431199117a3bcadc66fdcfd6"
integrity sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==
typescript@3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3.tgz#f1657fc7daa27e1a8930758ace9ae8da31403221"
integrity sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "code-oss-dev",
"version": "1.32.0",
"version": "1.33.0",
"distro": "d7aadf23b016949c24a43083a0b3deecb8aa81fa",
"author": {
"name": "Microsoft Corporation"
@@ -28,7 +28,7 @@
},
"dependencies": {
"applicationinsights": "1.0.8",
"gc-signals": "^0.0.1",
"gc-signals": "^0.0.2",
"getmac": "1.4.1",
"graceful-fs": "4.1.11",
"http-proxy-agent": "^2.1.0",
@@ -97,7 +97,7 @@
"gulp-rename": "^1.2.0",
"gulp-replace": "^0.5.4",
"gulp-shell": "^0.6.5",
"gulp-tsb": "2.0.6",
"gulp-tsb": "2.0.7",
"gulp-tslint": "^8.1.3",
"gulp-uglify": "^3.0.0",
"gulp-vinyl-zip": "^2.1.2",
+126 -44
View File
@@ -14,13 +14,23 @@
"./vs/workbench/browser/parts/quickinput/**/*",
"./vs/workbench/electron-browser/actions/**/*",
"./vs/workbench/contrib/emmet/**/*",
"./vs/workbench/contrib/execution/**/*",
"./vs/workbench/contrib/externalTerminal/**/*",
"./vs/workbench/contrib/scm/**/*.ts",
"./vs/workbench/contrib/snippets/**/*.ts",
"./vs/workbench/contrib/outline/**/*.ts",
"./vs/workbench/contrib/performance/**/*.ts",
"./vs/workbench/contrib/welcome/**/*.ts",
"./vs/workbench/contrib/issue/**/*",
"./vs/workbench/contrib/splash/**/*.ts",
"./vs/workbench/contrib/tasks/**/*.ts",
"./vs/workbench/services/commands/**/*",
"./vs/workbench/services/files/node/watcher/**/*",
"./vs/workbench/services/themes/**/*.ts"
"./vs/workbench/services/themes/**/*.ts",
"./vs/workbench/services/bulkEdit/**/*.ts",
"./vs/workbench/services/progress/**/*.ts",
"./vs/workbench/services/preferences/**/*.ts",
"./vs/workbench/services/timer/**/*.ts",
"./vs/workbench/contrib/webview/**/*.ts"
],
"files": [
"./vs/monaco.d.ts",
@@ -28,6 +38,7 @@
"./vs/nls.mock.ts",
"./vs/vscode.d.ts",
"./vs/vscode.proposed.d.ts",
"./vs/workbench/api/browser/viewsExtensionPoint.ts",
"./vs/workbench/api/common/configurationExtensionPoint.ts",
"./vs/workbench/api/common/jsonValidationExtensionPoint.ts",
"./vs/workbench/api/common/menusExtensionPoint.ts",
@@ -45,6 +56,7 @@
"./vs/workbench/api/electron-browser/mainThreadErrors.ts",
"./vs/workbench/api/electron-browser/mainThreadFileSystem.ts",
"./vs/workbench/api/electron-browser/mainThreadFileSystemEventService.ts",
"./vs/workbench/api/electron-browser/mainThreadHeapService.ts",
"./vs/workbench/api/electron-browser/mainThreadLanguages.ts",
"./vs/workbench/api/electron-browser/mainThreadLogService.ts",
"./vs/workbench/api/electron-browser/mainThreadMessageService.ts",
@@ -52,6 +64,7 @@
"./vs/workbench/api/electron-browser/mainThreadProgress.ts",
"./vs/workbench/api/electron-browser/mainThreadQuickOpen.ts",
"./vs/workbench/api/electron-browser/mainThreadSCM.ts",
"./vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts",
"./vs/workbench/api/electron-browser/mainThreadSearch.ts",
"./vs/workbench/api/electron-browser/mainThreadStatusBar.ts",
"./vs/workbench/api/electron-browser/mainThreadStorage.ts",
@@ -61,50 +74,87 @@
"./vs/workbench/api/electron-browser/mainThreadUrls.ts",
"./vs/workbench/api/electron-browser/mainThreadWindow.ts",
"./vs/workbench/api/electron-browser/mainThreadWorkspace.ts",
"./vs/workbench/api/node/apiCommands.ts",
"./vs/workbench/api/node/extHost.protocol.ts",
"./vs/workbench/api/node/extHostCLIServer.ts",
"./vs/workbench/api/node/extHostClipboard.ts",
"./vs/workbench/api/node/extHostCommands.ts",
"./vs/workbench/api/node/extHostConfiguration.ts",
"./vs/workbench/api/node/extHostDecorations.ts",
"./vs/workbench/api/node/extHostDiagnostics.ts",
"./vs/workbench/api/node/extHostDialogs.ts",
"./vs/workbench/api/node/extHostDocumentContentProviders.ts",
"./vs/workbench/api/node/extHostDocumentData.ts",
"./vs/workbench/api/node/extHostDocumentSaveParticipant.ts",
"./vs/workbench/api/node/extHostDocuments.ts",
"./vs/workbench/api/node/extHostDocumentsAndEditors.ts",
"./vs/workbench/api/node/extHostExtensionActivator.ts",
"./vs/workbench/api/node/extHostFileSystemEventService.ts",
"./vs/workbench/api/node/extHostHeapService.ts",
"./vs/workbench/api/node/extHostLanguages.ts",
"./vs/workbench/api/node/extHostLogService.ts",
"./vs/workbench/api/node/extHostMessageService.ts",
"./vs/workbench/api/node/extHostOutputService.ts",
"./vs/workbench/api/node/extHostProgress.ts",
"./vs/workbench/api/node/extHostQuickOpen.ts",
"./vs/workbench/api/node/extHostSCM.ts",
"./vs/workbench/api/node/extHostSearch.fileIndex.ts",
"./vs/workbench/api/node/extHostSearch.ts",
"./vs/workbench/api/node/extHostStorage.ts",
"./vs/workbench/api/node/extHostTextEditor.ts",
"./vs/workbench/api/node/extHostTextEditors.ts",
"./vs/workbench/api/node/extHostTypeConverters.ts",
"./vs/workbench/api/node/extHostTypes.ts",
"./vs/workbench/api/node/extHostUrls.ts",
"./vs/workbench/api/node/extHostWebview.ts",
"./vs/workbench/api/node/extHostWindow.ts",
"./vs/workbench/api/node/extHostWorkspace.ts",
"./vs/workbench/api/shared/editor.ts",
"./vs/workbench/api/shared/tasks.ts",
"./vs/workbench/browser/actions.ts",
"./vs/workbench/browser/actions/layoutActions.ts",
"./vs/workbench/browser/actions/listCommands.ts",
"./vs/workbench/browser/actions/navigationActions.ts",
"./vs/workbench/browser/actions/workspaceActions.ts",
"./vs/workbench/browser/actions/workspaceCommands.ts",
"./vs/workbench/browser/composite.ts",
"./vs/workbench/browser/contextkeys.ts",
"./vs/workbench/browser/dnd.ts",
"./vs/workbench/browser/editor.ts",
"./vs/workbench/browser/labels.ts",
"./vs/workbench/browser/panel.ts",
"./vs/workbench/browser/part.ts",
"./vs/workbench/browser/parts/activitybar/activitybarActions.ts",
"./vs/workbench/browser/parts/activitybar/activitybarPart.ts",
"./vs/workbench/browser/parts/compositeBar.ts",
"./vs/workbench/browser/parts/compositeBarActions.ts",
"./vs/workbench/browser/parts/compositePart.ts",
"./vs/workbench/browser/parts/editor/baseEditor.ts",
"./vs/workbench/browser/parts/editor/binaryDiffEditor.ts",
"./vs/workbench/browser/parts/editor/binaryEditor.ts",
"./vs/workbench/browser/parts/editor/breadcrumbs.ts",
"./vs/workbench/browser/parts/editor/breadcrumbsControl.ts",
"./vs/workbench/browser/parts/editor/breadcrumbsModel.ts",
"./vs/workbench/browser/parts/editor/breadcrumbsPicker.ts",
"./vs/workbench/browser/parts/editor/editor.ts",
"./vs/workbench/browser/parts/editor/editorActions.ts",
"./vs/workbench/browser/parts/editor/editorCommands.ts",
"./vs/workbench/browser/parts/editor/editorControl.ts",
"./vs/workbench/browser/parts/editor/editorDropTarget.ts",
"./vs/workbench/browser/parts/editor/editorGroupView.ts",
"./vs/workbench/browser/parts/editor/editorPicker.ts",
"./vs/workbench/browser/parts/editor/editorWidgets.ts",
"./vs/workbench/browser/parts/editor/noTabsTitleControl.ts",
"./vs/workbench/browser/parts/editor/rangeDecorations.ts",
"./vs/workbench/browser/parts/editor/resourceViewer.ts",
"./vs/workbench/browser/parts/editor/sideBySideEditor.ts",
"./vs/workbench/browser/parts/editor/tabsTitleControl.ts",
"./vs/workbench/browser/parts/editor/textDiffEditor.ts",
"./vs/workbench/browser/parts/editor/textEditor.ts",
"./vs/workbench/browser/parts/editor/textResourceEditor.ts",
"./vs/workbench/browser/parts/editor/titleControl.ts",
"./vs/workbench/browser/parts/panel/panelActions.ts",
"./vs/workbench/browser/parts/panel/panelPart.ts",
"./vs/workbench/browser/parts/quickinput/quickInputBox.ts",
"./vs/workbench/browser/parts/quickinput/quickInputList.ts",
"./vs/workbench/browser/parts/quickinput/quickInputUtils.ts",
@@ -114,6 +164,9 @@
"./vs/workbench/browser/parts/sidebar/sidebarPart.ts",
"./vs/workbench/browser/parts/statusbar/statusbar.ts",
"./vs/workbench/browser/parts/statusbar/statusbarPart.ts",
"./vs/workbench/browser/parts/titlebar/menubarControl.ts",
"./vs/workbench/browser/parts/titlebar/titlebarPart.ts",
"./vs/workbench/browser/parts/views/customView.ts",
"./vs/workbench/browser/parts/views/panelViewlet.ts",
"./vs/workbench/browser/parts/views/views.ts",
"./vs/workbench/browser/parts/views/viewsViewlet.ts",
@@ -130,8 +183,15 @@
"./vs/workbench/common/editor.ts",
"./vs/workbench/common/editor/binaryEditorModel.ts",
"./vs/workbench/common/editor/dataUriEditorInput.ts",
"./vs/workbench/common/editor/diffEditorInput.ts",
"./vs/workbench/common/editor/diffEditorModel.ts",
"./vs/workbench/common/editor/editorGroup.ts",
"./vs/workbench/common/editor/resourceEditorInput.ts",
"./vs/workbench/common/editor/resourceEditorModel.ts",
"./vs/workbench/common/editor/textDiffEditorModel.ts",
"./vs/workbench/common/editor/textEditorModel.ts",
"./vs/workbench/common/editor/untitledEditorInput.ts",
"./vs/workbench/common/editor/untitledEditorModel.ts",
"./vs/workbench/common/memento.ts",
"./vs/workbench/common/notifications.ts",
"./vs/workbench/common/panel.ts",
@@ -139,6 +199,8 @@
"./vs/workbench/common/theme.ts",
"./vs/workbench/common/viewlet.ts",
"./vs/workbench/common/views.ts",
"./vs/workbench/contrib/backup/common/backup.contribution.ts",
"./vs/workbench/contrib/backup/common/backupModelTracker.ts",
"./vs/workbench/contrib/backup/common/backupRestorer.ts",
"./vs/workbench/contrib/cli/node/cli.contribution.ts",
"./vs/workbench/contrib/codeEditor/browser/accessibility/accessibility.ts",
@@ -193,20 +255,33 @@
"./vs/workbench/contrib/extensions/common/extensions.ts",
"./vs/workbench/contrib/extensions/common/extensionsFileTemplate.ts",
"./vs/workbench/contrib/extensions/common/extensionsInput.ts",
"./vs/workbench/contrib/extensions/common/extensionsUtils.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionEditor.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionProfileService.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionTipsService.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensions.contribution.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsActions.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsActivationProgress.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsAutoProfiler.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsList.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsUtils.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsViewlet.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsViews.ts",
"./vs/workbench/contrib/extensions/electron-browser/extensionsWidgets.ts",
"./vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsEditor.ts",
"./vs/workbench/contrib/extensions/electron-browser/runtimeExtensionsInput.ts",
"./vs/workbench/contrib/extensions/node/extensionsWorkbenchService.ts",
"./vs/workbench/contrib/extensions/test/common/extensionQuery.test.ts",
"./vs/workbench/contrib/feedback/electron-browser/feedback.contribution.ts",
"./vs/workbench/contrib/feedback/electron-browser/feedback.ts",
"./vs/workbench/contrib/feedback/electron-browser/feedbackStatusbarItem.ts",
"./vs/workbench/contrib/files/browser/editors/binaryFileEditor.ts",
"./vs/workbench/contrib/files/browser/editors/fileEditorTracker.ts",
"./vs/workbench/contrib/files/browser/editors/textFileEditor.ts",
"./vs/workbench/contrib/files/browser/files.ts",
"./vs/workbench/contrib/files/browser/views/emptyView.ts",
"./vs/workbench/contrib/files/browser/views/explorerDecorationsProvider.ts",
"./vs/workbench/contrib/files/common/dirtyFilesTracker.ts",
"./vs/workbench/contrib/files/common/editors/fileEditorInput.ts",
"./vs/workbench/contrib/files/common/explorerModel.ts",
"./vs/workbench/contrib/files/common/explorerService.ts",
"./vs/workbench/contrib/files/common/files.ts",
@@ -218,20 +293,33 @@
"./vs/workbench/contrib/logs/common/logs.contribution.ts",
"./vs/workbench/contrib/logs/common/logsActions.ts",
"./vs/workbench/contrib/markers/browser/constants.ts",
"./vs/workbench/contrib/markers/browser/markers.contribution.ts",
"./vs/workbench/contrib/markers/browser/markers.ts",
"./vs/workbench/contrib/markers/browser/markersFileDecorations.ts",
"./vs/workbench/contrib/markers/browser/markersFilterOptions.ts",
"./vs/workbench/contrib/markers/browser/markersModel.ts",
"./vs/workbench/contrib/markers/browser/markersPanel.ts",
"./vs/workbench/contrib/markers/browser/markersPanelActions.ts",
"./vs/workbench/contrib/markers/browser/markersTreeViewer.ts",
"./vs/workbench/contrib/markers/browser/messages.ts",
"./vs/workbench/contrib/markers/test/electron-browser/markersModel.test.ts",
"./vs/workbench/contrib/output/browser/logViewer.ts",
"./vs/workbench/contrib/output/browser/outputActions.ts",
"./vs/workbench/contrib/output/browser/outputPanel.ts",
"./vs/workbench/contrib/output/common/output.ts",
"./vs/workbench/contrib/output/common/outputLinkComputer.ts",
"./vs/workbench/contrib/output/common/outputLinkProvider.ts",
"./vs/workbench/contrib/output/electron-browser/output.contribution.ts",
"./vs/workbench/contrib/output/electron-browser/outputServices.ts",
"./vs/workbench/contrib/output/node/outputAppender.ts",
"./vs/workbench/contrib/performance/electron-browser/startupTimings.ts",
"./vs/workbench/contrib/preferences/browser/preferencesActions.ts",
"./vs/workbench/contrib/preferences/browser/preferencesWidgets.ts",
"./vs/workbench/contrib/preferences/browser/settingsLayout.ts",
"./vs/workbench/contrib/preferences/browser/settingsWidgets.ts",
"./vs/workbench/contrib/preferences/common/preferences.ts",
"./vs/workbench/contrib/preferences/common/preferencesContribution.ts",
"./vs/workbench/contrib/preferences/common/smartSnippetInserter.ts",
"./vs/workbench/contrib/preferences/electron-browser/preferencesSearch.ts",
"./vs/workbench/contrib/preferences/test/common/smartSnippetInserter.test.ts",
"./vs/workbench/contrib/quickopen/browser/commandsHandler.ts",
"./vs/workbench/contrib/quickopen/browser/gotoLineHandler.ts",
@@ -240,12 +328,12 @@
"./vs/workbench/contrib/quickopen/browser/quickopen.contribution.ts",
"./vs/workbench/contrib/quickopen/browser/viewPickerHandler.ts",
"./vs/workbench/contrib/relauncher/electron-browser/relauncher.contribution.ts",
"./vs/workbench/contrib/scm/browser/dirtydiffDecorator.ts",
"./vs/workbench/contrib/scm/browser/scmActivity.ts",
"./vs/workbench/contrib/scm/browser/scmMenus.ts",
"./vs/workbench/contrib/scm/browser/scmUtil.ts",
"./vs/workbench/contrib/scm/common/scm.ts",
"./vs/workbench/contrib/scm/common/scmService.ts",
"./vs/workbench/contrib/scm/electron-browser/dirtydiffDecorator.ts",
"./vs/workbench/contrib/scm/electron-browser/scmActivity.ts",
"./vs/workbench/contrib/scm/electron-browser/scmMenus.ts",
"./vs/workbench/contrib/scm/electron-browser/scmUtil.ts",
"./vs/workbench/contrib/search/browser/openAnythingHandler.ts",
"./vs/workbench/contrib/search/browser/openFileHandler.ts",
"./vs/workbench/contrib/search/browser/openSymbolHandler.ts",
@@ -262,71 +350,61 @@
"./vs/workbench/contrib/search/test/browser/openFileHandler.test.ts",
"./vs/workbench/contrib/search/test/common/searchModel.test.ts",
"./vs/workbench/contrib/search/test/common/searchResult.test.ts",
"./vs/workbench/contrib/splash/electron-browser/partsSplash.contribution.ts",
"./vs/workbench/contrib/stats/node/stats.contribution.ts",
"./vs/workbench/contrib/stats/node/workspaceStats.ts",
"./vs/workbench/contrib/stats/test/workspaceStats.test.ts",
"./vs/workbench/contrib/surveys/electron-browser/languageSurveys.contribution.ts",
"./vs/workbench/contrib/surveys/electron-browser/nps.contribution.ts",
"./vs/workbench/contrib/tasks/browser/quickOpen.ts",
"./vs/workbench/contrib/tasks/browser/taskQuickOpen.ts",
"./vs/workbench/contrib/tasks/common/problemCollectors.ts",
"./vs/workbench/contrib/tasks/common/problemMatcher.ts",
"./vs/workbench/contrib/tasks/common/taskDefinitionRegistry.ts",
"./vs/workbench/contrib/tasks/common/taskService.ts",
"./vs/workbench/contrib/tasks/common/taskSystem.ts",
"./vs/workbench/contrib/tasks/common/taskTemplates.ts",
"./vs/workbench/contrib/tasks/common/tasks.ts",
"./vs/workbench/contrib/tasks/electron-browser/jsonSchemaCommon.ts",
"./vs/workbench/contrib/tasks/electron-browser/jsonSchema_v1.ts",
"./vs/workbench/contrib/tasks/electron-browser/jsonSchema_v2.ts",
"./vs/workbench/contrib/tasks/electron-browser/runAutomaticTasks.ts",
"./vs/workbench/contrib/tasks/electron-browser/terminalTaskSystem.ts",
"./vs/workbench/contrib/tasks/node/processRunnerDetector.ts",
"./vs/workbench/contrib/tasks/node/processTaskSystem.ts",
"./vs/workbench/contrib/tasks/node/taskConfiguration.ts",
"./vs/workbench/contrib/tasks/node/tasks.ts",
"./vs/workbench/contrib/tasks/test/common/problemMatcher.test.ts",
"./vs/workbench/contrib/tasks/test/electron-browser/configuration.test.ts",
"./vs/workbench/contrib/telemetry/browser/telemetry.contribution.ts",
"./vs/workbench/contrib/terminal/browser/terminal.contribution.ts",
"./vs/workbench/contrib/terminal/browser/terminal.ts",
"./vs/workbench/contrib/terminal/browser/terminalActions.ts",
"./vs/workbench/contrib/terminal/browser/terminalCommandTracker.ts",
"./vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts",
"./vs/workbench/contrib/terminal/browser/terminalFindWidget.ts",
"./vs/workbench/contrib/terminal/browser/terminalInstance.ts",
"./vs/workbench/contrib/terminal/browser/terminalLinkHandler.ts",
"./vs/workbench/contrib/terminal/browser/terminalPanel.ts",
"./vs/workbench/contrib/terminal/browser/terminalProcessManager.ts",
"./vs/workbench/contrib/terminal/browser/terminalQuickOpen.ts",
"./vs/workbench/contrib/terminal/browser/terminalService.ts",
"./vs/workbench/contrib/terminal/browser/terminalTab.ts",
"./vs/workbench/contrib/terminal/browser/terminalWidgetManager.ts",
"./vs/workbench/contrib/terminal/common/terminal.ts",
"./vs/workbench/contrib/terminal/common/terminalColorRegistry.ts",
"./vs/workbench/contrib/terminal/common/terminalCommands.ts",
"./vs/workbench/contrib/terminal/common/terminalEnvironment.ts",
"./vs/workbench/contrib/terminal/common/terminalMenu.ts",
"./vs/workbench/contrib/terminal/common/terminalProcessExtHostProxy.ts",
"./vs/workbench/contrib/terminal/common/terminalService.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminalActions.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminalConfigHelper.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminalInstance.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminalLinkHandler.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminalProcessManager.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminal.contribution.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminalInstanceService.ts",
"./vs/workbench/contrib/terminal/electron-browser/terminalService.ts",
"./vs/workbench/contrib/terminal/node/terminal.ts",
"./vs/workbench/contrib/terminal/node/terminalCommandTracker.ts",
"./vs/workbench/contrib/terminal/node/terminalEnvironment.ts",
"./vs/workbench/contrib/terminal/node/terminalProcess.ts",
"./vs/workbench/contrib/terminal/node/terminalProcessExtHostProxy.ts",
"./vs/workbench/contrib/terminal/node/windowsShellHelper.ts",
"./vs/workbench/contrib/terminal/test/electron-browser/terminalColorRegistry.test.ts",
"./vs/workbench/contrib/terminal/test/electron-browser/terminalCommandTracker.test.ts",
"./vs/workbench/contrib/terminal/test/electron-browser/terminalConfigHelper.test.ts",
"./vs/workbench/contrib/terminal/test/electron-browser/terminalLinkHandler.test.ts",
"./vs/workbench/contrib/terminal/test/node/terminalCommandTracker.test.ts",
"./vs/workbench/contrib/terminal/test/node/terminalEnvironment.test.ts",
"./vs/workbench/contrib/themes/browser/themes.contribution.ts",
"./vs/workbench/contrib/themes/test/electron-browser/themes.test.contribution.ts",
"./vs/workbench/contrib/update/electron-browser/releaseNotesEditor.ts",
"./vs/workbench/contrib/update/electron-browser/update.contribution.ts",
"./vs/workbench/contrib/update/electron-browser/update.ts",
"./vs/workbench/contrib/url/common/url.contribution.ts",
"./vs/workbench/contrib/webview/electron-browser/webviewProtocols.ts",
"./vs/workbench/electron-browser/window.ts",
"./vs/workbench/services/activity/browser/activityService.ts",
"./vs/workbench/services/activity/common/activity.ts",
"./vs/workbench/services/backup/common/backup.ts",
"./vs/workbench/services/backup/node/backupFileService.ts",
"./vs/workbench/services/broadcast/electron-browser/broadcastService.ts",
"./vs/workbench/services/bulkEdit/browser/bulkEditService.ts",
"./vs/workbench/services/configuration/common/configuration.ts",
"./vs/workbench/services/configuration/common/configurationModels.ts",
"./vs/workbench/services/configuration/common/jsonEditing.ts",
"./vs/workbench/services/configuration/node/configuration.ts",
"./vs/workbench/services/configuration/node/configurationEditingService.ts",
"./vs/workbench/services/configuration/node/jsonEditingService.ts",
"./vs/workbench/services/configuration/test/common/configurationModels.test.ts",
"./vs/workbench/services/configurationResolver/common/configurationResolver.ts",
@@ -340,7 +418,6 @@
"./vs/workbench/services/editor/common/editorGroupsService.ts",
"./vs/workbench/services/editor/common/editorService.ts",
"./vs/workbench/services/extensionManagement/node/multiExtensionManagement.ts",
"./vs/workbench/services/extensions/common/extensionHostProtocol.ts",
"./vs/workbench/services/extensions/common/extensions.ts",
"./vs/workbench/services/extensions/common/extensionsRegistry.ts",
"./vs/workbench/services/extensions/electron-browser/cachedExtensionScanner.ts",
@@ -348,6 +425,7 @@
"./vs/workbench/services/extensions/electron-browser/extensionHostProfiler.ts",
"./vs/workbench/services/extensions/electron-browser/inactiveExtensionUrlHandler.ts",
"./vs/workbench/services/extensions/node/extensionDescriptionRegistry.ts",
"./vs/workbench/services/extensions/node/extensionHostProtocol.ts",
"./vs/workbench/services/extensions/node/extensionManagementServerService.ts",
"./vs/workbench/services/extensions/node/extensionPoints.ts",
"./vs/workbench/services/extensions/node/lazyPromise.ts",
@@ -355,6 +433,8 @@
"./vs/workbench/services/extensions/node/rpcProtocol.ts",
"./vs/workbench/services/extensions/test/node/rpcProtocol.test.ts",
"./vs/workbench/services/files/node/encoding.ts",
"./vs/workbench/services/files/node/remoteFileService.ts",
"./vs/workbench/services/files/node/fileService.ts",
"./vs/workbench/services/files/node/streams.ts",
"./vs/workbench/services/files/test/electron-browser/utils.ts",
"./vs/workbench/services/files/test/electron-browser/watcher.test.ts",
@@ -382,8 +462,6 @@
"./vs/workbench/services/part/common/partService.ts",
"./vs/workbench/services/preferences/common/keybindingsEditorModel.ts",
"./vs/workbench/services/preferences/test/common/keybindingsEditorModel.test.ts",
"./vs/workbench/services/progress/browser/progressService.ts",
"./vs/workbench/services/progress/test/progressService.test.ts",
"./vs/workbench/services/remote/electron-browser/remoteAgentServiceImpl.ts",
"./vs/workbench/services/remote/node/remoteAgentEnvironmentChannel.ts",
"./vs/workbench/services/remote/node/remoteAgentService.ts",
@@ -414,10 +492,14 @@
"./vs/workbench/services/textMate/common/textMateService.ts",
"./vs/workbench/services/textMate/electron-browser/TMGrammars.ts",
"./vs/workbench/services/textMate/electron-browser/textMateService.ts",
"./vs/workbench/services/textfile/common/textFileEditorModel.ts",
"./vs/workbench/services/textfile/common/textFileEditorModelManager.ts",
"./vs/workbench/services/textfile/common/textfiles.ts",
"./vs/workbench/services/textfile/node/textResourcePropertiesService.ts",
"./vs/workbench/services/textmodelResolver/common/textModelResolverService.ts",
"./vs/workbench/services/timer/electron-browser/timerService.ts",
"./vs/workbench/services/title/common/titleService.ts",
"./vs/workbench/services/untitled/common/untitledEditorService.ts",
"./vs/workbench/services/viewlet/browser/viewlet.ts",
"./vs/workbench/services/workspace/common/workspaceEditing.ts",
"./vs/workbench/test/browser/actionRegistry.test.ts",
@@ -440,4 +522,4 @@
"./typings/require-monaco.d.ts",
"./vs/workbench/contrib/comments/electron-browser/commentThreadWidget.ts"
]
}
}
+1 -1
View File
@@ -34,7 +34,7 @@ class WindowManager {
}
// --- Zoom Factor
private _zoomFactor: number = 0;
private _zoomFactor: number = 1;
public getZoomFactor(): number {
return this._zoomFactor;
+3 -1
View File
@@ -16,7 +16,9 @@ export class DelayedDragHandler extends Disposable {
constructor(container: HTMLElement, callback: () => void) {
super();
this._register(addDisposableListener(container, 'dragover', () => {
this._register(addDisposableListener(container, 'dragover', e => {
e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
if (!this.timeout) {
this.timeout = setTimeout(() => {
callback();
+1 -1
View File
@@ -615,7 +615,7 @@ export interface IDomNodePagePosition {
height: number;
}
export function size(element: HTMLElement, width: number, height: number): void {
export function size(element: HTMLElement, width: number | null, height: number | null): void {
if (typeof width === 'number') {
element.style.width = `${width}px`;
}
+3 -3
View File
@@ -16,8 +16,8 @@ export interface IListVirtualDelegate<T> {
export interface IListRenderer<T, TTemplateData> {
templateId: string;
renderTemplate(container: HTMLElement): TTemplateData;
renderElement(element: T, index: number, templateData: TTemplateData): void;
disposeElement?(element: T, index: number, templateData: TTemplateData): void;
renderElement(element: T, index: number, templateData: TTemplateData, dynamicHeightProbing?: boolean): void;
disposeElement?(element: T, index: number, templateData: TTemplateData, dynamicHeightProbing?: boolean): void;
disposeTemplate(templateData: TTemplateData): void;
}
@@ -55,7 +55,7 @@ export interface IListContextMenuEvent<T> {
browserEvent: UIEvent;
element: T | undefined;
index: number | undefined;
anchor: HTMLElement | { x: number; y: number; } | undefined;
anchor: HTMLElement | { x: number; y: number; };
}
export interface IIdentityProvider<T> {
+3 -3
View File
@@ -35,7 +35,7 @@ class PagedRenderer<TElement, TTemplateData> implements IListRenderer<number, IT
return { data, disposable: { dispose: () => { } } };
}
renderElement(index: number, _: number, data: ITemplateData<TTemplateData>): void {
renderElement(index: number, _: number, data: ITemplateData<TTemplateData>, dynamicHeightProbing?: boolean): void {
if (data.disposable) {
data.disposable.dispose();
}
@@ -47,7 +47,7 @@ class PagedRenderer<TElement, TTemplateData> implements IListRenderer<number, IT
const model = this.modelProvider();
if (model.isResolved(index)) {
return this.renderer.renderElement(model.get(index), index, data.data);
return this.renderer.renderElement(model.get(index), index, data.data, dynamicHeightProbing);
}
const cts = new CancellationTokenSource();
@@ -55,7 +55,7 @@ class PagedRenderer<TElement, TTemplateData> implements IListRenderer<number, IT
data.disposable = { dispose: () => cts.cancel() };
this.renderer.renderPlaceholder(index, data.data);
promise.then(entry => this.renderer.renderElement(entry, index, data.data!));
promise.then(entry => this.renderer.renderElement(entry, index, data.data!, dynamicHeightProbing));
}
disposeTemplate(data: ITemplateData<TTemplateData>): void {
+19 -2
View File
@@ -445,6 +445,15 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
get firstVisibleIndex(): number {
const range = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
const firstElTop = this.rangeMap.positionAt(range.start);
const nextElTop = this.rangeMap.positionAt(range.start + 1);
if (nextElTop !== -1) {
const firstElMidpoint = (nextElTop - firstElTop) / 2 + firstElTop;
if (firstElMidpoint < this.scrollTop) {
return range.start + 1;
}
}
return range.start;
}
@@ -786,6 +795,8 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
}
private onDragOver(event: IListDragEvent<T>): boolean {
event.browserEvent.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
this.onDragLeaveTimeout.dispose();
if (StaticDND.CurrentDragAndDropData && StaticDND.CurrentDragAndDropData.getData() === 'vscode-ui') {
@@ -1079,14 +1090,20 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
}
const size = item.size;
const renderer = this.renderers.get(item.templateId);
const row = this.cache.alloc(item.templateId);
row.domNode!.style.height = '';
this.rowsContainer.appendChild(row.domNode!);
const renderer = this.renderers.get(item.templateId);
if (renderer) {
renderer.renderElement(item.element, index, row.templateData);
renderer.renderElement(item.element, index, row.templateData, true);
if (renderer.disposeElement) {
renderer.disposeElement(item.element, index, row.templateData, true);
}
}
item.size = row.domNode!.offsetHeight;
item.lastDynamicHeightWidth = this.renderWidth;
this.rowsContainer.removeChild(row.domNode!);
+7 -14
View File
@@ -976,20 +976,20 @@ class PipelineRenderer<T> implements IListRenderer<T, any> {
return this.renderers.map(r => r.renderTemplate(container));
}
renderElement(element: T, index: number, templateData: any[]): void {
renderElement(element: T, index: number, templateData: any[], dynamicHeightProbing?: boolean): void {
let i = 0;
for (const renderer of this.renderers) {
renderer.renderElement(element, index, templateData[i++]);
renderer.renderElement(element, index, templateData[i++], dynamicHeightProbing);
}
}
disposeElement(element: T, index: number, templateData: any[]): void {
disposeElement(element: T, index: number, templateData: any[], dynamicHeightProbing?: boolean): void {
let i = 0;
for (const renderer of this.renderers) {
if (renderer.disposeElement) {
renderer.disposeElement(element, index, templateData[i]);
renderer.disposeElement(element, index, templateData[i], dynamicHeightProbing);
}
i += 1;
@@ -1127,13 +1127,7 @@ export class List<T> implements ISpliceable<T>, IDisposable {
.map(e => new StandardKeyboardEvent(e))
.filter(e => this.didJustPressContextMenuKey = e.keyCode === KeyCode.ContextMenu || (e.shiftKey && e.keyCode === KeyCode.F10))
.filter(e => { e.preventDefault(); e.stopPropagation(); return false; })
.map(event => {
const index = this.getFocus()[0];
const element = this.view.element(index);
const anchor = this.view.domElement(index) || undefined;
return { index, element, anchor, browserEvent: event.browserEvent };
})
.event;
.event as Event<any>;
const fromKeyup = Event.chain(domEvent(this.view.domNode, 'keyup'))
.filter(() => {
@@ -1141,14 +1135,13 @@ export class List<T> implements ISpliceable<T>, IDisposable {
this.didJustPressContextMenuKey = false;
return didJustPressContextMenuKey;
})
.filter(() => this.getFocus().length > 0)
.filter(() => this.getFocus().length > 0 && !!this.view.domElement(this.getFocus()[0]))
.map(browserEvent => {
const index = this.getFocus()[0];
const element = this.view.element(index);
const anchor = this.view.domElement(index) || undefined;
const anchor = this.view.domElement(index) as HTMLElement;
return { index, element, anchor, browserEvent };
})
.filter(({ anchor }) => !!anchor)
.event;
const fromMouse = Event.chain(this.view.onContextMenu)
+23 -9
View File
@@ -8,7 +8,7 @@ import * as nls from 'vs/nls';
import * as strings from 'vs/base/common/strings';
import { IActionRunner, IAction, Action } from 'vs/base/common/actions';
import { ActionBar, IActionItemProvider, ActionsOrientation, Separator, ActionItem, IActionItemOptions, BaseActionItem } from 'vs/base/browser/ui/actionbar/actionbar';
import { ResolvedKeybinding, KeyCode, KeyCodeUtils } from 'vs/base/common/keyCodes';
import { ResolvedKeybinding, KeyCode } from 'vs/base/common/keyCodes';
import { addClass, EventType, EventHelper, EventLike, removeTabIndexAndUpdateFocus, isAncestor, hasClass, addDisposableListener, removeClass, append, $, addClasses, removeClasses } from 'vs/base/browser/dom';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { RunOnceScheduler } from 'vs/base/common/async';
@@ -20,8 +20,22 @@ import { Event, Emitter } from 'vs/base/common/event';
import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
import { isLinux } from 'vs/base/common/platform';
export const MENU_MNEMONIC_REGEX: RegExp = /\(&(\w)\)|(?<!&)&(\w)/;
export const MENU_ESCAPED_MNEMONIC_REGEX: RegExp = /(?<!&amp;)(?:&amp;)(\w)/;
function createMenuMnemonicRegExp() {
try {
return new RegExp('\\(&([^\\s&])\\)|(?<!&)&([^\\s&])');
} catch (err) {
return new RegExp('\uFFFF'); // never match please
}
}
export const MENU_MNEMONIC_REGEX = createMenuMnemonicRegExp();
function createMenuEscapedMnemonicRegExp() {
try {
return new RegExp('(?<!&amp;)(?:&amp;)([^\\s&])');
} catch (err) {
return new RegExp('\uFFFF'); // never match please
}
}
export const MENU_ESCAPED_MNEMONIC_REGEX: RegExp = createMenuEscapedMnemonicRegExp();
export interface IMenuOptions {
context?: any;
@@ -56,7 +70,7 @@ interface ISubMenuData {
}
export class Menu extends ActionBar {
private mnemonics: Map<KeyCode, Array<MenuActionItem>>;
private mnemonics: Map<string, Array<MenuActionItem>>;
private menuDisposables: IDisposable[];
private scrollableElement: DomScrollableElement;
private menuElement: HTMLElement;
@@ -93,7 +107,7 @@ export class Menu extends ActionBar {
if (options.enableMnemonics) {
this.menuDisposables.push(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {
const key = KeyCodeUtils.fromString(e.key);
const key = e.key.toLocaleLowerCase();
if (this.mnemonics.has(key)) {
EventHelper.stop(e, true);
const actions = this.mnemonics.get(key)!;
@@ -175,7 +189,7 @@ export class Menu extends ActionBar {
parent: this
};
this.mnemonics = new Map<KeyCode, Array<MenuActionItem>>();
this.mnemonics = new Map<string, Array<MenuActionItem>>();
this.push(actions, { icon: true, label: true, isMenu: true });
@@ -349,7 +363,7 @@ class MenuActionItem extends BaseActionItem {
private label: HTMLElement;
private check: HTMLElement;
private mnemonic: KeyCode;
private mnemonic: string;
private cssClass: string;
protected menuStyle: IMenuStyles;
@@ -368,7 +382,7 @@ class MenuActionItem extends BaseActionItem {
if (label) {
let matches = MENU_MNEMONIC_REGEX.exec(label);
if (matches) {
this.mnemonic = KeyCodeUtils.fromString((!!matches[1] ? matches[1] : matches[2]).toLocaleLowerCase());
this.mnemonic = (!!matches[1] ? matches[1] : matches[2]).toLocaleLowerCase();
}
}
}
@@ -522,7 +536,7 @@ class MenuActionItem extends BaseActionItem {
}
}
getMnemonic(): KeyCode {
getMnemonic(): string {
return this.mnemonic;
}
+17 -7
View File
@@ -14,7 +14,7 @@ import { cleanMnemonic, IMenuOptions, Menu, MENU_ESCAPED_MNEMONIC_REGEX, MENU_MN
import { ActionRunner, IAction, IActionRunner } from 'vs/base/common/actions';
import { RunOnceScheduler } from 'vs/base/common/async';
import { Event, Emitter } from 'vs/base/common/event';
import { KeyCode, KeyCodeUtils, ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { KeyCode, ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { Disposable, dispose, IDisposable } from 'vs/base/common/lifecycle';
const $ = DOM.$;
@@ -22,7 +22,7 @@ const $ = DOM.$;
export interface IMenuBarOptions {
enableMnemonics?: boolean;
visibility?: string;
getKeybinding?: (action: IAction) => ResolvedKeybinding;
getKeybinding?: (action: IAction) => ResolvedKeybinding | undefined;
alwaysOnMnemonics?: boolean;
}
@@ -70,7 +70,7 @@ export class MenuBar extends Disposable {
private openedViaKeyboard: boolean;
private awaitingAltRelease: boolean;
private ignoreNextMouseUp: boolean;
private mnemonics: Map<KeyCode, number>;
private mnemonics: Map<string, number>;
private updatePending: boolean;
private _focusState: MenubarState;
@@ -89,7 +89,7 @@ export class MenuBar extends Disposable {
this.container.attributes['role'] = 'menubar';
this.menuCache = [];
this.mnemonics = new Map<KeyCode, number>();
this.mnemonics = new Map<string, number>();
this._focusState = MenubarState.VISIBLE;
@@ -110,7 +110,7 @@ export class MenuBar extends Disposable {
this._register(DOM.addDisposableListener(this.container, DOM.EventType.KEY_DOWN, (e) => {
let event = new StandardKeyboardEvent(e as KeyboardEvent);
let eventHandled = true;
const key = !!e.key ? KeyCodeUtils.fromString(e.key) : KeyCode.Unknown;
const key = !!e.key ? e.key.toLocaleLowerCase() : '';
if (event.equals(KeyCode.LeftArrow)) {
this.focusPrevious();
@@ -162,7 +162,7 @@ export class MenuBar extends Disposable {
return;
}
const key = KeyCodeUtils.fromString(e.key);
const key = e.key.toLocaleLowerCase();
if (!this.mnemonics.has(key)) {
return;
}
@@ -505,7 +505,7 @@ export class MenuBar extends Disposable {
}
private registerMnemonic(menuIndex: number, mnemonic: string): void {
this.mnemonics.set(KeyCodeUtils.fromString(mnemonic), menuIndex);
this.mnemonics.set(mnemonic.toLocaleLowerCase(), menuIndex);
}
private hideMenubar(): void {
@@ -954,6 +954,16 @@ class ModifierKeyEmitter extends Emitter<IModifierKeyStatus> {
this._keyStatus.lastKeyPressed = undefined;
}));
this._subscriptions.push(domEvent(document.body, 'mouseup', true)(e => {
this._keyStatus.lastKeyPressed = undefined;
}));
this._subscriptions.push(domEvent(document.body, 'mousemove', true)(e => {
if (e.buttons) {
this._keyStatus.lastKeyPressed = undefined;
}
}));
this._subscriptions.push(domEvent(window, 'blur')(e => {
this._keyStatus.lastKeyPressed = undefined;
this._keyStatus.lastKeyReleased = undefined;
@@ -172,8 +172,9 @@ export abstract class Panel implements IView {
this.renderHeader(this.header);
const focusTracker = trackFocus(this.header);
focusTracker.onDidFocus(() => addClass(this.header, 'focused'));
focusTracker.onDidBlur(() => removeClass(this.header, 'focused'));
this.disposables.push(focusTracker);
focusTracker.onDidFocus(() => addClass(this.header, 'focused'), null, this.disposables);
focusTracker.onDidBlur(() => removeClass(this.header, 'focused'), null, this.disposables);
this.updateHeader();
+15 -8
View File
@@ -233,23 +233,28 @@ class TreeRenderer<T, TFilterData, TTemplateData> implements IListRenderer<ITree
return { container, twistie, templateData };
}
renderElement(node: ITreeNode<T, TFilterData>, index: number, templateData: ITreeListTemplateData<TTemplateData>): void {
this.renderedNodes.set(node, templateData);
this.renderedElements.set(node.element, node);
renderElement(node: ITreeNode<T, TFilterData>, index: number, templateData: ITreeListTemplateData<TTemplateData>, dynamicHeightProbing?: boolean): void {
if (!dynamicHeightProbing) {
this.renderedNodes.set(node, templateData);
this.renderedElements.set(node.element, node);
}
const indent = TreeRenderer.DefaultIndent + (node.depth - 1) * this.indent;
templateData.twistie.style.marginLeft = `${indent}px`;
this.update(node, templateData);
this.renderer.renderElement(node, index, templateData.templateData);
this.renderer.renderElement(node, index, templateData.templateData, dynamicHeightProbing);
}
disposeElement(node: ITreeNode<T, TFilterData>, index: number, templateData: ITreeListTemplateData<TTemplateData>): void {
disposeElement(node: ITreeNode<T, TFilterData>, index: number, templateData: ITreeListTemplateData<TTemplateData>, dynamicHeightProbing?: boolean): void {
if (this.renderer.disposeElement) {
this.renderer.disposeElement(node, index, templateData.templateData);
this.renderer.disposeElement(node, index, templateData.templateData, dynamicHeightProbing);
}
if (!dynamicHeightProbing) {
this.renderedNodes.delete(node);
this.renderedElements.delete(node.element);
}
this.renderedNodes.delete(node);
this.renderedElements.delete(node.element);
}
disposeTemplate(templateData: ITreeListTemplateData<TTemplateData>): void {
@@ -598,6 +603,8 @@ class TypeFilterController<T, TFilterData> implements IDisposable {
};
const onDragOver = (event: DragEvent) => {
event.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)
const x = event.screenX - left;
if (event.dataTransfer) {
event.dataTransfer.dropEffect = 'none';
+78 -98
View File
@@ -17,24 +17,35 @@ import { ElementsDragAndDropData } from 'vs/base/browser/ui/list/listView';
import { isPromiseCanceledError, onUnexpectedError } from 'vs/base/common/errors';
import { toggleClass } from 'vs/base/browser/dom';
const enum AsyncDataTreeNodeState {
Uninitialized = 'uninitialized',
Loaded = 'loaded',
Loading = 'loading'
}
interface IAsyncDataTreeNode<TInput, T> {
element: TInput | T;
readonly parent: IAsyncDataTreeNode<TInput, T> | null;
readonly children: IAsyncDataTreeNode<TInput, T>[];
readonly id?: string | null;
state: AsyncDataTreeNodeState;
loading: boolean;
hasChildren: boolean;
needsRefresh: boolean;
stale: boolean;
slow: boolean;
disposed: boolean;
}
interface IAsyncDataTreeNodeRequiredProps<TInput, T> extends Partial<IAsyncDataTreeNode<TInput, T>> {
readonly element: TInput | T;
readonly parent: IAsyncDataTreeNode<TInput, T> | null;
readonly hasChildren: boolean;
}
function createAsyncDataTreeNode<TInput, T>(props: IAsyncDataTreeNodeRequiredProps<TInput, T>): IAsyncDataTreeNode<TInput, T> {
return {
...props,
children: [],
loading: false,
stale: true,
disposed: false,
slow: false
};
}
function isAncestor<TInput, T>(ancestor: IAsyncDataTreeNode<TInput, T>, descendant: IAsyncDataTreeNode<TInput, T>): boolean {
if (!descendant.parent) {
return false;
@@ -87,8 +98,8 @@ class DataTreeRenderer<TInput, T, TFilterData, TTemplateData> implements ITreeRe
return { templateData };
}
renderElement(node: ITreeNode<IAsyncDataTreeNode<TInput, T>, TFilterData>, index: number, templateData: IDataTreeListTemplateData<TTemplateData>): void {
this.renderer.renderElement(new AsyncDataTreeNodeWrapper(node), index, templateData.templateData);
renderElement(node: ITreeNode<IAsyncDataTreeNode<TInput, T>, TFilterData>, index: number, templateData: IDataTreeListTemplateData<TTemplateData>, dynamicHeightProbing?: boolean): void {
this.renderer.renderElement(new AsyncDataTreeNodeWrapper(node), index, templateData.templateData, dynamicHeightProbing);
}
renderTwistie(element: IAsyncDataTreeNode<TInput, T>, twistieElement: HTMLElement): boolean {
@@ -96,9 +107,9 @@ class DataTreeRenderer<TInput, T, TFilterData, TTemplateData> implements ITreeRe
return false;
}
disposeElement(node: ITreeNode<IAsyncDataTreeNode<TInput, T>, TFilterData>, index: number, templateData: IDataTreeListTemplateData<TTemplateData>): void {
disposeElement(node: ITreeNode<IAsyncDataTreeNode<TInput, T>, TFilterData>, index: number, templateData: IDataTreeListTemplateData<TTemplateData>, dynamicHeightProbing?: boolean): void {
if (this.renderer.disposeElement) {
this.renderer.disposeElement(new AsyncDataTreeNodeWrapper(node), index, templateData.templateData);
this.renderer.disposeElement(new AsyncDataTreeNodeWrapper(node), index, templateData.templateData, dynamicHeightProbing);
}
}
@@ -236,7 +247,7 @@ function asTreeElement<TInput, T>(node: IAsyncDataTreeNode<TInput, T>, viewState
return {
element: node,
children: Iterator.map(Iterator.fromArray(node.children), child => asTreeElement(child, viewStateContext)),
children: node.hasChildren ? Iterator.map(Iterator.fromArray(node.children), child => asTreeElement(child, viewStateContext)) : [],
collapsible: node.hasChildren,
collapsed
};
@@ -287,6 +298,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
get onDidChangeSelection(): Event<ITreeEvent<T>> { return Event.map(this.tree.onDidChangeSelection, asTreeEvent); }
get onDidOpen(): Event<ITreeEvent<T>> { return Event.map(this.tree.onDidOpen, asTreeEvent); }
get onKeyDown(): Event<KeyboardEvent> { return this.tree.onKeyDown; }
get onMouseClick(): Event<ITreeMouseEvent<T>> { return Event.map(this.tree.onMouseClick, asTreeMouseEvent); }
get onMouseDblClick(): Event<ITreeMouseEvent<T>> { return Event.map(this.tree.onMouseDblClick, asTreeMouseEvent); }
get onContextMenu(): Event<ITreeContextMenuEvent<T>> { return Event.map(this.tree.onContextMenu, asTreeContextMenuEvent); }
@@ -317,16 +329,11 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
this.tree = new ObjectTree(container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);
this.root = {
this.root = createAsyncDataTreeNode({
element: undefined!,
parent: null,
children: [],
state: AsyncDataTreeNodeState.Uninitialized,
hasChildren: true,
needsRefresh: false,
disposed: false,
slow: false
};
hasChildren: true
});
if (this.identityProvider) {
this.root = {
@@ -425,7 +432,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
throw new Error('Tree input not set');
}
if (this.root.state === AsyncDataTreeNodeState.Loading) {
if (this.root.loading) {
await this.subTreeRefreshPromises.get(this.root)!;
await Event.toPromise(this._onDidRender.event);
}
@@ -476,20 +483,20 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
throw new Error('Tree input not set');
}
if (this.root.state === AsyncDataTreeNodeState.Loading) {
if (this.root.loading) {
await this.subTreeRefreshPromises.get(this.root)!;
await Event.toPromise(this._onDidRender.event);
}
const node = this.getDataNode(element);
if (node !== this.root && node.state !== AsyncDataTreeNodeState.Loading && !this.tree.isCollapsed(node)) {
if (node !== this.root && !node.loading && !this.tree.isCollapsed(node)) {
return false;
}
const result = this.tree.expand(node === this.root ? null : node, recursive);
if (node.state === AsyncDataTreeNodeState.Loading) {
if (node.loading) {
await this.subTreeRefreshPromises.get(node)!;
await Event.toPromise(this._onDidRender.event);
}
@@ -650,39 +657,19 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
}
private async doRefreshSubTree(node: IAsyncDataTreeNode<TInput, T>, recursive: boolean, viewStateContext?: IAsyncDataTreeViewStateContext<TInput, T>): Promise<void> {
node.state = AsyncDataTreeNodeState.Loading;
node.loading = true;
try {
await this.doRefreshNode(node, recursive, viewStateContext);
const childrenToRefresh = await this.doRefreshNode(node, recursive, viewStateContext);
node.stale = false;
if (recursive) {
const childrenToRefresh = node.children
.filter(child => {
if (child.needsRefresh) {
child.needsRefresh = false;
return true;
}
// TODO@joao: is this still needed?
if (child.hasChildren && child.state === AsyncDataTreeNodeState.Loaded) {
return true;
}
if (!viewStateContext || !viewStateContext.viewState.expanded || !child.id) {
return false;
}
return viewStateContext.viewState.expanded.indexOf(child.id) > -1;
});
await Promise.all(childrenToRefresh.map(child => this.doRefreshSubTree(child, recursive, viewStateContext)));
}
await Promise.all(childrenToRefresh.map(child => this.doRefreshSubTree(child, recursive, viewStateContext)));
} finally {
node.state = AsyncDataTreeNodeState.Loaded;
node.loading = false;
}
}
private async doRefreshNode(node: IAsyncDataTreeNode<TInput, T>, recursive: boolean, viewStateContext?: IAsyncDataTreeViewStateContext<TInput, T>): Promise<void> {
private async doRefreshNode(node: IAsyncDataTreeNode<TInput, T>, recursive: boolean, viewStateContext?: IAsyncDataTreeViewStateContext<TInput, T>): Promise<IAsyncDataTreeNode<TInput, T>[]> {
node.hasChildren = !!this.dataSource.hasChildren(node.element!);
let childrenPromise: Promise<T[]>;
@@ -703,16 +690,14 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
try {
const children = await childrenPromise;
this.setChildren(node, children, recursive, viewStateContext);
return this.setChildren(node, children, recursive, viewStateContext);
} catch (err) {
node.needsRefresh = true;
if (node !== this.root) {
this.tree.collapse(node === this.root ? null : node);
}
if (isPromiseCanceledError(err)) {
return;
return [];
}
throw err;
@@ -747,7 +732,7 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
}
private _onDidChangeCollapseState({ node, deep }: ICollapseStateChangeEvent<IAsyncDataTreeNode<TInput, T>, any>): void {
if (!node.collapsed && (node.element.state === AsyncDataTreeNodeState.Uninitialized || node.element.needsRefresh)) {
if (!node.collapsed && node.element.stale) {
if (deep) {
this.collapse(node.element.element as T);
} else {
@@ -757,7 +742,12 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
}
}
private setChildren(node: IAsyncDataTreeNode<TInput, T>, childrenElements: T[], recursive: boolean, viewStateContext?: IAsyncDataTreeViewStateContext<TInput, T>): void {
private setChildren(node: IAsyncDataTreeNode<TInput, T>, childrenElements: T[], recursive: boolean, viewStateContext?: IAsyncDataTreeViewStateContext<TInput, T>): IAsyncDataTreeNode<TInput, T>[] {
// perf: if the node was and still is a leaf, avoid all this hassle
if (node.children.length === 0 && childrenElements.length === 0) {
return [];
}
let nodeChildren: Map<string, IAsyncDataTreeNode<TInput, T>> | undefined;
if (this.identityProvider) {
@@ -768,67 +758,57 @@ export class AsyncDataTree<TInput, T, TFilterData = void> implements IDisposable
}
}
let childrenToRefresh: IAsyncDataTreeNode<TInput, T>[] = [];
const children = childrenElements.map<IAsyncDataTreeNode<TInput, T>>(element => {
if (!this.identityProvider) {
const hasChildren = !!this.dataSource.hasChildren(element);
return {
return createAsyncDataTreeNode({
element,
parent: node,
children: [],
state: AsyncDataTreeNodeState.Uninitialized,
hasChildren,
needsRefresh: false,
disposed: false,
slow: false
};
hasChildren: !!this.dataSource.hasChildren(element),
});
}
const id = this.identityProvider.getId(element).toString();
const asyncDataTreeNode = nodeChildren!.get(id);
if (!asyncDataTreeNode) {
const childAsyncDataTreeNode: IAsyncDataTreeNode<TInput, T> = {
element,
parent: node,
children: [],
id,
state: AsyncDataTreeNodeState.Uninitialized,
hasChildren: !!this.dataSource.hasChildren(element),
needsRefresh: false,
disposed: false,
slow: false
};
if (asyncDataTreeNode) {
asyncDataTreeNode.element = element;
asyncDataTreeNode.stale = asyncDataTreeNode.stale || recursive;
asyncDataTreeNode.hasChildren = !!this.dataSource.hasChildren(element);
if (viewStateContext && viewStateContext.viewState.focus && viewStateContext.viewState.focus.indexOf(id) > -1) {
viewStateContext.focus.push(childAsyncDataTreeNode);
if (recursive && !this.tree.isCollapsed(asyncDataTreeNode)) {
childrenToRefresh.push(asyncDataTreeNode);
}
if (viewStateContext && viewStateContext.viewState.selection && viewStateContext.viewState.selection.indexOf(id) > -1) {
viewStateContext.selection.push(childAsyncDataTreeNode);
}
return childAsyncDataTreeNode;
return asyncDataTreeNode;
}
asyncDataTreeNode.element = element;
const childAsyncDataTreeNode = createAsyncDataTreeNode({
element,
parent: node,
id,
hasChildren: !!this.dataSource.hasChildren(element)
});
const hasChildren = this.dataSource.hasChildren(asyncDataTreeNode.element);
if (asyncDataTreeNode.state === AsyncDataTreeNodeState.Loaded || (asyncDataTreeNode.state !== AsyncDataTreeNodeState.Uninitialized && asyncDataTreeNode.hasChildren !== !!hasChildren)) {
asyncDataTreeNode.needsRefresh = true;
if (viewStateContext && viewStateContext.viewState.focus && viewStateContext.viewState.focus.indexOf(id) > -1) {
viewStateContext.focus.push(childAsyncDataTreeNode);
}
asyncDataTreeNode.hasChildren = hasChildren;
return asyncDataTreeNode;
if (viewStateContext && viewStateContext.viewState.selection && viewStateContext.viewState.selection.indexOf(id) > -1) {
viewStateContext.selection.push(childAsyncDataTreeNode);
}
if (viewStateContext && viewStateContext.viewState.expanded && viewStateContext.viewState.expanded.indexOf(id) > -1) {
childrenToRefresh.push(childAsyncDataTreeNode);
}
return childAsyncDataTreeNode;
});
// perf: if the node was and still is a leaf, avoid all these expensive no-ops
if (node.children.length === 0 && childrenElements.length === 0) {
return;
}
node.children.splice(0, node.children.length, ...children);
return childrenToRefresh;
}
private render(node: IAsyncDataTreeNode<TInput, T>, viewStateContext?: IAsyncDataTreeViewStateContext<TInput, T>): void {
+6 -6
View File
@@ -51,8 +51,8 @@ export function binarySearch<T>(array: ReadonlyArray<T>, key: T, comparator: (op
high = array.length - 1;
while (low <= high) {
let mid = ((low + high) / 2) | 0;
let comp = comparator(array[mid], key);
const mid = ((low + high) / 2) | 0;
const comp = comparator(array[mid], key);
if (comp < 0) {
low = mid + 1;
} else if (comp > 0) {
@@ -75,7 +75,7 @@ export function findFirstInSorted<T>(array: ReadonlyArray<T>, p: (x: T) => boole
return 0; // no children
}
while (low < high) {
let mid = Math.floor((low + high) / 2);
const mid = Math.floor((low + high) / 2);
if (p(array[mid])) {
high = mid;
} else {
@@ -122,7 +122,7 @@ function _sort<T>(a: T[], compare: Compare<T>, lo: number, hi: number, aux: T[])
if (hi <= lo) {
return;
}
let mid = lo + ((hi - lo) / 2) | 0;
const mid = lo + ((hi - lo) / 2) | 0;
_sort(a, compare, lo, mid, aux);
_sort(a, compare, mid + 1, hi, aux);
if (compare(a[mid], a[mid + 1]) <= 0) {
@@ -502,8 +502,8 @@ export function shuffle<T>(array: T[], _seed?: number): void {
}
for (let i = array.length - 1; i > 0; i -= 1) {
let j = Math.floor(rand() * (i + 1));
let temp = array[i];
const j = Math.floor(rand() * (i + 1));
const temp = array[i];
array[i] = array[j];
array[j] = temp;
}
+4 -4
View File
@@ -52,7 +52,7 @@ export function createCancelablePromise<T>(callback: (token: CancellationToken)
export function asPromise<T>(callback: () => T | Thenable<T>): Promise<T> {
return new Promise<T>((resolve, reject) => {
let item = callback();
const item = callback();
if (isThenable<T>(item)) {
item.then(resolve, reject);
} else {
@@ -688,12 +688,12 @@ declare function cancelIdleCallback(handle: number): void;
(function () {
if (typeof requestIdleCallback !== 'function' || typeof cancelIdleCallback !== 'function') {
let dummyIdle: IdleDeadline = Object.freeze({
const dummyIdle: IdleDeadline = Object.freeze({
didTimeout: true,
timeRemaining() { return 15; }
});
runWhenIdle = (runner) => {
let handle = setTimeout(() => runner(dummyIdle));
const handle = setTimeout(() => runner(dummyIdle));
let disposed = false;
return {
dispose() {
@@ -707,7 +707,7 @@ declare function cancelIdleCallback(handle: number): void;
};
} else {
runWhenIdle = (runner, timeout?) => {
let handle: number = requestIdleCallback(runner, typeof timeout === 'number' ? { timeout } : undefined);
const handle: number = requestIdleCallback(runner, typeof timeout === 'number' ? { timeout } : undefined);
let disposed = false;
return {
dispose() {
+1 -1
View File
@@ -16,7 +16,7 @@ export interface CancellationToken {
}
const shortcutEvent = Object.freeze(function (callback, context?): IDisposable {
let handle = setTimeout(callback.bind(context), 0);
const handle = setTimeout(callback.bind(context), 0);
return { dispose() { clearTimeout(handle); } };
} as Event<any>);
+1 -1
View File
@@ -387,7 +387,7 @@ export class Color {
const thisA = this.rgba.a;
const colorA = rgba.a;
let a = thisA + colorA * (1 - thisA);
const a = thisA + colorA * (1 - thisA);
if (a < 1e-6) {
return Color.transparent;
}
+9 -9
View File
@@ -144,8 +144,8 @@ export function comparePaths(one: string, other: string, caseSensitive = false):
}
export function compareAnything(one: string, other: string, lookFor: string): number {
let elementAName = one.toLowerCase();
let elementBName = other.toLowerCase();
const elementAName = one.toLowerCase();
const elementBName = other.toLowerCase();
// Sort prefix matches over non prefix matches
const prefixCompare = compareByPrefix(one, other, lookFor);
@@ -154,14 +154,14 @@ export function compareAnything(one: string, other: string, lookFor: string): nu
}
// Sort suffix matches over non suffix matches
let elementASuffixMatch = strings.endsWith(elementAName, lookFor);
let elementBSuffixMatch = strings.endsWith(elementBName, lookFor);
const elementASuffixMatch = strings.endsWith(elementAName, lookFor);
const elementBSuffixMatch = strings.endsWith(elementBName, lookFor);
if (elementASuffixMatch !== elementBSuffixMatch) {
return elementASuffixMatch ? -1 : 1;
}
// Understand file names
let r = compareFileNames(elementAName, elementBName);
const r = compareFileNames(elementAName, elementBName);
if (r !== 0) {
return r;
}
@@ -171,12 +171,12 @@ export function compareAnything(one: string, other: string, lookFor: string): nu
}
export function compareByPrefix(one: string, other: string, lookFor: string): number {
let elementAName = one.toLowerCase();
let elementBName = other.toLowerCase();
const elementAName = one.toLowerCase();
const elementBName = other.toLowerCase();
// Sort prefix matches over non prefix matches
let elementAPrefixMatch = strings.startsWith(elementAName, lookFor);
let elementBPrefixMatch = strings.startsWith(elementBName, lookFor);
const elementAPrefixMatch = strings.startsWith(elementAName, lookFor);
const elementBPrefixMatch = strings.startsWith(elementBName, lookFor);
if (elementAPrefixMatch !== elementBPrefixMatch) {
return elementAPrefixMatch ? -1 : 1;
}
+2 -2
View File
@@ -102,7 +102,7 @@ export function transformErrorForSerialization(error: any): any;
export function transformErrorForSerialization(error: any): any {
if (error instanceof Error) {
let { name, message } = error;
let stack: string = (<any>error).stacktrace || (<any>error).stack;
const stack: string = (<any>error).stacktrace || (<any>error).stack;
return {
$isError: true,
name,
@@ -146,7 +146,7 @@ export function isPromiseCanceledError(error: any): boolean {
* Returns an error that signals cancellation.
*/
export function canceled(): Error {
let error = new Error(canceledName);
const error = new Error(canceledName);
error.name = error.message;
return error;
}
+7 -7
View File
@@ -152,7 +152,7 @@ export namespace Event {
clearTimeout(handle);
handle = setTimeout(() => {
let _output = output;
const _output = output;
output = undefined;
handle = undefined;
if (!leading || numDebouncedCalls > 1) {
@@ -190,7 +190,7 @@ export namespace Event {
let cache: T;
return filter(event, value => {
let shouldEmit = firstCall || value !== cache;
const shouldEmit = firstCall || value !== cache;
firstCall = false;
cache = value;
return shouldEmit;
@@ -389,7 +389,7 @@ export interface EmitterOptions {
let _globalLeakWarningThreshold = -1;
export function setGlobalLeakWarningThreshold(n: number): IDisposable {
let oldValue = _globalLeakWarningThreshold;
const oldValue = _globalLeakWarningThreshold;
_globalLeakWarningThreshold = n;
return {
dispose() {
@@ -428,8 +428,8 @@ class LeakageMonitor {
if (!this._stacks) {
this._stacks = new Map();
}
let stack = new Error().stack!.split('\n').slice(3).join('\n');
let count = (this._stacks.get(stack) || 0);
const stack = new Error().stack!.split('\n').slice(3).join('\n');
const count = (this._stacks.get(stack) || 0);
this._stacks.set(stack, count + 1);
this._warnCountdown -= 1;
@@ -453,7 +453,7 @@ class LeakageMonitor {
}
return () => {
let count = (this._stacks!.get(stack) || 0);
const count = (this._stacks!.get(stack) || 0);
this._stacks!.set(stack, count - 1);
};
}
@@ -627,7 +627,7 @@ export class AsyncEmitter<T extends IWaitUntil> extends Emitter<T> {
}
for (let iter = this._listeners.iterator(), e = iter.next(); !e.done; e = iter.next()) {
let thenables: Promise<void>[] = [];
const thenables: Promise<void>[] = [];
this._asyncDeliveryQueue.push([e.value, eventFn(thenables, typeof e.value === 'function' ? e.value : e.value[0]), thenables]);
}
+6 -6
View File
@@ -6,7 +6,7 @@
import { isWindows } from 'vs/base/common/platform';
import { startsWithIgnoreCase, equalsIgnoreCase } from 'vs/base/common/strings';
import { CharCode } from 'vs/base/common/charCode';
import { sep } from 'vs/base/common/path';
import { sep, posix } from 'vs/base/common/path';
function isPathSeparator(code: number) {
return code === CharCode.Slash || code === CharCode.Backslash;
@@ -18,7 +18,7 @@ function isPathSeparator(code: number) {
* Using it on a Linux or MaxOS path might change it.
*/
export function toSlashes(osPath: string) {
return osPath.replace(/[\\/]/g, '/');
return osPath.replace(/[\\/]/g, posix.sep);
}
/**
@@ -26,13 +26,13 @@ export function toSlashes(osPath: string) {
* `getRoot('files:///files/path') === files:///`,
* or `getRoot('\\server\shares\path') === \\server\shares\`
*/
export function getRoot(path: string, sep: string = '/'): string {
export function getRoot(path: string, sep: string = posix.sep): string {
if (!path) {
return '';
}
let len = path.length;
const len = path.length;
const firstLetter = path.charCodeAt(0);
if (isPathSeparator(firstLetter)) {
if (isPathSeparator(path.charCodeAt(1))) {
@@ -40,7 +40,7 @@ export function getRoot(path: string, sep: string = '/'): string {
// ^^^^^^^^^^^^^^^^^^^
if (!isPathSeparator(path.charCodeAt(2))) {
let pos = 3;
let start = pos;
const start = pos;
for (; pos < len; pos++) {
if (isPathSeparator(path.charCodeAt(pos))) {
break;
@@ -121,7 +121,7 @@ export function isUNC(path: string): boolean {
return false;
}
let pos = 2;
let start = pos;
const start = pos;
for (; pos < path.length; pos++) {
code = path.charCodeAt(pos);
if (code === CharCode.Backslash) {
+21 -21
View File
@@ -28,7 +28,7 @@ export interface IMatch {
export function or(...filter: IFilter[]): IFilter {
return function (word: string, wordToMatchAgainst: string): IMatch[] | null {
for (let i = 0, len = filter.length; i < len; i++) {
let match = filter[i](word, wordToMatchAgainst);
const match = filter[i](word, wordToMatchAgainst);
if (match) {
return match;
}
@@ -64,7 +64,7 @@ function _matchesPrefix(ignoreCase: boolean, word: string, wordToMatchAgainst: s
// Contiguous Substring
export function matchesContiguousSubString(word: string, wordToMatchAgainst: string): IMatch[] | null {
let index = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());
const index = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());
if (index === -1) {
return null;
}
@@ -136,7 +136,7 @@ function join(head: IMatch, tail: IMatch[]): IMatch[] {
function nextAnchor(camelCaseWord: string, start: number): number {
for (let i = start; i < camelCaseWord.length; i++) {
let c = camelCaseWord.charCodeAt(i);
const c = camelCaseWord.charCodeAt(i);
if (isUpper(c) || isNumber(c) || (i > 0 && !isAlphanumeric(camelCaseWord.charCodeAt(i - 1)))) {
return i;
}
@@ -184,10 +184,10 @@ function analyzeCamelCaseWord(word: string): ICamelCaseAnalysis {
if (isNumber(code)) { numeric++; }
}
let upperPercent = upper / word.length;
let lowerPercent = lower / word.length;
let alphaPercent = alpha / word.length;
let numericPercent = numeric / word.length;
const upperPercent = upper / word.length;
const lowerPercent = lower / word.length;
const alphaPercent = alpha / word.length;
const numericPercent = numeric / word.length;
return { upperPercent, lowerPercent, alphaPercent, numericPercent };
}
@@ -307,7 +307,7 @@ function _matchesWords(word: string, target: string, i: number, j: number, conti
function nextWord(word: string, start: number): number {
for (let i = start; i < word.length; i++) {
let c = word.charCodeAt(i);
const c = word.charCodeAt(i);
if (isWhitespace(c) || (i > 0 && isWhitespace(word.charCodeAt(i - 1)))) {
return i;
}
@@ -334,7 +334,7 @@ export function matchesFuzzy(word: string, wordToMatchAgainst: string, enableSep
}
// RegExp Filter
let match = regexp.exec(wordToMatchAgainst);
const match = regexp.exec(wordToMatchAgainst);
if (match) {
return [{ start: match.index, end: match.index + match[0].length }];
}
@@ -348,7 +348,7 @@ export function matchesFuzzy(word: string, wordToMatchAgainst: string, enableSep
* powerfull than `matchesFuzzy`
*/
export function matchesFuzzy2(pattern: string, word: string): IMatch[] | null {
let score = fuzzyScore(pattern, pattern.toLowerCase(), 0, word, word.toLowerCase(), 0, true);
const score = fuzzyScore(pattern, pattern.toLowerCase(), 0, word, word.toLowerCase(), 0, true);
return score ? createMatches(score) : null;
}
@@ -404,7 +404,7 @@ function initTable() {
row.push(-i);
}
for (let i = 0; i <= _maxLen; i++) {
let thisRow = row.slice(0);
const thisRow = row.slice(0);
thisRow[0] = -i;
table.push(thisRow);
}
@@ -566,9 +566,9 @@ export function fuzzyScore(pattern: string, patternLow: string, patternPos: numb
_scores[patternPos][wordPos] = score;
let diag = _table[patternPos - 1][wordPos - 1] + (score > 1 ? 1 : score);
let top = _table[patternPos - 1][wordPos] + -1;
let left = _table[patternPos][wordPos - 1] + -1;
const diag = _table[patternPos - 1][wordPos - 1] + (score > 1 ? 1 : score);
const top = _table[patternPos - 1][wordPos] + -1;
const left = _table[patternPos][wordPos - 1] + -1;
if (left >= top) {
// left or diag
@@ -635,8 +635,8 @@ function _findAllMatches2(patternPos: number, wordPos: number, total: number, ma
while (patternPos > _patternStartPos && wordPos > 0) {
let score = _scores[patternPos][wordPos];
let arrow = _arrows[patternPos][wordPos];
const score = _scores[patternPos][wordPos];
const arrow = _arrows[patternPos][wordPos];
if (arrow === Arrow.Left) {
// left -> no match, skip a word character
@@ -733,11 +733,11 @@ function fuzzyScoreWithPermutations(pattern: string, lowPattern: string, pattern
// permutations of the pattern to find a better match. The
// permutations only swap neighbouring characters, e.g
// `cnoso` becomes `conso`, `cnsoo`, `cnoos`.
let tries = Math.min(7, pattern.length - 1);
const tries = Math.min(7, pattern.length - 1);
for (let movingPatternPos = patternPos + 1; movingPatternPos < tries; movingPatternPos++) {
let newPattern = nextTypoPermutation(pattern, movingPatternPos);
const newPattern = nextTypoPermutation(pattern, movingPatternPos);
if (newPattern) {
let candidate = fuzzyScore(newPattern, newPattern.toLowerCase(), patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);
const candidate = fuzzyScore(newPattern, newPattern.toLowerCase(), patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);
if (candidate) {
candidate[0] -= 3; // permutation penalty
if (!top || candidate[0] > top[0]) {
@@ -757,8 +757,8 @@ function nextTypoPermutation(pattern: string, patternPos: number): string | unde
return undefined;
}
let swap1 = pattern[patternPos];
let swap2 = pattern[patternPos + 1];
const swap1 = pattern[patternPos];
const swap2 = pattern[patternPos + 1];
if (swap1 === swap2) {
return undefined;
+4 -4
View File
@@ -53,7 +53,7 @@ export function splitGlobAware(pattern: string, splitChar: string): string[] {
return [];
}
let segments: string[] = [];
const segments: string[] = [];
let inBraces = false;
let inBrackets = false;
@@ -102,7 +102,7 @@ function parseRegExp(pattern: string): string {
let regEx = '';
// Split up into segments for each slash found
let segments = splitGlobAware(pattern, GLOB_SPLIT);
const segments = splitGlobAware(pattern, GLOB_SPLIT);
// Special case where we only have globstars
if (segments.every(s => s === GLOBSTAR)) {
@@ -179,10 +179,10 @@ function parseRegExp(pattern: string): string {
continue;
case '}':
let choices = splitGlobAware(braceVal, ',');
const choices = splitGlobAware(braceVal, ',');
// Converts {foo,bar} => [foo|bar]
let braceRegExp = `(?:${choices.map(c => parseRegExp(c)).join('|')})`;
const braceRegExp = `(?:${choices.map(c => parseRegExp(c)).join('|')})`;
regEx += braceRegExp;
+1 -1
View File
@@ -66,7 +66,7 @@ export class HistoryNavigator<T> implements INavigator<T> {
}
private _reduceToLimit() {
let data = this._elements;
const data = this._elements;
if (data.length > this._limit) {
this._initialize(data.slice(data.length - this._limit));
}
+29 -29
View File
@@ -209,7 +209,7 @@ export function createScanner(text: string, ignoreTrivia: boolean = false): JSON
let digits = 0;
let value = 0;
while (digits < count) {
let ch = text.charCodeAt(pos);
const ch = text.charCodeAt(pos);
if (ch >= CharacterCodes._0 && ch <= CharacterCodes._9) {
value = value * 16 + ch - CharacterCodes._0;
}
@@ -240,7 +240,7 @@ export function createScanner(text: string, ignoreTrivia: boolean = false): JSON
}
function scanNumber(): string {
let start = pos;
const start = pos;
if (text.charCodeAt(pos) === CharacterCodes._0) {
pos++;
} else {
@@ -331,7 +331,7 @@ export function createScanner(text: string, ignoreTrivia: boolean = false): JSON
result += '\t';
break;
case CharacterCodes.u:
let ch = scanHexDigits(4);
const ch = scanHexDigits(4);
if (ch >= 0) {
result += String.fromCharCode(ch);
} else {
@@ -424,7 +424,7 @@ export function createScanner(text: string, ignoreTrivia: boolean = false): JSON
// comments
case CharacterCodes.slash:
let start = pos - 1;
const start = pos - 1;
// Single-line comment
if (text.charCodeAt(pos + 1) === CharacterCodes.slash) {
pos += 2;
@@ -444,10 +444,10 @@ export function createScanner(text: string, ignoreTrivia: boolean = false): JSON
if (text.charCodeAt(pos + 1) === CharacterCodes.asterisk) {
pos += 2;
let safeLength = len - 1; // For lookahead.
const safeLength = len - 1; // For lookahead.
let commentClosed = false;
while (pos < safeLength) {
let ch = text.charCodeAt(pos);
const ch = text.charCodeAt(pos);
if (ch === CharacterCodes.asterisk && text.charCodeAt(pos + 1) === CharacterCodes.slash) {
pos += 2;
@@ -720,8 +720,8 @@ interface NodeImpl extends Node {
* For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.
*/
export function getLocation(text: string, position: number): Location {
let segments: Segment[] = []; // strings or numbers
let earlyReturnException = new Object();
const segments: Segment[] = []; // strings or numbers
const earlyReturnException = new Object();
let previousNode: NodeImpl | undefined = undefined;
const previousNodeInst: NodeImpl = {
value: {},
@@ -800,7 +800,7 @@ export function getLocation(text: string, position: number): Location {
isAtPropertyKey = false;
previousNode = undefined;
} else if (sep === ',') {
let last = segments[segments.length - 1];
const last = segments[segments.length - 1];
if (typeof last === 'number') {
segments[segments.length - 1] = last + 1;
} else {
@@ -843,7 +843,7 @@ export function getLocation(text: string, position: number): Location {
export function parse(text: string, errors: ParseError[] = [], options: ParseOptions = ParseOptions.DEFAULT): any {
let currentProperty: string | null = null;
let currentParent: any = [];
let previousParents: any[] = [];
const previousParents: any[] = [];
function onValue(value: any) {
if (Array.isArray(currentParent)) {
@@ -853,9 +853,9 @@ export function parse(text: string, errors: ParseError[] = [], options: ParseOpt
}
}
let visitor: JSONVisitor = {
const visitor: JSONVisitor = {
onObjectBegin: () => {
let object = {};
const object = {};
onValue(object);
previousParents.push(currentParent);
currentParent = object;
@@ -868,7 +868,7 @@ export function parse(text: string, errors: ParseError[] = [], options: ParseOpt
currentParent = previousParents.pop();
},
onArrayBegin: () => {
let array: any[] = [];
const array: any[] = [];
onValue(array);
previousParents.push(currentParent);
currentParent = array;
@@ -905,7 +905,7 @@ export function parseTree(text: string, errors: ParseError[] = [], options: Pars
return valueNode;
}
let visitor: JSONVisitor = {
const visitor: JSONVisitor = {
onObjectBegin: (offset: number) => {
currentParent = onValue({ type: 'object', offset, length: -1, parent: currentParent, children: [] });
},
@@ -945,7 +945,7 @@ export function parseTree(text: string, errors: ParseError[] = [], options: Pars
};
visit(text, visitor, options);
let result = currentParent.children![0];
const result = currentParent.children![0];
if (result) {
delete result.parent;
}
@@ -977,7 +977,7 @@ export function findNodeAtLocation(root: Node, path: JSONPath): Node | undefined
return undefined;
}
} else {
let index = <number>segment;
const index = <number>segment;
if (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {
return undefined;
}
@@ -994,12 +994,12 @@ export function getNodePath(node: Node): JSONPath {
if (!node.parent || !node.parent.children) {
return [];
}
let path = getNodePath(node.parent);
const path = getNodePath(node.parent);
if (node.parent.type === 'property') {
let key = node.parent.children[0].value;
const key = node.parent.children[0].value;
path.push(key);
} else if (node.parent.type === 'array') {
let index = node.parent.children.indexOf(node);
const index = node.parent.children.indexOf(node);
if (index !== -1) {
path.push(index);
}
@@ -1015,9 +1015,9 @@ export function getNodeValue(node: Node): any {
case 'array':
return node.children!.map(getNodeValue);
case 'object':
let obj = Object.create(null);
const obj = Object.create(null);
for (let prop of node.children!) {
let valueNode = prop.children![1];
const valueNode = prop.children![1];
if (valueNode) {
obj[prop.children![0].value] = getNodeValue(valueNode);
}
@@ -1043,10 +1043,10 @@ export function contains(node: Node, offset: number, includeRightBound = false):
*/
export function findNodeAtOffset(node: Node, offset: number, includeRightBound = false): Node | undefined {
if (contains(node, offset, includeRightBound)) {
let children = node.children;
const children = node.children;
if (Array.isArray(children)) {
for (let i = 0; i < children.length && children[i].offset <= offset; i++) {
let item = findNodeAtOffset(children[i], offset, includeRightBound);
const item = findNodeAtOffset(children[i], offset, includeRightBound);
if (item) {
return item;
}
@@ -1064,7 +1064,7 @@ export function findNodeAtOffset(node: Node, offset: number, includeRightBound =
*/
export function visit(text: string, visitor: JSONVisitor, options: ParseOptions = ParseOptions.DEFAULT): any {
let _scanner = createScanner(text, false);
const _scanner = createScanner(text, false);
function toNoArgVisit(visitFunction?: (offset: number, length: number) => void): () => void {
return visitFunction ? () => visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;
@@ -1073,7 +1073,7 @@ export function visit(text: string, visitor: JSONVisitor, options: ParseOptions
return visitFunction ? (arg: T) => visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength()) : () => true;
}
let onObjectBegin = toNoArgVisit(visitor.onObjectBegin),
const onObjectBegin = toNoArgVisit(visitor.onObjectBegin),
onObjectProperty = toOneArgVisit(visitor.onObjectProperty),
onObjectEnd = toNoArgVisit(visitor.onObjectEnd),
onArrayBegin = toNoArgVisit(visitor.onArrayBegin),
@@ -1083,11 +1083,11 @@ export function visit(text: string, visitor: JSONVisitor, options: ParseOptions
onComment = toNoArgVisit(visitor.onComment),
onError = toOneArgVisit(visitor.onError);
let disallowComments = options && options.disallowComments;
let allowTrailingComma = options && options.allowTrailingComma;
const disallowComments = options && options.disallowComments;
const allowTrailingComma = options && options.allowTrailingComma;
function scanNext(): SyntaxKind {
while (true) {
let token = _scanner.scan();
const token = _scanner.scan();
switch (_scanner.getTokenError()) {
case ScanError.InvalidUnicode:
handleError(ParseErrorCode.InvalidUnicode);
@@ -1148,7 +1148,7 @@ export function visit(text: string, visitor: JSONVisitor, options: ParseOptions
}
function parseString(isValue: boolean): boolean {
let value = _scanner.getTokenValue();
const value = _scanner.getTokenValue();
if (isValue) {
onLiteralValue(value);
} else {
+21 -21
View File
@@ -12,9 +12,9 @@ export function removeProperty(text: string, path: JSONPath, formattingOptions:
}
export function setProperty(text: string, originalPath: JSONPath, value: any, formattingOptions: FormattingOptions, getInsertionIndex?: (properties: string[]) => number): Edit[] {
let path = originalPath.slice();
let errors: ParseError[] = [];
let root = parseTree(text, errors);
const path = originalPath.slice();
const errors: ParseError[] = [];
const root = parseTree(text, errors);
let parent: Node | undefined = undefined;
let lastSegment: Segment | undefined = undefined;
@@ -39,24 +39,24 @@ export function setProperty(text: string, originalPath: JSONPath, value: any, fo
}
return withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, formattingOptions);
} else if (parent.type === 'object' && typeof lastSegment === 'string' && Array.isArray(parent.children)) {
let existing = findNodeAtLocation(parent, [lastSegment]);
const existing = findNodeAtLocation(parent, [lastSegment]);
if (existing !== undefined) {
if (value === undefined) { // delete
if (!existing.parent) {
throw new Error('Malformed AST');
}
let propertyIndex = parent.children.indexOf(existing.parent);
const propertyIndex = parent.children.indexOf(existing.parent);
let removeBegin: number;
let removeEnd = existing.parent.offset + existing.parent.length;
if (propertyIndex > 0) {
// remove the comma of the previous node
let previous = parent.children[propertyIndex - 1];
const previous = parent.children[propertyIndex - 1];
removeBegin = previous.offset + previous.length;
} else {
removeBegin = parent.offset + 1;
if (parent.children.length > 1) {
// remove the comma of the next node
let next = parent.children[1];
const next = parent.children[1];
removeEnd = next.offset;
}
}
@@ -69,11 +69,11 @@ export function setProperty(text: string, originalPath: JSONPath, value: any, fo
if (value === undefined) { // delete
return []; // property does not exist, nothing to do
}
let newProperty = `${JSON.stringify(lastSegment)}: ${JSON.stringify(value)}`;
let index = getInsertionIndex ? getInsertionIndex(parent.children.map(p => p.children![0].value)) : parent.children.length;
const newProperty = `${JSON.stringify(lastSegment)}: ${JSON.stringify(value)}`;
const index = getInsertionIndex ? getInsertionIndex(parent.children.map(p => p.children![0].value)) : parent.children.length;
let edit: Edit;
if (index > 0) {
let previous = parent.children[index - 1];
const previous = parent.children[index - 1];
edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };
} else if (parent.children.length === 0) {
edit = { offset: parent.offset + 1, length: 0, content: newProperty };
@@ -83,32 +83,32 @@ export function setProperty(text: string, originalPath: JSONPath, value: any, fo
return withFormatting(text, edit, formattingOptions);
}
} else if (parent.type === 'array' && typeof lastSegment === 'number' && Array.isArray(parent.children)) {
let insertIndex = lastSegment;
const insertIndex = lastSegment;
if (insertIndex === -1) {
// Insert
let newProperty = `${JSON.stringify(value)}`;
const newProperty = `${JSON.stringify(value)}`;
let edit: Edit;
if (parent.children.length === 0) {
edit = { offset: parent.offset + 1, length: 0, content: newProperty };
} else {
let previous = parent.children[parent.children.length - 1];
const previous = parent.children[parent.children.length - 1];
edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };
}
return withFormatting(text, edit, formattingOptions);
} else {
if (value === undefined && parent.children.length >= 0) {
//Removal
let removalIndex = lastSegment;
let toRemove = parent.children[removalIndex];
const removalIndex = lastSegment;
const toRemove = parent.children[removalIndex];
let edit: Edit;
if (parent.children.length === 1) {
// only item
edit = { offset: parent.offset + 1, length: parent.length - 2, content: '' };
} else if (parent.children.length - 1 === removalIndex) {
// last item
let previous = parent.children[removalIndex - 1];
let offset = previous.offset + previous.length;
let parentEndOffset = parent.offset + parent.length;
const previous = parent.children[removalIndex - 1];
const offset = previous.offset + previous.length;
const parentEndOffset = parent.offset + parent.length;
edit = { offset, length: parentEndOffset - 2 - offset, content: '' };
} else {
edit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: '' };
@@ -139,18 +139,18 @@ function withFormatting(text: string, edit: Edit, formattingOptions: FormattingO
}
}
let edits = format(newText, { offset: begin, length: end - begin }, formattingOptions);
const edits = format(newText, { offset: begin, length: end - begin }, formattingOptions);
// apply the formatting edits and track the begin and end offsets of the changes
for (let i = edits.length - 1; i >= 0; i--) {
let edit = edits[i];
const edit = edits[i];
newText = applyEdit(newText, edit);
begin = Math.min(begin, edit.offset);
end = Math.max(end, edit.offset + edit.length);
end += edit.content.length - edit.length;
}
// create a single edit with all changes
let editLength = text.length - (newText.length - end) - begin;
const editLength = text.length - (newText.length - end) - begin;
return [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];
}
+10 -10
View File
@@ -80,7 +80,7 @@ export function format(documentText: string, range: Range | undefined, options:
rangeStart = 0;
rangeEnd = documentText.length;
}
let eol = getEOL(options, documentText);
const eol = getEOL(options, documentText);
let lineBreak = false;
let indentLevel = 0;
@@ -91,7 +91,7 @@ export function format(documentText: string, range: Range | undefined, options:
indentValue = '\t';
}
let scanner = createScanner(formatText, false);
const scanner = createScanner(formatText, false);
let hasError = false;
function newLineAndIndent(): string {
@@ -107,7 +107,7 @@ export function format(documentText: string, range: Range | undefined, options:
hasError = token === SyntaxKind.Unknown || scanner.getTokenError() !== ScanError.None;
return token;
}
let editOperations: Edit[] = [];
const editOperations: Edit[] = [];
function addEdit(text: string, startOffset: number, endOffset: number) {
if (!hasError && startOffset < rangeEnd && endOffset > rangeStart && documentText.substring(startOffset, endOffset) !== text) {
editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });
@@ -117,8 +117,8 @@ export function format(documentText: string, range: Range | undefined, options:
let firstToken = scanNext();
if (firstToken !== SyntaxKind.EOF) {
let firstTokenStart = scanner.getTokenOffset() + formatTextStart;
let initialIndent = repeat(indentValue, initialIndentLevel);
const firstTokenStart = scanner.getTokenOffset() + formatTextStart;
const initialIndent = repeat(indentValue, initialIndentLevel);
addEdit(initialIndent, formatTextStart, firstTokenStart);
}
@@ -129,7 +129,7 @@ export function format(documentText: string, range: Range | undefined, options:
let replaceContent = '';
while (!lineBreak && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {
// comments on the same line: keep them on the same line, but ignore them otherwise
let commentTokenStart = scanner.getTokenOffset() + formatTextStart;
const commentTokenStart = scanner.getTokenOffset() + formatTextStart;
addEdit(' ', firstTokenEnd, commentTokenStart);
firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
replaceContent = secondToken === SyntaxKind.LineCommentTrivia ? newLineAndIndent() : '';
@@ -195,7 +195,7 @@ export function format(documentText: string, range: Range | undefined, options:
}
}
let secondTokenStart = scanner.getTokenOffset() + formatTextStart;
const secondTokenStart = scanner.getTokenOffset() + formatTextStart;
addEdit(replaceContent, firstTokenEnd, secondTokenStart);
firstToken = secondToken;
}
@@ -213,9 +213,9 @@ function repeat(s: string, count: number): string {
function computeIndentLevel(content: string, options: FormattingOptions): number {
let i = 0;
let nChars = 0;
let tabSize = options.tabSize || 4;
const tabSize = options.tabSize || 4;
while (i < content.length) {
let ch = content.charAt(i);
const ch = content.charAt(i);
if (ch === ' ') {
nChars++;
} else if (ch === '\t') {
@@ -230,7 +230,7 @@ function computeIndentLevel(content: string, options: FormattingOptions): number
function getEOL(options: FormattingOptions, text: string): string {
for (let i = 0; i < text.length; i++) {
let ch = text.charAt(i);
const ch = text.charAt(i);
if (ch === '\r') {
if (i + 1 < text.length && text.charAt(i + 1) === '\n') {
return '\r\n';
+5 -5
View File
@@ -407,7 +407,7 @@ export const enum KeyMod {
}
export function KeyChord(firstPart: number, secondPart: number): number {
let chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;
const chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;
return (firstPart | chordPart) >>> 0;
}
@@ -466,10 +466,10 @@ export class SimpleKeybinding {
}
public getHashCode(): string {
let ctrl = this.ctrlKey ? '1' : '0';
let shift = this.shiftKey ? '1' : '0';
let alt = this.altKey ? '1' : '0';
let meta = this.metaKey ? '1' : '0';
const ctrl = this.ctrlKey ? '1' : '0';
const shift = this.shiftKey ? '1' : '0';
const alt = this.altKey ? '1' : '0';
const meta = this.metaKey ? '1' : '0';
return `${ctrl}${shift}${alt}${meta}${this.keyCode}`;
}
+2 -2
View File
@@ -41,7 +41,7 @@ export class ModifierLabelProvider {
return null;
}
let result: string[] = [];
const result: string[] = [];
for (let i = 0, len = parts.length; i < len; i++) {
const part = parts[i];
const keyLabel = keyLabelProvider(part);
@@ -162,7 +162,7 @@ function _simpleAsString(modifiers: Modifiers, key: string, labels: ModifierLabe
return '';
}
let result: string[] = [];
const result: string[] = [];
// translate modifier keys: Ctrl-Shift-Alt-Meta
if (modifiers.ctrlKey) {
+2 -2
View File
@@ -85,7 +85,7 @@ export class KeybindingParser {
return null;
}
let parts: SimpleKeybinding[] = [];
const parts: SimpleKeybinding[] = [];
let part: SimpleKeybinding;
do {
@@ -112,7 +112,7 @@ export class KeybindingParser {
return [];
}
let parts: (SimpleKeybinding | ScanCodeBinding)[] = [];
const parts: (SimpleKeybinding | ScanCodeBinding)[] = [];
let part: SimpleKeybinding | ScanCodeBinding;
while (input.length > 0) {
+1 -1
View File
@@ -283,7 +283,7 @@ interface ISegment {
* @param value string to which templating is applied
* @param values the values of the templates to use
*/
export function template(template: string, values: { [key: string]: string | ISeparator } = Object.create(null)): string {
export function template(template: string, values: { [key: string]: string | ISeparator | null } = Object.create(null)): string {
const segments: ISegment[] = [];
let inVariable = false;

Some files were not shown because too many files have changed in this diff Show More