Merge branch 'master' into patch-2
1
.mailmap
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Eric Amodio <eamodio@microsoft.com> Eric Amodio <eamodio@gmail.com>
|
|
@ -59,7 +59,7 @@ export const config = {
|
||||||
darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'),
|
darwinBundleDocumentType(["asp", "aspx", "cshtml", "htm", "html", "jshtm", "jsp", "phtml", "shtml"], 'resources/darwin/html.icns'),
|
||||||
darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'),
|
darwinBundleDocumentType(["jade"], 'resources/darwin/jade.icns'),
|
||||||
darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'),
|
darwinBundleDocumentType(["jav", "java"], 'resources/darwin/java.icns'),
|
||||||
darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs"], 'resources/darwin/javascript.icns'),
|
darwinBundleDocumentType(["js", "jscsrc", "jshintrc", "mjs", "cjs"], 'resources/darwin/javascript.icns'),
|
||||||
darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'),
|
darwinBundleDocumentType(["json"], 'resources/darwin/json.icns'),
|
||||||
darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'),
|
darwinBundleDocumentType(["less"], 'resources/darwin/less.icns'),
|
||||||
darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'),
|
darwinBundleDocumentType(["markdown", "md", "mdoc", "mdown", "mdtext", "mdtxt", "mdwn", "mkd", "mkdn"], 'resources/darwin/markdown.icns'),
|
||||||
|
|
|
@ -182,6 +182,13 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc";
|
||||||
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles
|
||||||
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
|
||||||
|
|
||||||
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cjs\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
|
||||||
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.cjs\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.cjs"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
|
||||||
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,JavaScript}"; Flags: uninsdeletekey; Tasks: associatewithfiles
|
||||||
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles
|
||||||
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles
|
||||||
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles
|
||||||
|
|
||||||
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clj\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clj\OpenWithProgids"; ValueType: none; ValueName: "{#RegValueName}"; Flags: deletevalue uninsdeletevalue; Tasks: associatewithfiles
|
||||||
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clj\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.clj"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\.clj\OpenWithProgids"; ValueType: string; ValueName: "{#RegValueName}.clj"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatewithfiles
|
||||||
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Clojure}"; Flags: uninsdeletekey; Tasks: associatewithfiles
|
Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,Clojure}"; Flags: uninsdeletekey; Tasks: associatewithfiles
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
".js",
|
".js",
|
||||||
".es6",
|
".es6",
|
||||||
".mjs",
|
".mjs",
|
||||||
|
".cjs",
|
||||||
".pac"
|
".pac"
|
||||||
],
|
],
|
||||||
"filenames": [
|
"filenames": [
|
||||||
|
|
|
@ -957,7 +957,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"fenced_code_block_js": {
|
"fenced_code_block_js": {
|
||||||
"begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(js|jsx|javascript|es6|mjs|\\{\\.js.+?\\})((\\s+|:|\\{)[^`~]*)?$)",
|
"begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(js|jsx|javascript|es6|mjs|cjs|\\{\\.js.+?\\})((\\s+|:|\\{)[^`~]*)?$)",
|
||||||
"name": "markup.fenced_code.block.markdown",
|
"name": "markup.fenced_code.block.markdown",
|
||||||
"end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$",
|
"end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$",
|
||||||
"beginCaptures": {
|
"beginCaptures": {
|
||||||
|
@ -2623,4 +2623,4 @@
|
||||||
"name": "markup.inline.raw.string.markdown"
|
"name": "markup.inline.raw.string.markdown"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -490,6 +490,9 @@ export class DynamicMarkdownPreview extends Disposable {
|
||||||
}
|
}
|
||||||
|
|
||||||
private async onDidClickPreview(line: number): Promise<void> {
|
private async onDidClickPreview(line: number): Promise<void> {
|
||||||
|
// fix #82457, find currently opened but unfocused source tab
|
||||||
|
await vscode.commands.executeCommand('markdown.showSource');
|
||||||
|
|
||||||
for (const visibleEditor of vscode.window.visibleTextEditors) {
|
for (const visibleEditor of vscode.window.visibleTextEditors) {
|
||||||
if (this.isPreviewOf(visibleEditor.document.uri)) {
|
if (this.isPreviewOf(visibleEditor.document.uri)) {
|
||||||
const editor = await vscode.window.showTextDocument(visibleEditor.document, visibleEditor.viewColumn);
|
const editor = await vscode.window.showTextDocument(visibleEditor.document, visibleEditor.viewColumn);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "Dependencies shared by all extensions",
|
"description": "Dependencies shared by all extensions",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"typescript": "3.7.3-insiders.20191118"
|
"typescript": "3.7.3-insiders.20191123"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "node ./postinstall"
|
"postinstall": "node ./postinstall"
|
||||||
|
|
3
extensions/search-result/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Language Features for Search Result files
|
||||||
|
|
||||||
|
**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
|
20
extensions/search-result/extension.webpack.config.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
//@ts-check
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const withDefaults = require('../shared.webpack.config');
|
||||||
|
|
||||||
|
module.exports = withDefaults({
|
||||||
|
context: __dirname,
|
||||||
|
resolve: {
|
||||||
|
mainFields: ['module', 'main']
|
||||||
|
},
|
||||||
|
entry: {
|
||||||
|
extension: './src/extension.ts',
|
||||||
|
}
|
||||||
|
});
|
64
extensions/search-result/package.json
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{
|
||||||
|
"name": "search-result",
|
||||||
|
"displayName": "%displayName%",
|
||||||
|
"description": "%description%",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"publisher": "vscode",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"vscode": "^1.39.0"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"Programming Languages"
|
||||||
|
],
|
||||||
|
"main": "./out/extension.js",
|
||||||
|
"activationEvents": [
|
||||||
|
"*"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"vscode:prepublish": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:search-result ./tsconfig.json"
|
||||||
|
},
|
||||||
|
"contributes": {
|
||||||
|
"commands": [
|
||||||
|
{
|
||||||
|
"command": "searchResult.rerunSearch",
|
||||||
|
"title": "%searchResult.rerunSearch.title%",
|
||||||
|
"category": "Search Result",
|
||||||
|
"icon": {
|
||||||
|
"light": "./src/media/refresh-light.svg",
|
||||||
|
"dark": "./src/media/refresh-dark.svg"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"menus": {
|
||||||
|
"editor/title": [
|
||||||
|
{
|
||||||
|
"command": "searchResult.rerunSearch",
|
||||||
|
"when": "editorLangId == search-result",
|
||||||
|
"group": "navigation"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"id": "search-result",
|
||||||
|
"extensions": [
|
||||||
|
".code-search"
|
||||||
|
],
|
||||||
|
"aliases": [
|
||||||
|
"Search Result"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"grammars": [
|
||||||
|
{
|
||||||
|
"language": "search-result",
|
||||||
|
"scopeName": "text.searchResult",
|
||||||
|
"path": "./syntaxes/searchResult.tmLanguage.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"vscode": "^1.1.36"
|
||||||
|
}
|
||||||
|
}
|
5
extensions/search-result/package.nls.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"displayName": "Search Result",
|
||||||
|
"description": "Provides syntax highlighting and language features for tabbed search results.",
|
||||||
|
"searchResult.rerunSearch.title": "Search Again"
|
||||||
|
}
|
159
extensions/search-result/src/extension.ts
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import * as vscode from 'vscode';
|
||||||
|
import * as pathUtils from 'path';
|
||||||
|
|
||||||
|
const FILE_LINE_REGEX = /^(\S.*):$/;
|
||||||
|
const RESULT_LINE_REGEX = /^(\s+)(\d+):(\s+)(.*)$/;
|
||||||
|
const LANGUAGE_SELECTOR = { language: 'search-result' };
|
||||||
|
|
||||||
|
let cachedLastParse: { version: number, parse: ParsedSearchResults } | undefined;
|
||||||
|
|
||||||
|
export function activate() {
|
||||||
|
|
||||||
|
vscode.commands.registerCommand('searchResult.rerunSearch', () => vscode.commands.executeCommand('search.action.rerunEditorSearch'));
|
||||||
|
|
||||||
|
vscode.languages.registerCompletionItemProvider(LANGUAGE_SELECTOR, {
|
||||||
|
provideCompletionItems(document: vscode.TextDocument, position: vscode.Position): vscode.CompletionItem[] {
|
||||||
|
const line = document.lineAt(position.line);
|
||||||
|
if (line.text.indexOf('# Flags:') === -1) { return []; }
|
||||||
|
|
||||||
|
return ['RegExp', 'CaseSensitive', 'IgnoreExcludeSettings', 'WordMatch']
|
||||||
|
.filter(flag => line.text.indexOf(flag) === -1)
|
||||||
|
.map(flag => ({ label: flag, insertText: flag + ' ' }));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
vscode.languages.registerDefinitionProvider(LANGUAGE_SELECTOR, {
|
||||||
|
provideDefinition(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.DefinitionLink[] {
|
||||||
|
const lineResult = parseSearchResults(document, token)[position.line];
|
||||||
|
if (!lineResult) { return []; }
|
||||||
|
if (lineResult.type === 'file') {
|
||||||
|
// TODO: The multi-match peek UX isnt very smooth.
|
||||||
|
// return lineResult.allLocations.length > 1 ? lineResult.allLocations : [lineResult.location];
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [lineResult.location];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
vscode.languages.registerDocumentLinkProvider(LANGUAGE_SELECTOR, {
|
||||||
|
async provideDocumentLinks(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.DocumentLink[]> {
|
||||||
|
return parseSearchResults(document, token)
|
||||||
|
.filter(({ type }) => type === 'file')
|
||||||
|
.map(({ location }) => ({ range: location.originSelectionRange!, target: location.targetUri }));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
vscode.window.onDidChangeActiveTextEditor(e => {
|
||||||
|
if (e?.document.languageId === 'search-result') {
|
||||||
|
// Clear the parse whenever we open a new editor.
|
||||||
|
// Conservative because things like the URI might remain constant even if the contents change, and re-parsing even large files is relatively fast.
|
||||||
|
cachedLastParse = undefined;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function relativePathToUri(path: string, resultsUri: vscode.Uri): vscode.Uri | undefined {
|
||||||
|
if (pathUtils.isAbsolute(path)) { return vscode.Uri.file(path); }
|
||||||
|
if (path.indexOf('~/') === 0) {
|
||||||
|
return vscode.Uri.file(pathUtils.join(process.env.HOME!, path.slice(2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (vscode.workspace.workspaceFolders) {
|
||||||
|
const multiRootFormattedPath = /^(.*) • (.*)$/.exec(path);
|
||||||
|
if (multiRootFormattedPath) {
|
||||||
|
const [, workspaceName, workspacePath] = multiRootFormattedPath;
|
||||||
|
const folder = vscode.workspace.workspaceFolders.filter(wf => wf.name === workspaceName)[0];
|
||||||
|
if (folder) {
|
||||||
|
return vscode.Uri.file(pathUtils.join(folder.uri.fsPath, workspacePath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (vscode.workspace.workspaceFolders.length === 1) {
|
||||||
|
return vscode.Uri.file(pathUtils.join(vscode.workspace.workspaceFolders[0].uri.fsPath, path));
|
||||||
|
} else if (resultsUri.scheme !== 'untitled') {
|
||||||
|
// We're in a multi-root workspace, but the path is not multi-root formatted
|
||||||
|
// Possibly a saved search from a single root session. Try checking if the search result document's URI is in a current workspace folder.
|
||||||
|
const prefixMatch = vscode.workspace.workspaceFolders.filter(wf => resultsUri.toString().startsWith(wf.uri.toString()))[0];
|
||||||
|
if (prefixMatch) { return vscode.Uri.file(pathUtils.join(prefixMatch.uri.fsPath, path)); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.error(`Unable to resolve path ${path}`);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
type ParsedSearchResults = Array<
|
||||||
|
{ type: 'file', location: vscode.LocationLink, allLocations: vscode.LocationLink[] } |
|
||||||
|
{ type: 'result', location: vscode.LocationLink }
|
||||||
|
>;
|
||||||
|
|
||||||
|
function parseSearchResults(document: vscode.TextDocument, token: vscode.CancellationToken): ParsedSearchResults {
|
||||||
|
|
||||||
|
if (cachedLastParse && cachedLastParse.version === document.version) {
|
||||||
|
return cachedLastParse.parse;
|
||||||
|
}
|
||||||
|
|
||||||
|
const lines = document.getText().split(/\r?\n/);
|
||||||
|
const links: ParsedSearchResults = [];
|
||||||
|
|
||||||
|
let currentTarget: vscode.Uri | undefined = undefined;
|
||||||
|
let currentTargetLocations: vscode.LocationLink[] | undefined = undefined;
|
||||||
|
|
||||||
|
for (let i = 0; i < lines.length; i++) {
|
||||||
|
if (token.isCancellationRequested) { return []; }
|
||||||
|
const line = lines[i];
|
||||||
|
|
||||||
|
const fileLine = FILE_LINE_REGEX.exec(line);
|
||||||
|
if (fileLine) {
|
||||||
|
const [, path] = fileLine;
|
||||||
|
|
||||||
|
currentTarget = relativePathToUri(path, document.uri);
|
||||||
|
if (!currentTarget) { continue; }
|
||||||
|
currentTargetLocations = [];
|
||||||
|
|
||||||
|
const location: vscode.LocationLink = {
|
||||||
|
targetRange: new vscode.Range(0, 0, 0, 1),
|
||||||
|
targetUri: currentTarget,
|
||||||
|
originSelectionRange: new vscode.Range(i, 0, i, line.length),
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
links[i] = { type: 'file', location, allLocations: currentTargetLocations };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!currentTarget) { continue; }
|
||||||
|
|
||||||
|
const resultLine = RESULT_LINE_REGEX.exec(line);
|
||||||
|
if (resultLine) {
|
||||||
|
const [, indentation, _lineNumber, resultIndentation] = resultLine;
|
||||||
|
const lineNumber = +_lineNumber - 1;
|
||||||
|
const resultStart = (indentation + _lineNumber + ':' + resultIndentation).length;
|
||||||
|
|
||||||
|
const location: vscode.LocationLink = {
|
||||||
|
targetRange: new vscode.Range(Math.max(lineNumber - 3, 0), 0, lineNumber + 3, line.length),
|
||||||
|
targetSelectionRange: new vscode.Range(lineNumber, 0, lineNumber, line.length),
|
||||||
|
targetUri: currentTarget,
|
||||||
|
originSelectionRange: new vscode.Range(i, resultStart, i, line.length),
|
||||||
|
};
|
||||||
|
|
||||||
|
currentTargetLocations?.push(location);
|
||||||
|
|
||||||
|
links[i] = { type: 'result', location };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedLastParse = {
|
||||||
|
version: document.version,
|
||||||
|
parse: links
|
||||||
|
};
|
||||||
|
|
||||||
|
return links;
|
||||||
|
}
|
4
extensions/search-result/src/media/refresh-dark.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.56253 2.51577C3.46348 3.4501 2 5.55414 2 7.99999C2 11.3137 4.68629 14 8 14C11.3137 14 14 11.3137 14 7.99999C14 5.32519 12.2497 3.05919 9.83199 2.28482L9.52968 3.23832C11.5429 3.88454 13 5.7721 13 7.99999C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 7.99999C3 6.31104 3.83742 4.81767 5.11969 3.91245L5.56253 2.51577Z" fill="#C5C5C5"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3H2V2H5.5L6 2.5V6H5V3Z" fill="#C5C5C5"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 587 B |
4
extensions/search-result/src/media/refresh-light.svg
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.56253 2.51577C3.46348 3.4501 2 5.55414 2 7.99999C2 11.3137 4.68629 14 8 14C11.3137 14 14 11.3137 14 7.99999C14 5.32519 12.2497 3.05919 9.83199 2.28482L9.52968 3.23832C11.5429 3.88454 13 5.7721 13 7.99999C13 10.7614 10.7614 13 8 13C5.23858 13 3 10.7614 3 7.99999C3 6.31104 3.83742 4.81767 5.11969 3.91245L5.56253 2.51577Z" fill="#424242"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3H2V2H5.5L6 2.5V6H5V3Z" fill="#424242"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 587 B |
7
extensions/search-result/src/typings/refs.d.ts
vendored
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/// <reference path='../../../../src/vs/vscode.d.ts'/>
|
||||||
|
/// <reference path='../../../../src/vs/vscode.proposed.d.ts'/>
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"name": "Search Results",
|
||||||
|
"scopeName": "text.searchResult",
|
||||||
|
"patterns": [
|
||||||
|
{
|
||||||
|
"match": "^# (Query|Flags|Including|Excluding): .*$",
|
||||||
|
"name": "comment"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "^\\S.*:$",
|
||||||
|
"name": "string path.searchResult"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"match": "^ \\d+",
|
||||||
|
"name": "constant.numeric lineNumber.searchResult"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
9
extensions/search-result/tsconfig.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"extends": "../shared.tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./out",
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src/**/*"
|
||||||
|
]
|
||||||
|
}
|
602
extensions/search-result/yarn.lock
Normal file
|
@ -0,0 +1,602 @@
|
||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
agent-base@4, agent-base@^4.3.0:
|
||||||
|
version "4.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
|
||||||
|
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
|
||||||
|
dependencies:
|
||||||
|
es6-promisify "^5.0.0"
|
||||||
|
|
||||||
|
ajv@^6.5.5:
|
||||||
|
version "6.10.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
|
||||||
|
integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
|
||||||
|
dependencies:
|
||||||
|
fast-deep-equal "^2.0.1"
|
||||||
|
fast-json-stable-stringify "^2.0.0"
|
||||||
|
json-schema-traverse "^0.4.1"
|
||||||
|
uri-js "^4.2.2"
|
||||||
|
|
||||||
|
asn1@~0.2.3:
|
||||||
|
version "0.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
|
||||||
|
integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
|
||||||
|
dependencies:
|
||||||
|
safer-buffer "~2.1.0"
|
||||||
|
|
||||||
|
assert-plus@1.0.0, assert-plus@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||||
|
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
||||||
|
|
||||||
|
asynckit@^0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||||
|
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||||
|
|
||||||
|
aws-sign2@~0.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
||||||
|
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
||||||
|
|
||||||
|
aws4@^1.8.0:
|
||||||
|
version "1.8.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
|
||||||
|
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
|
||||||
|
|
||||||
|
balanced-match@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
|
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||||
|
|
||||||
|
bcrypt-pbkdf@^1.0.0:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
|
||||||
|
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
|
||||||
|
dependencies:
|
||||||
|
tweetnacl "^0.14.3"
|
||||||
|
|
||||||
|
brace-expansion@^1.1.7:
|
||||||
|
version "1.1.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
browser-stdout@1.3.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
|
||||||
|
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
|
||||||
|
|
||||||
|
buffer-from@^1.0.0:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||||
|
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
||||||
|
|
||||||
|
caseless@~0.12.0:
|
||||||
|
version "0.12.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||||
|
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||||
|
|
||||||
|
combined-stream@^1.0.6, combined-stream@~1.0.6:
|
||||||
|
version "1.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||||
|
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||||
|
dependencies:
|
||||||
|
delayed-stream "~1.0.0"
|
||||||
|
|
||||||
|
commander@2.15.1:
|
||||||
|
version "2.15.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
|
||||||
|
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
|
||||||
|
|
||||||
|
concat-map@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||||
|
|
||||||
|
core-util-is@1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
|
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||||
|
|
||||||
|
dashdash@^1.12.0:
|
||||||
|
version "1.14.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||||
|
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
|
||||||
|
dependencies:
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
delayed-stream@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||||
|
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
|
||||||
|
|
||||||
|
diff@3.5.0:
|
||||||
|
version "3.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
||||||
|
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
|
||||||
|
|
||||||
|
ecc-jsbn@~0.1.1:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
|
||||||
|
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
|
||||||
|
dependencies:
|
||||||
|
jsbn "~0.1.0"
|
||||||
|
safer-buffer "^2.1.0"
|
||||||
|
|
||||||
|
es6-promise@^4.0.3:
|
||||||
|
version "4.2.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
|
||||||
|
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
escape-string-regexp@1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
|
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||||
|
|
||||||
|
extend@~3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||||
|
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||||
|
|
||||||
|
extsprintf@1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
|
||||||
|
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
|
||||||
|
|
||||||
|
extsprintf@^1.2.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
||||||
|
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
||||||
|
|
||||||
|
fast-deep-equal@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
|
||||||
|
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
|
||||||
|
|
||||||
|
fast-json-stable-stringify@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
|
||||||
|
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
|
||||||
|
|
||||||
|
forever-agent@~0.6.1:
|
||||||
|
version "0.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||||
|
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||||
|
|
||||||
|
form-data@~2.3.2:
|
||||||
|
version "2.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||||
|
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
|
||||||
|
dependencies:
|
||||||
|
asynckit "^0.4.0"
|
||||||
|
combined-stream "^1.0.6"
|
||||||
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
|
fs.realpath@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
|
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||||
|
|
||||||
|
getpass@^0.1.1:
|
||||||
|
version "0.1.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
||||||
|
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
|
||||||
|
dependencies:
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
|
||||||
|
glob@7.1.2:
|
||||||
|
version "7.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
|
||||||
|
integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
glob@^7.1.2:
|
||||||
|
version "7.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||||
|
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
growl@1.10.5:
|
||||||
|
version "1.10.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
|
||||||
|
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
|
||||||
|
|
||||||
|
har-schema@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
||||||
|
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
|
||||||
|
|
||||||
|
har-validator@~5.1.0:
|
||||||
|
version "5.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
|
||||||
|
integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
|
||||||
|
dependencies:
|
||||||
|
ajv "^6.5.5"
|
||||||
|
har-schema "^2.0.0"
|
||||||
|
|
||||||
|
has-flag@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
|
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||||
|
|
||||||
|
he@1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||||
|
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
http-signature@~1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
||||||
|
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
|
||||||
|
dependencies:
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
jsprim "^1.2.2"
|
||||||
|
sshpk "^1.7.0"
|
||||||
|
|
||||||
|
https-proxy-agent@^2.2.1:
|
||||||
|
version "2.2.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
|
||||||
|
integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
|
||||||
|
dependencies:
|
||||||
|
agent-base "^4.3.0"
|
||||||
|
debug "^3.1.0"
|
||||||
|
|
||||||
|
inflight@^1.0.4:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||||
|
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
|
||||||
|
dependencies:
|
||||||
|
once "^1.3.0"
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
inherits@2:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
|
|
||||||
|
is-typedarray@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||||
|
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||||
|
|
||||||
|
isstream@~0.1.2:
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||||
|
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
||||||
|
|
||||||
|
jsbn@~0.1.0:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
||||||
|
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
|
||||||
|
|
||||||
|
json-schema-traverse@^0.4.1:
|
||||||
|
version "0.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||||
|
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
|
||||||
|
|
||||||
|
json-schema@0.2.3:
|
||||||
|
version "0.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||||
|
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
||||||
|
|
||||||
|
json-stringify-safe@~5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||||
|
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||||
|
|
||||||
|
jsprim@^1.2.2:
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
|
||||||
|
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
|
||||||
|
dependencies:
|
||||||
|
assert-plus "1.0.0"
|
||||||
|
extsprintf "1.3.0"
|
||||||
|
json-schema "0.2.3"
|
||||||
|
verror "1.10.0"
|
||||||
|
|
||||||
|
mime-db@1.40.0:
|
||||||
|
version "1.40.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
|
||||||
|
integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
|
||||||
|
|
||||||
|
mime-types@^2.1.12, mime-types@~2.1.19:
|
||||||
|
version "2.1.24"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
|
||||||
|
integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
|
||||||
|
dependencies:
|
||||||
|
mime-db "1.40.0"
|
||||||
|
|
||||||
|
minimatch@3.0.4, minimatch@^3.0.4:
|
||||||
|
version "3.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||||
|
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
|
minimist@0.0.8:
|
||||||
|
version "0.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||||
|
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
||||||
|
|
||||||
|
mkdirp@0.5.1:
|
||||||
|
version "0.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||||
|
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
||||||
|
dependencies:
|
||||||
|
minimist "0.0.8"
|
||||||
|
|
||||||
|
mocha@^5.2.0:
|
||||||
|
version "5.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
|
||||||
|
integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
|
||||||
|
dependencies:
|
||||||
|
browser-stdout "1.3.1"
|
||||||
|
commander "2.15.1"
|
||||||
|
debug "3.1.0"
|
||||||
|
diff "3.5.0"
|
||||||
|
escape-string-regexp "1.0.5"
|
||||||
|
glob "7.1.2"
|
||||||
|
growl "1.10.5"
|
||||||
|
he "1.1.1"
|
||||||
|
minimatch "3.0.4"
|
||||||
|
mkdirp "0.5.1"
|
||||||
|
supports-color "5.4.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.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||||
|
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||||
|
|
||||||
|
oauth-sign@~0.9.0:
|
||||||
|
version "0.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||||
|
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
||||||
|
|
||||||
|
once@^1.3.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
|
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||||
|
dependencies:
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
path-is-absolute@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
|
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||||
|
|
||||||
|
performance-now@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||||
|
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||||
|
|
||||||
|
psl@^1.1.24:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2"
|
||||||
|
integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==
|
||||||
|
|
||||||
|
punycode@^1.4.1:
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
|
||||||
|
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
|
||||||
|
|
||||||
|
punycode@^2.1.0:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||||
|
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||||
|
|
||||||
|
qs@~6.5.2:
|
||||||
|
version "6.5.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
||||||
|
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
||||||
|
|
||||||
|
querystringify@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
|
||||||
|
integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
|
||||||
|
|
||||||
|
request@^2.88.0:
|
||||||
|
version "2.88.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
|
||||||
|
integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
|
||||||
|
dependencies:
|
||||||
|
aws-sign2 "~0.7.0"
|
||||||
|
aws4 "^1.8.0"
|
||||||
|
caseless "~0.12.0"
|
||||||
|
combined-stream "~1.0.6"
|
||||||
|
extend "~3.0.2"
|
||||||
|
forever-agent "~0.6.1"
|
||||||
|
form-data "~2.3.2"
|
||||||
|
har-validator "~5.1.0"
|
||||||
|
http-signature "~1.2.0"
|
||||||
|
is-typedarray "~1.0.0"
|
||||||
|
isstream "~0.1.2"
|
||||||
|
json-stringify-safe "~5.0.1"
|
||||||
|
mime-types "~2.1.19"
|
||||||
|
oauth-sign "~0.9.0"
|
||||||
|
performance-now "^2.1.0"
|
||||||
|
qs "~6.5.2"
|
||||||
|
safe-buffer "^5.1.2"
|
||||||
|
tough-cookie "~2.4.3"
|
||||||
|
tunnel-agent "^0.6.0"
|
||||||
|
uuid "^3.3.2"
|
||||||
|
|
||||||
|
requires-port@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
|
||||||
|
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
|
||||||
|
|
||||||
|
safe-buffer@^5.0.1, safe-buffer@^5.1.2:
|
||||||
|
version "5.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
|
||||||
|
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
|
||||||
|
|
||||||
|
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
|
semver@^5.4.1:
|
||||||
|
version "5.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||||
|
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||||
|
|
||||||
|
source-map-support@^0.5.0:
|
||||||
|
version "0.5.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
|
||||||
|
integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
|
||||||
|
dependencies:
|
||||||
|
buffer-from "^1.0.0"
|
||||||
|
source-map "^0.6.0"
|
||||||
|
|
||||||
|
source-map@^0.6.0:
|
||||||
|
version "0.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||||
|
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||||
|
|
||||||
|
sshpk@^1.7.0:
|
||||||
|
version "1.16.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
|
||||||
|
integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
|
||||||
|
dependencies:
|
||||||
|
asn1 "~0.2.3"
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
bcrypt-pbkdf "^1.0.0"
|
||||||
|
dashdash "^1.12.0"
|
||||||
|
ecc-jsbn "~0.1.1"
|
||||||
|
getpass "^0.1.1"
|
||||||
|
jsbn "~0.1.0"
|
||||||
|
safer-buffer "^2.0.2"
|
||||||
|
tweetnacl "~0.14.0"
|
||||||
|
|
||||||
|
supports-color@5.4.0:
|
||||||
|
version "5.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
|
||||||
|
integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
|
tough-cookie@~2.4.3:
|
||||||
|
version "2.4.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
|
||||||
|
integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
|
||||||
|
dependencies:
|
||||||
|
psl "^1.1.24"
|
||||||
|
punycode "^1.4.1"
|
||||||
|
|
||||||
|
tunnel-agent@^0.6.0:
|
||||||
|
version "0.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
||||||
|
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
|
||||||
|
dependencies:
|
||||||
|
safe-buffer "^5.0.1"
|
||||||
|
|
||||||
|
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
||||||
|
version "0.14.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
||||||
|
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
||||||
|
|
||||||
|
uri-js@^4.2.2:
|
||||||
|
version "4.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
||||||
|
integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
|
||||||
|
dependencies:
|
||||||
|
punycode "^2.1.0"
|
||||||
|
|
||||||
|
url-parse@^1.4.4:
|
||||||
|
version "1.4.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278"
|
||||||
|
integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==
|
||||||
|
dependencies:
|
||||||
|
querystringify "^2.1.1"
|
||||||
|
requires-port "^1.0.0"
|
||||||
|
|
||||||
|
uuid@^3.3.2:
|
||||||
|
version "3.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
|
||||||
|
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
|
||||||
|
|
||||||
|
verror@1.10.0:
|
||||||
|
version "1.10.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
|
||||||
|
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
|
||||||
|
dependencies:
|
||||||
|
assert-plus "^1.0.0"
|
||||||
|
core-util-is "1.0.2"
|
||||||
|
extsprintf "^1.2.0"
|
||||||
|
|
||||||
|
vscode-test@^0.4.1:
|
||||||
|
version "0.4.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-0.4.3.tgz#461ebf25fc4bc93d77d982aed556658a2e2b90b8"
|
||||||
|
integrity sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==
|
||||||
|
dependencies:
|
||||||
|
http-proxy-agent "^2.1.0"
|
||||||
|
https-proxy-agent "^2.2.1"
|
||||||
|
|
||||||
|
vscode@^1.1.36:
|
||||||
|
version "1.1.36"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.1.36.tgz#5e1a0d1bf4977d0c7bc5159a9a13d5b104d4b1b6"
|
||||||
|
integrity sha512-cGFh9jmGLcTapCpPCKvn8aG/j9zVQ+0x5hzYJq5h5YyUXVGa1iamOaB2M2PZXoumQPES4qeAP1FwkI0b6tL4bQ==
|
||||||
|
dependencies:
|
||||||
|
glob "^7.1.2"
|
||||||
|
mocha "^5.2.0"
|
||||||
|
request "^2.88.0"
|
||||||
|
semver "^5.4.1"
|
||||||
|
source-map-support "^0.5.0"
|
||||||
|
url-parse "^1.4.4"
|
||||||
|
vscode-test "^0.4.1"
|
||||||
|
|
||||||
|
wrappy@1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
|
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
|
@ -33,7 +33,7 @@ function patchGrammar(grammar) {
|
||||||
|
|
||||||
function adaptToJavaScript(grammar, replacementScope) {
|
function adaptToJavaScript(grammar, replacementScope) {
|
||||||
grammar.name = 'JavaScript (with React support)';
|
grammar.name = 'JavaScript (with React support)';
|
||||||
grammar.fileTypes = ['.js', '.jsx', '.es6', '.mjs'];
|
grammar.fileTypes = ['.js', '.jsx', '.es6', '.mjs', '.cjs'];
|
||||||
grammar.scopeName = `source${replacementScope}`;
|
grammar.scopeName = `source${replacementScope}`;
|
||||||
|
|
||||||
var fixScopeNames = function (rule) {
|
var fixScopeNames = function (rule) {
|
||||||
|
|
|
@ -150,11 +150,11 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||||
case PConst.Kind.keyword:
|
case PConst.Kind.keyword:
|
||||||
return vscode.CompletionItemKind.Keyword;
|
return vscode.CompletionItemKind.Keyword;
|
||||||
case PConst.Kind.const:
|
case PConst.Kind.const:
|
||||||
return vscode.CompletionItemKind.Constant;
|
|
||||||
case PConst.Kind.let:
|
case PConst.Kind.let:
|
||||||
case PConst.Kind.variable:
|
case PConst.Kind.variable:
|
||||||
case PConst.Kind.localVariable:
|
case PConst.Kind.localVariable:
|
||||||
case PConst.Kind.alias:
|
case PConst.Kind.alias:
|
||||||
|
case PConst.Kind.parameter:
|
||||||
return vscode.CompletionItemKind.Variable;
|
return vscode.CompletionItemKind.Variable;
|
||||||
case PConst.Kind.memberVariable:
|
case PConst.Kind.memberVariable:
|
||||||
case PConst.Kind.memberGetAccessor:
|
case PConst.Kind.memberGetAccessor:
|
||||||
|
@ -169,6 +169,8 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||||
return vscode.CompletionItemKind.Method;
|
return vscode.CompletionItemKind.Method;
|
||||||
case PConst.Kind.enum:
|
case PConst.Kind.enum:
|
||||||
return vscode.CompletionItemKind.Enum;
|
return vscode.CompletionItemKind.Enum;
|
||||||
|
case PConst.Kind.enumMember:
|
||||||
|
return vscode.CompletionItemKind.EnumMember;
|
||||||
case PConst.Kind.module:
|
case PConst.Kind.module:
|
||||||
case PConst.Kind.externalModuleName:
|
case PConst.Kind.externalModuleName:
|
||||||
return vscode.CompletionItemKind.Module;
|
return vscode.CompletionItemKind.Module;
|
||||||
|
|
|
@ -12,6 +12,7 @@ export class Kind {
|
||||||
public static readonly constructSignature = 'construct';
|
public static readonly constructSignature = 'construct';
|
||||||
public static readonly directory = 'directory';
|
public static readonly directory = 'directory';
|
||||||
public static readonly enum = 'enum';
|
public static readonly enum = 'enum';
|
||||||
|
public static readonly enumMember = 'enum member';
|
||||||
public static readonly externalModuleName = 'external module name';
|
public static readonly externalModuleName = 'external module name';
|
||||||
public static readonly function = 'function';
|
public static readonly function = 'function';
|
||||||
public static readonly indexSignature = 'index';
|
public static readonly indexSignature = 'index';
|
||||||
|
@ -69,4 +70,4 @@ export class DisplayPartKind {
|
||||||
public static readonly propertyName = 'propertyName';
|
public static readonly propertyName = 'propertyName';
|
||||||
public static readonly punctuation = 'punctuation';
|
public static readonly punctuation = 'punctuation';
|
||||||
public static readonly text = 'text';
|
public static readonly text = 'text';
|
||||||
}
|
}
|
||||||
|
|
|
@ -575,11 +575,15 @@ export default class TypeScriptServiceClient extends Disposable implements IType
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = resource.fsPath;
|
let result = resource.fsPath;
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (resource.scheme === fileSchemes.file) {
|
||||||
|
result = path.normalize(result);
|
||||||
|
}
|
||||||
|
|
||||||
// Both \ and / must be escaped in regular expressions
|
// Both \ and / must be escaped in regular expressions
|
||||||
return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/');
|
return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/');
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
typescript@3.7.3-insiders.20191118:
|
typescript@3.7.3-insiders.20191123:
|
||||||
version "3.7.3-insiders.20191118"
|
version "3.7.3-insiders.20191123"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3-insiders.20191118.tgz#86d3b1de1859d70b0a081b708a223f8f3c6a4d46"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3-insiders.20191123.tgz#f3bef33a2a3f6e02f11bcc0c20b6f0de526f17fd"
|
||||||
integrity sha512-r06UsJwJzLwgRkf3Or2T5tBnUmp8RD5gOHkC6ax9mLHu5r7voo1WAUpvG09R92GvdEQsgZXxOUhdEJWEoc/5sA==
|
integrity sha512-b+tLx4D0a6SeuaCa7iehdgkRKHsS67FkioQWw+0REjVNOYZ+AqJ0NjlnomK1hEUvSzSNrH9Du+m+Yiv7JlVpSg==
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "code-oss-dev",
|
"name": "code-oss-dev",
|
||||||
"version": "1.41.0",
|
"version": "1.41.0",
|
||||||
"distro": "2ec0dcb1b859bdfa9da42cb5243114591fee61af",
|
"distro": "30dcc7436405dfa68898d0f3843551c589fc9008",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Microsoft Corporation"
|
"name": "Microsoft Corporation"
|
||||||
},
|
},
|
||||||
|
@ -53,10 +53,10 @@
|
||||||
"vscode-ripgrep": "^1.5.7",
|
"vscode-ripgrep": "^1.5.7",
|
||||||
"vscode-sqlite3": "4.0.9",
|
"vscode-sqlite3": "4.0.9",
|
||||||
"vscode-textmate": "4.4.0",
|
"vscode-textmate": "4.4.0",
|
||||||
"xterm": "4.3.0-beta24",
|
"xterm": "4.3.0-beta.28",
|
||||||
"xterm-addon-search": "0.4.0-beta4",
|
"xterm-addon-search": "0.4.0-beta4",
|
||||||
"xterm-addon-web-links": "0.2.1",
|
"xterm-addon-web-links": "0.2.1",
|
||||||
"xterm-addon-webgl": "0.4.0-beta9",
|
"xterm-addon-webgl": "0.4.0-beta.11",
|
||||||
"yauzl": "^2.9.2",
|
"yauzl": "^2.9.2",
|
||||||
"yazl": "^2.4.3"
|
"yazl": "^2.4.3"
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,10 +20,10 @@
|
||||||
"vscode-proxy-agent": "^0.5.2",
|
"vscode-proxy-agent": "^0.5.2",
|
||||||
"vscode-ripgrep": "^1.5.7",
|
"vscode-ripgrep": "^1.5.7",
|
||||||
"vscode-textmate": "4.4.0",
|
"vscode-textmate": "4.4.0",
|
||||||
"xterm": "4.3.0-beta24",
|
"xterm": "4.3.0-beta.28",
|
||||||
"xterm-addon-search": "0.4.0-beta4",
|
"xterm-addon-search": "0.4.0-beta4",
|
||||||
"xterm-addon-web-links": "0.2.1",
|
"xterm-addon-web-links": "0.2.1",
|
||||||
"xterm-addon-webgl": "0.4.0-beta9",
|
"xterm-addon-webgl": "0.4.0-beta.11",
|
||||||
"yauzl": "^2.9.2",
|
"yauzl": "^2.9.2",
|
||||||
"yazl": "^2.4.3"
|
"yazl": "^2.4.3"
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"onigasm-umd": "2.2.5",
|
"onigasm-umd": "2.2.5",
|
||||||
"semver-umd": "^5.5.3",
|
"semver-umd": "^5.5.3",
|
||||||
"vscode-textmate": "4.4.0",
|
"vscode-textmate": "4.4.0",
|
||||||
"xterm": "4.3.0-beta24",
|
"xterm": "4.3.0-beta.28",
|
||||||
"xterm-addon-search": "0.4.0-beta4",
|
"xterm-addon-search": "0.4.0-beta4",
|
||||||
"xterm-addon-web-links": "0.2.1",
|
"xterm-addon-web-links": "0.2.1",
|
||||||
"xterm-addon-webgl": "0.4.0-beta9"
|
"xterm-addon-webgl": "0.4.0-beta.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,12 +41,12 @@ xterm-addon-web-links@0.2.1:
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-web-links/-/xterm-addon-web-links-0.2.1.tgz#6d1f2ce613e09870badf17615e7a1170a31542b2"
|
resolved "https://registry.yarnpkg.com/xterm-addon-web-links/-/xterm-addon-web-links-0.2.1.tgz#6d1f2ce613e09870badf17615e7a1170a31542b2"
|
||||||
integrity sha512-2KnHtiq0IG7hfwv3jw2/jQeH1RBk2d5CH4zvgwQe00rLofSJqSfgnJ7gwowxxpGHrpbPr6Lv4AmH/joaNw2+HQ==
|
integrity sha512-2KnHtiq0IG7hfwv3jw2/jQeH1RBk2d5CH4zvgwQe00rLofSJqSfgnJ7gwowxxpGHrpbPr6Lv4AmH/joaNw2+HQ==
|
||||||
|
|
||||||
xterm-addon-webgl@0.4.0-beta9:
|
xterm-addon-webgl@0.4.0-beta.11:
|
||||||
version "0.4.0-beta9"
|
version "0.4.0-beta.11"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.4.0-beta9.tgz#3e004d5cd893ae678e2537b195ae0eed4d689df3"
|
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.4.0-beta.11.tgz#0e4a7242e2353cf74aba55e5a5bdc0b4ec87ad10"
|
||||||
integrity sha512-+lUsUAx4ATyetRuTuEorUpKD5NpDUUc5Z3chtYV8ECiTJYiDr0CfAxW9oa3tT8BVO7fOTdgxgJpQmsU4LGEm5A==
|
integrity sha512-AteDxm1RFy1WnjY9r5iJSETozLebvUkR+jextdZk/ASsK21vsYK0DuVWwRI8afgiN2hUVhxcxuHEJUOV+CJDQA==
|
||||||
|
|
||||||
xterm@4.3.0-beta24:
|
xterm@4.3.0-beta.28:
|
||||||
version "4.3.0-beta24"
|
version "4.3.0-beta.28"
|
||||||
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.3.0-beta24.tgz#a78684ac1d1bd263f3086ec4190d00cf9ce51fb9"
|
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.3.0-beta.28.tgz#80f7c4ba8f6ee3c953e6f33f8ce5aef08d5a8354"
|
||||||
integrity sha512-N6slYV/c02hxTVgh21JvphBKkMTdvzljqFM01Inx9rriO4rVZEn39ZX/Sfer9Qm+vlgCvMtOm4pn0bCsK2OZdg==
|
integrity sha512-WWZ4XCvce5h+klL6ObwtMauJff/n2KGGOwJJkDbJhrAjVy2a77GKgAedJTDDFGgKJ6ix1d7puHtVSSKflIVaDQ==
|
||||||
|
|
|
@ -428,15 +428,15 @@ xterm-addon-web-links@0.2.1:
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-web-links/-/xterm-addon-web-links-0.2.1.tgz#6d1f2ce613e09870badf17615e7a1170a31542b2"
|
resolved "https://registry.yarnpkg.com/xterm-addon-web-links/-/xterm-addon-web-links-0.2.1.tgz#6d1f2ce613e09870badf17615e7a1170a31542b2"
|
||||||
integrity sha512-2KnHtiq0IG7hfwv3jw2/jQeH1RBk2d5CH4zvgwQe00rLofSJqSfgnJ7gwowxxpGHrpbPr6Lv4AmH/joaNw2+HQ==
|
integrity sha512-2KnHtiq0IG7hfwv3jw2/jQeH1RBk2d5CH4zvgwQe00rLofSJqSfgnJ7gwowxxpGHrpbPr6Lv4AmH/joaNw2+HQ==
|
||||||
|
|
||||||
xterm-addon-webgl@0.4.0-beta9:
|
xterm-addon-webgl@0.4.0-beta.11:
|
||||||
version "0.4.0-beta9"
|
version "0.4.0-beta.11"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.4.0-beta9.tgz#3e004d5cd893ae678e2537b195ae0eed4d689df3"
|
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.4.0-beta.11.tgz#0e4a7242e2353cf74aba55e5a5bdc0b4ec87ad10"
|
||||||
integrity sha512-+lUsUAx4ATyetRuTuEorUpKD5NpDUUc5Z3chtYV8ECiTJYiDr0CfAxW9oa3tT8BVO7fOTdgxgJpQmsU4LGEm5A==
|
integrity sha512-AteDxm1RFy1WnjY9r5iJSETozLebvUkR+jextdZk/ASsK21vsYK0DuVWwRI8afgiN2hUVhxcxuHEJUOV+CJDQA==
|
||||||
|
|
||||||
xterm@4.3.0-beta24:
|
xterm@4.3.0-beta.28:
|
||||||
version "4.3.0-beta24"
|
version "4.3.0-beta.28"
|
||||||
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.3.0-beta24.tgz#a78684ac1d1bd263f3086ec4190d00cf9ce51fb9"
|
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.3.0-beta.28.tgz#80f7c4ba8f6ee3c953e6f33f8ce5aef08d5a8354"
|
||||||
integrity sha512-N6slYV/c02hxTVgh21JvphBKkMTdvzljqFM01Inx9rriO4rVZEn39ZX/Sfer9Qm+vlgCvMtOm4pn0bCsK2OZdg==
|
integrity sha512-WWZ4XCvce5h+klL6ObwtMauJff/n2KGGOwJJkDbJhrAjVy2a77GKgAedJTDDFGgKJ6ix1d7puHtVSSKflIVaDQ==
|
||||||
|
|
||||||
yauzl@^2.9.2:
|
yauzl@^2.9.2:
|
||||||
version "2.10.0"
|
version "2.10.0"
|
||||||
|
|
|
@ -113,55 +113,28 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-list-type-filter > .controls > * {
|
.monaco-list-type-filter > .controls > * {
|
||||||
|
border: none;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
background: none;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
margin: 0 0 0 2px;
|
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.monaco-list-type-filter > .controls > .filter:checked::before {
|
||||||
|
content: "\eb83" !important; /* codicon-list-filter */
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-list-type-filter > .controls > .filter {
|
.monaco-list-type-filter > .controls > .filter {
|
||||||
-webkit-appearance: none;
|
margin-left: 4px;
|
||||||
-moz-appearance: none;
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
background: url("media/no-filter-light.svg");
|
|
||||||
background-position: 50% 50%;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.monaco-list-type-filter > .controls > .filter:checked {
|
|
||||||
background-image: url("media/filter-light.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark .monaco-list-type-filter > .controls > .filter {
|
|
||||||
background-image: url("media/no-filter-dark.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark .monaco-list-type-filter > .controls > .filter:checked {
|
|
||||||
background-image: url("media/filter-dark.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.hc-black .monaco-list-type-filter > .controls > .filter {
|
|
||||||
background-image: url("media/no-filter-hc.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.hc-black .monaco-list-type-filter > .controls > .filter:checked {
|
|
||||||
background-image: url("media/filter-hc.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.monaco-list-type-filter > .controls > .clear {
|
|
||||||
border: none;
|
|
||||||
background: url("media/close-light.svg");
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark .monaco-list-type-filter > .controls > .clear {
|
|
||||||
background-image: url("media/close-dark.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.hc-black .monaco-list-type-filter > .controls > .clear {
|
|
||||||
background-image: url("media/close-hc.svg");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-list-type-filter-message {
|
.monaco-list-type-filter-message {
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.00001 8.70714L11.6465 12.3536L12.3536 11.6465L8.70711 8.00004L12.3536 4.35359L11.6465 3.64648L8.00001 7.29293L4.35356 3.64648L3.64645 4.35359L7.2929 8.00004L3.64645 11.6465L4.35356 12.3536L8.00001 8.70714Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 379 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.00001 8.70714L11.6465 12.3536L12.3536 11.6465L8.70711 8.00004L12.3536 4.35359L11.6465 3.64648L8.00001 7.29293L4.35356 3.64648L3.64645 4.35359L7.2929 8.00004L3.64645 11.6465L4.35356 12.3536L8.00001 8.70714Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 379 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.00001 8.70714L11.6465 12.3536L12.3536 11.6465L8.70711 8.00004L12.3536 4.35359L11.6465 3.64648L8.00001 7.29293L4.35356 3.64648L3.64645 4.35359L7.2929 8.00004L3.64645 11.6465L4.35356 12.3536L8.00001 8.70714Z" fill="#424242"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 379 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M6 12V11H10V12H6ZM4 7H12V8H4V7ZM14 3V4H2V3H14Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 177 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M6 12V11H10V12H6ZM4 7H12V8H4V7ZM14 3V4H2V3H14Z" fill="white"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 175 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M6 12V11H10V12H6ZM4 7H12V8H4V7ZM14 3V4H2V3H14Z" fill="#424242"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 177 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M1 12L1 11H10V12H1ZM1 7H15V8H1L1 7ZM12 3V4H1L1 3H12Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 183 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M1 12L1 11H10V12H1ZM1 7H15V8H1L1 7ZM12 3V4H1L1 3H12Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 183 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M1 12L1 11H10V12H1ZM1 7H15V8H1L1 7ZM12 3V4H1L1 3H12Z" fill="#424242"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 183 B |
|
@ -634,14 +634,14 @@ class TypeFilterController<T, TFilterData> implements IDisposable {
|
||||||
const controls = append(this.domNode, $('.controls'));
|
const controls = append(this.domNode, $('.controls'));
|
||||||
|
|
||||||
this._filterOnType = !!tree.options.filterOnType;
|
this._filterOnType = !!tree.options.filterOnType;
|
||||||
this.filterOnTypeDomNode = append(controls, $<HTMLInputElement>('input.filter'));
|
this.filterOnTypeDomNode = append(controls, $<HTMLInputElement>('input.filter.codicon.codicon-list-selection'));
|
||||||
this.filterOnTypeDomNode.type = 'checkbox';
|
this.filterOnTypeDomNode.type = 'checkbox';
|
||||||
this.filterOnTypeDomNode.checked = this._filterOnType;
|
this.filterOnTypeDomNode.checked = this._filterOnType;
|
||||||
this.filterOnTypeDomNode.tabIndex = -1;
|
this.filterOnTypeDomNode.tabIndex = -1;
|
||||||
this.updateFilterOnTypeTitle();
|
this.updateFilterOnTypeTitle();
|
||||||
domEvent(this.filterOnTypeDomNode, 'input')(this.onDidChangeFilterOnType, this, this.disposables);
|
domEvent(this.filterOnTypeDomNode, 'input')(this.onDidChangeFilterOnType, this, this.disposables);
|
||||||
|
|
||||||
this.clearDomNode = append(controls, $<HTMLInputElement>('button.clear'));
|
this.clearDomNode = append(controls, $<HTMLInputElement>('button.clear.codicon.codicon-close'));
|
||||||
this.clearDomNode.tabIndex = -1;
|
this.clearDomNode.tabIndex = -1;
|
||||||
this.clearDomNode.title = localize('clear', "Clear");
|
this.clearDomNode.title = localize('clear', "Clear");
|
||||||
|
|
||||||
|
|
|
@ -206,43 +206,6 @@ export class MutableDisposable<T extends IDisposable> implements IDisposable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper class that stores a disposable that is not currently "owned" by anyone.
|
|
||||||
*
|
|
||||||
* Example use cases:
|
|
||||||
*
|
|
||||||
* - Express that a function/method will take ownership of a disposable parameter.
|
|
||||||
* - Express that a function returns a disposable that the caller must explicitly take ownership of.
|
|
||||||
*/
|
|
||||||
export class UnownedDisposable<T extends IDisposable> extends Disposable {
|
|
||||||
private _hasBeenAcquired = false;
|
|
||||||
private _value?: T;
|
|
||||||
|
|
||||||
public constructor(value: T) {
|
|
||||||
super();
|
|
||||||
this._value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public acquire(): T {
|
|
||||||
if (this._hasBeenAcquired) {
|
|
||||||
throw new Error('This disposable has already been acquired');
|
|
||||||
}
|
|
||||||
this._hasBeenAcquired = true;
|
|
||||||
const value = this._value!;
|
|
||||||
this._value = undefined;
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public dispose() {
|
|
||||||
super.dispose();
|
|
||||||
if (!this._hasBeenAcquired) {
|
|
||||||
this._hasBeenAcquired = true;
|
|
||||||
this._value!.dispose();
|
|
||||||
this._value = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IReference<T> extends IDisposable {
|
export interface IReference<T> extends IDisposable {
|
||||||
readonly object: T;
|
readonly object: T;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,12 +14,12 @@ suite('Glob', () => {
|
||||||
// let patterns = [
|
// let patterns = [
|
||||||
// '{**/*.cs,**/*.json,**/*.csproj,**/*.sln}',
|
// '{**/*.cs,**/*.json,**/*.csproj,**/*.sln}',
|
||||||
// '{**/*.cs,**/*.csproj,**/*.sln}',
|
// '{**/*.cs,**/*.csproj,**/*.sln}',
|
||||||
// '{**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.es6,**/*.mjs}',
|
// '{**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.es6,**/*.mjs,**/*.cjs}',
|
||||||
// '**/*.go',
|
// '**/*.go',
|
||||||
// '{**/*.ps,**/*.ps1}',
|
// '{**/*.ps,**/*.ps1}',
|
||||||
// '{**/*.c,**/*.cpp,**/*.h}',
|
// '{**/*.c,**/*.cpp,**/*.h}',
|
||||||
// '{**/*.fsx,**/*.fsi,**/*.fs,**/*.ml,**/*.mli}',
|
// '{**/*.fsx,**/*.fsi,**/*.fs,**/*.ml,**/*.mli}',
|
||||||
// '{**/*.js,**/*.jsx,**/*.es6,**/*.mjs}',
|
// '{**/*.js,**/*.jsx,**/*.es6,**/*.mjs,**/*.cjs}',
|
||||||
// '{**/*.ts,**/*.tsx}',
|
// '{**/*.ts,**/*.tsx}',
|
||||||
// '{**/*.php}',
|
// '{**/*.php}',
|
||||||
// '{**/*.php}',
|
// '{**/*.php}',
|
||||||
|
@ -1015,4 +1015,4 @@ suite('Glob', () => {
|
||||||
assertNoGlobMatch(p, '/DNXConsoleApp/foo/Program.cs');
|
assertNoGlobMatch(p, '/DNXConsoleApp/foo/Program.cs');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -34,12 +34,17 @@ class CommandOpener implements IOpener {
|
||||||
// execute as command
|
// execute as command
|
||||||
let args: any = [];
|
let args: any = [];
|
||||||
try {
|
try {
|
||||||
args = parse(target.query);
|
args = parse(decodeURIComponent(target.query));
|
||||||
if (!Array.isArray(args)) {
|
} catch {
|
||||||
args = [args];
|
// ignore and retry
|
||||||
|
try {
|
||||||
|
args = parse(target.query);
|
||||||
|
} catch {
|
||||||
|
// ignore error
|
||||||
}
|
}
|
||||||
} catch (e) {
|
}
|
||||||
// ignore error
|
if (!Array.isArray(args)) {
|
||||||
|
args = [args];
|
||||||
}
|
}
|
||||||
await this._commandService.executeCommand(target.path, ...args);
|
await this._commandService.executeCommand(target.path, ...args);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -43,7 +43,7 @@ class MarkerModel {
|
||||||
this._markers = [];
|
this._markers = [];
|
||||||
this._nextIdx = -1;
|
this._nextIdx = -1;
|
||||||
this._ignoreSelectionChange = false;
|
this._ignoreSelectionChange = false;
|
||||||
this._onCurrentMarkerChanged = new Emitter<IMarker>();
|
this._onCurrentMarkerChanged = new Emitter<IMarker | undefined>();
|
||||||
this._onMarkerSetChanged = new Emitter<MarkerModel>();
|
this._onMarkerSetChanged = new Emitter<MarkerModel>();
|
||||||
this.setMarkers(markers);
|
this.setMarkers(markers);
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.monaco-editor-hover .markdown-hover > .hover-contents:not(.code-hover-contents) hr {
|
||||||
|
min-width: 100vw;
|
||||||
|
}
|
||||||
|
|
||||||
.monaco-editor-hover p,
|
.monaco-editor-hover p,
|
||||||
.monaco-editor-hover ul {
|
.monaco-editor-hover ul {
|
||||||
margin: 8px 0;
|
margin: 8px 0;
|
||||||
|
|
|
@ -631,6 +631,12 @@ export class MultiCursorSelectionController extends Disposable implements IEdito
|
||||||
this._setSelections(matches.map(m => new Selection(m.range.startLineNumber, m.range.startColumn, m.range.endLineNumber, m.range.endColumn)));
|
this._setSelections(matches.map(m => new Selection(m.range.startLineNumber, m.range.startColumn, m.range.endLineNumber, m.range.endColumn)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public selectAllUsingSelections(selections: Selection[]): void {
|
||||||
|
if (selections.length > 0) {
|
||||||
|
this._setSelections(selections);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export abstract class MultiCursorSelectionControllerAction extends EditorAction {
|
export abstract class MultiCursorSelectionControllerAction extends EditorAction {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import * as url from 'url';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as net from 'net';
|
import * as net from 'net';
|
||||||
import { getPathFromAmdModule } from 'vs/base/common/amd';
|
import { getPathFromAmdModule } from 'vs/base/common/amd';
|
||||||
|
import { assertIsDefined } from 'vs/base/common/types';
|
||||||
|
|
||||||
interface Deferred<T> {
|
interface Deferred<T> {
|
||||||
resolve: (result: T | Promise<T>) => void;
|
resolve: (result: T | Promise<T>) => void;
|
||||||
|
@ -25,7 +26,7 @@ export function createTerminateServer(server: http.Server) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return async () => {
|
return async () => {
|
||||||
const result = new Promise<void>(resolve => server.close(resolve));
|
const result = new Promise<Error | undefined>(resolve => server.close(resolve));
|
||||||
for (const id in sockets) {
|
for (const id in sockets) {
|
||||||
sockets[id].destroy();
|
sockets[id].destroy();
|
||||||
}
|
}
|
||||||
|
@ -50,7 +51,7 @@ export async function startServer(server: http.Server): Promise<string> {
|
||||||
if (typeof address === 'string') {
|
if (typeof address === 'string') {
|
||||||
resolve(address);
|
resolve(address);
|
||||||
} else {
|
} else {
|
||||||
resolve(address.port.toString());
|
resolve(assertIsDefined(address).port.toString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -41,10 +41,10 @@ export async function getProxyAgent(rawRequestURL: string, options: IOptions = {
|
||||||
host: proxyEndpoint.hostname || '',
|
host: proxyEndpoint.hostname || '',
|
||||||
port: proxyEndpoint.port || (proxyEndpoint.protocol === 'https' ? '443' : '80'),
|
port: proxyEndpoint.port || (proxyEndpoint.protocol === 'https' ? '443' : '80'),
|
||||||
auth: proxyEndpoint.auth,
|
auth: proxyEndpoint.auth,
|
||||||
rejectUnauthorized: isBoolean(options.strictSSL) ? options.strictSSL : true
|
rejectUnauthorized: isBoolean(options.strictSSL) ? options.strictSSL : true,
|
||||||
};
|
};
|
||||||
|
|
||||||
return requestURL.protocol === 'http:'
|
return requestURL.protocol === 'http:'
|
||||||
? new (await import('http-proxy-agent'))(opts)
|
? new (await import('http-proxy-agent'))(opts as any as Url)
|
||||||
: new (await import('https-proxy-agent'))(opts);
|
: new (await import('https-proxy-agent'))(opts);
|
||||||
}
|
}
|
||||||
|
|
|
@ -299,6 +299,14 @@ export const editorFindMatchBorder = registerColor('editor.findMatchBorder', { l
|
||||||
export const editorFindMatchHighlightBorder = registerColor('editor.findMatchHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('findMatchHighlightBorder', "Border color of the other search matches."));
|
export const editorFindMatchHighlightBorder = registerColor('editor.findMatchHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('findMatchHighlightBorder', "Border color of the other search matches."));
|
||||||
export const editorFindRangeHighlightBorder = registerColor('editor.findRangeHighlightBorder', { dark: null, light: null, hc: transparent(activeContrastBorder, 0.4) }, nls.localize('findRangeHighlightBorder', "Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations."), true);
|
export const editorFindRangeHighlightBorder = registerColor('editor.findRangeHighlightBorder', { dark: null, light: null, hc: transparent(activeContrastBorder, 0.4) }, nls.localize('findRangeHighlightBorder', "Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations."), true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search Editor query match colors.
|
||||||
|
*
|
||||||
|
* Distinct from normal editor find match to allow for better differentiation
|
||||||
|
*/
|
||||||
|
export const searchEditorFindMatch = registerColor('searchEditor.findMatchBackground', { light: transparent(editorFindMatchHighlight, 0.5), dark: transparent(editorFindMatchHighlight, 0.5), hc: editorFindMatchHighlight }, nls.localize('searchEditor.queryMatch', "Color of the Search Editor query matches."));
|
||||||
|
export const searchEditorFindMatchBorder = registerColor('searchEditor.findMatchBorder', { light: transparent(editorFindMatchHighlightBorder, 0.5), dark: transparent(editorFindMatchHighlightBorder, 0.5), hc: editorFindMatchHighlightBorder }, nls.localize('searchEditor.editorFindMatchBorder', "Border color of the Search Editor query matches."));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Editor hover
|
* Editor hover
|
||||||
*/
|
*/
|
||||||
|
|
7
src/vs/vscode.proposed.d.ts
vendored
|
@ -1250,6 +1250,13 @@ declare module 'vscode' {
|
||||||
*/
|
*/
|
||||||
save(): Thenable<void>;
|
save(): Thenable<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param resource Resource being saved.
|
||||||
|
* @param targetResource Location to save to.
|
||||||
|
*/
|
||||||
|
saveAs(resource: Uri, targetResource: Uri): Thenable<void>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event triggered by extensions to signal to VS Code that an edit has occurred.
|
* Event triggered by extensions to signal to VS Code that an edit has occurred.
|
||||||
*
|
*
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||||
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
import { Disposable, IDisposable, DisposableStore } from 'vs/base/common/lifecycle';
|
||||||
import { Schemas } from 'vs/base/common/network';
|
import { Schemas } from 'vs/base/common/network';
|
||||||
import { isWeb } from 'vs/base/common/platform';
|
import { isWeb } from 'vs/base/common/platform';
|
||||||
import { startsWith } from 'vs/base/common/strings';
|
import { startsWith } from 'vs/base/common/strings';
|
||||||
|
@ -273,17 +273,23 @@ export class MainThreadWebviews extends Disposable implements extHostProtocol.Ma
|
||||||
|
|
||||||
const model = await this._customEditorService.models.loadOrCreate(webviewInput.getResource(), webviewInput.viewType);
|
const model = await this._customEditorService.models.loadOrCreate(webviewInput.getResource(), webviewInput.viewType);
|
||||||
|
|
||||||
model.onUndo(edits => { this._proxy.$undoEdits(handle, edits); });
|
model.onUndo(edits => { this._proxy.$undoEdits(handle, edits.map(x => x.data)); });
|
||||||
model.onRedo(edits => { this._proxy.$redoEdits(handle, edits); });
|
model.onApplyEdit(edits => {
|
||||||
|
const editsToApply = edits.filter(x => x.source !== webviewInput).map(x => x.data);
|
||||||
|
if (editsToApply.length) {
|
||||||
|
this._proxy.$applyEdits(handle, editsToApply);
|
||||||
|
}
|
||||||
|
});
|
||||||
model.onWillSave(e => { e.waitUntil(this._proxy.$onSave(handle)); });
|
model.onWillSave(e => { e.waitUntil(this._proxy.$onSave(handle)); });
|
||||||
|
model.onWillSaveAs(e => { e.waitUntil(this._proxy.$onSaveAs(handle, e.resource.toJSON(), e.targetResource.toJSON())); });
|
||||||
|
|
||||||
webviewInput.onDispose(() => {
|
webviewInput.onDisposeWebview(() => {
|
||||||
this._customEditorService.models.disposeModel(model);
|
this._customEditorService.models.disposeModel(model);
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this._proxy.$resolveWebviewEditor(
|
await this._proxy.$resolveWebviewEditor(
|
||||||
webviewInput.getResource(),
|
{ resource: webviewInput.getResource(), edits: model.currentEdits },
|
||||||
handle,
|
handle,
|
||||||
viewType,
|
viewType,
|
||||||
webviewInput.getTitle(),
|
webviewInput.getTitle(),
|
||||||
|
@ -293,6 +299,7 @@ export class MainThreadWebviews extends Disposable implements extHostProtocol.Ma
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
onUnexpectedError(error);
|
onUnexpectedError(error);
|
||||||
webviewInput.webview.html = MainThreadWebviews.getDeserializationFailedContents(viewType);
|
webviewInput.webview.html = MainThreadWebviews.getDeserializationFailedContents(viewType);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
@ -308,7 +315,7 @@ export class MainThreadWebviews extends Disposable implements extHostProtocol.Ma
|
||||||
this._editorProviders.delete(viewType);
|
this._editorProviders.delete(viewType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public $onEdit(handle: extHostProtocol.WebviewPanelHandle, editData: string): void {
|
public $onEdit(handle: extHostProtocol.WebviewPanelHandle, editData: any): void {
|
||||||
const webview = this.getWebviewInput(handle);
|
const webview = this.getWebviewInput(handle);
|
||||||
if (!(webview instanceof CustomFileEditorInput)) {
|
if (!(webview instanceof CustomFileEditorInput)) {
|
||||||
throw new Error('Webview is not a webview editor');
|
throw new Error('Webview is not a webview editor');
|
||||||
|
@ -319,18 +326,24 @@ export class MainThreadWebviews extends Disposable implements extHostProtocol.Ma
|
||||||
throw new Error('Could not find model for webview editor');
|
throw new Error('Could not find model for webview editor');
|
||||||
}
|
}
|
||||||
|
|
||||||
model.makeEdit(editData);
|
model.makeEdit({ source: webview, data: editData });
|
||||||
}
|
}
|
||||||
|
|
||||||
private hookupWebviewEventDelegate(handle: extHostProtocol.WebviewPanelHandle, input: WebviewInput) {
|
private hookupWebviewEventDelegate(handle: extHostProtocol.WebviewPanelHandle, input: WebviewInput) {
|
||||||
input.webview.onDidClickLink((uri: URI) => this.onDidClickLink(handle, uri));
|
const disposables = new DisposableStore();
|
||||||
input.webview.onMessage((message: any) => this._proxy.$onMessage(handle, message));
|
|
||||||
input.onDispose(() => {
|
disposables.add(input.webview.onDidClickLink((uri: URI) => this.onDidClickLink(handle, uri)));
|
||||||
|
disposables.add(input.webview.onMessage((message: any) => { this._proxy.$onMessage(handle, message); }));
|
||||||
|
disposables.add(input.onDisposeWebview(() => {
|
||||||
this._proxy.$onDidDisposeWebviewPanel(handle).finally(() => {
|
this._proxy.$onDidDisposeWebviewPanel(handle).finally(() => {
|
||||||
this._webviewInputs.delete(handle);
|
this._webviewInputs.delete(handle);
|
||||||
});
|
});
|
||||||
|
}));
|
||||||
|
disposables.add(input.webview.onMissingCsp((extension: ExtensionIdentifier) => this._proxy.$onMissingCsp(handle, extension.value)));
|
||||||
|
|
||||||
|
input.onDispose(() => {
|
||||||
|
disposables.dispose();
|
||||||
});
|
});
|
||||||
input.webview.onMissingCsp((extension: ExtensionIdentifier) => this._proxy.$onMissingCsp(handle, extension.value));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateWebviewViewStates() {
|
private updateWebviewViewStates() {
|
||||||
|
|
|
@ -155,11 +155,11 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape {
|
||||||
if (!isPromiseCanceledError(err)) {
|
if (!isPromiseCanceledError(err)) {
|
||||||
return Promise.reject(err);
|
return Promise.reject(err);
|
||||||
}
|
}
|
||||||
return undefined;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$startTextSearch(pattern: IPatternInfo, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise<ITextSearchComplete> {
|
$startTextSearch(pattern: IPatternInfo, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise<ITextSearchComplete | undefined> {
|
||||||
const workspace = this._contextService.getWorkspace();
|
const workspace = this._contextService.getWorkspace();
|
||||||
const folders = workspace.folders.map(folder => folder.uri);
|
const folders = workspace.folders.map(folder => folder.uri);
|
||||||
|
|
||||||
|
@ -198,14 +198,14 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape {
|
||||||
|
|
||||||
return this._searchService.fileSearch(query, token).then(
|
return this._searchService.fileSearch(query, token).then(
|
||||||
result => {
|
result => {
|
||||||
return result.limitHit;
|
return !!result.limitHit;
|
||||||
},
|
},
|
||||||
err => {
|
err => {
|
||||||
if (!isPromiseCanceledError(err)) {
|
if (!isPromiseCanceledError(err)) {
|
||||||
return Promise.reject(err);
|
return Promise.reject(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined;
|
return false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -574,7 +574,7 @@ export interface MainThreadWebviewsShape extends IDisposable {
|
||||||
$registerEditorProvider(extension: WebviewExtensionDescription, viewType: string, options: modes.IWebviewPanelOptions): void;
|
$registerEditorProvider(extension: WebviewExtensionDescription, viewType: string, options: modes.IWebviewPanelOptions): void;
|
||||||
$unregisterEditorProvider(viewType: string): void;
|
$unregisterEditorProvider(viewType: string): void;
|
||||||
|
|
||||||
$onEdit(handle: WebviewPanelHandle, editJson: string): void;
|
$onEdit(handle: WebviewPanelHandle, editJson: any): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface WebviewPanelViewStateData {
|
export interface WebviewPanelViewStateData {
|
||||||
|
@ -590,11 +590,15 @@ export interface ExtHostWebviewsShape {
|
||||||
$onMissingCsp(handle: WebviewPanelHandle, extensionId: string): void;
|
$onMissingCsp(handle: WebviewPanelHandle, extensionId: string): void;
|
||||||
$onDidChangeWebviewPanelViewStates(newState: WebviewPanelViewStateData): void;
|
$onDidChangeWebviewPanelViewStates(newState: WebviewPanelViewStateData): void;
|
||||||
$onDidDisposeWebviewPanel(handle: WebviewPanelHandle): Promise<void>;
|
$onDidDisposeWebviewPanel(handle: WebviewPanelHandle): Promise<void>;
|
||||||
|
|
||||||
$deserializeWebviewPanel(newWebviewHandle: WebviewPanelHandle, viewType: string, title: string, state: any, position: EditorViewColumn, options: modes.IWebviewOptions & modes.IWebviewPanelOptions): Promise<void>;
|
$deserializeWebviewPanel(newWebviewHandle: WebviewPanelHandle, viewType: string, title: string, state: any, position: EditorViewColumn, options: modes.IWebviewOptions & modes.IWebviewPanelOptions): Promise<void>;
|
||||||
$resolveWebviewEditor(resource: UriComponents, newWebviewHandle: WebviewPanelHandle, viewType: string, title: string, position: EditorViewColumn, options: modes.IWebviewOptions & modes.IWebviewPanelOptions): Promise<void>;
|
$resolveWebviewEditor(input: { resource: UriComponents, edits: readonly any[] }, newWebviewHandle: WebviewPanelHandle, viewType: string, title: string, position: EditorViewColumn, options: modes.IWebviewOptions & modes.IWebviewPanelOptions): Promise<void>;
|
||||||
|
|
||||||
$undoEdits(handle: WebviewPanelHandle, edits: readonly any[]): void;
|
$undoEdits(handle: WebviewPanelHandle, edits: readonly any[]): void;
|
||||||
$redoEdits(handle: WebviewPanelHandle, edits: readonly any[]): void;
|
$applyEdits(handle: WebviewPanelHandle, edits: readonly any[]): void;
|
||||||
|
|
||||||
$onSave(handle: WebviewPanelHandle): Promise<void>;
|
$onSave(handle: WebviewPanelHandle): Promise<void>;
|
||||||
|
$onSaveAs(handle: WebviewPanelHandle, resource: UriComponents, targetResource: UriComponents): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MainThreadUrlsShape extends IDisposable {
|
export interface MainThreadUrlsShape extends IDisposable {
|
||||||
|
@ -614,7 +618,7 @@ export interface ITextSearchComplete {
|
||||||
|
|
||||||
export interface MainThreadWorkspaceShape extends IDisposable {
|
export interface MainThreadWorkspaceShape extends IDisposable {
|
||||||
$startFileSearch(includePattern: string | null, includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false | null, maxResults: number | null, token: CancellationToken): Promise<UriComponents[] | null>;
|
$startFileSearch(includePattern: string | null, includeFolder: UriComponents | null, excludePatternOrDisregardExcludes: string | false | null, maxResults: number | null, token: CancellationToken): Promise<UriComponents[] | null>;
|
||||||
$startTextSearch(query: search.IPatternInfo, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise<ITextSearchComplete>;
|
$startTextSearch(query: search.IPatternInfo, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise<ITextSearchComplete | undefined>;
|
||||||
$checkExists(folders: UriComponents[], includes: string[], token: CancellationToken): Promise<boolean>;
|
$checkExists(folders: UriComponents[], includes: string[], token: CancellationToken): Promise<boolean>;
|
||||||
$saveAll(includeUntitled?: boolean): Promise<boolean>;
|
$saveAll(includeUntitled?: boolean): Promise<boolean>;
|
||||||
$updateWorkspaceFolders(extensionName: string, index: number, deleteCount: number, workspaceFoldersToAdd: { uri: UriComponents, name?: string; }[]): Promise<void>;
|
$updateWorkspaceFolders(extensionName: string, index: number, deleteCount: number, workspaceFoldersToAdd: { uri: UriComponents, name?: string; }[]): Promise<void>;
|
||||||
|
|
|
@ -86,7 +86,7 @@ const newCommands: ApiCommand[] = [
|
||||||
new ApiCommand(
|
new ApiCommand(
|
||||||
'vscode.prepareCallHierarchy', '_executePrepareCallHierarchy', 'Prepare call hierarchy at a position inside a document',
|
'vscode.prepareCallHierarchy', '_executePrepareCallHierarchy', 'Prepare call hierarchy at a position inside a document',
|
||||||
[ApiCommandArgument.Uri, ApiCommandArgument.Position],
|
[ApiCommandArgument.Uri, ApiCommandArgument.Position],
|
||||||
new ApiCommandResult<ICallHierarchyItemDto, types.CallHierarchyItem>('A CallHierarchyItem or undefined', v => typeConverters.CallHierarchyItem.to(v))
|
new ApiCommandResult<ICallHierarchyItemDto[], types.CallHierarchyItem[]>('A CallHierarchyItem or undefined', v => v.map(typeConverters.CallHierarchyItem.to))
|
||||||
),
|
),
|
||||||
new ApiCommand(
|
new ApiCommand(
|
||||||
'vscode.provideIncomingCalls', '_executeProvideIncomingCalls', 'Compute incoming calls for an item',
|
'vscode.provideIncomingCalls', '_executeProvideIncomingCalls', 'Compute incoming calls for an item',
|
||||||
|
|
|
@ -378,7 +378,7 @@ export class ExtHostDebugServiceBase implements IExtHostDebugService, ExtHostDeb
|
||||||
public async $substituteVariables(folderUri: UriComponents | undefined, config: IConfig): Promise<IConfig> {
|
public async $substituteVariables(folderUri: UriComponents | undefined, config: IConfig): Promise<IConfig> {
|
||||||
if (!this._variableResolver) {
|
if (!this._variableResolver) {
|
||||||
const [workspaceFolders, configProvider] = await Promise.all([this._workspaceService.getWorkspaceFolders2(), this._configurationService.getConfigProvider()]);
|
const [workspaceFolders, configProvider] = await Promise.all([this._workspaceService.getWorkspaceFolders2(), this._configurationService.getConfigProvider()]);
|
||||||
this._variableResolver = this.createVariableResolver(workspaceFolders || [], this._editorsService, configProvider);
|
this._variableResolver = this.createVariableResolver(workspaceFolders || [], this._editorsService, configProvider!);
|
||||||
}
|
}
|
||||||
let ws: IWorkspaceFolder | undefined;
|
let ws: IWorkspaceFolder | undefined;
|
||||||
const folder = await this.getFolder(folderUri);
|
const folder = await this.getFolder(folderUri);
|
||||||
|
|
|
@ -135,7 +135,7 @@ export class ExtHostQuickOpen implements ExtHostQuickOpenShape {
|
||||||
|
|
||||||
// ---- input
|
// ---- input
|
||||||
|
|
||||||
showInput(options?: InputBoxOptions, token: CancellationToken = CancellationToken.None): Promise<string> {
|
showInput(options?: InputBoxOptions, token: CancellationToken = CancellationToken.None): Promise<string | undefined> {
|
||||||
|
|
||||||
// global validate fn used in callback below
|
// global validate fn used in callback below
|
||||||
this._validateInput = options ? options.validateInput : undefined;
|
this._validateInput = options ? options.validateInput : undefined;
|
||||||
|
|
|
@ -419,7 +419,7 @@ class ExtHostTreeView<T> extends Disposable {
|
||||||
// check if an ancestor of extElement is already in the elements to update list
|
// check if an ancestor of extElement is already in the elements to update list
|
||||||
let currentNode: TreeNode | undefined = elementNode;
|
let currentNode: TreeNode | undefined = elementNode;
|
||||||
while (currentNode && currentNode.parent && !elementsToUpdate.has(currentNode.parent.item.handle)) {
|
while (currentNode && currentNode.parent && !elementsToUpdate.has(currentNode.parent.item.handle)) {
|
||||||
const parentElement = this.elements.get(currentNode.parent.item.handle);
|
const parentElement: T | undefined = this.elements.get(currentNode.parent.item.handle);
|
||||||
currentNode = parentElement ? this.nodes.get(parentElement) : undefined;
|
currentNode = parentElement ? this.nodes.get(parentElement) : undefined;
|
||||||
}
|
}
|
||||||
if (currentNode && !currentNode.parent) {
|
if (currentNode && !currentNode.parent) {
|
||||||
|
|
|
@ -289,16 +289,23 @@ export namespace MarkdownString {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return part;
|
return part;
|
||||||
}
|
}
|
||||||
|
let changed = false;
|
||||||
data = cloneAndChange(data, value => {
|
data = cloneAndChange(data, value => {
|
||||||
if (URI.isUri(value)) {
|
if (URI.isUri(value)) {
|
||||||
const key = `__uri_${Math.random().toString(16).slice(2, 8)}`;
|
const key = `__uri_${Math.random().toString(16).slice(2, 8)}`;
|
||||||
bucket[key] = value;
|
bucket[key] = value;
|
||||||
|
changed = true;
|
||||||
return key;
|
return key;
|
||||||
} else {
|
} else {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return encodeURIComponent(JSON.stringify(data));
|
|
||||||
|
if (!changed) {
|
||||||
|
return part;
|
||||||
|
}
|
||||||
|
|
||||||
|
return JSON.stringify(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function to(value: htmlContent.IMarkdownString): vscode.MarkdownString {
|
export function to(value: htmlContent.IMarkdownString): vscode.MarkdownString {
|
||||||
|
|
|
@ -248,11 +248,11 @@ export class ExtHostWebviewEditor extends Disposable implements vscode.WebviewPa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_undoEdits(edits: string[]): void {
|
_undoEdits(edits: readonly any[]): void {
|
||||||
assertIsDefined(this._capabilities).editingCapability?.undoEdits(edits);
|
assertIsDefined(this._capabilities).editingCapability?.undoEdits(edits);
|
||||||
}
|
}
|
||||||
|
|
||||||
_redoEdits(edits: string[]): void {
|
_redoEdits(edits: readonly any[]): void {
|
||||||
assertIsDefined(this._capabilities).editingCapability?.applyEdits(edits);
|
assertIsDefined(this._capabilities).editingCapability?.applyEdits(edits);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,6 +260,11 @@ export class ExtHostWebviewEditor extends Disposable implements vscode.WebviewPa
|
||||||
await assertIsDefined(this._capabilities).editingCapability?.save();
|
await assertIsDefined(this._capabilities).editingCapability?.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async _onSaveAs(resource: vscode.Uri, targetResource: vscode.Uri): Promise<void> {
|
||||||
|
await assertIsDefined(this._capabilities).editingCapability?.saveAs(resource, targetResource);
|
||||||
|
}
|
||||||
|
|
||||||
private assertNotDisposed() {
|
private assertNotDisposed() {
|
||||||
if (this._isDisposed) {
|
if (this._isDisposed) {
|
||||||
throw new Error('Webview is disposed');
|
throw new Error('Webview is disposed');
|
||||||
|
@ -427,7 +432,7 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
|
||||||
}
|
}
|
||||||
|
|
||||||
async $resolveWebviewEditor(
|
async $resolveWebviewEditor(
|
||||||
resource: UriComponents,
|
input: { resource: UriComponents, edits: readonly any[] },
|
||||||
handle: WebviewPanelHandle,
|
handle: WebviewPanelHandle,
|
||||||
viewType: string,
|
viewType: string,
|
||||||
title: string,
|
title: string,
|
||||||
|
@ -443,16 +448,21 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
|
||||||
const webview = new ExtHostWebview(handle, this._proxy, options, this.initData, this.workspace, extension, this._logService);
|
const webview = new ExtHostWebview(handle, this._proxy, options, this.initData, this.workspace, extension, this._logService);
|
||||||
const revivedPanel = new ExtHostWebviewEditor(handle, this._proxy, viewType, title, typeof position === 'number' && position >= 0 ? typeConverters.ViewColumn.to(position) : undefined, options, webview);
|
const revivedPanel = new ExtHostWebviewEditor(handle, this._proxy, viewType, title, typeof position === 'number' && position >= 0 ? typeConverters.ViewColumn.to(position) : undefined, options, webview);
|
||||||
this._webviewPanels.set(handle, revivedPanel);
|
this._webviewPanels.set(handle, revivedPanel);
|
||||||
const capabilities = await provider.resolveWebviewEditor({ resource: URI.revive(resource) }, revivedPanel);
|
const capabilities = await provider.resolveWebviewEditor({ resource: URI.revive(input.resource) }, revivedPanel);
|
||||||
revivedPanel._setCapabilities(capabilities);
|
revivedPanel._setCapabilities(capabilities);
|
||||||
|
|
||||||
|
// TODO: the first set of edits should likely be passed when resolving
|
||||||
|
if (input.edits.length) {
|
||||||
|
revivedPanel._redoEdits(input.edits);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$undoEdits(handle: WebviewPanelHandle, edits: string[]): void {
|
$undoEdits(handle: WebviewPanelHandle, edits: readonly any[]): void {
|
||||||
const panel = this.getWebviewPanel(handle);
|
const panel = this.getWebviewPanel(handle);
|
||||||
panel?._undoEdits(edits);
|
panel?._undoEdits(edits);
|
||||||
}
|
}
|
||||||
|
|
||||||
$redoEdits(handle: WebviewPanelHandle, edits: string[]): void {
|
$applyEdits(handle: WebviewPanelHandle, edits: readonly any[]): void {
|
||||||
const panel = this.getWebviewPanel(handle);
|
const panel = this.getWebviewPanel(handle);
|
||||||
panel?._redoEdits(edits);
|
panel?._redoEdits(edits);
|
||||||
}
|
}
|
||||||
|
@ -462,6 +472,11 @@ export class ExtHostWebviews implements ExtHostWebviewsShape {
|
||||||
return panel?._onSave();
|
return panel?._onSave();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async $onSaveAs(handle: WebviewPanelHandle, resource: UriComponents, targetResource: UriComponents): Promise<void> {
|
||||||
|
const panel = this.getWebviewPanel(handle);
|
||||||
|
return panel?._onSaveAs(URI.revive(resource), URI.revive(targetResource));
|
||||||
|
}
|
||||||
|
|
||||||
private getWebviewPanel(handle: WebviewPanelHandle): ExtHostWebviewEditor | undefined {
|
private getWebviewPanel(handle: WebviewPanelHandle): ExtHostWebviewEditor | undefined {
|
||||||
return this._webviewPanels.get(handle);
|
return this._webviewPanels.get(handle);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,16 +38,6 @@
|
||||||
outline: 0 !important; /* activity bar indicates focus custom */
|
outline: 0 !important; /* activity bar indicates focus custom */
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-workbench .activitybar > .content > .composite-bar > .monaco-action-bar .action-label.toggle-more {
|
|
||||||
mask: url('ellipsis-activity-bar.svg') no-repeat 50% 50%;
|
|
||||||
-webkit-mask: url('ellipsis-activity-bar.svg') no-repeat 50% 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.monaco-workbench .activitybar .global-activity .monaco-action-bar .action-label.update-activity {
|
|
||||||
mask: url('settings-activity-bar.svg') no-repeat 50% 50%;
|
|
||||||
-webkit-mask: url('settings-activity-bar.svg') no-repeat 50% 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.monaco-workbench .activitybar > .content > .composite-bar {
|
.monaco-workbench .activitybar > .content > .composite-bar {
|
||||||
margin-bottom: auto;
|
margin-bottom: auto;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M6 12C6 12.2967 5.91203 12.5867 5.74721 12.8334C5.58238 13.08 5.34812 13.2723 5.07403 13.3858C4.79994 13.4994 4.49834 13.5291 4.20737 13.4712C3.91639 13.4133 3.64912 13.2704 3.43934 13.0607C3.22956 12.8509 3.0867 12.5836 3.02882 12.2926C2.97094 12.0017 3.00065 11.7001 3.11418 11.426C3.22771 11.1519 3.41997 10.9176 3.66665 10.7528C3.91332 10.588 4.20333 10.5 4.5 10.5C4.89783 10.5 5.27936 10.658 5.56066 10.9393C5.84197 11.2206 6 11.6022 6 12Z" fill="white"/>
|
|
||||||
<path d="M13.5 12C13.5 12.2967 13.412 12.5867 13.2472 12.8334C13.0824 13.08 12.8481 13.2723 12.574 13.3858C12.2999 13.4994 11.9983 13.5291 11.7074 13.4712C11.4164 13.4133 11.1491 13.2704 10.9393 13.0607C10.7296 12.8509 10.5867 12.5836 10.5288 12.2926C10.4709 12.0017 10.5006 11.7001 10.6142 11.426C10.7277 11.1519 10.92 10.9176 11.1666 10.7528C11.4133 10.588 11.7033 10.5 12 10.5C12.3978 10.5 12.7794 10.658 13.0607 10.9393C13.342 11.2206 13.5 11.6022 13.5 12Z" fill="white"/>
|
|
||||||
<path d="M21 12C21 12.2967 20.912 12.5867 20.7472 12.8334C20.5824 13.08 20.3481 13.2723 20.074 13.3858C19.7999 13.4994 19.4983 13.5291 19.2074 13.4712C18.9164 13.4133 18.6491 13.2704 18.4393 13.0607C18.2296 12.8509 18.0867 12.5836 18.0288 12.2926C17.9709 12.0017 18.0006 11.7001 18.1142 11.426C18.2277 11.1519 18.42 10.9176 18.6666 10.7528C18.9133 10.588 19.2033 10.5 19.5 10.5C19.8978 10.5 20.2794 10.658 20.5607 10.9393C20.842 11.2206 21 11.6022 21 12Z" fill="white"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.5 KiB |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4198 0L15.2504 4.15289L18.7742 1.80367L22.1963 5.22578L19.8471 8.74964L24 9.58022V14.4198L19.8471 15.2504L22.1963 18.7742L18.7742 22.1963L15.2504 19.8471L14.4198 24H9.5802L8.74962 19.8471L5.22579 22.1963L1.80368 18.7742L4.15291 15.2504L0 14.4198V9.58022L4.1529 8.74964L1.80367 5.2258L5.22578 1.80369L8.74963 4.15292L9.5802 3.68124e-05L14.4198 0ZM18.2347 10.184L17.6927 8.87549L19.9795 5.44529L18.5547 4.02052L15.1245 6.30732L13.816 5.76534L13.0075 1.72278L10.9925 1.7228L10.184 5.76536L8.87549 6.30734L5.4453 4.02055L4.02053 5.44531L6.30734 8.87553L5.7653 10.184L1.72277 10.9926V13.0075L5.7653 13.816L6.30735 15.1245L4.02053 18.5547L5.4453 19.9795L8.87551 17.6927L10.184 18.2347L10.9925 22.2772H13.0075L13.816 18.2347L15.1245 17.6927L18.5547 19.9795L19.9795 18.5547L17.6927 15.1245L18.2347 13.816L22.2772 13.0075V10.9926L18.2347 10.184ZM13.7143 12C13.7143 12.9468 12.9468 13.7143 12 13.7143C11.0532 13.7143 10.2857 12.9468 10.2857 12C10.2857 11.0532 11.0532 10.2857 12 10.2857C12.9468 10.2857 13.7143 11.0532 13.7143 12ZM15.4286 12C15.4286 13.8935 13.8935 15.4286 12 15.4286C10.1065 15.4286 8.57143 13.8935 8.57143 12C8.57143 10.1065 10.1065 8.57143 12 8.57143C13.8935 8.57143 15.4286 10.1065 15.4286 12Z" fill="#F4F4F4"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -418,7 +418,7 @@ export class OpenToSideFromQuickOpenAction extends Action {
|
||||||
updateClass(): void {
|
updateClass(): void {
|
||||||
const preferredDirection = preferredSideBySideGroupDirection(this.configurationService);
|
const preferredDirection = preferredSideBySideGroupDirection(this.configurationService);
|
||||||
|
|
||||||
this.class = (preferredDirection === GroupDirection.RIGHT) ? 'quick-open-sidebyside-vertical' : 'quick-open-sidebyside-horizontal';
|
this.class = (preferredDirection === GroupDirection.RIGHT) ? 'codicon-split-horizontal' : 'codicon-split-vertical';
|
||||||
}
|
}
|
||||||
|
|
||||||
run(context: any): Promise<any> {
|
run(context: any): Promise<any> {
|
||||||
|
|
|
@ -398,6 +398,11 @@ export interface IEditorInput extends IDisposable {
|
||||||
*/
|
*/
|
||||||
saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise<boolean>;
|
saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise<boolean>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles when the input is replaced, such as by renaming its backing resource.
|
||||||
|
*/
|
||||||
|
handleMove?(groupId: GroupIdentifier, uri: URI, options?: ITextEditorOptions): IEditorInput | undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reverts this input.
|
* Reverts this input.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -172,7 +172,7 @@ CommandsRegistry.registerCommand('_executePrepareCallHierarchy', async (accessor
|
||||||
_models.delete(key);
|
_models.delete(key);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return model.root;
|
return [model.root];
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
dispose(textModelReference);
|
dispose(textModelReference);
|
||||||
|
|
|
@ -211,6 +211,10 @@ class ToggleWordWrapController extends Disposable implements IEditorContribution
|
||||||
// in the settings editor...
|
// in the settings editor...
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (this.editor.isSimpleWidget) {
|
||||||
|
// in a simple widget...
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Ensure correct word wrap settings
|
// Ensure correct word wrap settings
|
||||||
const newModel = this.editor.getModel();
|
const newModel = this.editor.getModel();
|
||||||
if (!newModel) {
|
if (!newModel) {
|
||||||
|
|
|
@ -5,17 +5,21 @@
|
||||||
|
|
||||||
import { memoize } from 'vs/base/common/decorators';
|
import { memoize } from 'vs/base/common/decorators';
|
||||||
import { Lazy } from 'vs/base/common/lazy';
|
import { Lazy } from 'vs/base/common/lazy';
|
||||||
import { UnownedDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { basename } from 'vs/base/common/path';
|
import { basename } from 'vs/base/common/path';
|
||||||
import { isEqual } from 'vs/base/common/resources';
|
import { isEqual } from 'vs/base/common/resources';
|
||||||
|
import { assertIsDefined } from 'vs/base/common/types';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { IEditorModel } from 'vs/platform/editor/common/editor';
|
import { generateUuid } from 'vs/base/common/uuid';
|
||||||
|
import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||||
|
import { IEditorModel, ITextEditorOptions } from 'vs/platform/editor/common/editor';
|
||||||
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { ILabelService } from 'vs/platform/label/common/label';
|
import { ILabelService } from 'vs/platform/label/common/label';
|
||||||
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
|
||||||
import { GroupIdentifier, IEditorInput, IRevertOptions, ISaveOptions, Verbosity } from 'vs/workbench/common/editor';
|
import { GroupIdentifier, IEditorInput, IRevertOptions, ISaveOptions, Verbosity } from 'vs/workbench/common/editor';
|
||||||
import { ICustomEditorModel, ICustomEditorService } from 'vs/workbench/contrib/customEditor/common/customEditor';
|
import { ICustomEditorModel, ICustomEditorService } from 'vs/workbench/contrib/customEditor/common/customEditor';
|
||||||
import { WebviewEditorOverlay } from 'vs/workbench/contrib/webview/browser/webview';
|
import { WebviewEditorOverlay } from 'vs/workbench/contrib/webview/browser/webview';
|
||||||
import { IWebviewWorkbenchService, LazilyResolvedWebviewEditorInput } from 'vs/workbench/contrib/webview/browser/webviewWorkbenchService';
|
import { IWebviewWorkbenchService, LazilyResolvedWebviewEditorInput } from 'vs/workbench/contrib/webview/browser/webviewWorkbenchService';
|
||||||
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
|
|
||||||
export class CustomFileEditorInput extends LazilyResolvedWebviewEditorInput {
|
export class CustomFileEditorInput extends LazilyResolvedWebviewEditorInput {
|
||||||
|
|
||||||
|
@ -28,11 +32,14 @@ export class CustomFileEditorInput extends LazilyResolvedWebviewEditorInput {
|
||||||
resource: URI,
|
resource: URI,
|
||||||
viewType: string,
|
viewType: string,
|
||||||
id: string,
|
id: string,
|
||||||
webview: Lazy<UnownedDisposable<WebviewEditorOverlay>>,
|
webview: Lazy<WebviewEditorOverlay>,
|
||||||
@ILifecycleService lifecycleService: ILifecycleService,
|
@ILifecycleService lifecycleService: ILifecycleService,
|
||||||
@IWebviewWorkbenchService webviewWorkbenchService: IWebviewWorkbenchService,
|
@IWebviewWorkbenchService webviewWorkbenchService: IWebviewWorkbenchService,
|
||||||
|
@IInstantiationService private readonly instantiationService: IInstantiationService,
|
||||||
@ILabelService private readonly labelService: ILabelService,
|
@ILabelService private readonly labelService: ILabelService,
|
||||||
@ICustomEditorService private readonly customEditorService: ICustomEditorService,
|
@ICustomEditorService private readonly customEditorService: ICustomEditorService,
|
||||||
|
@IEditorService private readonly editorService: IEditorService,
|
||||||
|
@IFileDialogService private readonly fileDialogService: IFileDialogService,
|
||||||
) {
|
) {
|
||||||
super(id, viewType, '', webview, webviewWorkbenchService, lifecycleService);
|
super(id, viewType, '', webview, webviewWorkbenchService, lifecycleService);
|
||||||
this._editorResource = resource;
|
this._editorResource = resource;
|
||||||
|
@ -46,6 +53,10 @@ export class CustomFileEditorInput extends LazilyResolvedWebviewEditorInput {
|
||||||
return this._editorResource;
|
return this._editorResource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public supportsSplitEditor() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@memoize
|
@memoize
|
||||||
getName(): string {
|
getName(): string {
|
||||||
return basename(this.labelService.getUriLabel(this.getResource()));
|
return basename(this.labelService.getUriLabel(this.getResource()));
|
||||||
|
@ -101,9 +112,32 @@ export class CustomFileEditorInput extends LazilyResolvedWebviewEditorInput {
|
||||||
return this._model ? this._model.save(options) : Promise.resolve(false);
|
return this._model ? this._model.save(options) : Promise.resolve(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise<boolean> {
|
public async saveAs(groupId: GroupIdentifier, options?: ISaveOptions): Promise<boolean> {
|
||||||
// TODO@matt implement properly (see TextEditorInput#saveAs())
|
if (!this._model) {
|
||||||
return this._model ? this._model.save(options) : Promise.resolve(false);
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preserve view state by opening the editor first. In addition
|
||||||
|
// this allows the user to review the contents of the editor.
|
||||||
|
// let viewState: IEditorViewState | undefined = undefined;
|
||||||
|
// const editor = await this.editorService.openEditor(this, undefined, group);
|
||||||
|
// if (isTextEditor(editor)) {
|
||||||
|
// viewState = editor.getViewState();
|
||||||
|
// }
|
||||||
|
|
||||||
|
let dialogPath = this._editorResource;
|
||||||
|
// if (this._editorResource.scheme === Schemas.untitled) {
|
||||||
|
// dialogPath = this.suggestFileName(resource);
|
||||||
|
// }
|
||||||
|
|
||||||
|
const target = await this.promptForPath(this._editorResource, dialogPath, options?.availableFileSystems);
|
||||||
|
if (!target) {
|
||||||
|
return false; // save cancelled
|
||||||
|
}
|
||||||
|
|
||||||
|
await this._model.saveAs(this._editorResource, target, options);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public revert(options?: IRevertOptions): Promise<boolean> {
|
public revert(options?: IRevertOptions): Promise<boolean> {
|
||||||
|
@ -113,6 +147,24 @@ export class CustomFileEditorInput extends LazilyResolvedWebviewEditorInput {
|
||||||
public async resolve(): Promise<IEditorModel> {
|
public async resolve(): Promise<IEditorModel> {
|
||||||
this._model = await this.customEditorService.models.loadOrCreate(this.getResource(), this.viewType);
|
this._model = await this.customEditorService.models.loadOrCreate(this.getResource(), this.viewType);
|
||||||
this._register(this._model.onDidChangeDirty(() => this._onDidChangeDirty.fire()));
|
this._register(this._model.onDidChangeDirty(() => this._onDidChangeDirty.fire()));
|
||||||
|
this._onDidChangeDirty.fire();
|
||||||
return await super.resolve();
|
return await super.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected async promptForPath(resource: URI, defaultUri: URI, availableFileSystems?: readonly string[]): Promise<URI | undefined> {
|
||||||
|
|
||||||
|
// Help user to find a name for the file by opening it first
|
||||||
|
await this.editorService.openEditor({ resource, options: { revealIfOpened: true, preserveFocus: true } });
|
||||||
|
|
||||||
|
return this.fileDialogService.pickFileToSave({});//this.getSaveDialogOptions(defaultUri, availableFileSystems));
|
||||||
|
}
|
||||||
|
|
||||||
|
public handleMove(groupId: GroupIdentifier, uri: URI, options?: ITextEditorOptions): IEditorInput | undefined {
|
||||||
|
const webview = assertIsDefined(this.takeOwnershipOfWebview());
|
||||||
|
return this.instantiationService.createInstance(CustomFileEditorInput,
|
||||||
|
uri,
|
||||||
|
this.viewType,
|
||||||
|
generateUuid(),
|
||||||
|
new Lazy(() => webview));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { UnownedDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { generateUuid } from 'vs/base/common/uuid';
|
import { generateUuid } from 'vs/base/common/uuid';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
@ -48,7 +47,7 @@ export class CustomEditorInputFactory extends WebviewEditorInputFactory {
|
||||||
location: data.extensionLocation,
|
location: data.extensionLocation,
|
||||||
id: data.extensionId
|
id: data.extensionId
|
||||||
} : undefined, data.group);
|
} : undefined, data.group);
|
||||||
return new UnownedDisposable(webviewInput.webview);
|
return webviewInput.webview;
|
||||||
});
|
});
|
||||||
|
|
||||||
const customInput = this._instantiationService.createInstance(CustomFileEditorInput, URI.from((data as any).editorResource), data.viewType, id, webview);
|
const customInput = this._instantiationService.createInstance(CustomFileEditorInput, URI.from((data as any).editorResource), data.viewType, id, webview);
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
import { coalesce, distinct, find, mergeSort } from 'vs/base/common/arrays';
|
import { coalesce, distinct, find, mergeSort } from 'vs/base/common/arrays';
|
||||||
import * as glob from 'vs/base/common/glob';
|
import * as glob from 'vs/base/common/glob';
|
||||||
import { Lazy } from 'vs/base/common/lazy';
|
import { Lazy } from 'vs/base/common/lazy';
|
||||||
import { Disposable, UnownedDisposable } from 'vs/base/common/lifecycle';
|
import { Disposable } from 'vs/base/common/lifecycle';
|
||||||
import { basename, isEqual } from 'vs/base/common/resources';
|
import { basename, isEqual } from 'vs/base/common/resources';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { generateUuid } from 'vs/base/common/uuid';
|
import { generateUuid } from 'vs/base/common/uuid';
|
||||||
|
@ -201,7 +201,7 @@ export class CustomEditorService extends Disposable implements ICustomEditorServ
|
||||||
): CustomFileEditorInput {
|
): CustomFileEditorInput {
|
||||||
const id = generateUuid();
|
const id = generateUuid();
|
||||||
const webview = new Lazy(() => {
|
const webview = new Lazy(() => {
|
||||||
return new UnownedDisposable(this.webviewService.createWebviewEditorOverlay(id, { customClasses: options?.customClasses }, {}));
|
return this.webviewService.createWebviewEditorOverlay(id, { customClasses: options?.customClasses }, {});
|
||||||
});
|
});
|
||||||
const input = this.instantiationService.createInstance(CustomFileEditorInput, resource, viewType, id, webview);
|
const input = this.instantiationService.createInstance(CustomFileEditorInput, resource, viewType, id, webview);
|
||||||
if (group) {
|
if (group) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ export interface ICustomEditorService {
|
||||||
promptOpenWith(resource: URI, options?: ITextEditorOptions, group?: IEditorGroup): Promise<IEditor | undefined>;
|
promptOpenWith(resource: URI, options?: ITextEditorOptions, group?: IEditorGroup): Promise<IEditor | undefined>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type CustomEditorEdit = unknown;
|
export type CustomEditorEdit = { source?: any, data: any };
|
||||||
|
|
||||||
export interface ICustomEditorModelManager {
|
export interface ICustomEditorModelManager {
|
||||||
get(resource: URI, viewType: string): ICustomEditorModel | undefined;
|
get(resource: URI, viewType: string): ICustomEditorModel | undefined;
|
||||||
|
@ -48,18 +48,33 @@ export interface ICustomEditorModelManager {
|
||||||
disposeModel(model: ICustomEditorModel): void;
|
disposeModel(model: ICustomEditorModel): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface CustomEditorSaveEvent {
|
||||||
|
readonly resource: URI;
|
||||||
|
readonly waitUntil: (until: Promise<any>) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CustomEditorSaveAsEvent {
|
||||||
|
readonly resource: URI;
|
||||||
|
readonly targetResource: URI;
|
||||||
|
readonly waitUntil: (until: Promise<any>) => void;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ICustomEditorModel extends IWorkingCopy {
|
export interface ICustomEditorModel extends IWorkingCopy {
|
||||||
readonly onUndo: Event<readonly CustomEditorEdit[]>;
|
readonly onUndo: Event<readonly CustomEditorEdit[]>;
|
||||||
readonly onRedo: Event<readonly CustomEditorEdit[]>;
|
readonly onApplyEdit: Event<readonly CustomEditorEdit[]>;
|
||||||
readonly onWillSave: Event<{ waitUntil: (until: Promise<any>) => void }>;
|
readonly onWillSave: Event<CustomEditorSaveEvent>;
|
||||||
|
readonly onWillSaveAs: Event<CustomEditorSaveAsEvent>;
|
||||||
|
|
||||||
|
readonly currentEdits: readonly CustomEditorEdit[];
|
||||||
|
|
||||||
undo(): void;
|
undo(): void;
|
||||||
redo(): void;
|
redo(): void;
|
||||||
revert(options?: IRevertOptions): Promise<boolean>;
|
revert(options?: IRevertOptions): Promise<boolean>;
|
||||||
|
|
||||||
save(options?: ISaveOptions): Promise<boolean>;
|
save(options?: ISaveOptions): Promise<boolean>;
|
||||||
|
saveAs(resource: URI, targetResource: URI, currentOptions?: ISaveOptions): Promise<boolean>;
|
||||||
|
|
||||||
makeEdit(data: string): void;
|
makeEdit(edit: CustomEditorEdit): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const enum CustomEditorPriority {
|
export const enum CustomEditorPriority {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
import { Emitter, Event } from 'vs/base/common/event';
|
import { Emitter, Event } from 'vs/base/common/event';
|
||||||
import { Disposable } from 'vs/base/common/lifecycle';
|
import { Disposable } from 'vs/base/common/lifecycle';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { ICustomEditorModel, CustomEditorEdit } from 'vs/workbench/contrib/customEditor/common/customEditor';
|
import { ICustomEditorModel, CustomEditorEdit, CustomEditorSaveAsEvent, CustomEditorSaveEvent } from 'vs/workbench/contrib/customEditor/common/customEditor';
|
||||||
import { WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopyService';
|
import { WorkingCopyCapabilities } from 'vs/workbench/services/workingCopy/common/workingCopyService';
|
||||||
import { ISaveOptions, IRevertOptions } from 'vs/workbench/common/editor';
|
import { ISaveOptions, IRevertOptions } from 'vs/workbench/common/editor';
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ export class CustomEditorModel extends Disposable implements ICustomEditorModel
|
||||||
|
|
||||||
private _currentEditIndex: number = -1;
|
private _currentEditIndex: number = -1;
|
||||||
private _savePoint: number = -1;
|
private _savePoint: number = -1;
|
||||||
private _edits: Array<CustomEditorEdit> = [];
|
private _edits: Array<any> = [];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _resource: URI,
|
private readonly _resource: URI,
|
||||||
|
@ -44,16 +44,24 @@ export class CustomEditorModel extends Disposable implements ICustomEditorModel
|
||||||
protected readonly _onUndo = this._register(new Emitter<readonly CustomEditorEdit[]>());
|
protected readonly _onUndo = this._register(new Emitter<readonly CustomEditorEdit[]>());
|
||||||
readonly onUndo = this._onUndo.event;
|
readonly onUndo = this._onUndo.event;
|
||||||
|
|
||||||
protected readonly _onRedo = this._register(new Emitter<readonly CustomEditorEdit[]>());
|
protected readonly _onApplyEdit = this._register(new Emitter<readonly CustomEditorEdit[]>());
|
||||||
readonly onRedo = this._onRedo.event;
|
readonly onApplyEdit = this._onApplyEdit.event;
|
||||||
|
|
||||||
protected readonly _onWillSave = this._register(new Emitter<{ waitUntil: (until: Promise<any>) => void }>());
|
protected readonly _onWillSave = this._register(new Emitter<CustomEditorSaveEvent>());
|
||||||
readonly onWillSave = this._onWillSave.event;
|
readonly onWillSave = this._onWillSave.event;
|
||||||
|
|
||||||
public makeEdit(data: string): void {
|
protected readonly _onWillSaveAs = this._register(new Emitter<CustomEditorSaveAsEvent>());
|
||||||
this._edits.splice(this._currentEditIndex + 1, this._edits.length - this._currentEditIndex, data);
|
readonly onWillSaveAs = this._onWillSaveAs.event;
|
||||||
|
|
||||||
|
get currentEdits(): readonly CustomEditorEdit[] {
|
||||||
|
return this._edits.slice(0, Math.max(0, this._currentEditIndex + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public makeEdit(edit: CustomEditorEdit): void {
|
||||||
|
this._edits.splice(this._currentEditIndex + 1, this._edits.length - this._currentEditIndex, edit.data);
|
||||||
this._currentEditIndex = this._edits.length - 1;
|
this._currentEditIndex = this._edits.length - 1;
|
||||||
this.updateDirty();
|
this.updateDirty();
|
||||||
|
this._onApplyEdit.fire([edit]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private updateDirty() {
|
private updateDirty() {
|
||||||
|
@ -62,7 +70,10 @@ export class CustomEditorModel extends Disposable implements ICustomEditorModel
|
||||||
|
|
||||||
public async save(_options?: ISaveOptions): Promise<boolean> {
|
public async save(_options?: ISaveOptions): Promise<boolean> {
|
||||||
const untils: Promise<any>[] = [];
|
const untils: Promise<any>[] = [];
|
||||||
const handler = { waitUntil: (until: Promise<any>) => untils.push(until) };
|
const handler: CustomEditorSaveEvent = {
|
||||||
|
resource: this._resource,
|
||||||
|
waitUntil: (until: Promise<any>) => untils.push(until)
|
||||||
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this._onWillSave.fire(handler);
|
this._onWillSave.fire(handler);
|
||||||
|
@ -77,6 +88,27 @@ export class CustomEditorModel extends Disposable implements ICustomEditorModel
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async saveAs(resource: URI, targetResource: URI, _options?: ISaveOptions): Promise<boolean> {
|
||||||
|
const untils: Promise<any>[] = [];
|
||||||
|
const handler: CustomEditorSaveAsEvent = {
|
||||||
|
resource,
|
||||||
|
targetResource,
|
||||||
|
waitUntil: (until: Promise<any>) => untils.push(until)
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
this._onWillSaveAs.fire(handler);
|
||||||
|
await Promise.all(untils);
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._savePoint = this._currentEditIndex;
|
||||||
|
this.updateDirty();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public async revert(_options?: IRevertOptions) {
|
public async revert(_options?: IRevertOptions) {
|
||||||
if (this._currentEditIndex === this._savePoint) {
|
if (this._currentEditIndex === this._savePoint) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -87,7 +119,7 @@ export class CustomEditorModel extends Disposable implements ICustomEditorModel
|
||||||
this._onUndo.fire(editsToUndo.reverse());
|
this._onUndo.fire(editsToUndo.reverse());
|
||||||
} else if (this._currentEditIndex < this._savePoint) {
|
} else if (this._currentEditIndex < this._savePoint) {
|
||||||
const editsToRedo = this._edits.slice(this._currentEditIndex, this._savePoint);
|
const editsToRedo = this._edits.slice(this._currentEditIndex, this._savePoint);
|
||||||
this._onRedo.fire(editsToRedo);
|
this._onApplyEdit.fire(editsToRedo);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._currentEditIndex = this._savePoint;
|
this._currentEditIndex = this._savePoint;
|
||||||
|
@ -104,7 +136,7 @@ export class CustomEditorModel extends Disposable implements ICustomEditorModel
|
||||||
|
|
||||||
const undoneEdit = this._edits[this._currentEditIndex];
|
const undoneEdit = this._edits[this._currentEditIndex];
|
||||||
--this._currentEditIndex;
|
--this._currentEditIndex;
|
||||||
this._onUndo.fire([undoneEdit]);
|
this._onUndo.fire([{ data: undoneEdit }]);
|
||||||
|
|
||||||
this.updateDirty();
|
this.updateDirty();
|
||||||
}
|
}
|
||||||
|
@ -117,7 +149,8 @@ export class CustomEditorModel extends Disposable implements ICustomEditorModel
|
||||||
|
|
||||||
++this._currentEditIndex;
|
++this._currentEditIndex;
|
||||||
const redoneEdit = this._edits[this._currentEditIndex];
|
const redoneEdit = this._edits[this._currentEditIndex];
|
||||||
this._onRedo.fire([redoneEdit]);
|
|
||||||
|
this._onApplyEdit.fire([{ data: redoneEdit }]);
|
||||||
|
|
||||||
this.updateDirty();
|
this.updateDirty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ import { RunOnceScheduler } from 'vs/base/common/async';
|
||||||
import { IExtensionHostDebugService } from 'vs/platform/debug/common/extensionHostDebug';
|
import { IExtensionHostDebugService } from 'vs/platform/debug/common/extensionHostDebug';
|
||||||
import { isCodeEditor } from 'vs/editor/browser/editorBrowser';
|
import { isCodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||||
import { CancellationTokenSource } from 'vs/base/common/cancellation';
|
import { CancellationTokenSource } from 'vs/base/common/cancellation';
|
||||||
|
import { withUndefinedAsNull } from 'vs/base/common/types';
|
||||||
|
|
||||||
const DEBUG_BREAKPOINTS_KEY = 'debug.breakpoint';
|
const DEBUG_BREAKPOINTS_KEY = 'debug.breakpoint';
|
||||||
const DEBUG_FUNCTION_BREAKPOINTS_KEY = 'debug.functionbreakpoint';
|
const DEBUG_FUNCTION_BREAKPOINTS_KEY = 'debug.functionbreakpoint';
|
||||||
|
@ -807,7 +808,7 @@ export class DebugService implements IDebugService {
|
||||||
return inactivePromise;
|
return inactivePromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
return taskPromise;
|
return taskPromise.then(withUndefinedAsNull);
|
||||||
});
|
});
|
||||||
|
|
||||||
return new Promise((c, e) => {
|
return new Promise((c, e) => {
|
||||||
|
|
|
@ -141,7 +141,7 @@ export class DebugToolBar extends Themable implements IWorkbenchContribution {
|
||||||
this.$el = dom.$('div.debug-toolbar');
|
this.$el = dom.$('div.debug-toolbar');
|
||||||
this.$el.style.top = `${layoutService.getTitleBarOffset()}px`;
|
this.$el.style.top = `${layoutService.getTitleBarOffset()}px`;
|
||||||
|
|
||||||
this.dragArea = dom.append(this.$el, dom.$('div.drag-area'));
|
this.dragArea = dom.append(this.$el, dom.$('div.drag-area.codicon.codicon-gripper'));
|
||||||
|
|
||||||
const actionBarContainer = dom.append(this.$el, dom.$('div.action-bar-container'));
|
const actionBarContainer = dom.append(this.$el, dom.$('div.action-bar-container'));
|
||||||
this.debugToolBarMenu = menuService.createMenu(MenuId.DebugToolBar, contextKeyService);
|
this.debugToolBarMenu = menuService.createMenu(MenuId.DebugToolBar, contextKeyService);
|
||||||
|
|
|
@ -28,8 +28,10 @@
|
||||||
cursor: grab;
|
cursor: grab;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
background: url('drag.svg') center center no-repeat;
|
opacity: 0.5;
|
||||||
background-size: 16px 16px;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-workbench .debug-toolbar .drag-area.dragged {
|
.monaco-workbench .debug-toolbar .drag-area.dragged {
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<rect x="5" y="3" width="2" height="2" fill="#848484"/>
|
|
||||||
<rect x="5" y="7" width="2" height="2" fill="#848484"/>
|
|
||||||
<rect x="5" y="11" width="2" height="2" fill="#848484"/>
|
|
||||||
<rect x="9" y="3" width="2" height="2" fill="#848484"/>
|
|
||||||
<rect x="9" y="7" width="2" height="2" fill="#848484"/>
|
|
||||||
<rect x="9" y="11" width="2" height="2" fill="#848484"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 441 B |
|
@ -1253,6 +1253,10 @@ export class ReloadAction extends ExtensionAction {
|
||||||
this.label = localize('reloadRequired', "Reload Required");
|
this.label = localize('reloadRequired', "Reload Required");
|
||||||
this.tooltip = localize('postUpdateTooltip', "Please reload Visual Studio Code to enable the updated extension.");
|
this.tooltip = localize('postUpdateTooltip', "Please reload Visual Studio Code to enable the updated extension.");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.enabled = true;
|
||||||
|
this.label = localize('reloadRequired', "Reload Required");
|
||||||
|
this.tooltip = localize('postEnableTooltip', "Please reload Visual Studio Code to enable this extension.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1463,7 +1463,7 @@ suite('ExtensionsActions Test', () => {
|
||||||
assert.equal(testObject.tooltip, 'Please reload Visual Studio Code to enable this extension.');
|
assert.equal(testObject.tooltip, 'Please reload Visual Studio Code to enable this extension.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test ReloadAction is disabled when remote ui extension is installed in local server', async () => {
|
test('Test ReloadAction when ui extension is disabled on remote server and installed in local server', async () => {
|
||||||
// multi server setup
|
// multi server setup
|
||||||
const gallery = aGalleryExtension('a');
|
const gallery = aGalleryExtension('a');
|
||||||
const localExtensionManagementService = createExtensionManagementService([]);
|
const localExtensionManagementService = createExtensionManagementService([]);
|
||||||
|
@ -1478,7 +1478,7 @@ suite('ExtensionsActions Test', () => {
|
||||||
|
|
||||||
const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
|
const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
|
||||||
instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
|
instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
|
||||||
getExtensions: () => Promise.resolve([ExtensionsActions.toExtensionDescription(remoteExtension)]),
|
getExtensions: () => Promise.resolve([]),
|
||||||
onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
|
onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
|
||||||
canAddExtension: (extension) => false
|
canAddExtension: (extension) => false
|
||||||
});
|
});
|
||||||
|
@ -1495,7 +1495,8 @@ suite('ExtensionsActions Test', () => {
|
||||||
const localExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file('pub.a') });
|
const localExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file('pub.a') });
|
||||||
onDidInstallEvent.fire({ identifier: localExtension.identifier, local: localExtension, operation: InstallOperation.Install });
|
onDidInstallEvent.fire({ identifier: localExtension.identifier, local: localExtension, operation: InstallOperation.Install });
|
||||||
|
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal(testObject.tooltip, 'Please reload Visual Studio Code to enable this extension.');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test ReloadAction for remote ui extension is disabled when it is installed and enabled in local server', async () => {
|
test('Test ReloadAction for remote ui extension is disabled when it is installed and enabled in local server', async () => {
|
||||||
|
@ -1529,37 +1530,6 @@ suite('ExtensionsActions Test', () => {
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(!testObject.enabled);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test ReloadAction for local ui extension is disabled when it is installed and enabled in remote server', async () => {
|
|
||||||
// multi server setup
|
|
||||||
const gallery = aGalleryExtension('a');
|
|
||||||
const localExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file('pub.a') });
|
|
||||||
const localExtensionManagementService = createExtensionManagementService([localExtension]);
|
|
||||||
const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
|
|
||||||
localExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
|
|
||||||
const remoteExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file('pub.a').with({ scheme: Schemas.vscodeRemote }) });
|
|
||||||
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteExtension]));
|
|
||||||
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
|
||||||
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
|
||||||
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
|
||||||
instantiationService.set(IExtensionsWorkbenchService, workbenchService);
|
|
||||||
|
|
||||||
const onDidChangeExtensionsEmitter: Emitter<void> = new Emitter<void>();
|
|
||||||
instantiationService.stub(IExtensionService, <Partial<IExtensionService>>{
|
|
||||||
getExtensions: () => Promise.resolve([ExtensionsActions.toExtensionDescription(remoteExtension)]),
|
|
||||||
onDidChangeExtensions: onDidChangeExtensionsEmitter.event,
|
|
||||||
canAddExtension: (extension) => false
|
|
||||||
});
|
|
||||||
const testObject: ExtensionsActions.ReloadAction = instantiationService.createInstance(ExtensionsActions.ReloadAction);
|
|
||||||
instantiationService.createInstance(ExtensionContainers, [testObject]);
|
|
||||||
instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
|
|
||||||
|
|
||||||
await workbenchService.queryGallery(CancellationToken.None);
|
|
||||||
const extensions = await workbenchService.queryLocal(extensionManagementServerService.localExtensionManagementServer!);
|
|
||||||
testObject.extension = extensions[0];
|
|
||||||
assert.ok(testObject.extension);
|
|
||||||
assert.ok(!testObject.enabled);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('Test remote install action is enabled for local workspace extension', async () => {
|
test('Test remote install action is enabled for local workspace extension', async () => {
|
||||||
// multi server setup
|
// multi server setup
|
||||||
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
const localWorkspaceExtension = aLocalExtension('a', { extensionKind: 'workspace' }, { location: URI.file(`pub.a`) });
|
||||||
|
@ -1913,7 +1883,7 @@ suite('ExtensionsActions Test', () => {
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(!testObject.enabled);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test local install action is disabled for remote ui extension', async () => {
|
test('Test local install action is enabled for remote ui extension', async () => {
|
||||||
// multi server setup
|
// multi server setup
|
||||||
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
||||||
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
||||||
|
@ -1929,7 +1899,9 @@ suite('ExtensionsActions Test', () => {
|
||||||
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
||||||
await workbenchService.queryGallery(CancellationToken.None);
|
await workbenchService.queryGallery(CancellationToken.None);
|
||||||
testObject.extension = extensions[0];
|
testObject.extension = extensions[0];
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal('Install Locally', testObject.label);
|
||||||
|
assert.equal('extension-action prominent install', testObject.class);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test local install action when installing remote ui extension', async () => {
|
test('Test local install action when installing remote ui extension', async () => {
|
||||||
|
@ -1953,10 +1925,54 @@ suite('ExtensionsActions Test', () => {
|
||||||
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
||||||
await workbenchService.queryGallery(CancellationToken.None);
|
await workbenchService.queryGallery(CancellationToken.None);
|
||||||
testObject.extension = extensions[0];
|
testObject.extension = extensions[0];
|
||||||
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal('Install Locally', testObject.label);
|
||||||
|
assert.equal('extension-action prominent install', testObject.class);
|
||||||
|
|
||||||
|
onInstallExtension.fire({ identifier: remoteUIExtension.identifier, gallery });
|
||||||
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal('Installing', testObject.label);
|
||||||
|
assert.equal('extension-action install installing', testObject.class);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Test local install action when installing remote ui extension is finished', async () => {
|
||||||
|
// multi server setup
|
||||||
|
const localExtensionManagementService: IExtensionManagementService = createExtensionManagementService();
|
||||||
|
const onInstallExtension = new Emitter<InstallExtensionEvent>();
|
||||||
|
localExtensionManagementService.onInstallExtension = onInstallExtension.event;
|
||||||
|
const onDidInstallEvent = new Emitter<DidInstallExtensionEvent>();
|
||||||
|
localExtensionManagementService.onDidInstallExtension = onDidInstallEvent.event;
|
||||||
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
||||||
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, localExtensionManagementService, createExtensionManagementService([remoteUIExtension]));
|
||||||
|
instantiationService.stub(IExtensionManagementServerService, extensionManagementServerService);
|
||||||
|
instantiationService.stub(IExtensionEnablementService, new TestExtensionEnablementService(instantiationService));
|
||||||
|
const workbenchService: IExtensionsWorkbenchService = instantiationService.createInstance(ExtensionsWorkbenchService);
|
||||||
|
instantiationService.stub(IExtensionsWorkbenchService, workbenchService, 'open', undefined);
|
||||||
|
instantiationService.set(IExtensionsWorkbenchService, workbenchService);
|
||||||
|
|
||||||
|
const gallery = aGalleryExtension('a', { identifier: remoteUIExtension.identifier });
|
||||||
|
instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));
|
||||||
|
const testObject: ExtensionsActions.InstallAction = instantiationService.createInstance(ExtensionsActions.LocalInstallAction);
|
||||||
|
instantiationService.createInstance(ExtensionContainers, [testObject]);
|
||||||
|
|
||||||
|
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
||||||
|
await workbenchService.queryGallery(CancellationToken.None);
|
||||||
|
testObject.extension = extensions[0];
|
||||||
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal('Install Locally', testObject.label);
|
||||||
|
assert.equal('extension-action prominent install', testObject.class);
|
||||||
|
|
||||||
|
onInstallExtension.fire({ identifier: remoteUIExtension.identifier, gallery });
|
||||||
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal('Installing', testObject.label);
|
||||||
|
assert.equal('extension-action install installing', testObject.class);
|
||||||
|
|
||||||
|
const installedExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`) });
|
||||||
|
onDidInstallEvent.fire({ identifier: installedExtension.identifier, local: installedExtension, operation: InstallOperation.Install });
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(!testObject.enabled);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test local install action is disabled for disabled remote ui extension', async () => {
|
test('Test local install action is enabled for disabled remote ui extension', async () => {
|
||||||
// multi server setup
|
// multi server setup
|
||||||
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
||||||
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
||||||
|
@ -1973,7 +1989,9 @@ suite('ExtensionsActions Test', () => {
|
||||||
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
||||||
await workbenchService.queryGallery(CancellationToken.None);
|
await workbenchService.queryGallery(CancellationToken.None);
|
||||||
testObject.extension = extensions[0];
|
testObject.extension = extensions[0];
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal('Install Locally', testObject.label);
|
||||||
|
assert.equal('extension-action prominent install', testObject.class);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test local install action is disabled when extension is not set', async () => {
|
test('Test local install action is disabled when extension is not set', async () => {
|
||||||
|
@ -2073,7 +2091,7 @@ suite('ExtensionsActions Test', () => {
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(!testObject.enabled);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test local install action is disabled for remote UI extension if it uninstalled locally', async () => {
|
test('Test local install action is disabled for remoteUI extension if it is uninstalled locally', async () => {
|
||||||
// multi server setup
|
// multi server setup
|
||||||
const extensionManagementService = instantiationService.get(IExtensionManagementService);
|
const extensionManagementService = instantiationService.get(IExtensionManagementService);
|
||||||
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), extensionManagementService);
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), extensionManagementService);
|
||||||
|
@ -2091,13 +2109,14 @@ suite('ExtensionsActions Test', () => {
|
||||||
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
||||||
await workbenchService.queryGallery(CancellationToken.None);
|
await workbenchService.queryGallery(CancellationToken.None);
|
||||||
testObject.extension = extensions[0];
|
testObject.extension = extensions[0];
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(testObject.enabled);
|
||||||
|
assert.equal('Install Locally', testObject.label);
|
||||||
|
|
||||||
uninstallEvent.fire(remoteUIExtension.identifier);
|
uninstallEvent.fire(remoteUIExtension.identifier);
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(!testObject.enabled);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test local install action is disabled for remote UI extension if it has gallery', async () => {
|
test('Test local install action is enabled for remote UI extension if it has gallery', async () => {
|
||||||
// multi server setup
|
// multi server setup
|
||||||
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
const remoteUIExtension = aLocalExtension('a', { extensionKind: 'ui' }, { location: URI.file(`pub.a`).with({ scheme: Schemas.vscodeRemote }) });
|
||||||
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
const extensionManagementServerService = aMultiExtensionManagementServerService(instantiationService, createExtensionManagementService(), createExtensionManagementService([remoteUIExtension]));
|
||||||
|
@ -2113,7 +2132,7 @@ suite('ExtensionsActions Test', () => {
|
||||||
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
const extensions = await workbenchService.queryLocal(extensionManagementServerService.remoteExtensionManagementServer!);
|
||||||
testObject.extension = extensions[0];
|
testObject.extension = extensions[0];
|
||||||
assert.ok(testObject.extension);
|
assert.ok(testObject.extension);
|
||||||
assert.ok(!testObject.enabled);
|
assert.ok(testObject.enabled);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Test local install action is disabled for remote UI system extension', async () => {
|
test('Test local install action is disabled for remote UI system extension', async () => {
|
||||||
|
|
|
@ -206,7 +206,7 @@ suite('ExtensionsTipsService Test', () => {
|
||||||
...{
|
...{
|
||||||
extensionTips: {
|
extensionTips: {
|
||||||
'ms-vscode.csharp': '{**/*.cs,**/project.json,**/global.json,**/*.csproj,**/*.sln,**/appsettings.json}',
|
'ms-vscode.csharp': '{**/*.cs,**/project.json,**/global.json,**/*.csproj,**/*.sln,**/appsettings.json}',
|
||||||
'msjsdiag.debugger-for-chrome': '{**/*.ts,**/*.tsx**/*.js,**/*.jsx,**/*.es6,**/.babelrc}',
|
'msjsdiag.debugger-for-chrome': '{**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.es6,**/*.mjs,**/*.cjs,**/.babelrc}',
|
||||||
'lukehoban.Go': '**/*.go'
|
'lukehoban.Go': '**/*.go'
|
||||||
},
|
},
|
||||||
extensionImportantTips: {
|
extensionImportantTips: {
|
||||||
|
|
|
@ -27,7 +27,7 @@ import { IEditorGroupsService, IEditorGroup } from 'vs/workbench/services/editor
|
||||||
import { ResourceQueue, timeout } from 'vs/base/common/async';
|
import { ResourceQueue, timeout } from 'vs/base/common/async';
|
||||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||||
import { withNullAsUndefined } from 'vs/base/common/types';
|
import { withNullAsUndefined } from 'vs/base/common/types';
|
||||||
import { EditorActivation } from 'vs/platform/editor/common/editor';
|
import { EditorActivation, ITextEditorOptions } from 'vs/platform/editor/common/editor';
|
||||||
|
|
||||||
export class FileEditorTracker extends Disposable implements IWorkbenchContribution {
|
export class FileEditorTracker extends Disposable implements IWorkbenchContribution {
|
||||||
|
|
||||||
|
@ -215,8 +215,8 @@ export class FileEditorTracker extends Disposable implements IWorkbenchContribut
|
||||||
private handleMovedFileInOpenedEditors(oldResource: URI, newResource: URI): void {
|
private handleMovedFileInOpenedEditors(oldResource: URI, newResource: URI): void {
|
||||||
this.editorGroupService.groups.forEach(group => {
|
this.editorGroupService.groups.forEach(group => {
|
||||||
group.editors.forEach(editor => {
|
group.editors.forEach(editor => {
|
||||||
if (editor instanceof FileEditorInput) {
|
const resource = editor.getResource();
|
||||||
const resource = editor.getResource();
|
if (resource && (editor instanceof FileEditorInput || editor.handleMove)) {
|
||||||
|
|
||||||
// Update Editor if file (or any parent of the input) got renamed or moved
|
// Update Editor if file (or any parent of the input) got renamed or moved
|
||||||
if (resources.isEqualOrParent(resource, oldResource)) {
|
if (resources.isEqualOrParent(resource, oldResource)) {
|
||||||
|
@ -228,15 +228,27 @@ export class FileEditorTracker extends Disposable implements IWorkbenchContribut
|
||||||
reopenFileResource = resources.joinPath(newResource, resource.path.substr(index + oldResource.path.length + 1)); // parent folder got moved
|
reopenFileResource = resources.joinPath(newResource, resource.path.substr(index + oldResource.path.length + 1)); // parent folder got moved
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const options: ITextEditorOptions = {
|
||||||
|
preserveFocus: true,
|
||||||
|
pinned: group.isPinned(editor),
|
||||||
|
index: group.getIndexOfEditor(editor),
|
||||||
|
inactive: !group.isActive(editor),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (editor.handleMove) {
|
||||||
|
const replacement = editor.handleMove(group.id, reopenFileResource, options);
|
||||||
|
if (replacement) {
|
||||||
|
this.editorService.replaceEditors([{ editor, replacement }], group);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.editorService.replaceEditors([{
|
this.editorService.replaceEditors([{
|
||||||
editor: { resource },
|
editor: { resource },
|
||||||
replacement: {
|
replacement: {
|
||||||
resource: reopenFileResource,
|
resource: reopenFileResource,
|
||||||
options: {
|
options: {
|
||||||
preserveFocus: true,
|
...options,
|
||||||
pinned: group.isPinned(editor),
|
|
||||||
index: group.getIndexOfEditor(editor),
|
|
||||||
inactive: !group.isActive(editor),
|
|
||||||
viewState: this.getViewStateFor(oldResource, group)
|
viewState: this.getViewStateFor(oldResource, group)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -21,14 +21,12 @@ import { CLOSE_SAVED_EDITORS_COMMAND_ID, CLOSE_EDITORS_IN_GROUP_COMMAND_ID, CLOS
|
||||||
import { AutoSaveAfterShortDelayContext } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
|
import { AutoSaveAfterShortDelayContext } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService';
|
||||||
import { ResourceContextKey } from 'vs/workbench/common/resources';
|
import { ResourceContextKey } from 'vs/workbench/common/resources';
|
||||||
import { WorkbenchListDoubleSelection } from 'vs/platform/list/browser/listService';
|
import { WorkbenchListDoubleSelection } from 'vs/platform/list/browser/listService';
|
||||||
import { URI } from 'vs/base/common/uri';
|
|
||||||
import { Schemas } from 'vs/base/common/network';
|
import { Schemas } from 'vs/base/common/network';
|
||||||
import { WorkspaceFolderCountContext, IsWebContext } from 'vs/workbench/browser/contextkeys';
|
import { WorkspaceFolderCountContext, IsWebContext } from 'vs/workbench/browser/contextkeys';
|
||||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { OpenFileFolderAction, OpenFileAction, OpenFolderAction, OpenWorkspaceAction } from 'vs/workbench/browser/actions/workspaceActions';
|
import { OpenFileFolderAction, OpenFileAction, OpenFolderAction, OpenWorkspaceAction } from 'vs/workbench/browser/actions/workspaceActions';
|
||||||
import { ActiveEditorIsReadonlyContext, DirtyWorkingCopiesContext, ActiveEditorContext } from 'vs/workbench/common/editor';
|
import { ActiveEditorIsReadonlyContext, DirtyWorkingCopiesContext, ActiveEditorContext } from 'vs/workbench/common/editor';
|
||||||
import { SidebarFocusContext } from 'vs/workbench/common/viewlet';
|
import { SidebarFocusContext } from 'vs/workbench/common/viewlet';
|
||||||
import { registerAndGetAmdImageURL } from 'vs/base/common/amd';
|
|
||||||
|
|
||||||
// Contribute Global Actions
|
// Contribute Global Actions
|
||||||
const category = { value: nls.localize('filesCategory', "File"), original: 'File' };
|
const category = { value: nls.localize('filesCategory', "File"), original: 'File' };
|
||||||
|
@ -181,23 +179,17 @@ export function appendEditorTitleContextMenuItem(id: string, title: string, when
|
||||||
}
|
}
|
||||||
|
|
||||||
// Editor Title Menu for Conflict Resolution
|
// Editor Title Menu for Conflict Resolution
|
||||||
appendSaveConflictEditorTitleAction('workbench.files.action.acceptLocalChanges', nls.localize('acceptLocalChanges', "Use your changes and overwrite file contents"), {
|
appendSaveConflictEditorTitleAction('workbench.files.action.acceptLocalChanges', nls.localize('acceptLocalChanges', "Use your changes and overwrite file contents"), 'codicon-check', -10, acceptLocalChangesCommand);
|
||||||
light: URI.parse(registerAndGetAmdImageURL(`vs/workbench/contrib/files/browser/media/check-light.svg`)),
|
appendSaveConflictEditorTitleAction('workbench.files.action.revertLocalChanges', nls.localize('revertLocalChanges', "Discard your changes and revert to file contents"), 'codicon-discard', -9, revertLocalChangesCommand);
|
||||||
dark: URI.parse(registerAndGetAmdImageURL(`vs/workbench/contrib/files/browser/media/check-dark.svg`))
|
|
||||||
}, -10, acceptLocalChangesCommand);
|
|
||||||
appendSaveConflictEditorTitleAction('workbench.files.action.revertLocalChanges', nls.localize('revertLocalChanges', "Discard your changes and revert to file contents"), {
|
|
||||||
light: URI.parse(registerAndGetAmdImageURL(`vs/workbench/contrib/files/browser/media/undo-light.svg`)),
|
|
||||||
dark: URI.parse(registerAndGetAmdImageURL(`vs/workbench/contrib/files/browser/media/undo-dark.svg`))
|
|
||||||
}, -9, revertLocalChangesCommand);
|
|
||||||
|
|
||||||
function appendSaveConflictEditorTitleAction(id: string, title: string, iconLocation: { dark: URI; light?: URI; }, order: number, command: ICommandHandler): void {
|
function appendSaveConflictEditorTitleAction(id: string, title: string, iconClassName: string, order: number, command: ICommandHandler): void {
|
||||||
|
|
||||||
// Command
|
// Command
|
||||||
CommandsRegistry.registerCommand(id, command);
|
CommandsRegistry.registerCommand(id, command);
|
||||||
|
|
||||||
// Action
|
// Action
|
||||||
MenuRegistry.appendMenuItem(MenuId.EditorTitle, {
|
MenuRegistry.appendMenuItem(MenuId.EditorTitle, {
|
||||||
command: { id, title, iconLocation },
|
command: { id, title, iconClassName },
|
||||||
when: ContextKeyExpr.equals(CONFLICT_RESOLUTION_CONTEXT, true),
|
when: ContextKeyExpr.equals(CONFLICT_RESOLUTION_CONTEXT, true),
|
||||||
group: 'navigation',
|
group: 'navigation',
|
||||||
order
|
order
|
||||||
|
|
|
@ -275,7 +275,7 @@ async function deleteFiles(textFileService: ITextFileService, dialogService: IDi
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return servicePromise;
|
return servicePromise.then(undefined);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4315 3.3232L5.96154 13.3232L5.17083 13.2874L1.82083 8.5174L2.63918 7.94268L5.617 12.1827L13.6685 2.67688L14.4315 3.3232Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 295 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4315 3.3232L5.96154 13.3232L5.17083 13.2874L1.82083 8.5174L2.63918 7.94268L5.617 12.1827L13.6685 2.67688L14.4315 3.3232Z" fill="#424242"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 295 B |
|
@ -1,4 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M9 9H4V10H9V9Z" fill="#C5C5C5"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3L6 2H13L14 3V10L13 11H11V13L10 14H3L2 13V6L3 5H5V3ZM6 5H10L11 6V10H13V3H6V5ZM10 6H3V13H10V6Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 309 B |
|
@ -1,4 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M9 9H4V10H9V9Z" fill="white"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3L6 2H13L14 3V10L13 11H11V13L10 14H3L2 13V6L3 5H5V3ZM6 5H10L11 6V10H13V3H6V5ZM10 6H3V13H10V6Z" fill="white"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 305 B |
|
@ -1,4 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path d="M9 9H4V10H9V9Z" fill="#424242"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 3L6 2H13L14 3V10L13 11H11V13L10 14H3L2 13V6L3 5H5V3ZM6 5H10L11 6V10H13V3H6V5ZM10 6H3V13H10V6Z" fill="#424242"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 309 B |
|
@ -169,16 +169,3 @@
|
||||||
.hc-black .monaco-workbench .explorer-viewlet .editor-group {
|
.hc-black .monaco-workbench .explorer-viewlet .editor-group {
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO @misolori convert these to use icon font, for the debug viewlet */
|
|
||||||
.monaco-workbench .explorer-action.collapse-explorer {
|
|
||||||
background: url("collapse-all-light.svg") 50% no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark .monaco-workbench .explorer-action.collapse-explorer {
|
|
||||||
background: url("collapse-all-dark.svg") 50% no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.hc-black .monaco-workbench .explorer-action.collapse-explorer {
|
|
||||||
background: url("collapse-all-hc.svg") 50% no-repeat;
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,41 +3,6 @@
|
||||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/* Split editor vertical */
|
|
||||||
.monaco-workbench .quick-open-sidebyside-vertical {
|
|
||||||
background-image: url("split-editor-vertical-light.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark .monaco-workbench .quick-open-sidebyside-vertical {
|
|
||||||
background-image: url("split-editor-vertical-dark.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.hc-black .monaco-workbench .quick-open-sidebyside-vertical {
|
|
||||||
background-image: url("split-editor-vertical-hc.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Split editor horizontal */
|
|
||||||
.monaco-workbench .quick-open-sidebyside-horizontal {
|
|
||||||
background-image: url("split-editor-horizontal-light.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark .monaco-workbench .quick-open-sidebyside-horizontal {
|
|
||||||
background-image: url("split-editor-horizontal-dark.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.hc-black .monaco-workbench .quick-open-sidebyside-horizontal {
|
|
||||||
background-image: url("split-editor-horizontal-hc.svg");
|
|
||||||
}
|
|
||||||
|
|
||||||
.monaco-workbench .file-editor-action.action-open-preview {
|
|
||||||
background: url("preview-light.svg") center center no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark .monaco-workbench .file-editor-action.action-open-preview,
|
|
||||||
.hc-black .monaco-workbench .file-editor-action.action-open-preview {
|
|
||||||
background: url("preview-dark.svg") center center no-repeat;
|
|
||||||
}
|
|
||||||
|
|
||||||
.explorer-viewlet .explorer-open-editors .monaco-list .monaco-list-row.dirty:not(:hover) > .monaco-action-bar .codicon-close::before {
|
.explorer-viewlet .explorer-open-editors .monaco-list .monaco-list-row.dirty:not(:hover) > .monaco-action-bar .codicon-close::before {
|
||||||
content: "\ea71";
|
content: "\ea71";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.219 8.35484C11.6063 8.12309 12.049 8.00047 12.5003 8C12.8904 7.99939 13.2753 8.0901 13.6241 8.26486C13.9729 8.43963 14.276 8.6936 14.5091 9.00646C14.7421 9.31933 14.8987 9.6824 14.9664 10.0666C15.034 10.4509 15.0108 10.8456 14.8985 11.2192C14.7863 11.5929 14.5882 11.9351 14.32 12.2184C14.0518 12.5018 13.7211 12.7185 13.3542 12.8511C12.9873 12.9837 12.5944 13.0287 12.207 12.9823C11.8197 12.9359 11.4485 12.7995 11.1233 12.584L8.7683 14.9399L8.06055 14.2322L10.4163 11.877C10.1677 11.5003 10.0258 11.0634 10.0054 10.6126C9.98511 10.1618 10.0872 9.71384 10.3009 9.31634C10.5145 8.91885 10.8318 8.58659 11.219 8.35484ZM11.667 11.7472C11.9136 11.912 12.2036 12 12.5003 12C12.8981 12 13.2797 11.842 13.561 11.5607C13.8423 11.2794 14.0003 10.8978 14.0003 10.5C14.0003 10.2033 13.9123 9.91332 13.7475 9.66665C13.5827 9.41997 13.3484 9.22772 13.0743 9.11418C12.8002 9.00065 12.4986 8.97095 12.2077 9.02883C11.9167 9.0867 11.6494 9.22956 11.4396 9.43934C11.2299 9.64912 11.087 9.9164 11.0291 10.2074C10.9712 10.4983 11.001 10.7999 11.1145 11.074C11.228 11.3481 11.4203 11.5824 11.667 11.7472Z" fill="#C5C5C5"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13 1L14 2V7.33573C13.6829 7.18584 13.3457 7.08481 13 7.03533V2L8 2L8 12.8787L6.87837 14H2L1 13V2L2 1H13ZM9.70794 14H9.70785L10 13.7077V13.7079L9.70794 14ZM13 10.5174C13.0002 10.5116 13.0003 10.5058 13.0003 10.5C13.0003 10.4942 13.0002 10.4884 13 10.4826V10.5174ZM2 2L7 2L7 13H2L2 2Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,4 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.219 8.35484C11.6063 8.12309 12.049 8.00047 12.5003 8C12.8904 7.99939 13.2753 8.0901 13.6241 8.26486C13.9729 8.43963 14.276 8.6936 14.5091 9.00646C14.7421 9.31933 14.8987 9.6824 14.9664 10.0666C15.034 10.4509 15.0108 10.8456 14.8985 11.2192C14.7863 11.5929 14.5882 11.9351 14.32 12.2184C14.0518 12.5018 13.7211 12.7185 13.3542 12.8511C12.9873 12.9837 12.5944 13.0287 12.207 12.9823C11.8197 12.9359 11.4485 12.7995 11.1233 12.584L8.7683 14.9399L8.06055 14.2322L10.4163 11.877C10.1677 11.5003 10.0258 11.0634 10.0054 10.6126C9.98511 10.1618 10.0872 9.71384 10.3009 9.31634C10.5145 8.91885 10.8318 8.58659 11.219 8.35484ZM11.667 11.7472C11.9136 11.912 12.2036 12 12.5003 12C12.8981 12 13.2797 11.842 13.561 11.5607C13.8423 11.2794 14.0003 10.8978 14.0003 10.5C14.0003 10.2033 13.9123 9.91332 13.7475 9.66665C13.5827 9.41997 13.3484 9.22772 13.0743 9.11418C12.8002 9.00065 12.4986 8.97095 12.2077 9.02883C11.9167 9.0867 11.6494 9.22956 11.4396 9.43934C11.2299 9.64912 11.087 9.9164 11.0291 10.2074C10.9712 10.4983 11.001 10.7999 11.1145 11.074C11.228 11.3481 11.4203 11.5824 11.667 11.7472Z" fill="#424242"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13 1L14 2V7.33573C13.6829 7.18584 13.3457 7.08481 13 7.03533V2L8 2L8 12.8787L6.87837 14H2L1 13V2L2 1H13ZM9.70794 14H9.70785L10 13.7077V13.7079L9.70794 14ZM13 10.5174C13.0002 10.5116 13.0003 10.5058 13.0003 10.5C13.0003 10.4942 13.0002 10.4884 13 10.4826V10.5174ZM2 2L7 2L7 13H2L2 2Z" fill="#424242"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 1L2 2V13L3 14H14L15 13V2L14 1H3ZM3 7V2H14V7H3ZM3 8V13H14V8H3Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 235 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 1L2 2V13L3 14H14L15 13V2L14 1H3ZM3 7V2H14V7H3ZM3 8V13H14V8H3Z" fill="white"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 233 B |
|
@ -1,7 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<mask id="path-1-inside-1" fill="white">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 1L2 2V13L3 14H14L15 13V2L14 1H3ZM3 7V2H14V7H3ZM3 8V13H14V8H3Z"/>
|
|
||||||
</mask>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 1L2 2V13L3 14H14L15 13V2L14 1H3ZM3 7V2H14V7H3ZM3 8V13H14V8H3Z" fill="#C5C5C5"/>
|
|
||||||
<path d="M2 2L1.29289 1.29289L1 1.58579V2H2ZM3 1V0H2.58579L2.29289 0.292893L3 1ZM2 13H1V13.4142L1.29289 13.7071L2 13ZM3 14L2.29289 14.7071L2.58579 15H3V14ZM14 14V15H14.4142L14.7071 14.7071L14 14ZM15 13L15.7071 13.7071L16 13.4142V13H15ZM15 2H16V1.58579L15.7071 1.29289L15 2ZM14 1L14.7071 0.292893L14.4142 0H14V1ZM3 2V1H2V2H3ZM3 7H2V8H3V7ZM14 2H15V1H14V2ZM14 7V8H15V7H14ZM3 8V7H2V8H3ZM3 13H2V14H3V13ZM14 13V14H15V13H14ZM14 8H15V7H14V8ZM2.70711 2.70711L3.70711 1.70711L2.29289 0.292893L1.29289 1.29289L2.70711 2.70711ZM3 13V2H1V13H3ZM3.70711 13.2929L2.70711 12.2929L1.29289 13.7071L2.29289 14.7071L3.70711 13.2929ZM14 13H3V15H14V13ZM14.2929 12.2929L13.2929 13.2929L14.7071 14.7071L15.7071 13.7071L14.2929 12.2929ZM14 2V13H16V2H14ZM13.2929 1.70711L14.2929 2.70711L15.7071 1.29289L14.7071 0.292893L13.2929 1.70711ZM3 2H14V0H3V2ZM2 2V7H4V2H2ZM14 1H3V3H14V1ZM15 7V2H13V7H15ZM3 8H14V6H3V8ZM2 8V13H4V8H2ZM3 14H14V12H3V14ZM15 13V8H13V13H15ZM14 7H3V9H14V7Z" fill="#424242" mask="url(#path-1-inside-1)"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 2L14 1L3 0.999999L2 2L2 13L3 14L14 14L15 13L15 2ZM9 2L14 2L14 13L9 13L9 2ZM8 2L3 2L3 13L8 13L8 2Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 272 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 2L14 1L3 0.999999L2 2L2 13L3 14L14 14L15 13L15 2ZM9 2L14 2L14 13L9 13L9 2ZM8 2L3 2L3 13L8 13L8 2Z" fill="white"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 270 B |
|
@ -1,7 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<mask id="path-1-inside-1" fill="white">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 2L14 1L3 0.999999L2 2L2 13L3 14L14 14L15 13L15 2ZM9 2L14 2L14 13L9 13L9 2ZM8 2L3 2L3 13L8 13L8 2Z"/>
|
|
||||||
</mask>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M15 2L14 1L3 0.999999L2 2L2 13L3 14L14 14L15 13L15 2ZM9 2L14 2L14 13L9 13L9 2ZM8 2L3 2L3 13L8 13L8 2Z" fill="#C5C5C5"/>
|
|
||||||
<path d="M14 1L14.7071 0.292893L14.4142 -2.56055e-08L14 -4.37114e-08L14 1ZM15 2L16 2L16 1.58579L15.7071 1.29289L15 2ZM3 0.999999L3 -5.24537e-07L2.58579 -5.42643e-07L2.29289 0.292893L3 0.999999ZM2 2L1.29289 1.29289L1 1.58579L1 2L2 2ZM2 13L0.999999 13L0.999999 13.4142L1.29289 13.7071L2 13ZM3 14L2.29289 14.7071L2.58579 15L3 15L3 14ZM14 14L14 15L14.4142 15L14.7071 14.7071L14 14ZM15 13L15.7071 13.7071L16 13.4142L16 13L15 13ZM14 2L15 2L15 1L14 1L14 2ZM9 2L9 1L8 1L8 2L9 2ZM14 13L14 14L15 14L15 13L14 13ZM9 13L8 13L8 14L9 14L9 13ZM8 2L9 2L9 1L8 1L8 2ZM3 2L3 0.999999L2 0.999999L2 2L3 2ZM3 13L2 13L2 14L3 14L3 13ZM8 13L8 14L9 14L9 13L8 13ZM13.2929 1.70711L14.2929 2.70711L15.7071 1.29289L14.7071 0.292893L13.2929 1.70711ZM3 2L14 2L14 -4.37114e-08L3 -5.24537e-07L3 2ZM2.70711 2.70711L3.70711 1.70711L2.29289 0.292893L1.29289 1.29289L2.70711 2.70711ZM3 13L3 2L1 2L0.999999 13L3 13ZM3.70711 13.2929L2.70711 12.2929L1.29289 13.7071L2.29289 14.7071L3.70711 13.2929ZM14 13L3 13L3 15L14 15L14 13ZM14.2929 12.2929L13.2929 13.2929L14.7071 14.7071L15.7071 13.7071L14.2929 12.2929ZM14 2L14 13L16 13L16 2L14 2ZM14 1L9 1L9 3L14 3L14 1ZM15 13L15 2L13 2L13 13L15 13ZM9 14L14 14L14 12L9 12L9 14ZM8 2L8 13L10 13L10 2L8 2ZM8 1L3 0.999999L3 3L8 3L8 1ZM2 2L2 13L4 13L4 2L2 2ZM3 14L8 14L8 12L3 12L3 14ZM9 13L9 2L7 2L7 13L9 13Z" fill="#424242" mask="url(#path-1-inside-1)"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.8 KiB |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 2V5.5L4 6H7.5V5H4.979L5.92041 4.05869C7.30762 2.67157 9.55664 2.67157 10.9434 4.05869C12.3306 5.4458 12.3306 7.69476 10.9434 9.08188L5.74561 14.2799L6.46582 14.9999L11.6636 9.80194C13.4482 8.01715 13.4482 5.12341 11.6636 3.33859C9.87891 1.5538 6.98486 1.5538 5.2002 3.33859L4.5 4.03882V2H3.5Z" fill="#C5C5C5"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 468 B |
|
@ -1,3 +0,0 @@
|
||||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.5 2V5.5L4 6H7.5V5H4.979L5.92041 4.05869C7.30762 2.67157 9.55664 2.67157 10.9434 4.05869C12.3306 5.4458 12.3306 7.69476 10.9434 9.08188L5.74561 14.2799L6.46582 14.9999L11.6636 9.80194C13.4482 8.01715 13.4482 5.12341 11.6636 3.33859C9.87891 1.5538 6.98486 1.5538 5.2002 3.33859L4.5 4.03882V2H3.5Z" fill="#424242"/>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 468 B |
|
@ -216,14 +216,13 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
opacity: 0.9;
|
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-editor > .settings-body .settings-toc-container .monaco-list-row .settings-toc-count {
|
.settings-editor > .settings-body .settings-toc-container .monaco-list-row .settings-toc-count {
|
||||||
display: none;
|
display: none;
|
||||||
line-height: 22px;
|
line-height: 22px;
|
||||||
opacity: 0.7;
|
opacity: 0.8;
|
||||||
margin-left: 3px;
|
margin-left: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,17 +230,8 @@
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-editor > .settings-body .settings-toc-container .monaco-list-row .monaco-tl-twistie {
|
|
||||||
opacity: 0.9;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings-editor > .settings-body .settings-toc-container .monaco-list-row.selected .monaco-tl-twistie {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settings-editor > .settings-body .settings-toc-container .monaco-list-row.selected .settings-toc-entry {
|
.settings-editor > .settings-body .settings-toc-container .monaco-list-row.selected .settings-toc-entry {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
opacity: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-editor > .settings-body .settings-tree-container {
|
.settings-editor > .settings-body .settings-tree-container {
|
||||||
|
|
|
@ -98,6 +98,7 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
private headerContainer!: HTMLElement;
|
private headerContainer!: HTMLElement;
|
||||||
private searchWidget!: SuggestEnabledInput;
|
private searchWidget!: SuggestEnabledInput;
|
||||||
private countElement!: HTMLElement;
|
private countElement!: HTMLElement;
|
||||||
|
private controlsElement!: HTMLElement;
|
||||||
private settingsTargetsWidget!: SettingsTargetsWidget;
|
private settingsTargetsWidget!: SettingsTargetsWidget;
|
||||||
|
|
||||||
private settingsTreeContainer!: HTMLElement;
|
private settingsTreeContainer!: HTMLElement;
|
||||||
|
@ -301,7 +302,8 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
this.layoutTrees(dimension);
|
this.layoutTrees(dimension);
|
||||||
|
|
||||||
const innerWidth = Math.min(1000, dimension.width) - 24 * 2; // 24px padding on left and right;
|
const innerWidth = Math.min(1000, dimension.width) - 24 * 2; // 24px padding on left and right;
|
||||||
const monacoWidth = innerWidth - 10 - this.countElement.clientWidth - 12; // minus padding inside inputbox, countElement width, extra padding before countElement
|
// minus padding inside inputbox, countElement width, controls width, extra padding before countElement
|
||||||
|
const monacoWidth = innerWidth - 10 - this.countElement.clientWidth - this.controlsElement.clientWidth - 12;
|
||||||
this.searchWidget.layout({ height: 20, width: monacoWidth });
|
this.searchWidget.layout({ height: 20, width: monacoWidth });
|
||||||
|
|
||||||
DOM.toggleClass(this.rootElement, 'mid-width', dimension.width < 1000 && dimension.width >= 600);
|
DOM.toggleClass(this.rootElement, 'mid-width', dimension.width < 1000 && dimension.width >= 600);
|
||||||
|
@ -375,6 +377,7 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
|
|
||||||
clearSearchResults(): void {
|
clearSearchResults(): void {
|
||||||
this.searchWidget.setValue('');
|
this.searchWidget.setValue('');
|
||||||
|
this.focusSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
clearSearchFilters(): void {
|
clearSearchFilters(): void {
|
||||||
|
@ -387,17 +390,12 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
this.searchWidget.setValue(query.trim());
|
this.searchWidget.setValue(query.trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
clearSearch(): void {
|
|
||||||
this.clearSearchResults();
|
|
||||||
this.focusSearch();
|
|
||||||
}
|
|
||||||
|
|
||||||
private createHeader(parent: HTMLElement): void {
|
private createHeader(parent: HTMLElement): void {
|
||||||
this.headerContainer = DOM.append(parent, $('.settings-header'));
|
this.headerContainer = DOM.append(parent, $('.settings-header'));
|
||||||
|
|
||||||
const searchContainer = DOM.append(this.headerContainer, $('.search-container'));
|
const searchContainer = DOM.append(this.headerContainer, $('.search-container'));
|
||||||
|
|
||||||
const clearInputAction = new Action(SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, localize('clearInput', "Clear Settings Search Input"), 'codicon-clear-all', false, () => { this.clearSearch(); return Promise.resolve(null); });
|
const clearInputAction = new Action(SETTINGS_EDITOR_COMMAND_CLEAR_SEARCH_RESULTS, localize('clearInput', "Clear Settings Search Input"), 'codicon-clear-all', false, () => { this.clearSearchResults(); return Promise.resolve(null); });
|
||||||
|
|
||||||
const searchBoxLabel = localize('SearchSettings.AriaLabel', "Search settings");
|
const searchBoxLabel = localize('SearchSettings.AriaLabel', "Search settings");
|
||||||
this.searchWidget = this._register(this.instantiationService.createInstance(SuggestEnabledInput, `${SettingsEditor2.ID}.searchbox`, searchContainer, {
|
this.searchWidget = this._register(this.instantiationService.createInstance(SuggestEnabledInput, `${SettingsEditor2.ID}.searchbox`, searchContainer, {
|
||||||
|
@ -446,9 +444,9 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
this.settingsTargetsWidget.settingsTarget = ConfigurationTarget.USER_LOCAL;
|
this.settingsTargetsWidget.settingsTarget = ConfigurationTarget.USER_LOCAL;
|
||||||
this.settingsTargetsWidget.onDidTargetChange(target => this.onDidSettingsTargetChange(target));
|
this.settingsTargetsWidget.onDidTargetChange(target => this.onDidSettingsTargetChange(target));
|
||||||
|
|
||||||
const actionsContainer = DOM.append(searchContainer, DOM.$('.settings-clear-widget'));
|
this.controlsElement = DOM.append(searchContainer, DOM.$('.settings-clear-widget'));
|
||||||
|
|
||||||
const actionBar = this._register(new ActionBar(actionsContainer, {
|
const actionBar = this._register(new ActionBar(this.controlsElement, {
|
||||||
animated: false,
|
animated: false,
|
||||||
actionViewItemProvider: (action: Action) => { return undefined; }
|
actionViewItemProvider: (action: Action) => { return undefined; }
|
||||||
}));
|
}));
|
||||||
|
@ -541,7 +539,6 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
this._register(DOM.addDisposableListener(clearSearch, DOM.EventType.CLICK, (e: MouseEvent) => {
|
this._register(DOM.addDisposableListener(clearSearch, DOM.EventType.CLICK, (e: MouseEvent) => {
|
||||||
DOM.EventHelper.stop(e, false);
|
DOM.EventHelper.stop(e, false);
|
||||||
this.clearSearchResults();
|
this.clearSearchResults();
|
||||||
this.focusSearch();
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
DOM.append(this.noResultsMessage, clearSearchContainer);
|
DOM.append(this.noResultsMessage, clearSearchContainer);
|
||||||
|
@ -555,7 +552,7 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
this.createFocusSink(
|
this.createFocusSink(
|
||||||
bodyContainer,
|
bodyContainer,
|
||||||
e => {
|
e => {
|
||||||
if (DOM.findParentWithClass(e.relatedTarget, 'monaco-list')) {
|
if (DOM.findParentWithClass(e.relatedTarget, 'settings-editor-tree')) {
|
||||||
if (this.settingsTree.scrollTop > 0) {
|
if (this.settingsTree.scrollTop > 0) {
|
||||||
const firstElement = this.settingsTree.firstVisibleElement;
|
const firstElement = this.settingsTree.firstVisibleElement;
|
||||||
this.settingsTree.reveal(firstElement, 0.1);
|
this.settingsTree.reveal(firstElement, 0.1);
|
||||||
|
@ -577,7 +574,7 @@ export class SettingsEditor2 extends BaseEditor {
|
||||||
this.createFocusSink(
|
this.createFocusSink(
|
||||||
bodyContainer,
|
bodyContainer,
|
||||||
e => {
|
e => {
|
||||||
if (DOM.findParentWithClass(e.relatedTarget, 'monaco-list')) {
|
if (DOM.findParentWithClass(e.relatedTarget, 'settings-editor-tree')) {
|
||||||
if (this.settingsTree.scrollTop < this.settingsTree.scrollHeight) {
|
if (this.settingsTree.scrollTop < this.settingsTree.scrollHeight) {
|
||||||
const lastElement = this.settingsTree.lastVisibleElement;
|
const lastElement = this.settingsTree.lastVisibleElement;
|
||||||
this.settingsTree.reveal(lastElement, 0.9);
|
this.settingsTree.reveal(lastElement, 0.9);
|
||||||
|
|
|
@ -1481,6 +1481,8 @@ export class SettingsTree extends ObjectTree<SettingsTreeElement> {
|
||||||
// applying an opacity to the link color.
|
// applying an opacity to the link color.
|
||||||
const fgWithOpacity = new Color(new RGBA(foregroundColor.rgba.r, foregroundColor.rgba.g, foregroundColor.rgba.b, 0.9));
|
const fgWithOpacity = new Color(new RGBA(foregroundColor.rgba.r, foregroundColor.rgba.g, foregroundColor.rgba.b, 0.9));
|
||||||
collector.addRule(`.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-description { color: ${fgWithOpacity}; }`);
|
collector.addRule(`.settings-editor > .settings-body > .settings-tree-container .setting-item-contents .setting-item-description { color: ${fgWithOpacity}; }`);
|
||||||
|
|
||||||
|
collector.addRule(`.settings-editor > .settings-body .settings-toc-container .monaco-list-row:not(.selected) { color: ${fgWithOpacity}; }`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const errorColor = theme.getColor(errorForeground);
|
const errorColor = theme.getColor(errorForeground);
|
||||||
|
@ -1516,6 +1518,8 @@ export class SettingsTree extends ObjectTree<SettingsTreeElement> {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
this.getHTMLElement().classList.add('settings-editor-tree');
|
||||||
|
|
||||||
this.disposables.add(attachStyler(themeService, {
|
this.disposables.add(attachStyler(themeService, {
|
||||||
listBackground: editorBackground,
|
listBackground: editorBackground,
|
||||||
listActiveSelectionBackground: editorBackground,
|
listActiveSelectionBackground: editorBackground,
|
||||||
|
|