From 289562e44278c1aa2e0e4b0e967a647fd442e147 Mon Sep 17 00:00:00 2001 From: Colen Garoutte-Carson <49173979+Colengms@users.noreply.github.com> Date: Wed, 1 Apr 2020 16:26:22 -0700 Subject: [PATCH] Remove Rename UI in favor of new WorkspaceEdit Preview API (#5133) --- Extension/.vscode/launch.json | 22 +- Extension/gulpfile.js | 28 -- Extension/jobs/build.windows.yml | 9 +- Extension/jobs/build.yml | 8 +- Extension/package.json | 215 +--------- Extension/package.nls.json | 12 - Extension/src/LanguageServer/client.ts | 71 ++-- Extension/src/LanguageServer/extension.ts | 64 +-- Extension/src/LanguageServer/references.ts | 83 ++-- .../src/LanguageServer/referencesModel.ts | 237 +---------- .../referencesTreeDataProvider.ts | 75 +--- .../src/LanguageServer/referencesView.ts | 4 +- Extension/src/LanguageServer/renameView.ts | 63 --- .../IntelliSenseFeatures/index.ts | 78 ++-- .../IntelliSenseFeatures/runTest.ts | 25 ++ .../test/integrationTests/debug/index.ts | 79 ++-- .../test/integrationTests/debug/runTest.ts | 25 ++ .../integrationTests/languageServer/index.ts | 78 ++-- .../languageServer/runTest.ts | 27 ++ .../test/runVsCodeTestsWithAbsolutePaths.js | 27 -- Extension/test/unitTests/common.test.ts | 2 +- Extension/test/unitTests/index.ts | 57 +-- Extension/test/unitTests/runTest.ts | 25 ++ Extension/yarn.lock | 375 +++--------------- 24 files changed, 424 insertions(+), 1265 deletions(-) delete mode 100644 Extension/src/LanguageServer/renameView.ts create mode 100644 Extension/test/integrationTests/IntelliSenseFeatures/runTest.ts create mode 100644 Extension/test/integrationTests/debug/runTest.ts create mode 100644 Extension/test/integrationTests/languageServer/runTest.ts delete mode 100644 Extension/test/runVsCodeTestsWithAbsolutePaths.js create mode 100644 Extension/test/unitTests/runTest.ts diff --git a/Extension/.vscode/launch.json b/Extension/.vscode/launch.json index d47562b305..a0ec326742 100644 --- a/Extension/.vscode/launch.json +++ b/Extension/.vscode/launch.json @@ -77,13 +77,13 @@ "preLaunchTask": "TypeScript Compile Watch", }, { - "name": "Launch Tests", + "name": "Launch Unit Tests", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/unitTests" + "--extensionTestsPath=${workspaceFolder}/out/test/unitTests/index" ], "stopOnEntry": false, "sourceMaps": true, @@ -92,12 +92,6 @@ ], "preLaunchTask": "Pretest" }, - { - "name": "Node Attach", - "type": "node", - "request": "attach", - "port": 5858 - }, { "name": "Launch Integration Tests", "type": "extensionHost", @@ -106,14 +100,14 @@ "args": [ "${workspaceFolder}/test/integrationTests/testAssets/SimpleCppProject", "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/integrationTests/languageServer" + "--extensionTestsPath=${workspaceFolder}/out/test/integrationTests/languageServer/index" ], "stopOnEntry": false, "sourceMaps": true, "outFiles": [ "${workspaceFolder}/out/test/**/*.js" ], - "preLaunchTask": "Pretest" + "preLaunchTask": "Pretest", }, { "name": "Launch E2E IntelliSense features tests", @@ -123,7 +117,7 @@ "args": [ "C:/git/Vcls-vscode-test/SingleRootProject", "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/integrationTests/IntelliSenseFeatures" + "--extensionTestsPath=${workspaceFolder}/out/test/integrationTests/IntelliSenseFeatures/index" ], "stopOnEntry": false, "sourceMaps": true, @@ -132,5 +126,11 @@ ], "preLaunchTask": "Pretest" }, + { + "name": "Node Attach", + "type": "node", + "request": "attach", + "port": 5858 + }, ] } \ No newline at end of file diff --git a/Extension/gulpfile.js b/Extension/gulpfile.js index f0f58f4489..b762164ba1 100644 --- a/Extension/gulpfile.js +++ b/Extension/gulpfile.js @@ -6,9 +6,7 @@ 'use strict'; const gulp = require('gulp'); -const env = require('gulp-env') const eslint = require('gulp-eslint'); -const mocha = require('gulp-mocha'); const fs = require('fs'); const nls = require('vscode-nls-dev'); const path = require('path'); @@ -52,23 +50,6 @@ const languages = [ { id: "pl", folderName: "plk" } ]; -gulp.task('unitTests', (done) => { - env.set({ - CODE_TESTS_PATH: "./out/test/unitTests", - }); - - return gulp.src('./test/runVsCodeTestsWithAbsolutePaths.js', {read: false}) - .pipe(mocha({ ui: "tdd" })) - .once('error', err => { - done(); - process.exit(1); - }) - .once('end', () => { - done(); - process.exit(); - }); -}); - /// Misc Tasks const allTypeScript = [ 'src/**/*.ts', @@ -76,15 +57,6 @@ const allTypeScript = [ '!**/typings**' ]; -const lintReporter = (output, file, options) => { - //emits: src/helloWorld.c:5:3: warning: implicit declaration of function ‘prinft’ - let relativeBase = file.base.substring(file.cwd.length + 1).replace('\\', '/'); - output.forEach(e => { - let message = relativeBase + e.name + ':' + (e.startPosition.line + 1) + ':' + (e.startPosition.character + 1) + ': ' + e.failure; - console.log('[lint] ' + message); - }); -}; - gulp.task('lint', function () { return gulp.src(allTypeScript) .pipe(eslint({ configFile: ".eslintrc.js" })) diff --git a/Extension/jobs/build.windows.yml b/Extension/jobs/build.windows.yml index d894af52e9..e0081b0871 100644 --- a/Extension/jobs/build.windows.yml +++ b/Extension/jobs/build.windows.yml @@ -37,14 +37,9 @@ jobs: displayName: 'Run unit tests' workingDirectory: '$(Build.SourcesDirectory)\Extension' - - script: 'node node_modules/vscode/bin/test' + - script: 'yarn run integrationTests' displayName: 'Run languageServer integration tests' - workingDirectory: '$(Build.SourcesDirectory)\Extension' - env: - CODE_TESTS_PATH: '$(Build.SourcesDirectory)\Extension\out\test\integrationTests\languageServer' - CODE_EXTENSIONS_PATH: '$(Build.SourcesDirectory)\Extension' - CODE_TESTS_WORKSPACE: '$(Build.SourcesDirectory)\Extension\test\integrationTests\testAssets\SimpleCppProject' - CODE_DISABLE_EXTENSIONS: 1 + workingDirectory: '$(Build.SourcesDirectory)/Extension' - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 displayName: 'Component Detection' diff --git a/Extension/jobs/build.yml b/Extension/jobs/build.yml index 2b7adafa98..b7a38b481b 100644 --- a/Extension/jobs/build.yml +++ b/Extension/jobs/build.yml @@ -41,16 +41,14 @@ jobs: - script: 'yarn run unitTests' displayName: 'Run unit tests' workingDirectory: '$(Build.SourcesDirectory)/Extension' + env: + DISPLAY: :10 - - script: 'node node_modules/vscode/bin/test' + - script: 'yarn run integrationTests' displayName: 'Run languageServer integration tests' workingDirectory: '$(Build.SourcesDirectory)/Extension' env: DISPLAY: :10 - CODE_TESTS_PATH: '$(Build.SourcesDirectory)/Extension/out/test/integrationTests/languageServer' - CODE_EXTENSIONS_PATH: '$(Build.SourcesDirectory)/Extension' - CODE_TESTS_WORKSPACE: '$(Build.SourcesDirectory)/Extension/test/integrationTests/testAssets/SimpleCppProject' - CODE_DISABLE_EXTENSIONS: 1 - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 displayName: 'Component Detection' diff --git a/Extension/package.json b/Extension/package.json index 1df5f4ad1b..8e7d2effa3 100644 --- a/Extension/package.json +++ b/Extension/package.json @@ -12,7 +12,7 @@ }, "license": "SEE LICENSE IN LICENSE.txt", "engines": { - "vscode": "^1.30.0" + "vscode": "^1.42.0" }, "bugs": { "url": "https://github.com/Microsoft/vscode-cpptools/issues", @@ -43,15 +43,6 @@ ], "main": "./dist/main", "contributes": { - "viewsContainers": { - "activitybar": [ - { - "id": "CppRenameActivityBar", - "title": "%c_cpp.contributes.viewsContainers.activitybar.CppRenameActivityBar.title%", - "icon": "assets/cpp-rename-icon.svg" - } - ] - }, "views": { "references-view": [ { @@ -59,18 +50,6 @@ "name": "%c_cpp.contributes.views.cppReferencesView.title%", "when": "cppReferenceTypes:hasResults && reference-list.hasResult" } - ], - "CppRenameActivityBar": [ - { - "id": "CppRenamePendingView", - "name": "%c_cpp.contributes.views.cppRenamePendingView.title%", - "when": "cppRename:hasResults" - }, - { - "id": "CppRenameCandidatesView", - "name": "%c_cpp.contributes.views.cppRenameCandidatesView.title%", - "when": "cppRename:hasResults" - } ] }, "problemMatchers": [ @@ -617,87 +596,6 @@ "title": "%c_cpp.command.vcpkgOnlineHelpSuggested.title%", "category": "C/C++" }, - { - "command": "CppRenameView.remove", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.remove.title%", - "icon": { - "light": "assets/minus-light.svg", - "dark": "assets/minus-dark.svg" - } - }, - { - "command": "CppRenameView.add", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.add.title%", - "icon": { - "light": "assets/plus-light.svg", - "dark": "assets/plus-dark.svg" - } - }, - { - "command": "CppRenameView.removeAll", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.removeAll.title%", - "icon": { - "light": "assets/minus-light.svg", - "dark": "assets/minus-dark.svg" - } - }, - { - "command": "CppRenameView.addAll", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.addAll.title%", - "icon": { - "light": "assets/plus-light.svg", - "dark": "assets/plus-dark.svg" - } - }, - { - "command": "CppRenameView.removeFile", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.removeFile.title%", - "icon": { - "light": "assets/minus-light.svg", - "dark": "assets/minus-dark.svg" - } - }, - { - "command": "CppRenameView.addFile", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.addFile.title%", - "icon": { - "light": "assets/plus-light.svg", - "dark": "assets/plus-dark.svg" - } - }, - { - "command": "CppRenameView.addReferenceType", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.addReferenceType.title%", - "icon": { - "light": "assets/plus-light.svg", - "dark": "assets/plus-dark.svg" - } - }, - { - "command": "CppRenameView.cancel", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.cancel.title%", - "icon": { - "light": "assets/cancel-light.svg", - "dark": "assets/cancel-dark.svg" - } - }, - { - "command": "CppRenameView.done", - "category": "C/C++", - "title": "%c_cpp.command.CppRenameView.done.title%", - "icon": { - "light": "assets/check-light.svg", - "dark": "assets/check-dark.svg" - } - }, { "command": "C_Cpp.referencesViewGroupByType", "category": "C/C++", @@ -1503,63 +1401,6 @@ "command": "C_Cpp.referencesViewUngroupByType", "when": "view == CppReferencesView && !refView.isGroupedByFile", "group": "navigation" - }, - { - "command": "C_Cpp.referencesViewGroupByType", - "when": "view == CppRenameCandidatesView && refView.isGroupedByFile", - "group": "navigation@1" - }, - { - "command": "C_Cpp.referencesViewUngroupByType", - "when": "view == CppRenameCandidatesView && !refView.isGroupedByFile", - "group": "navigation@1" - }, - { - "command": "CppRenameView.removeAll", - "when": "view == CppRenamePendingView && cppRename:hasResults", - "group": "navigation@1" - }, - { - "command": "CppRenameView.done", - "when": "view == CppRenamePendingView && cppRename:hasResults", - "group": "navigation@2" - }, - { - "command": "CppRenameView.cancel", - "when": "view == CppRenamePendingView && cppRename:hasResults", - "group": "navigation@3" - }, - { - "command": "CppRenameView.addAll", - "when": "view == CppRenameCandidatesView && cppRename:hasResults", - "group": "navigation@2" - } - ], - "view/item/context": [ - { - "command": "CppRenameView.remove", - "when": "view == CppRenamePendingView && viewItem == pendingItem", - "group": "inline" - }, - { - "command": "CppRenameView.add", - "when": "view == CppRenameCandidatesView && viewItem == candidateItem", - "group": "inline" - }, - { - "command": "CppRenameView.removeFile", - "when": "view == CppRenamePendingView && viewItem == pendingFile", - "group": "inline" - }, - { - "command": "CppRenameView.addFile", - "when": "view == CppRenameCandidatesView && viewItem == candidateFile", - "group": "inline" - }, - { - "command": "CppRenameView.addReferenceType", - "when": "view == CppRenameCandidatesView && viewItem == candidateReferenceType", - "group": "inline" } ], "editor/context": [ @@ -1605,49 +1446,13 @@ } ], "commandPalette": [ - { - "command": "CppRenameView.remove", - "when": "never" - }, - { - "command": "CppRenameView.add", - "when": "never" - }, - { - "command": "CppRenameView.removeAll", - "when": "cppRename:hasResults" - }, - { - "command": "CppRenameView.addAll", - "when": "cppRename:hasResults" - }, - { - "command": "CppRenameView.removeFile", - "when": "never" - }, - { - "command": "CppRenameView.addFile", - "when": "never" - }, - { - "command": "CppRenameView.addReferenceType", - "when": "never" - }, - { - "command": "CppRenameView.cancel", - "when": "cppRename:hasResults" - }, - { - "command": "CppRenameView.done", - "when": "cppRename:hasResults" - }, { "command": "C_Cpp.referencesViewGroupByType", - "when": "cppRename:hasResults || cppReferenceTypes:hasResults" + "when": "cppReferenceTypes:hasResults" }, { "command": "C_Cpp.referencesViewUngroupByType", - "when": "cppRename:hasResults || cppReferenceTypes:hasResults" + "when": "cppReferenceTypes:hasResults" } ] }, @@ -1677,10 +1482,11 @@ "translations-generate": "node ./tools/prepublish.js && gulp translations-generate", "translations-import": "node ./tools/prepublish.js && gulp translations-import", "prepublishjs": "node ./tools/prepublish.js", - "pretest": "node ./tools/prepublish.js && tsc -p test.tsconfig.json", - "pr-check": "node ./tools/prepublish.js && gulp pr-check", - "lint": "node ./tools/prepublish.js && gulp lint", - "unitTests": "node ./tools/prepublish.js && gulp unitTests", + "pretest": "tsc -p test.tsconfig.json", + "pr-check": "gulp pr-check", + "lint": "gulp lint", + "unitTests": "tsc -p test.tsconfig.json && node ./out/test/unitTests/runTest.js", + "integrationTests": "tsc -p test.tsconfig.json && node ./out/test/integrationTests/languageServer/runTest.js", "import-edge-strings": "node ./import_edge_strings.js" }, "devDependencies": { @@ -1692,6 +1498,7 @@ "@types/plist": "^3.0.2", "@types/semver": "^7.1.0", "@types/tmp": "^0.1.0", + "@types/vscode": "1.43.0", "@types/webpack": "^4.39.0", "@types/which": "^1.3.2", "@types/yauzl": "^2.9.1", @@ -1706,6 +1513,7 @@ "eslint-plugin-jsdoc": "^21.0.0", "event-stream": "^4.0.1", "fs-extra": "^8.1.0", + "glob": "^7.1.6", "gulp": "^4.0.2", "gulp-env": "^0.4.0", "gulp-eslint": "^6.0.0", @@ -1719,6 +1527,7 @@ "minimatch": "^3.0.4", "minimist": "^1.2.5", "mkdirp": "^0.5.1", + "mocha": "^4.0.0", "parse5": "^5.1.0", "parse5-traverse": "^1.0.3", "plist": "^3.0.1", @@ -1726,7 +1535,6 @@ "ts-loader": "^6.0.4", "tslint": "^5.19.0", "typescript": "^3.5.3", - "vscode": "^1.1.36", "vscode-cpptools": "^3.1.0", "vscode-debugadapter": "^1.35.0", "vscode-debugprotocol": "^1.35.0", @@ -1734,6 +1542,7 @@ "vscode-languageclient": "^5.2.1", "vscode-nls": "^4.1.1", "vscode-nls-dev": "^3.2.6", + "vscode-test": "^1.3.0", "webpack": "^4.42.0", "webpack-cli": "^3.3.7", "which": "^2.0.2", diff --git a/Extension/package.nls.json b/Extension/package.nls.json index c97d6896f9..f79d7b5c96 100644 --- a/Extension/package.nls.json +++ b/Extension/package.nls.json @@ -68,18 +68,6 @@ "c_cpp.configuration.renameRequiresIdentifier.description": "If true, 'Rename Symbol' will require a valid C/C++ identifier.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "If true, debugger shell command substitution will use obsolete backtick (`)", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: Other references results", - "c_cpp.contributes.viewsContainers.activitybar.CppRenameActivityBar.title": "C/C++ Rename", - "c_cpp.contributes.views.cppRenamePendingView.title": "PENDING RENAME", - "c_cpp.contributes.views.cppRenameCandidatesView.title": "CANDIDATES FOR RENAME", - "c_cpp.command.CppRenameView.remove.title": "Remove Reference", - "c_cpp.command.CppRenameView.add.title": "Add Reference", - "c_cpp.command.CppRenameView.removeAll.title": "Remove All References", - "c_cpp.command.CppRenameView.addAll.title": "Add All References", - "c_cpp.command.CppRenameView.removeFile.title": "Remove References in File", - "c_cpp.command.CppRenameView.addFile.title": "Add References in File", - "c_cpp.command.CppRenameView.addReferenceType.title": "Add References of Type", - "c_cpp.command.CppRenameView.cancel.title": "Cancel Rename", - "c_cpp.command.CppRenameView.done.title": "Commit Rename", "c_cpp.debuggers.pipeTransport.description": "When present, this tells the debugger to connect to a remote computer using another executable as a pipe that will relay standard input/output between VS Code and the MI-enabled debugger backend executable (such as gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "enter the fully qualified path for the pipe program name, for example '/usr/bin/ssh'", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "The full path to the debugger on the target machine, for example /usr/bin/gdb.", diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index a75439f9f3..401957adc2 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -847,7 +847,6 @@ export class DefaultClient implements Client { workspaceReferences.referencesCanceledWhilePreviewing = true; } this.client.languageClient.sendNotification(CancelReferencesNotification); - workspaceReferences.closeRenameUI(); } } else { callback(); @@ -898,50 +897,42 @@ export class DefaultClient implements Client { } referencesRequestPending = true; workspaceReferences.setResultsCallback((referencesResult: refs.ReferencesResult | null, doResolve: boolean) => { - if (doResolve && referencesResult === null && referencesPendingCancellations.length === 0) { - // The result callback will be called with doResult of true and a null result when the Find All References - // portion of the rename is complete. We complete the promise with an empty edit at this point, - // to cause the progress indicator to be dismissed. - let workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); - resolve(workspaceEdit); - } else { - referencesRequestPending = false; - --renameRequestsPending; - let workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); - let cancelling: boolean = referencesPendingCancellations.length > 0; - if (cancelling) { - while (referencesPendingCancellations.length > 1) { - let pendingCancel: ReferencesCancellationState = referencesPendingCancellations[0]; - referencesPendingCancellations.pop(); - pendingCancel.reject(); - } + referencesRequestPending = false; + --renameRequestsPending; + let workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); + let cancelling: boolean = referencesPendingCancellations.length > 0; + if (cancelling) { + while (referencesPendingCancellations.length > 1) { let pendingCancel: ReferencesCancellationState = referencesPendingCancellations[0]; referencesPendingCancellations.pop(); - pendingCancel.callback(); - } else { - if (renameRequestsPending === 0) { - renamePending = false; - } - // If rename UI was canceled, we will get a null result. - // If null, return an empty list to avoid Rename failure dialog. - if (referencesResult) { - for (let reference of referencesResult.referenceInfos) { - let uri: vscode.Uri = vscode.Uri.file(reference.file); - let range: vscode.Range = new vscode.Range(reference.position.line, reference.position.character, reference.position.line, reference.position.character + referencesResult.text.length); - workspaceEdit.replace(uri, range, newName); - } - } - workspaceReferences.closeRenameUI(); + pendingCancel.reject(); } - if (doResolve) { - if (referencesResult && (referencesResult.referenceInfos === null || referencesResult.referenceInfos.length === 0)) { - vscode.window.showErrorMessage(localize("unable.to.locate.selected.symbol", "A definition for the selected symbol could not be located.")); + let pendingCancel: ReferencesCancellationState = referencesPendingCancellations[0]; + referencesPendingCancellations.pop(); + pendingCancel.callback(); + } else { + if (renameRequestsPending === 0) { + renamePending = false; + } + // If rename UI was canceled, we will get a null result. + // If null, return an empty list to avoid Rename failure dialog. + if (referencesResult) { + for (let reference of referencesResult.referenceInfos) { + let uri: vscode.Uri = vscode.Uri.file(reference.file); + let range: vscode.Range = new vscode.Range(reference.position.line, reference.position.character, reference.position.line, reference.position.character + referencesResult.text.length); + let metadata: vscode.WorkspaceEditEntryMetadata = { + needsConfirmation: reference.type !== refs.ReferenceType.Confirmed, + label: refs.getReferenceTagString(reference.type, false, true), + iconPath: refs.getReferenceItemIconPath(reference.type, false) + }; + workspaceEdit.replace(uri, range, newName, metadata); } - resolve(workspaceEdit); - } else if (workspaceEdit.size > 0) { - vscode.workspace.applyEdit(workspaceEdit); } } + if (referencesResult && (referencesResult.referenceInfos === null || referencesResult.referenceInfos.length === 0)) { + vscode.window.showErrorMessage(localize("unable.to.locate.selected.symbol", "A definition for the selected symbol could not be located.")); + } + resolve(workspaceEdit); }); workspaceReferences.startRename(params); }); @@ -961,7 +952,6 @@ export class DefaultClient implements Client { workspaceReferences.referencesCanceledWhilePreviewing = true; } this.client.languageClient.sendNotification(CancelReferencesNotification); - workspaceReferences.closeRenameUI(); } } else { callback(); @@ -2508,7 +2498,6 @@ export class DefaultClient implements Client { if (!cancelling) { workspaceReferences.referencesCanceled = true; languageClient.sendNotification(CancelReferencesNotification); - workspaceReferences.closeRenameUI(); } } } diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index c02635bb3a..14d122eb97 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -10,7 +10,7 @@ import * as os from 'os'; import * as fs from 'fs'; import * as util from '../common'; import * as telemetry from '../telemetry'; -import { TreeNode, NodeType, getCurrentRenameModel } from './referencesModel'; +import { TreeNode, NodeType } from './referencesModel'; import { UI, getUI } from './ui'; import { Client } from './client'; import { ClientCollection } from './clientCollection'; @@ -429,7 +429,7 @@ function realActivation(): void { let checkForConflictingExtensions: PersistentState = new PersistentState("CPP." + util.packageJson.version + ".checkForConflictingExtensions", true); if (checkForConflictingExtensions.Value) { checkForConflictingExtensions.Value = false; - let clangCommandAdapterActive: boolean = vscode.extensions.all.some((extension: vscode.Extension, index: number, array: vscode.Extension[]): boolean => + let clangCommandAdapterActive: boolean = vscode.extensions.all.some((extension: vscode.Extension, index: number, array: Readonly[]>): boolean => extension.isActive && extension.id === "mitaki28.vscode-clang"); if (clangCommandAdapterActive) { telemetry.logLanguageServerEvent("conflictingExtension"); @@ -905,15 +905,6 @@ export function registerCommands(): void { disposables.push(vscode.commands.registerCommand('C_Cpp.ShowReferenceItem', onShowRefCommand)); disposables.push(vscode.commands.registerCommand('C_Cpp.referencesViewGroupByType', onToggleRefGroupView)); disposables.push(vscode.commands.registerCommand('C_Cpp.referencesViewUngroupByType', onToggleRefGroupView)); - disposables.push(vscode.commands.registerCommand('CppRenameView.cancel', onRenameViewCancel)); - disposables.push(vscode.commands.registerCommand('CppRenameView.done', onRenameViewDone)); - disposables.push(vscode.commands.registerCommand('CppRenameView.remove', onRenameViewRemove)); - disposables.push(vscode.commands.registerCommand('CppRenameView.add', onRenameViewAdd)); - disposables.push(vscode.commands.registerCommand('CppRenameView.removeAll', onRenameViewRemoveAll)); - disposables.push(vscode.commands.registerCommand('CppRenameView.addAll', onRenameViewAddAll)); - disposables.push(vscode.commands.registerCommand('CppRenameView.removeFile', onRenameViewRemoveFile)); - disposables.push(vscode.commands.registerCommand('CppRenameView.addFile', onRenameViewAddFile)); - disposables.push(vscode.commands.registerCommand('CppRenameView.addReferenceType', onRenameViewAddReferenceType)); disposables.push(vscode.commands.registerCommand('C_Cpp.VcpkgClipboardInstallSuggested', onVcpkgClipboardInstallSuggested)); disposables.push(vscode.commands.registerCommand('C_Cpp.VcpkgOnlineHelpSuggested', onVcpkgOnlineHelpSuggested)); disposables.push(vscode.commands.registerCommand('cpptools.activeConfigName', onGetActiveConfigName)); @@ -1209,57 +1200,6 @@ function onShowRefCommand(arg?: TreeNode): void { } } -function onRenameViewCancel(arg?: any): void { - getCurrentRenameModel().cancelRename(); -} - -function onRenameViewDone(arg?: any): void { - getCurrentRenameModel().completeRename(); -} - -function onRenameViewRemove(arg?: TreeNode): void { - if (!arg) { - return; - } - arg.model.setRenameCandidate(arg); -} - -function onRenameViewAdd(arg?: TreeNode): void { - if (!arg) { - return; - } - arg.model.setRenamePending(arg); -} - -function onRenameViewRemoveAll(arg?: any): void { - getCurrentRenameModel().setAllRenamesCandidates(); -} - -function onRenameViewAddAll(arg?: any): void { - getCurrentRenameModel().setAllRenamesPending(); -} - -function onRenameViewRemoveFile(arg?: TreeNode): void { - if (!arg) { - return; - } - arg.model.setFileRenamesCandidates(arg); -} - -function onRenameViewAddFile(arg?: TreeNode): void { - if (!arg) { - return; - } - arg.model.setFileRenamesPending(arg); -} - -function onRenameViewAddReferenceType(arg?: TreeNode): void { - if (!arg || arg.referenceType === undefined) { - return; - } - arg.model.setAllReferenceTypeRenamesPending(arg.referenceType); -} - function reportMacCrashes(): void { if (process.platform === "darwin") { prevCrashFile = ""; diff --git a/Extension/src/LanguageServer/references.ts b/Extension/src/LanguageServer/references.ts index 7ace3fcda4..a55a7b7050 100644 --- a/Extension/src/LanguageServer/references.ts +++ b/Extension/src/LanguageServer/references.ts @@ -8,9 +8,9 @@ import { DefaultClient, RenameParams, FindAllReferencesParams } from './client'; import { FindAllRefsView } from './referencesView'; import * as telemetry from '../telemetry'; import * as nls from 'vscode-nls'; -import { RenameView } from './renameView'; import * as logger from '../logger'; import { PersistentState } from './persistentState'; +import * as util from '../common'; nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); @@ -121,13 +121,53 @@ export function getReferenceTagString(referenceType: ReferenceType, referenceCan return referenceCanceled && referenceType === ReferenceType.ConfirmationInProgress ? getReferenceCanceledString(upperCase) : convertReferenceTypeToString(referenceType, upperCase); } +export function getReferenceTypeIconPath(referenceType: ReferenceType): { light: vscode.Uri; dark: vscode.Uri } { + const assetsFolder: string = "assets/"; + const postFixLight: string = "-light.svg"; + const postFixDark: string = "-dark.svg"; + let basePath: string = "ref-cannot-confirm"; + + switch (referenceType) { + case ReferenceType.Confirmed: basePath = "ref-confirmed"; break; + case ReferenceType.Comment: basePath = "ref-comment"; break; + case ReferenceType.String: basePath = "ref-string"; break; + case ReferenceType.Inactive: basePath = "ref-inactive"; break; + case ReferenceType.CannotConfirm: basePath = "ref-cannot-confirm"; break; + case ReferenceType.NotAReference: basePath = "ref-not-a-reference"; break; + case ReferenceType.ConfirmationInProgress: basePath = "ref-confirmation-in-progress"; break; + } + + let lightPath: string = util.getExtensionFilePath(assetsFolder + basePath + postFixLight); + let lightPathUri: vscode.Uri = vscode.Uri.file(lightPath); + let darkPath: string = util.getExtensionFilePath(assetsFolder + basePath + postFixDark); + let darkPathUri: vscode.Uri = vscode.Uri.file(darkPath); + return { + light: lightPathUri, + dark: darkPathUri + }; +} + +function getReferenceCanceledIconPath(): { light: vscode.Uri; dark: vscode.Uri } { + let lightPath: string = util.getExtensionFilePath("assets/ref-canceled-light.svg"); + let lightPathUri: vscode.Uri = vscode.Uri.file(lightPath); + let darkPath: string = util.getExtensionFilePath("assets/ref-canceled-dark.svg"); + let darkPathUri: vscode.Uri = vscode.Uri.file(darkPath); + return { + light: lightPathUri, + dark: darkPathUri + }; +} + +export function getReferenceItemIconPath(type: ReferenceType, isCanceled: boolean): { light: vscode.Uri; dark: vscode.Uri } { + return (isCanceled && type === ReferenceType.ConfirmationInProgress) ? getReferenceCanceledIconPath() : getReferenceTypeIconPath(type); +} + export class ReferencesManager { private client: DefaultClient; private disposables: vscode.Disposable[] = []; private referencesChannel?: vscode.OutputChannel; private findAllRefsView?: FindAllRefsView; - private renameView?: RenameView; private viewsInitialized: boolean = false; public symbolSearchInProgress: boolean = false; @@ -168,7 +208,6 @@ export class ReferencesManager { initializeViews(): void { if (!this.viewsInitialized) { this.findAllRefsView = new FindAllRefsView(); - this.renameView = new RenameView(); this.viewsInitialized = true; } } @@ -183,9 +222,6 @@ export class ReferencesManager { if (this.findAllRefsView) { this.findAllRefsView.setGroupBy(this.groupByFile.Value); } - if (this.renameView) { - this.renameView.setGroupBy(this.groupByFile.Value); - } } public UpdateProgressUICounter(mode: ReferencesCommandMode): void { @@ -438,27 +474,8 @@ export class ReferencesManager { if (currentReferenceCommandMode === ReferencesCommandMode.Rename) { if (!referencesCanceled) { - // If there are only Confirmed results, complete the rename immediately. - let foundUnconfirmed: ReferenceInfo | undefined = referencesResult.referenceInfos.find(e => e.type !== ReferenceType.Confirmed); - if (!foundUnconfirmed) { - if (this.resultsCallback) { - this.resultsCallback(referencesResult, true); - } - } else { - // Passing a null result and doResult of true to resultsCallback will cause - // the RenameProvider to resolve the promise, which causes the progress bar to be dismissed. - if (this.resultsCallback) { - this.resultsCallback(null, true); - } - if (this.renameView) { - this.renameView.setData(referencesResult, this.groupByFile.Value, (result: ReferencesResult | null) => { - this.referencesCanceled = false; - if (this.resultsCallback) { - this.resultsCallback(result, false); - } - }); - this.renameView.show(true); - } + if (this.resultsCallback) { + this.resultsCallback(referencesResult, true); } } else { // Do nothing when rename is canceled while searching for references was in progress. @@ -512,18 +529,8 @@ export class ReferencesManager { this.resultsCallback = callback; } - public closeRenameUI(): void { - if (this.renameView) { - this.renameView.show(false); - } - } - public clearViews(): void { - if (this.renameView) { - this.renameView.show(false); - } - - // Rename should not clear the Find All References view, as it's in a different view container + // Rename should not clear the Find All References view if (this.client.ReferencesCommandMode !== ReferencesCommandMode.Rename) { if (this.referencesChannel) { this.referencesChannel.clear(); diff --git a/Extension/src/LanguageServer/referencesModel.ts b/Extension/src/LanguageServer/referencesModel.ts index 627b6ef41b..2542166316 100644 --- a/Extension/src/LanguageServer/referencesModel.ts +++ b/Extension/src/LanguageServer/referencesModel.ts @@ -6,35 +6,19 @@ import * as vscode from 'vscode'; import { ReferenceType, ReferenceInfo, ReferencesResult } from './references'; -export type RenameResultCallback = (result: ReferencesResult | null) => void; - -let currentRenameModel: ReferencesModel; - export class ReferencesModel { readonly nodes: TreeNode[] = []; // Raw flat list of references - private renameResultsCallback: RenameResultCallback | null; private originalSymbol: string = ""; public groupByFile: boolean; - constructor(resultsInput: ReferencesResult, readonly isRename: boolean, readonly isCanceled: boolean, groupByFile: boolean, resultsCallback: RenameResultCallback | null, readonly refreshCallback: () => void) { + constructor(resultsInput: ReferencesResult, readonly isCanceled: boolean, groupByFile: boolean, readonly refreshCallback: () => void) { this.originalSymbol = resultsInput.text; - this.renameResultsCallback = resultsCallback; - if (isRename) { - currentRenameModel = this; - } this.groupByFile = groupByFile; - let results: ReferenceInfo[]; - if (this.isRename) { - results = resultsInput.referenceInfos; - } else { - results = resultsInput.referenceInfos.filter(r => r.type !== ReferenceType.Confirmed); - } + let results: ReferenceInfo[] = resultsInput.referenceInfos.filter(r => r.type !== ReferenceType.Confirmed); // Build a single flat list of all leaf nodes - // Currently, the hierachy is build each time referencesTreeDataProvider requests nodes. - // When moving between pending and candidate views in rename, the hierachy gets rebuilt. - // TODO: If that is a performance issue, we could change this to always build the tree up front. + // Currently, the hierarchy is built each time referencesTreeDataProvider requests nodes. for (let r of results) { // Add reference to file let noReferenceLocation: boolean = (r.position.line === 0 && r.position.character === 0); @@ -55,7 +39,6 @@ export class ReferencesModel { node.referenceLocation = location; node.referenceText = r.text; node.referenceType = r.type; - node.isRenameCandidate = r.type !== ReferenceType.Confirmed; this.nodes.push(node); } } @@ -78,15 +61,13 @@ export class ReferencesModel { return result; } - getFileNodes(refType: ReferenceType | undefined, isRenameCandidate: boolean): TreeNode[] { + getFileNodes(refType?: ReferenceType): TreeNode[] { let result: TreeNode[] = []; let filteredFiles: TreeNode[] = []; // Get files by reference type if refType is specified. if (refType !== undefined) { - filteredFiles = this.nodes.filter(i => i.referenceType === refType && (!this.isRename || (isRenameCandidate === i.isRenameCandidate))); - } else if (this.isRename) { - filteredFiles = this.nodes.filter(i => isRenameCandidate === i.isRenameCandidate); + filteredFiles = this.nodes.filter(i => i.referenceType === refType); } else { filteredFiles = this.nodes; } @@ -119,20 +100,7 @@ export class ReferencesModel { return result; } - getReferenceNodes(filename?: string, refType?: ReferenceType, isRenameCandidate?: boolean): TreeNode[] { - if (this.isRename) { - if (refType === undefined || refType === null) { - if (filename === undefined || filename === null) { - return this.nodes.filter(i => i.isRenameCandidate === isRenameCandidate); - } - return this.nodes.filter(i => i.isRenameCandidate === isRenameCandidate && i.filename === filename); - } - if (filename === undefined || filename === null) { - return this.nodes.filter(i => i.isRenameCandidate === isRenameCandidate && i.referenceType === refType); - } - return this.nodes.filter(i => i.isRenameCandidate === isRenameCandidate && i.filename === filename && i.referenceType === refType); - } - + getReferenceNodes(filename?: string, refType?: ReferenceType): TreeNode[] { if (refType === undefined || refType === null) { if (filename === undefined || filename === null) { return this.nodes; @@ -146,17 +114,10 @@ export class ReferencesModel { } getAllReferenceNodes(): TreeNode[] { - if (this.isRename) { - return this.nodes; - } return this.nodes.filter(i => i.node === NodeType.reference); } getAllFilesWithPendingReferenceNodes(): TreeNode[] { - if (this.isRename) { - let empty: TreeNode[] = []; - return empty; - } let result: TreeNode[] = this.nodes.filter(i => i.node === NodeType.fileWithPendingRef); result.sort((a, b) => { if (a.filename === undefined) { @@ -173,187 +134,6 @@ export class ReferencesModel { }); return result; } - - // For rename, this.nodes will contain only ReferenceItems's - getRenameCandidateReferenceTypes(): TreeNode[] { - let result: TreeNode[] = []; - this.nodes.forEach(n => { - if (n.isRenameCandidate) { - let i: number = result.findIndex(e => e.referenceType === n.referenceType); - if (i < 0) { - let node: TreeNode = new TreeNode(this, NodeType.referenceType); - node.referenceType = n.referenceType; - result.push(node); - } - } - }); - result.sort((a, b) => { - if (a.referenceType === undefined) { - if (b.referenceType === undefined) { - return 0; - } else { - return -1; - } - } else if (b.referenceType === undefined) { - return 1; - } else { - return (a.referenceType < b.referenceType) ? -1 : ((a.referenceType > b.referenceType) ? 1 : 0); - } - }); - return result; - } - - // For rename, this.nodes will contain only ReferenceItems's - getRenameCandidateFiles(): TreeNode[] { - let result: TreeNode[] = []; - this.nodes.forEach(n => { - if (n.isRenameCandidate) { - let i: number = result.findIndex(e => e.filename === n.filename); - if (i < 0) { - let node: TreeNode = new TreeNode(this, NodeType.file); - node.fileUri = n.fileUri; - node.filename = n.filename; - node.referenceType = n.referenceType; - result.push(node); - } - } - }); - result.sort((a, b) => { - if (a.filename === undefined) { - if (b.filename === undefined) { - return 0; - } else { - return -1; - } - } else if (b.filename === undefined) { - return 1; - } else { - return a.filename.localeCompare(b.filename); - } - }); - return result; - } - - // For rename, this.nodes will contain only ReferenceItems's - getRenamePendingFiles(): TreeNode[] { - let result: TreeNode[] = []; - this.nodes.forEach(n => { - if (!n.isRenameCandidate) { - let i: number = result.findIndex(e => e.filename === n.filename); - if (i < 0) { - let node: TreeNode = new TreeNode(this, NodeType.file); - node.fileUri = n.fileUri; - node.filename = n.filename; - node.referenceType = n.referenceType; - result.push(node); - } - } - }); - result.sort((a, b) => { - if (a.filename === undefined) { - if (b.filename === undefined) { - return 0; - } else { - return -1; - } - } else if (b.filename === undefined) { - return 1; - } else { - return a.filename.localeCompare(b.filename); - } - }); - return result; - } - - cancelRename(): void { - if (this.renameResultsCallback) { - let callback: RenameResultCallback = this.renameResultsCallback; - this.renameResultsCallback = null; - callback(null); - } - } - - completeRename(): void { - let referenceInfos: ReferenceInfo[] = []; - this.nodes.forEach(n => { - if (!n.isRenameCandidate) { - if (!n.filename || !n.referenceLocation || n.referenceText === undefined || n.referenceType === undefined) { - throw new Error("Invalid TreeNode detected in completeRename()"); - } - let referenceInfo: ReferenceInfo = { - file: n.filename, - position: n.referenceLocation.range.start, - text: n.referenceText, - type: n.referenceType - }; - referenceInfos.push(referenceInfo); - } - }); - let results: ReferencesResult = { - referenceInfos: referenceInfos, - text: this.originalSymbol, - isFinished: true - }; - let callback: RenameResultCallback | null = this.renameResultsCallback; - this.renameResultsCallback = null; - if (callback) { - callback(results); - } - } - - setRenameCandidate(node: TreeNode): void { - node.isRenameCandidate = true; - this.refreshCallback(); - } - - setRenamePending(node: TreeNode): void { - node.isRenameCandidate = false; - this.refreshCallback(); - } - - setAllRenamesCandidates(): void { - this.nodes.forEach(n => n.isRenameCandidate = true); - this.refreshCallback(); - } - - setAllRenamesPending(): void { - this.nodes.forEach(n => n.isRenameCandidate = false); - this.refreshCallback(); - } - - setFileRenamesCandidates(node: TreeNode): void { - this.nodes.forEach(n => { - if (n.filename === node.filename) { - n.isRenameCandidate = true; - } - }); - this.refreshCallback(); - } - - setFileRenamesPending(node: TreeNode): void { - this.nodes.forEach(n => { - if (this.groupByFile) { - if (n.filename === node.filename) { - n.isRenameCandidate = false; - } - } else { - if (n.filename === node.filename && node.referenceType === n.referenceType) { - n.isRenameCandidate = false; - } - } - }); - this.refreshCallback(); - } - - setAllReferenceTypeRenamesPending(type: ReferenceType): void { - this.nodes.forEach(n => { - if (n.referenceType === type) { - n.isRenameCandidate = false; - } - }); - this.refreshCallback(); - } - } export enum NodeType { @@ -374,12 +154,7 @@ export class TreeNode { public referenceLocation?: vscode.Location; public referenceText?: string; public referenceType?: ReferenceType; - public isRenameCandidate?: boolean; constructor(readonly model: ReferencesModel, readonly node: NodeType) { } } - -export function getCurrentRenameModel(): ReferencesModel { - return currentRenameModel; -} diff --git a/Extension/src/LanguageServer/referencesTreeDataProvider.ts b/Extension/src/LanguageServer/referencesTreeDataProvider.ts index 8e1424ad87..6061b59874 100644 --- a/Extension/src/LanguageServer/referencesTreeDataProvider.ts +++ b/Extension/src/LanguageServer/referencesTreeDataProvider.ts @@ -4,55 +4,19 @@ * ------------------------------------------------------------------------------------------ */ 'use strict'; import * as vscode from 'vscode'; -import * as util from '../common'; import { ReferencesModel, TreeNode, NodeType } from './referencesModel'; -import { ReferenceType, getReferenceTagString } from './references'; +import { ReferenceType, getReferenceTagString, getReferenceItemIconPath } from './references'; import * as nls from 'vscode-nls'; nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); -export function getReferenceTypeIconPath(referenceType: ReferenceType): { light: string; dark: string } { - const assetsFolder: string = "assets/"; - const postFixLight: string = "-light.svg"; - const postFixDark: string = "-dark.svg"; - let basePath: string = "ref-cannot-confirm"; - - switch (referenceType) { - case ReferenceType.Confirmed: basePath = "ref-confirmed"; break; - case ReferenceType.Comment: basePath = "ref-comment"; break; - case ReferenceType.String: basePath = "ref-string"; break; - case ReferenceType.Inactive: basePath = "ref-inactive"; break; - case ReferenceType.CannotConfirm: basePath = "ref-cannot-confirm"; break; - case ReferenceType.NotAReference: basePath = "ref-not-a-reference"; break; - case ReferenceType.ConfirmationInProgress: basePath = "ref-confirmation-in-progress"; break; - } - - let lightPath: string = util.getExtensionFilePath(assetsFolder + basePath + postFixLight); - let darkPath: string = util.getExtensionFilePath(assetsFolder + basePath + postFixDark); - return { - light: lightPath, - dark: darkPath - }; -} - -function getReferenceCanceledIconPath(): { light: string; dark: string } { - return { - light: util.getExtensionFilePath("assets/ref-canceled-light.svg"), - dark: util.getExtensionFilePath("assets/ref-canceled-dark.svg") - }; -} - -function getReferenceItemIconPath(type: ReferenceType, isCanceled: boolean): { light: string; dark: string } { - return (isCanceled && type === ReferenceType.ConfirmationInProgress) ? getReferenceCanceledIconPath() : getReferenceTypeIconPath(type); -} - export class ReferencesTreeDataProvider implements vscode.TreeDataProvider { private referencesModel: ReferencesModel | undefined; private readonly _onDidChangeTreeData = new vscode.EventEmitter(); readonly onDidChangeTreeData: vscode.Event; - constructor(readonly isRenameCandidates: boolean) { + constructor() { this.onDidChangeTreeData = this._onDidChangeTreeData.event; } @@ -86,9 +50,6 @@ export class ReferencesTreeDataProvider implements vscode.TreeDataProvider { this.referenceViewProvider.refresh(); }); + this.referencesModel = new ReferencesModel(results, isCanceled, groupByFile, () => { this.referenceViewProvider.refresh(); }); this.referenceViewProvider.setModel(this.referencesModel); } diff --git a/Extension/src/LanguageServer/renameView.ts b/Extension/src/LanguageServer/renameView.ts deleted file mode 100644 index e44d827ced..0000000000 --- a/Extension/src/LanguageServer/renameView.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All Rights Reserved. - * See 'LICENSE' in the project root for license information. - * ------------------------------------------------------------------------------------------ */ -'use strict'; -import * as vscode from 'vscode'; -import { ReferencesResult } from './references'; -import { ReferencesModel, RenameResultCallback } from './referencesModel'; -import { ReferencesTreeDataProvider } from './referencesTreeDataProvider'; - -export class RenameView { - private referencesModel?: ReferencesModel; - private renamePendingTreeDataProvider: ReferencesTreeDataProvider; - private renameCandidatesTreeDataProvider: ReferencesTreeDataProvider; - private visible: boolean = false; - - constructor() { - this.renamePendingTreeDataProvider = new ReferencesTreeDataProvider(false); - this.renameCandidatesTreeDataProvider = new ReferencesTreeDataProvider(true); - vscode.window.createTreeView( - 'CppRenamePendingView', - { treeDataProvider: this.renamePendingTreeDataProvider, showCollapseAll: false }); - vscode.window.createTreeView( - 'CppRenameCandidatesView', - { treeDataProvider: this.renameCandidatesTreeDataProvider, showCollapseAll: false }); - } - - show(showView: boolean): void { - vscode.commands.executeCommand(`setContext`, 'cppRename:hasResults', showView); - if (showView) { - this.visible = true; - vscode.commands.executeCommand(`CppRenamePendingView.focus`); - } else if (this.visible) { - this.visible = false; - if (this.referencesModel) { - this.referencesModel.cancelRename(); - } - this.referencesModel = undefined; - this.clearData(); - } - } - - setGroupBy(groupByFile: boolean): void { - if (this.referencesModel) { - this.referencesModel.groupByFile = groupByFile; - this.renameCandidatesTreeDataProvider.refresh(); - } - } - - setData(results: ReferencesResult, groupByFile: boolean, resultsCallback: RenameResultCallback): void { - this.referencesModel = new ReferencesModel(results, true, false, groupByFile, resultsCallback, () => { - this.renamePendingTreeDataProvider.refresh(); - this.renameCandidatesTreeDataProvider.refresh(); - }); - this.renamePendingTreeDataProvider.setModel(this.referencesModel); - this.renameCandidatesTreeDataProvider.setModel(this.referencesModel); - } - - clearData(): void { - this.renamePendingTreeDataProvider.clear(); - this.renameCandidatesTreeDataProvider.clear(); - } -} diff --git a/Extension/test/integrationTests/IntelliSenseFeatures/index.ts b/Extension/test/integrationTests/IntelliSenseFeatures/index.ts index d659cb06e6..4e60bee1fc 100644 --- a/Extension/test/integrationTests/IntelliSenseFeatures/index.ts +++ b/Extension/test/integrationTests/IntelliSenseFeatures/index.ts @@ -1,42 +1,38 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All Rights Reserved. - * See 'LICENSE' in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as fs from "fs"; import * as path from 'path'; - -import { subscribeToAllLoggers } from "../../../src/logger"; - -// -// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING -// -// This file is providing the test runner to use when running extension tests. -// By default the test runner in use is Mocha based. -// -// You can provide your own test runner if you want to override it by exporting -// a function run(testRoot: string, clb: (error:Error) => void) that the extension -// host can call to run the tests. The test runner is expected to use console.log -// to report the results back to the caller. When the tests are finished, return -// a possible error to the callback or null if none. - -import testRunner = require('vscode/lib/testrunner'); - -// You can directly control Mocha options by uncommenting the following lines -// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info -testRunner.configure({ - ui: 'tdd', // the TDD UI is being used in *.test.ts (suite, test, etc.) - useColors: true, // colored output from test results - fullStackTrace: true, - timeout: 120000 -}); - -const logFolder: string = path.join(__dirname, ".logs"); - -if (!fs.existsSync(logFolder)) { - fs.mkdirSync(logFolder); -} -const logFilePath: string = path.join(logFolder, "intelliSenseFeaturesTests.log"); -subscribeToAllLoggers(message => fs.appendFileSync(logFilePath, message)); - -module.exports = testRunner; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd' + }); + mocha.useColors(true); + + const testsRoot = __dirname; + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.timeout(100000); + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + e(err); + } + }); + }); +} \ No newline at end of file diff --git a/Extension/test/integrationTests/IntelliSenseFeatures/runTest.ts b/Extension/test/integrationTests/IntelliSenseFeatures/runTest.ts new file mode 100644 index 0000000000..23e4f51c6c --- /dev/null +++ b/Extension/test/integrationTests/IntelliSenseFeatures/runTest.ts @@ -0,0 +1,25 @@ +import * as path from 'path'; + +import { runTests } from 'vscode-test'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../../../'); + + // The path to the extension test script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './index'); + + const launchArgs = [ "--disable-extensions" ]; + + // Download VS Code, unzip it and run the integration test + await runTests({ launchArgs, extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/Extension/test/integrationTests/debug/index.ts b/Extension/test/integrationTests/debug/index.ts index 4e003da0c9..24195db695 100644 --- a/Extension/test/integrationTests/debug/index.ts +++ b/Extension/test/integrationTests/debug/index.ts @@ -1,43 +1,38 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All Rights Reserved. - * See 'LICENSE' in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as fs from "fs"; import * as path from 'path'; - -import { subscribeToAllLoggers } from "../../../src/logger"; - -// -// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING -// -// This file is providing the test runner to use when running extension tests. -// By default the test runner in use is Mocha based. -// git status - -// You can provide your own test runner if you want to override it by exporting -// a function run(testRoot: string, clb: (error:Error) => void) that the extension -// host can call to run the tests. The test runner is expected to use console.log -// to report the results back to the caller. When the tests are finished, return -// a possible error to the callback or null if none. - -import testRunner = require('vscode/lib/testrunner'); - -// You can directly control Mocha options by uncommenting the following lines -// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info -testRunner.configure({ - ui: 'tdd', // the TDD UI is being used in *.test.ts (suite, test, etc.) - useColors: true, // colored output from test results - fullStackTrace: true, - timeout: 60000 -}); - -const logFolder: string = path.join(__dirname, ".logs"); - -if (!fs.existsSync(logFolder)) { - fs.mkdirSync(logFolder); -} -const logFilePath: string = path.join(logFolder, "integrationTests.log"); -subscribeToAllLoggers(message => fs.appendFileSync(logFilePath, message)); - -module.exports = testRunner; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd' + }); + mocha.useColors(true); + + const testsRoot = __dirname; + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.timeout(100000); + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + e(err); + } + }); + }); +} \ No newline at end of file diff --git a/Extension/test/integrationTests/debug/runTest.ts b/Extension/test/integrationTests/debug/runTest.ts new file mode 100644 index 0000000000..23e4f51c6c --- /dev/null +++ b/Extension/test/integrationTests/debug/runTest.ts @@ -0,0 +1,25 @@ +import * as path from 'path'; + +import { runTests } from 'vscode-test'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../../../'); + + // The path to the extension test script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './index'); + + const launchArgs = [ "--disable-extensions" ]; + + // Download VS Code, unzip it and run the integration test + await runTests({ launchArgs, extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/Extension/test/integrationTests/languageServer/index.ts b/Extension/test/integrationTests/languageServer/index.ts index eb27bdc4a1..24195db695 100644 --- a/Extension/test/integrationTests/languageServer/index.ts +++ b/Extension/test/integrationTests/languageServer/index.ts @@ -1,42 +1,38 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All Rights Reserved. - * See 'LICENSE' in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as fs from "fs"; import * as path from 'path'; - -import { subscribeToAllLoggers } from "../../../src/logger"; - -// -// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING -// -// This file is providing the test runner to use when running extension tests. -// By default the test runner in use is Mocha based. -// -// You can provide your own test runner if you want to override it by exporting -// a function run(testRoot: string, clb: (error:Error) => void) that the extension -// host can call to run the tests. The test runner is expected to use console.log -// to report the results back to the caller. When the tests are finished, return -// a possible error to the callback or null if none. - -import testRunner = require('vscode/lib/testrunner'); - -// You can directly control Mocha options by uncommenting the following lines -// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info -testRunner.configure({ - ui: 'tdd', // the TDD UI is being used in *.test.ts (suite, test, etc.) - useColors: true, // colored output from test results - fullStackTrace: true, - timeout: 120000 -}); - -const logFolder: string = path.join(__dirname, ".logs"); - -if (!fs.existsSync(logFolder)) { - fs.mkdirSync(logFolder); -} -const logFilePath: string = path.join(logFolder, "integrationTests.log"); -subscribeToAllLoggers(message => fs.appendFileSync(logFilePath, message)); - -module.exports = testRunner; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd' + }); + mocha.useColors(true); + + const testsRoot = __dirname; + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.timeout(100000); + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + e(err); + } + }); + }); +} \ No newline at end of file diff --git a/Extension/test/integrationTests/languageServer/runTest.ts b/Extension/test/integrationTests/languageServer/runTest.ts new file mode 100644 index 0000000000..bddcd5c1e8 --- /dev/null +++ b/Extension/test/integrationTests/languageServer/runTest.ts @@ -0,0 +1,27 @@ +import * as path from 'path'; + +import { runTests } from 'vscode-test'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../../../'); + + // The path to the extension test script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './index'); + + const testWorkspace = path.resolve(extensionDevelopmentPath, 'test/integrationTests/testAssets/SimpleCppProject'); + + const launchArgs = [ "--disable-extensions", testWorkspace ]; + + // Download VS Code, unzip it and run the integration test + await runTests({ launchArgs, extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/Extension/test/runVsCodeTestsWithAbsolutePaths.js b/Extension/test/runVsCodeTestsWithAbsolutePaths.js deleted file mode 100644 index 191cda2367..0000000000 --- a/Extension/test/runVsCodeTestsWithAbsolutePaths.js +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env node - -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -child_process = require('child_process'); -path = require('path'); -async_child_process = require('async-child-process'); - -if (process.env.CODE_TESTS_PATH - && process.env.CODE_TESTS_PATH.startsWith('.')){ - process.env.CODE_TESTS_PATH = path.join(process.cwd(), process.env.CODE_TESTS_PATH.substr(2)); -} - -let optionsWithFullEnvironment = { - cwd: path.resolve(__dirname, '..'), - stdio: 'inherit', - env: { - ...process.env, - } -}; - -spawn = child_process.spawn('node', [path.resolve(__dirname, '../node_modules/vscode/bin/test')], optionsWithFullEnvironment); - -return async_child_process.join(spawn); \ No newline at end of file diff --git a/Extension/test/unitTests/common.test.ts b/Extension/test/unitTests/common.test.ts index 4e1a2c076f..492b7a588f 100644 --- a/Extension/test/unitTests/common.test.ts +++ b/Extension/test/unitTests/common.test.ts @@ -39,7 +39,7 @@ suite("Common Utility validation", () => { test("solo env input with empty array env value", () => { resolveVariablesWithInput("${empty}") .withEnvironment({ - "empty": [] + empty: [] }) .shouldResolveTo(""); }); diff --git a/Extension/test/unitTests/index.ts b/Extension/test/unitTests/index.ts index 138c83ee3e..24195db695 100644 --- a/Extension/test/unitTests/index.ts +++ b/Extension/test/unitTests/index.ts @@ -1,27 +1,38 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All Rights Reserved. - * See 'LICENSE' in the project root for license information. - * ------------------------------------------------------------------------------------------ */ +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; -// -// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING -// -// This file is providing the test runner to use when running extension tests. -// By default the test runner in use is Mocha based. -// -// You can provide your own test runner if you want to override it by exporting -// a function run(testRoot: string, clb: (error:Error) => void) that the extension -// host can call to run the tests. The test runner is expected to use console.log -// to report the results back to the caller. When the tests are finished, return -// a possible error to the callback or null if none. +export function run(): Promise { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd' + }); + mocha.useColors(true); -import testRunner = require('vscode/lib/testrunner'); + const testsRoot = __dirname; -// You can directly control Mocha options by uncommenting the following lines -// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info -testRunner.configure({ - ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.) - useColors: true // colored output from test results -}); + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } -module.exports = testRunner; + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.timeout(100000); + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + e(err); + } + }); + }); +} \ No newline at end of file diff --git a/Extension/test/unitTests/runTest.ts b/Extension/test/unitTests/runTest.ts new file mode 100644 index 0000000000..34964f62a5 --- /dev/null +++ b/Extension/test/unitTests/runTest.ts @@ -0,0 +1,25 @@ +import * as path from 'path'; + +import { runTests } from 'vscode-test'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../../'); + + // The path to the extension test script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './index'); + + const launchArgs = [ "--disable-extensions" ]; + + // Download VS Code, unzip it and run the integration test + await runTests({ launchArgs, extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/Extension/yarn.lock b/Extension/yarn.lock index 0257432b2b..0f6f81a3c5 100644 --- a/Extension/yarn.lock +++ b/Extension/yarn.lock @@ -204,6 +204,11 @@ dependencies: source-map "^0.6.1" +"@types/vscode@1.43.0": + version "1.43.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.43.0.tgz#22276e60034c693b33117f1068ffaac0e89522db" + integrity sha512-kIaR9qzd80rJOxePKpCB/mdy00mz8Apt2QA5Y6rdrKFn13QNFNeP3Hzmsf37Bwh/3cS7QjtAeGSK7wSqAU0sYQ== + "@types/webpack-sources@*": version "0.1.6" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.6.tgz#3d21dfc2ec0ad0c77758e79362426a9ba7d7cbcb" @@ -481,7 +486,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2: version "6.11.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== @@ -705,18 +710,6 @@ asn1.js@^4.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -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= - assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" @@ -779,11 +772,6 @@ async-settle@^1.0.0: dependencies: async-done "^1.2.2" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - atob-lite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" @@ -799,16 +787,6 @@ await-notify@^1.0.1: resolved "https://registry.yarnpkg.com/await-notify/-/await-notify-1.0.1.tgz#0b48133b22e524181e11557665185f2a2f3ce47c" integrity sha1-C0gTOyLlJBgeEVV2ZRhfKi885Hw= -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.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== - babel-runtime@^6.11.6: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -855,13 +833,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -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" - before-after-hook@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" @@ -930,6 +901,11 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -1089,11 +1065,6 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1259,17 +1230,10 @@ color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -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== +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== commander@^2.12.1, commander@^2.20.0: version "2.20.3" @@ -1366,7 +1330,7 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -1467,13 +1431,6 @@ dargs@^7.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -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-fabulous@1.X: version "1.1.0" resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-1.1.0.tgz#af8a08632465224ef4174a9f06308c3c2a1ebc8e" @@ -1567,11 +1524,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.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= - deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -1607,6 +1559,11 @@ diagnostic-channel@0.2.0: dependencies: semver "^5.3.0" +diff@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" + integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww== + diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -1669,14 +1626,6 @@ each-props@^1.3.0: is-plain-object "^2.0.1" object.defaults "^1.1.0" -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" - elliptic@^6.0.0: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" @@ -2113,7 +2062,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.2: +extend@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -2141,16 +2090,6 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -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= - fancy-log@^1.3.2, fancy-log@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" @@ -2332,20 +2271,6 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" -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" - fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -2445,13 +2370,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -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-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -2586,6 +2504,11 @@ graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, g resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +growl@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" + integrity sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -2699,18 +2622,10 @@ gulplog@^1.0.0: dependencies: glogg "^1.0.0" -har-schema@^2.0.0: +has-flag@^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.3: - 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" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= has-flag@^3.0.0: version "3.0.0" @@ -2820,21 +2735,12 @@ http-proxy-agent@^2.1.0: 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-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -https-proxy-agent@^2.2.1, https-proxy-agent@^2.2.4: +https-proxy-agent@^2.2.4: 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== @@ -3163,11 +3069,6 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" -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= - is-unc-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" @@ -3227,11 +3128,6 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -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= - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3245,11 +3141,6 @@ js-yaml@3.13.1, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - jsdoctypeparser@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz#acfb936c26300d98f1405cb03e20b06748e512a8" @@ -3265,21 +3156,11 @@ json-schema-traverse@^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-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -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= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -3299,16 +3180,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -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" - just-debounce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/just-debounce/-/just-debounce-1.0.0.tgz#87fccfaeffc0b68cd19d55f6722943f929ea35ea" @@ -3644,18 +3515,6 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0: - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== - dependencies: - mime-db "1.43.0" - mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -3719,22 +3578,21 @@ mkdirp@0.5.1, mkdirp@^0.5.1: 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== +mocha@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" + integrity sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA== dependencies: - browser-stdout "1.3.1" - commander "2.15.1" + browser-stdout "1.3.0" + commander "2.11.0" debug "3.1.0" - diff "3.5.0" + diff "3.3.1" escape-string-regexp "1.0.5" glob "7.1.2" - growl "1.10.5" + growl "1.10.3" he "1.1.1" - minimatch "3.0.4" mkdirp "0.5.1" - supports-color "5.4.0" + supports-color "4.4.0" mocha@^6.2.0: version "6.2.2" @@ -3950,11 +3808,6 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -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== - object-assign@4.X, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -4344,11 +4197,6 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -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= - picomatch@^2.0.5: version "2.2.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" @@ -4449,11 +4297,6 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.28: - version "1.7.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== - public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -4501,16 +4344,11 @@ punycode@^1.2.4: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0, punycode@^2.1.1: +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== - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -4521,11 +4359,6 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -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== - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4687,32 +4520,6 @@ replace-homedir@^1.0.0: is-absolute "^1.0.0" remove-trailing-separator "^1.1.0" -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - 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.3" - 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.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -4728,11 +4535,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -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= - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -4850,7 +4652,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -5008,7 +4810,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.0, source-map-support@~0.5.12: +source-map-support@~0.5.12: 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== @@ -5086,21 +4888,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -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" - ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" @@ -5308,12 +5095,12 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== -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== +supports-color@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + integrity sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ== dependencies: - has-flag "^3.0.0" + has-flag "^2.0.0" supports-color@6.0.0: version "6.0.0" @@ -5509,14 +5296,6 @@ to-through@^2.0.0: dependencies: through2 "^2.0.3" -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - ts-loader@^6.0.4: version "6.2.1" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" @@ -5571,18 +5350,6 @@ tty-browserify@0.0.0: resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= -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= - type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -5714,14 +5481,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -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" - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -5754,11 +5513,6 @@ util@^0.11.0: dependencies: inherits "2.0.3" -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - v8-compile-cache@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" @@ -5789,15 +5543,6 @@ value-or-function@^3.0.0: resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= -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" - vinyl-fs@^3.0.0, vinyl-fs@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" @@ -5925,26 +5670,14 @@ vscode-nls@^4.1.1: resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.1.tgz#f9916b64e4947b20322defb1e676a495861f133c" integrity sha512-4R+2UoUUU/LdnMnFjePxfLqNhBS8lrAFyX7pjb2ud/lqDkrUavFUTcG7wR0HBZFakae0Q6KLBFjMS6W93F403A== -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== +vscode-test@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-1.3.0.tgz#3310ab385d9b887b4c82e8f52be1030e7cf9493d" + integrity sha512-LddukcBiSU2FVTDr3c1D8lwkiOvwlJdDL2hqVbn6gIz+rpTqUCkMZSKYm94Y1v0WXlHSDQBsXyY+tchWQgGVsw== 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" + https-proxy-agent "^2.2.4" + rimraf "^2.6.3" watchpack@^1.6.0: version "1.6.0"