Compare commits

...
42 Commits
Author SHA1 Message Date
Sean McManus b1274d3c76 Merge pull request #2749 from Microsoft/seanmcm/0_20_1_release
Seanmcm/0 20 1 release
2018-10-31 17:24:43 -07:00
Sean McManus 8f8565dbfd Merge branch 'seanmcm/0_20_1_release' of https://github.com/Microsoft/vscode-cpptools into seanmcm/0_20_1_release 2018-10-31 17:16:30 -07:00
Sean McManus 7f4614c31c Merge again. 2018-10-31 17:15:52 -07:00
Sean McManus eccee49017 Fix punctuation/spacing inconsistencies. (#2750) 2018-10-31 17:12:30 -07:00
Sean McManus e231453778 Merge branch 'release' into seanmcm/0_20_1_release 2018-10-31 16:29:33 -07:00
Sean McManus 8729804dc2 Update version. 2018-10-31 16:27:42 -07:00
Anandlal c607604b6b "taskName" changed to "label" as per version 2.0.0 (#2741)
https://code.visualstudio.com/docs/editor/tasks#_migrating-to-tasks-200
2018-10-31 16:24:50 -07:00
Sean McManus 460b95920f Update changelog, fwlinks, and update telemetry API (#2748)
Update changelog, fwlinks, and update telemetry API
2018-10-31 16:06:34 -07:00
Pierson Lee 1c38b55b9f Update external Console notes
Updated external console option to show changes to support for integratedTerminal.
2018-10-31 12:08:00 -07:00
Sean McManus 0cf237c839 Merge pull request #2725 from Microsoft/master
2nd merge for 0.20.0
2018-10-25 16:46:17 -07:00
Sean McManus e12bad5172 Fix 2 typos in the changelog. (#2723) 2018-10-25 16:42:57 -07:00
Bob Brown 04bb260577 update release notes (#2722) 2018-10-25 16:42:15 -07:00
Bob Brown ddc1f901c2 Merge pull request #2721 from Microsoft/seanmcm/0_20_0_release
Seanmcm/0 20 0 release
2018-10-25 16:21:08 -07:00
Sean McManus 9ca27af2df Merge. 2018-10-25 15:58:34 -07:00
Sean McManus b964d4ebc4 Fix comment for intelliSenseEngine setting. (#2720) 2018-10-25 15:57:20 -07:00
Sean McManus 082435ec8b Fix comment for intelliSenseEngine setting. 2018-10-25 15:48:28 -07:00
Sean McManus 324c5f59f4 Update changelog for 0.20.0 release. 2018-10-25 15:38:26 -07:00
Sean McManus 72581c23b7 Update changelog for 0.20.0. (#2718)
* Update changelog for 0.20.0.

* Revise changelog for 0.20.0.
2018-10-25 15:29:44 -07:00
Sean McManus 807ff80f56 Update vscode telemetry api used. (#2707) 2018-10-23 20:23:12 -07:00
Griffin Downs b0e17a1fd9 Don't update pre-releases (#2693) 2018-10-19 16:00:55 -07:00
Griffin Downs bc64d25a1d Ensure that package version suffix + version suffix version are set (#2686) 2018-10-19 15:29:38 -07:00
Sean McManus ed5d8c8fac Get rid of the MacCrash memory addresses. (#2695) 2018-10-18 19:17:36 -07:00
Sean McManus 3a9f4c404d Update changelog for 0.19.1-insiders3. (#2694) 2018-10-18 17:19:28 -07:00
Bob Brown 4330679e23 Don't allow configuration providers to activate the extension when IntelliSense is disabled (#2692) 2018-10-18 12:29:06 -07:00
Andrew Wang 88e9724892 Attempt to fix security and gulp 4.0 (#2689) 2018-10-17 14:34:21 -07:00
Sean McManus acf7b464eb Update changelog.md. (#2676)
* Update changelog.md.
2018-10-16 13:38:58 -07:00
Sean McManus 78f5a38110 Update changelog for 0.19.1-insiders2 (#2649)
* Update changelog for 0.19.1-insiders2
2018-10-11 15:59:02 -07:00
Pierson Lee 31eed4cee2 Add missing interop 15 file to dev workflow (#2643) 2018-10-11 12:28:32 -07:00
Pierson Lee ea8ab1358f Update CHANGELOG.md and copyDebuggerDependencies (#2641)
Update for VSCodeDebugProtocol dll and for the Integratedterminal Work.
2018-10-10 17:53:20 -07:00
Pierson Lee 55558a53e3 Update links for mono framework and runtime (#2640)
Updating to 5.14.0.177 of mono. Update TPN header per CELA
2018-10-10 16:37:23 -07:00
Griffin Downs 536685c8a0 Grdowns/update channel fix (#2637)
* Use shell optional arg

* Add try/catch around spawn to override any possible exceptions

* Default vsixname to cpptools-linux32.vsix

* Move logFailure inline

* Remove potential PII from error message to be on the safe side

* Fix linter errors

* Remove spawn optional arg; instead remove quotes surrounding command

* Remove rethrowing of error at the top level checkAndApplyUpdate

* Commenting

* Remove default case in switch statement for vsixName; Add x86, i383, i686 cases
2018-10-10 15:51:29 -07:00
Sean McManus b6f184744c Update changelog. (#2625) 2018-10-08 15:04:16 -07:00
Sean McManus 539ecc536f Update the changlog for 0.19.1-insiders. (#2615)
* Update the changlog for 0.19.1-insiders.
2018-10-08 11:42:59 -07:00
Sean McManus e819f36e91 Fix error when rootRui is null. (#2614) 2018-10-05 15:34:44 -07:00
Bob Brown 140670c371 Update c_cpp_properties.json.md 2018-10-04 08:48:54 -07:00
Pierson Lee 102ffc1616 Fixing quoting around ssh's command (#2604)
This fixes #2585
2018-10-03 17:35:02 -07:00
Bob Brown 28981f3ce6 remove telemetry that is already being blocked (#2603) 2018-10-03 16:45:53 -07:00
shankaryoga21 775aba8650 don't use falsy comparisons when resolving default settings. (#2592) 2018-10-02 13:18:16 -07:00
Bob Brown b3fb2558fd update telemetry version (#2593) 2018-10-02 12:46:35 -07:00
Griffin Downs 80716ae228 Grdowns/update channel4 (#2576)
* Remove redundant error telemetry
* Check rate limit before attempting to download release JSON
2018-10-02 10:13:10 -07:00
Bob Brown 6d71c6dd4f Merge pull request #2575 from Microsoft/bobbrow/releaseToMaster
Merge release to master
2018-09-28 09:54:40 -07:00
Bob Brown (DEVDIV) da68908e3e update version and fwlinks for October release 2018-09-28 09:35:26 -07:00
20 changed files with 2968 additions and 486 deletions
+3 -1
View File
@@ -35,7 +35,9 @@ script:
- npm run tslint
# pr-check needs to run before test. test modifies package.json.
- npm run pr-check
- npm run test
- npm run unitTests
# TODO: Merge tests into one group due to Gulp 4.0
- npm run integrationTests
# Dump integrationTest.log output
- find ~ -name "integrationTests.log" -type f -exec cat {} \;
+2 -2
View File
@@ -4,7 +4,7 @@
"version": "2.0.0",
"tasks": [
{
"taskName": "build",
"label": "build",
"type": "shell",
"group": {
"kind": "build",
@@ -47,4 +47,4 @@
}
}
]
}
}
@@ -68,7 +68,11 @@
A list of files that should be included before any other characters in the source file are processed. Files are included in the order listed.
* #### `compilerPath` (optional)
The absolute path to the compiler you use to build your project. The extension will query the compiler to determine the system include paths and default defines to use for IntelliSense. Args can be added to modify the includes/defines used, e.g. `-nostdinc++`, `-m32`, etc., but paths with spaces must be surrounded by double quotes (`"`) if args are used.
The absolute path to the compiler you use to build your project. The extension will query the compiler to determine the system include paths and default defines to use for IntelliSense.
Args can be added to modify the includes/defines used, e.g. `-nostdinc++`, `-m32`, `-fno-ms-extensions`, etc., but paths with spaces must be surrounded by double quotes (`"`) if args are used.
If you want to disable automatic querying of system include paths and defines, set this value to the emptry string `""`. This is generally not recommended, but there are some cases where automatic querying of system includes and defines is undesirable.
* #### `cStandard`
The C standard revision to use for IntelliSense in your project.
+32 -2
View File
@@ -1,5 +1,35 @@
# C/C++ for Visual Studio Code Change Log
## Version 0.20.1: October 31, 2018
* Fix IntelliSense-based `Go to Declaration` when there's only a definition in a TU. [#2743](https://github.com/Microsoft/vscode-cpptools/issues/2743)
* Fix `#include` completion for standalone header files. [#2744](https://github.com/Microsoft/vscode-cpptools/issues/2744)
* Fix the highest hitting main process crash.
* Fix IntelliSense process crash with completion.
## Version 0.20.0: October 30, 2018
* Add IntegratedTerminal support for Linux and Windows. [#35](https://github.com/microsoft/vscode-cpptools/issues/35)
* Unify Visual Studio Code debug protocol parsing by using a shared library with Visual Studio.
* Fix IntelliSense-based `Go to Definition` on overloads (in the same TU). [#1071](https://github.com/Microsoft/vscode-cpptools/issues/1071)
* Fix inactive regions not being disabled when falling back to the Tag Parser. [#2181](https://github.com/Microsoft/vscode-cpptools/issues/2181)
* Fix `#include` completion not working with `compile_commands.json` or custom configuration providers. [#2242](https://github.com/Microsoft/vscode-cpptools/issues/2242)
* Fix IntelliSense failing if recursive includes removes all paths. [#2442](https://github.com/Microsoft/vscode-cpptools/issues/2442)
* Fix incorrect IntelliSense errors with MinGW (stop using `-fms-extensions` by default). [#2443](https://github.com/Microsoft/vscode-cpptools/issues/2443), [#2623](https://github.com/Microsoft/vscode-cpptools/issues/2623)
* Fix error squiggles sometimes not updating after typing. [#2448](https://github.com/Microsoft/vscode-cpptools/issues/2448)
* Add support for Mac framework paths in `compile_commands.json`. [#2508](https://github.com/Microsoft/vscode-cpptools/issues/2508)
* Fix IntelliSense-based `Go to Definition` falling back to the Tag Parser for definitions not in the TU. [#2536](https://github.com/Microsoft/vscode-cpptools/issues/2536), [#2677](https://github.com/Microsoft/vscode-cpptools/issues/2677)
* Fix IntelliSense-based `Go to Definition` on the identifier of a definition with no declaration. [#2573](https://github.com/Microsoft/vscode-cpptools/issues/2573)
* Fix IntelliSense-based `Go to Definition` not falling back to the declaration (in certain cases). [#2574](https://github.com/Microsoft/vscode-cpptools/issues/2574)
* Fix IntelliSense-based `Go to Definition` going to the wrong location after edits are made. [#2579](https://github.com/Microsoft/vscode-cpptools/issues/2579)
* Fix `Go to Definition` when the `intelliSenseEngineFallback` is `Disabled` and `#include`s are missing. [#2583](https://github.com/Microsoft/vscode-cpptools/issues/2583)
* Fix empty `C_Cpp.default.*` settings not being used. [#2584](https://github.com/Microsoft/vscode-cpptools/issues/2584)
* Fix quoting around `ssh`'s command (for the debugger). [#2585](https://github.com/Microsoft/vscode-cpptools/issues/2585)
* Fix crash on hover (and `Go to Definition`) when using the `Tag Parser`. [#2586](https://github.com/Microsoft/vscode-cpptools/issues/2586)
* Fix errors when a workspace folder isn't open. [#2613](https://github.com/Microsoft/vscode-cpptools/issues/2613), [#2691](https://github.com/Microsoft/vscode-cpptools/issues/2691)
* Fix `-isystem` without a space after getting ignored in `compile_comamands.json`. [#2629](https://github.com/Microsoft/vscode-cpptools/issues/2629)
* Fix Insiders update channel installation bugs. [#2636](https://github.com/Microsoft/vscode-cpptools/issues/2636), [#2685](https://github.com/Microsoft/vscode-cpptools/issues/2685)
* Fix IntelliSense-based `Go to Declaration` falling back to the Tag Parser if the definition is also in the TU. [#2642](https://github.com/Microsoft/vscode-cpptools/issues/2642)
* Fix the `Disabled` `intelliSenseEngine` setting not working with custom configuration providers. [#2656](https://github.com/Microsoft/vscode-cpptools/issues/2656)
## Version 0.19.0: September 27, 2018
* Change the symbol database to update without needing to save. [#202](https://github.com/Microsoft/vscode-cpptools/issues/202)
* Enable IntelliSense-based `Go to Definition` for the current translation unit, including local variables and overloaded operators. [#255](https://github.com/Microsoft/vscode-cpptools/issues/255), [#979](https://github.com/Microsoft/vscode-cpptools/issues/979)
@@ -49,7 +79,7 @@
* Fix IntelliSense crash when the gcc-8 type_traits header is used. [#2323](https://github.com/Microsoft/vscode-cpptools/issues/2323), [#2328](https://github.com/Microsoft/vscode-cpptools/issues/2328)
* Limit configuration popups to one at a time. [#2324](https://github.com/Microsoft/vscode-cpptools/issues/2324)
* Don't show `includePath` code actions if compile commands or custom configuration providers are used. [#2334](https://github.com/Microsoft/vscode-cpptools/issues/2334)
* Fix `Cpp.clang_format_path` not accepting environment variables. [#2344](https://github.com/Microsoft/vscode-cpptools/issues/2344)
* Fix `C_Cpp.clang_format_path` not accepting environment variables. [#2344](https://github.com/Microsoft/vscode-cpptools/issues/2344)
* Fix IntelliSense not working with non-ASCII characters in the WSL install path. [#2351](https://github.com/Microsoft/vscode-cpptools/issues/2351)
* Filter out buggy IntelliSense error `"= delete" can only appear on the first declaration of a function`. [#2352](https://github.com/Microsoft/vscode-cpptools/issues/2352)
* Fix IntelliSense failing with WSL if gcc is installed bug g++ isn't. [#2360](https://github.com/Microsoft/vscode-cpptools/issues/2360)
@@ -497,7 +527,7 @@
* Switch between header and source.
* Control which files are processed under include path.
## Version 0.6.1: June 03, 2016
## Version 0.6.1: June 3, 2016
* Bug fixes.
## Version 0.6.0: May 24, 2016
+2 -6
View File
@@ -205,12 +205,8 @@
<tr>
<td>
<div>
<h2 class="caption">September 2018 Update</h2>
<div>Thank you for installing the C/C++ extension. In the September update, we added a preview of semantic-aware Go To Definition. This allows Go To Definition to work for local variables.
In addition, when the Go To Definition request references a symbol defined in the current translation unit, other incorrect symbols in the workspace with the same identifier will be
filtered from the results.<br/>
<br/>
We also added a new setting: <code>C_Cpp.updateChannel</code> to facilitate installing Insiders releases of the C++ extension.<br/>
<h2 class="caption">October 2018 Update</h2>
<div>Thank you for installing the C/C++ extension. In the October update, we finished our semantic-aware implementation of Go To Definition. We also added IntegratedTerminal support for debugging.<br/>
<br/>
Additional features and bug fixes are detailed in the <a href="https://github.com/Microsoft/vscode-cpptools/releases">full release notes</a>.</div>
</div>
+11 -3
View File
@@ -1,8 +1,16 @@
THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
THIRD PARTY SOFTWARE NOTICES AND INFORMATION
Do Not Translate or Localize
Microsoft C/C++ Extension for Visual Studio Code incorporates components from the projects listed below. Microsoft licenses these components under the Microsoft C/C++ Extension for Visual Studio Code license terms, except as noted. The original copyright notices and the licenses under which Microsoft received such components are set forth below for informational purposes. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise.
This Microsoft product may utilize material made available by third parties under the following license terms. Any source code that Microsoft is required to make available can be found at http://3rdpartysource.microsoft.com. You may also obtain a copy of any such source code (during the period provided by the license) by sending a check or money order for US $5.00 to:
Source Code Compliance Team
Microsoft Corporation
One Microsoft Way
Redmond, WA 98052 USA
Please write “Source for [OSS PROJECT NAME]” in the memo line of your payment.
1. agent-base (https://github.com/TooTallNate/node-agent-base)
2. ANTLR (http://www.antlr2.org/)
+28 -13
View File
@@ -12,31 +12,41 @@ const mocha = require('gulp-mocha');
const fs = require('fs');
const optionsSchemaGenerator = require('./out/tools/GenerateOptionsSchema');
gulp.task('unitTests', () => {
gulp.task('unitTests', (done) => {
env.set({
CODE_TESTS_PATH: "./out/test/unitTests",
});
gulp.src('./test/runVsCodeTestsWithAbsolutePaths.js', {read: false})
return gulp.src('./test/runVsCodeTestsWithAbsolutePaths.js', {read: false})
.pipe(mocha({ ui: "tdd" }))
.once('error', err => process.exit(1))
.once('end', () => process.exit())
.once('error', err => {
done();
process.exit(1);
})
.once('end', () => {
done();
process.exit();
});
});
gulp.task('integrationTests', () => {
gulp.task('integrationTests', (done) => {
env.set({
CODE_TESTS_PATH: "./out/test/integrationTests",
CODE_TESTS_WORKSPACE: "./test/integrationTests/testAssets/SimpleCppProject"
});
gulp.src('./test/runVsCodeTestsWithAbsolutePaths.js', {read: false})
return gulp.src('./test/runVsCodeTestsWithAbsolutePaths.js', {read: false})
.pipe(mocha({ ui: "tdd" }))
.once('error', err => process.exit(1))
.once('end', () => process.exit())
.once('error', err => {
done();
process.exit(1);
})
.once('end', () => {
done();
process.exit();
});
});
gulp.task('allTests', ['unitTests', 'integrationTests']);
/// Misc Tasks
const allTypeScript = [
'src/**/*.ts',
@@ -55,7 +65,7 @@ const lintReporter = (output, file, options) => {
};
gulp.task('tslint', () => {
gulp.src(allTypeScript)
return gulp.src(allTypeScript)
.pipe(tslint({
program: require('tslint').Linter.createProgram("./tsconfig.json"),
configuration: "./tslint.json"
@@ -66,14 +76,19 @@ gulp.task('tslint', () => {
}))
});
gulp.task('pr-check', () => {
gulp.task('pr-check', (done) => {
const packageJson = JSON.parse(fs.readFileSync('./package.json').toString());
if (packageJson.activationEvents.length !== 1 && packageJson.activationEvents[0] !== '*') {
console.log('Please make sure to not check in package.json that has been rewritten by the extension activation. If you intended to have changes in package.json, please only check-in your changes. If you did not, please run `git checkout -- package.json`.');
done();
process.exit(1);
}
done();
});
gulp.task('generateOptionsSchema', () => {
gulp.task('generateOptionsSchema', (done) => {
optionsSchemaGenerator.generateOptionsSchema();
done();
});
+2663 -354
View File
File diff suppressed because it is too large Load Diff
+15 -13
View File
@@ -2,7 +2,7 @@
"name": "cpptools",
"displayName": "C/C++",
"description": "C/C++ IntelliSense, debugging, and code browsing.",
"version": "0.19.0",
"version": "0.20.1",
"publisher": "ms-vscode",
"preview": true,
"icon": "LanguageCCPP_color_128x.png",
@@ -108,7 +108,7 @@
"Disabled"
],
"default": "Default",
"description": "Controls the IntelliSense provider. \"Tag Parser\" provides \"fuzzy\" results that are not context-aware. \"Default\" provides context-aware results and is in preview mode - member list, hover tooltips, and error squiggles are currently implemented. Features not yet implemented in the new default engine will use the tag parser engine instead.",
"description": "Controls the IntelliSense provider. \"Tag Parser\" provides \"fuzzy\" results that are not context-aware. \"Default\" provides context-aware results. \"Disabled\" turns off C/C++ language service features.",
"scope": "resource"
},
"C_Cpp.intelliSenseEngineFallback": {
@@ -1387,7 +1387,9 @@
"devDependencies": {
"@types/mocha": "^2.2.43",
"@types/node": "^8.0.46",
"gulp": "3.9.1",
"async-child-process": "^1.1.1",
"child-process": "^1.0.2",
"gulp": "^4.0.0",
"gulp-env": "0.4.0",
"gulp-mocha": "5.0.0",
"gulp-tslint": "8.1.2",
@@ -1409,14 +1411,14 @@
"vscode-cpptools": "2.1.1",
"vscode-debugadapter": "~1.24.0",
"vscode-debugprotocol": "~1.24.0",
"vscode-extension-telemetry": "~0.0.11",
"vscode-extension-telemetry": "~0.0.22",
"vscode-languageclient": "3.5.1",
"yauzl": "~2.8.0"
},
"runtimeDependencies": [
{
"description": "C/C++ language components (Linux / x86_64)",
"url": "https://go.microsoft.com/fwlink/?linkid=2010302",
"url": "https://go.microsoft.com/fwlink/?linkid=2036673",
"platforms": [
"linux"
],
@@ -1430,7 +1432,7 @@
},
{
"description": "C/C++ language components (Linux / x86)",
"url": "https://go.microsoft.com/fwlink/?linkid=2010301",
"url": "https://go.microsoft.com/fwlink/?linkid=2036672",
"platforms": [
"linux"
],
@@ -1446,7 +1448,7 @@
},
{
"description": "C/C++ language components (OS X)",
"url": "https://go.microsoft.com/fwlink/?linkid=2010303",
"url": "https://go.microsoft.com/fwlink/?linkid=2036674",
"platforms": [
"darwin"
],
@@ -1457,7 +1459,7 @@
},
{
"description": "C/C++ language components (Windows)",
"url": "https://go.microsoft.com/fwlink/?linkid=2010204",
"url": "https://go.microsoft.com/fwlink/?linkid=2036671",
"platforms": [
"win32"
],
@@ -1511,7 +1513,7 @@
},
{
"description": "Mono Framework Assemblies",
"url": "https://go.microsoft.com/fwlink/?LinkId=816539",
"url": "https://go.microsoft.com/fwlink/?LinkId=2027135",
"platforms": [
"linux",
"darwin"
@@ -1520,7 +1522,7 @@
},
{
"description": "Mono Runtime (Linux / x86)",
"url": "https://go.microsoft.com/fwlink/?LinkId=816540",
"url": "https://go.microsoft.com/fwlink/?LinkId=2027410",
"platforms": [
"linux"
],
@@ -1535,7 +1537,7 @@
},
{
"description": "Mono Runtime (Linux / x86_64)",
"url": "https://go.microsoft.com/fwlink/?LinkId=816541",
"url": "https://go.microsoft.com/fwlink/?LinkId=2027416",
"platforms": [
"linux"
],
@@ -1548,7 +1550,7 @@
},
{
"description": "Mono Runtime (OS X)",
"url": "https://go.microsoft.com/fwlink/?LinkId=816542",
"url": "https://go.microsoft.com/fwlink/?LinkId=2027403",
"platforms": [
"darwin"
],
@@ -1578,4 +1580,4 @@
"binaries": []
}
]
}
}
+1 -1
View File
@@ -123,7 +123,7 @@ export class RemoteAttachPicker {
const command: string = `sh -c 'uname && if [ $(uname) = "Linux" ] ; then ${PsProcessParser.psLinuxCommand} ; elif [ $(uname) = "Darwin" ] ; ` +
`then ${PsProcessParser.psDarwinCommand}; fi'`;
return execChildProcess(`${pipeCmd} "${command}"`, null, this._channel).then(output => {
return execChildProcess(`${pipeCmd} '${command}'`, null, this._channel).then(output => {
// OS will be on first line
// Processess will follow if listed
let lines: string[] = output.split(/\r?\n/);
+16 -12
View File
@@ -215,6 +215,10 @@ export class CppProperties {
if (this.configurationIncomplete && this.defaultIncludes && this.defaultFrameworks && this.vcpkgPathReady) {
let configuration: Configuration = this.CurrentConfiguration;
let settings: CppSettings = new CppSettings(this.rootUri);
let isUnset: (input: any) => boolean = (input: any) => {
// default values for "default" config settings is null.
return input === null;
};
// Anything that has a vscode setting for it will be resolved in updateServerOnFolderSettingsChange.
// So if a property is currently unset, but has a vscode setting, don't set it yet, otherwise the linkage
@@ -222,32 +226,32 @@ export class CppProperties {
// Only add settings from the default compiler if user hasn't explicitly set the corresponding VS Code setting.
if (!settings.defaultIncludePath) {
if (isUnset(settings.defaultIncludePath)) {
// We don't add system includes to the includePath anymore. The language server has this information.
let abTestSettings: ABTestSettings = getABTestSettings();
let rootFolder: string = abTestSettings.UseRecursiveIncludes ? "${workspaceFolder}/**" : "${workspaceFolder}";
configuration.includePath = [rootFolder].concat(this.vcpkgIncludes);
}
// browse.path is not set by default anymore. When it is not set, the includePath will be used instead.
if (!settings.defaultDefines) {
if (isUnset(settings.defaultDefines)) {
configuration.defines = (process.platform === 'win32') ? ["_DEBUG", "UNICODE", "_UNICODE"] : [];
}
if (!settings.defaultMacFrameworkPath && process.platform === 'darwin') {
if (isUnset(settings.defaultMacFrameworkPath) && process.platform === 'darwin') {
configuration.macFrameworkPath = this.defaultFrameworks;
}
if (!settings.defaultWindowsSdkVersion && this.defaultWindowsSdkVersion && process.platform === 'win32') {
if (isUnset(settings.defaultWindowsSdkVersion) && this.defaultWindowsSdkVersion && process.platform === 'win32') {
configuration.windowsSdkVersion = this.defaultWindowsSdkVersion;
}
if (!settings.defaultCompilerPath && this.defaultCompilerPath) {
if (isUnset(settings.defaultCompilerPath) && this.defaultCompilerPath) {
configuration.compilerPath = this.defaultCompilerPath;
}
if (!settings.defaultCStandard && this.defaultCStandard) {
if (isUnset(settings.defaultCStandard) && this.defaultCStandard) {
configuration.cStandard = this.defaultCStandard;
}
if (!settings.defaultCppStandard && this.defaultCppStandard) {
if (isUnset(settings.defaultCppStandard) && this.defaultCppStandard) {
configuration.cppStandard = this.defaultCppStandard;
}
if (!settings.defaultIntelliSenseMode) {
if (isUnset(settings.defaultIntelliSenseMode)) {
configuration.intelliSenseMode = this.defaultIntelliSenseMode;
}
this.configurationIncomplete = false;
@@ -260,7 +264,7 @@ export class CppProperties {
Object.assign(result, this.configurationJson.env);
}
result["workspaceFolderBasename"] = path.basename(this.rootUri.fsPath);
result["workspaceFolderBasename"] = this.rootUri ? path.basename(this.rootUri.fsPath) : "";
return result;
}
@@ -431,11 +435,11 @@ export class CppProperties {
private updateConfiguration(property: string, defaultValue: string, env: Environment): string;
private updateConfiguration(property: string | boolean, defaultValue: boolean, env: Environment): boolean;
private updateConfiguration(property, defaultValue, env): any {
if (typeof property === "string" || typeof defaultValue === "string") {
if (util.isString(property) || util.isString(defaultValue)) {
return this.resolveVariables(property, defaultValue, env);
} else if (typeof property === "boolean" || typeof defaultValue === "boolean") {
} else if (util.isBoolean(property) || util.isBoolean(defaultValue)) {
return this.resolveVariables(property, defaultValue, env);
} else if (property instanceof Array || defaultValue instanceof Array) {
} else if (util.isArrayOfString(property) || util.isArrayOfString(defaultValue)) {
if (property) {
return this.resolveAndSplit(property, defaultValue, env);
} else if (property === undefined && defaultValue) {
@@ -4,8 +4,9 @@
* ------------------------------------------------------------------------------------------ */
'use strict';
import { CustomConfigurationProvider, Version, SourceFileConfigurationItem, WorkspaceBrowseConfiguration } from 'vscode-cpptools';
import * as vscode from 'vscode';
import { CustomConfigurationProvider, Version, SourceFileConfigurationItem, WorkspaceBrowseConfiguration } from 'vscode-cpptools';
import { CppSettings } from './settings';
/**
* An interface that is guaranteed to be backward compatible with version 0
@@ -135,6 +136,11 @@ export class CustomConfigurationProviderCollection {
}
public add(provider: CustomConfigurationProvider, version: Version): boolean {
if (new CppSettings().intelliSenseEngine === "Disabled") {
console.warn("IntelliSense is disabled. Provider will not be registered.");
return false;
}
let wrapper: CustomProviderWrapper = new CustomProviderWrapper(provider, version);
if (!wrapper.isValid) {
this.logProblems(provider, version);
+25 -14
View File
@@ -105,6 +105,10 @@ function onActivationEvent(): void {
}
function realActivation(): void {
if (new CppSettings().intelliSenseEngine === "Disabled") {
throw new Error("Do not activate the extension when IntelliSense is disabled.");
}
realActivationOccurred = true;
console.log("starting language server");
clients = new ClientCollection();
@@ -242,10 +246,10 @@ async function installVsix(vsixLocation: string, updateChannel: string): Promise
cmdFile = 'code.cmd';
}
const vsCodeExeDir: string = path.dirname(process.execPath);
return '"' + path.join(vsCodeExeDir, 'bin', cmdFile) + '"';
return path.join(vsCodeExeDir, 'bin', cmdFile);
} else if (platformInfo.platform === 'darwin') {
return '"' + path.join(process.execPath, '..', '..', '..', '..', '..',
'Resources', 'app', 'bin', 'code') + '"';
return path.join(process.execPath, '..', '..', '..', '..', '..',
'Resources', 'app', 'bin', 'code');
} else {
const vsCodeBinName: string = path.basename(process.execPath);
try {
@@ -262,8 +266,13 @@ async function installVsix(vsixLocation: string, updateChannel: string): Promise
// Install the VSIX
return new Promise<void>((resolve, reject) => {
let process: ChildProcess = spawn(vsCodeScriptPath, ['--install-extension', vsixLocation]);
if (process.pid === undefined) {
let process: ChildProcess;
try {
process = spawn(vsCodeScriptPath, ['--install-extension', vsixLocation]);
if (process.pid === undefined) {
throw new Error();
}
} catch (error) {
reject(new Error('Failed to launch VS Code script process for installation'));
return;
}
@@ -296,10 +305,6 @@ async function installVsix(vsixLocation: string, updateChannel: string): Promise
* @param updateChannel The user's updateChannel setting.
*/
async function checkAndApplyUpdate(updateChannel: string): Promise<void> {
// Helper fn to avoid code duplication
let logFailure: (error: Error) => void = (error: Error) => {
telemetry.logLanguageServerEvent('installVsix', { 'error': error.message, 'success': 'false' });
};
// Wrap in new Promise to allow tmp.file callback to successfully resolve/reject
// as tmp.file does not do anything with the callback functions return value
const p: Promise<void> = new Promise<void>((resolve, reject) => {
@@ -339,14 +344,15 @@ async function checkAndApplyUpdate(updateChannel: string): Promise<void> {
});
}, (error: Error) => {
// Handle getTargetBuildInfo rejection
logFailure(error);
reject(error);
});
});
await p.catch((error: Error) => {
// Handle .then following getTargetBuildInfo rejection
logFailure(error);
throw error;
if (error.message.indexOf('/') !== -1 || error.message.indexOf('\\') !== -1) {
error.message = "Potential PII hidden";
}
telemetry.logLanguageServerEvent('installVsix', { 'error': error.message, 'success': 'false' });
});
}
@@ -655,9 +661,14 @@ function handleCrashFileRead(err: NodeJS.ErrnoException, data: string): void {
endCrash = data.length - 1;
}
data = data.substr(startCrash, endCrash - startCrash);
if (data.length > 16384) {
data = data.substr(0, 16384) + "...";
if (data.length > 8192) { // The API has an 8k limit.
data = data.substr(0, 8189) + "...";
}
if (data.length < 2) {
return; // Don't send telemetry if there's no call stack.
}
// Get rid of the memory addresses (which breaks being able get a hit count for each crash call stack).
data = data.replace(/0x................ /g, "");
crashObject["CrashingThreadCallStack"] = data;
telemetry.logLanguageServerEvent("MacCrash", crashObject, null);
}
@@ -118,6 +118,7 @@ function copyBinaryDependencies(): void {
copy(miEngineRoot, DebugAdapterBinPath, "Microsoft.MIDebugEngine.dll");
copy(miEngineRoot, DebugAdapterBinPath, "Microsoft.MIDebugEngine.dll.mdb");
copy(miEngineRoot, DebugAdapterBinPath, "osxlaunchhelper.scpt");
copy(miEngineRoot, DebugAdapterBinPath, "Microsoft.VisualStudio.Debugger.Interop.15.0.dll");
copy(openDebugRoot, DebugAdapterBinPath, "Microsoft.VisualStudio.Debugger.Interop.10.0.dll");
copy(openDebugRoot, DebugAdapterBinPath, "Microsoft.VisualStudio.Debugger.Interop.11.0.dll");
@@ -129,6 +130,8 @@ function copyBinaryDependencies(): void {
copy(openDebugRoot, DebugAdapterBinPath, "OpenDebugAD7.exe.config");
copy(openDebugRoot, DebugAdapterBinPath, "OpenDebugAD7.exe.mdb");
copy(openDebugRoot, DebugAdapterBinPath, "Newtonsoft.Json.dll");
copy(openDebugRoot, DebugAdapterBinPath, "WindowsDebugLauncher.exe");
copy(openDebugRoot, DebugAdapterBinPath, "Microsoft.VisualStudio.Shared.VSCodeDebugProtocol.dll");
}
function copyMonoDependencies(): void {
+42 -1
View File
@@ -183,12 +183,20 @@ export function isNumber(input: any): input is number {
return typeof(input) === "number";
}
export function isBoolean(input: any): input is boolean {
return typeof(input) === "boolean";
}
export function isArray(input: any): input is any[] {
return input instanceof Array;
}
export function isOptionalString(input: any): input is string|undefined {
return input === undefined || isString(input);
}
export function isArrayOfString(input: any): input is string[] {
return (input instanceof Array) && input.every(item => isString(item));
return isArray(input) && input.every(item => isString(item));
}
export function isOptionalArrayOfString(input: any): input is string[]|undefined {
@@ -620,4 +628,37 @@ export function downloadFileToDestination(urlStr: string, destinationPath: strin
request.on('error', (error) => { reject(); });
request.end();
});
}
export function downloadFileToStr(urlStr: string, headers?: OutgoingHttpHeaders): Promise<any> {
return new Promise<string>((resolve, reject) => {
let parsedUrl: url.Url = url.parse(urlStr);
let request: ClientRequest = https.request({
host: parsedUrl.host,
path: parsedUrl.path,
agent: getHttpsProxyAgent(),
rejectUnauthorized: vscode.workspace.getConfiguration().get('http.proxyStrictSSL', true),
headers: headers
}, (response) => {
if (response.statusCode === 301 || response.statusCode === 302) { // If redirected
// Download from new location
let redirectUrl: string;
if (typeof response.headers.location === 'string') {
redirectUrl = response.headers.location;
} else {
redirectUrl = response.headers.location[0];
}
return resolve(downloadFileToStr(redirectUrl, headers));
}
if (response.statusCode !== 200) { // If request is not successful
return reject();
}
let downloadedData: string = '';
response.on('data', (data) => { downloadedData += data; });
response.on('error', (error) => { reject(); });
response.on('end', () => { resolve(downloadedData); });
});
request.on('error', (error) => { reject(); });
request.end();
});
}
+81 -39
View File
@@ -6,7 +6,6 @@
import { PackageVersion } from './packageVersion';
import * as util from './common';
import * as tmp from 'tmp';
import { PlatformInformation } from './platform';
import { OutgoingHttpHeaders } from 'http';
@@ -101,8 +100,10 @@ function vsixNameForPlatform(info: PlatformInformation): string {
case 'darwin': return 'cpptools-osx.vsix';
default: {
switch (platformInfo.architecture) {
case 'x86': return 'cpptools-linux32.vsix';
case 'x86_64': return 'cpptools-linux.vsix';
case 'x86':
case 'i386':
case 'i686': return 'cpptools-linux32.vsix';
}
}
}
@@ -129,7 +130,21 @@ export interface BuildInfo {
*/
export async function getTargetBuildInfo(updateChannel: string): Promise<BuildInfo> {
return getReleaseJson()
.then(builds => getTargetBuild(builds, updateChannel))
.then(builds => {
if (!builds || builds.length === 0) {
return undefined;
}
// If the user version is greater than or incomparable to the latest available verion then there is no need to update
// Allows testing pre-releases without accidentally downgrading to the latest version
const userVersion: PackageVersion = new PackageVersion(util.packageJson.version);
const latestVersion: PackageVersion = new PackageVersion(builds[0].name);
if (userVersion.isGreaterThan(latestVersion) || (userVersion.suffix && userVersion.suffix !== 'insiders')) {
return undefined;
}
return getTargetBuild(builds, userVersion, updateChannel);
})
.then(async build => {
if (!build) {
return Promise.resolve(undefined);
@@ -148,10 +163,11 @@ export async function getTargetBuildInfo(updateChannel: string): Promise<BuildIn
/**
* Determines whether there exists a Build in the given Build[] that should be installed.
* @param builds The GitHub release list parsed as an array of Builds.
* @param userVersion The verion of the extension that the user is running.
* @param updateChannel The user's updateChannel setting.
* @return The Build if the user should update to it, otherwise undefined.
*/
function getTargetBuild(builds: Build[], updateChannel: string): Build {
function getTargetBuild(builds: Build[], userVersion: PackageVersion, updateChannel: string): Build {
// Get predicates to determine the build to install, if any
let needsUpdate: (installed: PackageVersion, target: PackageVersion) => boolean;
let useBuild: (build: Build) => boolean;
@@ -172,52 +188,78 @@ function getTargetBuild(builds: Build[], updateChannel: string): Build {
}
// Check current version against target's version to determine if the installation should happen
const userVersion: PackageVersion = new PackageVersion(util.packageJson.version);
const targetVersion: PackageVersion = new PackageVersion(targetBuild.name);
return needsUpdate(userVersion, targetVersion) ? targetBuild : undefined;
}
interface Rate {
remaining: number;
}
interface RateLimit {
rate: Rate;
}
function isRate(input: any): input is Rate {
return input && input.remaining && util.isNumber(input.remaining);
}
function isRateLimit(input: any): input is RateLimit {
return input && isRate(input.rate);
}
async function getRateLimit(): Promise<RateLimit> {
const header: OutgoingHttpHeaders = { 'User-Agent': 'vscode-cpptools' };
const data: string = await util.downloadFileToStr('https://api.github.com/rate_limit', header)
.catch(() => { throw new Error('Failed to download rate limit JSON'); });
let rateLimit: any;
try {
rateLimit = JSON.parse(data);
} catch (error) {
throw new Error('Failed to parse rate limit JSON');
}
if (isRateLimit(rateLimit)) {
return Promise.resolve(rateLimit);
} else {
throw new Error('Rate limit JSON is not of type RateLimit');
}
}
async function rateLimitExceeded(): Promise<boolean> {
const rateLimit: RateLimit = await getRateLimit();
return rateLimit.rate.remaining <= 0;
}
/**
* Download and parse the release list JSON from the GitHub API into a Build[].
* @return Information about the released builds of the C/C++ extension.
*/
async function getReleaseJson(): Promise<Build[]> {
return new Promise<Build[]>((resolve, reject) => {
// Create temp file to hold JSON
tmp.file(async (err, releaseJsonPath, fd, cleanupCallback) => {
if (err) {
reject(new Error('Failed to create release json file'));
return;
}
if (await rateLimitExceeded()) {
throw new Error('Failed to stay within GitHub API rate limit');
}
try {
// Download release JSON
const releaseUrl: string = 'https://api.github.com/repos/Microsoft/vscode-cpptools/releases';
const header: OutgoingHttpHeaders = { 'User-Agent': 'vscode-cpptools' };
await util.downloadFileToDestination(releaseUrl, releaseJsonPath, header)
.catch(() => { throw new Error('Failed to download release JSON'); });
// Download release JSON
const releaseUrl: string = 'https://api.github.com/repos/Microsoft/vscode-cpptools/releases';
const header: OutgoingHttpHeaders = { 'User-Agent': 'vscode-cpptools' };
// Read the release JSON file
const fileContent: string = await util.readFileText(releaseJsonPath)
.catch(() => { throw new Error('Failed to read release JSON file'); } );
const data: string = await util.downloadFileToStr(releaseUrl, header)
.catch(() => { throw new Error('Failed to download release JSON'); });
// Parse the file
let releaseJson: any;
try {
releaseJson = JSON.parse(fileContent);
} catch (error) {
throw new Error('Failed to parse release JSON');
}
// Parse the file
let releaseJson: any;
try {
releaseJson = JSON.parse(data);
} catch (error) {
throw new Error('Failed to parse release JSON');
}
// Type check
if (isArrayOfBuilds(releaseJson)) {
resolve(releaseJson);
} else {
reject(releaseJson);
}
} catch (error) {
reject(error);
}
});
});
// Type check
if (isArrayOfBuilds(releaseJson)) {
return releaseJson;
} else {
throw new Error('Release JSON is not of type Build[]');
}
}
+1 -12
View File
@@ -16,7 +16,7 @@ import * as vscode from 'vscode';
import { CppToolsApi, CppToolsExtension } from 'vscode-cpptools';
import { getTemporaryCommandRegistrarInstance, initializeTemporaryCommandRegistrar } from './commands';
import { PlatformInformation } from './platform';
import { PackageManager, PackageManagerError, PackageManagerWebResponseError, IPackage } from './packageManager';
import { PackageManager, PackageManagerError, IPackage } from './packageManager';
import { PersistentState } from './LanguageServer/persistentState';
import { getInstallationInformation, InstallationInformation, setInstallationStage } from './installationInformation';
import { Logger, getOutputChannelLogger, showOutputChannel } from './logger';
@@ -192,17 +192,6 @@ function handleError(error: any): void {
let errorMessage: string;
if (error instanceof PackageManagerError) {
// If this is a WebResponse error, log the IP that it resolved from the package URL
if (error instanceof PackageManagerWebResponseError) {
let webRequestPackageError: PackageManagerWebResponseError = error;
if (webRequestPackageError.socket) {
let address: any = webRequestPackageError.socket.address();
if (address) {
installationInformation.telemetryProperties['error.targetIP'] = address.address + ':' + address.port;
}
}
}
let packageError: PackageManagerError = error;
installationInformation.telemetryProperties['error.methodName'] = packageError.methodName;
+6
View File
@@ -26,7 +26,13 @@ export class PackageVersion {
if (firstDigitOffset !== -1) {
this.suffix = tokens[3].substring(0, firstDigitOffset);
this.suffixVersion = parseInt(tokens[3].substring(firstDigitOffset));
} else {
this.suffix = tokens[3];
this.suffixVersion = 1;
}
} else {
this.suffix = undefined;
this.suffixVersion = 0;
}
if (this.major === undefined || this.minor === undefined || this.patch === undefined) {
@@ -5,11 +5,23 @@
* 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));
}
require(path.resolve(__dirname, '../node_modules/vscode/bin/test'));
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);
+12 -10
View File
@@ -2,27 +2,29 @@
The **launch.json** file is used to configure the debugger in Visual Studio Code.
Visual Studio Code generates a **launch.json** with almost all of the required information. To get started
Visual Studio Code generates a **launch.json** with almost all of the required information. To get started
debugging you need to fill in the `program` field with the path to the executable you plan to debug. This must be specified for
both the launch and attach (if you plan to attach to a running instance at any point) configurations.
The generated file contains two sections. One that configures debugging for launch and a second that configures debugging for attach.
The generated file contains two sections. One that configures debugging for launch and a second that configures debugging for attach.
# Configure VS Code's debugging behavior
Set or change the following options to control VS Code's behavior during debugging
Set or change the following options to control VS Code's behavior during debugging:
* #### `program` (required)
Specifies the full path to executable the debugger will launch or attach to.
* #### `symbolSearchPath`
Tells the _Visual Studio Windows Debugger_ what paths to search for symbol (.pdb) files. Separate multiple paths with a semicolon. Example `"C:\\Symbols;C:\\SymbolDir2"`
Tells the _Visual Studio Windows Debugger_ what paths to search for symbol (.pdb) files. Separate multiple paths with a semicolon. Example `"C:\\Symbols;C:\\SymbolDir2"`.
* #### `additionalSOLibSearchPath`
Tells _GDB or LLDB_ what paths to search for .so files. Separate multiple paths with a semicolon. Example: `"/Users/user/dir1;/Users/user/dir2"`.
* #### `externalConsole`
If set to `true`, launches an external console for the application. If `false`, no console is launched and VS Code's debugging console is used. Note this option is ignored in some cases for technical reasons.
Windows: When set to true, it will spawn an external console. When set to false, it will use VS Code's integratedTerminal.
Linux: When set to true, it will notify VS Code to spawn an external console. When set to false, it will use VS Code's integratedTerminal.
macOS: When set to true, it will spawn an external console through `lldb-mi`. When set to false, the output can be seen in VS Code's debugConsole. Due to limitations within `lldb-mi`, integratedTerminal support is not available.
* #### `logging`
Optional flags to determine what types of messages should be logged to the Debug Console.
@@ -94,10 +96,10 @@ The following options enable you to modify the state of the target application w
## Customizing GDB or LLDB
You can change the behavior of GDB or LLDB by setting the following options.
You can change the behavior of GDB or LLDB by setting the following options:
* #### `MIMode`
Indicates the debugger that VS Code will connect to. Must be set to `gdb` or `lldb`. This is pre-configured on a per-operating system basis and can be changed as needed.
Indicates the debugger that VS Code will connect to. Must be set to `gdb` or `lldb`. This is pre-configured on a per-operating system basis and can be changed as needed.
* #### `miDebuggerPath`
The path to the debugger (such as gdb). When only the executable is specified, it will search the operating system's PATH variable for a debugger (GDB on Linux and Windows, LLDB on OS X).
@@ -152,7 +154,7 @@ The C/C++ extension enables debugging dump files on Windows and core dump files
If you want to debug a Windows dump file, set this to the path to the dump file to start debugging in the `launch` configuration.
* #### `coreDumpPath`
Full path to a core dump file to debug for the specified program. Set this to the path to the core dump file to start debugging in the `launch` configuration.
Full path to a core dump file to debug for the specified program. Set this to the path to the core dump file to start debugging in the `launch` configuration.
_Note: core dump debugging is not supported with MinGw._
## Remote debugging or debugging with a local debugger server
@@ -175,7 +177,7 @@ _Note: core dump debugging is not supported with MinGw._
## Additional properties
* #### `processId`
Defaults to `${command.pickProcess}` which will display a list of available processes the debugger can attach to. It is recommended to leave this default, but the property can be explicitly set to a specific process ID for the debugger to attach to.
Defaults to `${command.pickProcess}` which will display a list of available processes the debugger can attach to. It is recommended to leave this default, but the property can be explicitly set to a specific process ID for the debugger to attach to.
* #### `request`
Indicates whether the configuration section is intended to `launch` the program or `attach` to an already running instance.
@@ -184,7 +186,7 @@ _Note: core dump debugging is not supported with MinGw._
`Deprecated` This option is no longer needed as the target architecture is automatically detected.
* #### `type`
Indicates the underlying debugger being used. Must be `cppvsdbg` when using the Visual Studio Windows debugger, and `cppdbg` when using GDB or LLDB. This is automatically set to the correct value when the
Indicates the underlying debugger being used. Must be `cppvsdbg` when using the Visual Studio Windows debugger, and `cppdbg` when using GDB or LLDB. This is automatically set to the correct value when the
**launch.json** file is created.
* #### `sourceFileMap`