Compare commits

...
Author SHA1 Message Date
Sean McManus a6f012a251 Merge pull request #5789 from microsoft/seanmcm/0_29_0_release
0_29_0 release
2020-07-15 17:29:58 -07:00
Sean McManus 7cfe3606ff Merge. 2020-07-15 15:54:09 -07:00
Elaheh Rashedi 1192d5b38e changelog Version 0.29.0: July 15, 2020 (#5788)
* changelog Version 0.29.0: July 15, 2020
2020-07-15 15:45:04 -07:00
Sean McManus 8f2016e8ee Change GitHub repo license from .txt to .md. (#5786) 2020-07-15 12:55:05 -07:00
Colen Garoutte-Carson faa6d9e28e Add missing semantic token old scope mappings (#5771) 2020-07-13 13:02:23 -07:00
Colen Garoutte-Carson e17ff5e93e Ensure semantic tokens are re-requested if changed without the file having changed (#5755) 2020-07-09 17:28:19 -07:00
Bob Brown 471f9b3701 Fix settings telemetry to handle more deeply nested settings (#5749) 2020-07-08 13:00:31 -07:00
Colen Garoutte-Carson 196510aa19 Update Changelog. Format package.json (#5743) 2020-07-07 19:16:55 -07:00
Sean McManus af8ea7c0a3 Add configuration provider input info to log diagnostics (#5719)
* Add custom config logging.
2020-07-07 16:23:00 -07:00
Michelle Matias ed15700734 Add settings to optionally simplify structured comments (Doxygen) (#5730) 2020-07-07 15:04:28 -07:00
csigsandDevDiv Build Lab - Dev14 977f1f6342 Localization - Translated Strings (#5725)
Co-authored-by: DevDiv Build Lab - Dev14 <[email protected]>
2020-07-07 10:26:20 -07:00
Elaheh Rashedi 45a9907832 add ${default} to the end of includePath (#5413) 2020-07-06 13:12:58 -07:00
Sean McManus a9d86c8f62 Merge pull request #5705 from microsoft/seanmcm/screenSizeCherryPick
Screen size cherry pick
2020-07-02 11:25:37 -07:00
Sean McManus 7673fd0ec4 Merge branch 'master' into seanmcm/screenSizeCherryPick 2020-07-02 11:14:38 -07:00
csigsandDevDiv Build Lab - Dev14 02a7c5c45a Localization - Translated Strings (#5716)
Co-authored-by: DevDiv Build Lab - Dev14 <[email protected]>
2020-07-02 10:51:43 -07:00
Colen Garoutte-Carson f7165bae4f Switch to Semantic Tokens API (#5401) 2020-07-01 14:48:26 -07:00
Sean McManus d87cc30854 Screen size follow up. 2020-06-26 11:00:10 -07:00
nukoyluoglu 32b997d3d8 ignore 'screen size is bogus' error; fixes microsoft/vscode/issues/100563 (and microsoft/vscode/issues/75932) (#5669)
* ignore 'screen size is bogus' error; fixes microsoft/vscode#75932; imitiates similar fix for a different extension microsoft/vscode-node-debug/commit/5298920
2020-06-26 10:56:30 -07:00
Sean McManus 832165fc9f Fix compileCommand updating. (#5688) 2020-06-25 14:33:53 -07:00
Bob Brown 2efdb847a9 Generate a new telemetry key for comment continuation patterns (#5691) 2020-06-24 17:13:26 -07:00
Sean McManus d8cdeee035 Update changelog for 0.29.0-insiders. (#5684)
* Update changelog for 0.29.0-insiders.
2020-06-23 18:50:54 -07:00
nukoyluoglu 9db05b6945 ignore 'screen size is bogus' error; fixes microsoft/vscode/issues/100563 (and microsoft/vscode/issues/75932) (#5669)
* ignore 'screen size is bogus' error; fixes microsoft/vscode#75932; imitiates similar fix for a different extension microsoft/vscode-node-debug/commit/5298920
2020-06-23 14:59:29 -07:00
Sean McManus d80e04ec66 updateChannel fixes. (#5465)
Fixes:
- It doesn't check for a downgrade to non-insiders on startup, only when the setting changes.
- There was a bug with the timer code that checks for a new insiders every hour.
- It wasn't bypassing the autoUpdate check when the user manually switches the updateChannel.
2020-06-22 16:31:25 -07:00
Michelle Matias 929d548419 Doxygen strings for localization (#5658) 2020-06-22 13:27:46 -07:00
Michelle Matias 64b949583d Update vscode-cpptools to 4.0.1 (#5623) 2020-06-22 13:10:09 -07:00
Andrew Wang de4a6babef [cppvsdbg] Add logging ThreadExit and ProcessExit (#5652)
* [cppvsdbg] Add logging ThreadExit and ProcessExit

This PR adds two log flags for ThreadExit and ProcessExit events.
This will remove the "The thread 10564 has exited with code 0 (0x0)."
and "The program '[24104] ConsoleApplication1.exe' has exited with code
0 (0x0)." messages.
2020-06-18 17:55:30 -07:00
Colen Garoutte-Carson 37dfc2dda4 Additional localized strings for hover and auto-complete (#5651) 2020-06-17 14:19:32 -07:00
Andrew WangandSean McManus b7cd0d9d7d Print launch.json to C/C++ Output Log (#5644)
* Print launch.json to C/C++ Output Log

This PR adds a check in resolveDebugConfiguration so that if a user adds
logging.engineLogging = true in the launch.json, we will output the
resovled json in the C/C++ Output.

* Use GitHub bug notation and add title for log

Co-authored-by: Sean McManus <[email protected]>
2020-06-17 11:17:57 -07:00
bugengine eedadd9ba0 Added system to store and query properties from the active C/C++ configuration (#5453)
* Added system to store and query properties from the active C/C++ configuration
Co-authored-by: yngwe@farnsworth <yngwe@farnsworth>
Co-authored-by: yngwe@bender <yngwe@bender>
2020-06-15 14:22:32 -07:00
Michelle Matias b33117997a Update cpptools-api to 4.0.1 in release branch for 0.28.3 (#5624) 2020-06-08 15:54:31 -07:00
Sean McManus 734ce74be2 Merge pull request #5593 from microsoft/seanmcm/0_28_2_release
0_28_2 release
2020-06-02 12:17:27 -07:00
Sean McManus 5262a75d87 Merge. 2020-06-01 15:56:51 -07:00
Sean McManus 214a22911d Update changelog. (#5539) 2020-05-20 12:59:54 -07:00
Sean McManus c8a36e091e Merge pull request #5530 from microsoft/seanmcm/0_28_1_release
0_28_1 release
2020-05-19 17:49:21 -07:00
Sean McManus 6c95236356 Merge. 2020-05-19 17:26:27 -07:00
Sean McManus 6bdf5f2495 Merge pull request #5475 from microsoft/seanmcm/0_28_0_release2
0_28_0_release2
2020-05-12 13:57:01 -07:00
Sean McManus 9b559d0a18 Merge. 2020-05-12 13:48:23 -07:00
Sean McManus 255ecac866 Merge pull request #5438 from microsoft/seanmcm/0_28_0_release
Merge for 0_28_0 release
2020-05-07 19:53:56 -07:00
Sean McManus f97729a8cb Merge. 2020-05-07 19:36:43 -07:00
Sean McManus a88ca881ad Disable Insiders updates for unsupported cases. (#5371)
* Disable Insiders updates for unsupported cases.
2020-04-28 14:41:01 -07:00
Sean McManus 9ea6727743 Merge pull request #5218 from microsoft/seanmcm/0_27_0_release_merge2
Seanmcm/0 27 0 release merge2
2020-03-27 18:26:11 -07:00
Sean McManus bd1f66b411 Merge branch 'release' into seanmcm/0_27_0_release_merge2 2020-03-27 18:14:51 -07:00
Sean McManus c5be0b55c7 Merge pull request #5205 from microsoft/seanmcm/0_27_0_release_merge
Seanmcm/0 27 0 release merge
2020-03-26 14:07:45 -07:00
Sean McManus e8080fc86f Merge branch 'seanmcm/0_27_0_release_merge' of https://github.com/Microsoft/vscode-cpptools into seanmcm/0_27_0_release_merge 2020-03-26 13:45:08 -07:00
Sean McManus 579e4db42b Merge. 2020-03-26 13:44:36 -07:00
Sean McManus 16bc8f6e5d Merge branch 'release' into seanmcm/0_27_0_release_merge 2020-03-26 13:16:05 -07:00
Sean McManus 6c4080832b Seanmcm/0 27 0 insider4 changelog2 (#5172)
* Update changelog.
2020-03-23 14:48:36 -07:00
Sean McManus 882b62c25b Fix package.json activation events. (#5173) 2020-03-23 14:40:37 -07:00
Sean McManusandAndrew Wang 5878686eac Add cleanUnusedBinaries stage (#5170)
Our offline installer will include two versions of lldb.
./debugAdapters/lldb is lldb-mi 3.8 and is used for High-Sierra and older
./debugAdapters/lldb-mi is lldb-mi 10.x and is used for Mojave and
higher.

Co-authored-by: Andrew Wang <[email protected]>
2020-03-23 14:39:20 -07:00
Sean McManus f87944a72a Merge pull request #5158 from microsoft/seanmcm/0_27_0_insiders4_merge
Seanmcm/0 27 0 insiders4 merge
2020-03-20 17:26:01 -07:00
Sean McManus 8e0a0792b8 Merge pull request #5106 from microsoft/seanmcm/0_27_0_merge
0_27_0 merge to release
2020-03-12 14:57:51 -07:00
Sean McManus 6712181c45 Merge. 2020-03-12 14:11:19 -07:00
Sean McManus 940a720501 Update version. 2020-03-12 14:09:25 -07:00
Sean McManus 211e497a89 Merge pull request #4876 from microsoft/seanmcm/0_26_3_release
Seanmcm/0 26 3 release
2020-01-21 17:46:50 -08:00
Sean McManus f04ee43425 Merge branch 'release' into seanmcm/0_26_3_release 2020-01-21 16:52:34 -08:00
Michelle Matias 8a4bfa2183 Merge pull request #4689 from microsoft/mimatias/master-26-2
Merge for 0.26.2
2019-12-02 14:57:18 -08:00
Bob Brown c6af5ce8b5 Merge pull request #4601 from microsoft/coleng/merge_release
Merge master into release, up to 0.26.2-insiders
2019-11-14 09:28:48 -08:00
Colen Garoutte-Carson 014f30e942 Merge commit 'f0c961aa734df9fb2ca7d49649cd06b1f4e07a11' into release 2019-11-13 12:37:31 -08:00
Sean McManus d1c9d4d298 Merge pull request #4500 from microsoft/seanmcm/0_26_1_release2
Fix a missed https-proxy-agent case. (#4497)
2019-10-25 19:01:24 -07:00
Sean McManus 09ccd3af42 Merge pull request #4495 from microsoft/seanmcm/0_26_1_release
0.26.1 release
2019-10-25 16:18:54 -07:00
Sean McManus 375b64b4f8 Merge branch 'release' into seanmcm/0_26_1_release 2019-10-25 15:55:21 -07:00
Sean McManus 783ef7290a Merge for 0.26.0. 2019-10-15 16:42:02 -07:00
Sean McManus 7f1efd4b84 Merge. 2019-10-15 16:34:34 -07:00
Sean McManus d68f76b51e Merge pull request #4161 from microsoft/seanmcm/0_25_1_release
Seanmcm/0 25 1 release
2019-08-28 15:27:34 -07:00
Sean McManus 6ba1262347 Merge for 0.25.1 release. 2019-08-28 15:24:08 -07:00
Sean McManus 490fc7504f Merge pull request #4115 from microsoft/seanmcm/0_25_0_release
Seanmcm/0 25 0 release
2019-08-20 18:59:53 -07:00
Sean McManus f2959f4d7a Merge for 0.25.0 release. 2019-08-20 18:05:52 -07:00
Sean McManus fa4d7b22c1 Update package.json version. (#3948) 2019-07-19 12:33:53 -07:00
Colen Garoutte-Carson 3cb7f7e61f Merge pull request #3946 from microsoft/coleng/CherryPickAgain
Cherry pick into release for 0.24.1
2019-07-18 18:54:51 -07:00
Colen Garoutte-Carson 779f2ce2b5 Fix issue with didClose received after didOpen (#3844) 2019-07-18 18:42:51 -07:00
Colen Garoutte-Carson 0c4c83e5bd Improve scope names used by Enhanced Colorization (#3896) 2019-07-18 18:42:46 -07:00
Colen Garoutte-Carson a369ede8d9 Update changelog for 0.24.1 release (#3945) 2019-07-18 18:42:40 -07:00
Colen Garoutte-Carson 36ce8f885f Revert "cherry pick fixes for 0.24.1 (#3943)"
This reverts commit 347794b0c7.
2019-07-18 18:37:18 -07:00
Colen Garoutte-Carson 347794b0c7 cherry pick fixes for 0.24.1 (#3943) 2019-07-18 17:28:00 -07:00
Sean McManus 3ed087134c Merge pull request #3869 from microsoft/seanmcm/0_24_0_release
Seanmcm/0 24 0 release
2019-07-02 19:04:05 -07:00
Sean McManus 902355e021 Merge branch 'release' into seanmcm/0_24_0_release 2019-07-02 18:36:53 -07:00
Sean McManus 32e98912df Change version 2019-07-02 18:33:53 -07:00
Sean McManus 084a8e708c Merge pull request #3630 from microsoft/0_23_1_release
0 23 1 release
2019-05-10 15:57:24 -07:00
Sean McManus 045d50bb90 Merge branch 'release' into 0_23_1_release 2019-05-10 15:17:20 -07:00
Sean McManus 68eda19665 Update version. 2019-05-10 15:14:16 -07:00
Sean McManus 39ab866a10 Merge pull request #3595 from microsoft/seanmcm/0_23_0_release
Seanmcm/0 23 0 release
2019-05-06 18:47:28 -07:00
Sean McManus d4cdfe6994 Merge branch 'release' into seanmcm/0_23_0_release 2019-05-06 18:42:11 -07:00
Sean McManus c18592b5a3 Merge pull request #3332 from Microsoft/0_22_1_release
0 22 1 release
2019-03-20 19:06:23 -07:00
Sean McManus fee924b374 Merge branch 'release' into 0_22_1_release 2019-03-20 18:46:03 -07:00
Sean McManus 6724e13c63 Update for 0.22.1. 2019-03-20 18:44:44 -07:00
Sean McManus 717de54b06 Merge pull request #3321 from Microsoft/0_22_0_release
0 22 0 release
2019-03-19 16:52:44 -07:00
Sean McManus 51cd214f1e Merge branch 'release' into 0_22_0_release 2019-03-19 16:40:15 -07:00
Sean McManus da277c8593 Seanmcm/0 21 0 release2 (#3070)
* Update yauzl version and changelog date. (#3069)
2019-01-22 19:17:42 -08:00
Bob Brown b3cce807bb Merge pull request #3068 from Microsoft/seanmcm/0_21_0_release 2019-01-22 14:43:34 -08:00
Sean McManus a533eb9a43 Merge branch 'release' into seanmcm/0_21_0_release 2019-01-22 14:32:57 -08:00
Sean McManus 9702eae953 Update package.json. 2019-01-22 14:32:04 -08:00
Sean McManus a4b51997ff Update version. 2019-01-22 14:30:32 -08:00
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 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
Sean McManus 0cf237c839 Merge pull request #2725 from Microsoft/master
2nd merge for 0.20.0
2018-10-25 16:46:17 -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 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
76 changed files with 1049 additions and 1063 deletions
+51
View File
@@ -1,5 +1,56 @@
# C/C++ for Visual Studio Code Change Log
## Version 0.29.0: July 15, 2020
### New Features
* Add Doxygen comment support (to tooltip display of hover, completion, and signature help). [#658](https://github.com/microsoft/vscode-cpptools/issues/658)
* The way comments are formatted is controlled by the C_Cpp.simplifyStructuredComments setting."
* Auto-convert `.` to `->` when the type is a pointer. [#862](https://github.com/microsoft/vscode-cpptools/issues/862)
* Switch to using the VS Code Semantic Tokens API for semantic colorization (works with remoting). [PR #5401](https://github.com/microsoft/vscode-cpptools/pull/5401), [#3932](https://github.com/microsoft/vscode-cpptools/issues/3932), [#3933](https://github.com/microsoft/vscode-cpptools/issues/3933), [#3942](https://github.com/microsoft/vscode-cpptools/issues/3942)
* Add support for LogMessage Breakpoints for debug type `cppdbg`. [MIEngine#1013](https://github.com/microsoft/MIEngine/pull/1013)
### Enhancements
* Automatically add `"${default}"` to the default `includePath` in `c_cpp_properties.json` if `C_Cpp.default.includePath` is set. [#3733](https://github.com/microsoft/vscode-cpptools/issues/3733)
* Add configuration provider logging to `C/C++: Log Diagnostics`. [#4826](https://github.com/microsoft/vscode-cpptools/issues/4826)
* Add support for the Debug Welcome Panel. [#4837](https://github.com/microsoft/vscode-cpptools/issues/4837)
* Update to clang-format 10. [#5194](https://github.com/microsoft/vscode-cpptools/issues/5194)
* Add system to store and query properties from the active C/C++ configuration.
* bugengine (@bugengine) [PR #5453](https://github.com/microsoft/vscode-cpptools/pull/5453)
* Add `quoteArgs` to `launch.json` schema. [PR #5639](https://github.com/microsoft/vscode-cpptools/pull/5639)
* Add logs for a resolved `launch.json` if "engineLogging" is enabled. [PR #5644](https://github.com/microsoft/vscode-cpptools/pull/5644)
* Add threadExit and processExit logging flags for 'cppvsdbg'. [PR #5652](https://github.com/microsoft/vscode-cpptools/pull/5652)
### Bug Fixes
* Add localization support for autocomplete and hover text. [#5370](https://github.com/microsoft/vscode-cpptools/issues/5370)
* Some `updateChannel` fixes. [PR #5465](https://github.com/microsoft/vscode-cpptools/pull/5465)
* Fix wrong language standard used with compile commands. [#5498](https://github.com/microsoft/vscode-cpptools/issues/5498)
* Fix issue with defines and includes not being handled correctly in `compilerPath` or `compilerArgs`. [#5512](https://github.com/microsoft/vscode-cpptools/issues/5512)
* Add gcc/gcc-10 compiler detection. [#5540](https://github.com/microsoft/vscode-cpptools/issues/5540)
* Fix `--target` compiler arg getting overridden. [#5557](https://github.com/microsoft/vscode-cpptools/issues/5557)
* Matt Schulte (@schultetwin1)
* Fix Find All References and Rename when multiple references are on the same line. [#5568](https://github.com/microsoft/vscode-cpptools/issues/5568)
* Fix IntelliSense process crashes. [#5584](https://github.com/microsoft/vscode-cpptools/issues/5584), [#5629](https://github.com/microsoft/vscode-cpptools/issues/5629)
* Fix an add/remove workspace folder crash. [#5591](https://github.com/microsoft/vscode-cpptools/issues/5591)
* Fix default build tasks failing on Windows if the compiler isn't on the PATH. [#5604](https://github.com/microsoft/vscode-cpptools/issues/5604)
* Fix updating `files.associations` and .C files being associated with C instead of C++. [#5618](https://github.com/microsoft/vscode-cpptools/issues/5618)
* Fix IntelliSense malfunction when RxCpp is used. [#5619](https://github.com/microsoft/vscode-cpptools/issues/5619)
* Ignore "screen size is bogus" error when debugging. [PR #5669](https://github.com/microsoft/vscode-cpptools/pull/5669)
* nukoyluoglu (@nukoyluoglu)
* Fix `compile_commands.json` sometimes not updating. [#5687](https://github.com/microsoft/vscode-cpptools/issues/5687)
* Add msys2 clang compilers to the compiler search list (previously only gcc was handled). [#5697](https://github.com/microsoft/vscode-cpptools/issues/5697)
* Fix extension getting stuck when an "@" response file that doesn't end with ".rsp" is used in `compilerArgs`. [#5731](https://github.com/microsoft/vscode-cpptools/issues/5731)
* Fix forced includes not handled properly when parsed as compiler args. [#5738](https://github.com/microsoft/vscode-cpptools/issues/5738)
* Fix potential thread deadlock in cpptools.
* Fix copying a long value from debug watch results in pasting partial value [#5470](https://github.com/microsoft/vscode-cpptools/issues/5470)
* [PR MIEngine#1009](https://github.com/microsoft/MIEngine/pull/1009)
* Fix Modifying conditional breakpoints [#2297](https://github.com/microsoft/vscode-cpptools/issues/2297)
* [PR MIEngine#1010](https://github.com/microsoft/MIEngine/pull/1010)
* Fix find <miDebuggerPath>.exe in Windows path [#3076](https://github.com/microsoft/vscode-cpptools/issues/3076)
* [PR MIEngine#1001](https://github.com/microsoft/MIEngine/pull/1001)
## Version 0.28.3: June 9, 2020
### Enhancements
* Update version of vscode-cpptools API to 4.0.1 [PR #5624](https://github.com/microsoft/vscode-cpptools/pull/5624)
## Version 0.28.2: June 1, 2020
### Regression Bug Fixes
* Fix string arrays in `env` not being joined properly. [#5509](https://github.com/microsoft/vscode-cpptools/issues/5509)
+28 -13
View File
@@ -444,36 +444,49 @@ gulp.task("generate-native-strings", (done) => {
let stringIndex = 1;
for (let property in stringTable) {
let stringName = property;
let stringValue = stringTable[property];
let hintValue;
if (typeof stringValue !== "string")
{
hintValue = stringValue.hint;
stringValue = stringValue.text;
}
// Add to native enum
nativeEnumContent += ` ${property} = ${stringIndex},\n`;
// Add to native string table
nativeStringTableContent += ` ${JSON.stringify(stringTable[property])},\n`;
nativeStringTableContent += ` ${JSON.stringify(stringValue)},\n`;
// Add to TypeScript switch
// Skip empty strings, which can be used to prevent enum/index reordering
if (stringTable[property] != "") {
// It's possible that a translation may skip "{#}" entries, so check for up to 20 of them.
if (stringValue != "") {
// It's possible that a translation may skip "{#}" entries, so check for up to 50 of them.
let numArgs = 0;
for (let i = 0; i < 20; i++) {
for (let i = 0; i < 50; i++) {
if (stringValue.includes(`{${i}}`)) {
numArgs = i + 1;
}
}
typeScriptSwitchContent += ` case ${stringIndex}:\n`;
if (numArgs != 0) {
typeScriptSwitchContent += ` if (!stringArgs) {\n`;
typeScriptSwitchContent += ` break;\n`;
typeScriptSwitchContent += ` }\n`;
typeScriptSwitchContent += ` if (stringArgs) {\n`;
if (hintValue) {
typeScriptSwitchContent += ` message = localize({ key: ${JSON.stringify(property)}, comment: [${JSON.stringify(hintValue)}] }, ${JSON.stringify(stringValue)}`;
} else {
typeScriptSwitchContent += ` message = localize(${JSON.stringify(property)}, ${JSON.stringify(stringValue)}`;
}
for (let i = 0; i < numArgs; i++) {
typeScriptSwitchContent += `, stringArgs[${i}]`;
}
typeScriptSwitchContent += `);\n break;\n }\n`;
}
typeScriptSwitchContent += ` message = localize(${JSON.stringify(property)}, ${JSON.stringify(stringTable[property])}`;
for (let i = 0; i < numArgs; i++) {
typeScriptSwitchContent += `, stringArgs[${i}]`;
if (hintValue) {
typeScriptSwitchContent += ` message = localize({ key: ${JSON.stringify(property)}, comment: [${JSON.stringify(hintValue)}] }, ${JSON.stringify(stringValue)}`;
} else {
typeScriptSwitchContent += ` message = localize(${JSON.stringify(property)}, ${JSON.stringify(stringValue)}`;
}
typeScriptSwitchContent += ");\n break;\n";
typeScriptSwitchContent += `);\n break;\n`;
}
++stringIndex;
};
@@ -492,6 +505,8 @@ import * as nls from 'vscode-nls';
nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })();
const localize: nls.LocalizeFunc = nls.loadMessageBundle();
export const localizedStringCount: number = ${stringIndex};
export function lookupString(stringId: number, stringArgs?: string[]): string {
let message: string = "";
switch (stringId) {
@@ -518,7 +533,7 @@ ${typeScriptSwitchContent}
#pragma once
enum class localized_string_id
enum class localized_string_id : unsigned int
{
blank = 0,
${nativeEnumContent}};
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "如果为 true,则仅处理以标头形式直接或间接包含的文件;如果为 false,则处理指定的包含路径下的所有文件。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "所生成的符号数据库的路径。如果指定了相对路径,则它将相对于工作区的默认存储位置。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "标记分析器在搜索包含的标头时要使用的路径列表。默认情况下,按递归方式搜索这些路径。指定 \"*\" 可指示非递归搜索。例如: \"/usr/include\" 将搜索所有子目录,而 \"/usr/include/*\" 将不搜索所有子目录。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "可通过命令 ${cpptools:activeConfigCustomVariable} 查询要用于 launch.json 或 tasks.json 的输入变量的自定义变量。",
"c_cpp_properties.schema.json.definitions.env": "可通过 ${变量} 或 ${env:变量} 语法在此文件中的任意位置重用的自定义变量。",
"c_cpp_properties.schema.json.definitions.version": "配置文件的版本。此属性由扩展托管。请勿更改它。",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "控制扩展是否报告在 c_cpp_properties.json 中检测到的错误。"
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "未指定 \"browse.limitSymbolsToIncludedHeaders\" 时或将其设置为 \"${default}\" 时要在配置中使用的值。",
"c_cpp.configuration.default.systemIncludePath.description": "要用于系统包含路径的值。如果已设置,它会覆盖通过 \"compilerPath\" 和 \"compileCommands\" 设置获取的系统包含路径。",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "控制扩展是否报告在 c_cpp_properties.json 中检测到的错误。",
"c_cpp.configuration.default.customConfigurationVariables.description": "未设置 \"customConfigurationVariables\" 时要在配置中使用的值,或 \"customConfigurationVariables\" 中存在 \"${default}\" 作为键时要插入的值。",
"c_cpp.configuration.updateChannel.description": "设置为“预览体验”以自动下载并安装扩展的最新预览体验版本,其中包括即将推出的功能和 bug 修复。",
"c_cpp.configuration.experimentalFeatures.description": "控制“实验性”功能是否可用。",
"c_cpp.configuration.suggestSnippets.description": "如果为 true,则由语言服务器提供片段。",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "要执行的完全限定的管道命令。",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "传递给管道程序配置连接的命令行参数。",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "传递给程序的环境变量。",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "如果 pipeProgram 的单个参数包含字符(如空格或制表符),是否应引用它? 如果为 \"false\",则将不再自动引用调试程序命令。\n默认为 \"true\"。",
"c_cpp.debuggers.logging.description": "用于确定应将哪些类型的消息记录到调试控制台的可选标志。",
"c_cpp.debuggers.logging.exceptions.description": "用于确定是否应将异常消息记录到调试控制台的可选标志。默认为 true。",
"c_cpp.debuggers.logging.moduleLoad.description": "用于确定是否应将模块加载事件记录到调试控制台的可选标志。默认为 true。",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "用于确定是否应将诊断调试引擎消息记录到调试控制台的可选标志。默认为 false。",
"c_cpp.debuggers.logging.trace.description": "用于确定是否应将诊断适配器命令跟踪记录到调试控制台的可选标志。默认为 false。",
"c_cpp.debuggers.logging.traceResponse.description": "用于确定是否应将诊断适配器命令和响应跟踪记录到调试控制台的可选标志。默认为 false。",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "用于确定是否应将线程退出消息记录到调试控制台的可选标志。默认值: \"false\"。",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "用于确定是否应将目标进程退出消息记录到调试控制台的可选标志;否则调试停止。默认值: \"true\"。",
"c_cpp.debuggers.text.description": "要执行的调试命令。",
"c_cpp.debuggers.description.description": "此命令的可选说明。",
"c_cpp.debuggers.ignoreFailures.description": "如果为 true,应忽略此命令的失败。默认值为 false。",
@@ -10,6 +10,7 @@
"debugger.not.available": "类型为“{0}”的调试程序仅在 Windows 上可用。在当前 OS 平台上使用类型“{1}”。",
"lldb.framework.install.xcode": "详细信息",
"lldb.framework.not.found": "找不到用于 lldb-mi 的 \"LLDB.framework\"。请安装 XCode 或 XCode 命令行工具。",
"debugger.launchConfig": "启动配置:",
"lldb.find.failed": "缺少 lldb-mi 可执行文件的依赖项“{0}”。",
"lldb.search.paths": "搜索范围:",
"lldb.install.help": "要解决此问题,请通过 Apple App Store 安装 XCode,或通过在终端窗口运行“{0}”来安装 XCode 命令行工具。",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "未能查询编译器。正在回退到无位数。",
"intellisense_client_creation_aborted": "已中止创建 IntelliSense 客户端: {0}",
"include_errors_config_provider_intellisense_disabled ": "基于 configurationProvider 设置提供的信息检测到 #include 错误。此翻译单元({0})的 IntelliSense 功能将由标记分析器提供。",
"include_errors_config_provider_squiggles_disabled ": "基于 configurationProvider 设置提供的信息检测到 #include 错误。已针对此翻译单元({0})禁用波形曲线。"
"include_errors_config_provider_squiggles_disabled ": "基于 configurationProvider 设置提供的信息检测到 #include 错误。已针对此翻译单元({0})禁用波形曲线。",
"preprocessor_keyword": "预处理器关键字",
"c_keyword": "C 关键字",
"cpp_keyword": "C++ 关键字",
"overload": "还有 1 个重载",
"overloads": "还有 %d 个重载",
"specialization": "还有 1 个专业化",
"specializations": "还有 %d 个专业化",
"expands_to": "扩展到:",
"file_label": "文件:",
"parameters_label": "参数:",
"returns_label": "返回:",
"deprecated_label": "已弃用:",
"exceptions_label": "异常:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "設為 true,就會只處理直接或間接以標頭形式包含的檔案; 設為 false,則會處理位於指定 include 路徑下的所有檔案。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "產生的符號資料庫路徑。如果指定了相對路徑,就會是相對於工作區預設儲存位置的路徑。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "供標籤剖析器在搜尋包含的標頭時使用的路徑清單。根據預設,會在這些路徑進行遞迴搜尋。指定 '*' 來指示非遞迴搜尋。例如: '/usr/include' 會在所有子目錄中搜尋,但 '/usr/include/*' 不會。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "可透過命令 ${cpptools:activeConfigCustomVariable} 查詢的自訂變數,用於 launch.json 或 tasks.js 的輸入變數。",
"c_cpp_properties.schema.json.definitions.env": "可以透過使用 ${變數} 或 ${環境:變數} 語法,在此檔案中任何地方重複使用的自訂變數。",
"c_cpp_properties.schema.json.definitions.version": "組態檔版本。此屬性受延伸模組管理,請勿變更。",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "控制延伸模組是否會回報 c_cpp_properties.json 中偵測到的錯誤。"
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "當 \"browse.limitSymbolsToIncludedHeaders\" 未指定或設定為 \"${default}\" 時,要在組態中使用的值。",
"c_cpp.configuration.default.systemIncludePath.description": "要用於系統包含路徑的值。若設定,會覆寫透過 \"compilerPath\" 和 \"compileCommands\" 設定所取得的系統包含路徑。",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "控制延伸模組是否會回報 c_cpp_properties.json 中偵測到的錯誤。",
"c_cpp.configuration.default.customConfigurationVariables.description": "當未設定 \"customConfigurationVariables\" 時要在組態中使用的值,或當 \"${default}\" 在 \"customConfigurationVariables\" 中顯示為索引鍵時要插入的值。",
"c_cpp.configuration.updateChannel.description": "設定為「測試人員」以自動下載並安裝最新的延伸模組測試人員組建 (包括即將推出的功能和更新)。",
"c_cpp.configuration.experimentalFeatures.description": "控制「實驗性」功能是否可用。",
"c_cpp.configuration.suggestSnippets.description": "若為 true,則由語言伺服器提供程式碼片段。",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "要執行的完整管道命令。",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "傳遞至管道程式以設定連線的命令列引數。",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "傳遞至管道程式的環境變數。",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "若 pipeProgram 的個別引數包含字元 (例如空格或定位字元),是否應該加上引號? 若設定為 'false',不會再自動為偵錯工具命令加上引號。\n預設為 'true'。",
"c_cpp.debuggers.logging.description": "選擇性旗標,用以判斷應記錄到偵錯主控台的訊息類型。",
"c_cpp.debuggers.logging.exceptions.description": "選擇性旗標,用以判斷是否應將例外狀況訊息記錄到偵錯主控台。預設為 true。",
"c_cpp.debuggers.logging.moduleLoad.description": "選擇性旗標,用以判斷是否應將模組載入事件記錄到偵錯主控台。預設為 true。",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "選擇性旗標,用以判斷是否應將診斷偵錯引擎訊息記錄到偵錯主控台。預設為 false。",
"c_cpp.debuggers.logging.trace.description": "選擇性旗標,用以判斷是否應將診斷介面卡命令追蹤記錄到偵錯主控台。預設為 false。",
"c_cpp.debuggers.logging.traceResponse.description": "選擇性旗標,用以判斷是否應將診斷介面卡命令和回應追蹤記錄到偵錯主控台。預設為 false。",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "選用旗標,可決定是否要將執行緒結束訊息記錄到偵錯主控台。預設: `false`。",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "選用旗標,可決定要將目標流程結束訊息記錄到偵錯主控台,或停止偵錯。預設: `true`。",
"c_cpp.debuggers.text.description": "要執行的偵錯工具命令。",
"c_cpp.debuggers.description.description": "命令的選擇性描述。",
"c_cpp.debuggers.ignoreFailures.description": "若為 true,則應略過來自命令的失敗。預設值為 false。",
@@ -10,6 +10,7 @@
"debugger.not.available": "只能在 Windows 上使用類型為 '{0}' 的偵錯工具。在目前的 OS 平台上使用類型 '{1}'。",
"lldb.framework.install.xcode": "更多資訊",
"lldb.framework.not.found": "找不到 lldb-mi 的 'LLDB.framework'。請安裝 XCode 或 XCode 命令列工具。",
"debugger.launchConfig": "啟動設定:",
"lldb.find.failed": "缺少 lldb-mi 可執行檔的相依性 '{0}'。",
"lldb.search.paths": "已在下列位置中搜尋:",
"lldb.install.help": "若要解決此問題,請透過 Apple App Store 安裝 XCode,或在終端機視窗中執行 '{0}' 以安裝 XCode 命令列工具。",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "無法查詢編譯器。請回復成沒有位元。",
"intellisense_client_creation_aborted": "已中止建立 IntelliSense 用戶端: {0}",
"include_errors_config_provider_intellisense_disabled ": "根據 configurationProvider 設定提供的資訊,偵測到 #include 錯誤。此編譯單位 ({0}) 的 IntelliSense 功能將由標籤剖析器提供。",
"include_errors_config_provider_squiggles_disabled ": "根據 configurationProvider 設定提供的資訊,偵測到 #include 錯誤。已停用此編譯單位 ({0}) 的波浪線。"
"include_errors_config_provider_squiggles_disabled ": "根據 configurationProvider 設定提供的資訊,偵測到 #include 錯誤。已停用此編譯單位 ({0}) 的波浪線。",
"preprocessor_keyword": "前置處理器關鍵字",
"c_keyword": "C 關鍵字",
"cpp_keyword": "C++ 關鍵字",
"overload": "還有 1 次多載",
"overloads": "還有 %d 次多載",
"specialization": "還有 1 次特殊化",
"specializations": "還有 %d 次特殊化",
"expands_to": "展開至:",
"file_label": "檔案:",
"parameters_label": "參數:",
"returns_label": "傳回:",
"deprecated_label": "已淘汰:",
"exceptions_label": "例外狀況:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "True, pokud chcete zpracovat jen soubory přímo nebo nepřímo zahrnuté jako hlavičky, false, pokud chcete zpracovat všechny soubory na zadaných cestách pro vložené soubory",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Cesta k vygenerované databázi symbolů. Pokud se zadá relativní cesta, nastaví se jako relativní k výchozímu umístění úložiště pracovního prostoru.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Seznam cest, které analyzátor značek použije při hledání zahrnutých hlaviček. Hledání na těchto cestách je standardně rekurzivní. Pokud chcete zadat nerekurzivní hledání, zadejte *. Příklad: /usr/include bude hledat ve všech podadresářích, zatímco /usr/include/* ne.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Vlastní proměnné, na které se dá poslat dotaz prostřednictvím příkazu ${cpptools:activeConfigCustomVariable}, aby se použily jako vstupní proměnné v souborech launch.json nebo tasks.json.",
"c_cpp_properties.schema.json.definitions.env": "Vlastní proměnné, které se dají opakovaně použít kdekoli v tomto souboru pomocí syntaxe ${proměnná} nebo ${env:proměnná}.",
"c_cpp_properties.schema.json.definitions.version": "Verze konfiguračního souboru. Tuto vlastnost spravuje rozšíření. Neměňte ji prosím.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Určuje, jestli rozšíření ohlásí chyby zjištěné v souboru c_cpp_properties.json."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "Hodnota, která se použije v konfiguraci, pokud se nezadá browse.limitSymbolsToIncludedHeaders nebo pokud se nastaví na ${default}",
"c_cpp.configuration.default.systemIncludePath.description": "Hodnota, která se použije pro systémovou cestu pro vložené soubory. Pokud se nastaví, přepíše systémovou cestu pro vložené soubory získanou z nastavení compilerPath a compileCommands.",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Určuje, jestli rozšíření ohlásí chyby zjištěné v souboru c_cpp_properties.json.",
"c_cpp.configuration.default.customConfigurationVariables.description": "Hodnota, která se použije v konfiguraci, pokud se nenastaví customConfigurationVariables, nebo hodnoty, které se mají vložit, pokud se v customConfigurationVariables jako klíč nachází ${default}",
"c_cpp.configuration.updateChannel.description": "Pokud chcete automaticky stahovat a instalovat nejnovější sestavení rozšíření v programu Insider, která zahrnují připravované funkce a opravy chyb, nastavte možnost Účastníci programu Insider.",
"c_cpp.configuration.experimentalFeatures.description": "Určuje, jestli je možné použít experimentální funkce.",
"c_cpp.configuration.suggestSnippets.description": "Pokud se nastaví na true, jazykový server poskytne fragmenty kódu.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Plně kvalifikovaný příkaz kanálu, který se má provést",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Argumenty příkazového řádku, které se předávají do cílového programu, aby se nakonfigurovalo připojení",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Proměnné prostředí, které se předávají do cílového programu",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Pokud jednotlivé argumenty pro pipeProgram obsahují znaky (například mezery nebo tabulátory), mají se používat uvozovky? Pokud se nastaví hodnota false, nebudou se už v příkazu ladicího programu automaticky používat uvozovky. \nVýchozí hodnota je true.",
"c_cpp.debuggers.logging.description": "Nepovinné příznaky, které určují, které typy zpráv se mají protokolovat do konzoly ladění",
"c_cpp.debuggers.logging.exceptions.description": "Nepovinný příznak, který určuje, jestli se do konzoly ladění mají protokolovat zprávy výjimek. Výchozí hodnota je true.",
"c_cpp.debuggers.logging.moduleLoad.description": "Nepovinný příznak, který určuje, jestli se do konzoly ladění mají protokolovat události načítání modulu. Výchozí hodnota je true.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Nepovinný příznak, který určuje, jestli se do konzoly ladění mají protokolovat diagnostické zprávy ladicího stroje. Výchozí hodnota je false.",
"c_cpp.debuggers.logging.trace.description": "Nepovinný příznak, který určuje, jestli se do konzoly ladění má protokolovat trasování příkazů diagnostického adaptéru. Výchozí hodnota je false.",
"c_cpp.debuggers.logging.traceResponse.description": "Nepovinný příznak, který určuje, jestli se do konzoly ladění má protokolovat trasování příkazů a odpovědí diagnostického adaptéru. Výchozí hodnota je false.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Nepovinný příznak, který určuje, jestli se do konzoly ladění mají protokolovat ukončovací zprávy vlákna. Výchozí: false",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Nepovinný příznak, který určuje, jestli se mají ukončovací zprávy cílového procesu protokolovat do konzoly ladění, nebo jestli je ladění zastavené. Výchozí: true",
"c_cpp.debuggers.text.description": "Příkaz ladicího programu, který se má provést",
"c_cpp.debuggers.description.description": "Volitelný popis příkazu",
"c_cpp.debuggers.ignoreFailures.description": "Pokud má hodnotu true, měla by se ignorovat selhání z daného příkazu. Výchozí hodnota je false.",
@@ -10,6 +10,7 @@
"debugger.not.available": "Ladicí program typu {0} je k dispozici jen ve Windows. Na aktuální platformě operačního systému použijte typ {1}.",
"lldb.framework.install.xcode": "Další informace",
"lldb.framework.not.found": "Nepovedlo se najít LLDB.framework pro lldb-mi. Nainstalujte prosím XCode nebo jeho nástroje příkazového řádku.",
"debugger.launchConfig": "Spustit konfiguraci:",
"lldb.find.failed": "Chybí závislosti {0} pro spustitelný soubor lldb-mi.",
"lldb.search.paths": "Prohledáno:",
"lldb.install.help": "Pokud chcete tento problém vyřešit, buď nainstalujte XCode přes obchod Apple App Store, nebo v okně terminálu spusťte {0}, aby se nainstalovaly nástroje příkazového řádku XCode.",
+1 -1
View File
@@ -6,7 +6,7 @@
{
"architecture.not.supported": "Architektura {0} se nepodporuje. ",
"apline.containers.not.supported": "Kontejnery Alpine se nepodporují.",
"native.binaries.not.supported": "Tato verze rozšíření {0} není kompatibilní s vaším operačním systémem. Stáhněte a nainstalujte si prosím verzi rozšíření {1}.",
"native.binaries.not.supported": "Tato verze rozšíření pro {0} není kompatibilní s vaším operačním systémem. Stáhněte a nainstalujte si prosím verzi rozšíření {1}.",
"download.button": "Přejít na stránku stahování",
"initialization.failed": "Nepovedlo se nainstalovat rozšíření C/C++. Další informace najdete v okně výstupu.",
"updating.dependencies": "Aktualizují se závislosti C/C++...",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Nepovedlo se poslat dotaz na kompilátor. Probíhá návrat k režimu bez bitové verze.",
"intellisense_client_creation_aborted": "Vytváření klienta IntelliSense se přerušilo: {0}",
"include_errors_config_provider_intellisense_disabled ": "Na základě informací z nastavení configurationProvider se zjistily chyby direktivy #include. Funkce IntelliSense pro tuto jednotku překladu ({0}) bude poskytovat Tag Parser.",
"include_errors_config_provider_squiggles_disabled ": "Na základě informací z nastavení configurationProvider se zjistily chyby direktivy #include. Pro tuto jednotku překladu ({0}) se zakázaly vlnovky."
"include_errors_config_provider_squiggles_disabled ": "Na základě informací z nastavení configurationProvider se zjistily chyby direktivy #include. Pro tuto jednotku překladu ({0}) se zakázaly vlnovky.",
"preprocessor_keyword": "klíčové slovo preprocesoru",
"c_keyword": "Klíčové slovo jazyka C",
"cpp_keyword": "Klíčové slovo jazyka C++",
"overload": "+1 přetížení",
"overloads": "+%d přetížení",
"specialization": "+1 specializace",
"specializations": "+tento počet specializací: %d",
"expands_to": "Rozšiřuje se na:",
"file_label": "Soubor:",
"parameters_label": "Parametry:",
"returns_label": "Vrací:",
"deprecated_label": "Zastaralé:",
"exceptions_label": "Výjimky:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "TRUE, um nur die direkt oder indirekt als Header enthaltenen Dateien zu verarbeiten; FALSE, um alle Dateien unter den angegebenen Includepfaden zu verarbeiten.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Pfad zur generierten Symboldatenbank. Wenn ein relativer Pfad angegeben wird, wird er relativ zum Standardspeicherort des Arbeitsbereichs erstellt.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Eine Liste von Pfaden, die der Tagparser beim Suchen nach eingeschlossenen Headern verwenden soll. Die Suche in diesen Pfaden ist standardmäßig rekursiv. Geben Sie \"*\" an, um eine nicht rekursive Suche festzulegen. Beispiel: Bei \"/usr/include\" werden alle Unterverzeichnisse durchsucht, bei \"/usr/include/*\" nicht.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Benutzerdefinierte Variablen, die über den Befehl ${cpptools:activeConfigCustomVariable} abgefragt und für die Eingabevariablen in launch.json oder tasks.json verwendet werden können.",
"c_cpp_properties.schema.json.definitions.env": "Benutzerdefinierte Variablen, die mithilfe der ${variable}- oder ${env:variable}-Syntax an beliebiger Stelle in dieser Datei wiederverwendet werden können.",
"c_cpp_properties.schema.json.definitions.version": "Version der Konfigurationsdatei. Diese Eigenschaft wird von der Erweiterung verwaltet und darf nicht geändert werden.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Hiermit wird gesteuert, ob die Erweiterung in \"c_cpp_properties.json\" erkannte Fehler meldet."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "Der Wert, der in einer Konfiguration verwendet werden soll, wenn \"browse.limitSymbolsToIncludedHeaders\" entweder nicht angegeben oder auf \"${default}\" festgelegt ist.",
"c_cpp.configuration.default.systemIncludePath.description": "Der Wert, der für den Systemincludepfad verwendet werden soll. Wenn diese Option festgelegt ist, wird der über die Einstellungen \"compilerPath\" und \"compileCommands\" erhaltene Systemincludepfad überschrieben.",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Hiermit wird gesteuert, ob die Erweiterung in \"c_cpp_properties.json\" erkannte Fehler meldet.",
"c_cpp.configuration.default.customConfigurationVariables.description": "Der Wert, der in einer Konfiguration verwendet werden soll, wenn \"customConfigurationVariables\" nicht angegeben ist, oder die einzufügenden Werte, wenn \"${default}\" als Schlüssel in \"customConfigurationVariables\" vorhanden ist.",
"c_cpp.configuration.updateChannel.description": "Legen Sie den Wert auf \"Insiders\" fest, um die neuesten Insiders-Builds der Erweiterung, die neue Features und Bugfixes enthalten, automatisch herunterzuladen und zu installieren.",
"c_cpp.configuration.experimentalFeatures.description": "Hiermit wird gesteuert, ob experimentelle Features verwendet werden können.",
"c_cpp.configuration.suggestSnippets.description": "Wenn dieser Wert auf TRUE festgelegt ist, werden Codeausschnitte vom Sprachserver bereitgestellt.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Der vollqualifizierte auszuführende Pipebefehl.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Befehlszeilenargumente, die zum Konfigurieren der Verbindung an das Pipeprogramm übergeben werden.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Umgebungsvariablen, die an das Pipeprogramm übergeben werden.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Gibt an, ob Anführungszeichen gesetzt werden sollen, wenn die einzelnen pipeProgram-Argumente Zeichen enthalten (z. B. Leerzeichen oder Tabstopps). Bei Einstellung auf \"false\" wird der Debuggerbefehl nicht mehr automatisch in Anführungszeichen gesetzt. \nDer Standardwert ist \"true\".",
"c_cpp.debuggers.logging.description": "Optionale Flags zum Festlegen, welche Nachrichtentypen in der Debugging-Konsole protokolliert werden sollen.",
"c_cpp.debuggers.logging.exceptions.description": "Optionales Flag zum Festlegen, ob Ausnahmemeldungen in der Debugging-Konsole protokolliert werden sollen. Der Standardwert ist TRUE.",
"c_cpp.debuggers.logging.moduleLoad.description": "Optionales Flag zum Festlegen, ob Modulladeereignisse in der Debugging-Konsole protokolliert werden sollen. Der Standardwert ist TRUE.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Optionales Flag zum Festlegen, ob Nachrichten der Diagnosedebug-Engine in der Debugging-Konsole protokolliert werden sollen. Der Standardwert ist FALSE.",
"c_cpp.debuggers.logging.trace.description": "Optionales Flag zum Festlegen, ob die Befehlsablaufverfolgung des Diagnoseadapters in der Debugging-Konsole protokolliert werden soll. Der Standardwert ist FALSE.",
"c_cpp.debuggers.logging.traceResponse.description": "Optionales Flag zum Festlegen, ob die Befehls- und Antwortablaufverfolgung des Diagnoseadapters in der Debugging-Konsole protokolliert werden soll. Der Standardwert ist FALSE.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Optionales Flag zum Bestimmen, ob Meldungen zum Beenden des Threads in der Debugging-Konsole protokolliert werden sollen. Standardwert: \"false\".",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optionales Flag zum Bestimmen, ob Meldungen zum Beenden des Zielprozesses in der Debugging-Konsole protokolliert werden sollen oder das Debugging beendet werden soll. Standardwert: \"true\".",
"c_cpp.debuggers.text.description": "Der auszuführende Debuggerbefehl.",
"c_cpp.debuggers.description.description": "Optionale Beschreibung des Befehls.",
"c_cpp.debuggers.ignoreFailures.description": "Wenn dieser Wert auf TRUE festgelegt ist, werden durch den Befehl verursachte Fehler ignoriert. Der Standardwert ist FALSE.",
@@ -10,6 +10,7 @@
"debugger.not.available": "Der Debugger vom Typ \"{0}\" ist nur unter Windows verfügbar. Verwenden Sie auf der aktuellen Betriebssystemplattform den Typ \"{1}\".",
"lldb.framework.install.xcode": "Details",
"lldb.framework.not.found": "\"LLDB.framework\" wurde für LLDB-Mi nicht gefunden. Installieren Sie XCode oder die XCode-Befehlszeilentools.",
"debugger.launchConfig": "Startkonfiguration:",
"lldb.find.failed": "Fehlende Abhängigkeit \"{0}\" für ausführbare LLDB-MI-Datei.",
"lldb.search.paths": "Gesucht in:",
"lldb.install.help": "Um dieses Problem zu beheben, installieren Sie entweder XCode über den Apple App Store, oder installieren Sie die XCode-Befehlszeilentools, indem Sie \"{0}\" in einem Terminalfenster ausführen.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Fehler beim Abfragen des Compilers. Es wird ein Fallback auf keine Bitanzahl durchgeführt.",
"intellisense_client_creation_aborted": "IntelliSense-Clienterstellung abgebrochen: {0}",
"include_errors_config_provider_intellisense_disabled ": "Basierend auf den von der configurationProvider-Einstellung bereitgestellten Informationen wurden #include-Fehler festgestellt. IntelliSense-Features für diese Übersetzungseinheit ({0}) werden vom Tagparser bereitgestellt.",
"include_errors_config_provider_squiggles_disabled ": "Basierend auf den von der configurationProvider-Einstellung bereitgestellten Informationen wurden #include-Fehler festgestellt. Wellenlinien sind für diese Übersetzungseinheit deaktiviert ({0})."
"include_errors_config_provider_squiggles_disabled ": "Basierend auf den von der configurationProvider-Einstellung bereitgestellten Informationen wurden #include-Fehler festgestellt. Wellenlinien sind für diese Übersetzungseinheit deaktiviert ({0}).",
"preprocessor_keyword": "Präprozessor-Schlüsselwort",
"c_keyword": "C-Schlüsselwort",
"cpp_keyword": "C++-Schlüsselwort",
"overload": "+1 Überladung",
"overloads": "+%d Überladungen",
"specialization": "+1 Spezialisierung",
"specializations": "+%d Spezialisierungen",
"expands_to": "Wird erweitert auf:",
"file_label": "Datei:",
"parameters_label": "Parameter:",
"returns_label": "Rückgabe:",
"deprecated_label": "Veraltet:",
"exceptions_label": "Ausnahmen:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "true para procesar únicamente los archivos incluidos directa o indirectamente como encabezados; false para procesar todos los archivos en las rutas de acceso de inclusión especificadas.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Ruta de acceso a la base de datos de símbolos generada. Si se especifica una ruta de acceso relativa, será relativa a la ubicación de almacenamiento predeterminada del área de trabajo.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Lista de rutas de acceso que usará el analizador de etiquetas al buscar los encabezados incluidos. De forma predeterminada, la búsqueda en estas rutas de acceso es recursiva. Especifique “*” para indicar una búsqueda no recursiva. Por ejemplo, “/usr/include” buscará en todos los subdirectorios, mientras que “/usr/include/*” no lo hará.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Variables personalizadas que pueden consultarse mediante el comando ${cpptools:activeConfigCustomVariable} para utilizarlas en las variables de entrada en launch.json o tasks.json.",
"c_cpp_properties.schema.json.definitions.env": "Las variables personalizadas se pueden reutilizar en cualquier ubicación del archivo mediante la sintaxis ${variable} o ${env:variable}.",
"c_cpp_properties.schema.json.definitions.version": "Versión del archivo de configuración. La extensión administra esta propiedad, no la modifique.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Controla si la extensión notificará los errores detectados en c_cpp_properties.json."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "Valor que debe usarse en una configuración si no se ha especificado \"browse.limitSymbolsToIncludedHeaders\" o se ha establecido en \"${default}\".",
"c_cpp.configuration.default.systemIncludePath.description": "Valor que debe usarse para la ruta de acceso de inclusión del sistema. Si se establece, invalida la ruta de acceso de inclusión del sistema adquirida a través de las opciones de configuración \"compilerPath\" y \"compileCommands\".",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Controla si la extensión notificará los errores detectados en c_cpp_properties.json.",
"c_cpp.configuration.default.customConfigurationVariables.description": "Valor que debe usarse en una configuración si no se establece \"customConfigurationVariables\", o bien los valores que se deben insertar si se especifica \"${default}\" como clave en \"customConfigurationVariables\".",
"c_cpp.configuration.updateChannel.description": "Establezca esta opción en \"Insiders\" para descargar e instalar automáticamente las compilaciones más recientes de Insiders para la extensión, que incluyen nuevas características y correcciones de errores.",
"c_cpp.configuration.experimentalFeatures.description": "Controla si se pueden usar las características \"experimentales\".",
"c_cpp.configuration.suggestSnippets.description": "Si se establece en true, el servidor de lenguaje proporciona los fragmentos de código.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Comando de canalización completo para ejecutar.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Argumentos de la línea de comandos que se pasan al programa de canalización para configurar la conexión.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Variables de entorno que se pasan al programa de canalización.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Si los argumentos individuales de pipeProgram contienen caracteres (como espacios o tabulaciones), ¿debe incluirse entre comillas? Si es \"false\", el comando del depurador dejará de incluirse entre comillas automáticamente. \nEl valor predeterminado es \"true\".",
"c_cpp.debuggers.logging.description": "Marcas opcionales que determinan los tipos de mensajes que deben registrarse en la Consola de depuración.",
"c_cpp.debuggers.logging.exceptions.description": "Marca opcional que determina si los mensajes de excepción deben registrarse en la Consola de depuración. El valor predeterminado es true.",
"c_cpp.debuggers.logging.moduleLoad.description": "Marca opcional que determina si los eventos de carga de módulos deben registrarse en la Consola de depuración. El valor predeterminado es true.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Marca opcional que determina si los mensajes del motor de depuración de diagnóstico deben registrarse en la Consola de depuración. El valor predeterminado es false.",
"c_cpp.debuggers.logging.trace.description": "Marca opcional que determina si el seguimiento de comandos del adaptador de diagnóstico debe registrarse en la Consola de depuración. El valor predeterminado es false.",
"c_cpp.debuggers.logging.traceResponse.description": "Marca opcional que determina si el seguimiento de comandos y respuestas del adaptador de diagnóstico debe registrarse en la Consola de depuración. El valor predeterminado es false.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Marca opcional que determina si los mensajes de salida de subprocesos deben registrarse en la Consola de depuración. El valor predeterminado es \"false\".",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Marca opcional para determinar si los mensajes de salida del proceso de destino deben registrarse en la Consola de depuración o bien la depuración se ha detenido. El valor predeterminado es \"true\".",
"c_cpp.debuggers.text.description": "Comando del depurador para ejecutar.",
"c_cpp.debuggers.description.description": "Descripción opcional del comando.",
"c_cpp.debuggers.ignoreFailures.description": "Si se establece en true, los errores del comando deben omitirse. El valor predeterminado es false.",
@@ -10,6 +10,7 @@
"debugger.not.available": "El depurador de tipo \"{0}\" solo está disponible en Windows. Use el tipo \"{1}\" en la plataforma de sistema operativo actual.",
"lldb.framework.install.xcode": "Más información",
"lldb.framework.not.found": "No se encuentra \"LLDB.framework\" para lldb-mi. Instale XCode o las herramientas de línea de comandos de XCode.",
"debugger.launchConfig": "Configuración de inicio:",
"lldb.find.failed": "Falta la dependencia \"{0}\" para el ejecutable lldb-mi.",
"lldb.search.paths": "Buscado en:",
"lldb.install.help": "Para resolver este problema, instale XCode mediante App Store de Apple o instale las herramientas de línea de comandos de XCode ejecutando \"{0}\" en una ventana de terminal.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "No se pudo consultar el compilador. Revirtiendo para no establecer ningún valor de bits.",
"intellisense_client_creation_aborted": "Se anuló la creación del cliente de IntelliSense: {0}",
"include_errors_config_provider_intellisense_disabled ": "Se han detectado errores de #include basados en la información proporcionada por configurationProvider. El analizador de etiquetas proporcionará las características de IntelliSense para esta unidad de traducción ({0}).",
"include_errors_config_provider_squiggles_disabled ": "Se han detectado errores de #include basados en la información proporcionada por configurationProvider. El subrayado ondulado está deshabilitado para esta unidad de traducción ({0})."
"include_errors_config_provider_squiggles_disabled ": "Se han detectado errores de #include basados en la información proporcionada por configurationProvider. El subrayado ondulado está deshabilitado para esta unidad de traducción ({0}).",
"preprocessor_keyword": "palabra clave del preprocesador",
"c_keyword": "Palabra clave de C",
"cpp_keyword": "Palabra clave de C++",
"overload": "1 sobrecarga más",
"overloads": "%d sobrecargas más",
"specialization": "1 especialización más",
"specializations": "%d especializaciones más",
"expands_to": "Se expande a:",
"file_label": "Archivo:",
"parameters_label": "Parámetros:",
"returns_label": "Devuelve:",
"deprecated_label": "En desuso:",
"exceptions_label": "Excepciones:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "true pour traiter uniquement les fichiers inclus directement ou indirectement comme des en-têtes, false pour traiter tous les fichiers sous les chemins d'inclusion spécifiés.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Chemin de la base de données de symboles générée. Si un chemin relatif est spécifié, il est relatif à l'emplacement de stockage par défaut de l'espace de travail.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Liste de chemins que l'analyseur de balises doit utiliser pour la recherche des en-têtes inclus. La recherche dans ces chemins est récursive par défaut. Spécifiez '*' pour indiquer une recherche non récursive. Par exemple : '/usr/include' effectue une recherche dans tous les sous-répertoires, contrairement à '/usr/include/*'.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Variables personnalisées qui peuvent être interrogées par le biais de la commande ${cpptools:activeConfigCustomVariable} à utiliser pour les variables d'entrée dans launch.json ou tasks.json.",
"c_cpp_properties.schema.json.definitions.env": "Variables personnalisées pouvant être réutilisées partout dans ce fichier à l'aide de la syntaxe ${variable} ou ${env:variable}.",
"c_cpp_properties.schema.json.definitions.version": "Version du fichier de configuration. Cette propriété est gérée par l'extension. Ne la changez pas.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Contrôle si l'extension signale les erreurs détectées dans c_cpp_properties.json."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "Valeur à utiliser dans une configuration si \"browse.limitSymbolsToIncludedHeaders\" n'est pas spécifié ou a la valeur \"${default}\".",
"c_cpp.configuration.default.systemIncludePath.description": "Valeur à utiliser pour le chemin d'inclusion système. Si cette option est définie, elle remplace le chemin d'inclusion système obtenu via les paramètres \"compilerPath\" et \"compileCommands\".",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Contrôle si l'extension signale les erreurs détectées dans c_cpp_properties.json.",
"c_cpp.configuration.default.customConfigurationVariables.description": "Valeur à utiliser dans une configuration si \"customConfigurationVariables\" n'est pas défini, ou valeurs à insérer si \"${default}\" est présent dans \"customConfigurationVariables\".",
"c_cpp.configuration.updateChannel.description": "Définissez \"Insiders\" pour télécharger et installer automatiquement les dernières builds Insiders de l'extension, qui comprend les fonctionnalités à venir et des résolutions de bogues.",
"c_cpp.configuration.experimentalFeatures.description": "Contrôle si les fonctionnalités \"expérimentales\" sont utilisables.",
"c_cpp.configuration.suggestSnippets.description": "Si la valeur est true, des extraits de code sont fournis par le serveur de langage.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Commande canal complète à exécuter.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Arguments de ligne de commande passés au programme canal pour configurer la connexion.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Variables d'environnement passées au programme canal.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Si des arguments individuels de pipeProgram contiennent des caractères (par exemple des espaces ou des tabulations), doivent-ils être placés entre guillemets ? Si la valeur est 'false', la commande de débogueur n'est plus automatiquement placée entre guillemets. \nLa valeur par défaut est 'true'.",
"c_cpp.debuggers.logging.description": "Indicateurs facultatifs pour déterminer les types de messages à journaliser dans la console de débogage.",
"c_cpp.debuggers.logging.exceptions.description": "Indicateur facultatif pour déterminer si les messages d'exception doivent être journalisés dans la console de débogage. La valeur par défaut est true.",
"c_cpp.debuggers.logging.moduleLoad.description": "Indicateur facultatif pour déterminer si les événements de chargement de module doivent être journalisés dans la console de débogage. La valeur par défaut est true.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Indicateur facultatif pour déterminer si les messages du moteur de débogage de diagnostic doivent être journalisés dans la console de débogage. La valeur par défaut est false.",
"c_cpp.debuggers.logging.trace.description": "Indicateur facultatif pour déterminer si le suivi de commande de l'adaptateur de diagnostic doit être journalisé dans la console de débogage. La valeur par défaut est false.",
"c_cpp.debuggers.logging.traceResponse.description": "Indicateur facultatif pour déterminer si le suivi de commande et de réponse de l'adaptateur de diagnostic doit être journalisé dans la console de débogage. La valeur par défaut est false.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Indicateur facultatif pour déterminer si les messages indiquant la sortie du thread doivent être journalisés dans la console de débogage. Valeur par défaut : 'false'.",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Indicateur facultatif pour déterminer si les messages indiquant la sortie du processus cible doivent être journalisés dans la console de débogage ou si le débogage est arrêté. Valeur par défaut : 'true'.",
"c_cpp.debuggers.text.description": "Commande de débogueur à exécuter.",
"c_cpp.debuggers.description.description": "Description facultative de la commande.",
"c_cpp.debuggers.ignoreFailures.description": "Si la valeur est true, les échecs de la commande doivent être ignorés. La valeur par défaut est false.",
@@ -10,6 +10,7 @@
"debugger.not.available": "Le débogueur de type '{0}' est disponible seulement sur Windows. Utilisez le type '{1}' sur la plateforme OS actuelle.",
"lldb.framework.install.xcode": "En savoir plus",
"lldb.framework.not.found": "Impossible de localiser 'LLDB.framework' pour lldb-mi. Installez XCode ou les outils en ligne de commande XCode.",
"debugger.launchConfig": "Lancer la configuration :",
"lldb.find.failed": "La dépendance '{0}' est manquante pour l'exécutable lldb-mi.",
"lldb.search.paths": "Recherche effectuée dans :",
"lldb.install.help": "Pour résoudre ce problème, installez XCode via l'Apple App Store ou installez les outils en ligne de commande XCode en exécutant '{0}' dans une fenêtre de terminal.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Échec de l'interrogation du compilateur. Retour au mode sans nombre de bits.",
"intellisense_client_creation_aborted": "Abandon de la création du client IntelliSense : {0}",
"include_errors_config_provider_intellisense_disabled ": "Erreurs #include détectées d'après les informations fournies par le paramètre configurationProvider. Les fonctionnalités IntelliSense de cette unité de traduction ({0}) sont fournies par l'analyseur de balises.",
"include_errors_config_provider_squiggles_disabled ": "Erreurs #include détectées d'après les informations fournies par le paramètre configurationProvider. Les tildes sont désactivés pour cette unité de traduction ({0})."
"include_errors_config_provider_squiggles_disabled ": "Erreurs #include détectées d'après les informations fournies par le paramètre configurationProvider. Les tildes sont désactivés pour cette unité de traduction ({0}).",
"preprocessor_keyword": "mot clé de préprocesseur",
"c_keyword": "Mot clé C",
"cpp_keyword": "Mot clé C++",
"overload": "+1 surcharge",
"overloads": "+%d surcharges",
"specialization": "+1 spécialisation",
"specializations": "+%d spécialisations",
"expands_to": "Se développe sur :",
"file_label": "Fichier :",
"parameters_label": "Paramètres :",
"returns_label": "Retourne :",
"deprecated_label": "Déprécié :",
"exceptions_label": "Exceptions :"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "true per elaborare solo i file inclusi direttamente o indirettamente come intestazioni; false per elaborare tutti i file nei percorsi di inclusione specificati.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Percorso del database dei simboli generato. Se viene specificato un percorso relativo, sarà relativo al percorso di archiviazione predefinito dell'area di lavoro.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Elenco di percorsi che il parser di tag userà durante la ricerca delle intestazioni incluse. Per impostazione predefinita, la ricerca in questi percorsi è ricorsiva. Specificare '*' per indicare la ricerca non ricorsiva. Ad esempio: con '/usr/include' la ricerca verrà estesa in tutte le sottodirectory, mentre con '/usr/include/*' sarà limitata a quella corrente.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Variabili personalizzate su cui è possibile eseguire query tramite il comando ${cpptools:activeConfigCustomVariable} da usare per le variabili di input in launch.jso o tasks.js.",
"c_cpp_properties.schema.json.definitions.env": "Variabili personalizzate che è possibile riutilizzare in qualsiasi punto del file usando la sintassi ${variabile} o ${env:variabile}.",
"c_cpp_properties.schema.json.definitions.version": "Versione del file di configurazione. Questa proprietà è gestita dall'estensione. Non modificarla.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Controlla se l'estensione segnalerà errori rilevati in c_cpp_properties.json."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "Valore da usare in una configurazione se \"browse.limitSymbolsToIncludedHeaders\" non è specificato o impostato su \"${default}\".",
"c_cpp.configuration.default.systemIncludePath.description": "Valore da usare per il percorso di inclusione di sistema. Se è impostato, esegue l'override del percorso di inclusione di sistema acquisito con le impostazioni \"compilerPath\" e \"compileCommands\".",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Controlla se l'estensione segnalerà errori rilevati in c_cpp_properties.json.",
"c_cpp.configuration.default.customConfigurationVariables.description": "Valore da usare in una configurazione se \"customConfigurationVariables\" non è impostato oppure valori da inserire se \"${default}\" è presente come chiave in \"customConfigurationVariables\".",
"c_cpp.configuration.updateChannel.description": "Impostare su \"Insider\" per scaricare e installare automaticamente le build Insider più recenti dell'estensione, che includono funzionalità in arrivo e correzioni di bug.",
"c_cpp.configuration.experimentalFeatures.description": "Controlla se le funzionalità \"sperimentali\" sono utilizzabili.",
"c_cpp.configuration.suggestSnippets.description": "Se è true, i frammenti vengono forniti dal server di linguaggio.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Comando pipe completo da eseguire.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Argomenti della riga di comando passati al programma pipe per configurare la connessione.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Variabili di ambiente passate al programma pipe.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Indica se i singoli argomenti di pipeProgram devono essere racchiusi tra virgolette quando contengono caratteri, ad esempio spazi o tabulazioni. Se è 'false', il comando del debugger non verrà più racchiuso automaticamente tra virgolette. \nL'impostazione predefinita è 'true'.",
"c_cpp.debuggers.logging.description": "Flag facoltativi per determinare i tipi di messaggi da registrare nella Console di debug.",
"c_cpp.debuggers.logging.exceptions.description": "Flag facoltativo per determinare se i messaggi di eccezione devono essere registrati nella Console di debug. Il valore predefinito è true.",
"c_cpp.debuggers.logging.moduleLoad.description": "Flag facoltativo per determinare se gli eventi di caricamento del modulo devono essere registrati nella Console di debug. Il valore predefinito è true.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Flag facoltativo per determinare se i messaggi del motore di debug di diagnostica devono essere registrati nella Console di debug. Il valore predefinito è false.",
"c_cpp.debuggers.logging.trace.description": "Flag facoltativo per determinare se la traccia dei comandi dell'adattatore di diagnostica deve essere registrata nella Console di debug. Il valore predefinito è false.",
"c_cpp.debuggers.logging.traceResponse.description": "Flag facoltativo per determinare se la traccia dei comandi e delle risposte dell'adattatore di diagnostica deve essere registrata nella Console di debug. Il valore predefinito è false.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Flag facoltativo per determinare se i messaggi di uscita del thread devono essere registrati nella Console di debug. Impostazione predefinita: `false`.",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Flag facoltativo per determinare se i messaggi di uscita del processo di destinazione devono essere registrati nella Console di debug o se il debug deve essere arrestato. Impostazione predefinita: `true`.",
"c_cpp.debuggers.text.description": "Comando del debugger da eseguire.",
"c_cpp.debuggers.description.description": "Descrizione facoltativa del comando.",
"c_cpp.debuggers.ignoreFailures.description": "Se è true, gli errori del comando devono essere ignorati. Il valore predefinito è false.",
@@ -10,6 +10,7 @@
"debugger.not.available": "Il debugger di tipo '{0}' è disponibile solo in Windows. Usare il tipo '{1}' nella piattaforma corrente del sistema operativo.",
"lldb.framework.install.xcode": "Ulteriori informazioni",
"lldb.framework.not.found": "Non è possibile trovare 'LLDB.framework' per lldb-mi. Installare Xcode o gli strumenti da riga di comando Xcode.",
"debugger.launchConfig": "Configurazione di avvio:",
"lldb.find.failed": "Manca la dipendenza '{0}' per l'eseguibile lldb-mi.",
"lldb.search.paths": "Ricerca effettuata in:",
"lldb.install.help": "Per risolvere questo problema, installare Xcode tramite Apple App Store oppure installare gli strumenti da riga di comando di Xcode eseguendo '{0}' in una finestra di terminale.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Non è stato possibile eseguire una query sul compilatore. Verrà eseguito il fallback alla modalità senza numero di bit.",
"intellisense_client_creation_aborted": "La creazione del client IntelliSense è stata interrotta: {0}",
"include_errors_config_provider_intellisense_disabled ": "Sono stati rilevati errori #include sulla base delle informazioni fornite dall'impostazione configurationProvider. Le funzionalità IntelliSense per questa unità di conversione ({0}) verranno fornite dal parser di tag.",
"include_errors_config_provider_squiggles_disabled ": "Sono stati rilevati errori #include sulla base delle informazioni fornite dall'impostazione configurationProvider. I segni di revisione sono disabilitati per questa unità di conversione ({0})."
"include_errors_config_provider_squiggles_disabled ": "Sono stati rilevati errori #include sulla base delle informazioni fornite dall'impostazione configurationProvider. I segni di revisione sono disabilitati per questa unità di conversione ({0}).",
"preprocessor_keyword": "parola chiave del preprocessore",
"c_keyword": "parola chiave C",
"cpp_keyword": "parola chiave C++",
"overload": "+ 1 overload",
"overloads": "+ %d overload",
"specialization": "+ 1 specializzazione",
"specializations": "+ %d specializzazioni",
"expands_to": "Si espande in:",
"file_label": "File:",
"parameters_label": "Parametri:",
"returns_label": "Restituisce:",
"deprecated_label": "Deprecato:",
"exceptions_label": "Eccezioni:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "ヘッダーとして直接的または間接的にインクルードされたファイルのみを処理する場合は true、指定したインクルード パスにあるすべてのファイルを処理する場合は false です。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "生成されるシンボル データベースへのパスです。相対パスを指定した場合、ワークスペースの既定のストレージの場所に対する相対パスになります。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "インクルードされたヘッダーを検索する際にタグ パーサーが使用するパスの一覧です。既定では、これらのパスでの検索は再帰的です。非再帰的な検索を示すには、'*' を指定します。たとえば、'/usr/include' を指定するとすべてのサブディレクトリが検索されますが、'/usr/include/*' を指定すると検索されません。",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "launch.json または tasks.json で入力変数として使用するためにコマンド ${cpptools:activeConfigCustomVariable} を使用して照会できるカスタム変数。",
"c_cpp_properties.schema.json.definitions.env": "${変数} 構文または ${env:変数} 構文を使用して、このファイルのどこからでも再利用できるカスタム変数です。",
"c_cpp_properties.schema.json.definitions.version": "構成ファイルのバージョンです。このプロパティは、拡張機能によって管理されています。変更しないでください。",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "拡張機能が、c_cpp_properties.json で検出されたエラーを報告するかどうかを制御します。"
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "\"browse.limitSymbolsToIncludedHeaders\" が指定されていないか、\"${default}\" に設定されている場合に、構成で使用される値です。",
"c_cpp.configuration.default.systemIncludePath.description": "システム インクルード パスに使用する値です。これを設定した場合、\"compilerPath\" および \"compileCommands\" の設定によって取得されるシステム インクルード パスが上書きされます。",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "拡張機能が、c_cpp_properties.json で検出されたエラーを報告するかどうかを制御します。",
"c_cpp.configuration.default.customConfigurationVariables.description": "\"customConfigurationVariables\" が設定されていない場合に構成で使用される値、または \"customConfigurationVariables\" 内に \"${default}\" がキーとして存在する場合に挿入される値です。",
"c_cpp.configuration.updateChannel.description": "\"Insider\" に設定すると、拡張機能の最新の Insider ビルドが自動的にダウンロードされてインストールされます。これには、次期バージョンの機能とバグ修正が含まれています。",
"c_cpp.configuration.experimentalFeatures.description": "\"experimental\" の機能を使用できるかどうかを制御します。",
"c_cpp.configuration.suggestSnippets.description": "true の場合、スニペットは言語サーバーによって提供されます。",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "実行するパイプ コマンドの完全修飾パス。",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "接続を構成するためにパイプ プログラムに渡すコマンド ライン引数。",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "パイプ プログラムに渡す環境変数。",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "pipeProgram の個々の引数に (スペースやタブなどの) 文字が含まれる場合に引用符で囲むかどうか。'false' に設定すると、デバッガー コマンドが自動的に引用符で囲まれることはなくなります。\n既定値は 'true' です。",
"c_cpp.debuggers.logging.description": "どの種類のメッセージをデバッグ コンソールに記録する必要があるかを決定するオプションのフラグです。",
"c_cpp.debuggers.logging.exceptions.description": "例外メッセージをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は true です。",
"c_cpp.debuggers.logging.moduleLoad.description": "モジュール読み込みイベントをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は true です。",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "診断デバッグ エンジンのメッセージをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は false です。",
"c_cpp.debuggers.logging.trace.description": "診断アダプター コマンドのトレースをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は false です。",
"c_cpp.debuggers.logging.traceResponse.description": "診断アダプター コマンドと応答トレースをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は false です",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "スレッドの終了メッセージをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値: 'false'。",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "ターゲット プロセスの終了メッセージをデバッグ コンソールに記録するか、またはデバッグを停止するかを決定するオプションのフラグです。既定値: 'true'。",
"c_cpp.debuggers.text.description": "実行するデバッガー コマンドです。",
"c_cpp.debuggers.description.description": "コマンドの説明 (省略可能)。",
"c_cpp.debuggers.ignoreFailures.description": "true に設定すると、コマンドの失敗は無視されます。既定値は false です。",
@@ -10,6 +10,7 @@
"debugger.not.available": "タイプ '{0}' のデバッガーは、Windows でのみ使用できます。現在の OS プラットフォームでは、タイプ '{1}' を使用してください。",
"lldb.framework.install.xcode": "詳細",
"lldb.framework.not.found": "lldb-mi の 'LLDB.framework' が見つかりません。XCode または XCode コマンド ライン ツールをインストールしてください。",
"debugger.launchConfig": "起動の構成:",
"lldb.find.failed": "lldb-mi 実行可能ファイルの依存関係 '{0}' が見つかりません。",
"lldb.search.paths": "検索対象:",
"lldb.install.help": "この問題を解決するには、Apple App Store から XCode をインストールするか、またはターミナル ウィンドウで '{0}' を実行して XCode コマンド ライン ツールをインストールしてください。",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "コンパイラを照会できませんでした。ビットなしに戻ります。",
"intellisense_client_creation_aborted": "IntelliSense クライアントの作成が中止されました: {0}",
"include_errors_config_provider_intellisense_disabled ": "configurationProvider 設定によって提供された情報に基づいて、#include エラーが検出されました。この翻訳単位 ({0}) の IntelliSense 機能は、タグ パーサーによって提供されます。",
"include_errors_config_provider_squiggles_disabled ": "configurationProvider 設定によって提供された情報に基づいて、#include エラーが検出されました。この翻訳単位 ({0}) では、波線が無効になっています。"
"include_errors_config_provider_squiggles_disabled ": "configurationProvider 設定によって提供された情報に基づいて、#include エラーが検出されました。この翻訳単位 ({0}) では、波線が無効になっています。",
"preprocessor_keyword": "プリプロセッサ キーワード",
"c_keyword": "C キーワード",
"cpp_keyword": "C++ キーワード",
"overload": "+1 個のオーバーロード",
"overloads": "+%d 個のオーバーロード",
"specialization": "+1 個の特殊化",
"specializations": "+%d 個の特殊化",
"expands_to": "展開先:",
"file_label": "ファイル:",
"parameters_label": "パラメーター:",
"returns_label": "戻り値:",
"deprecated_label": "非推奨:",
"exceptions_label": "例外:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "true인 경우 직접적으로 또는 간접적으로 헤더로 포함된 파일만 처리되고, false인 경우 지정된 포함 경로 아래의 모든 파일이 처리됩니다.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "생성된 기호 데이터베이스의 경로입니다. 상대 경로가 지정된 경우 작업 영역의 기본 스토리지 위치에 대해 상대적으로 만들어집니다.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "포함된 헤더를 검색하는 동안 사용할 태그 파서의 경로 목록입니다. 기본적으로 이 경로 검색은 재귀적입니다. 비재귀적 검색을 나타내려면 '*'를 지정합니다. 예: '/usr/include'는 모든 하위 디렉터리를 검색하지만 '/usr/include/*'는 하위 디렉터리를 검색하지 않습니다.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "launch.json 또는 tasks.json의 입력 변수에 사용하기 위해 ${cpptools:activeConfigCustomVariable} 명령을 통해 쿼리할 수 있는 사용자 지정 변수입니다.",
"c_cpp_properties.schema.json.definitions.env": "${변수} 또는 ${환경 변수} 구문을 사용하여 이 파일 내 어디서나 재사용할 수 있는 사용자 지정 변수입니다.",
"c_cpp_properties.schema.json.definitions.version": "구성 파일의 버전입니다. 이 속성은 확장에서 관리합니다. 변경하지 마세요.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "확장이 c_cpp_properties.json에서 탐지된 오류를 보고하도록 할지를 제어합니다."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "\"browse.limitSymbolsToIncludedHeaders\"가 지정되지 않거나 \"${default}\"로 설정된 경우 구성에서 사용할 값입니다.",
"c_cpp.configuration.default.systemIncludePath.description": "시스템 포함 경로에 사용할 값입니다. 설정하는 경우 \"compilerPath\" 및 \"compileCommands\" 설정을 통해 얻은 시스템 포함 경로를 재정의합니다.",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "확장이 c_cpp_properties.json에서 검색된 오류를 보고할지 여부를 제어합니다.",
"c_cpp.configuration.default.customConfigurationVariables.description": "\"customConfigurationVariables\"가 설정되지 않은 경우 구성에서 사용할 값 또는 \"${default}\"가 \"customConfigurationVariables\"에 키로 존재하는 경우 삽입할 값입니다.",
"c_cpp.configuration.updateChannel.description": "예정된 기능과 버그 수정을 포함하는 확장의 최신 참가자 빌드를 자동으로 다운로드하여 설치하려면 \"참가자\"로 설정합니다.",
"c_cpp.configuration.experimentalFeatures.description": "\"실험적\" 기능을 사용할 수 있는지 여부를 제어합니다.",
"c_cpp.configuration.suggestSnippets.description": "True이면 언어 서버에서 코드 조각을 제공합니다.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "실행할 정규화된 파이프 명령입니다.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "연결을 구성하기 위해 파이프 프로그램에 전달되는 명령줄 인수입니다.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "파이프 프로그램에 전달되는 환경 변수입니다.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "pipeProgram의 개별 인수가 문자(예: 공백 또는 탭)를 포함하는 경우 따옴표를 붙여야 하나요? 'false'인 경우 디버거 명령은 더 이상 자동으로 따옴표를 붙이지 않습니다. \n기본값은 'true'입니다.",
"c_cpp.debuggers.logging.description": "메시지 유형을 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다.",
"c_cpp.debuggers.logging.exceptions.description": "예외 메시지를 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다. 기본값은 true입니다.",
"c_cpp.debuggers.logging.moduleLoad.description": "모듈 로드 이벤트를 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다. 기본값은 true입니다.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "진단 디버그 엔진 메시지를 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다. 기본값은 false입니다.",
"c_cpp.debuggers.logging.trace.description": "진단 어댑터 명령 추적을 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다. 기본값은 false입니다.",
"c_cpp.debuggers.logging.traceResponse.description": "진단 어댑터 명령 및 응답 추적을 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다. 기본값은 false입니다.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "스레드 종료 메시지를 디버그 콘솔에 기록할지를 결정하는 선택적 플래그입니다. 기본값: `false`.",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "대상 프로세스 종료 메시지를 디버그 콘솔에 기록할지 또는 디버깅을 중지할지를 결정하는 선택적 플래그입니다. 기본값: `true`.",
"c_cpp.debuggers.text.description": "실행할 디버거 명령입니다.",
"c_cpp.debuggers.description.description": "명령에 대한 선택적 설명입니다.",
"c_cpp.debuggers.ignoreFailures.description": "True이면 명령 실패가 무시됩니다. 기본값은 false입니다.",
@@ -10,6 +10,7 @@
"debugger.not.available": "'{0}' 형식 디버거는 Windows에서만 사용할 수 있습니다. 현재 OS 플랫폼에서는 '{1}' 형식을 사용하세요.",
"lldb.framework.install.xcode": "추가 정보",
"lldb.framework.not.found": "lldb-mi에 대한 'LLDB.framework'를 찾을 수 없습니다. XCode 또는 XCode 명령줄 도구를 설치하세요.",
"debugger.launchConfig": "시작 구성:",
"lldb.find.failed": "lldb-mi 실행 파일에 대한 '{0}' 종속성이 없습니다.",
"lldb.search.paths": "다음에서 검색됨:",
"lldb.install.help": "이 문제를 해결하려면 Apple App Store를 통해 XCode를 설치하거나, 터미널 창에서 '{0}'을(를) 실행하여 XCode 명령줄 도구를 설치하세요.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "컴파일러를 쿼리하지 못했습니다. 0비트로 대체하는 중입니다.",
"intellisense_client_creation_aborted": "IntelliSense 클라이언트 만들기가 중단되었습니다. {0}",
"include_errors_config_provider_intellisense_disabled ": "configurationProvider 설정에서 제공하는 정보를 기준으로 #include 오류가 검색되었습니다. 태그 파서가 이 변환 단위({0})에 적합한 IntelliSense 기능을 제공합니다.",
"include_errors_config_provider_squiggles_disabled ": "configurationProvider 설정에서 제공하는 정보를 기준으로 #include 오류가 검색되었습니다. 이 변환 단위({0})에서 물결선을 사용할 수 없습니다."
"include_errors_config_provider_squiggles_disabled ": "configurationProvider 설정에서 제공하는 정보를 기준으로 #include 오류가 검색되었습니다. 이 변환 단위({0})에서 물결선을 사용할 수 없습니다.",
"preprocessor_keyword": "전처리기 키워드",
"c_keyword": "C 키워드",
"cpp_keyword": "C++ 키워드",
"overload": "+1개 오버로드",
"overloads": "+%d개 오버로드",
"specialization": "+1개 특수화",
"specializations": "+%d개 특수화",
"expands_to": "다음으로 확장:",
"file_label": "파일:",
"parameters_label": "매개 변수:",
"returns_label": "반환 값:",
"deprecated_label": "사용되지 않음:",
"exceptions_label": "예외:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "Wartość true, aby przetwarzać tylko pliki bezpośrednio lub pośrednio dołączone jako nagłówki. Wartość false, aby przetwarzać wszystkie pliki w określonych ścieżkach dołączania.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Ścieżka do generowanej bazy danych symboli. Jeśli zostanie określona ścieżka względna, będzie to ścieżka względem domyślnej lokalizacji magazynowania obszaru roboczego.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Lista ścieżek, których analizator tagów ma używać podczas wyszukiwania dołączanych nagłówków. Wyszukiwanie w tych ścieżkach jest domyślnie rekurencyjne. Użyj znaku „*”, aby określić wyszukiwanie nierekurencyjne. Na przykład wartość „/usr/include” spowoduje przeszukanie wszystkich podkatalogów, w przeciwieństwie do wartości „/usr/include/*”.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Zmienne niestandardowe, względem których można wykonywać zapytania za pomocą polecenia ${cpptools:activeConfigCustomVariable}, aby użyć ich na potrzeby zmiennych wejściowych w plikach launch.js lub tasks.js.",
"c_cpp_properties.schema.json.definitions.env": "Zmienne niestandardowe, których można używać ponownie w dowolnym miejscu tego pliku przy użyciu składni ${zmienna} lub ${env:zmienna}.",
"c_cpp_properties.schema.json.definitions.version": "Wersja pliku konfiguracji. Tą właściwością zarządza rozszerzenie. Nie zmieniaj jej.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Określa, czy rozszerzenie będzie raportować błędy wykryte w pliku c_cpp_properties.json."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "Wartość do użycia w konfiguracji, jeśli element „browse.limitSymbolsToIncludedHeaders” nie został określony lub ma wartość „${default}”.",
"c_cpp.configuration.default.systemIncludePath.description": "Wartość do użycia na potrzeby ścieżki dołączania systemu. Jeśli jest ustawiona, zastępuje systemową ścieżką dołączania, którą można uzyskać za pomocą ustawień „compilerPath” i „compileCommands”.",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Określa, czy rozszerzenie będzie raportować błędy wykryte w pliku c_cpp_properties.json.",
"c_cpp.configuration.default.customConfigurationVariables.description": "Wartość do użycia w konfiguracji, jeśli element „customConfigurationVariables” nie został ustawiony, lub wartości do wstawienia, jeśli element „${default}” istnieje jako klucz w ramach elementu „customConfigurationVariables”.",
"c_cpp.configuration.updateChannel.description": "Ustaw na wartość „Insiders”, aby automatycznie pobrać i zainstalować najnowsze kompilacje niejawnych testerów rozszerzenia, które zawierają nadchodzące funkcje i poprawki błędów.",
"c_cpp.configuration.experimentalFeatures.description": "Określa, czy można używać funkcji „eksperymentalnych”.",
"c_cpp.configuration.suggestSnippets.description": "Jeśli wartość to true, fragmenty kodu są udostępniane przez serwer języka.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Polecenie w pełni kwalifikowanego potoku do wykonania.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Argumenty wiersza polecenia przekazywane do programu potoku w celu skonfigurowania połączenia.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Zmienne środowiskowe przekazywane do programu potoku.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Jeśli poszczególne argumenty elementu pipeProgram zawierają znaki (takie jak spacje lub tabulatory), czy mają być umieszczane w cudzysłowach? W przypadku wartości „false” polecenie debugera nie będzie już automatycznie umieszczane w cudzysłowach. \nWartość domyślna to „true”.",
"c_cpp.debuggers.logging.description": "Opcjonalne flagi określające, które typy komunikatów powinny być rejestrowane w konsoli debugowania.",
"c_cpp.debuggers.logging.exceptions.description": "Opcjonalna flaga określająca, czy komunikaty o wyjątkach powinny być rejestrowane w konsoli debugowania. Wartość domyślna to false.",
"c_cpp.debuggers.logging.moduleLoad.description": "Opcjonalna flaga określająca, czy zdarzenia ładowania modułów powinny być rejestrowane w konsoli debugowania. Wartość domyślna to false.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Opcjonalna flaga określająca, czy komunikaty aparatu adaptera debugowania diagnostycznego powinny być rejestrowane w konsoli debugowania. Wartość domyślna to false.",
"c_cpp.debuggers.logging.trace.description": "Opcjonalna flaga określająca, czy śledzenie polecenia adaptera diagnostycznego powinno być rejestrowane w konsoli debugowania. Wartość domyślna to false.",
"c_cpp.debuggers.logging.traceResponse.description": "Opcjonalna flaga określająca, czy śledzenie polecenia adaptera diagnostycznego i odpowiedzi powinno być rejestrowane w konsoli debugowania. Wartość domyślna to false.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Opcjonalna flaga określająca, czy komunikaty dotyczące zamknięcia wątku powinny być rejestrowane w konsoli debugowania. Wartość domyślna to „false”.",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Opcjonalna flaga określająca, czy komunikaty dotyczące zamknięcia procesu docelowego powinny być rejestrowane w konsoli debugowania, czy debugowanie ma zostać zatrzymane. Wartość domyślna: „true”.",
"c_cpp.debuggers.text.description": "Polecenie debugera do wykonania.",
"c_cpp.debuggers.description.description": "Opcjonalny opis polecenia.",
"c_cpp.debuggers.ignoreFailures.description": "Jeśli wartość to true, niepowodzenia polecenia powinny być ignorowane. Wartość domyślna to false.",
@@ -10,6 +10,7 @@
"debugger.not.available": "Debuger typu: „{0}” jest dostępny tylko w systemie Windows. Użyj typu: „{1}” na bieżącej platformie systemu operacyjnego.",
"lldb.framework.install.xcode": "Więcej informacji",
"lldb.framework.not.found": "Nie można zlokalizować elementu „LLDB.framework” dla narzędzia lldb-mi. Zainstaluj środowisko XCode lub narzędzia wiersza polecenia środowiska XCode.",
"debugger.launchConfig": "Konfiguracja uruchamiania:",
"lldb.find.failed": "Brak zależności „{0}” dla pliku wykonywalnego lldb-mi.",
"lldb.search.paths": "Wyszukano w:",
"lldb.install.help": "Aby rozwiązać ten problem, zainstaluj środowisko XCode za pośrednictwem sklepu Apple App Store lub zainstaluj narzędzia wiersza polecenia środowiska XCode, uruchamiając polecenie „{0}” w oknie terminala.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Nie można wykonać zapytania dotyczącego kompilatora. Powrót do braku liczby bitów.",
"intellisense_client_creation_aborted": "Przerwano tworzenie klienta IntelliSense: {0}",
"include_errors_config_provider_intellisense_disabled ": "Wykryto błędy #include na podstawie informacji podanych przez ustawienie configurationProvider. Funkcje IntelliSense dla tej jednostki tłumaczeniowej ({0}) będą udostępniane przez analizator tagów.",
"include_errors_config_provider_squiggles_disabled ": "Wykryto błędy #include na podstawie informacji podanych przez ustawienie configurationProvider. Zygzaki dla tej jednostki tłumaczeniowej ({0}) są wyłączone."
"include_errors_config_provider_squiggles_disabled ": "Wykryto błędy #include na podstawie informacji podanych przez ustawienie configurationProvider. Zygzaki dla tej jednostki tłumaczeniowej ({0}) są wyłączone.",
"preprocessor_keyword": "słowo kluczowe preprocesora",
"c_keyword": "Słowo kluczowe języka C",
"cpp_keyword": "Słowo kluczowe języka C++",
"overload": "+1 przeciążenie",
"overloads": "Przeciążenia: +%d",
"specialization": "+1 specjalizacja",
"specializations": "Specjalizacje: +%d",
"expands_to": "Jest rozwijane do:",
"file_label": "Plik:",
"parameters_label": "Parametry:",
"returns_label": "Zwraca:",
"deprecated_label": "Przestarzałe:",
"exceptions_label": "Wyjątki:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "true para processar somente os arquivos direta ou indiretamente incluídos como cabeçalhos, false para processar todos os arquivos nos caminhos de inclusão especificados.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Caminho para o banco de dados de símbolo gerado. Se um caminho relativo for especificado, ele será criado em relação ao local de armazenamento padrão do workspace.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Uma lista de caminhos para o analisador de marca usar durante a pesquisa de cabeçalhos incluídos. A pesquisa nesses caminhos é recursiva por padrão. Especifique '*' para indicar pesquisa não recursiva. Por exemplo: '/usr/include' pesquisará por todos os subdiretórios enquanto '/usr/include/*' não pesquisará.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Variáveis personalizadas que podem ser consultadas por meio do comando ${cpptools:activeConfigCustomVariable} a serem usadas para as variáveis de entrada no launch.json ou tasks.json.",
"c_cpp_properties.schema.json.definitions.env": "Variáveis personalizadas que podem ser reutilizadas em qualquer lugar neste arquivo usando a sintaxe ${variável} ou ${env:variável}.",
"c_cpp_properties.schema.json.definitions.version": "Versão do arquivo de configuração. Esta propriedade é gerenciada pela extensão. Não a altere.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Controla se a extensão relatará erros detectados em c_cpp_properties.json."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "O valor a ser usado em uma configuração se a opção \"browse.limitSymbolsToIncludedHeaders\" não for especificada ou estiver definida como \"${default}\".",
"c_cpp.configuration.default.systemIncludePath.description": "O valor a ser usado para o caminho de inclusão do sistema. Se definido, substitui o caminho de inclusão do sistema adquirido por meio das configurações \"compilerPath\" e \"compileCommands\".",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Controla se a extensão relatará erros detectados em c_cpp_properties.json.",
"c_cpp.configuration.default.customConfigurationVariables.description": "O valor a ser usado em uma configuração se \"customConfigurationVariables\" não for definido ou os valores a serem inseridos se \"${default}\" estiver presente como uma chave em \"customConfigurationVariables\".",
"c_cpp.configuration.updateChannel.description": "Defina como \"Insiders\" para baixar e instalar automaticamente os builds mais recentes do Insiders para a extensão, que incluem recursos futuros e correções de bugs.",
"c_cpp.configuration.experimentalFeatures.description": "Controla se os recursos \"experimentais\" podem ser usados.",
"c_cpp.configuration.suggestSnippets.description": "Se for true, os snippets serão fornecidos pelo servidor de idiomas.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "O comando do pipe totalmente qualificado para executar.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Argumentos da linha de comando passados para o programa do pipe para configurar a conexão.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Variáveis de ambiente passadas para o programa do pipe.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Se os argumentos individuais do pipeProgram contiverem caracteres (como espaços ou tabulações), eles deverão ser colocados entre aspas? Se 'false', o comando debugger não será mais colocado entre aspas automaticamente. \nO padrão é 'true'.",
"c_cpp.debuggers.logging.description": "Sinalizadores opcionais para determinar quais tipos de mensagens devem ser registrados no Console de Depuração.",
"c_cpp.debuggers.logging.exceptions.description": "Sinalizador opcional para determinar se as mensagens de exceção devem ser registradas no Console de Depuração. Usa true como padrão.",
"c_cpp.debuggers.logging.moduleLoad.description": "Sinalizador opcional para determinar se os eventos de carregamento do módulo devem ser registrados no Console de Depuração. Usa true como padrão.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Sinalizador opcional para determinar se as mensagens do mecanismo de depuração de diagnóstico devem ser registradas no Console de Depuração. Usa false como padrão.",
"c_cpp.debuggers.logging.trace.description": "Sinalizador opcional para determinar se o rastreamento de comandos do adaptador de diagnóstico deve ser registrado no Console de Depuração. Usa false como padrão.",
"c_cpp.debuggers.logging.traceResponse.description": "Sinalizador opcional para determinar se o rastreamento de resposta e de comandos do adaptador de diagnóstico deve ser registrado no Console de Depuração. Usa false como padrão.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Sinalizador opcional para determinar se as mensagens de saída do thread devem ser registradas no Console de Depuração. Padrão: `false`.",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Sinalizador opcional para determinar se o processo de destino sai das mensagens que devem ser registradas no Console de Depuração ou a depuração é interrompida. Padrão: `true`.",
"c_cpp.debuggers.text.description": "O comando do depurador a se executar.",
"c_cpp.debuggers.description.description": "Descrição opcional para o comando.",
"c_cpp.debuggers.ignoreFailures.description": "Se for true, as falhas do comando deverão ser ignoradas. O valor padrão é false.",
@@ -10,6 +10,7 @@
"debugger.not.available": "Depurador do tipo: '{0}' só está disponível no Windows. Use o tipo: '{1}' na plataforma do SO atual.",
"lldb.framework.install.xcode": "Mais Informações",
"lldb.framework.not.found": "Não é possível localizar 'LLDB.framework' para lldb-mi. Instale o XCode ou as Ferramentas de Linha de Comando do XCode.",
"debugger.launchConfig": "Iniciar configuração:",
"lldb.find.failed": "Dependência ausente '{0}' no executável lldb-mi.",
"lldb.search.paths": "Pesquisado em:",
"lldb.install.help": "Para resolver esse problema, instale o XCode por meio da Apple App Store ou instale as Ferramentas de Linha de Comando do XCode executando '{0}' em uma janela de Terminal.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Falha ao consultar o compilador. Voltando para nenhum número de bit.",
"intellisense_client_creation_aborted": "Criação de cliente do IntelliSense anulada: {0}",
"include_errors_config_provider_intellisense_disabled ": "#inclui erros detectados com base nas informações fornecidas pela configuração configurationProvider. Os recursos do IntelliSense para essa unidade de conversão ({0}) serão fornecidos pelo Analisador de Marca.",
"include_errors_config_provider_squiggles_disabled ": "#inclui erros detectados com base nas informações fornecidas pela configuração configurationProvider. Os rabiscos estão desabilitados para esta unidade de tradução ({0})."
"include_errors_config_provider_squiggles_disabled ": "#inclui erros detectados com base nas informações fornecidas pela configuração configurationProvider. Os rabiscos estão desabilitados para esta unidade de tradução ({0}).",
"preprocessor_keyword": "palavra-chave do pré-processador",
"c_keyword": "Palavra-chave C",
"cpp_keyword": "Palavra-chave C++",
"overload": "Mais 1 sobrecarga",
"overloads": "Mais %d sobrecargas",
"specialization": "Mais 1 especialização",
"specializations": "Mais %d especializações",
"expands_to": "Expande para:",
"file_label": "Arquivo:",
"parameters_label": "Parâmetros:",
"returns_label": "Retorna:",
"deprecated_label": "Preterido:",
"exceptions_label": "Exceções:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "При значении true (истина) будут обрабатываться только файлы, прямо или косвенно включенные как файлы заголовков, а при значении false (ложь) — все файлы по указанным путям для включений.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Путь к создаваемой базе данных символов. При указании относительного пути он будет отсчитываться от используемого в рабочей области места хранения по умолчанию.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Список путей для анализатора тегов, используемый при поиске включаемых файлов заголовков. Поиск по этим путям по умолчанию рекурсивный. Чтобы использовать нерекурсивный, укажите \"*\". Например, если указать \"/usr/include\", будет выполнен поиск по всем подкаталогам, а если \"/usr/include/*\" — не будет.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "Пользовательские переменные, которые можно запросить с помощью команды ${cpptools:activeConfigCustomVariable}, чтобы использовать в качестве входных переменных в файле launch.js или tasks.js.",
"c_cpp_properties.schema.json.definitions.env": "Пользовательские переменные, которые могут многократно применяться в любом месте этого файла с помощью синтаксиса ${переменная} или ${env:переменная}.",
"c_cpp_properties.schema.json.definitions.version": "Версия файла конфигурации. Этим свойством управляет расширение. Не изменяйте его.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Определяет, будет ли расширение сообщать об ошибках, обнаруженных в c_cpp_properties.json."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "Значение, используемое в конфигурации, если параметр \"browse.limitSymbolsToIncludedHeaders\" не указан или имеет значение \"${default}\".",
"c_cpp.configuration.default.systemIncludePath.description": "Значение, используемое для системного пути включения. Если этот параметр задан, он переопределяет системный путь включения, полученный с помощью параметров \"compilerPath\" и \"compileCommands\".",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Определяет, будет ли расширение сообщать об ошибках, обнаруженных в c_cpp_properties.json.",
"c_cpp.configuration.default.customConfigurationVariables.description": "Значение, используемое в конфигурации, если параметр \"customConfigurationVariables\" не установлен, или вставляемые значения, если в \"customConfigurationVariables\" присутствует значение \"${default}\" в качестве ключа.",
"c_cpp.configuration.updateChannel.description": "Укажите значение \"Участники программы предварительной оценки\", чтобы автоматически скачать и установить последние сборки программы предварительной оценки, включающие в себя запланированные функции и исправления ошибок.",
"c_cpp.configuration.experimentalFeatures.description": "Определяет, можно ли использовать \"экспериментальные\" функции.",
"c_cpp.configuration.suggestSnippets.description": "Если задано значение true, фрагменты кода предоставляются языковым сервером.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Полная команда канала для выполнения.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Аргументы командной строки, переданные в программу канала для настройки подключения.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Переменные среды, переданные в программу канала.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "Определяет, должны ли быть заключены в кавычки отдельные аргументы pipeProgram, если эти аргументы содержат символы (такие как пробелы или символы табуляции). Если задано значение \"false\", команда отладчика больше не будет автоматически заключаться в кавычки. \nЗначение по умолчанию — \"true\".",
"c_cpp.debuggers.logging.description": "Необязательные флаги для определения типов сообщений, регистрируемых в консоли отладки.",
"c_cpp.debuggers.logging.exceptions.description": "Необязательный флаг, определяющий, следует ли регистрировать сообщения об исключениях в консоли отладки. По умолчанию принимает значение true.",
"c_cpp.debuggers.logging.moduleLoad.description": "Необязательный флаг, определяющий, следует ли регистрировать события загрузки модулей в консоли отладки. По умолчанию принимает значение true.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Необязательный флаг, определяющий, следует ли регистрировать сообщения диагностического модуля отладки в консоли отладки. По умолчанию принимает значение false.",
"c_cpp.debuggers.logging.trace.description": "Необязательный флаг, определяющий, следует ли регистрировать трассировку команд диагностического адаптера в консоли отладки. По умолчанию принимает значение false.",
"c_cpp.debuggers.logging.traceResponse.description": "Необязательный флаг, определяющий, следует ли регистрировать трассировку команд и ответов диагностического адаптера в консоли отладки. По умолчанию принимает значение false.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Необязательный флаг, определяющий, следует ли записывать сообщения о выходе для потоков в консоль отладки. Значение по умолчанию: \"false\".",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Необязательный флаг, определяющий, следует ли записывать сообщения о выходе для целевого процесса в консоль отладки или останавливать отладку. Значение по умолчанию: \"true\".",
"c_cpp.debuggers.text.description": "Команда отладчика для выполнения.",
"c_cpp.debuggers.description.description": "Необязательное описание команды.",
"c_cpp.debuggers.ignoreFailures.description": "Если задано значение true, сбои этой команды должны игнорироваться. Значение по умолчанию — false.",
@@ -10,6 +10,7 @@
"debugger.not.available": "Отладчик типа \"{0}\" доступен только в Windows. Используйте тип \"{1}\" на текущей платформе ОС.",
"lldb.framework.install.xcode": "Дополнительные сведения",
"lldb.framework.not.found": "Не удается найти \"LLDB.framework\" для lldb-mi. Установите XCode или средства командной строки XCode.",
"debugger.launchConfig": "Конфигурация запуска:",
"lldb.find.failed": "Отсутствует зависимость \"{0}\" для исполняемого файла lldb-mi.",
"lldb.search.paths": "Поиск был выполнен в следующих расположениях:",
"lldb.install.help": "Чтобы устранить эту проблему, установите XCode через Apple App Store или установите средства командной строки XCode, выполнив команду \"{0}\" в окне терминала.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Не удалось запросить сведения от компилятора. Возврат к режиму без использования разрядности.",
"intellisense_client_creation_aborted": "Создание клиента IntelliSense прервано: {0}",
"include_errors_config_provider_intellisense_disabled ": "обнаружены ошибки #include на основе сведений, предоставленных параметром configurationProvider. Функции IntelliSense для этой записи преобразования ({0}) будут предоставлены анализатором тегов.",
"include_errors_config_provider_squiggles_disabled ": "Обнаружены ошибки #include на основе сведений, предоставленных параметром configurationProvider. Волнистые линии для этой записи преобразования ({0}) отключены."
"include_errors_config_provider_squiggles_disabled ": "Обнаружены ошибки #include на основе сведений, предоставленных параметром configurationProvider. Волнистые линии для этой записи преобразования ({0}) отключены.",
"preprocessor_keyword": "ключевое слово препроцессора",
"c_keyword": "Ключевое слово C",
"cpp_keyword": "Ключевое слово C++",
"overload": "и еще одна перегрузка",
"overloads": "и другие перегрузки (%d)",
"specialization": "и еще одна специализация",
"specializations": "и другие специализации (%d)",
"expands_to": "Расширяется в:",
"file_label": "Файл:",
"parameters_label": "Параметры:",
"returns_label": "Возвращает:",
"deprecated_label": "Нерекомендуемый:",
"exceptions_label": "Исключения:"
}
@@ -20,6 +20,7 @@
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.limitSymbolsToIncludedHeaders": "yalnızca doğrudan veya dolaylı olarak üst bilgi olarak dahil edilen dosyaları işlemek için true, belirtilen ekleme yolları altındaki tüm dosyaları işlemek için false.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.databaseFilename": "Oluşturulan sembol veritabanının yolu. Göreli bir yol belirtilirse, çalışma alanının varsayılan depolama konumuna göreli hale getirilir.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.browse.properties.path": "Etiket ayrıştırıcısının eklenen üst bilgileri ararken kullanacağı yol listesi. Bu yollarda arama varsayılan olarak özyinelemelidir. Özyinelemeli olmayan aramayı göstermek için '*' belirtin. Örneğin: '/usr/include' tüm alt dizinlerde arar ancak '/usr/include/*' aramaz.",
"c_cpp_properties.schema.json.definitions.configurations.items.properties.customConfigurationVariables": "launch.json veya tasks.json içindeki giriş bağımsız değişkenleri için kullanılacak, ${cpptools:activeConfigCustomVariable} komutu aracılığıyla sorgulanabilen özel değişkenler.",
"c_cpp_properties.schema.json.definitions.env": "${değişken} veya ${env:değişken} söz dizimi kullanılarak bu dosyada herhangi bir yerde yeniden kullanılabilen özel değişkenler.",
"c_cpp_properties.schema.json.definitions.version": "Yapılandırma dosyasının sürümü. Bu özellik uzantı tarafından yönetilir. Lütfen değiştirmeyin.",
"c_cpp_properties.schema.json.definitions.enableConfigurationSquiggles": "Uzantının c_cpp_properties.json dosyasında algılanan hataları bildirip bildirmeyeceğini denetler."
+4
View File
@@ -65,6 +65,7 @@
"c_cpp.configuration.default.browse.limitSymbolsToIncludedHeaders.description": "\"browse.limitSymbolsToIncludedHeaders\" belirtilmemişse veya \"${default}\" olarak ayarlanmamışsa bir yapılandırmada kullanılacak değer.",
"c_cpp.configuration.default.systemIncludePath.description": "Sistem ekleme yolu için kullanılacak değer. Ayarlanırsa \"compilerPath\" ve \"compileCommands\" ayarları aracılığıyla elde edilen sistem ekleme yolunu geçersiz kılar.",
"c_cpp.configuration.default.enableConfigurationSquiggles.description": "Uzantının c_cpp_properties.json dosyasında algılanan hataları bildirip bildirmeyeceğini denetler.",
"c_cpp.configuration.default.customConfigurationVariables.description": "\"customConfigurationVariables\" ayarlanmamışsa bir yapılandırmada kullanılacak değer veya \"customConfigurationVariables\" içinde anahtar olarak \"${default}\" varsa eklenecek değerler.",
"c_cpp.configuration.updateChannel.description": "Uzantının, gelecek özellikleri ve hata düzeltmelerini de içeren en son Insider üyeleri derlemelerini otomatik olarak indirip yüklemek için \"Insider üyeleri\" olarak ayarlayın.",
"c_cpp.configuration.experimentalFeatures.description": "\"Deneysel\" özelliklerin kullanılabilir olup olmadığını denetler.",
"c_cpp.configuration.suggestSnippets.description": "Değer true ise, kod parçacıkları dil sunucusu tarafından sağlanır.",
@@ -82,6 +83,7 @@
"c_cpp.debuggers.pipeTransport.pipeProgram.description": "Çalıştırılacak tam kanal komutu.",
"c_cpp.debuggers.pipeTransport.pipeArgs.description": "Bağlantıyı yapılandırmak için kanal programına geçirilen komut satırı bağımsız değişkenleri.",
"c_cpp.debuggers.pipeTransport.pipeEnv.description": "Kanal programına geçirilen ortam değişkenleri.",
"c_cpp.debuggers.pipeTransport.quoteArgs.description": "pipeProgram'a ait tek tek bağımsız değişkenler, boşluk veya sekme gibi karakterler içeriyorsa bunlar tırnak içine alınmalı mı? 'False' olarak ayarlanırsa, hata ayıklayıcısı komutu otomatik olarak tırnak içine alınmaz. \nVarsayılan değer: 'true'.",
"c_cpp.debuggers.logging.description": "Hata Ayıklama Konsoluna ne tür iletilerin kaydedilmesi gerektiğini belirleyen isteğe bağlı bayraklar.",
"c_cpp.debuggers.logging.exceptions.description": "Özel durum iletilerinin Hata Ayıklama Konsoluna kaydedilmesi gerekip gerekmediğini belirleyen isteğe bağlı bayrak. Varsayılan olarak true değerini alır.",
"c_cpp.debuggers.logging.moduleLoad.description": "Modül yükleme olaylarının Hata Ayıklama Konsoluna kaydedilmesi gerekip gerekmediğini belirleyen isteğe bağlı bayrak. Varsayılan olarak true değerini alır.",
@@ -89,6 +91,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Tanılama hata ayıklama altyapısı iletilerinin Hata Ayıklama Konsoluna kaydedilmesi gerekip gerekmediğini belirleyen isteğe bağlı bayrak. Varsayılan olarak false değerini alır.",
"c_cpp.debuggers.logging.trace.description": "Tanılama bağdaştırıcısı komut izlemenin Hata Ayıklama Konsoluna kaydedilmesi gerekip gerekmediğini belirleyen isteğe bağlı bayrak. Varsayılan olarak false değerini alır.",
"c_cpp.debuggers.logging.traceResponse.description": "Tanılama bağdaştırıcısı komut ve yanıt izlemenin Hata Ayıklama Konsoluna kaydedilmesi gerekip gerekmediğini belirleyen isteğe bağlı bayrak. Varsayılan olarak false değerini alır.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "İş parçacığı çıkışı iletilerinin Hata Ayıklama Konsolu'na kaydedilmesinin gerekip gerekmediğini belirleyen isteğe bağlı bayrak. Varsayılan: `false`.",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Hedef işlem çıkışı iletilerinin Hata Ayıklama Konsolu'na kaydedilmesinin gerekip gerekmediğini veya hata ayıklama işleminin durdurulup durdurulmadığını belirleyen isteğe bağlı bayrak. Varsayılan: `true`.",
"c_cpp.debuggers.text.description": "Çalıştırılacak hata ayıklayıcısı komutu.",
"c_cpp.debuggers.description.description": "Komut için isteğe bağlı açıklama.",
"c_cpp.debuggers.ignoreFailures.description": "Değer true ise komuttan gönderilen hatalar yoksayılmalıdır. Varsayılan olarak false değerini alır.",
@@ -10,6 +10,7 @@
"debugger.not.available": "'{0}' türündeki hata ayıklayıcısı yalnızca Windows'da kullanılabilir. Geçerli işletim sistemi platformunda '{1}' türünü kullanın.",
"lldb.framework.install.xcode": "Daha Fazla Bilgi",
"lldb.framework.not.found": "lldb-mi için 'LLDB.framework' bulunamıyor. Lütfen XCode'u veya XCode Komut Satırı Araçları'nı yükleyin.",
"debugger.launchConfig": "Yapılandırmayı başlat:",
"lldb.find.failed": "lldb-mi yürütülebilir dosyası için '{0}' bağımlılığı eksik.",
"lldb.search.paths": "Şurada arandı:",
"lldb.install.help": "Bu sorunu çözmek için, Apple App Store üzerinden XCode'u yükleyin ya da bir Terminal penceresinde '{0}' çalıştırarak XCode Komut Satırı Araçları'nı yükleyin.",
+14 -1
View File
@@ -162,5 +162,18 @@
"fallback_to_no_bitness": "Derleyici sorgulanamadı. Bit genişliği yok durumuna geri dönülüyor.",
"intellisense_client_creation_aborted": "IntelliSense istemcisi oluşturma işlemi durduruldu: {0}",
"include_errors_config_provider_intellisense_disabled ": "configurationProvider ayarı tarafından sağlanan bilgilere göre #include hataları saptandı. Bu çeviri birimi ({0}) için IntelliSense özellikleri Etiket Ayrıştırıcısı tarafından sağlanır.",
"include_errors_config_provider_squiggles_disabled ": "configurationProvider ayarı tarafından sağlanan bilgilere göre #include hataları saptandı. Bu çeviri birimi ({0}) için dalgalı çizgiler devre dışı bırakıldı."
"include_errors_config_provider_squiggles_disabled ": "configurationProvider ayarı tarafından sağlanan bilgilere göre #include hataları saptandı. Bu çeviri birimi ({0}) için dalgalı çizgiler devre dışı bırakıldı.",
"preprocessor_keyword": "ön işlemci anahtar sözcüğü",
"c_keyword": "C anahtar sözcüğü",
"cpp_keyword": "C++ anahtar sözcüğü",
"overload": "1 aşırı yükleme daha",
"overloads": "%d aşırı yükleme daha",
"specialization": "1 özelleştirme daha",
"specializations": "%d özelleştirme daha",
"expands_to": "Şu öğeye genişler:",
"file_label": "Dosya:",
"parameters_label": "Parametreler:",
"returns_label": "Şunu döndürür:",
"deprecated_label": "Kullanım dışı:",
"exceptions_label": "Özel durumlar:"
}
+159 -9
View File
@@ -2,7 +2,7 @@
"name": "cpptools",
"displayName": "C/C++",
"description": "C/C++ IntelliSense, debugging, and code browsing.",
"version": "0.29.0-master",
"version": "0.29.0",
"publisher": "ms-vscode",
"preview": true,
"icon": "LanguageCCPP_color_128x.png",
@@ -12,7 +12,7 @@
},
"license": "SEE LICENSE IN LICENSE.txt",
"engines": {
"vscode": "^1.43.0"
"vscode": "^1.44.0"
},
"bugs": {
"url": "https://github.com/Microsoft/vscode-cpptools/issues",
@@ -250,6 +250,12 @@
"description": "%c_cpp.configuration.preferredPathSeparator.description%",
"scope": "machine-overridable"
},
"C_Cpp.simplifyStructuredComments": {
"type": "boolean",
"default": true,
"description": "%c_cpp.configuration.simplifyStructuredComments.description%",
"scope": "application"
},
"C_Cpp.commentContinuationPatterns": {
"type": "array",
"default": [
@@ -979,7 +985,7 @@
"quoteArgs": {
"exceptions": {
"type": "boolean",
"description": "%c_cpp.debuggers.logging.quoteArgs.description%",
"description": "%c_cpp.debuggers.pipeTransport.quoteArgs.description%",
"default": true
}
}
@@ -1172,7 +1178,7 @@
"quoteArgs": {
"exceptions": {
"type": "boolean",
"description": "%c_cpp.debuggers.logging.quoteArgs.description%",
"description": "%c_cpp.debuggers.pipeTransport.quoteArgs.description%",
"default": true
}
}
@@ -1353,6 +1359,16 @@
"type": "boolean",
"description": "%c_cpp.debuggers.logging.engineLogging.description%",
"default": false
},
"threadExit": {
"type": "boolean",
"description": "%c_cpp.debuggers.cppvsdbg.logging.threadExit.description%",
"default": false
},
"processExit": {
"type": "boolean",
"description": "%c_cpp.debuggers.cppvsdbg.logging.processExit.description%",
"default": true
}
}
},
@@ -1529,16 +1545,150 @@
"configurationDefaults": {
"[cpp]": {
"editor.wordBasedSuggestions": false,
"editor.suggest.insertMode": "replace"
"editor.suggest.insertMode": "replace",
"editor.semanticHighlighting.enabled": true
},
"[c]": {
"editor.wordBasedSuggestions": false,
"editor.suggest.insertMode": "replace"
"editor.suggest.insertMode": "replace",
"editor.semanticHighlighting.enabled": true
},
"[Log]": {
"editor.wordWrap": "off"
}
}
},
"semanticTokenTypes": [
{
"id": "referenceType",
"superType": "class",
"description": "A C++/CLI reference type."
},
{
"id": "cliProperty",
"superType": "property",
"description": "A C++/CLI property."
},
{
"id": "genericType",
"superType": "class",
"description": "A C++/CLI generic type."
},
{
"id": "valueType",
"superType": "class",
"description": "A C++/CLI value type."
},
{
"id": "templateFunction",
"superType": "function",
"description": "A template function."
},
{
"id": "templateType",
"superType": "class",
"description": "A template type."
},
{
"id": "operatorOverload",
"superType": "operator",
"description": "An overloaded operator."
},
{
"id": "memberOperatorOverload",
"superType": "operator",
"description": "An overloaded operator member function."
},
{
"id": "newOperator",
"superType": "operator",
"description": "A C++ new or delete operator."
},
{
"id": "customLiteral",
"superType": "number",
"description": "A user-defined literal."
},
{
"id": "numberLiteral",
"superType": "number",
"description": "A user-defined literal number."
},
{
"id": "stringLiteral",
"superType": "string",
"description": "A user-defined literal string."
}
],
"semanticTokenModifiers": [
{
"id": "global",
"description": "Annotates a symbol that is declared in global scope."
},
{
"id": "local",
"description": "Annotates a symbol that is declared in local scope."
}
],
"semanticTokenScopes": [
{
"scopes": {
"label": [
"entity.name.label"
],
"variable.global": [
"variable.other.global"
],
"variable.local": [
"variable.other.local"
],
"property.static": [
"variable.other.property.static"
],
"member.static": [
"entity.name.function.member.static"
],
"macro": [
"entity.name.function.preprocessor"
],
"referenceType": [
"entity.name.type.class.reference"
],
"cliProperty": [
"variable.other.property.cli"
],
"genericType": [
"entity.name.type.class.generic"
],
"valueType": [
"entity.name.type.class.value"
],
"templateFunction": [
"entity.name.function.templated"
],
"templateType": [
"entity.name.type.class.templated"
],
"operatorOverload": [
"entity.name.function.operator"
],
"memberOperatorOverload": [
"entity.name.function.operator.member"
],
"newOperator": [
"keyword.operator.new"
],
"numberLiteral": [
"entity.name.operator.custom-literal.number"
],
"customLiteral": [
"entity.name.operator.custom-literal"
],
"stringLiteral": [
"entity.name.operator.custom-literal.string"
]
}
}
]
},
"scripts": {
"vscode:prepublish": "yarn run compile",
@@ -1569,7 +1719,7 @@
"@types/plist": "^3.0.2",
"@types/semver": "^7.1.0",
"@types/tmp": "^0.1.0",
"@types/vscode": "1.43.0",
"@types/vscode": "1.44.0",
"@types/webpack": "^4.39.0",
"@types/which": "^1.3.2",
"@types/yauzl": "^2.9.1",
@@ -1606,7 +1756,7 @@
"ts-loader": "^6.0.4",
"tslint": "^5.19.0",
"typescript": "^3.5.3",
"vscode-cpptools": "^3.1.0",
"vscode-cpptools": "^4.0.1",
"vscode-debugadapter": "^1.35.0",
"vscode-debugprotocol": "^1.35.0",
"vscode-extension-telemetry": "^0.1.2",
+5 -2
View File
@@ -36,6 +36,7 @@
"c_cpp.configuration.workspaceSymbols.description": "The symbols to include in the query results when 'Go to Symbol in Workspace' is invoked",
"c_cpp.configuration.exclusionPolicy.description": "Instructs the extension when to use the \"files.exclude\" setting when determining which files should be added to the code navigation database while traversing through the paths in the \"browse.path\" array. \"checkFolders\" means that the exclusion filters will only be evaluated once per folder (individual files are not checked). \"checkFilesAndFolders\" means that the exclusion filters will be evaluated against every file and folder encountered. If your \"files.exclude\" setting only contains folders, then \"checkFolders\" is the best choice and will increase the speed at which the extension can initialize the code navigation database.",
"c_cpp.configuration.preferredPathSeparator.description": "The character used as a path separator for #include auto-completion results.",
"c_cpp.configuration.simplifyStructuredComments.description": "If true, tooltips of hover and auto-complete will only display certain labels of structured comments. Otherwise, all comments are displayed.",
"c_cpp.configuration.commentContinuationPatterns.items.anyof.string.description": "The pattern that begins a multiline or single line comment block. The continuation pattern defaults to ' * ' for multiline comment blocks or this string for single line comment blocks.",
"c_cpp.configuration.commentContinuationPatterns.items.anyof.object.begin.description": "The pattern that begins a multiline or single line comment block.",
"c_cpp.configuration.commentContinuationPatterns.items.anyof.object.continue.description": "The text that will be inserted on the next line when Enter is pressed inside a multiline or single line comment block.",
@@ -43,7 +44,7 @@
"c_cpp.configuration.configurationWarnings.description": "Determines whether pop up notifications will be shown when a configuration provider extension is unable to provide a configuration for a source file.",
"c_cpp.configuration.intelliSenseCachePath.description": "Defines the folder path for cached precompiled headers used by IntelliSense. The default cache path is \"%LocalAppData%/Microsoft/vscode-cpptools\" on Windows, \"$XDG_CACHE_HOME/vscode-cpptools/\" on Linux (or \"$HOME/.cache/vscode-cpptools/\" if XDG_CACHE_HOME is not defined), and \"$HOME/Library/Caches/vscode-cpptools/\" on Mac. The default path will be used if no path is specified or if a specified path is invalid.",
"c_cpp.configuration.intelliSenseCacheSize.description": "Maximum size of the per-workspace hard drive space in megabytes for cached precompiled headers; the actual usage may fluctuate around this value. The default size is 5120 MB. Precompiled header caching is disabled when the size is 0.",
"c_cpp.configuration.default.includePath.description": "The value to use in a configuration if \"includePath\" is not specified, or the values to insert if \"${default}\" is present in \"includePath\".",
"c_cpp.configuration.default.includePath.description": "The value to use in a configuration if \"includePath\" is not specified in c_cpp_properties.json. If \"includePath\" is specified, add \"${default}\" to the array to insert the values from this setting.",
"c_cpp.configuration.default.defines.description": "The value to use in a configuration if \"defines\" is not specified, or the values to insert if \"${default}\" is present in \"defines\".",
"c_cpp.configuration.default.macFrameworkPath.description": "The value to use in a configuration if \"macFrameworkPath\" is not specified, or the values to insert if \"${default}\" is present in \"macFrameworkPath\".",
"c_cpp.configuration.default.windowsSdkVersion.description": "Version of the Windows SDK include path to use on Windows, e.g. '10.0.17134.0'.",
@@ -64,7 +65,7 @@
"c_cpp.configuration.updateChannel.description": "Set to \"Insiders\" to automatically download and install the latest Insiders builds of the extension, which include upcoming features and bug fixes.",
"c_cpp.configuration.experimentalFeatures.description": "Controls whether \"experimental\" features are usable.",
"c_cpp.configuration.suggestSnippets.description": "If true, snippets are provided by the language server.",
"c_cpp.configuration.enhancedColorization.description": "If enabled, code is colorized based on IntelliSense. This setting has no effect if IntelliSense is disabled or if using the Default High Contrast theme.",
"c_cpp.configuration.enhancedColorization.description": "If enabled, code is colorized based on IntelliSense. This setting only applies if intelliSenseEngine is set to \"Default\".",
"c_cpp.configuration.codeFolding.description": "If enabled, code folding ranges are provided by the language server.",
"c_cpp.configuration.vcpkg.enabled.markdownDescription": "Enable integration services for the [vcpkg dependency manager](https://aka.ms/vcpkg/).",
"c_cpp.configuration.renameRequiresIdentifier.description": "If true, 'Rename Symbol' will require a valid C/C++ identifier.",
@@ -86,6 +87,8 @@
"c_cpp.debuggers.logging.engineLogging.description": "Optional flag to determine whether diagnostic debug engine messages should be logged to the Debug Console. Defaults to false.",
"c_cpp.debuggers.logging.trace.description": "Optional flag to determine whether diagnostic adapter command tracing should be logged to the Debug Console. Defaults to false.",
"c_cpp.debuggers.logging.traceResponse.description": "Optional flag to determine whether diagnostic adapter command and response tracing should be logged to the Debug Console. Defaults to false.",
"c_cpp.debuggers.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exits messages should be logged to the Debug Console. Default: `false`.",
"c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exits messages should be logged to the Debug Console., or debugging is stopped. Default: `true`.",
"c_cpp.debuggers.text.description": "The debugger command to execute.",
"c_cpp.debuggers.description.description": "Optional description for the command.",
"c_cpp.debuggers.ignoreFailures.description": "If true, failures from the command should be ignored. Default value is false.",
+82 -72
View File
@@ -188,85 +188,95 @@ class CppConfigurationProvider implements vscode.DebugConfigurationProvider {
* Try to add all missing attributes to the debug configuration being launched.
*/
resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken): vscode.ProviderResult<vscode.DebugConfiguration> {
if (config) {
if (config.type === 'cppvsdbg') {
// Fail if cppvsdbg type is running on non-Windows
if (os.platform() !== 'win32') {
logger.getOutputChannelLogger().showWarningMessage(localize("debugger.not.available", "Debugger of type: '{0}' is only available on Windows. Use type: '{1}' on the current OS platform.", "cppvsdbg", "cppdbg"));
return undefined;
}
// [Microsoft/vscode#54213] If config or type is not specified, return null to trigger VS Code to open a configuration file.
if (!config || !config.type) {
return null;
}
// Disable debug heap by default, enable if 'enableDebugHeap' is set.
if (!config.enableDebugHeap) {
const disableDebugHeapEnvSetting: Environment = {"name" : "_NO_DEBUG_HEAP", "value" : "1"};
if (config.environment && util.isArray(config.environment)) {
config.environment.push(disableDebugHeapEnvSetting);
} else {
config.environment = [disableDebugHeapEnvSetting];
}
}
if (config.type === 'cppvsdbg') {
// Fail if cppvsdbg type is running on non-Windows
if (os.platform() !== 'win32') {
logger.getOutputChannelLogger().showWarningMessage(localize("debugger.not.available", "Debugger of type: '{0}' is only available on Windows. Use type: '{1}' on the current OS platform.", "cppvsdbg", "cppdbg"));
return undefined;
}
// Add environment variables from .env file
this.resolveEnvFile(config, folder);
// Disable debug heap by default, enable if 'enableDebugHeap' is set.
if (!config.enableDebugHeap) {
const disableDebugHeapEnvSetting: Environment = {"name" : "_NO_DEBUG_HEAP", "value" : "1"};
this.resolveSourceFileMapVariables(config);
// Modify WSL config for OpenDebugAD7
if (os.platform() === 'win32' &&
config.pipeTransport &&
config.pipeTransport.pipeProgram) {
let replacedPipeProgram: string | undefined;
const pipeProgramStr: string = config.pipeTransport.pipeProgram.toLowerCase().trim();
// OpenDebugAD7 is a 32-bit process. Make sure the WSL pipe transport is using the correct program.
replacedPipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(pipeProgramStr, debugUtils.ArchType.ia32);
// If pipeProgram does not get replaced and there is a pipeCwd, concatenate with pipeProgramStr and attempt to replace.
if (!replacedPipeProgram && !path.isAbsolute(pipeProgramStr) && config.pipeTransport.pipeCwd) {
const pipeCwdStr: string = config.pipeTransport.pipeCwd.toLowerCase().trim();
const newPipeProgramStr: string = path.join(pipeCwdStr, pipeProgramStr);
replacedPipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(newPipeProgramStr, debugUtils.ArchType.ia32);
}
if (replacedPipeProgram) {
config.pipeTransport.pipeProgram = replacedPipeProgram;
}
}
const macOSMIMode: string = config.osx?.MIMode ?? config.MIMode;
const macOSMIDebuggerPath: string = config.osx?.miDebuggerPath ?? config.miDebuggerPath;
const lldb_mi_10_x_path: string = path.join(util.extensionPath, "debugAdapters", "lldb-mi", "bin", "lldb-mi");
// Validate LLDB-MI
if (os.platform() === 'darwin' && // Check for macOS
fs.existsSync(lldb_mi_10_x_path) && // lldb-mi 10.x exists
(!macOSMIMode || macOSMIMode === 'lldb') &&
!macOSMIDebuggerPath // User did not provide custom lldb-mi
) {
const frameworkPath: string | undefined = this.getLLDBFrameworkPath();
if (!frameworkPath) {
const moreInfoButton: string = localize("lldb.framework.install.xcode", "More Info");
const LLDBFrameworkMissingMessage: string = localize("lldb.framework.not.found", "Unable to locate 'LLDB.framework' for lldb-mi. Please install XCode or XCode Command Line Tools.");
vscode.window.showErrorMessage(LLDBFrameworkMissingMessage, moreInfoButton)
.then(value => {
if (value === moreInfoButton) {
const helpURL: string = "https://aka.ms/vscode-cpptools/LLDBFrameworkNotFound";
vscode.env.openExternal(vscode.Uri.parse(helpURL));
}
});
return undefined;
if (config.environment && util.isArray(config.environment)) {
config.environment.push(disableDebugHeapEnvSetting);
} else {
config.environment = [disableDebugHeapEnvSetting];
}
}
}
// if config or type is not specified, return null to trigger VS Code to open a configuration file https://github.com/Microsoft/vscode/issues/54213
return config && config.type ? config : null;
// Add environment variables from .env file
this.resolveEnvFile(config, folder);
this.resolveSourceFileMapVariables(config);
// Modify WSL config for OpenDebugAD7
if (os.platform() === 'win32' &&
config.pipeTransport &&
config.pipeTransport.pipeProgram) {
let replacedPipeProgram: string | undefined;
const pipeProgramStr: string = config.pipeTransport.pipeProgram.toLowerCase().trim();
// OpenDebugAD7 is a 32-bit process. Make sure the WSL pipe transport is using the correct program.
replacedPipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(pipeProgramStr, debugUtils.ArchType.ia32);
// If pipeProgram does not get replaced and there is a pipeCwd, concatenate with pipeProgramStr and attempt to replace.
if (!replacedPipeProgram && !path.isAbsolute(pipeProgramStr) && config.pipeTransport.pipeCwd) {
const pipeCwdStr: string = config.pipeTransport.pipeCwd.toLowerCase().trim();
const newPipeProgramStr: string = path.join(pipeCwdStr, pipeProgramStr);
replacedPipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(newPipeProgramStr, debugUtils.ArchType.ia32);
}
if (replacedPipeProgram) {
config.pipeTransport.pipeProgram = replacedPipeProgram;
}
}
const macOSMIMode: string = config.osx?.MIMode ?? config.MIMode;
const macOSMIDebuggerPath: string = config.osx?.miDebuggerPath ?? config.miDebuggerPath;
const lldb_mi_10_x_path: string = path.join(util.extensionPath, "debugAdapters", "lldb-mi", "bin", "lldb-mi");
// Validate LLDB-MI
if (os.platform() === 'darwin' && // Check for macOS
fs.existsSync(lldb_mi_10_x_path) && // lldb-mi 10.x exists
(!macOSMIMode || macOSMIMode === 'lldb') &&
!macOSMIDebuggerPath // User did not provide custom lldb-mi
) {
const frameworkPath: string | undefined = this.getLLDBFrameworkPath();
if (!frameworkPath) {
const moreInfoButton: string = localize("lldb.framework.install.xcode", "More Info");
const LLDBFrameworkMissingMessage: string = localize("lldb.framework.not.found", "Unable to locate 'LLDB.framework' for lldb-mi. Please install XCode or XCode Command Line Tools.");
vscode.window.showErrorMessage(LLDBFrameworkMissingMessage, moreInfoButton)
.then(value => {
if (value === moreInfoButton) {
const helpURL: string = "https://aka.ms/vscode-cpptools/LLDBFrameworkNotFound";
vscode.env.openExternal(vscode.Uri.parse(helpURL));
}
});
return undefined;
}
}
if (config.logging?.engineLogging) {
const outputChannel: logger.Logger = logger.getOutputChannelLogger();
outputChannel.appendLine(localize("debugger.launchConfig", "Launch configuration:"));
outputChannel.appendLine(JSON.stringify(config, undefined, 2));
logger.showOutputChannel();
}
return config;
}
private getLLDBFrameworkPath(): string | undefined {
+7 -2
View File
@@ -175,8 +175,13 @@ function execChildProcess(process: string, workingDirectory?: string): Promise<s
}
if (stderr && stderr.length > 0) {
reject(new Error(stderr));
return;
if (stderr.indexOf('screen size is bogus') >= 0) {
// ignore this error silently; see https://github.com/microsoft/vscode/issues/75932
// see similar fix for the Node - Debug (Legacy) Extension at https://github.com/microsoft/vscode-node-debug/commit/5298920
} else {
reject(new Error(stderr));
return;
}
}
resolve(stdout);
+263 -186
View File
@@ -30,9 +30,9 @@ import { getCustomConfigProviders, CustomConfigurationProvider1, isSameProviderE
import { ABTestSettings, getABTestSettings } from '../abTesting';
import * as fs from 'fs';
import * as os from 'os';
import { TokenKind, ColorizationSettings, ColorizationState } from './colorization';
import * as refs from './references';
import * as nls from 'vscode-nls';
import { lookupString, localizedStringCount } from '../nativeStrings';
nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })();
const localize: nls.LocalizeFunc = nls.loadMessageBundle();
@@ -53,17 +53,12 @@ let diagnosticsChannel: vscode.OutputChannel;
let outputChannel: vscode.OutputChannel;
let debugChannel: vscode.OutputChannel;
let diagnosticsCollection: vscode.DiagnosticCollection;
const workspaceColorizationState: Map<string, ColorizationState> = new Map<string, ColorizationState>();
let workspaceDisposables: vscode.Disposable[] = [];
let workspaceReferences: refs.ReferencesManager;
export function disposeWorkspaceData(): void {
workspaceDisposables.forEach((d) => d.dispose());
workspaceDisposables = [];
workspaceColorizationState.forEach(colorizationState => {
colorizationState.dispose();
});
}
function logTelemetry(notificationBody: TelemetryPayload): void {
@@ -140,28 +135,6 @@ function publishDiagnostics(params: PublishDiagnosticsParams): void {
diagnosticsCollection.set(realUri, diagnostics);
}
function updateSemanticColorizationRegions(params: SemanticColorizationRegionsParams): void {
const colorizationState: ColorizationState | undefined = workspaceColorizationState.get(params.uri);
if (colorizationState) {
// Convert the params to vscode.Range's before passing to colorizationState.updateSemantic()
const semanticRanges: vscode.Range[][] = new Array<vscode.Range[]>(TokenKind.Count);
for (let i: number = 0; i < TokenKind.Count; i++) {
semanticRanges[i] = [];
}
params.regions.forEach(element => {
const newRange: vscode.Range = new vscode.Range(element.range.start.line, element.range.start.character, element.range.end.line, element.range.end.character);
semanticRanges[element.kind].push(newRange);
});
const inactiveRanges: vscode.Range[] = [];
params.inactiveRegions.forEach(element => {
const newRange: vscode.Range = new vscode.Range(element.startLine, 0, element.endLine, 0);
inactiveRanges.push(newRange);
});
colorizationState.updateSemantic(params.uri, semanticRanges, inactiveRanges, params.editVersion);
languageClient.sendNotification(SemanticColorizationRegionsReceiptNotification, { uri: params.uri });
}
}
interface WorkspaceFolderParams {
workspaceFolderUri?: string;
}
@@ -203,21 +176,20 @@ interface FileChangedParams extends WorkspaceFolderParams {
uri: string;
}
interface SemanticColorizationRegionsParams {
uri: string;
regions: InputColorizationRegion[];
inactiveRegions: InputRegion[];
editVersion: number;
}
interface InputRegion {
startLine: number;
endLine: number;
}
interface InputColorizationRegion {
range: Range;
kind: number;
interface DecorationRangesPair {
decoration: vscode.TextEditorDecorationType;
ranges: vscode.Range[];
}
interface InactiveRegionParams {
uri: string;
fileVersion: number;
regions: InputRegion[];
}
// Need to convert vscode.Uri to a string before sending it to the language server.
@@ -250,19 +222,6 @@ interface GetDiagnosticsResult {
diagnostics: string;
}
interface DidChangeVisibleRangesParams {
uri: string;
ranges: Range[];
}
interface SemanticColorizationRegionsReceiptParams {
uri: string;
}
interface ColorThemeChangedParams {
name: string;
}
interface Diagnostic {
range: Range;
code?: number | string;
@@ -342,7 +301,7 @@ interface GetFoldingRangesParams {
id: number;
}
export enum FoldingRangeKind {
enum FoldingRangeKind {
None = 0,
Comment = 1,
Imports = 2,
@@ -352,7 +311,7 @@ export enum FoldingRangeKind {
interface FoldingRange {
kind: FoldingRangeKind;
range: Range;
};
}
interface GetFoldingRangesResult {
canceled: boolean;
@@ -363,6 +322,62 @@ interface AbortRequestParams {
id: number;
}
interface GetSemanticTokensParams {
uri: string;
id: number;
}
interface SemanticToken {
line: number;
character: number;
length: number;
type: number;
modifiers?: number;
}
interface GetSemanticTokensResult {
fileVersion: number;
canceled: boolean;
tokens: SemanticToken[];
}
enum SemanticTokenTypes {
// These are camelCase as the enum names are used directly as strings in our legend.
macro = 0,
enumMember = 1,
variable = 2,
parameter = 3,
type = 4,
referenceType = 5,
valueType = 6,
function = 7,
member = 8,
property = 9,
cliProperty = 10,
event = 11,
genericType = 12,
templateFunction = 13,
templateType = 14,
namespace = 15,
label = 16,
customLiteral = 17,
numberLiteral = 18,
stringLiteral = 19,
operatorOverload = 20,
memberOperatorOverload = 21,
newOperator = 22
}
enum SemanticTokenModifiers {
// These are camelCase as the enum names are used directly as strings in our legend.
// eslint-disable-next-line no-bitwise
static = (1 << 0),
// eslint-disable-next-line no-bitwise
global = (1 << 1),
// eslint-disable-next-line no-bitwise
local = (1 << 2)
}
// Requests
const QueryCompilerDefaultsRequest: RequestType<QueryCompilerDefaultsParams, configs.CompilerDefaults, void, void> = new RequestType<QueryCompilerDefaultsParams, configs.CompilerDefaults, void, void>('cpptools/queryCompilerDefaults');
const QueryTranslationUnitSourceRequest: RequestType<QueryTranslationUnitSourceParams, QueryTranslationUnitSourceResult, void, void> = new RequestType<QueryTranslationUnitSourceParams, QueryTranslationUnitSourceResult, void, void>('cpptools/queryTranslationUnitSource');
@@ -372,6 +387,7 @@ const GetCodeActionsRequest: RequestType<GetCodeActionsRequestParams, CodeAction
const GetDocumentSymbolRequest: RequestType<GetDocumentSymbolRequestParams, LocalizeDocumentSymbol[], void, void> = new RequestType<GetDocumentSymbolRequestParams, LocalizeDocumentSymbol[], void, void>('cpptools/getDocumentSymbols');
const GetSymbolInfoRequest: RequestType<WorkspaceSymbolParams, LocalizeSymbolInformation[], void, void> = new RequestType<WorkspaceSymbolParams, LocalizeSymbolInformation[], void, void>('cpptools/getWorkspaceSymbols');
const GetFoldingRangesRequest: RequestType<GetFoldingRangesParams, GetFoldingRangesResult, void, void> = new RequestType<GetFoldingRangesParams, GetFoldingRangesResult, void, void>('cpptools/getFoldingRanges');
const GetSemanticTokensRequest: RequestType<GetSemanticTokensParams, GetSemanticTokensResult, void, void> = new RequestType<GetSemanticTokensParams, GetSemanticTokensResult, void, void>('cpptools/getSemanticTokens');
// Notifications to the server
const DidOpenNotification: NotificationType<DidOpenTextDocumentParams, void> = new NotificationType<DidOpenTextDocumentParams, void>('textDocument/didOpen');
@@ -392,9 +408,6 @@ const CustomBrowseConfigurationNotification: NotificationType<CustomBrowseConfig
const ClearCustomConfigurationsNotification: NotificationType<WorkspaceFolderParams, void> = new NotificationType<WorkspaceFolderParams, void>('cpptools/clearCustomConfigurations');
const ClearCustomBrowseConfigurationNotification: NotificationType<WorkspaceFolderParams, void> = new NotificationType<WorkspaceFolderParams, void>('cpptools/clearCustomBrowseConfiguration');
const RescanFolderNotification: NotificationType<void, void> = new NotificationType<void, void>('cpptools/rescanFolder');
const DidChangeVisibleRangesNotification: NotificationType<DidChangeVisibleRangesParams, void> = new NotificationType<DidChangeVisibleRangesParams, void>('cpptools/didChangeVisibleRanges');
const SemanticColorizationRegionsReceiptNotification: NotificationType<SemanticColorizationRegionsReceiptParams, void> = new NotificationType<SemanticColorizationRegionsReceiptParams, void>('cpptools/semanticColorizationRegionsReceipt');
const ColorThemeChangedNotification: NotificationType<ColorThemeChangedParams, void> = new NotificationType<ColorThemeChangedParams, void>('cpptools/colorThemeChanged');
const RequestReferencesNotification: NotificationType<boolean, void> = new NotificationType<boolean, void>('cpptools/requestReferences');
const CancelReferencesNotification: NotificationType<void, void> = new NotificationType<void, void>('cpptools/cancelReferences');
const FinishedRequestCustomConfig: NotificationType<string, void> = new NotificationType<string, void>('cpptools/finishedRequestCustomConfig');
@@ -410,7 +423,7 @@ const ReportTagParseStatusNotification: NotificationType<LocalizeStringParams, v
const ReportStatusNotification: NotificationType<ReportStatusNotificationBody, void> = new NotificationType<ReportStatusNotificationBody, void>('cpptools/reportStatus');
const DebugProtocolNotification: NotificationType<DebugProtocolParams, void> = new NotificationType<DebugProtocolParams, void>('cpptools/debugProtocol');
const DebugLogNotification: NotificationType<LocalizeStringParams, void> = new NotificationType<LocalizeStringParams, void>('cpptools/debugLog');
const SemanticColorizationRegionsNotification: NotificationType<SemanticColorizationRegionsParams, void> = new NotificationType<SemanticColorizationRegionsParams, void>('cpptools/semanticColorizationRegions');
const InactiveRegionNotification: NotificationType<InactiveRegionParams, void> = new NotificationType<InactiveRegionParams, void>('cpptools/inactiveRegions');
const CompileCommandsPathsNotification: NotificationType<CompileCommandsPaths, void> = new NotificationType<CompileCommandsPaths, void>('cpptools/compileCommandsPaths');
const ReferencesNotification: NotificationType<refs.ReferencesResultMessage, void> = new NotificationType<refs.ReferencesResultMessage, void>('cpptools/references');
const ReportReferencesProgressNotification: NotificationType<refs.ReportReferencesProgressNotification, void> = new NotificationType<refs.ReportReferencesProgressNotification, void>('cpptools/reportReferencesProgress');
@@ -418,6 +431,7 @@ const RequestCustomConfig: NotificationType<string, void> = new NotificationType
const PublishDiagnosticsNotification: NotificationType<PublishDiagnosticsParams, void> = new NotificationType<PublishDiagnosticsParams, void>('cpptools/publishDiagnostics');
const ShowMessageWindowNotification: NotificationType<ShowMessageWindowParams, void> = new NotificationType<ShowMessageWindowParams, void>('cpptools/showMessageWindow');
const ReportTextDocumentLanguage: NotificationType<string, void> = new NotificationType<string, void>('cpptools/reportTextDocumentLanguage');
const SemanticTokensChanged: NotificationType<string, void> = new NotificationType<string, void>('cpptools/semanticTokensChanged');
let failureMessageShown: boolean = false;
@@ -490,7 +504,6 @@ export interface Client {
onDidCloseTextDocument(document: vscode.TextDocument): void;
onDidChangeVisibleTextEditors(editors: vscode.TextEditor[]): void;
onDidChangeTextDocument(textDocumentChangeEvent: vscode.TextDocumentChangeEvent): void;
onDidChangeTextEditorVisibleRanges(textEditorVisibleRangesChangeEvent: vscode.TextEditorVisibleRangesChangeEvent): void;
onRegisterCustomConfigurationProvider(provider: CustomConfigurationProvider1): Thenable<void>;
updateCustomConfigurations(requestingProvider?: CustomConfigurationProvider1): Thenable<void>;
updateCustomBrowseConfiguration(requestingProvider?: CustomConfigurationProvider1): Thenable<void>;
@@ -588,25 +601,68 @@ class FoldingRangeProvider implements vscode.FoldingRangeProvider {
}
}
class SemanticTokensProvider implements vscode.DocumentSemanticTokensProvider {
private client: DefaultClient;
public onDidChangeSemanticTokensEvent = new vscode.EventEmitter<void>();
public onDidChangeSemanticTokens?: vscode.Event<void>;
constructor(client: DefaultClient) {
this.client = client;
this.onDidChangeSemanticTokens = this.onDidChangeSemanticTokensEvent.event;
}
public async provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.SemanticTokens> {
return new Promise<vscode.SemanticTokens>((resolve, reject) => {
this.client.notifyWhenReady(() => {
const uriString: string = document.uri.toString();
const id: number = ++abortRequestId;
const params: GetSemanticTokensParams = {
id: id,
uri: uriString
};
this.client.languageClient.sendRequest(GetSemanticTokensRequest, params)
.then((tokensResult) => {
if (tokensResult.canceled) {
reject();
} else {
if (tokensResult.fileVersion !== this.client.openFileVersions.get(uriString)) {
reject();
} else {
const builder: vscode.SemanticTokensBuilder = new vscode.SemanticTokensBuilder(this.client.semanticTokensLegend);
tokensResult.tokens.forEach((token) => {
builder.push(token.line, token.character, token.length, token.type, token.modifiers);
});
resolve(builder.build());
}
}
});
token.onCancellationRequested(e => this.client.abortRequest(id));
});
});
}
}
export class DefaultClient implements Client {
private innerLanguageClient?: LanguageClient; // The "client" that launches and communicates with our language "server" process.
private disposables: vscode.Disposable[] = [];
private codeFoldingProviderDisposable: vscode.Disposable | undefined;
private semanticTokensProvider: SemanticTokensProvider | undefined;
private semanticTokensProviderDisposable: vscode.Disposable | undefined;
private innerConfiguration?: configs.CppProperties;
private rootPathFileWatcher?: vscode.FileSystemWatcher;
private rootFolder?: vscode.WorkspaceFolder;
private storagePath: string;
private trackedDocuments = new Set<vscode.TextDocument>();
private isSupported: boolean = true;
private colorizationSettings: ColorizationSettings;
private openFileVersions = new Map<string, number>();
private visibleRanges = new Map<string, Range[]>();
private inactiveRegionsDecorations = new Map<string, DecorationRangesPair>();
public openFileVersions = new Map<string, number>();
private settingsTracker: SettingsTracker;
private configurationProvider?: string;
private documentSelector: DocumentFilter[] = [
{ scheme: 'file', language: 'cpp' },
{ scheme: 'file', language: 'c' }
];
public semanticTokensLegend: vscode.SemanticTokensLegend | undefined;
// The "model" that is displayed via the UI (status bar).
private model: ClientModel = new ClientModel();
@@ -690,7 +746,6 @@ export class DefaultClient implements Client {
this.storagePath = storagePath;
const rootUri: vscode.Uri | undefined = this.RootUri;
this.settingsTracker = getTracker(rootUri);
this.colorizationSettings = new ColorizationSettings(rootUri);
try {
let firstClient: boolean = false;
if (!languageClient || languageClientCrashedNeedsRestart) {
@@ -1045,6 +1100,24 @@ export class DefaultClient implements Client {
}
}
// Semantic token types are identified by indexes in this list of types, in the legend.
const tokenTypesLegend: string[] = [];
for (const e in SemanticTokenTypes) {
// An enum is actually a set of mappings from key <=> value. Enumerate over only the names.
// This allow us to represent the constants using an enum, which we can match in native code.
if (isNaN(Number(e))) {
tokenTypesLegend.push(e);
}
}
// Semantic token modifiers are bit indexes corresponding to the indexes in this list of modifiers in the legend.
const tokenModifiersLegend: string[] = [];
for (const e in SemanticTokenModifiers) {
if (isNaN(Number(e))) {
tokenModifiersLegend.push(e);
}
}
this.semanticTokensLegend = new vscode.SemanticTokensLegend(tokenTypesLegend, tokenModifiersLegend);
if (firstClient) {
workspaceReferences = new refs.ReferencesManager(this);
@@ -1069,6 +1142,10 @@ export class DefaultClient implements Client {
if (settings.codeFolding) {
this.codeFoldingProviderDisposable = vscode.languages.registerFoldingRangeProvider(this.documentSelector, new FoldingRangeProvider(this));
}
if (settings.enhancedColorization && this.semanticTokensLegend) {
this.semanticTokensProvider = new SemanticTokensProvider(this);
this.semanticTokensProviderDisposable = vscode.languages.registerDocumentSemanticTokensProvider(this.documentSelector, this.semanticTokensProvider, this.semanticTokensLegend);
}
// Listen for messages from the language server.
this.registerNotifications();
@@ -1084,7 +1161,6 @@ export class DefaultClient implements Client {
vscode.window.showErrorMessage(localize("unable.to.start", "Unable to start the C/C++ language server. IntelliSense features will be disabled. Error: {0}", String(err)));
}
}));
this.colorizationSettings.reload();
} catch (err) {
this.isSupported = false; // Running on an OS we don't support yet.
if (!failureMessageShown) {
@@ -1199,6 +1275,11 @@ export class DefaultClient implements Client {
}
}
const localizedStrings: string[] = [];
for (let i: number = 0; i < localizedStringCount; i++) {
localizedStrings.push(lookupString(i));
}
const clientOptions: LanguageClientOptions = {
documentSelector: [
{ scheme: 'file', language: 'cpp' },
@@ -1226,6 +1307,7 @@ export class DefaultClient implements Client {
dimInactiveRegions: settings_dimInactiveRegions,
enhancedColorization: settings_enhancedColorization,
suggestSnippets: settings_suggestSnippets,
simplifyStructuredComments: workspaceSettings.simplifyStructuredComments,
loggingLevel: workspaceSettings.loggingLevel,
workspaceParsingPriority: workspaceSettings.workspaceParsingPriority,
workspaceSymbols: workspaceSettings.workspaceSymbols,
@@ -1237,7 +1319,8 @@ export class DefaultClient implements Client {
vcpkg_root: util.getVcpkgRoot(),
gotoDefIntelliSense: abTestSettings.UseGoToDefIntelliSense,
experimentalFeatures: workspaceSettings.experimentalFeatures,
edgeMessagesDirectory: path.join(util.getExtensionFilePath("bin"), "messages", util.getLocaleId())
edgeMessagesDirectory: path.join(util.getExtensionFilePath("bin"), "messages", util.getLocaleId()),
localizedStrings: localizedStrings
},
middleware: createProtocolFilter(allClients),
errorHandler: {
@@ -1317,44 +1400,6 @@ export class DefaultClient implements Client {
this.sendAllSettings();
const changedSettings: { [key: string]: string } = this.settingsTracker.getChangedSettings();
this.notifyWhenReady(() => {
const colorizationNeedsReload: boolean = isFirstClient && (event.affectsConfiguration("workbench.colorTheme")
|| event.affectsConfiguration("editor.tokenColorCustomizations"));
const colorizationNeedsRefresh: boolean = colorizationNeedsReload
|| event.affectsConfiguration("C_Cpp.enhancedColorization", this.RootUri)
|| event.affectsConfiguration("C_Cpp.dimInactiveRegions", this.RootUri)
|| event.affectsConfiguration("C_Cpp.inactiveRegionOpacity", this.RootUri)
|| event.affectsConfiguration("C_Cpp.inactiveRegionForegroundColor", this.RootUri)
|| event.affectsConfiguration("C_Cpp.inactiveRegionBackgroundColor", this.RootUri);
if (isFirstClient) {
const colorThemeChanged: boolean = event.affectsConfiguration("workbench.colorTheme");
if (colorThemeChanged) {
const otherSettings: OtherSettings = new OtherSettings();
this.languageClient.sendNotification(ColorThemeChangedNotification, { name: otherSettings.colorTheme });
}
}
if (colorizationNeedsReload) {
this.colorizationSettings.reload();
}
if (colorizationNeedsRefresh) {
const processedUris: vscode.Uri[] = [];
for (const e of vscode.window.visibleTextEditors) {
const uri: vscode.Uri = e.document.uri;
// Make sure we don't process the same file multiple times.
// colorizationState.onSettingsChanged ensures all visible text editors for that file get
// refreshed, after it creates a set of decorators to be shared by all visible instances of the file.
if (!processedUris.find(e => e === uri)) {
processedUris.push(uri);
const colorizationState: ColorizationState | undefined = workspaceColorizationState.get(uri.toString());
if (colorizationState) {
colorizationState.onSettingsChanged(uri);
}
}
}
}
if (Object.keys(changedSettings).length > 0) {
if (changedSettings["commentContinuationPatterns"]) {
updateLanguageConfigurations();
@@ -1368,6 +1413,17 @@ export class DefaultClient implements Client {
this.codeFoldingProviderDisposable = undefined;
}
}
if (changedSettings["enhancedColorization"]) {
const settings: CppSettings = new CppSettings();
if (settings.enhancedColorization && this.semanticTokensLegend) {
this.semanticTokensProvider = new SemanticTokensProvider(this);
this.semanticTokensProviderDisposable = vscode.languages.registerDocumentSemanticTokensProvider(this.documentSelector, new SemanticTokensProvider(this), this.semanticTokensLegend); ;
} else if (this.semanticTokensProviderDisposable) {
this.semanticTokensProviderDisposable.dispose();
this.semanticTokensProviderDisposable = undefined;
this.semanticTokensProvider = undefined;
}
}
this.configuration.onDidChangeSettings();
telemetry.logLanguageServerEvent("CppSettingsChange", changedSettings, undefined);
}
@@ -1375,14 +1431,22 @@ export class DefaultClient implements Client {
return changedSettings;
}
private editVersion: number = 0;
public onDidChangeVisibleTextEditors(editors: vscode.TextEditor[]): void {
const settings: CppSettings = new CppSettings(this.RootUri);
if (settings.dimInactiveRegions) {
// Apply text decorations to inactive regions
for (const e of editors) {
const valuePair: DecorationRangesPair | undefined = this.inactiveRegionsDecorations.get(e.document.uri.toString());
if (valuePair) {
e.setDecorations(valuePair.decoration, valuePair.ranges); // VSCode clears the decorations when the text editor becomes invisible
}
}
}
}
public onDidChangeTextDocument(textDocumentChangeEvent: vscode.TextDocumentChangeEvent): void {
// Increment editVersion for every call to onDidChangeTextDocument, regardless of whether the file is handled
this.editVersion++;
if (textDocumentChangeEvent.document.uri.scheme === "file") {
if (textDocumentChangeEvent.document.languageId === "cpp" || textDocumentChangeEvent.document.languageId === "c") {
// If any file has changed, we need to abort the current rename operation
if (renamePending) {
this.cancelReferences();
@@ -1392,16 +1456,6 @@ export class DefaultClient implements Client {
const newVersion: number = textDocumentChangeEvent.document.version;
if (oldVersion === undefined || newVersion > oldVersion) {
this.openFileVersions.set(textDocumentChangeEvent.document.uri.toString(), newVersion);
try {
const colorizationState: ColorizationState | undefined = workspaceColorizationState.get(textDocumentChangeEvent.document.uri.toString());
if (colorizationState) {
// Adjust colorization ranges after this edit. (i.e. if a line was added, push decorations after it down one line)
colorizationState.addEdits(textDocumentChangeEvent.contentChanges, this.editVersion);
}
} catch (e) {
// Ensure an exception does not prevent pass-through to native handler, or editVersion could become inconsistent
console.log(e.toString());
}
}
}
}
@@ -1410,80 +1464,13 @@ export class DefaultClient implements Client {
public onDidOpenTextDocument(document: vscode.TextDocument): void {
if (document.uri.scheme === "file") {
this.openFileVersions.set(document.uri.toString(), document.version);
workspaceColorizationState.set(document.uri.toString(), new ColorizationState(document.uri, this.colorizationSettings));
this.sendVisibleRanges(document.uri);
}
}
public onDidCloseTextDocument(document: vscode.TextDocument): void {
workspaceColorizationState.delete(document.uri.toString());
this.openFileVersions.delete(document.uri.toString());
}
public onDidChangeVisibleTextEditors(editors: vscode.TextEditor[]): void {
const processedUris: vscode.Uri[] = [];
editors.forEach(editor => {
if (editor.document.uri.scheme === "file") {
const colorizationState: ColorizationState | undefined = workspaceColorizationState.get(editor.document.uri.toString());
if (colorizationState) {
colorizationState.refresh(editor);
if (!processedUris.find(uri => uri === editor.document.uri)) {
processedUris.push(editor.document.uri);
this.sendVisibleRanges(editor.document.uri);
}
}
}
});
}
public sendVisibleRanges(uri: vscode.Uri): void {
const ranges: Range[] = [];
// Get ranges from all editors matching this URI
const editors: vscode.TextEditor[] = vscode.window.visibleTextEditors.filter(e => e.document.uri === uri);
for (const e of editors) {
e.visibleRanges.forEach(range => ranges.push(Range.create(range.start.line, range.start.character, range.end.line, range.end.character)));
}
// Only send ranges if they have actually changed.
let isSame: boolean = false;
const savedRanges: Range[] | undefined = this.visibleRanges.get(uri.toString());
if (savedRanges) {
if (ranges.length === savedRanges.length) {
isSame = true;
for (let i: number = 0; i < ranges.length; i++) {
if (ranges[i] !== savedRanges[i]) {
isSame = false;
break;
}
}
}
} else {
isSame = ranges.length === 0;
}
if (!isSame) {
this.visibleRanges.set(uri.toString(), ranges);
const params: DidChangeVisibleRangesParams = {
uri: uri.toString(),
ranges: ranges
};
this.notifyWhenReady(() => this.languageClient.sendNotification(DidChangeVisibleRangesNotification, params));
}
}
public onDidChangeTextEditorVisibleRanges(textEditorVisibleRangesChangeEvent: vscode.TextEditorVisibleRangesChangeEvent): void {
this.notifyWhenReady(() => {
if (textEditorVisibleRangesChangeEvent.textEditor.document.uri.scheme === "file") {
if (vscode.window.activeTextEditor === textEditorVisibleRangesChangeEvent.textEditor) {
if (textEditorVisibleRangesChangeEvent.visibleRanges.length === 1) {
const visibleRangesLength: number = textEditorVisibleRangesChangeEvent.visibleRanges[0].end.line - textEditorVisibleRangesChangeEvent.visibleRanges[0].start.line;
workspaceReferences.updateVisibleRange(visibleRangesLength);
}
}
this.sendVisibleRanges(textEditorVisibleRangesChangeEvent.textEditor.document.uri);
}
});
}
private registeredProviders: CustomConfigurationProvider1[] = [];
public onRegisterCustomConfigurationProvider(provider: CustomConfigurationProvider1): Thenable<void> {
const onRegistered: () => void = () => {
@@ -1655,6 +1642,8 @@ export class DefaultClient implements Client {
if (!diagnosticsChannel) {
diagnosticsChannel = vscode.window.createOutputChannel(localize("c.cpp.diagnostics", "C/C++ Diagnostics"));
workspaceDisposables.push(diagnosticsChannel);
} else {
diagnosticsChannel.clear();
}
const header: string = `-------- Diagnostics - ${new Date().toLocaleString()}\n`;
@@ -1663,7 +1652,32 @@ export class DefaultClient implements Client {
if (this.configuration.CurrentConfiguration) {
configJson = `Current Configuration:\n${JSON.stringify(this.configuration.CurrentConfiguration, null, 4)}\n`;
}
diagnosticsChannel.appendLine(`${header}${version}${configJson}${response.diagnostics}`);
// Get diagnotics for configuration provider info.
let configurationLoggingStr: string = "";
const tuSearchStart: number = response.diagnostics.indexOf("Translation Unit Mappings:");
if (tuSearchStart >= 0) {
const tuSearchEnd: number = response.diagnostics.indexOf("Translation Unit Configurations:");
if (tuSearchEnd >= 0 && tuSearchEnd > tuSearchStart) {
let tuSearchString: string = response.diagnostics.substr(tuSearchStart, tuSearchEnd - tuSearchStart);
let tuSearchIndex: number = tuSearchString.indexOf("[");
while (tuSearchIndex >= 0) {
const tuMatch: RegExpMatchArray | null = tuSearchString.match(/\[\s(.*)\s\]/);
if (tuMatch && tuMatch.length > 1) {
const tuPath: string = vscode.Uri.file(tuMatch[1]).toString();
if (this.configurationLogging.has(tuPath)) {
if (configurationLoggingStr.length === 0) {
configurationLoggingStr += "Custom configurations:\n";
}
configurationLoggingStr += `[ ${tuMatch[1]} ]\n${this.configurationLogging.get(tuPath)}\n`;
}
}
tuSearchString = tuSearchString.substr(tuSearchIndex + 1);
tuSearchIndex = tuSearchString.indexOf("[");
}
}
}
diagnosticsChannel.appendLine(`${header}${version}${configJson}${this.browseConfigurationLogging}${configurationLoggingStr}${response.diagnostics}`);
diagnosticsChannel.show(false);
}
@@ -1930,7 +1944,7 @@ export class DefaultClient implements Client {
this.languageClient.onNotification(LogTelemetryNotification, logTelemetry);
this.languageClient.onNotification(ReportStatusNotification, (e) => this.updateStatus(e));
this.languageClient.onNotification(ReportTagParseStatusNotification, (e) => this.updateTagParseStatus(e));
this.languageClient.onNotification(SemanticColorizationRegionsNotification, updateSemanticColorizationRegions);
this.languageClient.onNotification(InactiveRegionNotification, (e) => this.updateInactiveRegions(e));
this.languageClient.onNotification(CompileCommandsPathsNotification, (e) => this.promptCompileCommands(e));
this.languageClient.onNotification(ReferencesNotification, (e) => this.processReferencesResult(e.referencesResult));
this.languageClient.onNotification(ReportReferencesProgressNotification, (e) => this.handleReferencesProgress(e));
@@ -1941,6 +1955,7 @@ export class DefaultClient implements Client {
this.languageClient.onNotification(PublishDiagnosticsNotification, publishDiagnostics);
this.languageClient.onNotification(ShowMessageWindowNotification, showMessageWindow);
this.languageClient.onNotification(ReportTextDocumentLanguage, (e) => this.setTextDocumentLanguage(e));
this.languageClient.onNotification(SemanticTokensChanged, (e) => this.semanticTokensProvider?.onDidChangeSemanticTokensEvent.fire());
setupOutputHandlers();
}
@@ -2141,6 +2156,55 @@ export class DefaultClient implements Client {
this.model.tagParserStatus.Value = util.getLocalizedString(notificationBody);
}
private updateInactiveRegions(params: InactiveRegionParams): void {
const settings: CppSettings = new CppSettings(this.RootUri);
const opacity: number | undefined = settings.inactiveRegionOpacity;
if (opacity !== null && opacity !== undefined) {
let backgroundColor: string | undefined = settings.inactiveRegionBackgroundColor;
if (backgroundColor === "") {
backgroundColor = undefined;
}
let color: string | undefined = settings.inactiveRegionForegroundColor;
if (color === "") {
color = undefined;
}
const decoration: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({
opacity: opacity.toString(),
backgroundColor: backgroundColor,
color: color,
rangeBehavior: vscode.DecorationRangeBehavior.OpenOpen
});
// We must convert to vscode.Ranges in order to make use of the API's
const ranges: vscode.Range[] = [];
params.regions.forEach(element => {
const newRange: vscode.Range = new vscode.Range(element.startLine, 0, element.endLine, 0);
ranges.push(newRange);
});
// Find entry for cached file and act accordingly
const valuePair: DecorationRangesPair | undefined = this.inactiveRegionsDecorations.get(params.uri);
if (valuePair) {
// Disposing of and resetting the decoration will undo previously applied text decorations
valuePair.decoration.dispose();
valuePair.decoration = decoration;
// As vscode.TextEditor.setDecorations only applies to visible editors, we must cache the range for when another editor becomes visible
valuePair.ranges = ranges;
} else { // The entry does not exist. Make a new one
const toInsert: DecorationRangesPair = {
decoration: decoration,
ranges: ranges
};
this.inactiveRegionsDecorations.set(params.uri, toInsert);
}
if (settings.dimInactiveRegions && params.fileVersion === this.openFileVersions.get(params.uri)) {
// Apply the decorations to all *visible* text editors
const editors: vscode.TextEditor[] = vscode.window.visibleTextEditors.filter(e => e.document.uri.toString() === params.uri);
for (const e of editors) {
e.setDecorations(decoration, ranges);
}
}
}
}
private promptCompileCommands(params: CompileCommandsPaths): void {
if (!params.workspaceFolderUri) {
return;
@@ -2351,6 +2415,7 @@ export class DefaultClient implements Client {
const sanitized: SourceFileConfigurationItemAdapter[] = [];
configs.forEach(item => {
if (this.isSourceFileConfigurationItem(item)) {
this.configurationLogging.set(item.uri.toString(), JSON.stringify(item.configuration, null, 4));
if (settings.loggingLevel === "Debug") {
out.appendLine(` uri: ${item.uri.toString()}`);
out.appendLine(` config: ${JSON.stringify(item.configuration, null, 2)}`);
@@ -2388,6 +2453,9 @@ export class DefaultClient implements Client {
this.languageClient.sendNotification(CustomConfigurationNotification, params);
}
private browseConfigurationLogging: string = "";
private configurationLogging: Map<string, string> = new Map<string, string>();
private sendCustomBrowseConfiguration(config: any, providerId?: string, timeoutOccured?: boolean): void {
const rootFolder: vscode.WorkspaceFolder | undefined = this.RootFolder;
if (!rootFolder) {
@@ -2397,6 +2465,8 @@ export class DefaultClient implements Client {
const lastCustomBrowseConfigurationProviderId: PersistentFolderState<string | undefined> = new PersistentFolderState<string | undefined>("CPP.lastCustomBrowseConfigurationProviderId", undefined, rootFolder);
let sanitized: util.Mutable<WorkspaceBrowseConfiguration>;
this.browseConfigurationLogging = "";
// This while (true) is here just so we can break out early if the config is set on error
while (true) {
// config is marked as 'any' because it is untrusted data coming from a 3rd-party. We need to sanitize it before sending it to the language server.
@@ -2454,6 +2524,8 @@ export class DefaultClient implements Client {
break;
}
this.browseConfigurationLogging = localize("browse.configuration", "Custom browse configuration: {0}", `\n${JSON.stringify(sanitized, null, 4)}\n`);
const params: CustomBrowseConfigurationParams = {
browseConfiguration: sanitized,
workspaceFolderUri: this.RootPath
@@ -2463,6 +2535,7 @@ export class DefaultClient implements Client {
}
private clearCustomConfigurations(): void {
this.configurationLogging.clear();
const params: WorkspaceFolderParams = {
workspaceFolderUri: this.RootPath
};
@@ -2470,6 +2543,7 @@ export class DefaultClient implements Client {
}
private clearCustomBrowseConfiguration(): void {
this.browseConfigurationLogging = "";
const params: WorkspaceFolderParams = {
workspaceFolderUri: this.RootPath
};
@@ -2565,6 +2639,10 @@ export class DefaultClient implements Client {
this.codeFoldingProviderDisposable.dispose();
this.codeFoldingProviderDisposable = undefined;
}
if (this.semanticTokensProviderDisposable) {
this.semanticTokensProviderDisposable.dispose();
this.semanticTokensProviderDisposable = undefined;
}
this.model.dispose();
});
}
@@ -2657,7 +2735,6 @@ class NullClient implements Client {
onDidCloseTextDocument(document: vscode.TextDocument): void {}
onDidChangeVisibleTextEditors(editors: vscode.TextEditor[]): void {}
onDidChangeTextDocument(textDocumentChangeEvent: vscode.TextDocumentChangeEvent): void {}
onDidChangeTextEditorVisibleRanges(textEditorVisibleRangesChangeEvent: vscode.TextEditorVisibleRangesChangeEvent): void {}
onRegisterCustomConfigurationProvider(provider: CustomConfigurationProvider1): Thenable<void> { return Promise.resolve(); }
updateCustomConfigurations(requestingProvider?: CustomConfigurationProvider1): Thenable<void> { return Promise.resolve(); }
updateCustomBrowseConfiguration(requestingProvider?: CustomConfigurationProvider1): Thenable<void> { return Promise.resolve(); }
@@ -1,671 +0,0 @@
/* --------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All Rights Reserved.
* See 'LICENSE' in the project root for license information.
* ------------------------------------------------------------------------------------------ */
'use strict';
import * as path from 'path';
import * as vscode from 'vscode';
import * as util from '../common';
import { CppSettings, OtherSettings, TextMateRule, TextMateRuleSettings } from './settings';
import * as jsonc from 'jsonc-parser';
import * as plist from 'plist';
export enum TokenKind {
// These need to match the token_kind enum in the server
// Semantic tokens
Macro,
Enumerator,
GlobalVariable,
LocalVariable,
Parameter,
Type,
RefType,
ValueType,
Function,
MemberFunction,
MemberField,
StaticMemberFunction,
StaticMemberField,
Property,
Event,
ClassTemplate,
GenericType,
FunctionTemplate,
Namespace,
Label,
UdlRaw,
UdlNumber,
UdlString,
OperatorFunction,
MemberOperator,
NewDelete,
Count
}
interface VersionedEdits {
editVersion: number;
changes: readonly vscode.TextDocumentContentChangeEvent[];
}
class ThemeStyle {
foreground?: string;
background?: string;
fontStyle?: string;
}
export class ColorizationSettings {
private uri: vscode.Uri | undefined;
private pendingTask?: util.BlockingTask<any>;
private editorBackground?: string;
public themeStyleCMap: ThemeStyle[] = [];
public themeStyleCppMap: ThemeStyle[] = [];
private static readonly scopeToTokenColorNameMap = new Map<string, string>([
["comment", "comments"],
["string", "strings"],
["keyword.operator", "keywords"],
["keyword.control", "keywords"],
["constant.numeric", "numbers"],
["entity.name.type", "types"],
["entity.name.class", "types"],
["entity.name.function", "functions"],
["variable", "variables"]
]);
constructor(uri: vscode.Uri | undefined) {
this.uri = uri;
}
// Given a TextMate rule 'settings' node, update a ThemeStyle to include any color or style information
private updateStyleFromTextMateRuleSettings(baseStyle: ThemeStyle, textMateRuleSettings: TextMateRuleSettings): void {
if (textMateRuleSettings.foreground) {
baseStyle.foreground = textMateRuleSettings.foreground;
}
if (!this.editorBackground || textMateRuleSettings.background && textMateRuleSettings.background.toUpperCase() !== this.editorBackground.toUpperCase()) {
baseStyle.background = textMateRuleSettings.background;
}
// Any (even empty) string for fontStyle removes inherited value
if (textMateRuleSettings.fontStyle) {
baseStyle.fontStyle = textMateRuleSettings.fontStyle;
} else if (textMateRuleSettings.fontStyle === "") {
baseStyle.fontStyle = undefined;
}
}
// If the scope can be found in a set of TextMate rules, apply it to both C and Cpp ThemeStyle's
private findThemeStyleForScope(baseCStyle: ThemeStyle | undefined, baseCppStyle: ThemeStyle | undefined, scope: string, textMateRules: TextMateRule[] | undefined): void {
if (textMateRules) {
let match: TextMateRule | undefined = textMateRules.find(e => e.settings && (e.scope === scope || ((e.scope instanceof Array) && e.scope.indexOf(scope) > -1)));
if (match) {
if (baseCStyle) {
this.updateStyleFromTextMateRuleSettings(baseCStyle, match.settings);
}
if (baseCppStyle) {
this.updateStyleFromTextMateRuleSettings(baseCppStyle, match.settings);
}
}
match = textMateRules.find(e => e.settings && (e.scope === "source " + scope || ((e.scope instanceof Array) && e.scope.indexOf("source " + scope) > -1)));
if (match) {
if (baseCStyle) {
this.updateStyleFromTextMateRuleSettings(baseCStyle, match.settings);
}
if (baseCppStyle) {
this.updateStyleFromTextMateRuleSettings(baseCppStyle, match.settings);
}
}
if (baseCStyle) {
match = textMateRules.find(e => e.settings && (e.scope === "source.c " + scope || ((e.scope instanceof Array) && e.scope.indexOf("source.c " + scope) > -1)));
if (match) {
this.updateStyleFromTextMateRuleSettings(baseCStyle, match.settings);
}
}
if (baseCppStyle) {
match = textMateRules.find(e => e.settings && (e.scope === "source.cpp " + scope || ((e.scope instanceof Array) && e.scope.indexOf("source.cpp " + scope) > -1)));
if (match) {
this.updateStyleFromTextMateRuleSettings(baseCppStyle, match.settings);
}
}
}
}
// For a specific scope cascase all potential sources of style information to create a final ThemeStyle
private calculateThemeStyleForScope(baseCStyle: ThemeStyle | undefined, baseCppStyle: ThemeStyle | undefined, scope: string, themeName: string, themeTextMateRules: TextMateRule[][]): void {
// Search for settings with this scope in current theme
themeTextMateRules.forEach((rules) => {
this.findThemeStyleForScope(baseCStyle, baseCppStyle, scope, rules);
});
const otherSettings: OtherSettings = new OtherSettings(this.uri);
// Next in priority would be a global user override of token color of the equivilent scope
const colorTokenName: string | undefined = ColorizationSettings.scopeToTokenColorNameMap.get(scope);
if (colorTokenName) {
const settingValue: string | undefined = otherSettings.getCustomColorToken(colorTokenName);
if (settingValue) {
if (baseCStyle) {
baseCStyle.foreground = settingValue;
}
if (baseCppStyle) {
baseCppStyle.foreground = settingValue;
}
}
}
// Next in priority would be a global user override of this scope in textMateRules
this.findThemeStyleForScope(baseCStyle, baseCppStyle, scope, otherSettings.customTextMateRules);
// Next in priority would be a theme-specific user override of token color of the equivilent scope
if (colorTokenName) {
const settingValue: string | undefined = otherSettings.getCustomThemeSpecificColorToken(colorTokenName, themeName);
if (settingValue) {
if (baseCStyle) {
baseCStyle.foreground = settingValue;
}
if (baseCppStyle) {
baseCppStyle.foreground = settingValue;
}
}
}
// Next in priority would be a theme-specific user override of this scope in textMateRules
const textMateRules: TextMateRule[] | undefined = otherSettings.getCustomThemeSpecificTextMateRules(themeName);
this.findThemeStyleForScope(baseCStyle, baseCppStyle, scope, textMateRules);
}
// For each level of the scope, look of style information
private calculateStyleForToken(tokenKind: TokenKind, scope: string, themeName: string, themeTextMateRules: TextMateRule[][]): void {
// Try scopes, from most general to most specific, apply style in cascading manner
const parts: string[] = scope.split(".");
let accumulatedScope: string = "";
for (let i: number = 0; i < parts.length; i++) {
accumulatedScope += parts[i];
this.calculateThemeStyleForScope(this.themeStyleCMap[tokenKind], this.themeStyleCppMap[tokenKind], accumulatedScope, themeName, themeTextMateRules);
this.calculateThemeStyleForScope(this.themeStyleCMap[tokenKind], undefined, accumulatedScope + ".c", themeName, themeTextMateRules);
this.calculateThemeStyleForScope(undefined, this.themeStyleCppMap[tokenKind], accumulatedScope + ".cpp", themeName, themeTextMateRules);
accumulatedScope += ".";
}
}
public syncWithLoadingSettings(f: () => any): void {
this.pendingTask = new util.BlockingTask<void>(f, this.pendingTask);
}
public updateStyles(themeName: string, defaultStyle: ThemeStyle, textMateRules: TextMateRule[][]): void {
this.themeStyleCMap = new Array<ThemeStyle>(TokenKind.Count);
this.themeStyleCppMap = new Array<ThemeStyle>(TokenKind.Count);
// Populate with unique objects, as they will be individual modified in place
for (let i: number = 0; i < TokenKind.Count; i++) {
this.themeStyleCMap[i] = {...defaultStyle};
this.themeStyleCppMap[i] = {...defaultStyle};
}
this.calculateStyleForToken(TokenKind.Macro, "entity.name.function.preprocessor", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Enumerator, "variable.other.enummember", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.GlobalVariable, "variable.other.global", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.LocalVariable, "variable.other.local", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Parameter, "variable.parameter", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Type, "entity.name.type.class", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.RefType, "entity.name.type.class.reference", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.ValueType, "entity.name.type.class.value", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Function, "entity.name.function", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.MemberFunction, "entity.name.function.member", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.MemberField, "variable.other.property", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.StaticMemberFunction, "entity.name.function.member.static", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.StaticMemberField, "variable.other.property.static", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Property, "variable.other.property.cli", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Event, "variable.other.event", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.ClassTemplate, "entity.name.type.class.templated", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.GenericType, "entity.name.type.class.generic", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.FunctionTemplate, "entity.name.function.templated", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Namespace, "entity.name.namespace", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.Label, "entity.name.label", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.UdlRaw, "entity.name.operator.custom-literal", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.UdlNumber, "entity.name.operator.custom-literal.number", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.UdlString, "entity.name.operator.custom-literal.string", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.OperatorFunction, "entity.name.function.operator", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.MemberOperator, "entity.name.function.operator.member", themeName, textMateRules);
this.calculateStyleForToken(TokenKind.NewDelete, "keyword.operator.new", themeName, textMateRules);
}
public async loadTheme(themePath: string, defaultStyle: ThemeStyle): Promise<TextMateRule[][]> {
let rules: TextMateRule[][] = [];
if (await util.checkFileExists(themePath)) {
const themeContentText: string = await util.readFileText(themePath);
let themeContent: any;
let textMateRules: TextMateRule[] | undefined;
if (themePath.endsWith("tmTheme")) {
themeContent = plist.parse(themeContentText);
if (themeContent) {
textMateRules = themeContent.settings;
}
} else {
themeContent = jsonc.parse(themeContentText);
if (themeContent) {
textMateRules = themeContent.tokenColors;
if (themeContent.include) {
// parse included theme file
const includedThemePath: string = path.join(path.dirname(themePath), themeContent.include);
rules = await this.loadTheme(includedThemePath, defaultStyle);
}
if (themeContent.colors && themeContent.colors["editor.background"]) {
this.editorBackground = themeContent.colors["editor.background"];
}
}
}
if (textMateRules) {
// Convert comma delimited scopes into an array
textMateRules.forEach(e => {
if (e.scope && e.scope.includes(',')) {
e.scope = e.scope.split(',').map((s: string) => s.trim());
}
});
const scopelessSetting: any = textMateRules.find(e => e.settings && !e.scope);
if (scopelessSetting) {
if (scopelessSetting.settings.background) {
this.editorBackground = scopelessSetting.settings.background;
}
this.updateStyleFromTextMateRuleSettings(defaultStyle, scopelessSetting.settings);
}
rules.push(textMateRules);
}
}
return rules;
}
public reload(): void {
const f: () => void = async () => {
const otherSettings: OtherSettings = new OtherSettings(this.uri);
const themeName: string | undefined = otherSettings.colorTheme;
if (themeName) {
// Enumerate through all extensions, looking for this theme. (Themes are implemented as extensions - even the default ones)
// Open each package.json to check for a theme path
for (let i: number = 0; i < vscode.extensions.all.length; i++) {
const extensionPath: string = vscode.extensions.all[i].extensionPath;
const extensionPackageJsonPath: string = path.join(extensionPath, "package.json");
if (!await util.checkFileExists(extensionPackageJsonPath)) {
continue;
}
const packageJsonText: string = await util.readFileText(extensionPackageJsonPath);
const packageJson: any = jsonc.parse(packageJsonText);
if (packageJson.contributes && packageJson.contributes.themes) {
const foundTheme: any = packageJson.contributes.themes.find((e: any) => e.id === themeName || e.label === themeName);
if (foundTheme) {
const themeRelativePath: string = foundTheme.path;
const themeFullPath: string = path.join(extensionPath, themeRelativePath);
const defaultStyle: ThemeStyle = new ThemeStyle();
const rulesSet: TextMateRule[][] = await this.loadTheme(themeFullPath, defaultStyle);
this.updateStyles(themeName, defaultStyle, rulesSet);
return;
}
}
}
}
};
this.syncWithLoadingSettings(f);
}
public static createDecorationFromThemeStyle(themeStyle: ThemeStyle): vscode.TextEditorDecorationType | undefined {
if (themeStyle && (themeStyle.foreground || themeStyle.background || themeStyle.fontStyle)) {
const options: vscode.DecorationRenderOptions = {};
options.rangeBehavior = vscode.DecorationRangeBehavior.OpenOpen;
if (themeStyle.foreground) {
options.color = themeStyle.foreground;
}
if (themeStyle.background) {
options.backgroundColor = themeStyle.background;
}
if (themeStyle.fontStyle) {
const parts: string[] = themeStyle.fontStyle.split(" ");
parts.forEach((part) => {
switch (part) {
case "italic":
options.fontStyle = "italic";
break;
case "bold":
options.fontWeight = "bold";
break;
case "underline":
options.textDecoration = "underline";
break;
default:
break;
}
});
}
return vscode.window.createTextEditorDecorationType(options);
}
return undefined;
}
}
export class ColorizationState {
private uri: vscode.Uri;
private colorizationSettings: ColorizationSettings;
private decorations: (vscode.TextEditorDecorationType | undefined)[] = new Array<vscode.TextEditorDecorationType | undefined>(TokenKind.Count);
private semanticRanges: vscode.Range[][] = new Array<vscode.Range[]>(TokenKind.Count);
private inactiveDecoration: vscode.TextEditorDecorationType | undefined;
private inactiveRanges: vscode.Range[] = [];
private versionedEdits: VersionedEdits[] = [];
private currentSemanticVersion: number = 0;
private lastReceivedSemanticVersion: number = 0;
public constructor(uri: vscode.Uri, colorizationSettings: ColorizationSettings) {
this.uri = uri;
this.colorizationSettings = colorizationSettings;
}
private createColorizationDecorations(isCpp: boolean): void {
const settings: CppSettings = new CppSettings(this.uri);
if (settings.enhancedColorization) {
// Create new decorators
// The first decorator created takes precedence, so these need to be created in reverse order
for (let i: number = TokenKind.Count; i > 0;) {
i--;
let themeStyleMap: any;
if (isCpp) {
themeStyleMap = this.colorizationSettings.themeStyleCppMap;
} else {
themeStyleMap = this.colorizationSettings.themeStyleCMap;
}
this.decorations[i] = ColorizationSettings.createDecorationFromThemeStyle(themeStyleMap[i]);
}
}
if (settings.dimInactiveRegions) {
const opacity: number | undefined = settings.inactiveRegionOpacity;
if (opacity !== null && opacity !== undefined) {
let backgroundColor: string | undefined = settings.inactiveRegionBackgroundColor;
if (backgroundColor === "") {
backgroundColor = undefined;
}
let color: string | undefined = settings.inactiveRegionForegroundColor;
if (color === "") {
color = undefined;
}
this.inactiveDecoration = vscode.window.createTextEditorDecorationType({
opacity: opacity.toString(),
backgroundColor: backgroundColor,
color: color,
rangeBehavior: vscode.DecorationRangeBehavior.OpenOpen
});
}
}
}
private disposeColorizationDecorations(): void {
// Dispose of all old decorations
if (this.inactiveDecoration) {
this.inactiveDecoration.dispose();
this.inactiveDecoration = undefined;
}
for (let i: number = 0; i < TokenKind.Count; i++) {
const decoration: vscode.TextEditorDecorationType | undefined = this.decorations[i];
if (decoration) {
decoration.dispose();
this.decorations[i] = undefined;
}
}
}
public dispose(): void {
this.disposeColorizationDecorations();
}
private refreshInner(e: vscode.TextEditor): void {
const settings: CppSettings = new CppSettings(this.uri);
if (settings.enhancedColorization) {
for (let i: number = 0; i < TokenKind.Count; i++) {
const decoration: vscode.TextEditorDecorationType | undefined = this.decorations[i];
if (decoration) {
const ranges: vscode.Range[] = this.semanticRanges[i];
if (ranges && ranges.length > 0) {
e.setDecorations(decoration, ranges);
}
}
}
}
// Normally, decorators are honored in the order in which they were created, not the
// order in which they were applied. Decorators with opacity appear to be handled
// differently, in that the opacity is applied to overlapping decorators even if
// created afterwards.
if (settings.dimInactiveRegions && this.inactiveDecoration && this.inactiveRanges) {
e.setDecorations(this.inactiveDecoration, this.inactiveRanges);
}
}
public refresh(e: vscode.TextEditor): void {
this.applyEdits();
const f: () => void = async () => {
this.refreshInner(e);
};
this.colorizationSettings.syncWithLoadingSettings(f);
}
public onSettingsChanged(uri: vscode.Uri): void {
const f: () => void = async () => {
this.applyEdits();
this.disposeColorizationDecorations();
const isCpp: boolean = util.isEditorFileCpp(uri.toString());
this.createColorizationDecorations(isCpp);
const editors: vscode.TextEditor[] = vscode.window.visibleTextEditors.filter(e => e.document.uri === uri);
for (const e of editors) {
this.refreshInner(e);
}
};
this.colorizationSettings.syncWithLoadingSettings(f);
}
// Utility function to convert a string and a start Position into a Range
private textToRange(text: string, startPosition: vscode.Position): vscode.Range {
const parts: string[] = text.split("\n");
const addedLines: number = parts.length - 1;
const newStartLine: number = startPosition.line;
const newStartCharacter: number = startPosition.character;
const newEndLine: number = newStartLine + addedLines;
let newEndCharacter: number = parts[parts.length - 1].length;
if (newStartLine === newEndLine) {
newEndCharacter += newStartCharacter;
}
return new vscode.Range(newStartLine, newStartCharacter, newEndLine, newEndCharacter);
}
// Utility function to shift a range back after removing content before it
private shiftRangeAfterRemove(range: vscode.Range, removeStartPosition: vscode.Position, removeEndPosition: vscode.Position): vscode.Range {
const lineDelta: number = removeStartPosition.line - removeEndPosition.line;
let startCharacterDelta: number = 0;
let endCharacterDelta: number = 0;
if (range.start.line === removeEndPosition.line) {
startCharacterDelta = removeStartPosition.character - removeEndPosition.character;
if (range.end.line === removeEndPosition.line) {
endCharacterDelta = startCharacterDelta;
}
}
const newStart: vscode.Position = range.start.translate(lineDelta, startCharacterDelta);
const newEnd: vscode.Position = range.end.translate(lineDelta, endCharacterDelta);
return new vscode.Range(newStart, newEnd);
}
// Utility function to shift a range forward after inserting content before it
private shiftRangeAfterInsert(range: vscode.Range, insertStartPosition: vscode.Position, insertEndPosition: vscode.Position): vscode.Range {
const addedLines: number = insertEndPosition.line - insertStartPosition.line;
const newStartLine: number = range.start.line + addedLines;
const newEndLine: number = range.end.line + addedLines;
let newStartCharacter: number = range.start.character;
let newEndCharacter: number = range.end.character;
// If starts on the same line as replacement ended
if (insertEndPosition.line === newStartLine) {
let endOffsetLength: number = insertEndPosition.character;
// If insertRange starts and ends on the same line, only offset by it's length
if (insertEndPosition.line === insertStartPosition.line) {
endOffsetLength -= insertStartPosition.character;
}
newStartCharacter += endOffsetLength;
if (insertEndPosition.line === newEndLine) {
newEndCharacter += endOffsetLength;
}
}
return new vscode.Range(newStartLine, newStartCharacter, newEndLine, newEndCharacter);
}
// Utility function to adjust a range to account for an insert and/or replace
private fixRange(range: vscode.Range, removeInsertStartPosition: vscode.Position, removeEndPosition: vscode.Position, insertEndPosition: vscode.Position): vscode.Range | undefined {
// If the replace/insert starts after this range ends, no adjustment is needed.
if (removeInsertStartPosition.isAfterOrEqual(range.end)) {
return range;
}
// Else, replace/insert range starts before this range ends.
// If replace/insert starts before/where this range starts, we don't need to extend the existing range, but need to shift it
if (removeInsertStartPosition.isBeforeOrEqual(range.start)) {
// If replace consumes the entire range, remove it
if (removeEndPosition.isAfterOrEqual(range.end)) {
return undefined;
}
// If replace ends within this range, we need to trim it before we shift it
let newRange: vscode.Range;
if (removeEndPosition.isAfterOrEqual(range.start)) {
newRange = new vscode.Range(removeEndPosition, range.end);
} else {
newRange = range;
}
// Else, if replace ends before this range starts, we just need to shift it.
newRange = this.shiftRangeAfterRemove(newRange, removeInsertStartPosition, removeEndPosition);
return this.shiftRangeAfterInsert(newRange, removeInsertStartPosition, insertEndPosition);
}
// Else, if replace/insert starts within (not before or after) range, extend it.
// If there replace/insert overlaps past the end of the original range, just extend existing range to the insert end position
if (removeEndPosition.isAfterOrEqual(range.end)) {
return new vscode.Range(range.start.line, range.start.character, insertEndPosition.line, insertEndPosition.character);
}
// Else, range has some left over at the end, which needs to be shifted after insertEndPosition.
// If the trailing segment is on the last line replace, we just need to extend by the remaining number of characters
if (removeEndPosition.line === range.end.line) {
return new vscode.Range(range.start.line, range.start.character, insertEndPosition.line, insertEndPosition.character + (range.end.character - removeEndPosition.character));
}
// Else, the trailing segment ends on another line, so the character position should remain the same. Just adjust based on added/removed lined.
const removedLines: number = removeEndPosition.line - removeInsertStartPosition.line;
const addedLines: number = insertEndPosition.line - removeInsertStartPosition.line;
const deltaLines: number = addedLines - removedLines;
return new vscode.Range(range.start.line, range.start.character, range.end.line + deltaLines, range.end.character);
}
private fixRanges(originalRanges: vscode.Range[], changes: readonly vscode.TextDocumentContentChangeEvent[]): vscode.Range[] {
// outer loop needs to be the versioned edits, then changes within that edit, then ranges
let ranges: vscode.Range[] = originalRanges;
if (ranges && ranges.length > 0) {
changes.forEach((change) => {
const newRanges: vscode.Range[] = [];
const insertRange: vscode.Range = this.textToRange(change.text, change.range.start);
for (let i: number = 0; i < ranges.length; i++) {
const newRange: vscode.Range | undefined = this.fixRange(ranges[i], change.range.start, change.range.end, insertRange.end);
if (newRange) {
newRanges.push(newRange);
}
}
ranges = newRanges;
});
}
return ranges;
}
// Add edits to be applied when/if cached tokens need to be reapplied.
public addEdits(changes: readonly vscode.TextDocumentContentChangeEvent[], editVersion: number): void {
const edits: VersionedEdits = {
editVersion: editVersion,
changes: changes
};
this.versionedEdits.push(edits);
}
// Apply any pending edits to the currently cached tokens
private applyEdits(): void {
this.versionedEdits.forEach((edit) => {
if (edit.editVersion > this.currentSemanticVersion) {
for (let i: number = 0; i < TokenKind.Count; i++) {
this.semanticRanges[i] = this.fixRanges(this.semanticRanges[i], edit.changes);
}
this.inactiveRanges = this.fixRanges(this.inactiveRanges, edit.changes);
this.currentSemanticVersion = edit.editVersion;
}
});
}
// Remove any edits from the list if we will never receive tokens that old.
private purgeOldVersionedEdits(): void {
const minVersion: number = this.lastReceivedSemanticVersion;
const index: number = this.versionedEdits.findIndex((edit) => edit.editVersion > minVersion);
if (index === -1) {
this.versionedEdits = [];
} else if (index > 0) {
this.versionedEdits = this.versionedEdits.slice(index);
}
}
private updateColorizationRanges(uri: string): void {
const f: () => void = async () => {
this.applyEdits();
this.purgeOldVersionedEdits();
// The only way to un-apply decorators is to dispose them.
// If we dispose old decorators before applying new decorators, we see a flicker on Mac,
// likely due to a race with UI updates. Here we set aside the existing decorators to be
// disposed of after the new decorators have been applied, so there is not a gap
// in which decorators are not applied.
const oldInactiveDecoration: vscode.TextEditorDecorationType | undefined = this.inactiveDecoration;
const oldDecorations: (vscode.TextEditorDecorationType | undefined)[] = this.decorations;
this.inactiveDecoration = undefined;
this.decorations = new Array<vscode.TextEditorDecorationType>(TokenKind.Count);
const isCpp: boolean = util.isEditorFileCpp(uri);
this.createColorizationDecorations(isCpp);
// Apply the decorations to all *visible* text editors
const editors: vscode.TextEditor[] = vscode.window.visibleTextEditors.filter(e => e.document.uri.toString() === uri);
for (const e of editors) {
this.refreshInner(e);
}
// Dispose of the old decorators only after the new ones have been applied.
if (oldInactiveDecoration) {
oldInactiveDecoration.dispose();
}
if (oldDecorations) {
for (let i: number = 0; i < TokenKind.Count; i++) {
const oldDecoration: vscode.TextEditorDecorationType | undefined = oldDecorations[i];
if (oldDecoration) {
oldDecoration.dispose();
}
}
}
};
this.colorizationSettings.syncWithLoadingSettings(f);
}
public updateSemantic(uri: string, semanticRanges: vscode.Range[][], inactiveRanges: vscode.Range[], editVersion: number): void {
this.inactiveRanges = inactiveRanges;
for (let i: number = 0; i < TokenKind.Count; i++) {
this.semanticRanges[i] = semanticRanges[i];
}
this.currentSemanticVersion = editVersion;
this.lastReceivedSemanticVersion = editVersion;
this.updateColorizationRanges(uri);
}
}
@@ -299,11 +299,14 @@ export class CppProperties {
// Only add settings from the default compiler if user hasn't explicitly set the corresponding VS Code setting.
const abTestSettings: ABTestSettings = getABTestSettings();
const rootFolder: string = abTestSettings.UseRecursiveIncludes ? "${workspaceFolder}/**" : "${workspaceFolder}";
const defaultFolder: string = "${default}";
// We don't add system includes to the includePath anymore. The language server has this information.
if (isUnset(settings.defaultIncludePath)) {
// We don't add system includes to the includePath anymore. The language server has this information.
const abTestSettings: ABTestSettings = getABTestSettings();
const rootFolder: string = abTestSettings.UseRecursiveIncludes ? "${workspaceFolder}/**" : "${workspaceFolder}";
configuration.includePath = [rootFolder].concat(this.vcpkgIncludes);
} else {
configuration.includePath = [rootFolder].concat(this.vcpkgIncludes).concat([defaultFolder]);
}
// browse.path is not set by default anymore. When it is not set, the includePath will be used instead.
if (isUnset(settings.defaultDefines)) {
@@ -679,9 +682,6 @@ export class CppProperties {
try {
filePaths.forEach((path: string) => {
this.compileCommandFileWatchers.push(fs.watch(path, (event: string, filename: string) => {
if (event === "rename") {
return;
}
// Wait 1 second after a change to allow time for the write to finish.
if (this.compileCommandsFileWatcherTimer) {
clearInterval(this.compileCommandsFileWatcherTimer);
+18 -35
View File
@@ -454,7 +454,6 @@ function realActivation(): void {
disposables.push(vscode.window.onDidChangeActiveTextEditor(onDidChangeActiveTextEditor));
disposables.push(vscode.window.onDidChangeTextEditorSelection(onDidChangeTextEditorSelection));
disposables.push(vscode.window.onDidChangeVisibleTextEditors(onDidChangeVisibleTextEditors));
disposables.push(vscode.window.onDidChangeTextEditorVisibleRanges(onDidChangeTextEditorVisibleRanges));
updateLanguageConfigurations();
@@ -474,10 +473,15 @@ function realActivation(): void {
if (vscodeVersion.isGreaterThan(minimumSupportedVersionForInsidersUpgrades, "insider")) {
insiderUpdateEnabled = true;
if (settings.updateChannel === 'Default') {
suggestInsidersChannel();
const userVersion: PackageVersion = new PackageVersion(util.packageJson.version);
if (userVersion.suffix === "insiders") {
checkAndApplyUpdate(settings.updateChannel, false);
} else {
suggestInsidersChannel();
}
} else if (settings.updateChannel === 'Insiders') {
insiderUpdateTimer = global.setInterval(checkAndApplyUpdate, insiderUpdateTimerInterval, settings.updateChannel);
checkAndApplyUpdate(settings.updateChannel);
insiderUpdateTimer = global.setInterval(checkAndApplyUpdateOnTimer, insiderUpdateTimerInterval);
checkAndApplyUpdate(settings.updateChannel, false);
}
}
}
@@ -514,10 +518,10 @@ function onDidChangeSettings(event: vscode.ConfigurationChangeEvent): void {
if (newUpdateChannel === 'Default') {
clearInterval(insiderUpdateTimer);
} else if (newUpdateChannel === 'Insiders') {
insiderUpdateTimer = global.setInterval(checkAndApplyUpdate, insiderUpdateTimerInterval);
insiderUpdateTimer = global.setInterval(checkAndApplyUpdateOnTimer, insiderUpdateTimerInterval);
}
checkAndApplyUpdate(newUpdateChannel);
checkAndApplyUpdate(newUpdateChannel, true);
}
}
}
@@ -601,32 +605,6 @@ function onDidChangeVisibleTextEditors(editors: vscode.TextEditor[]): void {
processDelayedDidOpen(editor.document);
}
});
clients.forEach(client => {
const editorsForThisClient: vscode.TextEditor[] = [];
editors.forEach(editor => {
if (editor.document.languageId === "c" || editor.document.languageId === "cpp"
|| editor.document.languageId === "json" && editor.document.uri.fsPath.endsWith("c_cpp_properties.json")) {
if (clients.checkOwnership(client, editor.document)) {
editorsForThisClient.push(editor);
}
}
});
if (editorsForThisClient.length > 0) {
client.onDidChangeVisibleTextEditors(editorsForThisClient);
}
});
}
function onDidChangeTextEditorVisibleRanges(textEditorVisibleRangesChangeEvent: vscode.TextEditorVisibleRangesChangeEvent): void {
const languageId: String = textEditorVisibleRangesChangeEvent.textEditor.document.languageId;
if (languageId === "c" || languageId === "cpp") {
clients.forEach(client => {
if (clients.checkOwnership(client, textEditorVisibleRangesChangeEvent.textEditor.document)) {
client.onDidChangeTextEditorVisibleRanges(textEditorVisibleRangesChangeEvent);
}
});
}
}
function onInterval(): void {
@@ -764,7 +742,7 @@ async function suggestInsidersChannel(): Promise<void> {
}
let buildInfo: BuildInfo | undefined;
try {
buildInfo = await getTargetBuildInfo("Insiders");
buildInfo = await getTargetBuildInfo("Insiders", false);
} catch (error) {
console.log(`${cppInstallVsixStr}${error.message}`);
if (error.message.indexOf('/') !== -1 || error.message.indexOf('\\') !== -1) {
@@ -856,12 +834,17 @@ async function applyUpdate(buildInfo: BuildInfo): Promise<void> {
}
}
async function checkAndApplyUpdateOnTimer(): Promise<void> {
return checkAndApplyUpdate('Insiders', false);
}
/**
* Query package.json and the GitHub API to determine whether the user should update, if so then install the update.
* The update can be an upgrade or downgrade depending on the the updateChannel setting.
* @param updateChannel The user's updateChannel setting.
* @param isFromSettingsChange True if the invocation is the result of a settings change.
*/
async function checkAndApplyUpdate(updateChannel: string): Promise<void> {
async function checkAndApplyUpdate(updateChannel: string, isFromSettingsChange: boolean): Promise<void> {
// If we have buildInfo cache, we should use it.
let buildInfo: BuildInfo | undefined = buildInfoCache;
// clear buildInfo cache.
@@ -869,7 +852,7 @@ async function checkAndApplyUpdate(updateChannel: string): Promise<void> {
if (!buildInfo) {
try {
buildInfo = await getTargetBuildInfo(updateChannel);
buildInfo = await getTargetBuildInfo(updateChannel, isFromSettingsChange);
} catch (error) {
telemetry.logLanguageServerEvent('installVsix', { 'error': error.message, 'success': 'false' });
}
@@ -64,7 +64,7 @@ export function createProtocolFilter(clients: ClientCollection): Middleware {
// NO-OP
// If the file is not opened into an editor (such as in response for a control-hover),
// we do not actually load a translation unit for it. When we receive a didOpen, the file
// may not yet be visible. So, we defer creation of the translation until we receive a
// may not yet be visible. So, we defer creation of the translation until we receive a
// call to onDidChangeVisibleTextEditors(), in extension.ts. A file is only loaded when
// it is actually opened in the editor (not in response to control-hover, which sends a
// didOpen), and first becomes visible.
+1
View File
@@ -126,6 +126,7 @@ export class CppSettings extends Settings {
public get workspaceParsingPriority(): string | undefined { return super.Section.get<string>("workspaceParsingPriority"); }
public get workspaceSymbols(): string | undefined { return super.Section.get<string>("workspaceSymbols"); }
public get exclusionPolicy(): string | undefined { return super.Section.get<string>("exclusionPolicy"); }
public get simplifyStructuredComments(): boolean | undefined { return super.Section.get<boolean>("simplifyStructuredComments"); }
public get commentContinuationPatterns(): (string | CommentPattern)[] | undefined { return super.Section.get<(string | CommentPattern)[]>("commentContinuationPatterns"); }
public get configurationWarnings(): string | undefined { return super.Section.get<string>("configurationWarnings"); }
public get preferredPathSeparator(): string | undefined { return super.Section.get<string>("preferredPathSeparator"); }
@@ -48,7 +48,13 @@ export class SettingsTracker {
if (val === undefined) {
continue;
}
if (val instanceof Object && !(val instanceof Array)) {
// Iterate through dotted "sub" settings.
const collectSettingsRecursive = (key: string, val: Object, depth: number) => {
if (depth > 4) {
// Limit settings recursion to 4 dots (not counting the first one in: `C_Cpp.`)
return;
}
for (const subKey in val) {
const newKey: string = key + "." + subKey;
const newRawSetting: any = util.packageJson.contributes.configuration.properties["C_Cpp." + newKey];
@@ -57,11 +63,18 @@ export class SettingsTracker {
if (subVal === undefined) {
continue;
}
const entry: KeyValuePair | undefined = this.filterAndSanitize(newKey, subVal, correctlyScopedSubSettings, filter);
if (entry && entry.key && entry.value) {
result[entry.key] = entry.value;
if (subVal instanceof Object && !(subVal instanceof Array)) {
collectSettingsRecursive(newKey, subVal, depth + 1);
} else {
const entry: KeyValuePair | undefined = this.filterAndSanitize(newKey, subVal, correctlyScopedSubSettings, filter);
if (entry && entry.key && entry.value) {
result[entry.key] = entry.value;
}
}
}
};
if (val instanceof Object && !(val instanceof Array)) {
collectSettingsRecursive(key, val, 1);
continue;
}
@@ -158,6 +171,7 @@ export class SettingsTracker {
break;
}
case "commentContinuationPatterns": {
key = "commentContinuationPatterns2";
value = this.areEqual(val, settings.inspect(key)?.defaultValue) ? "<default>" : "..."; // Track whether it's being used, but nothing specific about it.
break;
}
+6 -4
View File
@@ -126,10 +126,11 @@ export interface BuildInfo {
/**
* Use the GitHub API to retrieve the download URL of the extension version the user should update to, if any.
* @param updateChannel The user's updateChannel setting.
* @param isFromSettingsChange True if the invocation is the result of a settings change.
* @return Download URL for the extension VSIX package that the user should install. If the user
* does not need to update, resolves to undefined.
*/
export async function getTargetBuildInfo(updateChannel: string): Promise<BuildInfo | undefined> {
export async function getTargetBuildInfo(updateChannel: string, isFromSettingsChange: boolean): Promise<BuildInfo | undefined> {
return getReleaseJson()
.then(builds => {
if (!builds || builds.length === 0) {
@@ -144,7 +145,7 @@ export async function getTargetBuildInfo(updateChannel: string): Promise<BuildIn
return undefined;
}
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, isFromSettingsChange);
if (targetBuild === undefined) {
// no action
telemetry.logLanguageServerEvent("UpgradeCheck", { "action": "none" });
@@ -180,10 +181,11 @@ export async function getTargetBuildInfo(updateChannel: string): Promise<BuildIn
* @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.
* @param isFromSettingsChange True if the invocation is the result of a settings change.
* @return The Build if the user should update to it, otherwise undefined.
*/
export function getTargetBuild(builds: Build[], userVersion: PackageVersion, updateChannel: string): Build | undefined {
if (!vscode.workspace.getConfiguration("extensions", null).get<boolean>("autoUpdate")) {
export function getTargetBuild(builds: Build[], userVersion: PackageVersion, updateChannel: string, isFromSettingsChange: boolean): Build | undefined {
if (!isFromSettingsChange && !vscode.workspace.getConfiguration("extensions", null).get<boolean>("autoUpdate")) {
return undefined;
}
const latestVersion: PackageVersion = new PackageVersion(builds[0].name);
+3
View File
@@ -165,6 +165,9 @@ async function offlineInstallation(info: PlatformInformation): Promise<void> {
setInstallationStage('cleanUpUnusedBinaries');
await cleanUpUnusedBinaries(info);
setInstallationStage('cleanUpUnusedBinaries');
await cleanUpUnusedBinaries(info);
setInstallationStage('makeBinariesExecutable');
await makeBinariesExecutable();
+33 -1
View File
@@ -158,5 +158,37 @@
"fallback_to_no_bitness": "Failed to query compiler. Falling back to no bitness.",
"intellisense_client_creation_aborted": "IntelliSense client creation aborted: {0}",
"include_errors_config_provider_intellisense_disabled ": "#include errors detected based on information provided by the configurationProvider setting. IntelliSense features for this translation unit ({0}) will be provided by the Tag Parser.",
"include_errors_config_provider_squiggles_disabled ": "#include errors detected based on information provided by the configurationProvider setting. Squiggles are disabled for this translation unit ({0})."
"include_errors_config_provider_squiggles_disabled ": "#include errors detected based on information provided by the configurationProvider setting. Squiggles are disabled for this translation unit ({0}).",
"preprocessor_keyword": {
"text": "preprocessor keyword",
"hint": "Refers to C/C++ processor keywords"
},
"c_keyword": "C keyword",
"cpp_keyword": "C++ keyword",
"overload": {
"text": "+1 overload",
"hint": "Refers to 'overloaded' function in C++. This is part of a description indicating there is 1 additional overload of a specified function."
},
"overloads": {
"text": "+%d overloads",
"hint": "Refers to 'overloaded' functions in C++. This is part of a description indicating there are N additional overloads of a specified function. %d is replaced with that number."
},
"specialization": {
"text": "+1 specialization",
"hint": "Refers to a C++ template specialization. This is part of a description indicating there is 1 additional specialization of a function."
},
"specializations": {
"text": "+%d specializations",
"hint": "Refers to C++ template specializations. This is part of a description indicating there are N additional specializations of a function. %d is replaced with that number."
},
"expands_to": "Expands to:",
"file_label": "File:",
"parameters_label": "Parameters:",
"returns_label": {
"text": "Returns:",
"hint": "This label is for the return value description for a function. Usage example: 'Returns: Area of a shape.'"
},
"deprecated_label": "Deprecated:",
"exceptions_label": "Exceptions:",
"template_parameters_label": "Template Parameters:"
}
+12 -12
View File
@@ -31,7 +31,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider2);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild.name, release0);
});
});
@@ -46,7 +46,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider1);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild, undefined);
});
test("Insider to Insider", () => {
@@ -56,7 +56,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider3);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild, undefined);
});
test("Release to Insider", () => {
@@ -67,7 +67,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(release1);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild, undefined);
});
});
@@ -81,7 +81,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider3);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild.name, release0);
});
test("Insider to Insider", () => {
@@ -92,7 +92,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider3);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild.name, insider1);
});
});
@@ -107,7 +107,7 @@ suite("UpgradeDowngrade", () => {
name: insider2, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(release0);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild.name, release1);
});
test("Insider to Release", () => {
@@ -117,7 +117,7 @@ suite("UpgradeDowngrade", () => {
name: insider2, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider2);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild.name, release1);
});
});
@@ -130,7 +130,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(release0);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild.name, insider1);
});
test("Release to Insider, no Upgrade", () => {
@@ -140,7 +140,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(release0);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild, undefined);
});
test("Insider to Insider, Upgrade", () => {
@@ -151,7 +151,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider1);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild.name, insider2);
});
test("Insider to Insider, no Upgrade", () => {
@@ -161,7 +161,7 @@ suite("UpgradeDowngrade", () => {
name: release0, assets: three_assets}];
const userVersion: PackageVersion = new PackageVersion(insider2);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel);
const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, false);
assert.equal(targetBuild, undefined);
});
});
+11 -1
View File
@@ -49,7 +49,7 @@
"quoteArgs": {
"exceptions": {
"type": "boolean",
"description": "%c_cpp.debuggers.logging.quoteArgs.description%",
"description": "%c_cpp.debuggers.pipeTransport.quoteArgs.description%",
"default": true
}
}
@@ -535,6 +535,16 @@
"type": "boolean",
"description": "%c_cpp.debuggers.logging.engineLogging.description%",
"default": false
},
"threadExit": {
"type": "boolean",
"description": "%c_cpp.debuggers.cppvsdbg.logging.threadExit.description%",
"default": false
},
"processExit": {
"type": "boolean",
"description": "%c_cpp.debuggers.cppvsdbg.logging.processExit.description%",
"default": true
}
}
},
+8 -8
View File
@@ -204,10 +204,10 @@
dependencies:
source-map "^0.6.1"
"@types/[email protected]3.0":
version "1.43.0"
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.43.0.tgz#22276e60034c693b33117f1068ffaac0e89522db"
integrity sha512-kIaR9qzd80rJOxePKpCB/mdy00mz8Apt2QA5Y6rdrKFn13QNFNeP3Hzmsf37Bwh/3cS7QjtAeGSK7wSqAU0sYQ==
"@types/[email protected]4.0":
version "1.44.0"
resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.44.0.tgz#62ecfe3d0e38942fce556574da54ee1013c775b7"
integrity sha512-WJZtZlinE3meRdH+I7wTsIhpz/GLhqEQwmPGeh4s1irWLwMzCeTV8WZ+pgPTwrDXoafVUWwo1LiZ9HJVHFlJSQ==
"@types/webpack-sources@*":
version "0.1.6"
@@ -5591,10 +5591,10 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
vscode-cpptools@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/vscode-cpptools/-/vscode-cpptools-3.1.0.tgz#fbc0e493e81a05baf01702ea8b9467c39fba257d"
integrity sha512-z4W/A1TQMEtqTEWNY3Hb4HJcJ2J3HeaLHp3TyqCotoRkLU8ovH4jmDb5tNTyh3DgIiaAAnDalO03A4wm5IvNBg==
vscode-cpptools@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/vscode-cpptools/-/vscode-cpptools-4.0.1.tgz#7e591572b437a6aca47b767487b52bc253e6d911"
integrity sha512-2IjtWe7rjIp20J+5m0Yjpa8TjGhdQWChwE49iYJBUUTHFqJDFq0aXNAyiDNw6BDWI1Q2Z/gmeQGsJBoxTb0J0Q==
vscode-debugadapter@^1.35.0:
version "1.38.0"
+15 -19
View File
@@ -1,19 +1,15 @@
------------------------------------------- START OF LICENSE -----------------------------------------
vscode-cpptools
Copyright (c) Microsoft Corporation
All rights reserved.
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----------------------------------------------- END OF LICENSE ------------------------------------------
vscode-cpptools
Copyright (c) Microsoft Corporation
All rights reserved.
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+5 -3
View File
@@ -1,8 +1,10 @@
# C/C++ Extension UI Themes
[Semantic colorization was added to the C/C++ Extension in version 0.24.0](https://devblogs.microsoft.com/cppblog/visual-studio-code-c-c-extension-july-2019-update/). By default, colorization in VS Code is syntactic/lexical and leverages TextMate grammar to associate named 'scopes' with syntactic elements. Themes and settings can be used to apply the colors associated with those scopes. Our implementation of semantic colorization leverages the same system of associating colors with named scopes. But, some tokens that can be colored by semantic colorization in C/C++ do not have existing analogs in VS Code's TextMate grammar. So, new named scopes are required. Information about these new scopes can be found [here](https://code.visualstudio.com/docs/cpp/colorization-cpp). Because these scopes are new, existing themes do not include colors for them either.
[Semantic colorization was added to the C/C++ Extension in version 0.24.0](https://devblogs.microsoft.com/cppblog/visual-studio-code-c-c-extension-july-2019-update/). At the time, colorization in VS Code was purely syntactic/lexical and leveraged TextMate grammar to associate named 'scopes' with syntactic elements. Themes and settings can be used to associate colors with these scopes. Our original implementation of semantic colorization leveraged the same system of associating colors with named scopes. But, some tokens that can be colored by semantic colorization in C/C++ did not have existing analogs in VS Code's TextMate grammar. So, new named scopes are required. Because these scopes were new, existing themes did not include colors for them either.
We created C/C++ Extension UI Themes to closely match Visual Studio themes, and include colors for many of the new scopes.
We created C/C++ Extension UI Themes to closely match Visual Studio themes and include colors for many of the new scopes.
VS Code has since provided an API for semantic colorization. The C/C++ Extension has transitioned from its own implementation to this new API. These themes now include colors for some of the new semantic token scopes.
## Example
@@ -16,7 +18,7 @@ Dark Theme
## Contributing
This project welcomes contributions and suggestions. Most contributions require you to agree to a
This project welcomes contributions and suggestions. Most contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
+33
View File
@@ -20,6 +20,7 @@
"statusBarItem.remoteForeground": "#FFF",
"statusBarItem.remoteBackground": "#16825D"
},
"semanticHighlighting": true,
"tokenColors": [
{
"scope": [
@@ -466,5 +467,37 @@
"foreground": "#7F7F7F"
}
}
],
"semanticTokenColors": [
{
"operatorOverload": {
"foreground": "#B4B4B4"
}
},
{
"operatorOverloadMember": {
"foreground": "#B4B4B4"
}
},
{
"newOperator": {
"foreground": "#569CD6"
}
},
{
"numberLiteral": {
"foreground": "#B5CEA8"
}
},
{
"customLiteral": {
"foreground": "#DADADA"
}
},
{
"stringLiteral": {
"foreground": "#D69D85"
}
}
]
}
+23
View File
@@ -19,6 +19,7 @@
"statusBarItem.remoteForeground": "#FFF",
"statusBarItem.remoteBackground": "#16825D"
},
"semanticHighlighting": true,
"tokenColors": [
{
"scope": ["meta.embedded", "source.groovy.embedded"],
@@ -455,5 +456,27 @@
"foreground": "#808080"
}
}
],
"semanticTokenColors": [
{
"operatorOverload": {
"foreground": "#008080"
}
},
{
"operatorOverloadMember": {
"foreground": "#008080"
}
},
{
"newOperator": {
"foreground": "#0000FF"
}
},
{
"stringLiteral": {
"foreground": "#A31515"
}
}
]
}