diff --git a/.github/actions/package-lock.json b/.github/actions/package-lock.json index 3f3639fd52..ce5f571039 100644 --- a/.github/actions/package-lock.json +++ b/.github/actions/package-lock.json @@ -940,9 +940,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.get": { diff --git a/.github/workflows/enhancement-closer-no-milestone.yml b/.github/workflows/enhancement-closer-no-milestone.yml new file mode 100644 index 0000000000..d60cdc05e0 --- /dev/null +++ b/.github/workflows/enhancement-closer-no-milestone.yml @@ -0,0 +1,30 @@ +name: Enhancement Closer (no milestone) +on: + schedule: + - cron: 50 11 * * * # Run at 11:50 AM UTC (3:50 AM PST, 4:50 AM PDT) + workflow_dispatch: + inputs: + readonly: + description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub" + default: false + +jobs: + main: + runs-on: ubuntu-latest + steps: + - name: Checkout Actions + uses: actions/checkout@v2 + - name: Install Actions + run: cd ./.github/actions && npm install --production && cd ../.. + - name: Stale Closer + uses: ./.github/actions/StaleCloser + with: + readonly: ${{ github.event.inputs.readonly }} + labels: enhancement + ignoreLabels: debugger,internal,Feature Request + addLabels: more votes needed + closeDays: 60 + maximumVotes: 2 + closeComment: "This feature request is being closed due to insufficient upvotes. When enough upvotes are received, this issue will be eligible for our backlog." + setMilestoneId: 30 + ignoreMilestoneNames: "*" diff --git a/.github/workflows/enhancement-closer-triage.yml b/.github/workflows/enhancement-closer-triage.yml new file mode 100644 index 0000000000..cda38dc32c --- /dev/null +++ b/.github/workflows/enhancement-closer-triage.yml @@ -0,0 +1,30 @@ +name: Enhancement Closer (Triage) +on: + schedule: + - cron: 40 11 * * * # Run at 11:40 AM UTC (3:40 AM PST, 4:40 AM PDT) + workflow_dispatch: + inputs: + readonly: + description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub" + default: false + +jobs: + main: + runs-on: ubuntu-latest + steps: + - name: Checkout Actions + uses: actions/checkout@v2 + - name: Install Actions + run: cd ./.github/actions && npm install --production && cd ../.. + - name: Stale Closer + uses: ./.github/actions/StaleCloser + with: + readonly: ${{ github.event.inputs.readonly }} + labels: enhancement + ignoreLabels: debugger,internal,Feature Request + addLabels: more votes needed + closeDays: 60 + maximumVotes: 2 + closeComment: "This feature request is being closed due to insufficient upvotes. When enough upvotes are received, this issue will be eligible for our backlog." + milestoneName: Triage + milestoneId: 30 diff --git a/.github/workflows/enhancement-reopener.yml b/.github/workflows/enhancement-reopener.yml new file mode 100644 index 0000000000..28fe260a2e --- /dev/null +++ b/.github/workflows/enhancement-reopener.yml @@ -0,0 +1,31 @@ +name: Enhancement Reopener +on: + schedule: + - cron: 20 12 * * * # Run at 12:20 PM UTC (4:20 AM PST, 5:20 AM PDT) + workflow_dispatch: + inputs: + readonly: + description: "readonly: Specify true or 1 to prevent changes from being commited to GitHub" + default: false + +jobs: + main: + runs-on: ubuntu-latest + steps: + - name: Checkout Actions + uses: actions/checkout@v2 + - name: Install Actions + run: cd ./.github/actions && npm install --production && cd ../.. + - name: Run Reopener + uses: ./.github/actions/Reopener + with: + readonly: ${{ github.event.inputs.readonly }} + alsoApplyToOpenIssues: true + reopenComment: This feature request has received enough votes to be added to our backlog. + labels: enhancement + minimumVotes: 3 + ignoreLabels: debugger,internal,Feature Request + milestoneId: 30 + milestoneName: Triage + setMilestoneId: 28 + removeLabels: more votes needed diff --git a/.gitignore b/.gitignore index 820aa2110d..b092799c6a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,8 @@ browse*.db* *.exe *.ilk -# ignore exported localization xlf directory +# ignore exported localization xlf and LCL directories +Build/loc/LCL vscode-extensions-localization-export # ignore imported localization xlf directory diff --git a/Build/loc/LocProject.json b/Build/loc/LocProject.json new file mode 100644 index 0000000000..437ead4712 --- /dev/null +++ b/Build/loc/LocProject.json @@ -0,0 +1,14 @@ +{ + "Projects": [ + { + "LanguangeSet": "VS_Main_Languages", + "LocItems": [ + { + "SourceFile": "vscode-extensions-localization-export\\vscode-extensions\\vscode-cpptools.xlf", + "Languages": "cs;de;es;fr;it;ja;ko;pl;pt-BR;ru;tr;zh-Hans;zh-Hant", + "LclFile": "Build\\loc\\LCL\\{Lang}\\vscode-cpptools.xlf.lcl" + } + ] + } + ] +} diff --git a/Build/loc/TranslationsImportExport.yml b/Build/loc/TranslationsImportExport.yml new file mode 100644 index 0000000000..2ac6819ae6 --- /dev/null +++ b/Build/loc/TranslationsImportExport.yml @@ -0,0 +1,54 @@ +# ================================================================================== +# Pipeline for VsCodeExtension-Localization build definition +# Runs OneLocBuild task to localize xlf file +# ================================================================================== + +resources: + repositories: + - repository: self + clean: true + +trigger: none +pr: none +schedules: +- cron: "0 7 * * *" + displayName: Daily 7 AM + branches: + include: + - main + +pool: + vmImage: 'windows-latest' + +steps: +- task: CmdLine@2 + inputs: + script: 'cd Extension && yarn install' + +- task: CmdLine@2 + inputs: + script: 'cd ./Extension && yarn run translations-export && cd ..' + +- task: OneLocBuild@2 + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + locProj: 'Build/loc/LocProject.json' + outDir: '$(Build.ArtifactStagingDirectory)' + isCreatePrSelected: false + prSourceBranchPrefix: 'locfiles' + packageSourceAuth: 'patAuth' + patVariable: '$(OneLocBuildPat)' + LclSource: lclFilesfromPackage + LclPackageId: 'LCL-JUNO-PROD-VCPP' + lsBuildXLocPackageVersion: '7.0.30510' + +- task: CmdLine@2 + inputs: + script: 'cd Extension && node ./translations_auto_pr.js microsoft vscode-cpptools csigs $(csigsPat) csigs csigs@users.noreply.github.com "$(Build.ArtifactStagingDirectory)/loc" vscode-extensions-localization-export/vscode-extensions && cd ..' + +- task: PublishBuildArtifacts@1 + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + ArtifactName: 'drop' + publishLocation: 'Container' diff --git a/Documentation/Debugger/ExceptionSettings.md b/Documentation/Debugger/ExceptionSettings.md new file mode 100644 index 0000000000..d5c75ee44c --- /dev/null +++ b/Documentation/Debugger/ExceptionSettings.md @@ -0,0 +1,20 @@ +# Exception Settings + +The Microsoft Windows C/C++ debugger (cppvsdbg) supports configuration options for if the debugger stops when exceptions are thrown. This is done with the 'All Exceptions' check box in the BREAKPOINTS section of the 'Run and Debug' view. + +Note that the BREAKPOINTS section will be missing this entry until the first time that the folder has been debugged with the 'cppvsdbg' debugger. + +Checking 'All Exceptions' will configure the debugger to stop when an exception is thrown. + +##### Exception Conditions + +The 'All Exceptions' checkbox support conditions to break on only selected exception types (C++ exceptions) or codes (Win32 exceptions). To edit the condition, click on the pencil icon or right click on the entry and invoke 'Edit Condition'. The condition is a comma-separated list of exception types and codes to break on, or if the list starts with '!', a list of exception types and codes to ignore. + +Examples conditions: + +| Example condition value | Result | +|-------------------------|--------| +| 0xC0000005, 0xC0000094 | Break on Win32 Access Violation exceptions and integer division by zero exceptions | +| std::out_of_range, 0xC0000005 | This will break on out-of-range exceptions, and access violation exceptions | +| !MyExceptionClass | This will break on all exceptions except C++ `MyExceptionClass` exceptions | +| !MyExceptionClass, 0x6831C815 | This will break on all exceptions except C++ `MyExceptionClass` exceptions and Win32 exceptions with custom code 0x6831C815 | diff --git a/Extension/.eslintrc.js b/Extension/.eslintrc.js index 7e93872456..7ea41d4543 100644 --- a/Extension/.eslintrc.js +++ b/Extension/.eslintrc.js @@ -19,7 +19,14 @@ module.exports = { "rules": { "@typescript-eslint/adjacent-overload-signatures": "error", "@typescript-eslint/array-type": "error", - "@typescript-eslint/class-name-casing": "error", + "camelcase": "off", + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "typeLike", + "format": ["PascalCase"] + } + ], "@typescript-eslint/indent": "error", "@typescript-eslint/member-delimiter-style": [ "error", @@ -71,7 +78,7 @@ module.exports = { "no-fallthrough": "error", "no-invalid-this": "error", "no-irregular-whitespace": "error", - "no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 1, "maxBOF": 0}], + "no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 1, "maxBOF": 0 }], "no-new-wrappers": "error", "no-redeclare": "error", "no-return-await": "error", diff --git a/Extension/CHANGELOG.md b/Extension/CHANGELOG.md index 87678ec3c9..36915cfa6a 100644 --- a/Extension/CHANGELOG.md +++ b/Extension/CHANGELOG.md @@ -1,5 +1,57 @@ # C/C++ for Visual Studio Code Change Log +## Version 1.4.0: May 27, 2021 +### New Features +* Add a C++ walkthrough to the "Getting Started" page. [#7273](https://github.com/microsoft/vscode-cpptools/issues/7273) + * Note: VS Code may only make this available to a subset of users while they continue working on the feature. + +### Enhancements +* Update to clang-format 12. [#6434](https://github.com/microsoft/vscode-cpptools/issues/6434) +* Add `private` or `protected` scope labels to class symbols. [#7120](https://github.com/microsoft/vscode-cpptools/issues/7120) +* Fix file:line path for $FILEPOS [#7193](https://github.com/microsoft/vscode-cpptools/issues/7193) + * [#1124](https://github.com/microsoft/MIEngine/pull/1124) +* Add `stopAtConnect` and `hardwareBreakpoints` launch options [PR #7449](https://github.com/microsoft/vscode-cpptools/pull/7449) + * `stopAtConnect` stops the debugger on connection to a remote target [PR MIEngine#1109](https://github.com/microsoft/MIEngine/pull/1109) + * `hardwareBreakpoints` controls usage and number of remote hardware breakpoints [PR MIEngine#1128](https://github.com/microsoft/MIEngine/pull/1128) +* Add support for loading Concord extensions to the cppvsdbg debug adapter (see [documentation](https://github.com/microsoft/ConcordExtensibilitySamples/wiki/Support-for-VS-Code-cppvsdbg-Scenarios) for more information) +* Add support for exception conditions to cppvsdbg (see [documentation](https://aka.ms/VSCode-Cpp-ExceptionSettings) for more information) + +### Bug Fixes +* Fix an incorrect IntelliSense error with object initialization. [#3212](https://github.com/microsoft/vscode-cpptools/issues/3212) +* Fix IntelliSense errors with designated initializers. [#3491](https://github.com/microsoft/vscode-cpptools/issues/3491), [#5500](https://github.com/microsoft/vscode-cpptools/issues/5550) +* Fix IntelliSense configuration with cl.exe compiler args `/external:I`, `/Zc:preprocessor`, and others. [#4980](https://github.com/microsoft/vscode-cpptools/issues/4980), [#6531](https://github.com/microsoft/vscode-cpptools/issues/6531), [#7259](https://github.com/microsoft/vscode-cpptools/issues/7259) +* Switch to showing no document symbols instead of random symbols for `files.exclude`'d documents. [#5142](https://github.com/microsoft/vscode-cpptools/issues/5142) +* Fix macros getting undefined when duplicate `#include` are used. [#5182](https://github.com/microsoft/vscode-cpptools/issues/5182), [#7270](https://github.com/microsoft/vscode-cpptools/issues/7270) +* Fix provider failed error logging. [#5487](https://github.com/microsoft/vscode-cpptools/issues/5487) +* Fix an IntelliSense crash with `#pragma GCC target`. [#6698](https://github.com/microsoft/vscode-cpptools/issues/6698), [#7377](https://github.com/microsoft/vscode-cpptools/issues/7377) +* Fix bitness detection for compilers targeting esp32. [#7034](https://github.com/microsoft/vscode-cpptools/issues/7034) +* Fix -idirafter directories being included too early. [#7129](https://github.com/microsoft/vscode-cpptools/issues/7129) +* Fix issue with the cpptools process lingering when no longer needed. [#7262](https://github.com/microsoft/vscode-cpptools/issues/7262) +* Filter out C++ std when querying the compiler as C (and vice versa). [#7269](https://github.com/microsoft/vscode-cpptools/issues/7269) +* Fix `files.exclude` ending with `/folder/**` not excluding `/folder`. [#7331](https://github.com/microsoft/vscode-cpptools/issues/7331) +* Fix VS Code UI freezing when hovering over very large literals. [#7334](https://github.com/microsoft/vscode-cpptools/issues/7334), [#7577](https://github.com/microsoft/vscode-cpptools/issues/7577) +* Fix clang-format formatting bug when new lines are removed. [#7360](https://github.com/microsoft/vscode-cpptools/issues/7360) +* Change default cwd in launch.json to `${fileDirname}`. [#7362](https://github.com/microsoft/vscode-cpptools/issues/7362) + * Syed Ahmad (@HackintoshwithUbuntu) [PR #7363](https://github.com/microsoft/vscode-cpptools/pull/7363) +* Fix the compile commands entry not being used when -Werror is used. [#7388](https://github.com/microsoft/vscode-cpptools/issues/7388) +* Fix some potential race conditions during vsix installation. [#7405](https://github.com/microsoft/vscode-cpptools/issues/7405) +* Fix completion at the end of a file. [#7472](https://github.com/microsoft/vscode-cpptools/issues/7472) +* Fix completion of constructors. [#7505](https://github.com/microsoft/vscode-cpptools/issues/7505) +* Fix typos. + * jogo- (@jogo-) [PR #7509](https://github.com/microsoft/vscode-cpptools/pull/7509), [PR #7568](https://github.com/microsoft/vscode-cpptools/pull/7568), [PR #7573](https://github.com/microsoft/vscode-cpptools/pull/7573) +* Fix an IntelliSense crash with the arrow library. [#7518](https://github.com/microsoft/vscode-cpptools/issues/7518) +* Fix the configuration UI randomly being blank (more frequently when remote). [#7523](https://github.com/microsoft/vscode-cpptools/issues/7523) +* Fix IntelliSense mode switching from `linux` to `macos` if `__unix__` is defined but `__linux__` is not. [#7525](https://github.com/microsoft/vscode-cpptools/issues/7525) +* Fix enabling of the `ms_extensions` flag for clang on Windows. [#7529](https://github.com/microsoft/vscode-cpptools/issues/7529) +* Fix `autocompleteAddParentheses` with no argument const/non-const overloads and deduction guides. [#7540](https://github.com/microsoft/vscode-cpptools/issues/7540), [#7541](https://github.com/microsoft/vscode-cpptools/issues/7541) +* Fix the browse configuration not being preserved when the configuration provider is auto-detected. [#7542](https://github.com/microsoft/vscode-cpptools/issues/7542) +* Fix clang-format failure on macOS 10.13 or older. [#7561](https://github.com/microsoft/vscode-cpptools/issues/7561) +* Fix an IntelliSense crash with std::ranges::unique. [#7576](https://github.com/microsoft/vscode-cpptools/issues/7576) +* Prevent 'Configuration Warnings' output when a custom configuration provider omits optional fields. +* Prevent 'Configuration Warnings' caused by corrections to auto-detected default configuration values. +* Reduce IntelliSense memory and CPU usage in certain scenarios (e.g. large files). +* Fix a crash on Linux with a `/**` includePath. + ## Version 1.3.1: April 19, 2021 ### Bug Fixes * Fix extension not activating when `/.vscode/c_cpp_properties.json` exists but no C/C++ file is open. [#7344](https://github.com/microsoft/vscode-cpptools/issues/7344) @@ -464,7 +516,7 @@ * Fix `compile_commands.json` prompt appearing when a configuration provider is used. [#3972](https://github.com/microsoft/vscode-cpptools/issues/3972) * Improve IntelliSense performance with range-v3. [#4414](https://github.com/microsoft/vscode-cpptools/issues/4414) * Fix template members not being nested under the template type in the Outline view. [#4466](https://github.com/microsoft/vscode-cpptools/issues/4466) -* Fix an issue in which failure to invoke a compiler could result in a hang on Linux and Mac. [#4627](https://github.com/microsoft/vscode-cpptools/issues/4627) +* Fix an issue in which failure to invoke a compiler could result in a loss of functionality on Linux and Mac. [#4627](https://github.com/microsoft/vscode-cpptools/issues/4627) * Fix custom configurations sometimes not being applied to headers. [#4649](https://github.com/microsoft/vscode-cpptools/issues/4649) * Fix headers opening into header-only TU's instead of TU's for candidate source files. [#4696](https://github.com/microsoft/vscode-cpptools/issues/4696) * Fix the missing description of `C_Cpp.clang_format_style`. @@ -495,7 +547,7 @@ * Fix child process creation when the Windows code page is set to a language with non-ASCII characters and there are non-ASCII characters in the extension's install path. [#1560](https://github.com/microsoft/vscode-cpptools/issues/1560) * Fix path canonicalization of UNC paths to avoid duplicate files opening with different casing. [#2528](https://github.com/microsoft/vscode-cpptools/issues/2528), [#3980](https://github.com/microsoft/vscode-cpptools/issues/3980) * Fix header opening without IntelliSense due to creation of a TU from a source file that includes the header in an inactive region. [#4320](https://github.com/microsoft/vscode-cpptools/issues/4320) -* Fix a hang in the extension process that can occur when using a scope named 'interface'. [#4470](https://github.com/microsoft/vscode-cpptools/issues/4470) +* Fix an infinite loop in the extension process that can occur when using a scope named 'interface'. [#4470](https://github.com/microsoft/vscode-cpptools/issues/4470) * Fix an issue with the Rename UI that could cause the rename to not be applied. [#4504](https://github.com/microsoft/vscode-cpptools/issues/4504) * Show an error message when a Rename fails due to the symbol not being found. [#4510](https://github.com/microsoft/vscode-cpptools/issues/4510) * Fix `launch.json` creation due to localized strings containing quotes. [#4526](https://github.com/microsoft/vscode-cpptools/issues/4526) @@ -512,7 +564,7 @@ ### Bug Fixes * Fix `launch.json` creation when using non-English display languages. [#4464](https://github.com/microsoft/vscode-cpptools/issues/4464) * Fix CHS translation. [#4422](https://github.com/microsoft/vscode-cpptools/issues/4422) -* Fix debugging hang when Windows 10 Beta Unicode (UTF-8) support is enabled. [#1527](https://github.com/microsoft/vscode-cpptools/issues/1527) +* Fix debugging not working when Windows 10 Beta Unicode (UTF-8) support is enabled. [#1527](https://github.com/microsoft/vscode-cpptools/issues/1527) ## Version 0.26.0: October 15, 2019 ### New Features @@ -918,7 +970,7 @@ * Fix `Go to Definition` bug (missing symbols outside the workspace). [#2281](https://github.com/Microsoft/vscode-cpptools/issues/2281) * Fix incorrect hover in enum definitions. [#2286](https://github.com/Microsoft/vscode-cpptools/issues/2286) * Add a setting to silence configuration provider warnings. [#2292](https://github.com/Microsoft/vscode-cpptools/issues/2292) -* Fix debugging async Visual C++ causing debugger to hang. +* Fix debugging async Visual C++ causing the debugger to stop responding. * Fix `main` snippet. ## Version 0.17.6: July 2, 2018 @@ -1186,8 +1238,8 @@ * Add `Edit Configurations...` command to the `Select a Configuration...` dropdown. * Update Microsoft Visual C++ debugger to Visual Studio 2017 released components. * Fix issue with showing wrong thread. [#550](https://github.com/Microsoft/vscode-cpptools/issues/550) - * Fix issue with binaries compiled with /FASTLINK causing debugger to hang. [#484](https://github.com/Microsoft/vscode-cpptools/issues/484) -* Fix issue in MinGW/Cygwin debugging where stop debugging causes VS Code to hang. [PR Microsoft/MIEngine#636](https://github.com/Microsoft/MIEngine/pull/636) + * Fix issue with binaries compiled with /FASTLINK causing the debugger to stop responding. [#484](https://github.com/Microsoft/vscode-cpptools/issues/484) +* Fix issue in MinGW/Cygwin debugging where stop debugging causes VS Code to stop responding. [PR Microsoft/MIEngine#636](https://github.com/Microsoft/MIEngine/pull/636) ## Version 0.12.0: June 26, 2017 * The default IntelliSense engine now provides semantic-aware autocomplete suggestions for `.`, `->`, and `::` operators. [#13](https://github.com/Microsoft/vscode-cpptools/issues/13) diff --git a/Extension/bin/common.json b/Extension/bin/common.json index bf6e470e33..ae5b8b3ebf 100644 --- a/Extension/bin/common.json +++ b/Extension/bin/common.json @@ -26,8 +26,8 @@ "replace": "--using_directory\n$1" }, { - "match": "^/dE--header_only_fallback", - "replace": "--header_only_fallback" + "match": "^/dE--(.*)", + "replace": "--$1" } ] } \ No newline at end of file diff --git a/Extension/bin/messages/cs/messages.json b/Extension/bin/messages/cs/messages.json index 590db54ce6..f01ee465e8 100644 --- a/Extension/bin/messages/cs/messages.json +++ b/Extension/bin/messages/cs/messages.json @@ -3350,7 +3350,7 @@ "libovolný druh souboru modulu", "nejde přečíst soubor modulu", "předdefinovaná funkce není k dispozici, protože typ char8_t se nepodporuje s aktuálními možnostmi", - "možnost příkazového řádku --ms_await nejde zadat, pokud jsou povolené korutiny C++20", + null, "nestandardní použití explicitního konstruktoru %nod pro inicializaci výchozího agregačního elementu", "zdroj nebo cíl vnitřní funkce memcpy-like neukazuje na objekt", "vnitřní funkce memcpy-like se pokouší o kopírování reprezentačně odlišných typů %t1 a %t2", @@ -3373,5 +3373,14 @@ "__is_signed už není klíčové slovo.", "Rozměr pole musí mít konstantní celočíselnou hodnotu bez znaménka.", "Soubor IFC %sq má nepodporovanou verzi %d1.%d2.", - "Moduly se v tomto režimu nepovolily." + "Moduly se v tomto režimu nepovolily.", + "Název modulu nesmí obsahovat slovo import.", + "Název modulu nesmí obsahovat slovo module.", + "Když se %sq používá v direktivě import, nemůže to být makro.", + null, + "%n není výčtový typ.", + "Enumerátor %no2 je v konfliktu s %n1.", + "Enumerátor %no se už v tomto oboru %p deklaroval.", + "specifikace throw() není součástí standardu C++20 a novějších", + "více než jedna položka v mapě jednotky hlavičky odpovídá %s" ] \ No newline at end of file diff --git a/Extension/bin/messages/de/messages.json b/Extension/bin/messages/de/messages.json index 98df79223d..54fffa65a4 100644 --- a/Extension/bin/messages/de/messages.json +++ b/Extension/bin/messages/de/messages.json @@ -3350,7 +3350,7 @@ "Beliebige Art von Moduldatei", "Die Moduldatei kann nicht gelesen werden.", "Die integrierte Funktion ist nicht verfügbar, weil der char8_t-Typ mit den aktuellen Optionen nicht unterstützt wird.", - "Die Befehlszeilenoption \"--ms_await\" kann nicht angegeben werden, wenn C++20-Coroutinen aktiviert sind.", + null, "Nicht standardmäßige Verwendung des expliziten Konstruktors \"%nod\" für die standardmäßige Aggregatelementinitialisierung", "Die Quelle oder das Ziel des memcpy-ähnlichen systeminternen Objekts verweist nicht auf ein Objekt.", "Ein memcpy-ähnliches systeminternes Objekt versucht, die darstellerisch unterschiedlichen Typen %t1 und %t2 zu kopieren.", @@ -3373,5 +3373,14 @@ "\"__is_signed\" kann ab jetzt nicht mehr als Schlüsselwort verwendet werden.", "Eine Arraydimension muss einen konstanten ganzzahligen Wert ohne Vorzeichen aufweisen.", "Die IFC-Datei \"%sq\" weist eine nicht unterstützte Version %d1.%d2 auf.", - "Module sind in diesem Modus nicht aktiviert." + "Module sind in diesem Modus nicht aktiviert.", + "\"Import\" ist in einem Modulnamen unzulässig.", + "\"Modul\" ist in einem Modulnamen unzulässig.", + "\"%sq\" kann kein Makro sein, wenn es in einer Importdirektive verwendet wird.", + null, + "\"%n\" ist kein Enumerationstyp.", + "Der Enumerator \"%no2\" steht in Konflikt mit \"%n1\".", + "Der Enumerator \"%no\" wurde bereits in diesem Bereich (%p) deklariert.", + "Die Spezifikation \"throw()\" ist nicht in C++ 20 und höher enthalten.", + "Mehrere Einträge in der Headereinheitenzuordnung stimmen mit \"%s\" überein." ] \ No newline at end of file diff --git a/Extension/bin/messages/es/messages.json b/Extension/bin/messages/es/messages.json index b3a603b877..0b135352ec 100644 --- a/Extension/bin/messages/es/messages.json +++ b/Extension/bin/messages/es/messages.json @@ -3350,7 +3350,7 @@ "cualquier tipo de archivo de módulo", "no se puede leer el archivo de módulo", "la función integrada no está disponible porque no se admite el tipo char8_t con las opciones actuales", - "no se puede especificar la opción de línea de comandos --ms_await si están habilitadas las corrutinas de C++ 20", + null, "uso no estándar de %nod de constructor explícito para la inicialización predeterminada del elemento de agregado", "el origen o el destino del intento intrínseco de tipo memcpy no apunta a un objeto", "intentos intrínsecos de tipo memcpy para copiar los tipos %t1 y %t2 diferentes de forma representativa", @@ -3373,5 +3373,14 @@ "__is_signed ya no es una palabra clave a partir de este punto", "una dimensión de matriz debe tener un valor entero sin signo constante", "El archivo IFC %sq tiene la versión no compatible %d1.%d2", - "los módulos no están habilitados en este modo" + "los módulos no están habilitados en este modo", + "No se permite \"import\" en un nombre de módulo", + "No se permite usar \"módulo\" en un nombre de módulo", + "%sq no puede ser una macro cuando se use en una directiva import", + null, + "%n no es un tipo de enumeración", + "el enumerador %no2 entra en conflicto con %n1", + "el enumerador %no ya se ha declarado en el ámbito %p", + "la especificación \"throw()\" no forma parte de C++20 y versiones posteriores", + "más que la entrada en el mapa de la unidad del encabezado coincide con \"%s\"" ] \ No newline at end of file diff --git a/Extension/bin/messages/fr/messages.json b/Extension/bin/messages/fr/messages.json index cae2a4ba8e..f787519c70 100644 --- a/Extension/bin/messages/fr/messages.json +++ b/Extension/bin/messages/fr/messages.json @@ -3350,7 +3350,7 @@ "n'importe quel genre de fichier de module", "impossible de lire le fichier de module", "la fonction intégrée n'est pas disponible, car le type char8_t n'est pas pris en charge avec les options actuelles", - "l'option de ligne de commande --ms_await ne peut pas être spécifiée si les coroutines C++20 sont activées", + null, "utilisation non standard du constructeur explicite %nod pour l'initialisation de l'élément d'agrégation par défaut", "la source ou la destination de l'intrinsèque de type memcpy ne pointe pas vers un objet", "l'intrinsèque de type memcpy tente de copier les types représentatifs distincts %t1 et %t2", @@ -3373,5 +3373,14 @@ "__is_signed n'est plus un mot clé à partir de ce point", "une dimension de tableau doit avoir une valeur d'entier non signé constante", "le fichier IFC %sq a une version non prise en charge : %d1.%d2", - "les modules ne sont pas activés dans ce mode" + "les modules ne sont pas activés dans ce mode", + "'import' n'est pas autorisé dans un nom de module", + "'module' n'est pas autorisé dans un nom de module", + "%sq ne peut pas être une macro quand il est utilisé dans une directive import", + null, + "%n n'est pas un type énumération", + "l'énumérateur %no2 est en conflit avec %n1", + "l'énumérateur %no a déjà été déclaré dans cette étendue %p", + "la spécification 'throw()' ne fait pas partie de C++20 ni des versions ultérieures", + "plusieurs entrées dans le mappage d'unité d'en-tête correspondent à '%s'" ] \ No newline at end of file diff --git a/Extension/bin/messages/it/messages.json b/Extension/bin/messages/it/messages.json index 93dbe01453..a6f647bba0 100644 --- a/Extension/bin/messages/it/messages.json +++ b/Extension/bin/messages/it/messages.json @@ -3350,7 +3350,7 @@ "qualsiasi tipo di modulo", "non è possibile leggere il file del modulo", "la funzione predefinita non è disponibile perché il tipo char8_t non è supportato con le opzioni correnti", - "non è possibile specificare l'opzione della riga di comando --ms_await se le coroutine di C++20 sono abilitate", + null, "uso non standard del costruttore esplicito %nod per l'inizializzazione dell'elemento di aggregazione predefinito", "l'origine o la destinazione dell'intrinseco simile a memcpy non punta a un oggetto", "l'intrinseco simile a memcpy prova a copiare i tipi distinti dal punto di vista della rappresentazione %t1 e %t2", @@ -3373,5 +3373,14 @@ "__is_signed non è più una parola chiave a partire da questo punto", "una dimensione di matrice deve avere un valore intero senza segno costante", "il file IFC %sq ha una versione %d1.%d2 non supportata", - "i moduli non sono abilitati in questa modalità" + "i moduli non sono abilitati in questa modalità", + "Il nome di un modulo non può contenere 'import'", + "Il nome di un modulo non può contenere 'module'", + "%sq non può essere una macro se usata in una direttiva di importazione", + null, + "%n non è un tipo di enumerazione", + "l'enumeratore %no2 è in conflitto con %n1", + "l'enumeratore %no è già stato dichiarato in questo ambito %p", + "la specifica 'throw()' non fa parte di C++20 e versioni successive", + "più di una voce nel mapping dell'unità intestazione corrisponde a '%s'" ] \ No newline at end of file diff --git a/Extension/bin/messages/ja/messages.json b/Extension/bin/messages/ja/messages.json index a62deee243..306851bddb 100644 --- a/Extension/bin/messages/ja/messages.json +++ b/Extension/bin/messages/ja/messages.json @@ -3350,7 +3350,7 @@ "あらゆる種類のモジュール ファイル", "モジュール ファイルを読み取れません", "現在のオプションで char8_t 型がサポートされていないので、ビルトイン関数を使用できません", - "--ms_await コマンド ライン オプションは、C++20 コルーチンが有効になっている場合は指定できません", + null, "既定の集約要素の初期化における明示的なコンストラクター %nod の非標準的な使用", "memcpy に似た組み込み関数のソースやターゲットでオブジェクトが指定されていません", "memcpy に似た組み込み関数により、表現上個別の型である %t1 と %t2 のコピーが試行されます", @@ -3373,5 +3373,14 @@ "__is_signed はこのポイントからキーワードではなくなりました", "配列の次元には定数の符号なし整数値を指定する必要があります", "IFC ファイル %sq は、サポートされていないバージョン %d1.%d2 です", - "このモードではモジュールは無効です" + "このモードではモジュールは無効です", + "'import' は、モジュール名には使用できません", + "'module' は、モジュール名には使用できません", + "import ディレクティブで使用する場合、%sq をマクロにすることはできません", + null, + "%n は列挙型ではありません", + "列挙子 %no2 が %n1 と競合しています", + "列挙子 %no はこのスコープ %p で既に宣言されています", + "'throw()' 仕様は C++20 以降に含まれていません", + "ヘッダー ユニット マップのエントリより多くが '%s' に一致しています" ] \ No newline at end of file diff --git a/Extension/bin/messages/ko/messages.json b/Extension/bin/messages/ko/messages.json index eb453d35ad..1b4b5c848d 100644 --- a/Extension/bin/messages/ko/messages.json +++ b/Extension/bin/messages/ko/messages.json @@ -3350,7 +3350,7 @@ "모든 종류의 모듈 파일", "모듈 파일을 읽을 수 없음", "char8_t 형식이 현재 옵션에서 지원되지 않기 때문에 기본 제공 함수를 사용할 수 없습니다.", - "C++20 코루틴을 사용하도록 설정한 경우 --ms_await 명령줄 옵션을 지정할 수 없습니다.", + null, "기본 집계 요소 초기화에 명시적 생성자 %nod의 비표준 사용", "memcpy 유사 내장의 소스 또는 대상이 개체를 가리키지 않음", "memcpy 유사 내장이 대표적으로 차별화된 형식 %t1 및 %t2을(를) 복사하려고 시도함", @@ -3373,5 +3373,14 @@ "__is_signed는 이 시점부터 더 이상 키워드가 아님", "배열 차원에는 상수인 부호 없는 정수 값이 있어야 함", "IFC 파일 %sq에 지원되지 않는 버전 %d1.%d2이(가) 있음", - "이 모드에서 모듈을 사용할 수 없음" + "이 모드에서 모듈을 사용할 수 없음", + "'import'는 모듈 이름에 사용할 수 없습니다.", + "'module'은 모듈 이름에 사용할 수 없습니다.", + "import 지시문에 사용된 경우 %sq은(는) 매크로일 수 없습니다.", + null, + "%n은(는) 열거형 형식이 아닙니다.", + "열거자 %no2이(가) %n1과(와) 충돌합니다.", + "열거자 %no은(는) 이미 이 범위 %p에 선언되었습니다.", + "'throw()' 사양은 C++20 이상에 포함되지 않습니다.", + "헤더 단위 맵의 입력보다 많은 항목이 '%s'과(와) 일치합니다." ] \ No newline at end of file diff --git a/Extension/bin/messages/pl/messages.json b/Extension/bin/messages/pl/messages.json index 4ee10edfc8..8eb0c7972c 100644 --- a/Extension/bin/messages/pl/messages.json +++ b/Extension/bin/messages/pl/messages.json @@ -3350,7 +3350,7 @@ "dowolny rodzaj pliku modułu", "nie można odczytać pliku modułu", "wbudowana funkcja jest niedostępna, ponieważ typ char8_t nie jest obsługiwany z bieżącymi opcjami", - "nie można określić opcji wiersza polecenia --ms_await, jeśli włączono koprocedury języka C++20", + null, "niestandardowe użycie konstruktora jawnego %nod dla domyślnej inicjalizacji elementu agregacji", "element źródłowy lub docelowy funkcji wewnętrznej podobnej do memcpy nie wskazuje obiektu", "Funkcja wewnętrzna podobna do memcpy próbuje skopiować reprezentacyjnie odrębne typy %t1 i %t2", @@ -3373,5 +3373,14 @@ "Od tego punktu __is_signed nie jest już słowem kluczowym", "wymiar tablicy musi mieć stałą wartość całkowitą bez znaku", "Plik IFC %sq ma nieobsługiwaną wersję %d1.%d2", - "moduły nie są włączone w tym trybie" + "moduły nie są włączone w tym trybie", + "Ciąg „import” nie jest dozwolony w nazwie modułu", + "Ciąg „module” nie jest dozwolony w nazwie modułu", + "Element %sq nie może być makrem, gdy jest używany w dyrektywie importu", + null, + "Element %n nie jest typem wyliczenia", + "moduł wyliczający %no2 powoduje konflikt z elementem %n1", + "moduł wyliczający %no został już zadeklarowany w tym zakresie %p", + "Specyfikacja „throw()” nie jest częścią języka C++20 i nowszych", + "więcej niż wpis na mapie jednostek nagłówka pasuje do „%s”" ] \ No newline at end of file diff --git a/Extension/bin/messages/pt-br/messages.json b/Extension/bin/messages/pt-br/messages.json index 8e87282b14..aa6da1c23b 100644 --- a/Extension/bin/messages/pt-br/messages.json +++ b/Extension/bin/messages/pt-br/messages.json @@ -3350,7 +3350,7 @@ "qualquer tipo de arquivo de módulo", "não é possível ler o arquivo de módulo", "a função interna não está disponível porque não há suporte para o tipo char8_t com as opções atuais", - "a opção da linha de comando --ms_await não poderá ser especificada se as corrotinas do C++20 estiverem habilitadas", + null, "o uso não padrão do construtor explícito %nod para inicialização do elemento de agregação padrão", "a origem ou o destino do intrínseco similar a memcpy não aponta para um objeto", "tentativas intrínsecas similares a memcpy de copiar tipos representacionalmente distintos %t1 e %t2", @@ -3373,5 +3373,14 @@ "__is_signed não é mais uma palavra-chave deste ponto", "uma dimensão de matriz precisa ter um valor inteiro sem sinal constante", "O arquivo IFC %sq tem uma versão sem suporte %d1.%d2", - "os módulos não estão habilitados neste modo" + "os módulos não estão habilitados neste modo", + "'import' não é permitido em um nome de módulo", + "'module' não é permitido em um nome de módulo", + "O %sq não poderá ser uma macro quando for usado em uma diretiva de importação", + null, + "O %n não é um tipo de enumeração", + "o enumerador %no2 entra em conflito com %n1", + "o enumerador %no já foi declarado neste escopo %p", + "a especificação 'throw()' não faz parte de C++ 20 e posteriores", + "mais de uma entrada no mapa de unidades de cabeçalho corresponde a '%s'" ] \ No newline at end of file diff --git a/Extension/bin/messages/ru/messages.json b/Extension/bin/messages/ru/messages.json index 4e9e7aad4e..740bf1efe4 100644 --- a/Extension/bin/messages/ru/messages.json +++ b/Extension/bin/messages/ru/messages.json @@ -3350,7 +3350,7 @@ "любой тип файла модуля", "не удалось прочитать файл модуля", "встроенная функция недоступна, так как тип char8_t не поддерживается с текущими параметрами.", - "невозможно указать параметр командной строки --ms_await, если включены сопрограммы C++20.", + null, "нестандартное использование явного конструктора %nod для агрегатной инициализации элементов по умолчанию.", "источник или назначение встроенной функции, похожей на memcpy, не указывает на объект", "Встроенная функция, похожая на memcpy, пытается скопировать различные с точки зрения представления типы %t1 и %t2", @@ -3373,5 +3373,14 @@ "__is_signed больше не является ключевым словом из этой точки", "измерение массива должно иметь постоянное целочисленное значение без знака", "файл IFC %sq имеет неподдерживаемую версию %d1.%d2", - "модули не включены в этом режиме" + "модули не включены в этом режиме", + "слово \"import\" не допускается в имени модуля", + "слово \"module\" не допускается в имени модуля", + "%sq не может быть макросом при использовании в директиве импорта", + null, + "%n не является типом перечисления", + "перечислитель %no2 конфликтует с %n1", + "перечислитель %no уже объявлен в этой области %p", + "спецификация \"throw()\" не входит в C++20 и более поздние версии", + "несколько записей в карте блока заголовка соответствуют \"%s\"" ] \ No newline at end of file diff --git a/Extension/bin/messages/tr/messages.json b/Extension/bin/messages/tr/messages.json index 7c396f9170..7a641ace63 100644 --- a/Extension/bin/messages/tr/messages.json +++ b/Extension/bin/messages/tr/messages.json @@ -3350,7 +3350,7 @@ "herhangi bir türde modül dosyası", "modül dosyası okunamıyor", "char8_t türü geçerli seçeneklerle desteklenmediği için yerleşik işlev kullanılamıyor", - "C++20 eş yordamları etkinleştirilirse --ms_await komut satırı seçeneği belirtilemez", + null, "varsayılan toplama öğesi başlatma için açık oluşturucu %nod için standart olmayan kullanım", "memcpy benzeri iç öğenin kaynağı veya hedefi bir nesneye işaret etmiyor", "memcpy benzeri iç öğe, temsili olarak farklı %t1 ve %t2 türlerini kopyalamaya çalışıyor", @@ -3373,5 +3373,14 @@ "__is_signed şu andan itibaren bir anahtar sözcük değil", "dizi boyutu sabit bir işaretsiz tamsayı değerine sahip olmalıdır", "%sq IFC dosyasının sürümü desteklenmiyor: %d1.%d2", - "modüller bu modda etkin değil" + "modüller bu modda etkin değil", + "'import', modül adında kullanılamaz.", + "Modül adında 'module' kullanılmasına izin verilmez", + "%sq, içeri aktarma yönergesinde kullanıldığında makro olamaz", + null, + "%n sabit listesi türü değil", + "%no2 numaralandırıcısı %n1 ile çakışıyor", + "%no numaralandırıcısı bu %p kapsamında zaten bildirildi", + "'throw ()' belirtimi C++ 20 ve üzeri sürümlerin bir parçası değil", + "üst bilgi birimi eşlemesindeki giriş sayısı '%s' ile eşleşiyor:" ] \ No newline at end of file diff --git a/Extension/bin/messages/zh-cn/messages.json b/Extension/bin/messages/zh-cn/messages.json index f21b6e86f6..26f6d3905e 100644 --- a/Extension/bin/messages/zh-cn/messages.json +++ b/Extension/bin/messages/zh-cn/messages.json @@ -3350,7 +3350,7 @@ "任何类型的模块文件", "无法读取模块文件", "内置函数不可用,因为当前选项不支持 char8_t 类型", - "如果启用了 C++20 协同程序,则无法指定 --ms_await 命令行选项", + null, "对默认聚合元素初始化使用显式构造函数 %nod 不是标准做法", "与 memcpy 类似的固有项的源或目标不指向对象", "与 memcpy 类似的固有项尝试复制在表达上不同的类型 %t1 和 %t2", @@ -3373,5 +3373,14 @@ "__is_signed 不再是从此点开始的关键字", "数组维度必须具有常量无符号整数值", "IFC 文件 %sq 具有不受支持的版本 %d1。%d2", - "此模式中没有启用模块" + "此模式中没有启用模块", + "模块名称中不允许使用 \"import\"", + "模块名称中不允许使用 \"module\"", + "在 import 指令中使用时,%sq 不能是宏", + null, + "%n 不是枚举类型", + "枚举器 %no2 与 %n1 冲突", + "枚举器 %no 已在此范围 %p 中进行声明", + "\"throw()\" 规范不是 C++20 及更高版本的一部分", + "标头单元映射中的多个条目与“%s”匹配" ] \ No newline at end of file diff --git a/Extension/bin/messages/zh-tw/messages.json b/Extension/bin/messages/zh-tw/messages.json index 361931f94d..c1058eae15 100644 --- a/Extension/bin/messages/zh-tw/messages.json +++ b/Extension/bin/messages/zh-tw/messages.json @@ -3350,7 +3350,7 @@ "任何類型的模組檔案", "無法讀取模組檔案", "因為目前的選項不支援 char8_t 類型,所以無法使用內建函式", - "如果啟用 C++ 20 協同程式,就不能指定 --ms_await 命令列選項", + null, "非標準地使用明確的建構函式 %nod 進行預設彙總元素初始化", "內建類 memcpy 的來源或目的地未指向物件", "內建類 memcpy 嘗試複製具象相異類型 %t1 與 %t2", @@ -3373,5 +3373,14 @@ "__is_signed 從現在起已不再是關鍵字", "陣列維度必須要有不帶正負號的常數整數值", "IFC 檔案 %sq 的版本為不支援的 %d1.%d2", - "此模式下未啟用的模組" + "此模式下未啟用的模組", + "模組名稱中不得包含 'import'", + "模組名稱中不得包含 'module'", + "當 %sq 用於 import 指示詞中時,不得為巨集", + null, + "%n 不是列舉類型", + "列舉程式 %no2 與 %n1 衝突", + "列舉程式 %no 已於此範圍 %p 中宣告", + "'throw()' 規格不屬於 C++20 及更新版本", + "項目超過標頭單位對應相符中的 '%s'" ] \ No newline at end of file diff --git a/Extension/i18n/chs/package.i18n.json b/Extension/i18n/chs/package.i18n.json index 6a1ce4c3eb..ef68948467 100644 --- a/Extension/i18n/chs/package.i18n.json +++ b/Extension/i18n/chs/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "选择配置...", "c_cpp.command.configurationProviderSelect.title": "更改配置提供程序...", "c_cpp.command.configurationEditJSON.title": "编辑配置(JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "相对于最外侧的左括号缩进新行。", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "相对于最内侧的左括号缩进新行。", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "相对于当前语句的开头缩进新行。", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "键入新行时,新行对齐到左括号下或基于 \"C_Cpp.vcFormat.indent.multiLineRelativeTo\" 对齐。", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "新行对齐到左括号下。", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "新行基于 \"C_Cpp.vcFormat.indent.multiLineRelativeTo\" 缩进。", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "在现有代码中,保留括号内新行现有的缩进对齐方式。", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "按照在“编辑器: 制表符大小”设置中指定的量,相对于 switch 语句缩进标签。", "c_cpp.configuration.vcFormat.indent.caseContents.description": "按照在“编辑器: 制表符大小”设置中指定的量,相对于标签缩进 case 块中的代码", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "无论任何“VC 格式: 新行”设置的值如何,在一行输入的完整代码块都保留在一行上", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "无论任何“VC 格式: 新行”设置的值如何,在同一行输入左大括号和右大括号的任何代码都保留在同一行上", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "始终根据“VC 格式: 新行”设置来设定代码块的格式", - "c_cpp.configuration.clang_format_path.description": "clang-format 可执行文件的完整路径。如果未指定,并且 Clang 格式在环境路径中可用,则使用 Clang 格式。如果在环境路径中找不到 Clang 格式,则将使用与该扩展绑定的 clang-format 的副本。", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "编码样式,当前支持: Visual Studio、LLVM、Google、Chromium、Mozilla、WebKit。使用 \"file\" 从当前目录或父目录中的 .clang 格式文件中加载样式。使用 {键: 值, ...} 设置特定参数。例如,\"Visual Studio\" 样式类似于: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "如果使用样式 \"file\" 调用 clang 格式但是找不到 .clang 格式文件,则使用预定义的样式的名称作为回退。可能的值为 Visual Studio、LLVM、Google、Chromium、Mozilla、WebKit、none,或使用 {key: value, ...} 设置特定参数。例如,\"Visual Studio\" 样式类似于: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "如果已设置,则重写由 SortIncludes 参数确定的包含排序行为。", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "对匹配文件的同级文件的其他检查。使用 $(basename) 作为匹配文件名的变量。", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "如果为 true,调试程序 shell 命令替换将使用过时的反引号(`)。", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: 其他引用结果", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "如果存在,这会指示调试程序使用其他可执行文件作为管道来连接到远程计算机,此管道将在 VS Code 和已启用 MI 的调试程序后端可执行文件(如 gdb)之间中继标准输入/输入。", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "输入管道程序名称的完全限定路径,例如 \"/usr/bin/ssh\"", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "目标计算机上调试程序的完整路径,例如 /usr/bin/gdb。", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is 'true'.", "c_cpp.debuggers.logging.description": "用于确定应将哪些类型的消息记录到调试控制台的可选标志。", "c_cpp.debuggers.logging.exceptions.description": "用于确定是否应将异常消息记录到调试控制台的可选标志。默认为 true。", "c_cpp.debuggers.logging.moduleLoad.description": "用于确定是否应将模块加载事件记录到调试控制台的可选标志。默认为 true。", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: true.", "c_cpp.debuggers.text.description": "要执行的调试命令。", "c_cpp.debuggers.description.description": "此命令的可选说明。", "c_cpp.debuggers.ignoreFailures.description": "如果为 true,应忽略此命令的失败。默认值为 false。", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "调试此进程时要使用的 .natvis 文件。此选项与 GDB 整齐打印不兼容。如果使用此设置,请同时查看 \"showDisplayString\"。", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "调试此进程时要使用的 .natvis 文件。", "c_cpp.debuggers.showDisplayString.description": "指定了 visualizerFile 时,showDisplayString 将启用显示字符串。启用此选项可能会导致调试期间的性能下降。", - "c_cpp.debuggers.environment.description": "要添加到程序环境的环境变量。示例: [ { \"name\": \"squid\", \"value\": \"clam\" } ]。", + "c_cpp.debuggers.environment.description": "要添加到程序环境的环境变量。示例: [ { \"name\": \"config\", \"value\": \"Debug\" } ],而不是 [ { \"config\": \"Debug\" } ]。", "c_cpp.debuggers.envFile.description": "包含环境变量定义的文件的绝对路径。此文件具有每行由等号分隔的键值对。例如: 键=值", "c_cpp.debuggers.additionalSOLibSearchPath.description": "要用于搜索 .so 文件的目录列表(以分号分隔)。示例: \"c:\\dir1;c:\\dir2\"。", "c_cpp.debuggers.MIMode.description": "指示 MIDebugEngine 要连接到的控制台调试程序。允许的值为 \"gdb\"、\"lldb\"。", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "MI 调试程序(如 gdb)的其他参数。", "c_cpp.debuggers.miDebuggerServerAddress.description": "要连接到的 MI 调试程序服务器的网络地址(示例: localhost:1234)。", "c_cpp.debuggers.stopAtEntry.description": "可选参数。如果为 true,则调试程序应在目标的入口点处停止。如果传递了 processId,则不起任何作用。", - "c_cpp.debuggers.debugServerPath.description": "用于调试要启动的服务器的可选完整路径。默认设置为 null。通过运行“-target-select remote ”的 \"customSetupCommand\" 将它与 \"miDebugServerAddress\" 或你自己的服务器结合使用。", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "可选调试服务器参数。默认为 null。", "c_cpp.debuggers.serverStarted.description": "要在调试服务器输出中查找的可选服务器启动模式。默认为 null。", "c_cpp.debuggers.filterStdout.description": "在 stdout 流中搜索服务器启动模式,并将 stdout 记录到默认输出。默认为 true。", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "启动调试目标的位置。如果未定义,则默认为 \"internalConsole\"。", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "输出到 VS Code 调试控制台。这不支持读取控制台输入(例如: \"std::cin\" 或 \"scanf\")", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "VS Code 的集成终端", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "控制台应用程序将在外部终端窗口中启动。该窗口将在重新启动方案中重复使用,并且在应用程序退出时不会自动消失。", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "控制台应用程序将在自身的外部控制台窗口中启动,该窗口将在应用程序停止时结束。非控制台应用程序将在没有终端的情况下运行,并且 stdout/stderr 将被忽略。", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "如果为 true,则禁用集成终端支持所需的调试对象控制台重定向。", "c_cpp.debuggers.sourceFileMap.description": "传递到调试引擎的可选源文件映射。示例: \"{ \"/original/source/path\":\"/current/source/path\" }\"", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "如果为 true,则将加载所有 lib 的符号;否则不加载任何 solib 符号。默认值为 true。", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "以分号 \";\" 分隔的文件名列表(允许使用通配符)。修改 LoadAll 的行为。如果 LoadAll 为 true,则不加载与列表中任何名称匹配的 lib 的符号。否则,仅为匹配的 lib 加载符号。示例: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "可选标志,用于要求当前源代码与 pdb 匹配。", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "任务的名称", "c_cpp.taskDefinitions.command.description": "执行编译的编译器或脚本的路径", "c_cpp.taskDefinitions.args.description": "要传递给编译器或编译脚本的其他参数", diff --git a/Extension/i18n/chs/src/LanguageServer/client.i18n.json b/Extension/i18n/chs/src/LanguageServer/client.i18n.json index e6826baa6a..60e99d6648 100644 --- a/Extension/i18n/chs/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/chs/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "是", "no.button": "否", "configurations.received": "已收到自定义配置:", - "browse.configuration.received": "已收到自定义浏览配置: {0}" + "browse.configuration.received": "已收到自定义浏览配置: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/chs/src/common.i18n.json b/Extension/i18n/chs/src/common.i18n.json index 1033aa0955..a9f2d939bb 100644 --- a/Extension/i18n/chs/src/common.i18n.json +++ b/Extension/i18n/chs/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "警告: 尚未为此平台测试调试。", "reload.workspace.for.changes": "重新加载工作区以使设置更改生效。", "reload.string": "重新加载", - "invalid.download.location.received": "接收的下载位置无效" + "invalid.download.location.received": "接收的下载位置无效", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/chs/src/main.i18n.json b/Extension/i18n/chs/src/main.i18n.json index 878b99fd6e..45a26917e6 100644 --- a/Extension/i18n/chs/src/main.i18n.json +++ b/Extension/i18n/chs/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "体系结构 {0} 不受支持。", "apline.containers.not.supported": "Alpine 容器不受支持。", "download.button": "转到下载页", - "native.binaries.mismatch.osx": "MacOS Intel 版本的扩展已安装。 由于你使用的是 Apple Silicon Mac,我们建议你安装 Apple Silicon 版本的扩展。", "native.binaries.not.supported": "此 {0} {1} 版本的扩展与你的 OS 不兼容,请下载并安装 \"{2}\" 版本的扩展。", "extension.installation.failed": "C/C++ 扩展安装失败。为使函数正常工作,需要修复或重新安装 C/C++ 语言功能的扩展。", "remove.extension": "尝试修复", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "错误: fs.rename 失败,原因为“{0}”。请手动删除 {1} 以启用调试。", "failed.at.stage": "在阶段 {0} 失败", "failed.at.stage2": "如果在脱机环境中工作或反复看到此错误,请尝试从 {0} 下载预包含了所有依赖项的扩展版本,然后使用 VS Code 中的“从 VSIX 安装”命令来安装它。", - "finished.installing.dependencies": "已完成安装依赖项" + "finished.installing.dependencies": "已完成安装依赖项", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/chs/src/packageManager.i18n.json b/Extension/i18n/chs/src/packageManager.i18n.json index 685b0851e6..6e7afe59d4 100644 --- a/Extension/i18n/chs/src/packageManager.i18n.json +++ b/Extension/i18n/chs/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Zip 文件错误", "create.directory.error": "创建目录时出错", "zip.stream.error": "读取 zip 流时出错", - "read.stream.error": "“读取”流中出错", "unlink.error": "取消链接文件 {0} 时出错", "rename.error": "重命名文件 {0} 时出错", + "read.stream.error": "“读取”流中出错", "write.stream.error": "“写入”流中出错", "file.already.exists": "警告: 文件“{0}”已存在,但未更新。" } \ No newline at end of file diff --git a/Extension/i18n/cht/package.i18n.json b/Extension/i18n/cht/package.i18n.json index 1a1374cb92..604ec05f49 100644 --- a/Extension/i18n/cht/package.i18n.json +++ b/Extension/i18n/cht/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "選取組態...", "c_cpp.command.configurationProviderSelect.title": "變更組態提供者...", "c_cpp.command.configurationEditJSON.title": "編輯組態 (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "相對於最外層的左括弧,縮排新行。", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "相對於最內層的左括弧,縮排新行。", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "相對於目前陳述式的開頭,縮排新行。", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "鍵入新行時,新行會對齊左括弧或依 `C_Cpp.vcFormat.indent.multiLineRelativeTo` 對齊。", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "將新行對齊在左括弧下。", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "新行會依據 `C_Cpp.vcFormat.indent.multiLineRelativeTo` 縮排。", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "在現有程式碼中,將新行的現有縮排對齊保留在括弧內。", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "標籤會依據 [Editor: Tab Size] 設定中指定的數量,按照 switch 陳述式的相對位置縮排。", "c_cpp.configuration.vcFormat.indent.caseContents.description": "案例區塊中的程式碼,會依據 [Editor: Tab Size] 設定中指定的數量,按照其標籤的相對位置縮排", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "在一行中所輸入的完整程式碼區塊都保留在同一行,而不考慮任何 VC 格式的值: [新行] 設定", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "在一行中所輸入由左大括號和右大括號括住的任何程式碼,都保留在同一行,而不考慮任何 VC 格式的值: [新行] 設定", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "程式碼區塊的格式一律以 VC 格式的值為準: [新行] 設定", - "c_cpp.configuration.clang_format_path.description": "此為 clang-format 可執行檔的完整路徑。如果未指定,且在環境路徑中可用 clang-format,即會使用該格式。如果在環境路徑中找不到,則會使用延伸模組所配備的 clang-format 複本。", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "編碼樣式,目前支援: Visual Studio、LLVM、Google、Chromium、Mozilla、WebKit。使用 \"file\" 可從目前目錄或父目錄的 .clang-format 檔案載入樣式。使用 {key: value, ...} 可設定特定參數。例如,\"Visual Studio\" 樣式類似於: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "當已使用樣式 \"file\" 叫用 clang 格式,但找不到 .clang-format 檔案時,用作後援的預先定義樣式名稱。可能的值包括 Visual Studio、LLVM、Google、Chromium、Mozilla、WebKit、none 或使用 {key: value, ...} 來設定特定參數。例如,\"Visual Studio\" 樣式類似於: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "若設定,會覆寫 SortIncludes 參數所決定的包含排序行為。", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "在相符檔案同層級上額外的檢查。請使用 $(basename) 作為相符檔案名稱的變數。", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "若為 true,偵錯工具殼層命令替代將會使用已淘汰的反引號 (`)。", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: 其他參考結果", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "出現時,會指示偵錯工具使用另一個可執行檔來連線至遠端電腦,該管道會在 VS Code 與 MI 啟用偵錯工具後端可執行檔之間傳送標準輸入/輸出 (例如 gdb)。", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "輸入管道程式名稱的完整路徑,例如 '/usr/bin/ssh'", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "目標機器的偵錯工具完整路徑,例如 /use/bin/gdb。", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is 'true'.", "c_cpp.debuggers.logging.description": "選擇性旗標,用以判斷應記錄到偵錯主控台的訊息類型。", "c_cpp.debuggers.logging.exceptions.description": "選擇性旗標,用以判斷是否應將例外狀況訊息記錄到偵錯主控台。預設為 true。", "c_cpp.debuggers.logging.moduleLoad.description": "選擇性旗標,用以判斷是否應將模組載入事件記錄到偵錯主控台。預設為 true。", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: true.", "c_cpp.debuggers.text.description": "要執行的偵錯工具命令。", "c_cpp.debuggers.description.description": "命令的選擇性描述。", "c_cpp.debuggers.ignoreFailures.description": "若為 true,則應略過來自命令的失敗。預設值為 false。", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "偵錯此處理序時要使用的 .natvis 檔案。此選項與 GDB 美化顯示不相容。若使用此設定,也請參閱 \"showDisplayString\"。", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "偵錯此處理序時要使用的 .natvis 檔案。", "c_cpp.debuggers.showDisplayString.description": "指定 visualizerFile 時,showDisplayString 會啟用顯示字串。開啟此選項可能會導致偵錯期間的效能變慢。", - "c_cpp.debuggers.environment.description": "要新增至程式環境的環境變數。範例: [ { \"name\": \"squid\", \"value\": \"clam\" } ]。", + "c_cpp.debuggers.environment.description": "要新增至程式環境的環境變數。範例: [ { \"name\": \"config\", \"value\": \"Debug\" } ],非 [ { \"config\": \"Debug\" } ]。", "c_cpp.debuggers.envFile.description": "包含環境變數定義之檔案的絕對路徑。此檔案具有以等號分隔每行的索引鍵值組。例如「鍵=值」", "c_cpp.debuggers.additionalSOLibSearchPath.description": "要用於搜尋 .so 檔案的目錄清單 (以分號分隔)。範例: \"c:\\dir1;c:\\dir2\"。", "c_cpp.debuggers.MIMode.description": "表示 MIDebugEngine 將連線的主控台偵錯工具。允許的值為 \"gdb\" \"lldb\"。", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "MI 偵錯工具 (例如 gdb) 的其他引數。", "c_cpp.debuggers.miDebuggerServerAddress.description": "MI 偵錯工具伺服器要連線至的網路位址 (範例: localhost:1234)。", "c_cpp.debuggers.stopAtEntry.description": "選擇性參數。若為 true,則偵錯工具應該在目標的進入點停止。如果已傳遞 processId。就沒有效果。", - "c_cpp.debuggers.debugServerPath.description": "要啟動的偵錯伺服器選用完整路徑。預設為 Null。使用時,會將 \"miDebugServerAddress\" 或您自己的伺服器與 \"customSetupCommand\" 連接,以執行 \"-target-select remote <伺服器:連接埠>\"`。", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "選擇性偵錯伺服器引數。預設為 null。", "c_cpp.debuggers.serverStarted.description": "要在偵錯伺服器輸出中尋找的選擇性伺服器啟動模式。預設為 null。", "c_cpp.debuggers.filterStdout.description": "搜尋 stdout 資料流以取得伺服器啟動的模式,並將 stdout 記錄到偵錯輸出。預設為 true。", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "要在何處啟動偵錯目標。如果未定義,則預設為 'internalConsole'。", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "輸出到 VS Code 偵錯主控台。這不支援讀取主控台輸入 (例如: 'std::cin' 或 'scanf')", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "VS Code 的整合式終端機", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "主控台應用程式將會在外部終端視窗中啟動。此視窗將在重新啟動情節中重複使用,且在應用程式結束時不會自動消失。", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "主控台應用程式將會在其本身的外部主控台視窗中啟動,該視窗會在應用程式停止時結束。非主控台應用程式將在沒有終端的情況下執行,而且將忽略 stdout/stderr。", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "若為 true,則停用整合式終端機支援需要的偵錯項目主控台重新導向。", "c_cpp.debuggers.sourceFileMap.description": "傳遞給偵錯引擎的選擇性來源檔案對應。範例: '{ \"/original/source/path\":\"/current/source/path\" }'", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "若為 true,將會載入所有程式庫的符號,否則不會載入任何 solib 符號。預設值為 true。", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "以分號 ';' 分隔的檔名清單 (允許使用萬用字元)。修改 LoadAll 的行為。如果 LoadAll 為 true,則不會載入與清單中任何名稱相符的程式庫符號。否則只會載入相符的程式庫符號。範例: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "要求目前原始程式碼與 pdb 相符的選用旗標。", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "工作的名稱", "c_cpp.taskDefinitions.command.description": "執行編譯的編譯器或指令碼路徑", "c_cpp.taskDefinitions.args.description": "要傳遞給編譯器或編譯指令碼的其他引數", diff --git a/Extension/i18n/cht/src/LanguageServer/client.i18n.json b/Extension/i18n/cht/src/LanguageServer/client.i18n.json index 4879dd2448..14eafc3ae5 100644 --- a/Extension/i18n/cht/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/cht/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "是", "no.button": "否", "configurations.received": "收到的自訂組態:", - "browse.configuration.received": "收到的自訂瀏覽組態: {0}" + "browse.configuration.received": "收到的自訂瀏覽組態: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/cht/src/common.i18n.json b/Extension/i18n/cht/src/common.i18n.json index 1c40ef366b..beb74d26ce 100644 --- a/Extension/i18n/cht/src/common.i18n.json +++ b/Extension/i18n/cht/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "警告: 尚未針對此平台測試偵錯。", "reload.workspace.for.changes": "請重新載入工作區以讓設定變更生效。", "reload.string": "重新載入", - "invalid.download.location.received": "收到的下載位置無效" + "invalid.download.location.received": "收到的下載位置無效", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/cht/src/main.i18n.json b/Extension/i18n/cht/src/main.i18n.json index 4b831466d1..457cd112df 100644 --- a/Extension/i18n/cht/src/main.i18n.json +++ b/Extension/i18n/cht/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "不支援架構 {0}。 ", "apline.containers.not.supported": "不支援 Alpine 容器。", "download.button": "前往 [下載\ 頁面", - "native.binaries.mismatch.osx": "已安裝 macOS Intel 版延伸模組。因為您使用的是 Apple Silicon Mac,建議您安裝 Apple Silicon 版延伸模組。", "native.binaries.not.supported": "此 {0} {1} 版延伸模組與您的作業系統不相容。請下載並安裝 \"{2}\" 版延伸模組。", "extension.installation.failed": "無法成功安裝 C/C++ 延伸模組。您必須修復或重新安裝 C/C++ 語言功能的延伸模組,才可正常運作。", "remove.extension": "嘗試修復", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "錯誤: fs.rename 失敗,\"{0}\"。請手動刪除 {1} 以啟用偵錯。", "failed.at.stage": "在階段 {0} 失敗", "failed.at.stage2": "如果在離線環境中作業,或重複看到此錯誤,請嘗試下載具備 {0} 所有預先內含之相依性的延伸模組版本,然後在 VS Code 中使用 \"Install from VSIX\" 命令加以安裝。", - "finished.installing.dependencies": "已完成安裝相依性" + "finished.installing.dependencies": "已完成安裝相依性", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/cht/src/packageManager.i18n.json b/Extension/i18n/cht/src/packageManager.i18n.json index 9c015845c7..0d01797b4c 100644 --- a/Extension/i18n/cht/src/packageManager.i18n.json +++ b/Extension/i18n/cht/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Zip 檔案錯誤", "create.directory.error": "建立目錄時發生錯誤", "zip.stream.error": "讀取 zip 串流時發生錯誤", - "read.stream.error": "讀取串流中發生錯誤", "unlink.error": "將檔案 {0} 取消連結時發生錯誤", "rename.error": "重新命名檔案 {0} 時發生錯誤", + "read.stream.error": "讀取串流中發生錯誤", "write.stream.error": "寫入串流中發生錯誤", "file.already.exists": "警告: 檔案 '{0}' 已經存在但未更新。" } \ No newline at end of file diff --git a/Extension/i18n/csy/package.i18n.json b/Extension/i18n/csy/package.i18n.json index 3470c5680e..4ea699d5b2 100644 --- a/Extension/i18n/csy/package.i18n.json +++ b/Extension/i18n/csy/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Vybrat konfiguraci...", "c_cpp.command.configurationProviderSelect.title": "Změnit poskytovatele konfigurací...", "c_cpp.command.configurationEditJSON.title": "Upravit konfigurace (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Odsadí nový řádek relativně k nejzevnější levé závorce.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Odsadí nový řádek relativně k nejvnitřnější levé závorce.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Odsadí nový řádek relativně k začátku aktuálního příkazu.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Když se napíše nový řádek, zarovná se pod levou závorkou nebo podle hodnoty parametru C_Cpp.vcFormat.indent.multiLineRelativeTo.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "Nový řádek se zarovná pod levou závorkou.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Nový řádek se odsadí podle hodnoty parametru C_Cpp.vcFormat.indent.multiLineRelativeTo.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "V existujícím kódu se zachová stávající zarovnání odsazení nových řádků v závorkách.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Popisky se odsazují relativně k příkazům switch mezerou zadanou v nastavení Editor: Velikost tabulátoru.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Kód v bloku case se odsazuje relativně ke svému popisku mezerou zadanou v nastavení Editor: Velikost tabulátoru.", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Celý blok kódu, který se zadá na jednom řádku, zůstane na jednom řádku bez ohledu na hodnoty nastavení Formát VC: Nový řádek.", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Jakýkoliv kód, ve kterém se na jednom řádku zadají levá a pravá složená závorka, zůstane na jednom řádku bez ohledu na hodnoty nastavení Formát VC: Nový řádek.", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Bloky kódu se budou vždy formátovat podle hodnot nastavení Formát VC: Nový řádek.", - "c_cpp.configuration.clang_format_path.description": "Úplná cesta ke spustitelnému souboru clang-format. Pokud se nezadá, clang-format je k dispozici na cestě prostředí a ta se použije. Pokud se na cestě prostředí nenajde, použije se kopie clang-format, která se dodává spolu s rozšířením.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Styl kódování, v současné době se podporuje: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Pokud chcete načíst styl ze souboru .clang-format v aktuálním nebo nadřazeném adresáři, použijte možnost file. Pokud chcete zadat konkrétní parametry, použijte {klíč: hodnota, ...}. Například styl Visual Studio je podobný tomuto: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Název předdefinovaného stylu, který se použije jako záloha v případě, že se vyvolá formát Clang se stylem file, ale nenajde se soubor .clang-format. Možné hodnoty jsou Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, none, případně můžete použít {klíč: hodnota, ...} a nastavit konkrétní parametry. Například styl Visual Studio je podobný tomuto: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Pokud se nastaví, přepíše chování řazení vložených souborů určené parametrem SortIncludes.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Další kontrola položek na stejné úrovni u odpovídajícího souboru. Jako proměnnou názvu odpovídajícího souboru použijte $(basename).", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Když se nastaví na true, nahrazování příkazů shellu ladicího programu bude používat starou verzi obrácené čárky (`).", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: výsledky jiných odkazů", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Pokud je k dispozici, předá ladicímu programu informaci, aby se připojil ke vzdálenému počítači pomocí dalšího spustitelného souboru jako kanál, který bude přenášet standardní vstup a výstup mezi nástrojem VS Code a spustitelným souborem back-endu ladicího programu s podporou MI (třeba gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "zadejte plně kvalifikovanou cestu názvu programu kanálu, třeba /usr/bin/ssh", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Úplná cesta k ladicímu programu na cílovém počítači, například /usr/bin/gdb", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "Soubor .natvis, který se použije při ladění tohoto procesu. Tato možnost není kompatibilní s přehledným výpisem GDB. Pokud používáte toto nastavení, podívejte se i na showDisplayString.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "Soubor .natvis, který se použije při ladění tohoto procesu.", "c_cpp.debuggers.showDisplayString.description": "Když se zadá visualizerFile, showDisplayString povolí zobrazovaný řetězec. Když se tato možnost zapne, může to způsobit nižší výkon při ladění.", - "c_cpp.debuggers.environment.description": "Proměnné prostředí, které se mají přidat do prostředí pro program. Příklad: [ { \"name\": \"squid\", \"value\": \"clam\" } ]", + "c_cpp.debuggers.environment.description": "Proměnné prostředí, které se mají přidat do prostředí pro program. Příklad: [ { \"name\": \"config\", \"value\": \"Debug\" } ], ne [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "Absolutní cesta k souboru, který obsahuje definice proměnných prostředí. Tento soubor obsahuje na každém řádku pár klíč-hodnota rozdělený znakem rovnítka. Např. KLÍČ=HODNOTA.", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Seznam středníkem oddělených adresářů, ve kterých se budou hledat soubory .so. Příklad: c:\\dir1;c:\\dir2", "c_cpp.debuggers.MIMode.description": "Určuje ladicí program konzoly, ke kterému se připojí MIDebugEngine. Povolené hodnoty jsou gdb a lldb.", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Další argumenty pro ladicí program MI (třeba gdb)", "c_cpp.debuggers.miDebuggerServerAddress.description": "Síťová adresa MI Debugger Serveru, ke kterému se má připojit (příklad: localhost:1234)", "c_cpp.debuggers.stopAtEntry.description": "Nepovinný parametr. Když se nastaví na true, ladicí program by se měl zastavit u vstupního bodu cíle. Pokud se předá processId, nemá parametr žádný vliv.", - "c_cpp.debuggers.debugServerPath.description": "Nepovinná úplná cesta k ladicímu serveru, který se má spustit. Výchozí hodnota je null. Používá se ve spojení buď s miDebugServerAddress, nebo s vlastním serverem s customSetupCommand, na kterém běží -target-select remote .", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Volitelné argumenty ladicího serveru. Výchozí hodnota je null.", "c_cpp.debuggers.serverStarted.description": "Volitelný vzorek spuštěný na serveru, který se má vyhledat ve výstupu ladicího serveru. Výchozí hodnota je null.", "c_cpp.debuggers.filterStdout.description": "Vyhledá ve vzorku spuštěném na serveru stream stdout a zaznamená stdout do výstupu ladění. Výchozí hodnota je true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Umístění, na kterém se má spustit cíl ladění. Když se nedefinuje, výchozí hodnota bude internalConsole.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Výstup do konzoly ladění VS Code. Nepodporuje čtení vstupu konzoly (např. std::cin nebo scanf).", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "Integrovaný terminál VS Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Konzolové aplikace se spustí v externím okně terminálu. Okno se znovu použije ve scénářích opětovného spuštění a po ukončení aplikace se automaticky nezavře.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Konzolové aplikace se spustí ve vlastním externím okně konzoly, které se ukončí, až se aplikace zastaví. Aplikace, které konzolové nejsou, se spustí bez terminálu a stdout a stderr se budou ignorovat.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Pokud se nastaví na true, zakáže přesměrování konzoly laděného procesu, které se vyžaduje pro podporu integrovaného terminálu.", "c_cpp.debuggers.sourceFileMap.description": "Nepovinná mapování zdrojových souborů předaná ladicímu stroji. Příklad: { \"/original/source/path\":\"/current/source/path \"}", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "V případě hodnoty true se načtou symboly pro všechny knihovny (lib), jinak se nenačtou žádné symboly solib. Výchozí hodnota je true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Seznam názvů souborů (s povolenými zástupnými znaky) oddělených středníky (;). Upraví chování pro LoadAll. Hodnota true pro LoadAll znamená, že se nemají načítat symboly pro knihovny (lib), které odpovídají libovolnému názvu v seznamu. V opačném případě se mají načíst symboly pro všechny odpovídající knihovny. Příklad: foo.so;bar.so", "c_cpp.debuggers.requireExactSource.description": "Volitelný příznak, který vyžaduje, aby aktuální zdrojový kód odpovídal souboru pdb", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Název úlohy", "c_cpp.taskDefinitions.command.description": "Cesta ke kompilátoru nebo skriptu, který provádí kompilaci", "c_cpp.taskDefinitions.args.description": "Další argumenty, které se mají předat kompilátoru nebo kompilačnímu skriptu", diff --git a/Extension/i18n/csy/src/LanguageServer/client.i18n.json b/Extension/i18n/csy/src/LanguageServer/client.i18n.json index 57284f8e0b..39b9b0d0c3 100644 --- a/Extension/i18n/csy/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/csy/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Ano", "no.button": "Ne", "configurations.received": "Přijaly se vlastní konfigurace:", - "browse.configuration.received": "Přijala se vlastní konfigurace procházení: {0}" + "browse.configuration.received": "Přijala se vlastní konfigurace procházení: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/csy/src/common.i18n.json b/Extension/i18n/csy/src/common.i18n.json index c6c565aa6a..662032e46f 100644 --- a/Extension/i18n/csy/src/common.i18n.json +++ b/Extension/i18n/csy/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Upozornění: Ladění se pro tuto platformu netestovalo.", "reload.workspace.for.changes": "Načtěte pracovní prostor znovu, aby se změna nastavení projevila.", "reload.string": "Načíst znovu", - "invalid.download.location.received": "Přijato neplatné umístění pro stahování" + "invalid.download.location.received": "Přijato neplatné umístění pro stahování", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/csy/src/main.i18n.json b/Extension/i18n/csy/src/main.i18n.json index 8a605834f5..8930bddfc0 100644 --- a/Extension/i18n/csy/src/main.i18n.json +++ b/Extension/i18n/csy/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "Architektura {0} se nepodporuje. ", "apline.containers.not.supported": "Kontejnery Alpine se nepodporují.", "download.button": "Přejít na stránku stahování", - "native.binaries.mismatch.osx": "Verze rozšíření macOSu pro Intel se nainstalovala. Vzhledem k tomu, že používáte Apple Silicon Mac, doporučujeme nainstalovat verzi rozšíření Apple Silicon.", "native.binaries.not.supported": "Tato verze rozšíření pro {0} {1} není kompatibilní s vaším operačním systémem. Stáhněte a nainstalujte si prosím verzi rozšíření {2}.", "extension.installation.failed": "Nepovedlo se úspěšně nainstalovat rozšíření jazyka C/C++. Aby rozšíření pro funkce jazyka C/C++ fungovalo správně, bude nutné ho opravit nebo přeinstalovat.", "remove.extension": "Pokusit se o opravu", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "CHYBA: Operace fs.rename neproběhla úspěšně s chybou {0}. Pokud chcete povolit ladění, odstraňte {1} ručně.", "failed.at.stage": "Chyba ve fázi: {0}", "failed.at.stage2": "Pokud pracujete v offline prostředí nebo se vám tato chyba zobrazuje opakovaně, zkuste si z {0} stáhnout verzi rozšíření, která už má všechny závislosti předem zahrnuté, a pak ji nainstalujte v nástroji VS Code pomocí příkazu Nainstalovat z VSIX.", - "finished.installing.dependencies": "Dokončila se instalace závislostí." + "finished.installing.dependencies": "Dokončila se instalace závislostí.", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/csy/src/packageManager.i18n.json b/Extension/i18n/csy/src/packageManager.i18n.json index 4078230ed1..5a9815dfdd 100644 --- a/Extension/i18n/csy/src/packageManager.i18n.json +++ b/Extension/i18n/csy/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Chyba souboru ZIP", "create.directory.error": "Při vytváření adresáře došlo k chybě.", "zip.stream.error": "Chyba při čtení streamu ZIP", - "read.stream.error": "Ve streamu pro čtení došlo k chybě.", "unlink.error": "Při rušení propojení souboru {0} došlo k chybě.", "rename.error": "Při přejmenování souboru {0} došlo k chybě.", + "read.stream.error": "Ve streamu pro čtení došlo k chybě.", "write.stream.error": "Ve streamu pro zápis došlo k chybě.", "file.already.exists": "Upozornění: Soubor {0} už existuje a neaktualizoval se." } \ No newline at end of file diff --git a/Extension/i18n/deu/package.i18n.json b/Extension/i18n/deu/package.i18n.json index e0bb807c30..5836d12eb9 100644 --- a/Extension/i18n/deu/package.i18n.json +++ b/Extension/i18n/deu/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Konfiguration auswählen...", "c_cpp.command.configurationProviderSelect.title": "Konfigurationsanbieter ändern...", "c_cpp.command.configurationEditJSON.title": "Konfigurationen bearbeiten (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Eine neue Zeile wird relativ zur äußersten geöffneten Klammer eingezogen.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Eine neue Zeile wird relativ zur innersten geöffneten Klammer eingezogen.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Eine neue Zeile wird relativ zum Anfang der aktuellen Anweisung eingezogen.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Beim Einfügen einer neuen Zeile wird diese unter der runden Klammer links oder basierend auf \"C_Cpp.vcFormat.indent.multiLineRelativeTo\" ausgerichtet.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "Die neue Zeile wird unter der öffnenden Klammer ausgerichtet.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Die neue Zeile wird basierend auf \"C_Cpp.vcFormat.indent.multiLineRelativeTo\" eingerückt.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "In vorhandenem Code wird die vorhandene Einstellung zum Einzug neuer Zeilen innerhalb von Klammern beibehalten.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Bezeichnungen werden relativ zu switch-Anweisungen um den im Editor in der Einstellung für die Tabstoppgröße angegebenen Wert eingerückt.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Der Code in einem case-Block wird relativ zu seiner Bezeichnung um den im Editor in der Einstellung für die Tabstoppgröße angegebenen Wert eingerückt.", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Ein vollständiger Codeblock, der in einer Zeile eingegeben wird, wird unabhängig von den Einstellungen für neue Zeilen im VC-Format in einer Zeile beibehalten.", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Jeglicher Code, in dem die öffnende und schließende geschweifte Klammer in einer Zeile eingegeben wird, wird unabhängig von den Einstellungen für neue Zeilen im VC-Format in einer Zeile beibehalten.", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Codeblöcke werden immer basierend auf den Einstellungen für neue Zeilen im VC-Format formatiert.", - "c_cpp.configuration.clang_format_path.description": "Der vollständige Pfad der ausführbaren clang-format-Datei. Wenn dieser nicht angegeben wird und clang-format im Umgebungspfad verfügbar ist, wird die Datei im Umgebungspfad verwendet. Ist sie nicht im Umgebungspfad verfügbar, wird eine im Erweiterungspaket enthaltene Kopie von clang-format verwendet.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Formatvorlage für Code. Unterstützt derzeit Folgendes: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Verwenden Sie \"file\", um die Formatvorlage aus einer .clang-format-Datei im aktuellen oder übergeordneten Verzeichnis zu laden. Verwenden Sie {Schlüssel: Wert, ...}, um bestimmte Parameter festzulegen. Die Formatvorlage \"Visual Studio\" etwa sieht folgendermaßen aus: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Name des vordefinierten Stils, der als Fallback verwendet wird, falls das clang-Format mit der Formatvorlage \"file\" aufgerufen wird, aber die .clang-format-Datei nicht gefunden wird. Mögliche Werte sind \"Visual Studio\", \"LLVM\", \"Google\", \"Chromium\", \"Mozilla\", \"WebKit\" oder \"none\", oder verwenden Sie {key: value, ...}, um bestimmte Parameter festzulegen. Die Formatvorlage \"Visual Studio\" z. B. sieht etwa folgendermaßen aus: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Wenn diese Option festgelegt ist, wird das durch den SortIncludes-Parameter festgelegte Sortierverhalten für Includes überschrieben.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Zusätzliche Überprüfung der gleichgeordneten Elemente einer entsprechenden Datei. Verwenden Sie \"$(basename)\" als Variable für den entsprechenden Dateinamen.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Bei Festlegung auf TRUE verwendet die Befehlsersetzung der Debugger-Shell obsolete Backtick-Zeichen (`).", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: andere Verweisergebnisse", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Falls angegeben, weist diese Option den Debugger an, eine Verbindung mit einem Remotecomputer mithilfe einer anderen ausführbaren Datei als Pipe herzustellen, die Standardeingaben/-ausgaben zwischen VS Code und der ausführbaren Back-End-Datei für den MI-fähigen Debugger weiterleitet (z. B. gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "Vollqualifizierten Pfad für den Pipeprogrammnamen eingeben, z. B. \"/usr/bin/ssh\"", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Der vollständige Pfad zum Debugger auf dem Zielcomputer, z. B. \"/usr/bin/gdb\".", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "Die .natvis-Datei, die beim Debuggen dieses Prozesses verwendet werden soll. Diese Option ist nicht mit der automatischen Strukturierung und Einrückung von GDB kompatibel. Weitere Informationen finden Sie auch bei \"showDisplayString\", wenn Sie diese Einstellung verwenden.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "Die .natvis-Datei, die beim Debuggen dieses Prozesses verwendet werden soll.", "c_cpp.debuggers.showDisplayString.description": "Wenn eine visualizerFile angegeben wird, wird die Anzeigezeichenfolge von showDisplayString aktiviert. Durch Aktivieren dieser Option kann die Leistung während des Debuggings verlangsamt werden.", - "c_cpp.debuggers.environment.description": "Umgebungsvariablen, die der Umgebung für das Programm hinzugefügt werden sollen. Beispiel: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Umgebungsvariablen, die der Umgebung für das Programm hinzugefügt werden sollen. Beispiel: [ { \"name\": \"config\", \"value\": \"Debug\" } ], not [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "Absoluter Pfad zu einer Datei mit Umgebungsvariablendefinitionen. Für diese Datei sind Schlüssel-Wert-Paare pro Zeile durch ein Gleichheitszeichen getrennt. Beispiel: SCHLÜSSEL=WERT", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Durch Semikolons getrennte Liste von Verzeichnissen, die für die Suche nach SO-Dateien verwendet werden sollen. Beispiel: \"c:\\dir1;c:\\dir2\".", "c_cpp.debuggers.MIMode.description": "Hiermit wird der Konsolendebugger angegeben, mit dem die MIDebugEngine eine Verbindung herstellt. Zulässige Werte sind \"gdb\" und \"lldb\".", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Zusätzliche Argumente für den MI-Debugger (z. B. gdb).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Netzwerkadresse des MI-Debugger-Servers, mit dem eine Verbindung hergestellt werden soll (Beispiel: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "Optionaler Parameter. Wenn dieser Wert auf TRUE festgelegt ist, sollte der Debugger am Einstiegspunkt des Ziels anhalten. Wenn die processId übergeben wird, hat dies keine Auswirkungen.", - "c_cpp.debuggers.debugServerPath.description": "Optionaler vollständiger Pfad zu dem Debugserver, der gestartet werden soll. Der Standardwert ist NULL. Dies wird in Verbindung mit \"miDebugServerAddress\" oder Ihrem eigenen Server mit \"customSetupCommand\" verwendet, auf dem \"-target-select remote \" ausgeführt wird.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Optionale Debugserverargumente. Der Standardwert ist \"null\".", "c_cpp.debuggers.serverStarted.description": "Optionales vom Server gestartetes Muster, nach dem in der Ausgabe des Debugservers gesucht wird. Der Standardwert ist \"null\".", "c_cpp.debuggers.filterStdout.description": "stdout-Stream für ein vom Server gestartetes Muster suchen und stdout in der Debugausgabe protokollieren. Der Standardwert ist \"true\".", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Gibt an, wo das Debugziel gestartet wird. Wenn keine Angabe vorliegt, wird standardmäßig \"internalConsole\" verwendet.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Die Ausgabe erfolgt in der VS Code-Debugging-Konsole. Das Lesen von Konsoleneingaben (z. B. \"std::cin\" oder \"scanf\") wird nicht unterstützt.", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "Das integrierte Terminal von VS Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Konsolenanwendungen werden in einem externen Terminalfenster gestartet. Das Fenster wird in Neustartszenarien erneut verwendet und beim Beenden der Anwendung nicht automatisch ausgeblendet.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Konsolenanwendungen werden in ihrem eigenen externen Konsolenfenster gestartet, das beim Beenden der Anwendung ebenfalls beendet wird. Nicht-Konsolenanwendungen werden ohne Terminal ausgeführt, und stdout/stderr wird ignoriert.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Wenn dieser Wert auf TRUE festgelegt ist, wird für die zu debuggende Komponente die Konsolenumleitung deaktiviert, die für die Unterstützung des integrierten Terminals erforderlich ist.", "c_cpp.debuggers.sourceFileMap.description": "Optionale Quelldateizuordnungen, die an die Debug-Engine übergeben werden. Beispiel: { \"/original/source/path\":\"/current/source/path\" }", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "Bei TRUE werden Symbole für alle Bibliotheken geladen, andernfalls werden keine solib-Symbole geladen. Der Standardwert ist TRUE.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Liste der Dateinamen (Platzhalter zulässig), durch Semikolons \";\" getrennt. Ändert das Verhalten von LoadAll. Wenn LoadAll auf TRUE festgelegt ist, werden keine Symbole für Bibliotheken geladen, die einem beliebigen Namen in der Liste entsprechen. Andernfalls werden nur Symbole für übereinstimmende Bibliotheken geladen. Beispiel: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "Optionales Flag, um anzufordern, dass der aktuelle Quellcode mit der PDB-Datei übereinstimmt.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Der Name der Aufgabe", "c_cpp.taskDefinitions.command.description": "Der Pfad zu einem Compiler oder einem Skript, über den/das die Kompilierung ausgeführt wird", "c_cpp.taskDefinitions.args.description": "Zusätzliche Argumente, die an den Compiler oder das Kompilierungsskript übergeben werden sollen", diff --git a/Extension/i18n/deu/src/LanguageServer/client.i18n.json b/Extension/i18n/deu/src/LanguageServer/client.i18n.json index a08f2912f6..ceaafc3bac 100644 --- a/Extension/i18n/deu/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/deu/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Ja", "no.button": "Nein", "configurations.received": "Benutzerdefinierte Konfigurationen empfangen:", - "browse.configuration.received": "Benutzerdefinierte Suchkonfiguration empfangen: {0}" + "browse.configuration.received": "Benutzerdefinierte Suchkonfiguration empfangen: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/deu/src/common.i18n.json b/Extension/i18n/deu/src/common.i18n.json index d0570ad6a5..5cd1255ec9 100644 --- a/Extension/i18n/deu/src/common.i18n.json +++ b/Extension/i18n/deu/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Warnung: Das Debugging wurde für diese Plattform nicht getestet.", "reload.workspace.for.changes": "Laden Sie den Arbeitsbereich neu, damit die Einstellungsänderung wirksam wird.", "reload.string": "Aktualisieren", - "invalid.download.location.received": "Ungültiger Downloadspeicherort empfangen." + "invalid.download.location.received": "Ungültiger Downloadspeicherort empfangen.", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/deu/src/main.i18n.json b/Extension/i18n/deu/src/main.i18n.json index fa0c34ebe4..bd0039dc4f 100644 --- a/Extension/i18n/deu/src/main.i18n.json +++ b/Extension/i18n/deu/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "Die Architektur \"{0}\" wird nicht unterstützt. ", "apline.containers.not.supported": "Alpine-Container werden nicht unterstützt.", "download.button": "Gehe zu Downloadseite", - "native.binaries.mismatch.osx": "Die macOS Intel-Version der Erweiterung wurde installiert. Da Sie sich auf einem Apple Silicon Mac befinden, empfehlen wir die Installation der Apple Silicon-Version der Erweiterung.", "native.binaries.not.supported": "Diese Version {0} {1} der Erweiterung ist nicht mit Ihrem Betriebssystem kompatibel. Laden Sie Version \"{2}\" der Erweiterung herunter, und installieren Sie sie.", "extension.installation.failed": "Die C/C++-Erweiterung konnte nicht erfolgreich installiert werden. Sie müssen die Erweiterung für C/C++-Sprachfeatures reparieren oder neu installieren, damit die Erweiterung ordnungsgemäß funktioniert.", "remove.extension": "Reparaturversuch", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "FEHLER bei \"fs.rename\": {0}. Löschen Sie \"{1}\" manuell, um das Debugging zu aktivieren.", "failed.at.stage": "Fehler in Stufe: {0}", "failed.at.stage2": "Wenn Sie in einer Offlineumgebung arbeiten oder dieser Fehler wiederholt angezeigt wird, laden Sie eine Version der Erweiterung herunter, in die alle Abhängigkeiten von {0} bereits integriert sind. Verwenden Sie anschließend den Befehl \"Aus VSIX installieren\" in VS Code, um die Version zu installieren.", - "finished.installing.dependencies": "Installation der Abhängigkeiten abgeschlossen" + "finished.installing.dependencies": "Installation der Abhängigkeiten abgeschlossen", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/deu/src/packageManager.i18n.json b/Extension/i18n/deu/src/packageManager.i18n.json index cae6caf18f..2cf3c8daee 100644 --- a/Extension/i18n/deu/src/packageManager.i18n.json +++ b/Extension/i18n/deu/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Fehler in ZIP-Datei.", "create.directory.error": "Fehler beim Erstellen des Verzeichnisses.", "zip.stream.error": "Fehler beim Lesen des ZIP-Datenstroms.", - "read.stream.error": "Fehler im Lesedatenstrom.", "unlink.error": "Fehler beim Aufheben der Verknüpfung für die Datei \"{0}\".", "rename.error": "Fehler beim Umbenennen der Datei\"{0}\".", + "read.stream.error": "Fehler im Lesedatenstrom.", "write.stream.error": "Fehler im Schreibdatenstrom.", "file.already.exists": "Warnung: Die Datei \"{0}\" ist bereits vorhanden und wurde nicht aktualisiert." } \ No newline at end of file diff --git a/Extension/i18n/esn/package.i18n.json b/Extension/i18n/esn/package.i18n.json index 495bdbfd75..9655f46822 100644 --- a/Extension/i18n/esn/package.i18n.json +++ b/Extension/i18n/esn/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Seleccione una configuración...", "c_cpp.command.configurationProviderSelect.title": "Cambiar el proveedor de configuración...", "c_cpp.command.configurationEditJSON.title": "Editar configuraciones (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Aplica sangría a la nueva línea en relación con el paréntesis de apertura más externo.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Aplica sangría a la nueva línea en relación con el paréntesis de apertura más interno.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Aplica sangría a la nueva línea en relación con el principio de la instrucción actual.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Al escribirse una línea nueva, se alinea bajo el paréntesis de apertura o en función del valor \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "La línea nueva se alinea bajo el paréntesis de apertura.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Se aplica sangría a la línea nueva en función del valor \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "En el código existente, conserve la alineación de sangría existente de las líneas nuevas entre paréntesis.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Se aplica sangría a las etiquetas en relación con las instrucciones switch, según lo especificado en la configuración de Editor: Tamaño de tabulación.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Se aplica sangría al código incluido en el bloque case en relación con su etiqueta, según lo especificado en la configuración de Editor: Tamaño de tabulación.", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Un bloque de código completo que se escribe en una línea se mantiene en una sola línea, independientemente de cualquiera de los valores de formato de VC: Nueva línea.", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Cualquier código en el que la llave de apertura y de cierre se escriba en una línea se mantiene en una sola línea, independientemente de cualquiera de los valores de formato de VC: Nueva línea", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Siempre se da formato a los bloques de código de acuerdo con los valores de formato de VC: Nueva línea", - "c_cpp.configuration.clang_format_path.description": "Ruta de acceso completa del archivo ejecutable clang-format. Si no se especifica y clang-format está disponible en la ruta de acceso del entorno, se usa este. Si no se encuentra en la ruta de acceso del entorno, se usará una copia de clang-format incluida con la extensión.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Estilo de codificación. Actualmente, admite: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Use \"file\" para cargar el estilo de un archivo .clang-format en el directorio actual o primario. Use {clave: valor,...} para establecer parámetros específicos. Por ejemplo, el estilo de \"Visual Studio\" es similar a: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Nombre del estilo predefinido que se usa como elemento Fallback en el caso de que se invoque a clang-format con el estilo \"file\" y no se encuentre el archivo .clang-format. Los valores posibles son Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, ninguno o usar {clave: valor,...} para establecer parámetros específicos. Por ejemplo, el estilo \"Visual Studio\" es similar a: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Si se establece, invalida el comportamiento de ordenación de instrucciones include que determina el parámetro SortIncludes.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Comprobación adicional de los elementos del mismo nivel de un archivo coincidente. Use $(nombreBase) como variable para el nombre de archivo que coincide.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Si es true, la sustitución de comandos del shell del depurador usará la marca de comilla simple (') obsoleta.", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: resultados de otras referencias", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Cuando se especifica, indica al depurador que se conecte a un equipo remoto usando otro archivo ejecutable como canalización que retransmitirá la entrada o la salida estándar entre VS Code y el archivo ejecutable del back-end del depurador habilitado para MI (por ejemplo, gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "Escriba la ruta de acceso completa para el nombre del programa de canalización; por ejemplo, \"/usr/bin/ssh\".", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Ruta de acceso completa al depurador en la máquina de destino. Por ejemplo, /usr/bin/gdb.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "Archivo .natvis que debe usarse para depurar este proceso. Esta opción no es compatible con la impresión con sangría de GDB. Vea también \"showDisplayString\" si utiliza esta configuración.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "Archivo. natvis que debe usarse para depurar este proceso.", "c_cpp.debuggers.showDisplayString.description": "Cuando se especifica visualizerFile, showDisplayString habilita la cadena para mostrar. La activación de esta opción puede ralentizar el rendimiento durante la depuración.", - "c_cpp.debuggers.environment.description": "Variables de entorno que se agregan al entorno del programa. Ejemplo: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Variables del entorno que se agregan al entorno del programa. Ejemplo: [ { \"name\": \"config\", \"value\": \"Debug\" } ], no [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "Ruta de acceso absoluta a un archivo que contiene definiciones de variables de entorno. Este archivo tiene pares clave-valor separados por un signo igual por línea. Por ejemplo, CLAVE=VALOR.", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Lista de directorios separados por punto y coma que debe usarse para buscar archivos .so. Ejemplo: \"c:\\dir1;c:\\dir2\".", "c_cpp.debuggers.MIMode.description": "Indica el depurador de la consola al que debe conectarse MIDebugEngine. Los valores permitidos son \"gdb\" y \"lldb\".", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Argumentos adicionales para el depurador MI (como gdb).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Dirección de red del servidor del depurador MI al que debe conectarse (ejemplo: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "Parámetro opcional. Si se establece en true, el depurador debe detenerse en el punto de entrada del destino. Si se pasa processId, no tiene efecto.", - "c_cpp.debuggers.debugServerPath.description": "Ruta de acceso completa opcional al servidor de depuración que se va a iniciar. El valor predeterminado es NULL. Se usa junto con \"miDebugServerAddress\" o su servidor propio con un comando \"customSetupCommand\" que ejecuta \"-target-select remote \".", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Argumentos opcionales del servidor de depuración. El valor predeterminado es NULL.", "c_cpp.debuggers.serverStarted.description": "Patrón opcional iniciado por el servidor que debe buscarse en la salida del servidor de depuración. El valor predeterminado es NULL.", "c_cpp.debuggers.filterStdout.description": "Busca la secuencia stdout para el patrón iniciado por el servidor y registra stdout en la salida de depuración. El valor predeterminado es true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Indica dónde se debe iniciar el destino de depuración. Si no se define, el valor predeterminado es \"internalConsole\".", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Salida a la consola de depuración de VS Code. No se admite la lectura de entrada de la consola (ejemplo: \"std::cin\" o \"scanf\")", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "Terminal integrado de VS Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Las aplicaciones de consola se iniciarán en una ventana de terminal de tipo externo. La ventana se volverá a usar en los escenarios de reinicio y no desaparecerá automáticamente cuando se cierre la aplicación.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Las aplicaciones de consola se iniciarán en su propia ventana de consola externa, que terminará cuando la aplicación se detenga. Las aplicaciones que no sean de consola se ejecutarán sin un terminal y se omitirá stdout/stderr.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Si se establece en true, se deshabilita la redirección de la consola del depurado necesaria para la compatibilidad con el terminal integrado.", "c_cpp.debuggers.sourceFileMap.description": "Asignaciones de archivo de código fuente opcionales que se pasan al motor de depuración. Ejemplo: \"{ \"/original/source/path\":\"/current/source/path\" }\"", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "Si es true, se cargan los símbolos de todas las bibliotecas; de lo contrario, no se cargará ningún símbolo de la biblioteca compartida (solib). El valor predeterminado es true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Lista de nombres de archivo (se permiten comodines) separados por punto y coma \";\". Modifica el comportamiento de LoadAll. Si LoadAll es true, no se cargan los símbolos para las bibliotecas que coincidan con cualquier nombre de la lista. De lo contrario, solo se cargan los símbolos para las bibliotecas que coincidan. Ejemplo: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "Marca opcional que requiere que el código fuente actual coincida con el archivo PDB.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Nombre de la tarea", "c_cpp.taskDefinitions.command.description": "Ruta de acceso a un compilador o script que realiza la compilación.", "c_cpp.taskDefinitions.args.description": "Argumentos adicionales que se pasan al compilador o al script de compilación", diff --git a/Extension/i18n/esn/src/LanguageServer/client.i18n.json b/Extension/i18n/esn/src/LanguageServer/client.i18n.json index d95bd39b89..bfcf9b6a73 100644 --- a/Extension/i18n/esn/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/esn/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Sí", "no.button": "No", "configurations.received": "Configuraciones personalizadas recibidas:", - "browse.configuration.received": "Configuración de exploración personalizada recibida: {0}" + "browse.configuration.received": "Configuración de exploración personalizada recibida: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/esn/src/common.i18n.json b/Extension/i18n/esn/src/common.i18n.json index 886906cf4e..e7242227bf 100644 --- a/Extension/i18n/esn/src/common.i18n.json +++ b/Extension/i18n/esn/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Advertencia: La depuración no se ha probado para esta plataforma.", "reload.workspace.for.changes": "Recargue el área de trabajo para que el cambio de configuración surta efecto.", "reload.string": "Volver a cargar", - "invalid.download.location.received": "Se ha recibido una ubicación de descarga no válida." + "invalid.download.location.received": "Se ha recibido una ubicación de descarga no válida.", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/esn/src/main.i18n.json b/Extension/i18n/esn/src/main.i18n.json index af379f4659..522616c2fb 100644 --- a/Extension/i18n/esn/src/main.i18n.json +++ b/Extension/i18n/esn/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "La arquitectura {0} no se admite. ", "apline.containers.not.supported": "Los contenedores de Alpine no se admiten.", "download.button": "Ir a la página de descarga", - "native.binaries.mismatch.osx": "Se ha instalado la versión de Intel de macOS de la extensión. Como se trata de un equipo multiusuario de Apple Silicon, se recomienda instalar la versión de Apple Silicon de la extensión.", "native.binaries.not.supported": "La versión para {0} {1} de la extensión no es compatible con el sistema operativo. Descargue la versión \"{2}\" de la extensión e instálela.", "extension.installation.failed": "Error de instalación de la extensión de C/C++. Tendrá que reparar o reinstalar la extensión para que las características del lenguaje C/C++ funcionen correctamente.", "remove.extension": "Intentar reparar", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "ERROR: No se puedo ejecutar fs.rename con \"{0}\". Elimine {1} manualmente para habilitar la depuración.", "failed.at.stage": "Error en la fase: {0}", "failed.at.stage2": "Si trabaja en un entorno sin conexión o este error se repite, pruebe a descargar una versión de la extensión con todas las dependencias previamente incluidas de {0} y, a continuación, use el comando \"Instalar desde VSIX\" en VS Code para instalarla.", - "finished.installing.dependencies": "Ha finalizado la instalación de dependencias" + "finished.installing.dependencies": "Ha finalizado la instalación de dependencias", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/esn/src/packageManager.i18n.json b/Extension/i18n/esn/src/packageManager.i18n.json index 9184c5d3c6..7e677ff259 100644 --- a/Extension/i18n/esn/src/packageManager.i18n.json +++ b/Extension/i18n/esn/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Error de archivo ZIP", "create.directory.error": "Error al crear el directorio", "zip.stream.error": "Error al leer la secuencia ZIP", - "read.stream.error": "Error en la secuencia de lectura", "unlink.error": "Error al desvincular el archivo {0}", "rename.error": "Error al cambiar el nombre del archivo {0}", + "read.stream.error": "Error en la secuencia de lectura", "write.stream.error": "Error en la secuencia de escritura", "file.already.exists": "Advertencia: El archivo \"{0}\" ya existe y no se ha actualizado." } \ No newline at end of file diff --git a/Extension/i18n/fra/package.i18n.json b/Extension/i18n/fra/package.i18n.json index 0ee34a1cf1..123e6dc9f3 100644 --- a/Extension/i18n/fra/package.i18n.json +++ b/Extension/i18n/fra/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Sélectionner une configuration...", "c_cpp.command.configurationProviderSelect.title": "Changer le fournisseur de configuration...", "c_cpp.command.configurationEditJSON.title": "Modifier les configurations (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Mettez en retrait une nouvelle ligne par rapport à la parenthèse ouvrante la plus extérieure.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Mettez en retrait une nouvelle ligne par rapport à la parenthèse ouvrante la plus intérieure.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Mettez en retrait une nouvelle ligne par rapport au début de l'instruction actuelle.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Quand vous tapez une nouvelle ligne, elle est alignée sous la parenthèse ouvrante, ou elle est basée sur 'C_Cpp.vcFormat.indent.multiLineRelativeTo'.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "La nouvelle ligne est alignée sous la parenthèse ouvrante.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "La nouvelle ligne est mise en retrait en fonction de 'C_Cpp.vcFormat.indent.multiLineRelativeTo'.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "Dans le code existant, conservez l'alignement existant de la mise en retrait des nouvelles lignes entre parenthèses.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Les étiquettes sont mises en retrait par rapport aux instructions switch en fonction de la valeur spécifiée dans le paramètre Éditeur : Taille des tabulations.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Le code situé à l'intérieur d'un bloc case est mis en retrait par rapport à son étiquette, en fonction de la valeur spécifiée dans le paramètre Éditeur : Taille des tabulations", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Un bloc de code complet entré sur une seule ligne est conservé sur cette même ligne, quelles que soient les valeurs des paramètres Format VC : Nouvelle ligne", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Tout code dans lequel l'accolade ouvrante et l'accolade fermante sont entrées sur une seule ligne est conservé sur cette même ligne, quelles que soient les valeurs des paramètres Format VC : Nouvelle ligne", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Les blocs de code sont toujours mis en forme en fonction des valeurs des paramètres Format VC : Nouvelle ligne", - "c_cpp.configuration.clang_format_path.description": "Chemin complet de l'exécutable clang-format. Si rien n'est spécifié, et si clang-format est disponible dans la variable d'environnement PATH, la valeur de cette dernière est utilisée. En l'absence de valeur dans la variable d'environnement PATH, une copie de clang-format groupée en bundle avec l'extension est utilisée.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Style de programmation. Prend en charge Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Utilisez \"file\" pour charger le style à partir d'un fichier .clang-format dans le répertoire actif ou parent. Utilisez {clé: valeur, ...} pour définir des paramètres spécifiques. Par exemple, le style \"Visual Studio\" est semblable à ceci : { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Nom du style prédéfini utilisé en tant que solution de secours au cas où clang-format serait appelé avec le style \"file\". Toutefois, le fichier .clang-format est introuvable. Les choix possibles sont Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit ou aucune valeur. Vous pouvez également utiliser {clé: valeur, ...} pour définir des paramètres spécifiques. Par exemple, le style \"Visual Studio\" est semblable à ceci : { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Si cette option est définie, elle remplace le comportement de tri des inclusions déterminé par le paramètre SortIncludes.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Vérification supplémentaire des frères d'un fichier correspondant. Utilisez $(basename) comme variable pour le nom de fichier correspondant.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Si la valeur est true, le remplacement de la commande d'interpréteur de commandes du débogueur utilise un accent grave (`) obsolète.", "c_cpp.contributes.views.cppReferencesView.title": "C/C++ : Autres résultats des références", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Quand ce paramètre est présent, indique au débogueur de se connecter à un ordinateur distant en se servant d'un autre exécutable comme canal de relais d'entrée/de sortie standard entre VS Code et l'exécutable du back-end du débogueur MI (par exemple, gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "entrez le chemin complet du nom du programme de canal, par exemple '/usr/bin/ssh'", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Chemin complet du débogueur sur la machine cible, par exemple /usr/bin/gdb.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "Fichier .natvis à utiliser pendant le débogage de ce processus. Cette option n'est pas compatible avec l'impression en mode Pretty GDB. Consultez également \"showDisplayString\" en cas d'utilisation de ce paramètre.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "Fichier .natvis à utiliser pendant le débogage de ce processus.", "c_cpp.debuggers.showDisplayString.description": "Quand un visualizerFile est spécifié, showDisplayString active la chaîne d'affichage. Si vous activez cette option, les performances peuvent être ralenties pendant le débogage.", - "c_cpp.debuggers.environment.description": "Variables d'environnement à ajouter à l'environnement du programme. Exemple : [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Variables d’environnement à ajouter à l’environnement du programme. Exemple : [ { « nom »: « config », « valeur » : « Débogage » } ], et non [ { « config »: « Débogage » } ].", "c_cpp.debuggers.envFile.description": "Chemin absolu d'un fichier contenant des définitions de variable d'environnement. Ce fichier a des paires clé-valeur séparées par un signe égal par ligne. Par exemple, CLÉ=VALEUR", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Liste de répertoires séparés par des points-virgules à utiliser pour rechercher des fichiers .so. Exemple : \"c:\\dir1;c:\\dir2\".", "c_cpp.debuggers.MIMode.description": "Indique le débogueur de console auquel MIDebugEngine se connecte. Les valeurs autorisées sont \"gdb\" \"lldb\".", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Arguments supplémentaires pour le débogueur MI (par exemple gdb).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Adresse réseau du serveur du débogueur MI auquel se connecter (par exemple : localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "Paramètre facultatif. Si la valeur est true, le débogueur doit s'arrêter au point d'entrée de la cible. Si processId est passé, le paramètre n'a aucun effet.", - "c_cpp.debuggers.debugServerPath.description": "Chemin complet facultatif au serveur de débogage à lancer (valeur par défaut : null). Utilisé conjointement avec \"miDebugServerAddress\" ou votre propre serveur avec \"customSetupCommand\" qui exécute \"-target-select remote \"`.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Arguments facultatifs du serveur de débogage. La valeur par défaut est null.", "c_cpp.debuggers.serverStarted.description": "Modèle facultatif de démarrage du serveur à rechercher dans la sortie du serveur de débogage. La valeur par défaut est null.", "c_cpp.debuggers.filterStdout.description": "Permet de rechercher dans le flux stdout le modèle correspondant au démarrage du serveur, et de journaliser stdout dans la sortie de débogage. La valeur par défaut est true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Emplacement du lancement de la cible de débogage. En l'absence de valeur définie, la valeur par défaut est 'internalConsole'.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Sortie dans la console de débogage de VS Code. Ceci ne prend pas en charge la lecture de l'entrée de la console (exemple : 'std::cin' ou 'scanf')", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "terminal intégré de VS Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Les applications console sont lancées dans une fenêtre de terminal externe. La fenêtre est réutilisée dans les scénarios de redémarrage et ne disparaît pas automatiquement à la fermeture de l'application.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Les applications console sont lancées dans leur propre fenêtre de console externe, qui se ferme à l'arrêt de l'application. Les applications non-console s'exécutent sans terminal, et stdout/stderr est ignoré.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Si la valeur est true, désactive la redirection de la console de l'élément débogué nécessaire pour prendre en charge le terminal intégré.", "c_cpp.debuggers.sourceFileMap.description": "Mappages de fichier source facultatifs passés au moteur de débogage. Exemple : '{\"/original/source/path\":\"/current/source/path\" }'", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "Si la valeur est true, les symboles de toutes les bibliothèques sont chargés. Sinon, aucun symbole solib n'est chargé. La valeur par défaut est true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Liste des noms de fichiers (caractères génériques autorisés) séparés par des points-virgules ';'. Modifie le comportement de LoadAll. Si LoadAll a la valeur true, les symboles des bibliothèques correspondant à un nom de la liste ne sont pas chargés. Sinon, les symboles des bibliothèques ayant une correspondance sont chargés. Exemple : \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "Indicateur facultatif pour exiger que le code source actuel corresponde au fichier pdb.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Nom de la tâche", "c_cpp.taskDefinitions.command.description": "Chemin d'un compilateur ou d'un script qui effectue la compilation", "c_cpp.taskDefinitions.args.description": "Arguments supplémentaires à passer au compilateur ou au script de compilation", diff --git a/Extension/i18n/fra/src/LanguageServer/client.i18n.json b/Extension/i18n/fra/src/LanguageServer/client.i18n.json index f806b261fd..ca676a649c 100644 --- a/Extension/i18n/fra/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/fra/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Oui", "no.button": "Non", "configurations.received": "Configurations personnalisées reçues :", - "browse.configuration.received": "Configuration de navigation personnalisée reçue : {0}" + "browse.configuration.received": "Configuration de navigation personnalisée reçue : {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/fra/src/common.i18n.json b/Extension/i18n/fra/src/common.i18n.json index 334ac18b0a..6f024fd743 100644 --- a/Extension/i18n/fra/src/common.i18n.json +++ b/Extension/i18n/fra/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Avertissement : Le débogage n'a pas été testé pour cette plateforme.", "reload.workspace.for.changes": "Rechargez l'espace de travail pour appliquer les changements des paramètres.", "reload.string": "Recharger", - "invalid.download.location.received": "Emplacement de téléchargement reçu non valide" + "invalid.download.location.received": "Emplacement de téléchargement reçu non valide", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/fra/src/main.i18n.json b/Extension/i18n/fra/src/main.i18n.json index 5ddbe41155..a7447b3c75 100644 --- a/Extension/i18n/fra/src/main.i18n.json +++ b/Extension/i18n/fra/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "L'architecture {0} n'est pas prise en charge. ", "apline.containers.not.supported": "Les conteneurs Alpine ne sont pas pris en charge.", "download.button": "Accéder à la page de téléchargement", - "native.binaries.mismatch.osx": "La version macOS Intel de l’extension a été installée. Dans la mesure où vous êtes sur Apple Silicon Mac, nous vous recommandons d’installer la version Apple Silicon de l’extension.", "native.binaries.not.supported": "Cette version {0} {1} de l'extension est incompatible avec votre système d'exploitation. Téléchargez et installez la version {2} de l'extension.", "extension.installation.failed": "Échec de l'installation de l'extension C/C++. Vous devez réparer ou réinstaller l'extension pour que les fonctionnalités du langage C/C++ fonctionnent correctement.", "remove.extension": "Tentative de réparation", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "ERREUR : fs.rename a échoué avec \"{0}\". Supprimez {1} manuellement pour activer le débogage.", "failed.at.stage": "Échec à l'étape {0}", "failed.at.stage2": "Si vous travaillez dans un environnement hors connexion ou si vous voyez cette erreur à plusieurs reprises, essayez de télécharger une version de l'extension avec toutes les dépendances préalablement incluses à partir de {0}, puis utilisez la commande \"Installer depuis un VSIX\" dans VS Code pour effectuer l'installation.", - "finished.installing.dependencies": "Installation des dépendances terminée" + "finished.installing.dependencies": "Installation des dépendances terminée", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/fra/src/packageManager.i18n.json b/Extension/i18n/fra/src/packageManager.i18n.json index 78871bde37..2741c81f2c 100644 --- a/Extension/i18n/fra/src/packageManager.i18n.json +++ b/Extension/i18n/fra/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Erreur du fichier zip", "create.directory.error": "Erreur de création du répertoire", "zip.stream.error": "Erreur de lecture du flux zip", - "read.stream.error": "Erreur du flux de lecture", "unlink.error": "Erreur de dissociation du fichier {0}", "rename.error": "Erreur de renommage du fichier {0}", + "read.stream.error": "Erreur du flux de lecture", "write.stream.error": "Erreur du flux d'écriture", "file.already.exists": "Avertissement : Le fichier '{0}' existe déjà et n'a pas été mis à jour." } \ No newline at end of file diff --git a/Extension/i18n/ita/package.i18n.json b/Extension/i18n/ita/package.i18n.json index 1a97142f07..d9bff2947a 100644 --- a/Extension/i18n/ita/package.i18n.json +++ b/Extension/i18n/ita/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Seleziona una configurazione...", "c_cpp.command.configurationProviderSelect.title": "Cambia provider di configurazione...", "c_cpp.command.configurationEditJSON.title": "Modifica configurazioni (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Imposta un rientro per la nuova riga rispetto alla parentesi di apertura più esterna.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Imposta un rientro per la nuova riga rispetto alla parentesi di apertura più interna.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Imposta un rientro per la nuova riga rispetto all'inizio dell'istruzione corrente.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Quando viene digitata, una nuova riga viene allineata sotto la parentesi di apertura o in base al valore di `C_Cpp.vcFormat.indent.multiLineRelativeTo`.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "La nuova riga viene allineata sotto la parentesi di apertura.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Il rientro per la nuova riga è impostato in base al valore di `C_Cpp.vcFormat.indent.multiLineRelativeTo`.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "Nel codice esistente mantiene l'allineamento esistente del rientro per le nuove righe all'interno delle parentesi.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Le etichette vengono rientrate rispetto alla relativa istruzione switch in base al valore specificato nell'impostazione Editor: Dimensione tabulazione.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Il codice all'interno del blocco case viene rientrato rispetto alla relativa etichetta in base al valore specificato nell'impostazione Editor: Dimensione tabulazione", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Un blocco di codice completo immesso su una sola riga viene mantenuto su una sola riga, indipendentemente dai valori di qualsiasi impostazione di Formato VC: Nuova riga", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Il codice di qualsiasi tipo in cui le parentesi graffe di apertura e chiusura si trovano sulla stessa riga viene mantenuto su una singola riga, indipendentemente dai valori di una delle impostazioni di Formato VC: Nuova riga", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "I blocchi di codice vengono sempre formattati in base ai valori delle impostazioni di Formato VC: Nuova riga", - "c_cpp.configuration.clang_format_path.description": "Percorso completo del file eseguibile clang-format. Se non è specificato, verrà usato lo strumento clang-format disponibile nel percorso dell'ambiente. Se clang-format non viene trovato nel percorso dell'ambiente, ne verrà usata una copia fornita in bundle con l'estensione.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Stile di codifica. Attualmente supporta: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Usare \"file\" per caricare lo stile da un file con estensione .clang-format presente nella directory corrente o padre. Usare {chiave: valore, ...} per impostare parametri specifici. Ad esempio, lo stile \"Visual Studio\" è simile a: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Nome dello stile predefinito usato come fallback nel caso in cui il formato Clang venga richiamato con lo stile \"file\", ma il file in formato Clang non viene trovato. I valori possibili sono Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, none. In alternativa, usare {key: value, ...} per impostare parametri specifici. Ad esempio, lo stile \"Visual Studio\" è simile a: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Se è impostata, esegue l'override del comportamento di ordinamento di inclusione determinato dal parametro SortIncludes.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Controllo aggiuntivo sugli elementi di pari livello di un file corrispondente. Usare $(basename) come variabile del nome file corrispondente.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Se è true, per la sostituzione del comando della shell del debugger verrà usato il carattere backtick obsoleto (`).", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: Risultati altri riferimenti", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Se presente, indica al debugger di connettersi a un computer remoto usando come pipe un altro eseguibile che inoltra l'input/output standard tra VS Code e l'eseguibile back-end del debugger abilitato per MI, ad esempio gdb.", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "immettere il percorso completo per il nome del programma pipe, ad esempio '/usr/bin/ssh'", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Percorso completo del debugger nel computer di destinazione, ad esempio /usr/bin/gdb.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "File con estensione natvis da usare durante il debug di questo processo. Questa opzione non è compatibile con la riformattazione GDB. Se si usa questa impostazione, vedere anche \"showDisplayString\".", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "File con estensione natvis da usare durante il debug di questo processo.", "c_cpp.debuggers.showDisplayString.description": "Quando si specifica un oggetto visualizerFile, showDisplayString abilita la stringa di visualizzazione. L'attivazione di questa opzione può comportare un rallentamento delle prestazioni durante il debug.", - "c_cpp.debuggers.environment.description": "Variabili di ambiente da aggiungere all'ambiente per il programma. Esempio: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Variabili di ambiente da aggiungere all'ambiente per il programma. Esempio: [ { \"name\": \"config\", \"value\": \"Debug\" } ], non [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "Percorso assoluto di un file contenente le definizioni delle variabili di ambiente. Questo file contiene su ogni riga coppie chiave-valore separate da un segno di uguale, ad esempio CHIAVE=VALORE", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Elenco di directory delimitate da punto e virgola da usare per la ricerca di file con estensione so. Esempio: \"c:\\dir1;c:\\dir2\".", "c_cpp.debuggers.MIMode.description": "Indica il debugger della console a cui si connetterà MIDebugEngine. I valori consentiti sono \"gdb\" e \"lldb\".", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Argomenti aggiuntivi per il debugger MI, ad esempio gdb.", "c_cpp.debuggers.miDebuggerServerAddress.description": "Indirizzo di rete del server del debugger MI a cui connettersi. Esempio: localhost:1234.", "c_cpp.debuggers.stopAtEntry.description": "Parametro facoltativo. Se è true, il debugger deve arrestarsi in corrispondenza del punto di ingresso della destinazione. Se viene passato ProcessId, non ha alcun effetto.", - "c_cpp.debuggers.debugServerPath.description": "Percorso completo facoltativo del server di debug da avviare. L'impostazione predefinita è Null. Viene usata insieme a \"miDebugServerAddress\" o al proprio server con un comando \"customSetupCommand\" che esegue \"-target-select remote \"`.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Argomenti facoltativi del server di debug. L'impostazione predefinita è null.", "c_cpp.debuggers.serverStarted.description": "Criterio facoltativo avviato dal server per cercare nell'output del server di debug. L'impostazione predefinita è null.", "c_cpp.debuggers.filterStdout.description": "Cerca il criterio avviato dal server nel flusso stdout e registra stdout nell'output di debug. L'impostazione predefinita è true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Indica dove avviare la destinazione di debug. Se non è specificata, l'impostazione predefinita è 'internalConsole'.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Invia l'output alla Console di debug di Visual Studio Code. Non supporta la lettura dell'input della console, ad esempio 'std::cin' o 'scanf'", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "terminale integrato di Visual Studio Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Le applicazioni della console verranno avviate in una finestra del terminale esterna. La finestra verrà riutilizzata in scenari di riavvio e non scomparirà automaticamente alla chiusura dell'applicazione.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Le applicazioni della console verranno avviate nella finestra della console esterna, che verrà terminata alla chiusura dell'applicazione. Le applicazioni non della console vengono eseguite senza un terminale e stdout/stderr verrà ignorato.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Se è true, disabilita il reindirizzamento della console dell'oggetto del debug richiesto per il supporto del terminale integrato.", "c_cpp.debuggers.sourceFileMap.description": "Mapping facoltativi dei file di origine passati al motore di debug. Esempio: '{ \"/original/source/path\":\"/current/source/path\" }'", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "Se è true, verranno caricati i simboli per tutte le librerie; in caso contrario, non verrà caricato alcun simbolo di solib. Il valore predefinito è true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Elenco di nomi di file (caratteri jolly consentiti) delimitati da punti e virgola ';'. Modifica il comportamento di LoadAll. Se LoadAll è true, non carica i simboli per le librerie corrispondenti a qualsiasi nome dell'elenco. In caso contrario, carica solo i simboli per le librerie corrispondenti. Esempio: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "Flag facoltativo per richiedere che il codice sorgente corrente corrisponda al PDB.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Nome dell'attività", "c_cpp.taskDefinitions.command.description": "Percorso di un compilatore o di uno script che esegue la compilazione", "c_cpp.taskDefinitions.args.description": "Argomenti aggiuntivi da passare al compilatore o allo script di compilazione", diff --git a/Extension/i18n/ita/src/LanguageServer/client.i18n.json b/Extension/i18n/ita/src/LanguageServer/client.i18n.json index c871e48ba1..1a186c4fe1 100644 --- a/Extension/i18n/ita/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/ita/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Sì", "no.button": "No", "configurations.received": "Configurazioni personalizzate ricevute:", - "browse.configuration.received": "La configurazione di esplorazione personalizzata è stata ricevuta: {0}" + "browse.configuration.received": "La configurazione di esplorazione personalizzata è stata ricevuta: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/ita/src/common.i18n.json b/Extension/i18n/ita/src/common.i18n.json index d6a5d1c960..2cdfe40fe9 100644 --- a/Extension/i18n/ita/src/common.i18n.json +++ b/Extension/i18n/ita/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Avviso: il debug non è stato testato per questa piattaforma.", "reload.workspace.for.changes": "Ricaricare l'area di lavoro per rendere effettive le modifiche apportate alle impostazioni.", "reload.string": "Ricarica", - "invalid.download.location.received": "È stato ricevuto un percorso di download non valido" + "invalid.download.location.received": "È stato ricevuto un percorso di download non valido", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/ita/src/main.i18n.json b/Extension/i18n/ita/src/main.i18n.json index 717ed2fc0d..c509ccac4f 100644 --- a/Extension/i18n/ita/src/main.i18n.json +++ b/Extension/i18n/ita/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "L'architettura {0} non è supportata. ", "apline.containers.not.supported": "I contenitori Alpine non sono supportati.", "download.button": "Vai alla pagina di download", - "native.binaries.mismatch.osx": "La versione per macOS Intel dell'estensione è stata installata. Dal momento che stai usando una Mac Apple Silicon, ti raccomandiamo di installare la versione per Apple Silicon dell'estensione.", "native.binaries.not.supported": "La versione {0} {1} dell'estensione non è compatibile con il sistema operativo. Scaricare e installare la versione \"{2}\" dell'estensione.", "extension.installation.failed": "Non è stato possibile installare l'estensione C/C++. Per funzionare correttamente, è necessario riparare o reinstallare l'estensione per le funzionalità del linguaggio C/C++.", "remove.extension": "Tentativo di riparazione", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "ERRORE: fs.rename non riuscito con \"{0}\". Per abilitare il debug, eliminare manualmente {1}.", "failed.at.stage": "Errore nella fase: {0}", "failed.at.stage2": "Se si lavora in un ambiente offline o questo errore viene visualizzato ripetutamente, provare a scaricare una versione dell'estensione con tutte le dipendenze già incluse da {0}, quindi usare il comando \"Installa da VSIX\" in VS Code per installarla.", - "finished.installing.dependencies": "L'installazione delle dipendenze è stata completata" + "finished.installing.dependencies": "L'installazione delle dipendenze è stata completata", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/ita/src/packageManager.i18n.json b/Extension/i18n/ita/src/packageManager.i18n.json index 8bdcc6a33a..a614d351a8 100644 --- a/Extension/i18n/ita/src/packageManager.i18n.json +++ b/Extension/i18n/ita/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Errore del file ZIP", "create.directory.error": "Si è verificato un errore durante la creazione della directory", "zip.stream.error": "Si è verificato un errore durante la lettura del flusso ZIP", - "read.stream.error": "Si è verificato un errore durante la lettura del flusso", "unlink.error": "Si è verificato durante lo scollegamento del file {0}", "rename.error": "Si è verificato durante la ridenominazione del file {0}", + "read.stream.error": "Si è verificato un errore durante la lettura del flusso", "write.stream.error": "Si è verificato un errore durante la scrittura del flusso", "file.already.exists": "Avviso: il file '{0}' esiste già e non è stato aggiornato." } \ No newline at end of file diff --git a/Extension/i18n/jpn/package.i18n.json b/Extension/i18n/jpn/package.i18n.json index c6a8efb486..bbefe4cf6f 100644 --- a/Extension/i18n/jpn/package.i18n.json +++ b/Extension/i18n/jpn/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "構成を選択する...", "c_cpp.command.configurationProviderSelect.title": "構成プロバイダーを変更する...", "c_cpp.command.configurationEditJSON.title": "構成の編集 (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "新しい行は、一番外側の始めかっこを基準にインデントされます。", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "新しい行は、最も内側にある始めかっこを基準にインデントされます。", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "新しい行は、現在のステートメントの先頭を基準にインデントされます。", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "新しい行を入力すると、始めかっこの下か、'C_Cpp.vcFormat.indent.multiLineRelativeTo' を基準にして配置されます。", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "新しい行は、始めかっこの下に揃えられます。", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "新しい行は、'C_Cpp.vcFormat.indent.multiLineRelativeTo' を基準にしてインデントされます。", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "既存のコードで、かっこ内の新しい行のインデントの配置を既存のまま保持します。", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "ラベルは、[Editor: Tab Size](エディター: タブ サイズ) 設定で指定された分だけ、switch ステートメントを基準にインデントされます。", "c_cpp.configuration.vcFormat.indent.caseContents.description": "case ブロック内のコードは、[Editor: Tab Size](エディター: タブ サイズ) 設定で指定された分だけ、ラベルを基準にインデントされます", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "[VC Format: New Line](VC 書式設定: 改行) 設定の値に関係なく、1 行に入力された完全なコード ブロックは、1 行に保持されます", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "[VC Format: New Line](VC 書式設定: 改行) 設定の値に関係なく、左および右中かっこが 1 行に入力されているコードは、1 行に保持されます", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "コード ブロックは常に、[VC Format: New Line](VC 書式設定: 改行) 設定の値に基づいて書式設定されます", - "c_cpp.configuration.clang_format_path.description": "clang-format の実行可能ファイルの完全なパスです。指定されておらず、clang-format が環境パスに置かれている場合は、それが使用されます。環境パスに見つからない場合は、拡張機能にバンドルされている clang-format のコピーが使用されます。", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "次のコーディング スタイルが現在サポートされています: Visual Studio、LLVM、Google、Chromium、Mozilla、WebKit。\"file\" を使用して、現在のディレクトリまたは親ディレクトリにある .clang-format ファイルからスタイルを読み込みます。特定のパラメーターを設定するには、{キー: 値, ...} を使用します。たとえば、\"Visual Studio\" のスタイルは次のようになります: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "clang-format が \"file\" スタイルで呼び出されたものの .clang-format ファイルが見つからない場合に、フォールバックとして使用される定義済みスタイルの名前。使用可能な値は、Visual Studio、LLVM、Google、Chromium、Mozilla、WebKit、none です。または、{key: value, ...} を使用して特定のパラメーターを設定することもできます。たとえば、\"Visual Studio\" スタイルは次のようになります: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "設定されている場合、SortIncludes パラメーターによって決定されるインクルードの並べ替え動作がオーバーライドされます。", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "一致するファイルの兄弟をさらにチェックします。一致するファイル名の変数として $(basename) を使用します。", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "True の場合、デバッガー シェルのコマンド置換では古いバックティック (') が使用されます。", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: その他の参照結果", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "これを指定すると、デバッガーにより、別の実行可能ファイルをパイプとして使用してリモート コンピューターに接続され、VS Code と MI 対応のデバッガー バックエンド実行可能ファイル (gdb など) との間で標準入出力が中継されます。", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "パイプ プログラム名の完全修飾パスを入力してください (例: '/usr/bin/ssh')", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "対象マシン上のデバッガーへの完全なパス。例: /usr/bin/gdb。", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is 'true'.", "c_cpp.debuggers.logging.description": "どの種類のメッセージをデバッグ コンソールに記録する必要があるかを決定するオプションのフラグです。", "c_cpp.debuggers.logging.exceptions.description": "例外メッセージをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は true です。", "c_cpp.debuggers.logging.moduleLoad.description": "モジュール読み込みイベントをデバッグ コンソールに記録するかどうかを決定するオプションのフラグです。既定値は true です。", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: true.", "c_cpp.debuggers.text.description": "実行するデバッガー コマンドです。", "c_cpp.debuggers.description.description": "コマンドの説明 (省略可能)。", "c_cpp.debuggers.ignoreFailures.description": "true に設定すると、コマンドの失敗は無視されます。既定値は false です。", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "このプロセスをデバッグするときに使用する .natvis ファイルです。このオプションは GDB の再フォーマットと互換性がありません。この設定を使用する場合は、\"showDisplayString\" も参照してください。", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "このプロセスをデバッグするときに使用する .natvis ファイルです。", "c_cpp.debuggers.showDisplayString.description": "visualizerFile を指定すると、showDisplayString により表示文字列が有効になります。このオプションをオンにすると、デバッグ中にパフォーマンスが低下する可能性があります。", - "c_cpp.debuggers.environment.description": "プログラムの環境に追加する環境変数。例: [ { \"name\": \"squid\", \"value\": \"clam\" } ]。", + "c_cpp.debuggers.environment.description": "プログラムの環境に追加する環境変数。例: [ { \"name\": \"config\", \"value\": \"Debug\" } ], not [ { \"config\": \"Debug\" } ]。", "c_cpp.debuggers.envFile.description": "環境変数の定義を含むファイルへの絶対パスです。このファイルには、行ごとに等号で区切られたキーと値のペアがあります。例: キー=値", "c_cpp.debuggers.additionalSOLibSearchPath.description": ".so ファイルの検索に使用する、セミコロンで区切られたディレクトリの一覧です。例: \"c:\\dir1;c:\\dir2\"。", "c_cpp.debuggers.MIMode.description": "MIDebugEngine が接続するコンソール デバッガーを示します。許可されている値は \"gdb\" \"lldb\" です。", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "MI デバッガー (gdb など) の追加の引数。", "c_cpp.debuggers.miDebuggerServerAddress.description": "接続先の MI デバッガー サーバーのネットワークアドレスです (例: localhost: 1234)。", "c_cpp.debuggers.stopAtEntry.description": "オプションのパラメーターです。true の場合、デバッガーはターゲットのエントリポイントで停止します。processId が渡された場合は効果はありません。", - "c_cpp.debuggers.debugServerPath.description": "起動するデバッグ サーバーの完全なパス (省略可能)。既定値は null です。これは、\"miDebugServerAddress\"、または \"-target-select remote \" を実行する \"customSetupCommand\" を含む独自のサーバーのいずれかと共に使用されます。", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "デバッグ サーバー引数 (省略可能)。既定値は null です。", "c_cpp.debuggers.serverStarted.description": "デバッグ サーバー出力から検索する、サーバー開始のパターン (省略可能)。既定値は null です。", "c_cpp.debuggers.filterStdout.description": "サーバー開始のパターンを stdout ストリームから検索し、stdout をデバッグ出力にログ記録します。既定値は true です。", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "デバッグ ターゲットを起動する場所です。定義されていない場合、既定は 'internalConsole' です。", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "VS Code デバッグ コンソールに出力します。これはコンソール入力の読み取りをサポートしていません (例: 'std::cin' または 'scanf')", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "VS Code の統合ターミナルです", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "コンソール アプリケーションは、外部ターミナル ウィンドウで起動されます。このウィンドウは再起動のシナリオで再利用され、アプリケーションが終了しても自動的に消えません。", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "コンソール アプリケーションは、アプリケーションの停止時に終了する独自の外部コンソール ウィンドウで起動されます。コンソール以外のアプリケーションはターミナルなしで実行され、stdout および stderr は無視されます。", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "true の場合、統合ターミナルのサポートに必要なデバッグ対象のコンソール リダイレクトが無効になります。", "c_cpp.debuggers.sourceFileMap.description": "デバッグ エンジンに渡されたソース ファイル マッピングです (オプション)。例: '{ \"/original/source/path\":\"/current/source/path\" }'", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "true の場合、すべてのライブラリのシンボルが読み込まれます。それ以外の場合、solib シンボルは読み込まれません。既定値は true です。", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "セミコロン '; ' で区切られたファイル名の一覧 (ワイルドカードも使用可能)。LoadAll の動作が変更されます。LoadAll が true の場合は、一覧内の名前に一致するライブラリのシンボルを読み込まないでください。それ以外の場合は、一致するライブラリのシンボルのみを読み込んでください。例: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "PDB に一致する現在のソース コードを必要とする省略可能なフラグです。", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "タスクの名前", "c_cpp.taskDefinitions.command.description": "コンパイルを実行するコンパイラまたはスクリプトへのパス", "c_cpp.taskDefinitions.args.description": "コンパイラまたはコンパイル スクリプトに渡す追加の引数", diff --git a/Extension/i18n/jpn/src/LanguageServer/client.i18n.json b/Extension/i18n/jpn/src/LanguageServer/client.i18n.json index 1375062b75..d0c31a1caa 100644 --- a/Extension/i18n/jpn/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/jpn/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "はい", "no.button": "いいえ", "configurations.received": "カスタム構成を受信しました:", - "browse.configuration.received": "カスタムの参照構成を受信しました: {0}" + "browse.configuration.received": "カスタムの参照構成を受信しました: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/jpn/src/common.i18n.json b/Extension/i18n/jpn/src/common.i18n.json index 0296ba5987..1a39242c29 100644 --- a/Extension/i18n/jpn/src/common.i18n.json +++ b/Extension/i18n/jpn/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "警告: このプラットフォームのデバッグはテストされていません。", "reload.workspace.for.changes": "設定の変更を有効にするには、ワークスペースを再度読み込んでください。", "reload.string": "再読み込み", - "invalid.download.location.received": "無効なダウンロード場所を受信しました" + "invalid.download.location.received": "無効なダウンロード場所を受信しました", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/jpn/src/main.i18n.json b/Extension/i18n/jpn/src/main.i18n.json index 18461bed2c..e59cb4d009 100644 --- a/Extension/i18n/jpn/src/main.i18n.json +++ b/Extension/i18n/jpn/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "アーキテクチャ {0} はサポートされていません。", "apline.containers.not.supported": "Alpine コンテナーはサポートされていません。", "download.button": "ダウンロード ページへ移動", - "native.binaries.mismatch.osx": "MacOS Intel 版の拡張機能がインストールされました。Apple Silicon Mac を使用しているため、拡張機能の Apple Silicon バージョンをインストールすることをお勧めします。", "native.binaries.not.supported": "この {0} {1} バージョンの拡張機能は、お使いの OS と互換性がありません。拡張機能の \"{2}\" バージョンをダウンロードしてインストールしてください。", "extension.installation.failed": "C/C++ の拡張機能を正常にインストールできませんでした。正常に機能させるには、C/C++ 言語機能の拡張機能を修復または再インストールする必要があります。", "remove.extension": "修復の試行", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "エラー: fs.rename が、\"{0}\" により失敗しました。{1} を手動で削除し、デバッグを有効にしてください。", "failed.at.stage": "以下のステージで失敗しました: {0}", "failed.at.stage2": "オフライン環境で作業している場合、またはこのエラーが繰り返し表示される場合は、すべての依存関係が事前インクルードされている拡張機能のバージョンを {0} からダウンロードしてみてください。その後、VS Code で \"Install from VSIX\" コマンドを使用してインストールしてください。", - "finished.installing.dependencies": "依存関係のインストールが完了しました" + "finished.installing.dependencies": "依存関係のインストールが完了しました", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/jpn/src/packageManager.i18n.json b/Extension/i18n/jpn/src/packageManager.i18n.json index a36dd5fc57..35703074f2 100644 --- a/Extension/i18n/jpn/src/packageManager.i18n.json +++ b/Extension/i18n/jpn/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Zip ファイルのエラー", "create.directory.error": "ディレクトリの作成中にエラーが発生しました", "zip.stream.error": "zip ストリームの読み取りでエラーが発生しました", - "read.stream.error": "ストリームの読み取りでエラーが発生しました", "unlink.error": "ファイル {0} のリンク解除中にエラーが発生しました", "rename.error": "ファイル {0} の名前変更でエラーが発生しました", + "read.stream.error": "ストリームの読み取りでエラーが発生しました", "write.stream.error": "ストリームの書き込みでエラーが発生しました", "file.already.exists": "警告: ファイル '{0}' は既に存在するため、更新されませんでした。" } \ No newline at end of file diff --git a/Extension/i18n/kor/package.i18n.json b/Extension/i18n/kor/package.i18n.json index 10395d5b00..cd536a1ca5 100644 --- a/Extension/i18n/kor/package.i18n.json +++ b/Extension/i18n/kor/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "구성 선택...", "c_cpp.command.configurationProviderSelect.title": "구성 공급자 변경...", "c_cpp.command.configurationEditJSON.title": "구성 편집(JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "가장 바깥쪽의 여는 괄호를 기준으로 새 줄을 들여씁니다.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "가장 안쪽의 여는 괄호를 기준으로 새 줄을 들여씁니다.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "현재 문의 시작 부분을 기준으로 새 줄을 들여씁니다.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "새 줄을 입력하면 여는 괄호 아래에 맞추거나 'C_Cpp.vcFormat.indent.multiLineRelativeTo'를 기준으로 맞춥니다.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "새 줄을 여는 괄호 아래에 맞춥니다.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "새 줄을 'C_Cpp.vcFormat.indent.multiLineRelativeTo'를 기준으로 들여씁니다.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "기존 코드에서는 괄호 안에서 기존의 새 줄 들여쓰기 맞춤을 유지합니다.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "switch 문을 기준으로 편집기: 탭 크기 설정에 지정된 수만큼 레이블을 들여씁니다.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "레이블을 기준으로 편집기: 탭 크기 설정에 지정된 수만큼 case 블록 내 코드를 들여씁니다.", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "VC 형식: 줄 바꿈 설정의 값과 관계없이 한 줄에 입력된 전체 코드 블록이 한 줄에 유지됩니다.", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "VC 형식: 줄 바꿈 설정의 값과 관계없이 여는 중괄호와 닫는 중괄호가 한 줄에 입력된 코드가 한 줄에 유지됩니다.", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "항상 VC 형식: 줄 바꿈 설정의 값에 따라 코드 블록에 서식이 지정됩니다.", - "c_cpp.configuration.clang_format_path.description": "clang-format 실행 파일의 전체 경로입니다. 지정하지 않은 경우 clang-format을 환경 경로에서 사용할 수 있으면 해당 실행 파일이 사용됩니다. 환경 경로에 clang-format이 없는 경우에는 확장과 함께 제공된 clang-format의 복사본이 사용됩니다.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "코딩 스타일은 현재 Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit을 지원합니다. \"file\"을 사용하여 현재 또는 부모 디렉터리의 .clang-format 파일에서 스타일을 로드합니다. {key: value, ...}을 사용하여 특정 매개 변수를 설정합니다. 예를 들어 \"Visual Studio\" 스타일은 { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }와 유사합니다.", "c_cpp.configuration.clang_format_fallbackStyle.description": "clang-format이 \"file\" 스타일을 사용하여 호출되지만 .clang-format 파일을 찾을 수 없는 경우 대체로 사용되는 미리 정의된 스타일의 이름입니다. 가능한 값은 Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, 없음이거나 {key: value, ...}을 사용하여 특정 매개 변수를 설정합니다. 예를 들어 \"Visual Studio\" 스타일은 { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }와 유사합니다.", "c_cpp.configuration.clang_format_sortIncludes.description": "설정되는 경우 SortIncludes 매개 변수로 결정된 포함 정렬 동작을 재정의합니다.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "일치하는 파일의 형제에 대한 추가 검사입니다. $(basename)을 일치하는 파일 이름에 대한 변수로 사용하세요.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "true인 경우 디버거 셸 명령 대체가 사용되지 않는 백틱(`)을 사용합니다.", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: 기타 참조 결과", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "있을 경우 VS Code와 MI 지원 디버거 백 엔드 실행 파일(예: gdb) 사이에 표준 입출력을 릴레이하는 파이프로 다른 실행 파일을 사용하여 원격 컴퓨터에 연결되도록 디버거를 지정합니다.", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "파이프 프로그램 이름의 정규화된 경로 입력(예: '/usr/bin/ssh')", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "대상 컴퓨터에서 디버거의 전체 경로(예: /usr/bin/gdb)입니다.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is 'true'.", "c_cpp.debuggers.logging.description": "메시지 유형을 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다.", "c_cpp.debuggers.logging.exceptions.description": "예외 메시지를 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다. 기본값은 true입니다.", "c_cpp.debuggers.logging.moduleLoad.description": "모듈 로드 이벤트를 디버그 콘솔에 기록할지 여부를 결정하는 선택적 플래그입니다. 기본값은 true입니다.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: true.", "c_cpp.debuggers.text.description": "실행할 디버거 명령입니다.", "c_cpp.debuggers.description.description": "명령에 대한 선택적 설명입니다.", "c_cpp.debuggers.ignoreFailures.description": "True이면 명령 실패가 무시됩니다. 기본값은 false입니다.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "이 프로세스를 디버그할 때 사용할 .natvis 파일입니다. 이 옵션은 GDB 자동 서식 지정과 호환되지 않습니다. 이 설정을 사용하는 경우 \"showDisplayString\"을 참조하세요.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "이 프로세스를 디버그할 때 사용할 .natvis 파일입니다.", "c_cpp.debuggers.showDisplayString.description": "visualizerFile을 지정하면 showDisplayString은 표시 문자열을 사용하도록 설정합니다. 이 옵션을 켜면 디버그하는 동안 성능이 저하될 수 있습니다.", - "c_cpp.debuggers.environment.description": "프로그램의 환경에 추가할 환경 변수입니다. 예: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "프로그램의 환경에 추가할 환경 변수입니다. 예: [ { \"name\": \"config\", \"value\": \"Debug\" } ], not [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "환경 변수 정의를 포함하는 파일의 절대 경로입니다. 이 파일에는 줄마다 등호로 구분된 키 값 쌍이 있습니다(예: 키=값).", "c_cpp.debuggers.additionalSOLibSearchPath.description": ".so 파일 검색에 사용할 디렉터리의 세미콜론으로 구분된 목록입니다(예: \"c:\\dir1;c:\\dir2\").", "c_cpp.debuggers.MIMode.description": "MIDebugEngine이 연결할 콘솔 디버거를 나타냅니다. 허용되는 값은 \"gdb\" \"lldb\"입니다.", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "MI 디버거(예: gdb)의 추가 인수입니다.", "c_cpp.debuggers.miDebuggerServerAddress.description": "연결할 MI 디버거 서버의 네트워크 주소입니다(예: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "선택적 매개 변수입니다. True이면 디버거가 대상의 진입점에서 중지됩니다. processId가 전달되는 경우 영향을 주지 않습니다.", - "c_cpp.debuggers.debugServerPath.description": "시작할 디버그 서버의 전체 경로입니다(선택 사항). 기본값은 null입니다. 이 옵션은 \"miDebugServerAddress\"와 함께 사용되거나 \"-target-select remote \"를 실행하는 \"customSetupCommand\"와 자체 서버와 함께 사용됩니다.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "선택적 디버그 서버 인수입니다. 기본값은 null입니다.", "c_cpp.debuggers.serverStarted.description": "디버그 서버 출력에서 찾을 서버에서 시작한 패턴(선택 사항)입니다. 기본값은 null입니다.", "c_cpp.debuggers.filterStdout.description": "서버에서 시작한 패턴을 stdout 스트림에서 검색하고, stdout를 디버그 출력에 기록합니다. 기본값은 true입니다.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "디버그 대상을 시작할 위치입니다. 정의되지 않은 경우 기본값인 'internalConsole'로 설정됩니다.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "VS Code 디버그 콘솔에 출력합니다. 콘솔 입력 읽기(예: 'std::cin' 또는 'scanf')는 지원되지 않습니다.", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "VS Code의 통합 터미널", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "콘솔 애플리케이션이 외부 터미널 창에서 시작됩니다. 이 창은 다시 시작 시나리오에서 재사용되며, 애플리케이션이 종료될 때 자동으로 사라지지 않습니다.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "콘솔 애플리케이션은 애플리케이션이 중지될 때 종료되는 해당 외부 콘솔 창에서 시작됩니다. 콘솔이 아닌 애플리케이션은 터미널 없이 실행되며, stdout/stderr이 무시됩니다.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "True이면 통합 터미널 지원에 필요한 디버기 콘솔 리디렉션을 사용하지 않도록 설정합니다.", "c_cpp.debuggers.sourceFileMap.description": "디버그 엔진에 전달되는 선택적 소스 파일 매핑입니다(예: '{\"/original/source/path\": \"/original/source/path\"}').", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "true이면 모든 라이브러리의 기호가 로드됩니다. true가 아니면 solib 기호가 로드되지 않습니다. 기본값은 true입니다.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "세미콜론 ';'으로 구분된 파일 이름(와일드카드 허용) 목록이며, LoadAll의 동작을 수정합니다. LoadAll이 true이면 목록에 있는 이름과 일치하는 라이브러리의 기호를 로드하지 않습니다. true가 아니면 일치하는 라이브러리의 기호만 로드합니다. 예: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "현재 소스 코드가 PDB와 일치하도록 하는 선택적 플래그입니다.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "작업의 이름", "c_cpp.taskDefinitions.command.description": "컴파일을 수행하는 컴파일러 또는 스크립트의 경로", "c_cpp.taskDefinitions.args.description": "컴파일러 또는 컴파일 스크립트에 전달할 추가 인수", diff --git a/Extension/i18n/kor/src/LanguageServer/client.i18n.json b/Extension/i18n/kor/src/LanguageServer/client.i18n.json index 18ba0cd7b9..0f49b6bbe4 100644 --- a/Extension/i18n/kor/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/kor/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "예", "no.button": "아니요", "configurations.received": "사용자 지정 구성이 수신됨:", - "browse.configuration.received": "사용자 지정 찾아보기 구성이 수신됨: {0}" + "browse.configuration.received": "사용자 지정 찾아보기 구성이 수신됨: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/kor/src/common.i18n.json b/Extension/i18n/kor/src/common.i18n.json index 612b6441f0..5de4098043 100644 --- a/Extension/i18n/kor/src/common.i18n.json +++ b/Extension/i18n/kor/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "경고: 디버깅이 이 플랫폼에서 테스트되지 않았습니다.", "reload.workspace.for.changes": "설정 변경 내용을 적용하려면 작업 영역을 다시 로드합니다.", "reload.string": "다시 로드", - "invalid.download.location.received": "잘못된 다운로드 위치가 수신되었습니다." + "invalid.download.location.received": "잘못된 다운로드 위치가 수신되었습니다.", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/kor/src/main.i18n.json b/Extension/i18n/kor/src/main.i18n.json index 26261429f1..d2482395ba 100644 --- a/Extension/i18n/kor/src/main.i18n.json +++ b/Extension/i18n/kor/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "{0} 아키텍처는 지원되지 않습니다. ", "apline.containers.not.supported": "Alpine 컨테이너는 지원되지 않습니다.", "download.button": "다운로드 페이지로 이동", - "native.binaries.mismatch.osx": "macOS Intel 버전의 확장이 설치되었습니다. Apple Silicon Mac을 사용 중이므로 Apple Silicon 버전의 확장을 설치하는 것이 좋습니다.", "native.binaries.not.supported": "이 확장의 {0} {1} 버전은 OS와 호환되지 않습니다. 확장의 \"{2}\" 버전을 다운로드하여 설치하세요.", "extension.installation.failed": "C/C++ 확장을 설치하지 못했습니다. C/C++ 언어 기능이 제대로 작동하려면 확장을 복구하거나 다시 설치해야 합니다.", "remove.extension": "복구 시도", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "오류: fs.rename이 \"{0}\"과(와) 함께 실패했습니다. {1}을(를) 수동으로 삭제하여 디버깅을 사용하도록 설정합니다.", "failed.at.stage": "{0} 단계에서 실패", "failed.at.stage2": "오프라인 환경에서 작업하거나 이 오류가 반복적으로 표시되면 {0}에서 모든 종속성이 미리 포함된 확장 버전을 다운로드한 다음, VS Code에서 \"VSIX에서 설치\" 명령을 사용하여 확장을 설치합니다.", - "finished.installing.dependencies": "종속성 설치를 완료했습니다." + "finished.installing.dependencies": "종속성 설치를 완료했습니다.", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/kor/src/packageManager.i18n.json b/Extension/i18n/kor/src/packageManager.i18n.json index bfe6806e67..b349515504 100644 --- a/Extension/i18n/kor/src/packageManager.i18n.json +++ b/Extension/i18n/kor/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Zip 파일 오류", "create.directory.error": "디렉터리를 만드는 동안 오류가 발생했습니다.", "zip.stream.error": "zip 스트림을 읽는 동안 오류가 발생했습니다.", - "read.stream.error": "읽기 스트림의 오류", "unlink.error": "{0} 파일의 연결을 해제하는 동안 오류가 발생했습니다.", "rename.error": "{0} 파일의 이름을 바꾸는 동안 오류가 발생했습니다.", + "read.stream.error": "읽기 스트림의 오류", "write.stream.error": "쓰기 스트림의 오류", "file.already.exists": "경고: '{0}' 파일이 이미 있으므로 업데이트되지 않았습니다." } \ No newline at end of file diff --git a/Extension/i18n/plk/package.i18n.json b/Extension/i18n/plk/package.i18n.json index 60a613d9c3..4cf1df7bd2 100644 --- a/Extension/i18n/plk/package.i18n.json +++ b/Extension/i18n/plk/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Wybierz konfigurację...", "c_cpp.command.configurationProviderSelect.title": "Zmień dostawcę konfiguracji...", "c_cpp.command.configurationEditJSON.title": "Edytowanie konfiguracji (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Wcięcie nowego wiersza jest określane względem najbardziej zewnętrznego otwartego nawiasu.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Wcięcie nowego wiersza jest określane względem najbardziej wewnętrznego otwartego nawiasu.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Wcięcie nowego wiersza jest określane względem początku bieżącej instrukcji.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Po wpisaniu nowego wiersza jest on wyrównywany pod nawiasem otwierającym lub na podstawie parametru „C_Cpp.vcFormat.indent.multiLineRelativeTo”.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "Nowy wiersz jest wyrównywany pod nawiasem otwierającym.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Wcięcie nowego wiersza jest określane na podstawie parametru „C_Cpp.vcFormat.indent.multiLineRelativeTo”.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "W istniejącym kodzie zachowaj istniejące wyrównanie nowych wierszy w obrębie nawiasów.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Dla etykiet tworzone jest wcięcie względem instrukcji switch o szerokości określonej w ustawieniu Edytor: rozmiar tabulatora.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Dla kodu wewnątrz bloku instrukcji tworzone jest wcięcie o szerokości określonej w ustawieniu Edytor: rozmiar tabulatora", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Pełny blok kodu, który został wprowadzony w jednym wierszu, jest pozostawiany w jednym wierszu, niezależnie od wartości ustawień Format VC: nowy wiersz", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Dowolny kod, w którym otwierający i zamykający nawias klamrowy został wprowadzony w jednym wierszu, jest pozostawiany w jednym wierszu, niezależnie od wartości ustawień Format VC: nowy wiersz", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Bloki kodu są zawsze formatowane na podstawie wartości ustawień Format VC: nowy wiersz", - "c_cpp.configuration.clang_format_path.description": "Pełna ścieżka do pliku wykonywalnego narzędzia clang-format. Jeśli nie zostanie określona, a narzędzie clang-format będzie dostępne w ścieżce środowiska, to zostanie użyte. Jeśli narzędzie clang-format nie zostanie znalezione w ścieżce środowiska, zostanie użyta jego kopia dołączona do rozszerzenia.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Styl kodowania. Obecnie obsługiwane: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Użyj elementu „file”, aby załadować styl z pliku clang-format znajdującego się w bieżącym lub nadrzędnym katalogu. Użyj ciągu {klucz: wartość,...}, aby ustawić określone parametry. Na przykład styl „Visual Studio” jest podobny do następującego: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Nazwa wstępnie zdefiniowanego stylu używana jako alternatywa w przypadku, gdy plik CLANG-FORMAT zostanie wywołany przy użyciu stylu „file”, ale plik ten nie zostanie odnaleziony. Możliwe wartości to Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit; można również użyć pustej wartość lub użyć ciągu {klucz: wartość, ...}, aby określić konkretne parametry. Na przykład styl „Visual Studio” jest podobny do następującego: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Jeśli jest ustawione, zastępuje zachowanie sortowania dołączanych elementów określone za pomocą parametru SortIncludes.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Dodatkowe sprawdzenie elementów równorzędnych pasującego pliku. Użyj ciągu $(basename) jako zmiennej dla nazwy pasującego pliku.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Jeśli wartość będzie równa true, podstawianie poleceń powłoki debugera będzie używać przestarzałego grawisa (`).", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: inne wyniki odwołań", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Jeśli jest obecny, zawiera instrukcje dla debugera, aby połączył się z komputerem zdalnym przy użyciu innego pliku wykonywalnego jako potoku, który będzie przekazywał standardowe wejście/wyjście między programem VS Code a plikiem wykonywalnym zaplecza debugera z włączoną obsługą indeksu MI (takim jak gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "wprowadź w pełni kwalifikowaną ścieżkę na potrzeby nazwy programu potoku, na przykład „/usr/bin/ssh”", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Pełna ścieżka do debugera na komputerze docelowym, na przykład /usr/bin/gdb.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "Plik NATVIS, który ma być używany podczas debugowania tego procesu. Ta opcja jest niezgodna z formatowaniem kodu debugera GDB. W przypadku używania tego ustawienia zapoznaj się również z właściwością „showDisplayString”.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "Plik NATVIS, który ma być używany podczas debugowania tego procesu.", "c_cpp.debuggers.showDisplayString.description": "Gdy element visualizerFile jest określony, opcja showDisplayString spowoduje włączenie ciągu wyświetlanego. Włączenie tej opcji może spowodować zmniejszenie wydajności podczas debugowania.", - "c_cpp.debuggers.environment.description": "Zmienne środowiskowe do dodania do środowiska programu. Przykład: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Zmienne środowiskowe do dodania do środowiska dla programu. Przykład: [{\"name\": \"config\", \"value\": \"debug\"}], nie [{\"config\": \"debug\"}].", "c_cpp.debuggers.envFile.description": "Ścieżka bezwzględna do pliku zawierającego definicje zmiennych środowiskowych. Ten plik w każdym wierszu zawiera parę klucz-wartość oddzieloną znakiem równości. Przykład: KLUCZ=WARTOŚĆ", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Rozdzielana średnikami lista katalogów, w których mają być wyszukiwanie pliki SO. Przykład: „c:\\dir1;c:\\dir2”.", "c_cpp.debuggers.MIMode.description": "Wskazuje debuger konsoli, z którym połączy się aparat MIDebugEngine. Dozwolone wartości to „gdb” i „lldb”.", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Dodatkowe argumenty dla debugera MI (takiego jak gdb).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Adres sieciowy serwera debugera MI, z którym ma zostać nawiązane połączenie (przykład: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "Parametr opcjonalny. Jeśli wartość to true, debuger powinien zostać zatrzymany w punkcie wejścia obiektu docelowego. W przypadku przekazania identyfikatora procesu parametr ten nie ma żadnego efektu.", - "c_cpp.debuggers.debugServerPath.description": "Opcjonalna pełna ścieżka do serwera debugowania, który ma zostać uruchomiony. Wartość domyślna to null. Jest ona używana w połączeniu z opcją „miDebugServerAddress” lub Twoim własnym serwerem wraz z poleceniem „customSetupCommand” z opcją „-target-select remote ”.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Opcjonalne argumenty serwera debugowania. Wartość domyślna to null.", "c_cpp.debuggers.serverStarted.description": "Opcjonalny wzorzec uruchomiony przez serwer do wyszukania w danych wyjściowych serwera debugowania. Wartością domyślną jest null.", "c_cpp.debuggers.filterStdout.description": "Wyszukiwanie strumienia stdout dla wzorca uruchomionego przez serwer i rejestrowanie strumienia stdout w danych wyjściowych debugowania. Wartością domyślną jest true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Miejsce uruchamiania obiektu docelowego debugowania. Jeśli wartość nie jest zdefiniowana, używana jest wartość domyślna „internalConsole”.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Wyświetlaj dane wyjściowe w konsoli debugowania programu VS Code. Ta funkcja nie obsługuje odczytywania danych wejściowych konsoli (np. „std::cin” lub „scanf”)", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "Zintegrowany terminal programu VS Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Aplikacje konsolowe będą uruchamiane w zewnętrznym oknie terminalu. To okno będzie ponownie używane w scenariuszach ponownego uruchamiania i nie będzie automatycznie znikać po zamknięciu aplikacji.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Aplikacje konsolowe będą uruchamiane we własnym oknie konsoli, które zostanie zamknięte po zatrzymaniu aplikacji. Aplikacje inne niż konsolowe będą uruchamiane bez terminalu, a dane stdout/stderr będą ignorowane.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Jeśli wartość to true, wyłącza przekierowywanie konsoli debugowanego obiektu, które jest wymagane do obsługi zintegrowanego terminalu.", "c_cpp.debuggers.sourceFileMap.description": "Opcjonalne mapowania plików źródłowych przekazywane do aparatu debugowania. Przykład: „{ \"/oryginalna/ścieżka/źródłowa\":\"/bieżąca/ścieżka/źródłowa\" }”", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "Jeśli wartość jest równa true, zostaną załadowane symbole dla wszystkich bibliotek. W przeciwnym razie nie zostaną załadowane symbole solib. Wartość domyślna to true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Lista nazw plików (dozwolone symbole wieloznaczne) rozdzielonych średnikami „;”. Modyfikuje zachowanie elementu LoadAll. Jeśli element LoadAll ma wartość true, nie ładuj symboli dla bibliotek, które pasują do dowolnych nazw na liście. W przeciwnym razie załaduj tylko symbole dla bibliotek, które pasują. Przykład: „foo.so;bar.so;”", "c_cpp.debuggers.requireExactSource.description": "Opcjonalna flaga, która wymaga bieżącego kodu źródłowego, aby pasowała do pliku PDB.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Nazwa zadania", "c_cpp.taskDefinitions.command.description": "Ścieżka do kompilatora lub skryptu wykonującego kompilację", "c_cpp.taskDefinitions.args.description": "Dodatkowe argumenty do przekazania do kompilatora lub skryptu kompilacji", diff --git a/Extension/i18n/plk/src/LanguageServer/client.i18n.json b/Extension/i18n/plk/src/LanguageServer/client.i18n.json index eef7e9ac06..ef1b10959e 100644 --- a/Extension/i18n/plk/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/plk/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Tak", "no.button": "Nie", "configurations.received": "Odebrano konfiguracje niestandardowe:", - "browse.configuration.received": "Odebrano niestandardową konfigurację przeglądania: {0}" + "browse.configuration.received": "Odebrano niestandardową konfigurację przeglądania: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/plk/src/common.i18n.json b/Extension/i18n/plk/src/common.i18n.json index fa68af3bb9..a9d962a5fe 100644 --- a/Extension/i18n/plk/src/common.i18n.json +++ b/Extension/i18n/plk/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Ostrzeżenie: nie przetestowano debugowania dla tej platformy.", "reload.workspace.for.changes": "Załaduj ponownie obszar roboczy, aby zmiany ustawień zostały zastosowane.", "reload.string": "Załaduj ponownie", - "invalid.download.location.received": "Odebrano nieprawidłową lokalizację pobierania" + "invalid.download.location.received": "Odebrano nieprawidłową lokalizację pobierania", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/plk/src/main.i18n.json b/Extension/i18n/plk/src/main.i18n.json index a9b501678e..cc00d94e93 100644 --- a/Extension/i18n/plk/src/main.i18n.json +++ b/Extension/i18n/plk/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "Architektura {0} nie jest obsługiwana.", "apline.containers.not.supported": "Kontenery Alpine nie są obsługiwane.", "download.button": "Przejdź do strony pobierania", - "native.binaries.mismatch.osx": "Zainstalowano wersję rozszerzenia systemu macOS Intel. Zalecamy zainstalowanie wersji rozszerzania systemu Apple Silicon Mac, ponieważ używasz wersji systemu Apple Silicon Mac.", "native.binaries.not.supported": "Ta wersja rozszerzenia systemu {0} {1} jest niezgodna z Twoim systemem operacyjnym. Pobierz i zainstaluj wersję rozszerzenia „{2}”.", "extension.installation.failed": "Nie można pomyślnie zainstalować rozszerzenia języka C/C++. Aby umożliwić poprawne działanie, należy naprawić lub zainstalować ponownie rozszerzenie dla funkcji języka C/C++.", "remove.extension": "Spróbuj naprawić", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "BŁĄD: wystąpił błąd funkcji fs.rename: „{0}”. Usuń element {1} ręcznie, aby włączyć debugowanie.", "failed.at.stage": "Niepowodzenie na etapie: {0}", "failed.at.stage2": "Jeśli pracujesz w środowisku offline lub często widzisz ten błąd, spróbuj pobrać wersję rozszerzenia ze wszystkimi zależnościami wstępnie uwzględnionymi ze strony {0}, a następnie użyj polecenia „Install from VSIX” (Zainstaluj z VSIX) w programie VS Code, aby ją zainstalować.", - "finished.installing.dependencies": "Zakończono instalowanie zależności" + "finished.installing.dependencies": "Zakończono instalowanie zależności", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/plk/src/packageManager.i18n.json b/Extension/i18n/plk/src/packageManager.i18n.json index 3808617da0..5382bf56b1 100644 --- a/Extension/i18n/plk/src/packageManager.i18n.json +++ b/Extension/i18n/plk/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Błąd pliku ZIP", "create.directory.error": "Błąd tworzenia katalogu", "zip.stream.error": "Błąd odczytu strumienia ZIP", - "read.stream.error": "Błąd w strumieniu odczytu", "unlink.error": "Błąd podczas odłączania pliku {0}", "rename.error": "Błąd podczas zmieniania nazwy pliku {0}", + "read.stream.error": "Błąd w strumieniu odczytu", "write.stream.error": "Błąd w strumieniu zapisu", "file.already.exists": "Ostrzeżenie: plik „{0}” już istnieje i nie został zaktualizowany." } \ No newline at end of file diff --git a/Extension/i18n/ptb/package.i18n.json b/Extension/i18n/ptb/package.i18n.json index 89d779e791..87a1d8dafe 100644 --- a/Extension/i18n/ptb/package.i18n.json +++ b/Extension/i18n/ptb/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Selecione uma Configuração...", "c_cpp.command.configurationProviderSelect.title": "Alterar Provedor de Configuração...", "c_cpp.command.configurationEditJSON.title": "Editar Configurações (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Recuar a nova linha em relação ao parêntese de abertura mais externo.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Recuar a nova linha em relação ao parêntese de abertura mais interno.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Recuar a nova linha em relação ao início da instrução atual.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Quando uma nova linha é digitada, ela é alinhada sob o parêntese de abertura ou com base em `C_Cpp.vcFormat.indent.multiLineRelativeTo`.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "A nova linha é alinhada sob o parêntese de abertura.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "A nova linha é recuada com base em `C_Cpp.vcFormat.indent.multiLineRelativeTo`.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "No código existente, preservar o alinhamento de recuo existente das novas linhas entre parênteses.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Os rótulos são recuados em relação às instruções switch de acordo com o valor especificado na configuração Editor: Tamanho da Tabulação.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "O código dentro do bloco de caso é recuado em relação ao rótulo de acordo com o valor especificado na configuração Editor: Tamanho da Tabulação", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Um bloco de código completo que é inserido em uma linha é mantido em uma linha, independentemente dos valores das configurações Formato: Nova Linha do VC", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Todo código cujas chaves de abertura e de fechamento são inseridas em uma linha são mantidos em uma linha, independentemente dos valores das configurações Formato: Nova Linha do VC", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Os blocos de código são sempre formatados com base nos valores das configurações Formato: Nova Linha do VC", - "c_cpp.configuration.clang_format_path.description": "O caminho completo do executável no clang-format. Se ele não for especificado e o clang-format estiver disponível no caminho do ambiente, ele será usado. Se ele não for encontrado no caminho do ambiente, será usada uma cópia no clang-format empacotada com a extensão.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "No momento o estilo de codificação dá suporte para: Visual Studio, LLVM, Google, Chromium, Mozilla e WebKit. Use \"file\" para carregar o estilo de um arquivo .clang-format no diretório atual ou pai. Use {chave: valor, ...} para definir parâmetros específicos. Por exemplo, o estilo \"Visual Studio\" é semelhante a: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "O nome do estilo predefinido usado como fallback quando o clang-format é invocado com o estilo \"file\", mas o arquivo .clang-format não é encontrado. Os valores possíveis são Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit ou nenhum. Use {chave: valor, ...} para definir parâmetros específicos. Por exemplo, o estilo \"Visual Studio\" é semelhante a: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Se definido, substitui o comportamento de classificação de inclusão determinado pelo parâmetro SortIncludes.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Verificação adicional nos irmãos de um arquivo correspondente. Use $(basename) como variável para o nome do arquivo correspondente.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Se esta configuração for true, a substituição do comando do shell do depurador usará o acento grave obsoleto (`).", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: outros resultados de referências", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Quando presente, isso instrui o depurador a conectar-se a um computador remoto usando outro executável como um pipe que retransmitirá a entrada/saída padrão entre o VS Code e o executável do back-end do depurador habilitado para MI (como gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "insira o caminho totalmente qualificado para o nome do programa do pipe, por exemplo '/usr/bin/ssh'", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "O caminho completo para o depurador no computador de destino, por exemplo, /usr/bin/gdb.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "arquivo .natvis a ser usado durante a depuração deste processo. Esta opção não é compatível com a reformatação automática GDB. Além disso, confira \"showDisplayString\" se estiver usando esta configuração.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "arquivo .natvis a ser usado durante a depuração deste processo.", "c_cpp.debuggers.showDisplayString.description": "Quando um visualizerFile é especificado, showDisplayString habilita a cadeia de caracteres de exibição. Ativar essa opção pode causar um desempenho mais lento durante a depuração.", - "c_cpp.debuggers.environment.description": "Variáveis de ambiente para adicionar ao ambiente para o programa. Por exemplo: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Variáveis de ambiente para adicionar ao ambiente para o programa. Por exemplo: [ { \"name\": \"config\", \"value\": \"Debug\" } ], não [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "Caminho absoluto para um arquivo que contém as definições de variável de ambiente. Este arquivo tem pares chave-valor separados por um sinal de igual por linha. Por exemplo, CHAVE=VALOR", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Lista separada por ponto e vírgula de diretórios a serem usados para pesquisar arquivos .so. Exemplo: \"c:\\dir1;c:\\dir2\".", "c_cpp.debuggers.MIMode.description": "Indica o depurador de console ao qual o MIDebugEngine será conectado. Os valores permitidos são \"gdb\" \"lldb\".", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Argumentos adicionais para o depurador MI (como o gdb).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Endereço de rede do Servidor de Depurador MI ao qual se conectar (exemplo: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "Parâmetro opcional. Se for true, o depurador deverá parar no ponto de entrada do destino. Se processId for passado, não terá efeito.", - "c_cpp.debuggers.debugServerPath.description": "Caminho completo opcional para o servidor de depuração a ser iniciado. O padrão é nulo. Ele é usado em conjunto com \"miDebugServerAddress\" ou com seu servidor com um \"customSetupCommand\" que executa \"-target-select remote \"`.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Args opcionais do servidor de depuração. O padrão é null.", "c_cpp.debuggers.serverStarted.description": "Padrão iniciado pelo servidor opcional para procurar na saída do servidor de depuração. O padrão é null.", "c_cpp.debuggers.filterStdout.description": "Pesquise o fluxo stdout para o padrão iniciado pelo servidor e log stdout para depurar a saída. O padrão é true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Onde iniciar o destino da depuração. Se esta opção não for definida, 'internalConsole' será usado como padrão.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Saída do Console de Depuração do VS Code. Esta opção não dá suporte à leitura de entrada do console (ex:'std::cin' ou 'scanf')", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "Terminal integrado do VS Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Os aplicativos de console serão iniciados em uma janela de terminal externa. A janela será reutilizada nos cenários de reinicialização e não desaparecerá automaticamente quando o aplicativo for encerrado.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Os aplicativos de console serão iniciados em suas próprias janelas de console externas, que serão encerradas quando o aplicativo for interrompido. Os aplicativos que não são de console serão executados sem um terminal e as opções stdout/stderr serão ignoradas.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Se for true, desabilitará o redirecionamento do console do depurador requerido para o suporte do Terminal Integrado.", "c_cpp.debuggers.sourceFileMap.description": "Mapeamentos de arquivo de origem opcionais passados para o mecanismo de depuração. Exemplo: '{ \"/original/source/path\":\"/current/source/path\" }'", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "Se for true, os símbolos de todas as bibliotecas serão carregados, caso contrário, não será carregado nenhum símbolo solib. O valor padrão é true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Lista de nomes de arquivo (curingas permitidos) separados por ponto e vírgula ';'. Modifica o comportamento de LoadAll. Se LoadAll for true, não carregue símbolos para bibliotecas que correspondam a um nome na lista. Caso contrário, carregue símbolos somente para bibliotecas que correspondam. Exemplo: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "Sinalizador opcional para exigir que o código-fonte atual corresponda ao PDB.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "O nome da tarefa", "c_cpp.taskDefinitions.command.description": "O caminho para um compilador ou um script que executa a compilação", "c_cpp.taskDefinitions.args.description": "Argumentos adicionais a serem passados para o compilador ou para o script de compilação", diff --git a/Extension/i18n/ptb/src/LanguageServer/client.i18n.json b/Extension/i18n/ptb/src/LanguageServer/client.i18n.json index 566bcfc9de..cdf9b7a825 100644 --- a/Extension/i18n/ptb/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/ptb/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Sim", "no.button": "Não", "configurations.received": "Configurações personalizadas recebidas:", - "browse.configuration.received": "Configuração de pesquisa personalizada recebida: {0}" + "browse.configuration.received": "Configuração de pesquisa personalizada recebida: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/ptb/src/common.i18n.json b/Extension/i18n/ptb/src/common.i18n.json index b247f9830a..995202cba9 100644 --- a/Extension/i18n/ptb/src/common.i18n.json +++ b/Extension/i18n/ptb/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Aviso: a depuração não foi testada para esta plataforma.", "reload.workspace.for.changes": "Recarregue o workspace para que a alteração das configurações entre em vigor.", "reload.string": "Recarregar", - "invalid.download.location.received": "Recebido um local de download inválido" + "invalid.download.location.received": "Recebido um local de download inválido", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/ptb/src/main.i18n.json b/Extension/i18n/ptb/src/main.i18n.json index 72da33c7b0..81eff4477c 100644 --- a/Extension/i18n/ptb/src/main.i18n.json +++ b/Extension/i18n/ptb/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "Não há suporte para a arquitetura {0}. ", "apline.containers.not.supported": "Não há suporte para os contêineres do Alpine.", "download.button": "Ir para a Página de Download", - "native.binaries.mismatch.osx": "A versão macOS Intel da extensão foi instalada. Como você está em um Apple Silicon Mac, recomendamos instalar a versão Apple Silicon da extensão.", "native.binaries.not.supported": "Esta versão {0} {1} da extensão é incompatível com seu sistema operacional. Baixe e instale a versão \"{2}\" da extensão.", "extension.installation.failed": "A extensão C/C++ não foi instalada com êxito. Será necessário reparar ou reinstalar a extensão dos recursos da linguagem C/C++ para que ela funcione corretamente.", "remove.extension": "Tentar Reparar", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "ERRO: o fs.rename falhou com \"{0}\". Exclua {1} manualmente para habilitar a depuração.", "failed.at.stage": "Falha na fase: {0}", "failed.at.stage2": "Se você trabalha em um ambiente offline ou vê este erro repetidamente, tente baixar uma versão da extensão com todas as dependências pré-incluídas de {0} e, em seguida, use o comando \"Instalar do VSIX\" no VS Code para instalá-la.", - "finished.installing.dependencies": "Concluída a instalação de dependências" + "finished.installing.dependencies": "Concluída a instalação de dependências", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/ptb/src/packageManager.i18n.json b/Extension/i18n/ptb/src/packageManager.i18n.json index 3eb6afc35d..dc04f746e1 100644 --- a/Extension/i18n/ptb/src/packageManager.i18n.json +++ b/Extension/i18n/ptb/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Erro no arquivo zip", "create.directory.error": "Erro ao criar o diretório", "zip.stream.error": "Erro ao ler o fluxo zip", - "read.stream.error": "Erro no fluxo de leitura", "unlink.error": "Erro ao desvincular o arquivo {0}", "rename.error": "Erro ao renomear o arquivo {0}", + "read.stream.error": "Erro no fluxo de leitura", "write.stream.error": "Erro no fluxo de gravação", "file.already.exists": "Aviso: o arquivo '{0}' já existe e não foi atualizado." } \ No newline at end of file diff --git a/Extension/i18n/rus/package.i18n.json b/Extension/i18n/rus/package.i18n.json index 916517dcfa..1bd53172d7 100644 --- a/Extension/i18n/rus/package.i18n.json +++ b/Extension/i18n/rus/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Выберите конфигурацию...", "c_cpp.command.configurationProviderSelect.title": "Изменение поставщика конфигурации...", "c_cpp.command.configurationEditJSON.title": "Изменить конфигурации (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Отступ новой строки задается относительно крайней внешней открывающей круглой скобки.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Отступ новой строки задается относительно крайней внутренней открывающей круглой скобки.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Отступ новой строки задается относительно начала текущего оператора.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "При вводе новой строки она выравнивается по открывающей круглой скобке или на основе значения параметра C_Cpp.vcFormat.indent.multiLineRelativeTo.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "Новая строка выравнивается по открывающей круглой скобке.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Новая строка выравнивается на основе параметра C_Cpp.vcFormat.indent.multiLineRelativeTo.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "Существующие отступы для новых строк внутри круглых скобок в имеющемся коде сохраняются.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Метки располагаются относительно операторов switch с отступом, размер которого определяется параметром редактора \"Размер шага табуляции\".", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Код внутри оператора case располагается относительно метки с отступом, размер которого определяется параметром редактора \"Размер шага табуляции\".", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Полный блок кода, введенный в одной строке, остается в ней вне зависимости от значений параметров \"Формат VC: новая строка\".", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Любой код, в котором открывающая и закрывающая фигурные скобки введены в одной строке, остается в ней вне зависимости от значений параметров \"Формат VC: новая строка\".", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Блоки кода всегда форматируются на основе значений параметров \"Формат VC: новая строка\".", - "c_cpp.configuration.clang_format_path.description": "Полный путь к исполняемому файлу clang-format. Если значение не указано, а clang-format доступен в пути среды, то используется clang-format. Если clang-format не найден в пути среды, будет использоваться копия clang-format, поддерживаемая расширением.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Стиль кода. Сейчас поддерживаются следующие стили: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Используйте \"file\", чтобы загрузить стиль из файла .clang-format в текущем или родительском каталоге. Используйте синтаксис {ключ: значение, ...}, чтобы задать конкретные параметры. Например, стиль \"Visual Studio\" похож на следующий: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Имя предварительно определенного стиля, используемое в качестве резервного варианта при вызове CLANG-FORMAT со стилем \"file\", когда файл CLANG-FORMAT не найден. Возможные значения: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, none. Используйте синтаксис {ключ: значение, ...}, чтобы задать конкретные параметры. Например, стиль \"Visual Studio\" похож на следующий: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Если параметр задан, он переопределяет поведение сортировки включения, определяемое параметром SortIncludes.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Дополнительная проверка элементов того же уровня соответствующего файла. Используйте $(basename) в качестве переменной для соответствующего имени файла.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "Если задано значение true, для подстановки команд оболочки отладчика будет использоваться устаревший обратный апостроф (`).", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: результаты по другим ссылкам", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "При наличии сообщает отладчику о необходимости подключения к удаленному компьютеру с помощью другого исполняемого файла в качестве канала, который будет пересылать стандартный ввод и вывод между VS Code и исполняемым файлом отладчика с поддержкой MI в серверной части (например, gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "Введите полный путь к имени программы канала, например: \"/usr/bin/ssh\"", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Полный путь к отладчику на конечном компьютере, например: /usr/bin/gdb.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is 'true'.", "c_cpp.debuggers.logging.description": "Необязательные флаги для определения типов сообщений, регистрируемых в консоли отладки.", "c_cpp.debuggers.logging.exceptions.description": "Необязательный флаг, определяющий, следует ли регистрировать сообщения об исключениях в консоли отладки. По умолчанию принимает значение true.", "c_cpp.debuggers.logging.moduleLoad.description": "Необязательный флаг, определяющий, следует ли регистрировать события загрузки модулей в консоли отладки. По умолчанию принимает значение true.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: true.", "c_cpp.debuggers.text.description": "Команда отладчика для выполнения.", "c_cpp.debuggers.description.description": "Необязательное описание команды.", "c_cpp.debuggers.ignoreFailures.description": "Если задано значение true, сбои этой команды должны игнорироваться. Значение по умолчанию — false.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "Файл NATVIS, используемый при отладке этого процесса. Этот параметр несовместим с автоматическим форматированием GDB. Если этот параметр используется, см. также описание \"showDisplayString\".", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "Файл NATVIS, используемый при отладке этого процесса.", "c_cpp.debuggers.showDisplayString.description": "Если указано значение visualizerFile, showDisplayString включит отображаемую строку. Включение этого параметра может привести к снижению производительности во время отладки.", - "c_cpp.debuggers.environment.description": "Переменные среды для добавления в среду для программы. Пример: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Переменные среды для добавления в среду для программы. Пример: [ { \"name\": \"config\", \"value\": \"Debug\" } ], not [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "Абсолютный путь к файлу, содержащему определения переменных среды. Этот файл содержит пары \"ключ-значение\", разделенные знаком равенства и разнесенные по строкам. Например, \"ключ=значение\"", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Список каталогов, разделенных точкой с запятой, который следует использовать для поиска файлов SO. Пример: \"c:\\каталог_1;c:\\каталог_2\".", "c_cpp.debuggers.MIMode.description": "Указывает отладчик консоли, к которому подключится MIDebugEngine. Допустимые значения: \"gdb\" \"lldb\".", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Дополнительные аргументы для отладчика MI (например, GDB).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Сетевой адрес сервера отладчика MI, к которому требуется подключиться (пример: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "Необязательный параметр. Если задано значение true, отладчик должен остановиться на точке входа целевого объекта. Если передается идентификатор процесса (processId), он не оказывает никакого влияния.", - "c_cpp.debuggers.debugServerPath.description": "Необязательный полный путь к запускаемому серверу отладки. По умолчанию имеет значение NULL. Применяется с параметром \"miDebugServerAddress\" или с вашим собственным сервером через команду \"customSetupCommand\", использующую \"-target-select remote \".", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Необязательные аргументы сервера отладки. Значение по умолчанию: null.", "c_cpp.debuggers.serverStarted.description": "Дополнительный запускаемый сервером шаблон для поиска в выходных данных сервера отладки. Значение по умолчанию: null.", "c_cpp.debuggers.filterStdout.description": "Поиск запущенного сервером шаблона в потоке stdout и регистрация stdout в выходных данных отладки. Значение по умолчанию: true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Место запуска целевого объекта отладки. Если не указано, по умолчанию используется \"internalConsole\".", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Вывод в консоль отладки VS Code. Не поддерживает чтение входных данных консоли (например: \"std::cin\" или \"scanf\")", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "Интегрированный терминал VS Code", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Консольные приложения будут запускаться во внешнем окне терминала. Окно будет использовано снова при повторном запуске и не будет закрываться автоматически при выходе из приложения.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Консольные приложения будут запускаться в собственном внешнем окне консоли, которое будет закрываться при остановке приложения. Приложения, не являющиеся консольными, будут запускаться без терминала, и stdout/stderr будет игнорироваться.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Если задано значение true, отключается перенаправление консоли отлаживаемого объекта, необходимое для поддержки встроенного терминала.", "c_cpp.debuggers.sourceFileMap.description": "Необязательные сопоставления исходного файла, переданные в подсистему отладки. Пример: \"{ \"/original/source/path\":\"/current/source/path\" }\"", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "При значении true (истина) будут загружаться символы для всех библиотек. В противном случае символы общих библиотек (solib) загружаться не будут. По умолчанию: true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Список имен файлов (допустимы подстановочные знаки), разделенных точкой с запятой (\";\") изменяет работу LoadAll. Если LoadAll имеет значение true (истина), то для библиотек, имя которых соответствует какому-либо имени в списке, символы загружаться не будут. В противном случае символы будут загружаться только для библиотек с именами из списка. Пример: \"foo.so;bar.so\".", "c_cpp.debuggers.requireExactSource.description": "Необязательный флаг, требующий соответствия текущего исходного кода PDB-файлу.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Имя задачи", "c_cpp.taskDefinitions.command.description": "Путь к компилятору или скрипту, выполняющему компиляцию", "c_cpp.taskDefinitions.args.description": "Дополнительные аргументы для передачи компилятору или скрипту компиляции", diff --git a/Extension/i18n/rus/src/LanguageServer/client.i18n.json b/Extension/i18n/rus/src/LanguageServer/client.i18n.json index 8bc6077c7a..486d6bcd39 100644 --- a/Extension/i18n/rus/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/rus/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Да", "no.button": "Нет", "configurations.received": "Получены пользовательские конфигурации:", - "browse.configuration.received": "Получена настраиваемая конфигурация просмотра: {0}" + "browse.configuration.received": "Получена настраиваемая конфигурация просмотра: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/rus/src/common.i18n.json b/Extension/i18n/rus/src/common.i18n.json index d77fa4e6a6..2c74f7881f 100644 --- a/Extension/i18n/rus/src/common.i18n.json +++ b/Extension/i18n/rus/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Предупреждение: отладка не тестировалась на этой платформе.", "reload.workspace.for.changes": "Перезагрузите рабочую область, чтобы изменения параметров вступили в силу.", "reload.string": "Перезагрузить", - "invalid.download.location.received": "Получено недопустимое расположение скачивания" + "invalid.download.location.received": "Получено недопустимое расположение скачивания", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/rus/src/main.i18n.json b/Extension/i18n/rus/src/main.i18n.json index 6f5f53e9e0..d850c94448 100644 --- a/Extension/i18n/rus/src/main.i18n.json +++ b/Extension/i18n/rus/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "Архитектура {0} не поддерживается. ", "apline.containers.not.supported": "Контейнеры Alpine не поддерживаются.", "download.button": "Перейти к странице скачивания", - "native.binaries.mismatch.osx": "Установлена версия расширения для macOS Intel. Так как вы используете компьютер Apple Silicon Mac, рекомендуется установить версию расширения для Apple Silicon.", "native.binaries.not.supported": "Версия расширения для {0} {1} несовместима с вашей ОС. Скачайте и установите версию расширения \"{2}\".", "extension.installation.failed": "Установить расширение C/C++ не удалось. Исправьте или переустановите расширение функций языка C/C++ для корректной работы.", "remove.extension": "Попытка исправления", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "Ошибка: сбой fs.rename с \"{0}\". Удалите {1} вручную, чтобы включить отладку.", "failed.at.stage": "Сбой на этапе: {0}", "failed.at.stage2": "Если вы работаете в автономной среде или постоянно видите эту ошибку, попробуйте скачать версию расширения, в которую уже включены все зависимости, перейдя на следующую страницу: {0}. Затем выберите \"Установить из VSIX\" в VS Code, чтобы установить расширение.", - "finished.installing.dependencies": "Завершена установка зависимостей" + "finished.installing.dependencies": "Завершена установка зависимостей", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/rus/src/packageManager.i18n.json b/Extension/i18n/rus/src/packageManager.i18n.json index 6bb6fed11c..29f40c7c4c 100644 --- a/Extension/i18n/rus/src/packageManager.i18n.json +++ b/Extension/i18n/rus/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Ошибка в ZIP-файле", "create.directory.error": "Ошибка при создании каталога", "zip.stream.error": "Ошибка при чтении потока zip", - "read.stream.error": "Ошибка в потоке чтения", "unlink.error": "Ошибка при удалении связи файла {0}", "rename.error": "Ошибка при переименовании файла {0}", + "read.stream.error": "Ошибка в потоке чтения", "write.stream.error": "Ошибка в потоке записи", "file.already.exists": "Предупреждение: файл \"{0}\" уже существует и не был обновлен." } \ No newline at end of file diff --git a/Extension/i18n/trk/package.i18n.json b/Extension/i18n/trk/package.i18n.json index a985c618c3..9ff5719977 100644 --- a/Extension/i18n/trk/package.i18n.json +++ b/Extension/i18n/trk/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Yapılandırma Seçin...", "c_cpp.command.configurationProviderSelect.title": "Yapılandırma Sağlayıcısını Değiştir...", "c_cpp.command.configurationEditJSON.title": "Yapılandırmaları Düzenle (JSON)", @@ -35,9 +36,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Yeni satırı en dıştaki açma parantezine göre girintileyin.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Yeni satırı en içteki açma parantezine göre girintileyin.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Yeni satırı geçerli deyimin başlangıcına göre girintileyin.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "Yazılan yeni bir satır, satır açma parantezinin altında veya `C_Cpp.vcFormat.indent.multiLineRelativeTo` değerine göre hizalanır.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "Yeni satır, açma parantezinin altında hizalanır.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "Yeni satır `C_Cpp.vcFormat.indent.multiLineRelativeTo` değerine göre girintilenir.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "Mevcut kodda, parantezlerdeki yeni satırların mevcut girinti hizalamasını koruyun.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Etiketler, switch deyimlerine göre Düzenleyici: Sekme Boyutu ayarında belirtilen miktarda girintilenir.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Case bloğundaki kod, kodun etiketine göre Düzenleyici: Sekme Boyutu ayarında belirtilen miktarda girintilenir", @@ -115,7 +116,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "Satıra girilen tam kod bloğu, VC Biçimi: Yeni Satır ayarlarının herhangi birinin değerinden bağımsız olarak tek satırda tutulur", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Açma ve kapama küme ayracının bir satırda girildiği tüm kodlar, VC Biçimi: Yeni Satır ayarlarının herhangi birinin değerinden bağımsız olarak tek satırda tutulur", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Kod blokları her zaman VC Biçimi: Yeni Satır ayarlarının değerlerine göre biçimlendirilir", - "c_cpp.configuration.clang_format_path.description": "clang-format yürütülebilir dosyasının tam yolu. Belirtilmezse ve ortam yolunda clang-format kullanılabiliyorsa, bu kullanılır. Ortam yolunda bulunmazsa, uzantı ile paketlenmiş bir clang-format kopyası kullanılır.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Kodlama stili şu anda şunları destekliyor: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Geçerli veya üst dizindeki .clang-format dosyasından stili yüklemek için \"file\" kullanın. Belirli parametreleri ayarlamak için {anahtar: değer, ...} kullanın. Örneğin, \"Visual Studio\" stili şuna benzer: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Clang-format, \"dosya\" stiliyle çağrıldığında geri dönüş olarak kullanılan önceden tanımlı stilin adı, ancak .clang-format dosyası bulunamadı. Olası değerler: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, none veya belirli parametreleri ayarlamak için {anahtar: değer, ...} kullanın. Örneğin, \"Visual Studio\" stili şuna benzer: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "Ayarlanırsa, SortIncludes parametresi tarafından belirlenen ekleme sıralama davranışını geçersiz kılar.", @@ -175,6 +176,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Eşleşen bir dosyanın eşdüzey öğeleri üzerinde ek denetim. Eşleşen dosya adı için değişken olarak $(basename) kullanın.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "True ise, hata ayıklayıcı kabuk komut değiştirme eski kesme işaretini (`) kullanır.", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: Diğer başvuru sonuçları", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "Mevcut olduğunda, hata ayıklayıcısına, VS Code ile MI özellikli hata ayıklayıcısı arka uç yürütülebilir dosyası (gdb gibi) arasında standart giriş/çıkış geçişi sağlayan bir kanal olarak görev yapacak başka bir yürütülebilir dosya aracılığıyla uzak bilgisayara bağlanmasını söyler.", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "Kanal program adı için tam yolu girin, örneğin '/usr/bin/ssh'", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "Hedef makinedeki hata ayıklayıcısının tam yolu. Örneğin: /usr/bin/gdb.", @@ -183,7 +185,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.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is '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.", @@ -191,8 +193,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. Default: 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.", @@ -208,7 +210,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": "Bu işlemde hata ayıklanırken kullanılacak .natvis dosyası. Bu seçenek, GDB düzgün yazdırma ile uyumlu değil. Lütfen bu ayar kullanılıyorsa ayrıca bkz: \"showDisplayString\".", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": "Bu işlemde hata ayıklanırken kullanılacak .natvis dosyası.", "c_cpp.debuggers.showDisplayString.description": "Bir visualizerFile belirtildiğinde showDisplayString, görünen dizeyi etkinleştirir. Bu seçeneğin etkinleştirilmesi hata ayıklama sırasında daha düşük performansa neden olabilir.", - "c_cpp.debuggers.environment.description": "Program ortamına eklenecek ortam değişkenleri. Örnek: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Program ortamına eklenecek ortam değişkenleri. Örnek: [ { \"name\": \"config\", \"value\": \"Debug\" } ], [ { \"config\": \"Debug\" } ] değil.", "c_cpp.debuggers.envFile.description": "Ortam değişkeni tanımlarını içeren bir dosyanın mutlak yolu. Bu dosyada, satır başına eşittir işaretiyle ayrılmış anahtar değer çiftleri bulunur. Ör. ANAHTAR=DEĞER", "c_cpp.debuggers.additionalSOLibSearchPath.description": ".so dosyalarını aramak için kullanılacak dizinlerin noktalı virgülle ayrılmış listesi. Örnek: \"c:\\dizin1;c:\\dizin2\".", "c_cpp.debuggers.MIMode.description": "MIDebugEngine'in bağlanacağı konsol hata ayıklayıcısını belirtir. İzin verilen değerler: \"gdb\" \"lldb\".", @@ -216,7 +218,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "MI hata ayıklayıcısı için ek bağımsız değişkenler (gdb gibi).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Bağlanılacak MI Hata Ayıklayıcısı Sunucusunun ağ adresi (örnek: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "İsteğe bağlı parametre. Değeri true ise, hata ayıklayıcısının hedefin giriş noktasında durması gerekir. processId geçirilirse hiçbir etkisi olmaz.", - "c_cpp.debuggers.debugServerPath.description": "Başlatılacak sunucuda hata ayıklama için isteğe bağlı tam yol. Varsayılan değeri null. \"miDebugServerAddress\" ya da kendi sunucunuzun \"-target-select remote \" çalıştıran bir \"customSetupCommand\" ile birlikte kullanılır.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "İsteğe bağlı hata ayıklama sunucusu bağımsız değişkenleri. Varsayılan olarak şu değeri alır: null.", "c_cpp.debuggers.serverStarted.description": "Hata ayıklama sunucusu çıktısında aranacak, sunucu tarafından başlatılan isteğe bağlı model. Varsayılan olarak şu değeri alır: null.", "c_cpp.debuggers.filterStdout.description": "Sunucu tarafından başlatılan model için stdout akışını arar ve çıktıda hata ayıklamak için stdout'u günlüğe kaydeder. Varsayılan olarak şu değeri alır: true.", @@ -228,7 +230,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Hata ayıklama hedefinin nerede başlatılacağını belirtir. Tanımlanmamışsa varsayılan değer 'internalConsole' olur.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "VS Code Hata Ayıklama Konsolu'nun çıkışı. Bu, konsol girişini (ör: 'std::cin' veya 'scanf') okumayı desteklemiyor", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "VS Code'un tümleşik terminali", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Konsol uygulamaları, dış terminal penceresinde başlatılır. Pencere, yeniden başlatma senaryolarında tekrar kullanılır ve uygulama çıkış yaptığında otomatik olarak kaybolmaz.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Konsol uygulamaları, uygulama durduğunda sona erecek olan kendi dış konsol penceresinde başlatılır. Konsol dışı uygulamalar terminal olmadan çalıştırılır ve stdout/stderr yoksayılır.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "Değer true ise, Tümleşik Terminal desteği için gerekli olan hata ayıklanan işlem konsol yeniden yönlendirmesini devre dışı bırakır.", "c_cpp.debuggers.sourceFileMap.description": "Hata ayıklama altyapısına, isteğe bağlı kaynak dosya eşlemeleri geçirildi. Örnek: '{ \"/özgün/kaynak/yolu\":\"/geçerli/kaynak/yolu\" }'", @@ -240,6 +242,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "True ise tüm kitaplıklar için semboller yüklenir, aksi halde hiçbir solib sembolü yüklenmez. Varsayılan değer: true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "Noktalı virgülle ';' ayrılmış dosya adları listesi (joker karakterlere izin verilir). LoadAll davranışını değiştirir. LoadAll değeri true ise, listedeki herhangi bir adla eşleşen kitaplıklar için sembolleri yüklemeyin. Aksi takdirde yalnızca eşleşen kitaplıklar için sembolleri yükleyin. Örnek: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "Geçerli kaynak kodunun pdb ile eşleşmesini gerektiren isteğe bağlı bayrak.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "Görevin adı", "c_cpp.taskDefinitions.command.description": "Derlemeyi gerçekleştiren derleyici ya da betiğin yolu", "c_cpp.taskDefinitions.args.description": "Derleyici veya derleme betiğine geçirilecek ek bağımsız değişkenler", diff --git a/Extension/i18n/trk/src/LanguageServer/client.i18n.json b/Extension/i18n/trk/src/LanguageServer/client.i18n.json index 6dcc315fe1..38ef606b4d 100644 --- a/Extension/i18n/trk/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/trk/src/LanguageServer/client.i18n.json @@ -33,5 +33,8 @@ "yes.button": "Evet", "no.button": "Hayır", "configurations.received": "Alınan özel yapılandırmalar:", - "browse.configuration.received": "Özel gözatma yapılandırması alındı: {0}" + "browse.configuration.received": "Özel gözatma yapılandırması alındı: {0}", + "no.compilers.found": "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", + "compilers.found": "We found the following C++ compiler(s) on your system:", + "compilers.found.message": "You can specify which compiler to use in your project's IntelliSense Configuration." } \ No newline at end of file diff --git a/Extension/i18n/trk/src/common.i18n.json b/Extension/i18n/trk/src/common.i18n.json index 55b0b6a621..f04bb73235 100644 --- a/Extension/i18n/trk/src/common.i18n.json +++ b/Extension/i18n/trk/src/common.i18n.json @@ -12,5 +12,6 @@ "warning.debugging.not.tested": "Uyarı: Bu platform için hata ayıklama test edilmedi.", "reload.workspace.for.changes": "Ayar değişikliklerinin etkili olması için çalışma alanını yeniden yükleyin.", "reload.string": "Yeniden yükle", - "invalid.download.location.received": "Geçersiz indirme konumu alındı" + "invalid.download.location.received": "Geçersiz indirme konumu alındı", + "c.cpp.symbolscope.separator": "{0}, {1}" } \ No newline at end of file diff --git a/Extension/i18n/trk/src/main.i18n.json b/Extension/i18n/trk/src/main.i18n.json index 8933d18172..4761d189d5 100644 --- a/Extension/i18n/trk/src/main.i18n.json +++ b/Extension/i18n/trk/src/main.i18n.json @@ -7,7 +7,6 @@ "architecture.not.supported": "{0} mimarisi desteklemiyor.", "apline.containers.not.supported": "Alpine kapsayıcıları desteklenmiyor.", "download.button": "İndirmeler Sayfasına Git", - "native.binaries.mismatch.osx": "Uzantının macOS Intel sürümü yüklendi. Bir Apple Silicon Mac bilgisayar kullandığınızdan, uzantının Apple Silicon sürümünü yüklemenizi öneririz.", "native.binaries.not.supported": "Uzantının bu {0} {1} sürümü, işletim sisteminizle uyumlu değil. Lütfen uzantının \"{2}\" sürümünü indirip yükleyin.", "extension.installation.failed": "C/C++ uzantısı başarıyla yüklenemedi. C/C++ dil özelliklerinin düzgün çalışması için uzantıyı onarmanız veya yeniden yüklemeniz gerekir.", "remove.extension": "Onarmayı Dene", @@ -17,5 +16,6 @@ "rename.failed.delete.manually": "HATA: fs.rename, \"{0}\" ile başarısız oldu. Hata ayıklamayı etkinleştirmek için {1} dosyasını kendiniz silin.", "failed.at.stage": "Şu aşamada başarısız oldu: {0}", "failed.at.stage2": "Çevrimdışı bir ortamda çalışıyorsanız veya bu hatayı sürekli olarak görüyorsanız uzantının önceden eklenmiş tüm bağımlılıklara sahip bir sürümünü {0} adresinden indirmeyi deneyin ve sonra VS Code'da \"VSIX'ten yükle\" komutunu kullanarak uzantıyı yükleyin.", - "finished.installing.dependencies": "Bağımlılıkların yüklenmesi tamamlandı" + "finished.installing.dependencies": "Bağımlılıkların yüklenmesi tamamlandı", + "failed.installing.dependencies": "Failed installing dependencies" } \ No newline at end of file diff --git a/Extension/i18n/trk/src/packageManager.i18n.json b/Extension/i18n/trk/src/packageManager.i18n.json index 5e61061548..0a15fe3f47 100644 --- a/Extension/i18n/trk/src/packageManager.i18n.json +++ b/Extension/i18n/trk/src/packageManager.i18n.json @@ -26,9 +26,9 @@ "zip.file.error": "Zip dosyası hatası", "create.directory.error": "Dizin oluşturulurken hata oluştu", "zip.stream.error": "Zip akışı okuma hatası", - "read.stream.error": "Akış okunurken hata", "unlink.error": "{0} dosyasının bağlantısı kaldırılırken hata oluştu", "rename.error": "{0} dosyası yeniden adlandırılırken hata oluştu", + "read.stream.error": "Akış okunurken hata", "write.stream.error": "Akışa yazılırken hata", "file.already.exists": "Uyarı: '{0}' dosyası zaten var ve güncelleştirilmedi." } \ No newline at end of file diff --git a/Extension/package.json b/Extension/package.json index 4432f12816..f2c953b54c 100644 --- a/Extension/package.json +++ b/Extension/package.json @@ -2,7 +2,7 @@ "name": "cpptools", "displayName": "C/C++", "description": "C/C++ IntelliSense, debugging, and code browsing.", - "version": "1.3.1-main", + "version": "1.4.0-main", "publisher": "ms-vscode", "icon": "LanguageCCPP_color_128x.png", "readme": "README.md", @@ -37,11 +37,141 @@ "Linters", "Snippets" ], + "capabilities": { + "untrustedWorkspaces": { + "supported": false, + "description": "%c_cpp.capabilities.untrustedWorkspaces.description%" + }, + "virtualWorkspaces": false + }, "activationEvents": [ "*" ], "main": "./dist/main", "contributes": { + "walkthroughs": [ + { + "id": "cppWelcome", + "title": "Get Started with C++ Development", + "description": "Dive into VS Code's rich C++ development experience.", + "primary": true, + "when": "false", + "steps": [ + { + "id": "verify.compiler.mac", + "title": "Install a C++ compiler", + "description": "The C++ extension uses the C++ compiler on your system to configure IntelliSense for your project. \n[Check for C++ compilers](command:C_Cpp.CheckForCompiler)", + "when": "workspacePlatform == mac", + "media": { + "altText": "A markdown file with instructions for installing Clang on macOS.", + "path": "walkthrough/installcompiler/install-clang-macos.md" + } + }, + { + "id": "verify.compiler.linux", + "title": "Install a C++ compiler", + "description": "The C++ extension uses the C++ compiler on your system to configure IntelliSense for your project. \n[Check for C++ compilers](command:C_Cpp.CheckForCompiler)", + "when": "workspacePlatform == linux", + "media": { + "altText": "A markdown file with instructions for installing GCC on Linux.", + "path": "walkthrough/installcompiler/install-gcc-linux.md" + } + }, + { + "id": "verify.compiler.windows", + "title": "Install a C++ compiler", + "description": "The C++ extension uses the C++ compiler on your system to configure IntelliSense for your project. \n[Check for C++ compilers](command:C_Cpp.CheckForCompiler)", + "when": "workspacePlatform == windows", + "media": { + "altText": "A markdown file with instructions for installing MSVC on Windows.", + "path": "walkthrough/installcompiler/install-compiler-windows.md" + } + }, + { + "id": "open.project", + "title": "Open your project folder", + "description": "Open an existing folder that contains your C++ project, or create a new folder. \n[Pick a folder](command:workbench.action.files.openFolder)", + "when": "workspaceFolderCount == 0", + "media": { + "altText": "A screenshot that shows a C++ project opened in the file Explorer.", + "path": { + "light": "walkthrough/images/cpp-folder-explorer-light.png", + "dark": "walkthrough/images/cpp-folder-explorer-dark.png", + "hc": "walkthrough/images/cpp-folder-explorer-hc.png" + } + } + }, + { + "id": "setup.intellisense", + "title": "Configure C++ IntelliSense", + "description": "Verify important IntelliSense settings like Compiler Path, Compiler Args, IntelliSense Mode, and Include Path. \n[Open IntelliSense Configuration](command:C_Cpp.ConfigurationEditUI?-2)", + "media": { + "altText": "A screenshot that shows the IntelliSense Configurations UI with important settings highlighted.", + "path": { + "light": "walkthrough/images/intellisense-config-light.png", + "dark": "walkthrough/images/intellisense-config-dark.png", + "hc": "walkthrough/images/intellisense-config-hc.png" + } + } + }, + { + "id": "run.project.mac", + "title": "Run and debug your C++ file", + "description": "Create a default build task and debug configuration for your project. \n[Learn more](https://code.visualstudio.com/docs/cpp/config-clang-mac#_debug-helloworldcpp)", + "when": "workspacePlatform == mac", + "media": { + "altText": "A markdown file with instructions for starting a debugging session on macOS.", + "path": "walkthrough/debugconfig/run-and-debug-project-mac.md" + } + }, + { + "id": "run.project.linux", + "title": "Run and debug your C++ file", + "description": "Create a default build task and debug configuration for your project. \n[Learn more](https://code.visualstudio.com/docs/cpp/config-linux#_debug-helloworldcpp)", + "when": "workspacePlatform == linux", + "media": { + "altText": "A markdown file with instructions for starting a debugging session on Linux.", + "path": "walkthrough/debugconfig/run-and-debug-project-linux.md" + } + }, + { + "id": "run.project.windows", + "title": "Run and debug your C++ file", + "description": "Create a default build task and debug configuration for your project. \n[Learn more](https://code.visualstudio.com/docs/cpp/config-msvc#_debug-helloworldcpp)", + "when": "workspacePlatform == windows", + "media": { + "altText": "A markdown file with instructions for starting a debugging session on Windows.", + "path": "walkthrough/debugconfig/run-and-debug-project-windows.md" + } + }, + { + "id": "install.cmake.tools", + "title": "Install CMake Tools", + "description": "Do you build your project with CMake? Install the CMake Tools extension to seamlessly build and debug your CMake project. \n[Install CMake Tools](command:workbench.extensions.installExtension?%22ms-vscode.cmake-tools%22)", + "completionEvents": [ + "extensionInstalled:ms-vscode.cmake-tools" + ], + "media": { + "altText": "A screenshot of the CMake Tools extension page in the Marketplace.", + "path": { + "light": "walkthrough/images/cmake-tools-light.png", + "dark": "walkthrough/images/cmake-tools-dark.png", + "hc": "walkthrough/images/cmake-tools-hc.png" + } + } + }, + { + "id": "watch.tutorials", + "title": "Lean back and get started", + "description": "Watch this series of short and practical videos about setting up C++ IntelliSense and building and debugging C++ projects. \n[Watch Tutorials](https://code.visualstudio.com/docs/cpp/introvideos-cpp)", + "media": { + "altText": "A screenshot with a preview of the video tutorial and a play button.", + "path": "walkthrough/images/getting-started-video.png" + } + } + ] + } + ], "taskDefinitions": [ { "type": "cppbuild", @@ -91,7 +221,7 @@ "viewsWelcome": [ { "view": "debug", - "contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", + "contents": "%c_cpp.contributes.viewsWelcome.contents%", "when": "debugStartLanguage == cpp || debugStartLanguage == c || debugStartLanguage == cuda-cpp" } ], @@ -1680,6 +1810,28 @@ "default": "" } } + }, + "stopAtConnect": { + "type": "boolean", + "description": "%c_cpp.debuggers.stopAtConnect.description%", + "default": false + }, + "hardwareBreakpoints": { + "description": "%c_cpp.debuggers.hardwareBreakpoints.description%", + "default": {}, + "type": "object", + "properties": { + "require": { + "type": "boolean", + "description": "%c_cpp.debuggers.hardwareBreakpoints.require.description%", + "default": false + }, + "limit": { + "type": "integer", + "description": "%c_cpp.debuggers.hardwareBreakpoints.limit.description%", + "default": 0 + } + } } } }, @@ -2434,14 +2586,14 @@ "@types/vscode": "1.53.0", "@types/which": "^1.3.2", "@types/yauzl": "^2.9.1", - "@typescript-eslint/eslint-plugin": "^2.19.2", - "@typescript-eslint/eslint-plugin-tslint": "^2.19.2", - "@typescript-eslint/parser": "^2.19.2", + "@typescript-eslint/eslint-plugin": "^4.22.1", + "@typescript-eslint/eslint-plugin-tslint": "^4.22.1", + "@typescript-eslint/parser": "^4.22.1", "async-child-process": "^1.1.1", "await-notify": "^1.0.1", - "eslint": "^6.8.0", - "eslint-plugin-import": "^2.20.1", - "eslint-plugin-jsdoc": "^21.0.0", + "eslint": "^7.25.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsdoc": "^33.1.0", "event-stream": "^4.0.1", "fs-extra": "^8.1.0", "glob": "^7.1.6", @@ -2455,6 +2607,7 @@ "http-proxy-agent": "^2.1.0", "minimist": "^1.2.5", "mocha": "^8.3.2", + "parse-git-config": "^3.0.0", "parse5": "^5.1.0", "parse5-traverse": "^1.0.3", "ts-loader": "^8.1.0", @@ -2487,7 +2640,9 @@ "resolutions": { "**/mkdirp/minimist": "^0.2.1", "yargs-parser": "^15.0.1", - "y18n": "^5.0.5" + "y18n": "^5.0.5", + "hosted-git-info": "^3.0.8", + "browserslist": "^4.16.6" }, "runtimeDependencies": [ { @@ -2598,7 +2753,7 @@ }, { "description": "ClangFormat (Linux / x86_64)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2152861", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162325", "platforms": [ "linux" ], @@ -2608,11 +2763,11 @@ "binaries": [ "./LLVM/bin/clang-format" ], - "integrity": "B29779E4FE3D03094655FD24CC17B55B41518EDDCCB1E3DF3F4665F9685152E0" + "integrity": "3F10BAD92274A07DB5DE0FD922C0CEDA034DECDB9E73DC477DD43CF30B500A7B" }, { "description": "ClangFormat (Linux / armhf)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2152860", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162327", "platforms": [ "linux" ], @@ -2622,11 +2777,11 @@ "binaries": [ "./LLVM/bin/clang-format" ], - "integrity": "F1CD21F581715A2C2A3B10C8D33FF81E5CBCD58856AA73CA56A88B5F085EA0D7" + "integrity": "1098291D78FB3E9411C445218BE14D1A96E7242E0B70549DA499C6551D8CA538" }, { "description": "ClangFormat (Linux / aarch64)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2152922", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162412", "platforms": [ "linux" ], @@ -2636,11 +2791,11 @@ "binaries": [ "./LLVM/bin/clang-format" ], - "integrity": "97B2A5A274F53FBB37485A383AD379CD556E85413BF843F0F0FD10536A0D705D" + "integrity": "CD5578A21C8D515D15C0611621E44C03DE4E667EFB4EE1A0DE18B08FD9B96794" }, { "description": "ClangFormat (OS X)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2152859", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162416", "platforms": [ "darwin" ], @@ -2650,11 +2805,11 @@ "binaries": [ "./LLVM/bin/clang-format.darwin" ], - "integrity": "7AA436BA25E3404DC658A137188BEC65FF2532D1FEB314ABBBC5EBC9AAF5CCF7" + "integrity": "AEB24D394118EAD87087DCC651F2EE329FC335ECE88ED6C8C2A9E93ED60DFECD" }, { "description": "ClangFormat (OS X arm64)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2160917", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162413", "platforms": [ "darwin" ], @@ -2664,11 +2819,11 @@ "binaries": [ "./LLVM/bin/clang-format.darwin" ], - "integrity": "BF5357714856AC08A69FAD4231C9EFBE47E97497D8E227E1506FCAA1C89D11E0" + "integrity": "AE5507F54562B9DA99E3F8318E25C93BD38AD2FBF4238ADF1C152ECFB0C10FA9" }, { "description": "ClangFormat (Windows x86)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2152921", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162326", "platforms": [ "win32" ], @@ -2678,11 +2833,11 @@ "binaries": [ "./LLVM/bin/clang-format.exe" ], - "integrity": "993A65F61F4BF6CA6FEF6F9C1B6EB4341CE63F30A72272CABA65392695764DA7" + "integrity": "928AF7C36F0E148537D8DF4D7AEEAD8A18DF9E4CA5C8BF23E49776EFBE078453" }, { "description": "ClangFormat (Windows x64)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2152923", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162415", "platforms": [ "win32" ], @@ -2692,11 +2847,11 @@ "binaries": [ "./LLVM/bin/clang-format.exe" ], - "integrity": "5E271FD44792B3675136A34466F67A876174B7818533CF37486372E43E014E62" + "integrity": "7977B82D6BD88C1AEB5071146EDCB45976D1EA66E312EEF9156957CAD0702F35" }, { "description": "ClangFormat (Windows arm64)", - "url": "https://go.microsoft.com/fwlink/?LinkID=2152862", + "url": "https://go.microsoft.com/fwlink/?LinkID=2162414", "platforms": [ "win32" ], @@ -2706,7 +2861,7 @@ "binaries": [ "./LLVM/bin/clang-format.exe" ], - "integrity": "9944827F70A8C53127B1A7860401923DED2DB7FBAD75E7A8106636891C11F832" + "integrity": "6756365C82B5BD90C6A40C13CF8E3599E4A1DB50628111FFDB3A76FF85256BA4" }, { "description": "Mono Framework Assemblies", @@ -2802,7 +2957,7 @@ }, { "description": "Visual Studio Windows Debugger", - "url": "https://go.microsoft.com/fwlink/?linkid=2153010", + "url": "https://go.microsoft.com/fwlink/?linkid=2162486", "platforms": [ "win32" ], @@ -2813,7 +2968,7 @@ "binaries": [ "./debugAdapters/vsdbg/bin/vsdbg.exe" ], - "integrity": "52C4234976D527A7BF02EB2E8844F3C605DC4BD1D3847F83C8675CD23967BAB3" + "integrity": "E5046509D510086B99F171595114220AD8E9F820E7238B6A5199CD78B9AD2078" } ] } \ No newline at end of file diff --git a/Extension/package.nls.json b/Extension/package.nls.json index e65c5588bc..89c82374d9 100644 --- a/Extension/package.nls.json +++ b/Extension/package.nls.json @@ -1,4 +1,5 @@ { + "c_cpp.capabilities.untrustedWorkspaces.description": "Multiple settings can cause processes local to the workspace to be executed, e.g. C_Cpp.clang_format_path, C_Cpp.addNodeAddonIncludePaths, C_Cpp.default.compilerPath, C_Cpp.default.configurationProvider, and C_Cpp.default.compileCommands, and the equivalent properties in c_cpp_properties.json.", "c_cpp.command.configurationSelect.title": "Select a Configuration...", "c_cpp.command.configurationProviderSelect.title": "Change Configuration Provider...", "c_cpp.command.configurationEditJSON.title": "Edit Configurations (JSON)", @@ -30,9 +31,9 @@ "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.outermostParenthesis.description": "Indent new line relative to the outermost open parenthesis.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.innermostParenthesis.description": "Indent new line relative to the innermost open parenthesis.", "c_cpp.configuration.vcFormat.indent.multiLineRelativeTo.statementBegin.description": "Indent new line relative to the beginning of the current statement.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on `C_Cpp.vcFormat.indent.multiLineRelativeTo`.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.description": "When a new line is typed, it is aligned under the opening parenthesis or based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.withinParentheses.alignToParenthesis.description": "New line is aligned under the opening parenthesis.", - "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on `C_Cpp.vcFormat.indent.multiLineRelativeTo`.", + "c_cpp.configuration.vcFormat.indent.withinParentheses.indent.description": "New line is indented based on \"C_Cpp.vcFormat.indent.multiLineRelativeTo\".", "c_cpp.configuration.vcFormat.indent.preserveWithinParentheses.description": "In existing code, preserve the existing indent alignment of new lines within parentheses.", "c_cpp.configuration.vcFormat.indent.caseLabels.description": "Labels are indented relative to switch statements by the amount specified in the Editor: Tab Size setting.", "c_cpp.configuration.vcFormat.indent.caseContents.description": "Code inside case block is indented relative to its label by the amount specified in the Editor: Tab Size setting", @@ -110,7 +111,7 @@ "c_cpp.configuration.vcFormat.wrap.preserveBlocks.oneLiners.description": "A complete code block that is entered on one line is kept on one line, regardless of the values of any of the VC Format: New Line settings", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.allOneLineScopes.description": "Any code where the opening and closing brace is entered on one line is kept on one line, regardless of the values of any of the VC Format: New Line settings", "c_cpp.configuration.vcFormat.wrap.preserveBlocks.never.description": "Code blocks are always formatted based on the values of the VC Format: New Line settings", - "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", + "c_cpp.configuration.clang_format_path.description": "The full path of the clang-format executable. If not specified, and clang-format is available in the environment path, that is used. If not found in the environment path, a copy of clang-format bundled with the extension will be used.", "c_cpp.configuration.clang_format_style.description": "Coding style, currently supports: Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit. Use \"file\" to load the style from a .clang-format file in the current or parent directory. Use {key: value, ...} to set specific parameters. For example, the \"Visual Studio\" style is similar to: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_fallbackStyle.description": "Name of the predefined style used as a fallback in case clang-format is invoked with style \"file\" but the .clang-format file is not found. Possible values are Visual Studio, LLVM, Google, Chromium, Mozilla, WebKit, none, or use {key: value, ...} to set specific parameters. For example, the \"Visual Studio\" style is similar to: { BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Allman, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All, FixNamespaceComments: false }", "c_cpp.configuration.clang_format_sortIncludes.description": "If set, overrides the include sorting behavior determined by the SortIncludes parameter.", @@ -170,6 +171,7 @@ "c_cpp.configuration.filesExcludeWhen.description": "Additional check on the siblings of a matching file. Use $(basename) as variable for the matching file name.", "c_cpp.configuration.debugger.useBacktickCommandSubstitution.description": "If true, debugger shell command substitution will use obsolete backtick (`).", "c_cpp.contributes.views.cppReferencesView.title": "C/C++: Other references results", + "c_cpp.contributes.viewsWelcome.contents": "To learn more about launch.json, see [Configuring C/C++ debugging](https://code.visualstudio.com/docs/cpp/launch-json-reference).", "c_cpp.debuggers.pipeTransport.description": "When present, this tells the debugger to connect to a remote computer using another executable as a pipe that will relay standard input/output between VS Code and the MI-enabled debugger backend executable (such as gdb).", "c_cpp.debuggers.pipeTransport.default.pipeProgram": "enter the fully qualified path for the pipe program name, for example '/usr/bin/ssh'", "c_cpp.debuggers.pipeTransport.default.debuggerPath": "The full path to the debugger on the target machine, for example /usr/bin/gdb.", @@ -178,7 +180,7 @@ "c_cpp.debuggers.pipeTransport.pipeProgram.description": "The fully qualified pipe command to execute.", "c_cpp.debuggers.pipeTransport.pipeArgs.description": "Command line arguments passed to the pipe program to configure the connection.", "c_cpp.debuggers.pipeTransport.pipeEnv.description": "Environment variables passed to the pipe program.", - "c_cpp.debuggers.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. \nDefault is 'true'.", + "c_cpp.debuggers.pipeTransport.quoteArgs.description": "If the pipeProgram's individual arguments contain characters (such as spaces or tabs), should it be quoted? If 'false', the debugger command will no longer be automatically quoted. Default is 'true'.", "c_cpp.debuggers.logging.description": "Optional flags to determine what types of messages should be logged to the Debug Console.", "c_cpp.debuggers.logging.exceptions.description": "Optional flag to determine whether exception messages should be logged to the Debug Console. Defaults to true.", "c_cpp.debuggers.logging.moduleLoad.description": "Optional flag to determine whether module load events should be logged to the Debug Console. Defaults to true.", @@ -186,8 +188,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.cppvsdbg.logging.threadExit.description": "Optional flag to determine whether thread exit messages should be logged to the Debug Console. Default: false.", + "c_cpp.debuggers.cppvsdbg.logging.processExit.description": "Optional flag to determine whether target process exit messages should be logged to the Debug Console. 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.", @@ -203,7 +205,7 @@ "c_cpp.debuggers.cppdbg.visualizerFile.description": ".natvis file to be used when debugging this process. This option is not compatible with GDB pretty printing. Please also see \"showDisplayString\" if using this setting.", "c_cpp.debuggers.cppvsdbg.visualizerFile.description": ".natvis file to be used when debugging this process.", "c_cpp.debuggers.showDisplayString.description": "When a visualizerFile is specified, showDisplayString will enable the display string. Turning this option on can cause slower performance during debugging.", - "c_cpp.debuggers.environment.description": "Environment variables to add to the environment for the program. Example: [ { \"name\": \"squid\", \"value\": \"clam\" } ].", + "c_cpp.debuggers.environment.description": "Environment variables to add to the environment for the program. Example: [ { \"name\": \"config\", \"value\": \"Debug\" } ], not [ { \"config\": \"Debug\" } ].", "c_cpp.debuggers.envFile.description": "Absolute path to a file containing environment variable definitions. This file has key value pairs separated by an equals sign per line. E.g. KEY=VALUE", "c_cpp.debuggers.additionalSOLibSearchPath.description": "Semicolon separated list of directories to use to search for .so files. Example: \"c:\\dir1;c:\\dir2\".", "c_cpp.debuggers.MIMode.description": "Indicates the console debugger that the MIDebugEngine will connect to. Allowed values are \"gdb\" \"lldb\".", @@ -211,7 +213,7 @@ "c_cpp.debuggers.miDebuggerArgs.description": "Additional arguments for the MI debugger (such as gdb).", "c_cpp.debuggers.miDebuggerServerAddress.description": "Network address of the MI Debugger Server to connect to (example: localhost:1234).", "c_cpp.debuggers.stopAtEntry.description": "Optional parameter. If true, the debugger should stop at the entrypoint of the target. If processId is passed, has no effect.", - "c_cpp.debuggers.debugServerPath.description": "Optional full path to debug server to launch. Defaults to null. It is used in conjuction of either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \"`.", + "c_cpp.debuggers.debugServerPath.description": "Optional full path to the debug server to launch. Defaults to null. It is used in conjunction with either \"miDebugServerAddress\" or your own server with a \"customSetupCommand\" that runs \"-target-select remote \".", "c_cpp.debuggers.debugServerArgs.description": "Optional debug server args. Defaults to null.", "c_cpp.debuggers.serverStarted.description": "Optional server-started pattern to look for in the debug server output. Defaults to null.", "c_cpp.debuggers.filterStdout.description": "Search stdout stream for server-started pattern and log stdout to debug output. Defaults to true.", @@ -223,7 +225,7 @@ "c_cpp.debuggers.cppvsdbg.console.description": "Where to launch the debug target. Defaults to 'internalConsole' if not defined.", "c_cpp.debuggers.cppvsdbg.console.internalConsole.description": "Output to the VS Code Debug Console. This doesn't support reading console input (ex:'std::cin' or 'scanf')", "c_cpp.debuggers.cppvsdbg.console.integratedTerminal.description": "VS Code's integrated terminal", - "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios, and will not automatically disappear when the application exits.", + "c_cpp.debuggers.cppvsdbg.console.externalTerminal.description": "Console applications will be launched in an external terminal window. The window will be reused in relaunch scenarios and will not automatically disappear when the application exits.", "c_cpp.debuggers.cppvsdbg.console.newExternalWindow.description": "Console applications will be launched in their own external console window which will end when the application stops. Non-console applications will run without a terminal, and stdout/stderr will be ignored.", "c_cpp.debuggers.avoidWindowsConsoleRedirection.description": "If true, disables debuggee console redirection that is required for Integrated Terminal support.", "c_cpp.debuggers.sourceFileMap.description": "Optional source file mappings passed to the debug engine. Example: '{ \"/original/source/path\":\"/current/source/path\" }'", @@ -235,6 +237,10 @@ "c_cpp.debuggers.symbolLoadInfo.loadAll.description": "If true, symbols for all libs will be loaded, otherwise no solib symbols will be loaded. Default value is true.", "c_cpp.debuggers.symbolLoadInfo.exceptionList.description": "List of filenames (wildcards allowed) separated by semicolons ';'. Modifies behavior of LoadAll. If LoadAll is true then don't load symbols for libs that match any name in the list. Otherwise only load symbols for libs that match. Example: \"foo.so;bar.so\"", "c_cpp.debuggers.requireExactSource.description": "Optional flag to require current source code to match the pdb.", + "c_cpp.debuggers.stopAtConnect.description": "If true, the debugger should stop after connecting to the target. If false, the debugger will continue after connecting. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.description": "Explicit control of hardware breakpoint behavior for remote targets.", + "c_cpp.debuggers.hardwareBreakpoints.require.description": "If true, always use hardware breakpoints. Defaults to false.", + "c_cpp.debuggers.hardwareBreakpoints.limit.description": "Optional limit on the number of available hardware breakpoints to use. Only enforced when \"require\" is true and \"limit\" is greater than 0. Defaults to 0.", "c_cpp.taskDefinitions.name.description": "The name of the task", "c_cpp.taskDefinitions.command.description": "The path to either a compiler or script that performs compilation", "c_cpp.taskDefinitions.args.description": "Additional arguments to pass to the compiler or compilation script", diff --git a/Extension/src/Debugger/attachQuickPick.ts b/Extension/src/Debugger/attachQuickPick.ts index ba966b7ace..677e87bb9a 100644 --- a/Extension/src/Debugger/attachQuickPick.ts +++ b/Extension/src/Debugger/attachQuickPick.ts @@ -30,44 +30,42 @@ export interface AttachItem extends vscode.QuickPickItem { id?: string; } -export function showQuickPick(getAttachItems: () => Promise): Promise { - return getAttachItems().then(processEntries => - new Promise((resolve, reject) => { - const quickPick: vscode.QuickPick = vscode.window.createQuickPick(); - quickPick.title = localize("attach.to.process", "Attach to process"); - quickPick.canSelectMany = false; - quickPick.matchOnDescription = true; - quickPick.matchOnDetail = true; - quickPick.placeholder = localize("select.process.attach", "Select the process to attach to"); - quickPick.items = processEntries; - quickPick.buttons = [new RefreshButton()]; - - const disposables: vscode.Disposable[] = []; - - quickPick.onDidTriggerButton(button => { - getAttachItems().then(processEntries => quickPick.items = processEntries); - }, undefined, disposables); - - quickPick.onDidAccept(() => { - if (quickPick.selectedItems.length !== 1) { - reject(new Error(localize("process.not.selected", "Process not selected."))); - } +// We should not await on this function. +export async function showQuickPick(getAttachItems: () => Promise): Promise { + const processEntries: AttachItem[] = await getAttachItems(); + return new Promise((resolve, reject) => { + const quickPick: vscode.QuickPick = vscode.window.createQuickPick(); + quickPick.title = localize("attach.to.process", "Attach to process"); + quickPick.canSelectMany = false; + quickPick.matchOnDescription = true; + quickPick.matchOnDetail = true; + quickPick.placeholder = localize("select.process.attach", "Select the process to attach to"); + quickPick.buttons = [new RefreshButton()]; + quickPick.items = processEntries; + const disposables: vscode.Disposable[] = []; + + quickPick.onDidTriggerButton(async () => { quickPick.items = await getAttachItems(); }, undefined, disposables); + + quickPick.onDidAccept(() => { + if (quickPick.selectedItems.length !== 1) { + reject(new Error(localize("process.not.selected", "Process not selected."))); + } - const selectedId: string | undefined = quickPick.selectedItems[0].id; + const selectedId: string | undefined = quickPick.selectedItems[0].id; - disposables.forEach(item => item.dispose()); - quickPick.dispose(); + disposables.forEach(item => item.dispose()); + quickPick.dispose(); - resolve(selectedId); - }, undefined, disposables); + resolve(selectedId); + }, undefined, disposables); - quickPick.onDidHide(() => { - disposables.forEach(item => item.dispose()); - quickPick.dispose(); + quickPick.onDidHide(() => { + disposables.forEach(item => item.dispose()); + quickPick.dispose(); - reject(new Error(localize("process.not.selected", "Process not selected."))); - }, undefined, disposables); + reject(new Error(localize("process.not.selected", "Process not selected."))); + }, undefined, disposables); - quickPick.show(); - })); + quickPick.show(); + }); } diff --git a/Extension/src/Debugger/attachToProcess.ts b/Extension/src/Debugger/attachToProcess.ts index aaca23a63c..0d827c049e 100644 --- a/Extension/src/Debugger/attachToProcess.ts +++ b/Extension/src/Debugger/attachToProcess.ts @@ -8,7 +8,6 @@ import { AttachItem, showQuickPick } from './attachQuickPick'; import { CppSettings } from '../LanguageServer/settings'; import * as debugUtils from './utils'; -import * as fs from 'fs'; import * as os from 'os'; import * as path from 'path'; import * as util from '../common'; @@ -25,14 +24,13 @@ export interface AttachItemsProvider { export class AttachPicker { constructor(private attachItemsProvider: AttachItemsProvider) { } - public ShowAttachEntries(): Promise { - return util.isExtensionReady().then(ready => { - if (!ready) { - util.displayExtensionNotReadyPrompt(); - } else { - return showQuickPick(() => this.attachItemsProvider.getAttachItems()); - } - }); + // We should not await on this function. + public async ShowAttachEntries(): Promise { + if (!await util.isExtensionReady()) { + util.displayExtensionNotReadyPrompt(); + } else { + return showQuickPick(() => this.attachItemsProvider.getAttachItems()); + } } } @@ -43,66 +41,66 @@ export class RemoteAttachPicker { private _channel: vscode.OutputChannel; - public ShowAttachEntries(config: any): Promise { - return util.isExtensionReady().then(ready => { - if (!ready) { - util.displayExtensionNotReadyPrompt(); - } else { - this._channel.clear(); + public async ShowAttachEntries(config: any): Promise { + if (!await util.isExtensionReady()) { + util.displayExtensionNotReadyPrompt(); + } else { + this._channel.clear(); - const pipeTransport: any = config ? config.pipeTransport : undefined; + const pipeTransport: any = config ? config.pipeTransport : undefined; - if (!pipeTransport) { - return Promise.reject(new Error(localize("no.pipetransport", "Chosen debug configuration does not contain {0}", "pipeTransport"))); - } + if (!pipeTransport) { + throw new Error(localize("no.pipetransport", "Chosen debug configuration does not contain {0}", "pipeTransport")); + } - let pipeProgram: string | undefined; + let pipeProgram: string | undefined; - if (os.platform() === 'win32' && - pipeTransport.pipeProgram && - !fs.existsSync(pipeTransport.pipeProgram)) { - const pipeProgramStr: string = pipeTransport.pipeProgram.toLowerCase().trim(); - const expectedArch: debugUtils.ArchType = debugUtils.ArchType[process.arch as keyof typeof debugUtils.ArchType]; + if (os.platform() === 'win32' && + pipeTransport.pipeProgram && + !await util.checkFileExists(pipeTransport.pipeProgram)) { + const pipeProgramStr: string = pipeTransport.pipeProgram.toLowerCase().trim(); + const expectedArch: debugUtils.ArchType = debugUtils.ArchType[process.arch as keyof typeof debugUtils.ArchType]; - // Check for pipeProgram - if (!fs.existsSync(config.pipeTransport.pipeProgram)) { - pipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(pipeProgramStr, expectedArch); - } + // Check for pipeProgram + if (!await util.checkFileExists(config.pipeTransport.pipeProgram)) { + pipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(pipeProgramStr, expectedArch); + } - // If pipeProgram does not get replaced and there is a pipeCwd, concatenate with pipeProgramStr and attempt to replace. - if (!pipeProgram && config.pipeTransport.pipeCwd) { - const pipeCwdStr: string = config.pipeTransport.pipeCwd.toLowerCase().trim(); - const newPipeProgramStr: string = path.join(pipeCwdStr, pipeProgramStr); + // If pipeProgram does not get replaced and there is a pipeCwd, concatenate with pipeProgramStr and attempt to replace. + if (!pipeProgram && config.pipeTransport.pipeCwd) { + const pipeCwdStr: string = config.pipeTransport.pipeCwd.toLowerCase().trim(); + const newPipeProgramStr: string = path.join(pipeCwdStr, pipeProgramStr); - if (!fs.existsSync(newPipeProgramStr)) { - pipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(newPipeProgramStr, expectedArch); - } + if (!await util.checkFileExists(newPipeProgramStr)) { + pipeProgram = debugUtils.ArchitectureReplacer.checkAndReplaceWSLPipeProgram(newPipeProgramStr, expectedArch); } } + } - if (!pipeProgram) { - pipeProgram = pipeTransport.pipeProgram; - } + if (!pipeProgram) { + pipeProgram = pipeTransport.pipeProgram; + } - const pipeArgs: string[] = pipeTransport.pipeArgs; + const pipeArgs: string[] = pipeTransport.pipeArgs; - const argList: string = RemoteAttachPicker.createArgumentList(pipeArgs); + const argList: string = RemoteAttachPicker.createArgumentList(pipeArgs); - const pipeCmd: string = `"${pipeProgram}" ${argList}`; + const pipeCmd: string = `"${pipeProgram}" ${argList}`; - return this.getRemoteOSAndProcesses(pipeCmd) - .then(processes => { - const attachPickOptions: vscode.QuickPickOptions = { - matchOnDetail: true, - matchOnDescription: true, - placeHolder: localize("select.process.attach", "Select the process to attach to") - }; + const processes: AttachItem[]= await this.getRemoteOSAndProcesses(pipeCmd); + const attachPickOptions: vscode.QuickPickOptions = { + matchOnDetail: true, + matchOnDescription: true, + placeHolder: localize("select.process.attach", "Select the process to attach to") + }; - return vscode.window.showQuickPick(processes, attachPickOptions) - .then(item => item ? item.id : Promise.reject(new Error(localize("process.not.selected", "Process not selected.")))); - }); + const item: AttachItem | undefined = await vscode.window.showQuickPick(processes, attachPickOptions); + if (item) { + return item.id; + } else { + throw new Error(localize("process.not.selected", "Process not selected.")); } - }); + } } // Creates a string to run on the host machine which will execute a shell script on the remote machine to retrieve OS and processes @@ -132,51 +130,49 @@ export class RemoteAttachPicker { `then ${PsProcessParser.psDarwinCommand}; fi${innerQuote}${outerQuote}`; } - private getRemoteOSAndProcesses(pipeCmd: string): Promise { + private async getRemoteOSAndProcesses(pipeCmd: string): Promise { // Do not add any quoting in execCommand. const execCommand: string = `${pipeCmd} ${this.getRemoteProcessCommand()}`; - return util.execChildProcess(execCommand, undefined, this._channel).then(output => { - // OS will be on first line - // Processes will follow if listed - const lines: string[] = output.split(/\r?\n/); + const output: string = await util.execChildProcess(execCommand, undefined, this._channel); + // OS will be on first line + // Processes will follow if listed + const lines: string[] = output.split(/\r?\n/); + if (lines.length === 0) { + throw new Error(localize("pipe.failed", "Pipe transport failed to get OS and processes.")); + } else { + const remoteOS: string = lines[0].replace(/[\r\n]+/g, ''); + + if (remoteOS !== "Linux" && remoteOS !== "Darwin") { + throw new Error(`Operating system "${remoteOS}" not supported.`); + } - if (lines.length === 0) { - return Promise.reject(new Error(localize("pipe.failed", "Pipe transport failed to get OS and processes."))); + // Only got OS from uname + if (lines.length === 1) { + throw new Error(localize("no.process.list", "Transport attach could not obtain processes list.")); } else { - const remoteOS: string = lines[0].replace(/[\r\n]+/g, ''); - - if (remoteOS !== "Linux" && remoteOS !== "Darwin") { - return Promise.reject(new Error(`Operating system "${remoteOS}" not supported.`)); - } - - // Only got OS from uname - if (lines.length === 1) { - return Promise.reject(new Error(localize("no.process.list", "Transport attach could not obtain processes list."))); - } else { - const processes: string[] = lines.slice(1); - return PsProcessParser.ParseProcessFromPsArray(processes) - .sort((a, b) => { - if (a.name === undefined) { - if (b.name === undefined) { - return 0; - } - return 1; - } + const processes: string[] = lines.slice(1); + return PsProcessParser.ParseProcessFromPsArray(processes) + .sort((a, b) => { + if (a.name === undefined) { if (b.name === undefined) { - return -1; - } - const aLower: string = a.name.toLowerCase(); - const bLower: string = b.name.toLowerCase(); - if (aLower === bLower) { return 0; } - return aLower < bLower ? -1 : 1; - }) - .map(p => p.toAttachItem()); - } + return 1; + } + if (b.name === undefined) { + return -1; + } + const aLower: string = a.name.toLowerCase(); + const bLower: string = b.name.toLowerCase(); + if (aLower === bLower) { + return 0; + } + return aLower < bLower ? -1 : 1; + }) + .map(p => p.toAttachItem()); } - }); + } } private static createArgumentList(args: string[]): string { diff --git a/Extension/src/Debugger/configurationProvider.ts b/Extension/src/Debugger/configurationProvider.ts index 08a34c8ef5..90b70ff6df 100644 --- a/Extension/src/Debugger/configurationProvider.ts +++ b/Extension/src/Debugger/configurationProvider.ts @@ -83,7 +83,7 @@ export class QuickPickConfigurationProvider implements vscode.DebugConfiguration try { await cppBuildTaskProvider.ensureBuildTaskExists(selection.configuration.preLaunchTask); if (selection.configuration.miDebuggerPath) { - if (!fs.existsSync(selection.configuration.miDebuggerPath)) { + if (!await util.checkFileExists(selection.configuration.miDebuggerPath)) { vscode.window.showErrorMessage(localize("miDebuggerPath.not.available", "miDebuggerPath does not exist: {0}. Has a debugger been installed?", selection.configuration.miDebuggerPath)); throw new Error(); } @@ -194,7 +194,7 @@ class CppConfigurationProvider implements vscode.DebugConfigurationProvider { // This property will be removed before writing the DebugConfiguration in launch.json. newConfig.detail = task.detail ? task.detail : definition.command; const isCl: boolean = compilerName === "cl.exe"; - newConfig.cwd = isWindows && !isCl && !process.env.PATH?.includes(path.dirname(compilerPath)) ? path.dirname(compilerPath) : "${workspaceFolder}"; + newConfig.cwd = isWindows && !isCl && !process.env.PATH?.includes(path.dirname(compilerPath)) ? path.dirname(compilerPath) : "${fileDirname}"; return new Promise(resolve => { if (platform === "darwin") { diff --git a/Extension/src/Debugger/configurations.ts b/Extension/src/Debugger/configurations.ts index 5f809cb446..38fde7e595 100644 --- a/Extension/src/Debugger/configurations.ts +++ b/Extension/src/Debugger/configurations.ts @@ -42,7 +42,7 @@ function createLaunchString(name: string, type: string, executable: string): str "program": "${localize("enter.program.name", "enter program name, for example {0}", "$\{workspaceFolder\}" + "/" + executable).replace(/\"/g, "\\\"")}", "args": [], "stopAtEntry": false, -"cwd": "$\{workspaceFolder\}", +"cwd": "$\{fileDirname\}", "environment": [], ${ type === "cppdbg" ? `"externalConsole": false` : `"console": "externalTerminal"` } `; diff --git a/Extension/src/Debugger/debugAdapterDescriptorFactory.ts b/Extension/src/Debugger/debugAdapterDescriptorFactory.ts index f0a0dff3ea..e40b0a64c1 100644 --- a/Extension/src/Debugger/debugAdapterDescriptorFactory.ts +++ b/Extension/src/Debugger/debugAdapterDescriptorFactory.ts @@ -33,21 +33,19 @@ export class CppdbgDebugAdapterDescriptorFactory extends AbstractDebugAdapterDes super(context); } - createDebugAdapterDescriptor(session: vscode.DebugSession, executable?: vscode.DebugAdapterExecutable): vscode.ProviderResult { - return util.isExtensionReady().then(ready => { - if (ready) { - let command: string = path.join(this.context.extensionPath, './debugAdapters/OpenDebugAD7'); + async createDebugAdapterDescriptor(session: vscode.DebugSession, executable?: vscode.DebugAdapterExecutable): Promise { + if (await util.isExtensionReady()) { + let command: string = path.join(this.context.extensionPath, './debugAdapters/OpenDebugAD7'); - // Windows has the exe in debugAdapters/bin. - if (os.platform() === 'win32') { - command = path.join(this.context.extensionPath, "./debugAdapters/bin/OpenDebugAD7.exe"); - } - - return new vscode.DebugAdapterExecutable(command, []); - } else { - throw new Error(util.extensionNotReadyString); + // Windows has the exe in debugAdapters/bin. + if (os.platform() === 'win32') { + command = path.join(this.context.extensionPath, "./debugAdapters/bin/OpenDebugAD7.exe"); } - }); + + return new vscode.DebugAdapterExecutable(command, []); + } else { + throw new Error(util.extensionNotReadyString); + } } } @@ -58,21 +56,19 @@ export class CppvsdbgDebugAdapterDescriptorFactory extends AbstractDebugAdapterD super(context); } - createDebugAdapterDescriptor(session: vscode.DebugSession, executable?: vscode.DebugAdapterExecutable): vscode.ProviderResult { + async createDebugAdapterDescriptor(session: vscode.DebugSession, executable?: vscode.DebugAdapterExecutable): Promise { if (os.platform() !== 'win32') { vscode.window.showErrorMessage(localize("debugger.not.available", "Debugger type '{0}' is not avaliable for non-Windows machines.", "cppvsdbg")); return null; } else { - return util.isExtensionReady().then(ready => { - if (ready) { - return new vscode.DebugAdapterExecutable( - path.join(this.context.extensionPath, './debugAdapters/vsdbg/bin/vsdbg.exe'), - ['--interpreter=vscode'] - ); - } else { - throw new Error(util.extensionNotReadyString); - } - }); + if (await util.isExtensionReady()) { + return new vscode.DebugAdapterExecutable( + path.join(this.context.extensionPath, './debugAdapters/vsdbg/bin/vsdbg.exe'), + ['--interpreter=vscode', '--extConfigDir=%USERPROFILE%\\.cppvsdbg\\extensions'] + ); + } else { + throw new Error(util.extensionNotReadyString); + } } } } diff --git a/Extension/src/Debugger/extension.ts b/Extension/src/Debugger/extension.ts index 012c1d2563..02f00416e9 100644 --- a/Extension/src/Debugger/extension.ts +++ b/Extension/src/Debugger/extension.ts @@ -76,55 +76,55 @@ export function initialize(context: vscode.ExtensionContext): void { const items: MenuItem[] = configs.map(config => ({ label: config.name, configuration: config, description: config.detail })); - vscode.window.showQuickPick(items, { placeHolder: (items.length === 0 ? localize("no.compiler.found", "No compiler found") : localize("select.configuration", "Select a configuration")) }).then(async selection => { - if (!selection) { - return; // User canceled it. - } - if (selection.label.startsWith("cl.exe")) { - if (!process.env.DevEnvDir || process.env.DevEnvDir.length === 0) { - vscode.window.showErrorMessage(localize("cl.exe.not.available", '{0} build and debug is only usable when VS Code is run from the Developer Command Prompt for VS.', "cl.exe")); - return; - } + const selection: MenuItem | undefined = await vscode.window.showQuickPick(items, { + placeHolder: (items.length === 0 ? localize("no.compiler.found", "No compiler found") : localize("select.configuration", "Select a configuration")) }); + if (!selection) { + return; // User canceled it. + } + if (selection.label.startsWith("cl.exe")) { + if (!process.env.DevEnvDir || process.env.DevEnvDir.length === 0) { + vscode.window.showErrorMessage(localize("cl.exe.not.available", '{0} build and debug is only usable when VS Code is run from the Developer Command Prompt for VS.', "cl.exe")); + return; } - if (selection.configuration.preLaunchTask) { - if (folder) { - try { - await cppBuildTaskProvider.ensureBuildTaskExists(selection.configuration.preLaunchTask); - Telemetry.logDebuggerEvent("buildAndDebug", { "success": "false" }); - } catch (e) { - if (e && e.message === util.failedToParseJson) { - vscode.window.showErrorMessage(util.failedToParseJson); - } - return Promise.resolve(); + } + if (selection.configuration.preLaunchTask) { + if (folder) { + try { + await cppBuildTaskProvider.ensureBuildTaskExists(selection.configuration.preLaunchTask); + Telemetry.logDebuggerEvent("buildAndDebug", { "success": "false" }); + } catch (e) { + if (e && e.message === util.failedToParseJson) { + vscode.window.showErrorMessage(util.failedToParseJson); } - } else { - return Promise.resolve(); - // TODO uncomment this when single file mode works correctly. - // const buildTasks: vscode.Task[] = await getBuildTasks(true); - // const task: vscode.Task = buildTasks.find(task => task.name === selection.configuration.preLaunchTask); - // await vscode.tasks.executeTask(task); - // delete selection.configuration.preLaunchTask; + return; } + } else { + return; + // TODO uncomment this when single file mode works correctly. + // const buildTasks: vscode.Task[] = await getBuildTasks(true); + // const task: vscode.Task = buildTasks.find(task => task.name === selection.configuration.preLaunchTask); + // await vscode.tasks.executeTask(task); + // delete selection.configuration.preLaunchTask; } + } - // Attempt to use the user's (possibly) modified configuration before using the generated one. + // Attempt to use the user's (possibly) modified configuration before using the generated one. + try { + await cppBuildTaskProvider.ensureDebugConfigExists(selection.configuration.name); try { - await cppBuildTaskProvider.ensureDebugConfigExists(selection.configuration.name); - try { - await vscode.debug.startDebugging(folder, selection.configuration.name); - Telemetry.logDebuggerEvent("buildAndDebug", { "success": "true" }); - } catch (e) { - Telemetry.logDebuggerEvent("buildAndDebug", { "success": "false" }); - } + await vscode.debug.startDebugging(folder, selection.configuration.name); + Telemetry.logDebuggerEvent("buildAndDebug", { "success": "true" }); } catch (e) { - try { - vscode.debug.startDebugging(folder, selection.configuration); - Telemetry.logDebuggerEvent("buildAndDebug", { "success": "true" }); - } catch (e) { - Telemetry.logDebuggerEvent("buildAndDebug", { "success": "false" }); - } + Telemetry.logDebuggerEvent("buildAndDebug", { "success": "false" }); } - }); + } catch (e) { + try { + await vscode.debug.startDebugging(folder, selection.configuration); + Telemetry.logDebuggerEvent("buildAndDebug", { "success": "true" }); + } catch (e) { + Telemetry.logDebuggerEvent("buildAndDebug", { "success": "false" }); + } + } })); configurationProvider.getConfigurationSnippets(); diff --git a/Extension/src/Debugger/nativeAttach.ts b/Extension/src/Debugger/nativeAttach.ts index 0180dbbd11..b4ee1aec1d 100644 --- a/Extension/src/Debugger/nativeAttach.ts +++ b/Extension/src/Debugger/nativeAttach.ts @@ -38,30 +38,29 @@ export class NativeAttachItemsProviderFactory { abstract class NativeAttachItemsProvider implements AttachItemsProvider { protected abstract getInternalProcessEntries(): Promise; - getAttachItems(): Promise { - return this.getInternalProcessEntries().then(processEntries => { - // localeCompare is significantly slower than < and > (2000 ms vs 80 ms for 10,000 elements) - // We can change to localeCompare if this becomes an issue - processEntries.sort((a, b) => { - if (a.name === undefined) { - if (b.name === undefined) { - return 0; - } - return 1; - } + async getAttachItems(): Promise { + const processEntries: Process[] = await this.getInternalProcessEntries(); + // localeCompare is significantly slower than < and > (2000 ms vs 80 ms for 10,000 elements) + // We can change to localeCompare if this becomes an issue + processEntries.sort((a, b) => { + if (a.name === undefined) { if (b.name === undefined) { - return -1; - } - const aLower: string = a.name.toLowerCase(); - const bLower: string = b.name.toLowerCase(); - if (aLower === bLower) { return 0; } - return aLower < bLower ? -1 : 1; - }); - const attachItems: AttachItem[] = processEntries.map(p => p.toAttachItem()); - return attachItems; + return 1; + } + if (b.name === undefined) { + return -1; + } + const aLower: string = a.name.toLowerCase(); + const bLower: string = b.name.toLowerCase(); + if (aLower === bLower) { + return 0; + } + return aLower < bLower ? -1 : 1; }); + const attachItems: AttachItem[] = processEntries.map(p => p.toAttachItem()); + return attachItems; } } @@ -90,7 +89,7 @@ export class PsAttachItemsProvider extends NativeAttachItemsProvider { // characters. 50 was chosen because that's the maximum length of a "label" in the // QuickPick UI in VSCode. - protected getInternalProcessEntries(): Promise { + protected async getInternalProcessEntries(): Promise { let processCmd: string = ''; switch (os.platform()) { case 'darwin': @@ -100,9 +99,10 @@ export class PsAttachItemsProvider extends NativeAttachItemsProvider { processCmd = PsProcessParser.psLinuxCommand; break; default: - return Promise.reject(new Error(localize("os.not.supported", 'Operating system "{0}" not supported.', os.platform()))); + throw new Error(localize("os.not.supported", 'Operating system "{0}" not supported.', os.platform())); } - return execChildProcess(processCmd, undefined).then(processes => PsProcessParser.ParseProcessFromPs(processes)); + const processes: string = await execChildProcess(processCmd, undefined); + return PsProcessParser.ParseProcessFromPs(processes); } } @@ -198,9 +198,10 @@ export class WmicAttachItemsProvider extends NativeAttachItemsProvider { // | 887 | 746 | // | 1308 | 1132 | - protected getInternalProcessEntries(): Promise { + protected async getInternalProcessEntries(): Promise { const wmicCommand: string = 'wmic process get Name,ProcessId,CommandLine /FORMAT:list'; - return execChildProcess(wmicCommand, undefined).then(processes => WmicProcessParser.ParseProcessFromWmic(processes)); + const processes: string = await execChildProcess(wmicCommand, undefined); + return WmicProcessParser.ParseProcessFromWmic(processes); } } diff --git a/Extension/src/LanguageServer/Providers/documentFormattingEditProvider.ts b/Extension/src/LanguageServer/Providers/documentFormattingEditProvider.ts index 077b7f1a6f..d17c3c0268 100644 --- a/Extension/src/LanguageServer/Providers/documentFormattingEditProvider.ts +++ b/Extension/src/LanguageServer/Providers/documentFormattingEditProvider.ts @@ -13,53 +13,49 @@ export class DocumentFormattingEditProvider implements vscode.DocumentFormatting this.client = client; } - public provideDocumentFormattingEdits(document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken): Promise { - return new Promise((resolve, reject) => { - this.client.notifyWhenReady(() => { - const filePath: string = document.uri.fsPath; - const configCallBack = (editorConfigSettings: any | undefined) => { - const params: FormatParams = { - settings: { ...editorConfigSettings }, - uri: document.uri.toString(), - insertSpaces: options.insertSpaces, - tabSize: options.tabSize, - character: "", - range: { - start: { - character: 0, - line: 0 - }, - end: { - character: 0, - line: 0 - } - } - }; - return this.client.languageClient.sendRequest(FormatDocumentRequest, params) - .then((textEdits) => { - const result: vscode.TextEdit[] = []; - textEdits.forEach((textEdit) => { - result.push({ - range: new vscode.Range(textEdit.range.start.line, textEdit.range.start.character, textEdit.range.end.line, textEdit.range.end.character), - newText: textEdit.newText - }); - }); - resolve(result); - }); - }; - const settings: CppSettings = new CppSettings(); - if (settings.formattingEngine !== "vcFormat") { - configCallBack(undefined); - } else { - const editorConfigSettings: any = cachedEditorConfigSettings.get(filePath); - if (!editorConfigSettings) { - editorConfig.parse(filePath).then(configCallBack); - } else { - cachedEditorConfigSettings.set(filePath, editorConfigSettings); - configCallBack(editorConfigSettings); + public async provideDocumentFormattingEdits(document: vscode.TextDocument, options: vscode.FormattingOptions, token: vscode.CancellationToken): Promise { + await this.client.awaitUntilLanguageClientReady(); + const filePath: string = document.uri.fsPath; + const configCallBack = async (editorConfigSettings: any | undefined) => { + const params: FormatParams = { + settings: { ...editorConfigSettings }, + uri: document.uri.toString(), + insertSpaces: options.insertSpaces, + tabSize: options.tabSize, + character: "", + range: { + start: { + character: 0, + line: 0 + }, + end: { + character: 0, + line: 0 } } + }; + const textEdits: any = await this.client.languageClient.sendRequest(FormatDocumentRequest, params); + const results: vscode.TextEdit[] = []; + textEdits.forEach((textEdit: any) => { + results.push({ + range: new vscode.Range(textEdit.range.start.line, textEdit.range.start.character, textEdit.range.end.line, textEdit.range.end.character), + newText: textEdit.newText + }); }); - }); + return results; + }; + const settings: CppSettings = new CppSettings(); + if (settings.formattingEngine !== "vcFormat") { + return configCallBack(undefined); + } else { + const editorConfigSettings: any = cachedEditorConfigSettings.get(filePath); + if (!editorConfigSettings) { + await editorConfig.parse(filePath); + return configCallBack(undefined); + } else { + cachedEditorConfigSettings.set(filePath, editorConfigSettings); + return configCallBack(editorConfigSettings); + } + } } } diff --git a/Extension/src/LanguageServer/Providers/documentRangeFormattingEditProvider.ts b/Extension/src/LanguageServer/Providers/documentRangeFormattingEditProvider.ts index 786db25817..3e034732f5 100644 --- a/Extension/src/LanguageServer/Providers/documentRangeFormattingEditProvider.ts +++ b/Extension/src/LanguageServer/Providers/documentRangeFormattingEditProvider.ts @@ -13,53 +13,49 @@ export class DocumentRangeFormattingEditProvider implements vscode.DocumentRange this.client = client; } - public provideDocumentRangeFormattingEdits(document: vscode.TextDocument, range: vscode.Range, options: vscode.FormattingOptions, token: vscode.CancellationToken): Promise { - return new Promise((resolve, reject) => { - this.client.notifyWhenReady(() => { - const filePath: string = document.uri.fsPath; - const configCallBack = (editorConfigSettings: any | undefined) => { - const params: FormatParams = { - settings: { ...editorConfigSettings }, - uri: document.uri.toString(), - insertSpaces: options.insertSpaces, - tabSize: options.tabSize, - character: "", - range: { - start: { - character: range.start.character, - line: range.start.line - }, - end: { - character: range.end.character, - line: range.end.line - } - } - }; - return this.client.languageClient.sendRequest(FormatRangeRequest, params) - .then((textEdits) => { - const result: vscode.TextEdit[] = []; - textEdits.forEach((textEdit) => { - result.push({ - range: new vscode.Range(textEdit.range.start.line, textEdit.range.start.character, textEdit.range.end.line, textEdit.range.end.character), - newText: textEdit.newText - }); - }); - resolve(result); - }); - }; - const settings: CppSettings = new CppSettings(); - if (settings.formattingEngine !== "vcFormat") { - configCallBack(undefined); - } else { - const editorConfigSettings: any = cachedEditorConfigSettings.get(filePath); - if (!editorConfigSettings) { - editorConfig.parse(filePath).then(configCallBack); - } else { - cachedEditorConfigSettings.set(filePath, editorConfigSettings); - configCallBack(editorConfigSettings); + public async provideDocumentRangeFormattingEdits(document: vscode.TextDocument, range: vscode.Range, options: vscode.FormattingOptions, token: vscode.CancellationToken): Promise { + await this.client.awaitUntilLanguageClientReady(); + const filePath: string = document.uri.fsPath; + const configCallBack = async (editorConfigSettings: any | undefined) => { + const params: FormatParams = { + settings: { ...editorConfigSettings }, + uri: document.uri.toString(), + insertSpaces: options.insertSpaces, + tabSize: options.tabSize, + character: "", + range: { + start: { + character: range.start.character, + line: range.start.line + }, + end: { + character: range.end.character, + line: range.end.line } } + }; + const textEdits: any = await this.client.languageClient.sendRequest(FormatRangeRequest, params); + const result: vscode.TextEdit[] = []; + textEdits.forEach((textEdit: any) => { + result.push({ + range: new vscode.Range(textEdit.range.start.line, textEdit.range.start.character, textEdit.range.end.line, textEdit.range.end.character), + newText: textEdit.newText + }); }); - }); + return result; + }; + const settings: CppSettings = new CppSettings(); + if (settings.formattingEngine !== "vcFormat") { + return configCallBack(undefined); + } else { + const editorConfigSettings: any = cachedEditorConfigSettings.get(filePath); + if (!editorConfigSettings) { + await editorConfig.parse(filePath); + return configCallBack(undefined); + } else { + cachedEditorConfigSettings.set(filePath, editorConfigSettings); + return configCallBack(editorConfigSettings); + } + } }; } diff --git a/Extension/src/LanguageServer/Providers/documentSymbolProvider.ts b/Extension/src/LanguageServer/Providers/documentSymbolProvider.ts index df70afd923..62ea2d87f7 100644 --- a/Extension/src/LanguageServer/Providers/documentSymbolProvider.ts +++ b/Extension/src/LanguageServer/Providers/documentSymbolProvider.ts @@ -3,7 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ import * as vscode from 'vscode'; -import { DefaultClient, LocalizeDocumentSymbol, GetDocumentSymbolRequestParams, GetDocumentSymbolRequest } from '../client'; +import { DefaultClient, LocalizeDocumentSymbol, GetDocumentSymbolRequestParams, GetDocumentSymbolRequest, SymbolScope } from '../client'; import * as util from '../../common'; import { processDelayedDidOpen } from '../extension'; @@ -16,7 +16,20 @@ export class DocumentSymbolProvider implements vscode.DocumentSymbolProvider { const documentSymbols: vscode.DocumentSymbol[] = []; if (symbols) { symbols.forEach((symbol) => { - const detail: string = util.getLocalizedString(symbol.detail); + let detail: string = util.getLocalizedString(symbol.detail); + if (symbol.scope === SymbolScope.Private) { + if (detail.length === 0) { + detail = "private"; + } else { + detail = util.getLocalizedSymbolScope("private", detail); + } + } else if (symbol.scope === SymbolScope.Protected) { + if (detail.length === 0) { + detail = "protected"; + } else { + detail = util.getLocalizedSymbolScope("protected", detail); + } + } const r: vscode.Range = new vscode.Range(symbol.range.start.line, symbol.range.start.character, symbol.range.end.line, symbol.range.end.character); const sr: vscode.Range = new vscode.Range(symbol.selectionRange.start.line, symbol.selectionRange.start.character, symbol.selectionRange.end.line, symbol.selectionRange.end.character); const vscodeSymbol: vscode.DocumentSymbol = new vscode.DocumentSymbol(symbol.name, detail, symbol.kind, r, sr); @@ -30,15 +43,13 @@ export class DocumentSymbolProvider implements vscode.DocumentSymbolProvider { if (!this.client.TrackedDocuments.has(document)) { processDelayedDidOpen(document); } - return this.client.requestWhenReady(() => { + return this.client.requestWhenReady(async () => { const params: GetDocumentSymbolRequestParams = { uri: document.uri.toString() }; - return this.client.languageClient.sendRequest(GetDocumentSymbolRequest, params) - .then((symbols) => { - const resultSymbols: vscode.DocumentSymbol[] = this.getChildrenSymbols(symbols); - return resultSymbols; - }); + const symbols: LocalizeDocumentSymbol[] = await this.client.languageClient.sendRequest(GetDocumentSymbolRequest, params); + const resultSymbols: vscode.DocumentSymbol[] = this.getChildrenSymbols(symbols); + return resultSymbols; }); } } diff --git a/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts b/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts index 019faffb40..e4dc81ab21 100644 --- a/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts +++ b/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts @@ -14,69 +14,68 @@ export class FindAllReferencesProvider implements vscode.ReferenceProvider { } public async provideReferences(document: vscode.TextDocument, position: vscode.Position, context: vscode.ReferenceContext, token: vscode.CancellationToken): Promise { return new Promise((resolve, reject) => { - const callback: () => void = () => { + const callback: () => Promise = async () => { const params: FindAllReferencesParams = { position: Position.create(position.line, position.character), textDocument: this.client.languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document) }; DefaultClient.referencesParams = params; - this.client.notifyWhenReady(() => { - // The current request is represented by referencesParams. If a request detects - // referencesParams does not match the object used when creating the request, abort it. - if (params !== DefaultClient.referencesParams) { - // Complete with nothing instead of rejecting, to avoid an error message from VS Code - const locations: vscode.Location[] = []; + await this.client.awaitUntilLanguageClientReady(); + // The current request is represented by referencesParams. If a request detects + // referencesParams does not match the object used when creating the request, abort it. + if (params !== DefaultClient.referencesParams) { + // Complete with nothing instead of rejecting, to avoid an error message from VS Code + const locations: vscode.Location[] = []; + resolve(locations); + return; + } + DefaultClient.referencesRequestPending = true; + // Register a single-fire handler for the reply. + const resultCallback: refs.ReferencesResultCallback = (result: refs.ReferencesResult | null, doResolve: boolean) => { + DefaultClient.referencesRequestPending = false; + const locations: vscode.Location[] = []; + if (result) { + result.referenceInfos.forEach((referenceInfo: refs.ReferenceInfo) => { + if (referenceInfo.type === refs.ReferenceType.Confirmed) { + const uri: vscode.Uri = vscode.Uri.file(referenceInfo.file); + const range: vscode.Range = new vscode.Range(referenceInfo.position.line, referenceInfo.position.character, referenceInfo.position.line, referenceInfo.position.character + result.text.length); + locations.push(new vscode.Location(uri, range)); + } + }); + } + // If references were canceled while in a preview state, there is not an outstanding promise. + if (doResolve) { resolve(locations); - return; } - DefaultClient.referencesRequestPending = true; - // Register a single-fire handler for the reply. - const resultCallback: refs.ReferencesResultCallback = (result: refs.ReferencesResult | null, doResolve: boolean) => { - DefaultClient.referencesRequestPending = false; - const locations: vscode.Location[] = []; - if (result) { - result.referenceInfos.forEach((referenceInfo: refs.ReferenceInfo) => { - if (referenceInfo.type === refs.ReferenceType.Confirmed) { - const uri: vscode.Uri = vscode.Uri.file(referenceInfo.file); - const range: vscode.Range = new vscode.Range(referenceInfo.position.line, referenceInfo.position.character, referenceInfo.position.line, referenceInfo.position.character + result.text.length); - locations.push(new vscode.Location(uri, range)); - } - }); - } - // If references were canceled while in a preview state, there is not an outstanding promise. - if (doResolve) { - resolve(locations); - } - if (DefaultClient.referencesPendingCancellations.length > 0) { - while (DefaultClient.referencesPendingCancellations.length > 1) { - const pendingCancel: ReferencesCancellationState = DefaultClient.referencesPendingCancellations[0]; - DefaultClient.referencesPendingCancellations.pop(); - pendingCancel.reject(); - } + if (DefaultClient.referencesPendingCancellations.length > 0) { + while (DefaultClient.referencesPendingCancellations.length > 1) { const pendingCancel: ReferencesCancellationState = DefaultClient.referencesPendingCancellations[0]; DefaultClient.referencesPendingCancellations.pop(); - pendingCancel.callback(); + pendingCancel.reject(); } - }; - if (!workspaceReferences.referencesRefreshPending) { - workspaceReferences.setResultsCallback(resultCallback); - workspaceReferences.startFindAllReferences(params); + const pendingCancel: ReferencesCancellationState = DefaultClient.referencesPendingCancellations[0]; + DefaultClient.referencesPendingCancellations.pop(); + pendingCancel.callback(); + } + }; + if (!workspaceReferences.referencesRefreshPending) { + workspaceReferences.setResultsCallback(resultCallback); + workspaceReferences.startFindAllReferences(params); + } else { + // We are responding to a refresh (preview or final result) + workspaceReferences.referencesRefreshPending = false; + if (workspaceReferences.lastResults) { + // This is a final result + const lastResults: refs.ReferencesResult = workspaceReferences.lastResults; + workspaceReferences.lastResults = null; + resultCallback(lastResults, true); } else { - // We are responding to a refresh (preview or final result) - workspaceReferences.referencesRefreshPending = false; - if (workspaceReferences.lastResults) { - // This is a final result - const lastResults: refs.ReferencesResult = workspaceReferences.lastResults; - workspaceReferences.lastResults = null; - resultCallback(lastResults, true); - } else { - // This is a preview (2nd or later preview) - workspaceReferences.referencesRequestPending = true; - workspaceReferences.setResultsCallback(resultCallback); - this.client.languageClient.sendNotification(RequestReferencesNotification, false); - } + // This is a preview (2nd or later preview) + workspaceReferences.referencesRequestPending = true; + workspaceReferences.setResultsCallback(resultCallback); + this.client.languageClient.sendNotification(RequestReferencesNotification, false); } - }); + } token.onCancellationRequested(e => { if (params === DefaultClient.referencesParams) { this.client.cancelReferences(); diff --git a/Extension/src/LanguageServer/Providers/foldingRangeProvider.ts b/Extension/src/LanguageServer/Providers/foldingRangeProvider.ts index e79a996644..49d0286bc8 100644 --- a/Extension/src/LanguageServer/Providers/foldingRangeProvider.ts +++ b/Extension/src/LanguageServer/Providers/foldingRangeProvider.ts @@ -3,7 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ import * as vscode from 'vscode'; -import { DefaultClient, GetFoldingRangesParams, GetFoldingRangesRequest, FoldingRangeKind } from '../client'; +import { DefaultClient, GetFoldingRangesParams, GetFoldingRangesRequest, FoldingRangeKind, GetFoldingRangesResult } from '../client'; export class FoldingRangeProvider implements vscode.FoldingRangeProvider { private client: DefaultClient; @@ -13,47 +13,42 @@ export class FoldingRangeProvider implements vscode.FoldingRangeProvider { this.client = client; this.onDidChangeFoldingRanges = this.onDidChangeFoldingRangesEvent.event; } - provideFoldingRanges(document: vscode.TextDocument, context: vscode.FoldingContext, + async provideFoldingRanges(document: vscode.TextDocument, context: vscode.FoldingContext, token: vscode.CancellationToken): Promise { const id: number = ++DefaultClient.abortRequestId; const params: GetFoldingRangesParams = { id: id, uri: document.uri.toString() }; - return new Promise((resolve, reject) => { - this.client.notifyWhenReady(() => { - this.client.languageClient.sendRequest(GetFoldingRangesRequest, params) - .then((ranges) => { - if (ranges.canceled) { - reject(); - } else { - const result: vscode.FoldingRange[] = []; - ranges.ranges.forEach((r) => { - const foldingRange: vscode.FoldingRange = { - start: r.range.start.line, - end: r.range.end.line - }; - switch (r.kind) { - case FoldingRangeKind.Comment: - foldingRange.kind = vscode.FoldingRangeKind.Comment; - break; - case FoldingRangeKind.Imports: - foldingRange.kind = vscode.FoldingRangeKind.Imports; - break; - case FoldingRangeKind.Region: - foldingRange.kind = vscode.FoldingRangeKind.Region; - break; - default: - break; - } - result.push(foldingRange); - }); - resolve(result); - } - }); - token.onCancellationRequested(e => this.client.abortRequest(id)); + await this.client.awaitUntilLanguageClientReady(); + token.onCancellationRequested(e => this.client.abortRequest(id)); + const ranges: GetFoldingRangesResult = await this.client.languageClient.sendRequest(GetFoldingRangesRequest, params); + if (ranges.canceled) { + throw new vscode.CancellationError(); + } else { + const result: vscode.FoldingRange[] = []; + ranges.ranges.forEach((r) => { + const foldingRange: vscode.FoldingRange = { + start: r.range.start.line, + end: r.range.end.line + }; + switch (r.kind) { + case FoldingRangeKind.Comment: + foldingRange.kind = vscode.FoldingRangeKind.Comment; + break; + case FoldingRangeKind.Imports: + foldingRange.kind = vscode.FoldingRangeKind.Imports; + break; + case FoldingRangeKind.Region: + foldingRange.kind = vscode.FoldingRangeKind.Region; + break; + default: + break; + } + result.push(foldingRange); }); - }); + return result; + } } public refresh(): void { diff --git a/Extension/src/LanguageServer/Providers/onTypeFormattingEditProvider.ts b/Extension/src/LanguageServer/Providers/onTypeFormattingEditProvider.ts index 381796c34c..3466b07c1b 100644 --- a/Extension/src/LanguageServer/Providers/onTypeFormattingEditProvider.ts +++ b/Extension/src/LanguageServer/Providers/onTypeFormattingEditProvider.ts @@ -13,59 +13,55 @@ export class OnTypeFormattingEditProvider implements vscode.OnTypeFormattingEdit this.client = client; } - public provideOnTypeFormattingEdits(document: vscode.TextDocument, position: vscode.Position, ch: string, options: vscode.FormattingOptions, token: vscode.CancellationToken): Promise { - return new Promise((resolve, reject) => { - this.client.notifyWhenReady(() => { - const filePath: string = document.uri.fsPath; - const configCallBack = (editorConfigSettings: any | undefined) => { - const params: FormatParams = { - settings: { ...editorConfigSettings }, - uri: document.uri.toString(), - insertSpaces: options.insertSpaces, - tabSize: options.tabSize, - character: ch, - range: { - start: { - character: position.character, - line: position.line - }, - end: { - character: 0, - line: 0 - } - } - }; - return this.client.languageClient.sendRequest(FormatOnTypeRequest, params) - .then((textEdits) => { - const result: vscode.TextEdit[] = []; - textEdits.forEach((textEdit) => { - result.push({ - range: new vscode.Range(textEdit.range.start.line, textEdit.range.start.character, textEdit.range.end.line, textEdit.range.end.character), - newText: textEdit.newText - }); - }); - resolve(result); - }); - }; - const settings: CppSettings = new CppSettings(); - if (settings.formattingEngine !== "vcFormat") { - // If not using vcFormat, only process on-type requests for ';' - if (ch !== ';') { - const result: vscode.TextEdit[] = []; - resolve(result); - } else { - configCallBack(undefined); - } - } else { - const editorConfigSettings: any = cachedEditorConfigSettings.get(filePath); - if (!editorConfigSettings) { - editorConfig.parse(filePath).then(configCallBack); - } else { - cachedEditorConfigSettings.set(filePath, editorConfigSettings); - configCallBack(editorConfigSettings); + public async provideOnTypeFormattingEdits(document: vscode.TextDocument, position: vscode.Position, ch: string, options: vscode.FormattingOptions, token: vscode.CancellationToken): Promise { + await this.client.awaitUntilLanguageClientReady(); + const filePath: string = document.uri.fsPath; + const configCallBack = async (editorConfigSettings: any | undefined) => { + const params: FormatParams = { + settings: { ...editorConfigSettings }, + uri: document.uri.toString(), + insertSpaces: options.insertSpaces, + tabSize: options.tabSize, + character: ch, + range: { + start: { + character: position.character, + line: position.line + }, + end: { + character: 0, + line: 0 } } + }; + const textEdits: any[] = await this.client.languageClient.sendRequest(FormatOnTypeRequest, params); + const result: vscode.TextEdit[] = []; + textEdits.forEach((textEdit) => { + result.push({ + range: new vscode.Range(textEdit.range.start.line, textEdit.range.start.character, textEdit.range.end.line, textEdit.range.end.character), + newText: textEdit.newText + }); }); - }); + return result; + }; + const settings: CppSettings = new CppSettings(); + if (settings.formattingEngine !== "vcFormat") { + // If not using vcFormat, only process on-type requests for ';' + if (ch !== ';') { + const result: vscode.TextEdit[] = []; + return result; + } else { + return configCallBack(undefined); + } + } else { + const editorConfigSettings: any = cachedEditorConfigSettings.get(filePath); + if (!editorConfigSettings) { + await editorConfig.parse(filePath); + return configCallBack(undefined); + } else { + cachedEditorConfigSettings.set(filePath, editorConfigSettings); + return configCallBack(editorConfigSettings); + } + } } } diff --git a/Extension/src/LanguageServer/Providers/renameProvider.ts b/Extension/src/LanguageServer/Providers/renameProvider.ts index 6a62ce6ddd..661531b10b 100644 --- a/Extension/src/LanguageServer/Providers/renameProvider.ts +++ b/Extension/src/LanguageServer/Providers/renameProvider.ts @@ -23,7 +23,7 @@ export class RenameProvider implements vscode.RenameProvider { if (settings.renameRequiresIdentifier && !util.isValidIdentifier(newName)) { vscode.window.showErrorMessage(localize("invalid.identifier.for.rename", "Invalid identifier provided for the Rename Symbol operation.")); const workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); - return Promise.resolve(workspaceEdit); + return workspaceEdit; } // Normally, VS Code considers rename to be an atomic operation. // If the user clicks anywhere in the document, it attempts to cancel it. @@ -33,67 +33,66 @@ export class RenameProvider implements vscode.RenameProvider { DefaultClient.renamePending = true; ++DefaultClient.renameRequestsPending; return new Promise((resolve, reject) => { - const callback: () => void = () => { + const callback: () => Promise = async () => { const params: RenameParams = { newName: newName, position: Position.create(position.line, position.character), textDocument: this.client.languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document) }; DefaultClient.referencesParams = params; - this.client.notifyWhenReady(() => { - // The current request is represented by referencesParams. If a request detects - // referencesParams does not match the object used when creating the request, abort it. - if (params !== DefaultClient.referencesParams) { - if (--DefaultClient.renameRequestsPending === 0) { - DefaultClient.renamePending = false; - } - - // Complete with nothing instead of rejecting, to avoid an error message from VS Code - const workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); - resolve(workspaceEdit); - return; + await this.client.awaitUntilLanguageClientReady(); + // The current request is represented by referencesParams. If a request detects + // referencesParams does not match the object used when creating the request, abort it. + if (params !== DefaultClient.referencesParams) { + if (--DefaultClient.renameRequestsPending === 0) { + DefaultClient.renamePending = false; } - DefaultClient.referencesRequestPending = true; - workspaceReferences.setResultsCallback((referencesResult: refs.ReferencesResult | null, doResolve: boolean) => { - DefaultClient.referencesRequestPending = false; - --DefaultClient.renameRequestsPending; - const workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); - const cancelling: boolean = DefaultClient.referencesPendingCancellations.length > 0; - if (cancelling) { - while (DefaultClient.referencesPendingCancellations.length > 1) { - const pendingCancel: ReferencesCancellationState = DefaultClient.referencesPendingCancellations[0]; - DefaultClient.referencesPendingCancellations.pop(); - pendingCancel.reject(); - } + + // Complete with nothing instead of rejecting, to avoid an error message from VS Code + const workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); + resolve(workspaceEdit); + return; + } + DefaultClient.referencesRequestPending = true; + workspaceReferences.setResultsCallback((referencesResult: refs.ReferencesResult | null, doResolve: boolean) => { + DefaultClient.referencesRequestPending = false; + --DefaultClient.renameRequestsPending; + const workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); + const cancelling: boolean = DefaultClient.referencesPendingCancellations.length > 0; + if (cancelling) { + while (DefaultClient.referencesPendingCancellations.length > 1) { const pendingCancel: ReferencesCancellationState = DefaultClient.referencesPendingCancellations[0]; DefaultClient.referencesPendingCancellations.pop(); - pendingCancel.callback(); - } else { - if (DefaultClient.renameRequestsPending === 0) { - DefaultClient.renamePending = false; - } - // If rename UI was canceled, we will get a null result. - // If null, return an empty list to avoid Rename failure dialog. - if (referencesResult) { - for (const reference of referencesResult.referenceInfos) { - const uri: vscode.Uri = vscode.Uri.file(reference.file); - const range: vscode.Range = new vscode.Range(reference.position.line, reference.position.character, reference.position.line, reference.position.character + referencesResult.text.length); - const metadata: vscode.WorkspaceEditEntryMetadata = { - needsConfirmation: reference.type !== refs.ReferenceType.Confirmed, - label: refs.getReferenceTagString(reference.type, false, true), - iconPath: refs.getReferenceItemIconPath(reference.type, false) - }; - workspaceEdit.replace(uri, range, newName, metadata); - } - } + pendingCancel.reject(); } - if (referencesResult && (referencesResult.referenceInfos === null || referencesResult.referenceInfos.length === 0)) { - vscode.window.showErrorMessage(localize("unable.to.locate.selected.symbol", "A definition for the selected symbol could not be located.")); + const pendingCancel: ReferencesCancellationState = DefaultClient.referencesPendingCancellations[0]; + DefaultClient.referencesPendingCancellations.pop(); + pendingCancel.callback(); + } else { + if (DefaultClient.renameRequestsPending === 0) { + DefaultClient.renamePending = false; } - resolve(workspaceEdit); - }); - workspaceReferences.startRename(params); + // If rename UI was canceled, we will get a null result. + // If null, return an empty list to avoid Rename failure dialog. + if (referencesResult) { + for (const reference of referencesResult.referenceInfos) { + const uri: vscode.Uri = vscode.Uri.file(reference.file); + const range: vscode.Range = new vscode.Range(reference.position.line, reference.position.character, reference.position.line, reference.position.character + referencesResult.text.length); + const metadata: vscode.WorkspaceEditEntryMetadata = { + needsConfirmation: reference.type !== refs.ReferenceType.Confirmed, + label: refs.getReferenceTagString(reference.type, false, true), + iconPath: refs.getReferenceItemIconPath(reference.type, false) + }; + workspaceEdit.replace(uri, range, newName, metadata); + } + } + } + if (referencesResult && (referencesResult.referenceInfos === null || referencesResult.referenceInfos.length === 0)) { + vscode.window.showErrorMessage(localize("unable.to.locate.selected.symbol", "A definition for the selected symbol could not be located.")); + } + resolve(workspaceEdit); }); + workspaceReferences.startRename(params); }; if (DefaultClient.referencesRequestPending || workspaceReferences.symbolSearchInProgress) { diff --git a/Extension/src/LanguageServer/Providers/semanticTokensProvider.ts b/Extension/src/LanguageServer/Providers/semanticTokensProvider.ts index 0f142f811c..b964078003 100644 --- a/Extension/src/LanguageServer/Providers/semanticTokensProvider.ts +++ b/Extension/src/LanguageServer/Providers/semanticTokensProvider.ts @@ -3,7 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ import * as vscode from 'vscode'; -import { DefaultClient, GetSemanticTokensParams, GetSemanticTokensRequest, openFileVersions } from '../client'; +import { DefaultClient, GetSemanticTokensParams, GetSemanticTokensRequest, openFileVersions, GetSemanticTokensResult } from '../client'; export class SemanticTokensProvider implements vscode.DocumentSemanticTokensProvider { private client: DefaultClient; @@ -17,41 +17,36 @@ export class SemanticTokensProvider implements vscode.DocumentSemanticTokensProv } public async provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { - return new Promise((resolve, reject) => { - this.client.notifyWhenReady(() => { - const uriString: string = document.uri.toString(); - // First check the token cache to see if we already have results for that file and version - const cache: [number, vscode.SemanticTokens] | undefined = this.tokenCaches.get(uriString); - if (cache && cache[0] === document.version) { - resolve(cache[1]); + await this.client.awaitUntilLanguageClientReady(); + const uriString: string = document.uri.toString(); + // First check the token cache to see if we already have results for that file and version + const cache: [number, vscode.SemanticTokens] | undefined = this.tokenCaches.get(uriString); + if (cache && cache[0] === document.version) { + return cache[1]; + } else { + token.onCancellationRequested(_e => this.client.abortRequest(id)); + const id: number = ++DefaultClient.abortRequestId; + const params: GetSemanticTokensParams = { + id: id, + uri: uriString + }; + const tokensResult: GetSemanticTokensResult = await this.client.languageClient.sendRequest(GetSemanticTokensRequest, params); + if (tokensResult.canceled) { + throw new vscode.CancellationError(); + } else { + if (tokensResult.fileVersion !== openFileVersions.get(uriString)) { + throw new vscode.CancellationError(); } else { - const id: number = ++DefaultClient.abortRequestId; - const params: GetSemanticTokensParams = { - id: id, - uri: uriString - }; - this.client.languageClient.sendRequest(GetSemanticTokensRequest, params) - .then((tokensResult) => { - if (tokensResult.canceled) { - reject(); - } else { - if (tokensResult.fileVersion !== 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); - }); - const tokens: vscode.SemanticTokens = builder.build(); - this.tokenCaches.set(uriString, [tokensResult.fileVersion, tokens]); - resolve(tokens); - } - } - }); - token.onCancellationRequested(e => this.client.abortRequest(id)); + 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); + }); + const tokens: vscode.SemanticTokens = builder.build(); + this.tokenCaches.set(uriString, [tokensResult.fileVersion, tokens]); + return tokens; } - }); - }); + } + } } public invalidateFile(uri: string): void { diff --git a/Extension/src/LanguageServer/Providers/workspaceSymbolProvider.ts b/Extension/src/LanguageServer/Providers/workspaceSymbolProvider.ts index 31fa30680a..726cd11fb6 100644 --- a/Extension/src/LanguageServer/Providers/workspaceSymbolProvider.ts +++ b/Extension/src/LanguageServer/Providers/workspaceSymbolProvider.ts @@ -3,7 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ import * as vscode from 'vscode'; -import { DefaultClient, GetSymbolInfoRequest, WorkspaceSymbolParams } from '../client'; +import { DefaultClient, GetSymbolInfoRequest, WorkspaceSymbolParams, LocalizeSymbolInformation, SymbolScope } from '../client'; import * as util from '../../common'; export class WorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvider { @@ -17,28 +17,37 @@ export class WorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvider { query: query }; - return this.client.languageClient.sendRequest(GetSymbolInfoRequest, params) - .then((symbols) => { - const resultSymbols: vscode.SymbolInformation[] = []; + const symbols: LocalizeSymbolInformation[] = await this.client.languageClient.sendRequest(GetSymbolInfoRequest, params); + const resultSymbols: vscode.SymbolInformation[] = []; - // Convert to vscode.Command array - symbols.forEach((symbol) => { - const suffix: string = util.getLocalizedString(symbol.suffix); - let name: string = symbol.name; - if (suffix.length) { - name = name + ' (' + suffix + ')'; - } - const range: vscode.Range = new vscode.Range(symbol.location.range.start.line, symbol.location.range.start.character, symbol.location.range.end.line, symbol.location.range.end.character); - const uri: vscode.Uri = vscode.Uri.parse(symbol.location.uri.toString()); - const vscodeSymbol: vscode.SymbolInformation = new vscode.SymbolInformation( - name, - symbol.kind, - symbol.containerName, - new vscode.Location(uri, range) - ); - resultSymbols.push(vscodeSymbol); - }); - return resultSymbols; - }); + // Convert to vscode.Command array + symbols.forEach((symbol) => { + let suffix: string = util.getLocalizedString(symbol.suffix); + let name: string = symbol.name; + if (suffix.length) { + if (symbol.scope === SymbolScope.Private) { + suffix = util.getLocalizedSymbolScope("private", suffix); + } else if (symbol.scope === SymbolScope.Protected) { + suffix = util.getLocalizedSymbolScope("protected", suffix); + } + name = name + ' (' + suffix + ')'; + } else { + if (symbol.scope === SymbolScope.Private) { + name = name + " (private)"; + } else if (symbol.scope === SymbolScope.Protected) { + name = name + " (protected)"; + } + } + const range: vscode.Range = new vscode.Range(symbol.location.range.start.line, symbol.location.range.start.character, symbol.location.range.end.line, symbol.location.range.end.character); + const uri: vscode.Uri = vscode.Uri.parse(symbol.location.uri.toString()); + const vscodeSymbol: vscode.SymbolInformation = new vscode.SymbolInformation( + name, + symbol.kind, + symbol.containerName, + new vscode.Location(uri, range) + ); + resultSymbols.push(vscodeSymbol); + }); + return resultSymbols; } } diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 43e733b7ce..cdfa0000f7 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -110,6 +110,10 @@ function logLocalized(params: LocalizeStringParams): void { log(output); } +/** Note: We should not await on the following functions, + * or any funstion that returns a promise acquired from them, + * vscode.window.showInformationMessage, vscode.window.showWarningMessage, vscode.window.showErrorMessage +*/ function showMessageWindow(params: ShowMessageWindowParams): void { const message: string = util.getLocalizedString(params.localizeStringParams); switch (params.type) { @@ -293,10 +297,17 @@ export interface WorkspaceSymbolParams extends WorkspaceFolderParams { query: string; } +export enum SymbolScope { + Public = 0, + Protected = 1, + Private = 2 +} + export interface LocalizeDocumentSymbol { name: string; detail: LocalizeStringParams; kind: vscode.SymbolKind; + scope: SymbolScope; range: Range; selectionRange: Range; children: LocalizeDocumentSymbol[]; @@ -308,9 +319,10 @@ interface Location { range: Range; } -interface LocalizeSymbolInformation { +export interface LocalizeSymbolInformation { name: string; kind: vscode.SymbolKind; + scope: SymbolScope; location: Location; containerName: string; suffix: LocalizeStringParams; @@ -362,7 +374,7 @@ interface FoldingRange { range: Range; } -interface GetFoldingRangesResult { +export interface GetFoldingRangesResult { canceled: boolean; ranges: FoldingRange[]; } @@ -384,7 +396,7 @@ interface SemanticToken { modifiers?: number; } -interface GetSemanticTokensResult { +export interface GetSemanticTokensResult { fileVersion: number; canceled: boolean; tokens: SemanticToken[]; @@ -576,9 +588,10 @@ export interface Client { getCurrentCompilerPathAndArgs(): Thenable; getKnownCompilers(): Thenable; takeOwnership(document: vscode.TextDocument): void; - queueTask(task: () => Thenable): Thenable; + queueTask(task: () => Thenable): Promise; requestWhenReady(request: () => Thenable): Thenable; - notifyWhenReady(notify: () => void): void; + notifyWhenLanguageClientReady(notify: () => void): void; + awaitUntilLanguageClientReady(): void; requestSwitchHeaderSource(rootPath: string, fileName: string): Thenable; activeDocumentChanged(document: vscode.TextDocument): void; activate(): void; @@ -587,15 +600,16 @@ export interface Client { deactivate(): void; pauseParsing(): void; resumeParsing(): void; - handleConfigurationSelectCommand(): void; - handleConfigurationProviderSelectCommand(): void; - handleShowParsingCommands(): void; + handleConfigurationSelectCommand(): Promise; + handleConfigurationProviderSelectCommand(): Promise; + handleShowParsingCommands(): Promise; handleReferencesIcon(): void; - handleConfigurationEditCommand(): void; - handleConfigurationEditJSONCommand(): void; - handleConfigurationEditUICommand(): void; + handleConfigurationEditCommand(viewColumn?: vscode.ViewColumn): void; + handleConfigurationEditJSONCommand(viewColumn?: vscode.ViewColumn): void; + handleConfigurationEditUICommand(viewColumn?: vscode.ViewColumn): void; handleAddToIncludePathCommand(path: string): void; - handleGoToDirectiveInGroup(next: boolean): void; + handleGoToDirectiveInGroup(next: boolean): Promise; + handleCheckForCompiler(): Promise; onInterval(): void; dispose(): void; addFileAssociations(fileAssociations: string, languageId: string): void; @@ -709,7 +723,8 @@ export class DefaultClient implements Client { * All public methods on this class must be guarded by the "pendingTask" promise. Requests and notifications received before the task is * complete are executed after this promise is resolved. * @see requestWhenReady(request) - * @see notifyWhenReady(notify) + * @see notifyWhenLanguageClientReady(notify) + * @see awaitUntilLanguageClientReady() */ constructor(allClients: ClientCollection, workspaceFolder?: vscode.WorkspaceFolder) { @@ -749,8 +764,9 @@ export class DefaultClient implements Client { ui.bind(this); // requests/notifications are deferred until this.languageClient is set. - this.queueBlockingTask(() => languageClient.onReady().then( - () => { + this.queueBlockingTask(async () => { + await languageClient.onReady(); + try { const workspaceFolder: vscode.WorkspaceFolder | undefined = this.rootFolder; this.innerConfiguration = new configs.CppProperties(rootUri, workspaceFolder); this.innerConfiguration.ConfigurationsChanged((e) => this.onConfigurationsChanged(e)); @@ -769,7 +785,7 @@ export class DefaultClient implements Client { } public async provideCodeActions(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise<(vscode.Command | vscode.CodeAction)[]> { - return this.client.requestWhenReady(() => { + return this.client.requestWhenReady(async () => { let r: Range; if (range instanceof vscode.Selection) { if (range.active.isBefore(range.anchor)) { @@ -786,26 +802,24 @@ export class DefaultClient implements Client { uri: document.uri.toString() }; - return this.client.languageClient.sendRequest(GetCodeActionsRequest, params) - .then((commands) => { - const resultCodeActions: vscode.CodeAction[] = []; - - // Convert to vscode.CodeAction array - commands.forEach((command) => { - const title: string = util.getLocalizedString(command.localizeStringParams); - const vscodeCodeAction: vscode.CodeAction = { - title: title, - command: { - title: title, - command: command.command, - arguments: command.arguments - } - }; - resultCodeActions.push(vscodeCodeAction); - }); - - return resultCodeActions; - }); + const commands: CodeActionCommand[] = await this.client.languageClient.sendRequest(GetCodeActionsRequest, params); + const resultCodeActions: vscode.CodeAction[] = []; + + // Convert to vscode.CodeAction array + commands.forEach((command) => { + const title: string = util.getLocalizedString(command.localizeStringParams); + const vscodeCodeAction: vscode.CodeAction = { + title: title, + command: { + title: title, + command: command.command, + arguments: command.arguments + } + }; + resultCodeActions.push(vscodeCodeAction); + }); + + return resultCodeActions; }); } } @@ -833,50 +847,48 @@ export class DefaultClient implements Client { // The configurations will not be sent to the language server until the default include paths and frameworks have been set. // The event handlers must be set before this happens. - return languageClient.sendRequest(QueryCompilerDefaultsRequest, {}).then((inputCompilerDefaults: configs.CompilerDefaults) => { - compilerDefaults = inputCompilerDefaults; - this.configuration.CompilerDefaults = compilerDefaults; - - // Only register file watchers, providers, and the real commands after the extension has finished initializing, - // e.g. prevents empty c_cpp_properties.json from generation. - registerCommands(); - - this.registerFileWatcher(); - - this.disposables.push(vscode.languages.registerRenameProvider(this.documentSelector, new RenameProvider(this))); - this.disposables.push(vscode.languages.registerReferenceProvider(this.documentSelector, new FindAllReferencesProvider(this))); - this.disposables.push(vscode.languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(this))); - this.disposables.push(vscode.languages.registerDocumentSymbolProvider(this.documentSelector, new DocumentSymbolProvider(this), undefined)); - this.disposables.push(vscode.languages.registerCodeActionsProvider(this.documentSelector, new CodeActionProvider(this), undefined)); - const settings: CppSettings = new CppSettings(); - if (settings.formattingEngine !== "Disabled") { - this.documentFormattingProviderDisposable = vscode.languages.registerDocumentFormattingEditProvider(this.documentSelector, new DocumentFormattingEditProvider(this)); - this.formattingRangeProviderDisposable = vscode.languages.registerDocumentRangeFormattingEditProvider(this.documentSelector, new DocumentRangeFormattingEditProvider(this)); - this.onTypeFormattingProviderDisposable = vscode.languages.registerOnTypeFormattingEditProvider(this.documentSelector, new OnTypeFormattingEditProvider(this), ";", "}", "\n"); - } - if (settings.codeFolding) { - this.codeFoldingProvider = new FoldingRangeProvider(this); - this.codeFoldingProviderDisposable = vscode.languages.registerFoldingRangeProvider(this.documentSelector, this.codeFoldingProvider); - } - if (settings.enhancedColorization && this.semanticTokensLegend) { - this.semanticTokensProvider = new SemanticTokensProvider(this); - this.semanticTokensProviderDisposable = vscode.languages.registerDocumentSemanticTokensProvider(this.documentSelector, this.semanticTokensProvider, this.semanticTokensLegend); - } + const inputCompilerDefaults: configs.CompilerDefaults = await languageClient.sendRequest(QueryCompilerDefaultsRequest, {}); + compilerDefaults = inputCompilerDefaults; + this.configuration.CompilerDefaults = compilerDefaults; - // Listen for messages from the language server. - this.registerNotifications(); - }); + // Only register file watchers, providers, and the real commands after the extension has finished initializing, + // e.g. prevents empty c_cpp_properties.json from generation. + registerCommands(); + + this.registerFileWatcher(); + + this.disposables.push(vscode.languages.registerRenameProvider(this.documentSelector, new RenameProvider(this))); + this.disposables.push(vscode.languages.registerReferenceProvider(this.documentSelector, new FindAllReferencesProvider(this))); + this.disposables.push(vscode.languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(this))); + this.disposables.push(vscode.languages.registerDocumentSymbolProvider(this.documentSelector, new DocumentSymbolProvider(this), undefined)); + this.disposables.push(vscode.languages.registerCodeActionsProvider(this.documentSelector, new CodeActionProvider(this), undefined)); + const settings: CppSettings = new CppSettings(); + if (settings.formattingEngine !== "Disabled") { + this.documentFormattingProviderDisposable = vscode.languages.registerDocumentFormattingEditProvider(this.documentSelector, new DocumentFormattingEditProvider(this)); + this.formattingRangeProviderDisposable = vscode.languages.registerDocumentRangeFormattingEditProvider(this.documentSelector, new DocumentRangeFormattingEditProvider(this)); + this.onTypeFormattingProviderDisposable = vscode.languages.registerOnTypeFormattingEditProvider(this.documentSelector, new OnTypeFormattingEditProvider(this), ";", "}", "\n"); + } + if (settings.codeFolding) { + this.codeFoldingProvider = new FoldingRangeProvider(this); + this.codeFoldingProviderDisposable = vscode.languages.registerFoldingRangeProvider(this.documentSelector, this.codeFoldingProvider); + } + 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(); } else { this.configuration.CompilerDefaults = compilerDefaults; } - }, - (err) => { + } catch (err) { this.isSupported = false; // Running on an OS we don't support yet. if (!failureMessageShown) { failureMessageShown = true; vscode.window.showErrorMessage(localize("unable.to.start", "Unable to start the C/C++ language server. IntelliSense features will be disabled. Error: {0}", String(err))); } - })); + } + }); } catch (err) { this.isSupported = false; // Running on an OS we don't support yet. if (!failureMessageShown) { @@ -1246,7 +1258,8 @@ export class DefaultClient implements Client { experimentalFeatures: workspaceSettings.experimentalFeatures, edgeMessagesDirectory: path.join(util.getExtensionFilePath("bin"), "messages", util.getLocaleId()), localizedStrings: localizedStrings, - supportCuda: util.supportCuda + supportCuda: util.supportCuda, + packageVersion: util.packageJson.version }, middleware: createProtocolFilter(allClients), errorHandler: { @@ -1338,7 +1351,7 @@ export class DefaultClient implements Client { public sendDidChangeSettings(settings: any): void { // Send settings json to native side - this.notifyWhenReady(() => { + this.notifyWhenLanguageClientReady(() => { this.languageClient.sendNotification(DidChangeSettingsNotification, {settings, workspaceFolderUri: this.RootPath}); }); } @@ -1346,7 +1359,7 @@ export class DefaultClient implements Client { public onDidChangeSettings(event: vscode.ConfigurationChangeEvent, isFirstClient: boolean): { [key: string]: string } { this.sendAllSettings(); const changedSettings: { [key: string]: string } = this.settingsTracker.getChangedSettings(); - this.notifyWhenReady(() => { + this.notifyWhenLanguageClientReady(() => { if (Object.keys(changedSettings).length > 0) { if (isFirstClient) { if (changedSettings["commentContinuationPatterns"]) { @@ -1468,7 +1481,7 @@ export class DefaultClient implements Client { this.pauseParsing(); } }; - return this.notifyWhenReady(() => { + return this.notifyWhenLanguageClientReady(() => { if (this.registeredProviders.includes(provider)) { return; // Prevent duplicate processing. } @@ -1486,22 +1499,20 @@ export class DefaultClient implements Client { ask.Value = true; } if (ask.Value) { - ui.showConfigureCustomProviderMessage(() => { + ui.showConfigureCustomProviderMessage(async () => { const message: string = (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 1) ? localize("provider.configure.folder", "{0} would like to configure IntelliSense for the '{1}' folder.", provider.name, this.Name) : localize("provider.configure.this.folder", "{0} would like to configure IntelliSense for this folder.", provider.name); const allow: string = localize("allow.button", "Allow"); const dontAllow: string = localize("dont.allow.button", "Don't Allow"); const askLater: string = localize("ask.me.later.button", "Ask Me Later"); - - return vscode.window.showInformationMessage(message, allow, dontAllow, askLater).then(result => { + return vscode.window.showInformationMessage(message, allow, dontAllow, askLater).then(async result => { switch (result) { case allow: { - this.configuration.updateCustomConfigurationProvider(provider.extensionId).then(() => { - onRegistered(); - ask.Value = false; - telemetry.logLanguageServerEvent("customConfigurationProvider", { "providerId": provider.extensionId }); - }); + await this.configuration.updateCustomConfigurationProvider(provider.extensionId); + onRegistered(); + ask.Value = false; + telemetry.logLanguageServerEvent("customConfigurationProvider", { "providerId": provider.extensionId }); return true; } case dontAllow: { @@ -1514,8 +1525,7 @@ export class DefaultClient implements Client { } return false; }); - }, - () => ask.Value = false); + }, () => ask.Value = false); } } else if (isSameProviderExtensionId(selectedProvider, provider.extensionId)) { onRegistered(); @@ -1528,7 +1538,7 @@ export class DefaultClient implements Client { } public updateCustomConfigurations(requestingProvider?: CustomConfigurationProvider1): Thenable { - return this.notifyWhenReady(() => { + return this.notifyWhenLanguageClientReady(() => { if (!this.configurationProvider) { this.clearCustomConfigurations(); return; @@ -1550,8 +1560,8 @@ export class DefaultClient implements Client { }); } - public updateCustomBrowseConfiguration(requestingProvider?: CustomConfigurationProvider1): Thenable { - return this.notifyWhenReady(() => { + public updateCustomBrowseConfiguration(requestingProvider?: CustomConfigurationProvider1): Promise { + return this.notifyWhenLanguageClientReady(() => { if (!this.configurationProvider) { return; } @@ -1671,7 +1681,7 @@ export class DefaultClient implements Client { } public async rescanFolder(): Promise { - await this.notifyWhenReady(() => this.languageClient.sendNotification(RescanFolderNotification)); + await this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(RescanFolderNotification)); } public async provideCustomConfiguration(docUri: vscode.Uri, requestFile?: string): Promise { @@ -1683,16 +1693,16 @@ export class DefaultClient implements Client { const providerId: string | undefined = this.configurationProvider; if (!providerId) { onFinished(); - return Promise.resolve(); + return; } const provider: CustomConfigurationProvider1 | undefined = getCustomConfigProviders().get(providerId); if (!provider) { onFinished(); - return Promise.resolve(); + return; } if (!provider.isReady) { onFinished(); - return Promise.reject(`${this.configurationProvider} is not ready`); + throw new Error(`${this.configurationProvider} is not ready`); } return this.queueBlockingTask(async () => { const tokenSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource(); @@ -1708,7 +1718,7 @@ export class DefaultClient implements Client { if (!response.candidates || response.candidates.length === 0) { // If we didn't receive any candidates, no configuration is needed. onFinished(); - return Promise.resolve(); + return; } // Need to loop through candidates, to see if we can get a custom configuration from any of them. @@ -1734,43 +1744,42 @@ export class DefaultClient implements Client { } } }; - return this.callTaskWithTimeout(provideConfigurationAsync, configProviderTimeout, tokenSource).then( - (configs?: SourceFileConfigurationItem[] | null) => { - if (configs && configs.length > 0) { - this.sendCustomConfigurations(configs, provider.version); - } + const configs: SourceFileConfigurationItem[] | null | undefined = await this.callTaskWithTimeout(provideConfigurationAsync, configProviderTimeout, tokenSource); + try { + if (configs && configs.length > 0) { + this.sendCustomConfigurations(configs, provider.version); + } + onFinished(); + } catch (err) { + if (requestFile) { onFinished(); - }, - (err) => { - if (requestFile) { - onFinished(); + return; + } + const settings: CppSettings = new CppSettings(this.RootUri); + if (settings.configurationWarnings === "Enabled" && !this.isExternalHeader(docUri) && !vscode.debug.activeDebugSession) { + const dismiss: string = localize("dismiss.button", "Dismiss"); + const disable: string = localize("diable.warnings.button", "Disable Warnings"); + const configName: string | undefined = this.configuration.CurrentConfiguration?.name; + if (!configName) { return; } - const settings: CppSettings = new CppSettings(this.RootUri); - if (settings.configurationWarnings === "Enabled" && !this.isExternalHeader(docUri) && !vscode.debug.activeDebugSession) { - const dismiss: string = localize("dismiss.button", "Dismiss"); - const disable: string = localize("diable.warnings.button", "Disable Warnings"); - const configName: string | undefined = this.configuration.CurrentConfiguration?.name; - if (!configName) { - return; - } - let message: string = localize("unable.to.provide.configuraiton", - "{0} is unable to provide IntelliSense configuration information for '{1}'. Settings from the '{2}' configuration will be used instead.", - providerName, docUri.fsPath, configName); - if (err) { - message += ` (${err})`; - } + let message: string = localize("unable.to.provide.configuraiton", + "{0} is unable to provide IntelliSense configuration information for '{1}'. Settings from the '{2}' configuration will be used instead.", + providerName, docUri.fsPath, configName); + if (err) { + message += ` (${err})`; + } - vscode.window.showInformationMessage(message, dismiss, disable).then(response => { - switch (response) { - case disable: { - settings.toggleSetting("configurationWarnings", "Enabled", "Disabled"); - break; - } + vscode.window.showInformationMessage(message, dismiss, disable).then(response => { + switch (response) { + case disable: { + settings.toggleSetting("configurationWarnings", "Enabled", "Disabled"); + break; } - }); - } - }); + } + }); + } + } }); } @@ -1841,7 +1850,7 @@ export class DefaultClient implements Client { text: document.getText() } }; - this.notifyWhenReady(() => this.languageClient.sendNotification(DidOpenNotification, params)); + this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(DidOpenNotification, params)); this.trackedDocuments.add(document); } @@ -1850,9 +1859,9 @@ export class DefaultClient implements Client { * before attempting to send messages or operate on the client. */ - public queueTask(task: () => Thenable): Thenable { + public async queueTask(task: () => Thenable): Promise { if (this.isSupported) { - const nextTask: () => Thenable = async () => { + const nextTask: () => Promise = async () => { try { return await task(); } catch (err) { @@ -1860,16 +1869,17 @@ export class DefaultClient implements Client { throw err; } }; - if (pendingTask && !pendingTask.Done) { // We don't want the queue to stall because of a rejected promise. - return pendingTask.getPromise().then(nextTask, nextTask); + try { + await pendingTask.getPromise(); + } catch (e) { } } else { pendingTask = undefined; - return nextTask(); } + return nextTask(); } else { - return Promise.reject(localize("unsupported.client", "Unsupported client")); + throw new Error(localize("unsupported.client", "Unsupported client")); } } @@ -1878,16 +1888,16 @@ export class DefaultClient implements Client { * during language client startup and for custom configuration providers. * @param task The task that blocks all future tasks */ - private queueBlockingTask(task: () => Thenable): Thenable { + private async queueBlockingTask(task: () => Thenable): Promise { if (this.isSupported) { pendingTask = new util.BlockingTask(task, pendingTask); return pendingTask.getPromise(); } else { - return Promise.reject(localize("unsupported.client", "Unsupported client")); + throw new Error (localize("unsupported.client", "Unsupported client")); } } - private callTaskWithTimeout(task: () => Thenable, ms: number, cancelToken?: vscode.CancellationTokenSource): Thenable { + private callTaskWithTimeout(task: () => Thenable, ms: number, cancelToken?: vscode.CancellationTokenSource): Promise { let timer: NodeJS.Timer; // Create a promise that rejects in milliseconds const timeout: () => Promise = () => new Promise((resolve, reject) => { @@ -1916,13 +1926,20 @@ export class DefaultClient implements Client { return this.queueTask(request); } - public notifyWhenReady(notify: () => T): Thenable { - const task: () => Thenable = () => new Promise(resolve => { + public notifyWhenLanguageClientReady(notify: () => T): Promise { + const task: () => Promise = () => new Promise(resolve => { resolve(notify()); }); return this.queueTask(task); } + public awaitUntilLanguageClientReady(): Thenable { + const task: () => Thenable = () => new Promise(resolve => { + resolve(); + }); + return this.queueTask(task); + } + /** * listen for notifications from the language server. */ @@ -2116,30 +2133,29 @@ export class DefaultClient implements Client { if (!client.configuration.CurrentConfiguration?.configurationProvider) { const showIntelliSenseFallbackMessage: PersistentState = new PersistentState("CPP.showIntelliSenseFallbackMessage", true); if (showIntelliSenseFallbackMessage.Value) { - ui.showConfigureIncludePathMessage(() => { + ui.showConfigureIncludePathMessage(async () => { const configJSON: string = localize("configure.json.button", "Configure (JSON)"); const configUI: string = localize("configure.ui.button", "Configure (UI)"); const dontShowAgain: string = localize("dont.show.again", "Don't Show Again"); const fallbackMsg: string = client.configuration.VcpkgInstalled ? localize("update.your.intellisense.settings", "Update your IntelliSense settings or use Vcpkg to install libraries to help find missing headers.") : localize("configure.your.intellisense.settings", "Configure your IntelliSense settings to help find missing headers."); - return vscode.window.showInformationMessage(fallbackMsg, configJSON, configUI, dontShowAgain).then((value) => { + return vscode.window.showInformationMessage(fallbackMsg, configJSON, configUI, dontShowAgain).then(async (value) => { + let commands: string[]; switch (value) { case configJSON: - vscode.commands.getCommands(true).then((commands: string[]) => { - if (commands.indexOf("workbench.action.problems.focus") >= 0) { - vscode.commands.executeCommand("workbench.action.problems.focus"); - } - }); + commands = await vscode.commands.getCommands(true); + if (commands.indexOf("workbench.action.problems.focus") >= 0) { + vscode.commands.executeCommand("workbench.action.problems.focus"); + } client.handleConfigurationEditJSONCommand(); telemetry.logLanguageServerEvent("SettingsCommand", { "toast": "json" }, undefined); break; case configUI: - vscode.commands.getCommands(true).then((commands: string[]) => { - if (commands.indexOf("workbench.action.problems.focus") >= 0) { - vscode.commands.executeCommand("workbench.action.problems.focus"); - } - }); + commands = await vscode.commands.getCommands(true); + if (commands.indexOf("workbench.action.problems.focus") >= 0) { + vscode.commands.executeCommand("workbench.action.problems.focus"); + } client.handleConfigurationEditUICommand(); telemetry.logLanguageServerEvent("SettingsCommand", { "toast": "ui" }, undefined); break; @@ -2149,8 +2165,7 @@ export class DefaultClient implements Client { } return true; }); - }, - () => showIntelliSenseFallbackMessage.Value = false); + }, () => showIntelliSenseFallbackMessage.Value = false); } } } @@ -2241,7 +2256,7 @@ export class DefaultClient implements Client { ? localize("auto-configure.intellisense.folder", "Would you like to use {0} to auto-configure IntelliSense for the '{1}' folder?", compileCommandStr, client.Name) : localize("auto-configure.intellisense.this.folder", "Would you like to use {0} to auto-configure IntelliSense for this folder?", compileCommandStr); - ui.showConfigureCompileCommandsMessage(() => { + ui.showConfigureCompileCommandsMessage(async () => { const yes: string = localize("yes.button", "Yes"); const no: string = localize("no.button", "No"); const askLater: string = localize("ask.me.later.button", "Ask Me Later"); @@ -2285,7 +2300,7 @@ export class DefaultClient implements Client { * notifications to the language server */ public activeDocumentChanged(document: vscode.TextDocument): void { - this.notifyWhenReady(() => { + this.notifyWhenLanguageClientReady(() => { this.languageClient.sendNotification(ActiveDocumentChangeNotification, this.languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document)); }); } @@ -2299,13 +2314,13 @@ export class DefaultClient implements Client { } public selectionChanged(selection: Range): void { - this.notifyWhenReady(() => { + this.notifyWhenLanguageClientReady(() => { this.languageClient.sendNotification(TextEditorSelectionChangeNotification, selection); }); } public resetDatabase(): void { - this.notifyWhenReady(() => this.languageClient.sendNotification(ResetDatabaseNotification)); + this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(ResetDatabaseNotification)); } /** @@ -2316,16 +2331,20 @@ export class DefaultClient implements Client { } public pauseParsing(): void { - this.notifyWhenReady(() => this.languageClient.sendNotification(PauseParsingNotification)); + this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(PauseParsingNotification)); } public resumeParsing(): void { - this.notifyWhenReady(() => this.languageClient.sendNotification(ResumeParsingNotification)); + this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(ResumeParsingNotification)); } private doneInitialCustomBrowseConfigurationCheck: Boolean = false; - private onConfigurationsChanged(configurations: configs.Configuration[]): void { + private onConfigurationsChanged(cppProperties: configs.CppProperties): void { + if (!cppProperties.Configurations) { + return; + } + const configurations: configs.Configuration[] = cppProperties.Configurations; const params: CppPropertiesParams = { configurations: configurations, currentConfiguration: this.configuration.CurrentConfigurationIndex, @@ -2339,29 +2358,20 @@ export class DefaultClient implements Client { c.compilerPath = compilerPathAndArgs.compilerPath; c.compilerArgs = compilerPathAndArgs.additionalArgs; }); - let sendLastCustomBrowseConfiguration: boolean = false; - const rootFolder: vscode.WorkspaceFolder | undefined = this.RootFolder; - if (!rootFolder) { - this.languageClient.sendNotification(ChangeCppPropertiesNotification, params); - } else { - const lastCustomBrowseConfigurationProviderId: PersistentFolderState = new PersistentFolderState("CPP.lastCustomBrowseConfigurationProviderId", undefined, rootFolder); - const lastCustomBrowseConfiguration: PersistentFolderState = new PersistentFolderState("CPP.lastCustomBrowseConfiguration", undefined, rootFolder); + this.languageClient.sendNotification(ChangeCppPropertiesNotification, params); + const lastCustomBrowseConfigurationProviderId: PersistentFolderState | undefined = cppProperties.LastCustomBrowseConfigurationProviderId; + const lastCustomBrowseConfiguration: PersistentFolderState | undefined = cppProperties.LastCustomBrowseConfiguration; + if (!!lastCustomBrowseConfigurationProviderId && !!lastCustomBrowseConfiguration) { if (!this.doneInitialCustomBrowseConfigurationCheck) { // Send the last custom browse configuration we received from this provider. // This ensures we don't start tag parsing without it, and undo'ing work we have to re-do when the (likely same) browse config arrives // Should only execute on launch, for the initial delivery of configurations - if (isSameProviderExtensionId(lastCustomBrowseConfigurationProviderId.Value, configurations[params.currentConfiguration].configurationProvider)) { - if (lastCustomBrowseConfiguration.Value) { - sendLastCustomBrowseConfiguration = true; - params.isReady = false; - } + if (lastCustomBrowseConfiguration.Value) { + this.sendCustomBrowseConfiguration(lastCustomBrowseConfiguration.Value, lastCustomBrowseConfigurationProviderId.Value); + params.isReady = false; } this.doneInitialCustomBrowseConfigurationCheck = true; } - this.languageClient.sendNotification(ChangeCppPropertiesNotification, params); - if (sendLastCustomBrowseConfiguration) { - this.sendCustomBrowseConfiguration(lastCustomBrowseConfiguration.Value, lastCustomBrowseConfigurationProviderId.Value); - } } const configName: string | undefined = configurations[params.currentConfiguration].name ?? ""; this.model.activeConfigName.setValueIfActive(configName); @@ -2381,7 +2391,7 @@ export class DefaultClient implements Client { currentConfiguration: index, workspaceFolderUri: this.RootPath }; - this.notifyWhenReady(() => { + this.notifyWhenLanguageClientReady(() => { this.languageClient.sendNotification(ChangeSelectedSettingNotification, params); let configName: string = ""; if (this.configuration.ConfigurationNames) { @@ -2397,7 +2407,7 @@ export class DefaultClient implements Client { uri: vscode.Uri.file(path).toString(), workspaceFolderUri: this.RootPath }; - this.notifyWhenReady(() => this.languageClient.sendNotification(ChangeCompileCommandsNotification, params)); + this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(ChangeCompileCommandsNotification, params)); } private isSourceFileConfigurationItem(input: any, providerVersion: Version): input is SourceFileConfigurationItem { @@ -2560,7 +2570,7 @@ export class DefaultClient implements Client { const params: WorkspaceFolderParams = { workspaceFolderUri: this.RootPath }; - this.notifyWhenReady(() => this.languageClient.sendNotification(ClearCustomConfigurationsNotification, params)); + this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(ClearCustomConfigurationsNotification, params)); } private clearCustomBrowseConfiguration(): void { @@ -2568,81 +2578,70 @@ export class DefaultClient implements Client { const params: WorkspaceFolderParams = { workspaceFolderUri: this.RootPath }; - this.notifyWhenReady(() => this.languageClient.sendNotification(ClearCustomBrowseConfigurationNotification, params)); + this.notifyWhenLanguageClientReady(() => this.languageClient.sendNotification(ClearCustomBrowseConfigurationNotification, params)); } /** * command handlers */ - public handleConfigurationSelectCommand(): void { - this.notifyWhenReady(() => { - const configNames: string[] | undefined = this.configuration.ConfigurationNames; - if (configNames) { - ui.showConfigurations(configNames) - .then((index: number) => { - if (index < 0) { - return; - } - this.configuration.select(index); - }); + public async handleConfigurationSelectCommand(): Promise { + await this.awaitUntilLanguageClientReady(); + const configNames: string[] | undefined = this.configuration.ConfigurationNames; + if (configNames) { + const index: number = await ui.showConfigurations(configNames); + if (index < 0) { + return; } - }); + this.configuration.select(index); + } } - public handleConfigurationProviderSelectCommand(): void { - this.notifyWhenReady(() => { - ui.showConfigurationProviders(this.configuration.CurrentConfigurationProvider) - .then(extensionId => { - if (extensionId === undefined) { - // operation was canceled. - return; - } - this.configuration.updateCustomConfigurationProvider(extensionId) - .then(() => { - if (extensionId) { - const provider: CustomConfigurationProvider1 | undefined = getCustomConfigProviders().get(extensionId); - this.updateCustomBrowseConfiguration(provider); - this.updateCustomConfigurations(provider); - telemetry.logLanguageServerEvent("customConfigurationProvider", { "providerId": extensionId }); - } else { - this.clearCustomConfigurations(); - this.clearCustomBrowseConfiguration(); - } - }); - }); - }); + public async handleConfigurationProviderSelectCommand(): Promise { + await this.awaitUntilLanguageClientReady(); + const extensionId: string | undefined = await ui.showConfigurationProviders(this.configuration.CurrentConfigurationProvider); + if (extensionId === undefined) { + // operation was canceled. + return; + } + await this.configuration.updateCustomConfigurationProvider(extensionId); + if (extensionId) { + const provider: CustomConfigurationProvider1 | undefined = getCustomConfigProviders().get(extensionId); + this.updateCustomBrowseConfiguration(provider); + this.updateCustomConfigurations(provider); + telemetry.logLanguageServerEvent("customConfigurationProvider", { "providerId": extensionId }); + } else { + this.clearCustomConfigurations(); + this.clearCustomBrowseConfiguration(); + } } - public handleShowParsingCommands(): void { - this.notifyWhenReady(() => { - ui.showParsingCommands() - .then((index: number) => { - if (index === 0) { - this.pauseParsing(); - } else if (index === 1) { - this.resumeParsing(); - } - }); - }); + public async handleShowParsingCommands(): Promise { + await this.awaitUntilLanguageClientReady(); + const index: number = await ui.showParsingCommands(); + if (index === 0) { + this.pauseParsing(); + } else if (index === 1) { + this.resumeParsing(); + } } - public handleConfigurationEditCommand(): void { - this.notifyWhenReady(() => this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument)); + public handleConfigurationEditCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { + this.notifyWhenLanguageClientReady(() => this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument, viewColumn)); } - public handleConfigurationEditJSONCommand(): void { - this.notifyWhenReady(() => this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument)); + public handleConfigurationEditJSONCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { + this.notifyWhenLanguageClientReady(() => this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument, viewColumn)); } - public handleConfigurationEditUICommand(): void { - this.notifyWhenReady(() => this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument)); + public handleConfigurationEditUICommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { + this.notifyWhenLanguageClientReady(() => this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument, viewColumn)); } public handleAddToIncludePathCommand(path: string): void { - this.notifyWhenReady(() => this.configuration.addToIncludePathCommand(path)); + this.notifyWhenLanguageClientReady(() => this.configuration.addToIncludePathCommand(path)); } - public handleGoToDirectiveInGroup(next: boolean): void { + public async handleGoToDirectiveInGroup(next: boolean): Promise { const editor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; if (editor) { const params: GoToDirectiveInGroupParams = { @@ -2651,26 +2650,49 @@ export class DefaultClient implements Client { next: next }; - this.languageClient.sendRequest(GoToDirectiveInGroupRequest, params) - .then((response) => { - if (response) { - const p: vscode.Position = new vscode.Position(response.line, response.character); - const r: vscode.Range = new vscode.Range(p, p); - - // Check if still the active document. - const currentEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; - if (currentEditor && editor.document.uri === currentEditor.document.uri) { - currentEditor.selection = new vscode.Selection(r.start, r.end); - currentEditor.revealRange(r); - } - } - }); + const response: Position | undefined = await this.languageClient.sendRequest(GoToDirectiveInGroupRequest, params); + if (response) { + const p: vscode.Position = new vscode.Position(response.line, response.character); + const r: vscode.Range = new vscode.Range(p, p); + + // Check if still the active document. + const currentEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; + if (currentEditor && editor.document.uri === currentEditor.document.uri) { + currentEditor.selection = new vscode.Selection(r.start, r.end); + currentEditor.revealRange(r); + } + } + } + } + + public async handleCheckForCompiler(): Promise { + await this.awaitUntilLanguageClientReady(); + const compilers: configs.KnownCompiler[] | undefined = await this.getKnownCompilers(); + if (!compilers || compilers.length === 0) { + const compilerName: string = process.platform === "win32" ? "MSVC" : (process.platform === "darwin" ? "Clang" : "GCC"); + vscode.window.showInformationMessage(localize("no.compilers.found", "No C++ compilers were found on your system. For your platform, we recommend installing {0} using the instructions in the editor.", compilerName), { modal: true }); + } else { + const header: string = localize("compilers.found", "We found the following C++ compiler(s) on your system:"); + let message: string = header + "\n"; + const settings: CppSettings = new CppSettings(this.RootUri); + const pathSeparator: string | undefined = settings.preferredPathSeparator; + compilers.forEach(compiler => { + if (pathSeparator !== "Forward Slash") { + message += "\n" + compiler.path.replace(/\//g, '\\'); + } else { + message += "\n" + compiler.path.replace(/\\/g, '/'); + } + }); + if (compilers.length > 1) { + message += "\n\n" + localize("compilers.found.message", "You can specify which compiler to use in your project's IntelliSense Configuration."); + } + vscode.window.showInformationMessage(message, { modal: true }); } } public onInterval(): void { // These events can be discarded until the language client is ready. - // Don't queue them up with this.notifyWhenReady calls. + // Don't queue them up with this.notifyWhenLanguageClientReady calls. if (this.innerLanguageClient !== undefined && this.configuration !== undefined) { this.languageClient.sendNotification(IntervalTimerNotification); this.configuration.checkCppProperties(); @@ -2709,7 +2731,7 @@ export class DefaultClient implements Client { } public handleReferencesIcon(): void { - this.notifyWhenReady(() => { + this.notifyWhenLanguageClientReady(() => { const cancelling: boolean = DefaultClient.referencesPendingCancellations.length > 0; if (!cancelling) { workspaceReferences.UpdateProgressUICounter(this.model.referencesCommandMode.Value); @@ -2815,9 +2837,10 @@ class NullClient implements Client { getCurrentCompilerPathAndArgs(): Thenable { return Promise.resolve(undefined); } getKnownCompilers(): Thenable { return Promise.resolve([]); } takeOwnership(document: vscode.TextDocument): void {} - queueTask(task: () => Thenable): Thenable { return task(); } + queueTask(task: () => Thenable): Promise { return Promise.resolve(task()); } requestWhenReady(request: () => Thenable): Thenable { return request(); } - notifyWhenReady(notify: () => void): void {} + notifyWhenLanguageClientReady(notify: () => void): void {} + awaitUntilLanguageClientReady(): void {} requestSwitchHeaderSource(rootPath: string, fileName: string): Thenable { return Promise.resolve(""); } activeDocumentChanged(document: vscode.TextDocument): void {} activate(): void {} @@ -2826,15 +2849,16 @@ class NullClient implements Client { deactivate(): void {} pauseParsing(): void {} resumeParsing(): void {} - handleConfigurationSelectCommand(): void {} - handleConfigurationProviderSelectCommand(): void {} - handleShowParsingCommands(): void {} + handleConfigurationSelectCommand(): Promise { return Promise.resolve(); } + handleConfigurationProviderSelectCommand(): Promise { return Promise.resolve(); } + handleShowParsingCommands(): Promise { return Promise.resolve(); } handleReferencesIcon(): void {} - handleConfigurationEditCommand(): void {} - handleConfigurationEditJSONCommand(): void {} - handleConfigurationEditUICommand(): void {} + handleConfigurationEditCommand(viewColumn?: vscode.ViewColumn): void {} + handleConfigurationEditJSONCommand(viewColumn?: vscode.ViewColumn): void {} + handleConfigurationEditUICommand(viewColumn?: vscode.ViewColumn): void {} handleAddToIncludePathCommand(path: string): void { } - handleGoToDirectiveInGroup(next: boolean): void {} + handleGoToDirectiveInGroup(next: boolean): Promise { return Promise.resolve(); } + handleCheckForCompiler(): Promise { return Promise.resolve(); } onInterval(): void {} dispose(): void { this.booleanEvent.dispose(); diff --git a/Extension/src/LanguageServer/configurations.ts b/Extension/src/LanguageServer/configurations.ts index 83ac2578a1..ad250170ef 100644 --- a/Extension/src/LanguageServer/configurations.ts +++ b/Extension/src/LanguageServer/configurations.ts @@ -20,6 +20,7 @@ import * as jsonc from 'comment-json'; import * as nls from 'vscode-nls'; import { setTimeout } from 'timers'; import * as which from 'which'; +import { WorkspaceBrowseConfiguration } from 'vscode-cpptools'; nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); @@ -138,13 +139,15 @@ export class CppProperties { private defaultCustomConfigurationVariables?: { [key: string]: string }; private readonly configurationGlobPattern: string = "c_cpp_properties.json"; private disposables: vscode.Disposable[] = []; - private configurationsChanged = new vscode.EventEmitter(); + private configurationsChanged = new vscode.EventEmitter(); private selectionChanged = new vscode.EventEmitter(); private compileCommandsChanged = new vscode.EventEmitter(); private diagnosticCollection: vscode.DiagnosticCollection; private prevSquiggleMetrics: Map = new Map(); private rootfs: string | null = null; private settingsPanel?: SettingsPanel; + private lastCustomBrowseConfiguration: PersistentFolderState | undefined; + private lastCustomBrowseConfigurationProviderId: PersistentFolderState | undefined; // Any time the default settings are parsed and assigned to `this.configurationJson`, // we want to track when the default includes have been added to it. @@ -155,6 +158,8 @@ export class CppProperties { const rootPath: string = rootUri ? rootUri.fsPath : ""; if (workspaceFolder) { this.currentConfigurationIndex = new PersistentFolderState("CppProperties.currentConfigurationIndex", -1, workspaceFolder); + this.lastCustomBrowseConfiguration = new PersistentFolderState("CPP.lastCustomBrowseConfiguration", undefined, workspaceFolder); + this.lastCustomBrowseConfigurationProviderId = new PersistentFolderState("CPP.lastCustomBrowseConfigurationProviderId", undefined, workspaceFolder); } this.configFolder = path.join(rootPath, ".vscode"); this.diagnosticCollection = vscode.languages.createDiagnosticCollection(rootPath); @@ -166,7 +171,7 @@ export class CppProperties { this.disposables.push(vscode.Disposable.from(this.configurationsChanged, this.selectionChanged, this.compileCommandsChanged)); } - public get ConfigurationsChanged(): vscode.Event { return this.configurationsChanged.event; } + public get ConfigurationsChanged(): vscode.Event { return this.configurationsChanged.event; } public get SelectionChanged(): vscode.Event { return this.selectionChanged.event; } public get CompileCommandsChanged(): vscode.Event { return this.compileCommandsChanged.event; } public get Configurations(): Configuration[] | undefined { return this.configurationJson ? this.configurationJson.configurations : undefined; } @@ -174,6 +179,9 @@ export class CppProperties { public get CurrentConfiguration(): Configuration | undefined { return this.Configurations ? this.Configurations[this.CurrentConfigurationIndex] : undefined; } public get KnownCompiler(): KnownCompiler[] | undefined { return this.knownCompilers; } + public get LastCustomBrowseConfiguration(): PersistentFolderState | undefined { return this.lastCustomBrowseConfiguration; } + public get LastCustomBrowseConfigurationProviderId(): PersistentFolderState | undefined { return this.lastCustomBrowseConfigurationProviderId; } + public get CurrentConfigurationProvider(): string | undefined { if (this.CurrentConfiguration?.configurationProvider) { return this.CurrentConfiguration.configurationProvider; @@ -289,7 +297,7 @@ export class CppProperties { private onConfigurationsChanged(): void { if (this.Configurations) { - this.configurationsChanged.fire(this.Configurations); + this.configurationsChanged.fire(this); } } @@ -436,9 +444,13 @@ export class CppProperties { private async readNodeAddonIncludeLocations(rootPath: string): Promise { let error: Error | undefined; let pdjFound: boolean = false; - const package_json: any = await fs.promises.readFile(path.join(rootPath, "package.json"), "utf8") - .then(pdj => {pdjFound = true; return JSON.parse(pdj); }) - .catch(e => (error = e)); + let packageJson: any; + try { + packageJson = JSON.parse(await fs.promises.readFile(path.join(rootPath, "package.json"), "utf8")); + pdjFound = true; + } catch (err) { + error = err; + } if (!error) { try { @@ -457,35 +469,37 @@ export class CppProperties { } for (const [dep, execCmd] of nodeAddonMap) { - if (dep in package_json.dependencies) { - let stdout: string | void = await util.execChildProcess(execCmd, rootPath) - .catch((error) => console.log('readNodeAddonIncludeLocations', error.message)); - if (!stdout) { - continue; - } - - // cleanup newlines - if (stdout[stdout.length - 1] === "\n") { - stdout = stdout.slice(0, -1); - } - // node-addon-api returns a quoted string, e.g., '"/home/user/dir/node_modules/node-addon-api"'. - if (stdout[0] === "\"" && stdout[stdout.length - 1] === "\"") { - stdout = stdout.slice(1, -1); - } + if (dep in packageJson.dependencies) { + try { + let stdout: string | void = await util.execChildProcess(execCmd, rootPath); + if (!stdout) { + continue; + } + // cleanup newlines + if (stdout[stdout.length - 1] === "\n") { + stdout = stdout.slice(0, -1); + } + // node-addon-api returns a quoted string, e.g., '"/home/user/dir/node_modules/node-addon-api"'. + if (stdout[0] === "\"" && stdout[stdout.length - 1] === "\"") { + stdout = stdout.slice(1, -1); + } - // at this time both node-addon-api and nan return their own directory so this test is not really - // needed. but it does future proof the code. - if (!await util.checkDirectoryExists(stdout)) { - // nan returns a path relative to rootPath causing the previous check to fail because this code - // is executing in vscode's working directory. - stdout = path.join(rootPath, stdout); + // at this time both node-addon-api and nan return their own directory so this test is not really + // needed. but it does future proof the code. if (!await util.checkDirectoryExists(stdout)) { - error = new Error(`${dep} directory ${stdout} doesn't exist`); - stdout = ''; + // nan returns a path relative to rootPath causing the previous check to fail because this code + // is executing in vscode's working directory. + stdout = path.join(rootPath, stdout); + if (!await util.checkDirectoryExists(stdout)) { + error = new Error(`${dep} directory ${stdout} doesn't exist`); + stdout = ''; + } } - } - if (stdout) { - this.nodeAddonIncludes.push(stdout); + if (stdout) { + this.nodeAddonIncludes.push(stdout); + } + } catch (err) { + console.log('readNodeAddonIncludeLocations', err.message); } } } @@ -760,17 +774,18 @@ export class CppProperties { configuration.cStandard = this.updateConfigurationString(configuration.cStandard, settings.defaultCStandard, env); configuration.cppStandard = this.updateConfigurationString(configuration.cppStandard, settings.defaultCppStandard, env); configuration.intelliSenseMode = this.updateConfigurationString(configuration.intelliSenseMode, settings.defaultIntelliSenseMode, env); - configuration.intelliSenseModeIsExplicit = true; - configuration.cStandardIsExplicit = true; - configuration.cppStandardIsExplicit = true; - configuration.compilerPathIsExplicit = true; + configuration.intelliSenseModeIsExplicit = configuration.intelliSenseModeIsExplicit || settings.defaultIntelliSenseMode !== ""; + configuration.cStandardIsExplicit = configuration.cStandardIsExplicit || settings.defaultCStandard !== ""; + configuration.cppStandardIsExplicit = configuration.cppStandardIsExplicit || settings.defaultCppStandard !== ""; + configuration.compilerPathIsExplicit = false; if (!configuration.compileCommands) { // compile_commands.json already specifies a compiler. compilerPath overrides the compile_commands.json compiler so // don't set a default when compileCommands is in use. configuration.compilerPath = this.updateConfigurationString(configuration.compilerPath, settings.defaultCompilerPath, env, true); + configuration.compilerPathIsExplicit = configuration.compilerPath !== undefined; if (configuration.compilerPath === undefined) { - configuration.compilerPathIsExplicit = false; if (!!this.defaultCompilerPath) { + // If no config value yet set for these, pick up values from the defaults, but don't consider them explicit. configuration.compilerPath = this.defaultCompilerPath; if (!configuration.cStandard && !!this.defaultCStandard) { configuration.cStandard = this.defaultCStandard; @@ -803,8 +818,10 @@ export class CppProperties { } if (configuration.compilerPath === null) { configuration.compilerPath = undefined; + configuration.compilerPathIsExplicit = true; } else if (configuration.compilerPath !== undefined) { configuration.compilerPath = util.resolveVariables(configuration.compilerPath, env); + configuration.compilerPathIsExplicit = true; } } @@ -834,25 +851,45 @@ export class CppProperties { configuration.browse.limitSymbolsToIncludedHeaders = this.updateConfigurationStringOrBoolean(configuration.browse.limitSymbolsToIncludedHeaders, settings.defaultLimitSymbolsToIncludedHeaders, env); configuration.browse.databaseFilename = this.updateConfigurationString(configuration.browse.databaseFilename, settings.defaultDatabaseFilename, env); - // If there is no c_cpp_properties.json, there are no relevant C_Cpp.default.* settings set, - // and there is only 1 registered custom config provider, default to using that provider. - const providers: CustomConfigurationProviderCollection = getCustomConfigProviders(); - if (providers.size === 1 - && !this.propertiesFile - && !settings.defaultCompilerPath - && settings.defaultCompilerPath !== "" - && !settings.defaultIncludePath - && !settings.defaultDefines - && !settings.defaultMacFrameworkPath - && settings.defaultWindowsSdkVersion === "" - && !settings.defaultForcedInclude - && settings.defaultCompileCommands === "" - && !settings.defaultCompilerArgs - && settings.defaultCStandard === "" - && settings.defaultCppStandard === "" - && settings.defaultIntelliSenseMode === "" - && settings.defaultConfigurationProvider === "") { - providers.forEach(provider => { configuration.configurationProvider = provider.extensionId; }); + if (i === this.CurrentConfigurationIndex) { + // If there is no c_cpp_properties.json, there are no relevant C_Cpp.default.* settings set, + // and there is only 1 registered custom config provider, default to using that provider. + const providers: CustomConfigurationProviderCollection = getCustomConfigProviders(); + const hasEmptyConfiguration: boolean = !this.propertiesFile + && !settings.defaultCompilerPath + && settings.defaultCompilerPath !== "" + && !settings.defaultIncludePath + && !settings.defaultDefines + && !settings.defaultMacFrameworkPath + && settings.defaultWindowsSdkVersion === "" + && !settings.defaultForcedInclude + && settings.defaultCompileCommands === "" + && !settings.defaultCompilerArgs + && settings.defaultCStandard === "" + && settings.defaultCppStandard === "" + && settings.defaultIntelliSenseMode === "" + && settings.defaultConfigurationProvider === ""; + + // Only keep a cached custom browse config if there is an empty configuration, + // or if a specified provider ID has not changed. + let keepCachedBrowseConfig: boolean = true; + if (hasEmptyConfiguration) { + if (providers.size === 1) { + providers.forEach(provider => { configuration.configurationProvider = provider.extensionId; }); + if (this.lastCustomBrowseConfigurationProviderId !== undefined) { + keepCachedBrowseConfig = configuration.configurationProvider === this.lastCustomBrowseConfigurationProviderId.Value; + } + } else if (this.lastCustomBrowseConfigurationProviderId !== undefined + && !!this.lastCustomBrowseConfigurationProviderId.Value) { + // Use the last configuration provider we received a browse config from as the provider ID. + configuration.configurationProvider = this.lastCustomBrowseConfigurationProviderId.Value; + } + } else if (this.lastCustomBrowseConfigurationProviderId !== undefined) { + keepCachedBrowseConfig = configuration.configurationProvider === this.lastCustomBrowseConfigurationProviderId.Value; + } + if (!keepCachedBrowseConfig && this.lastCustomBrowseConfiguration !== undefined) { + this.lastCustomBrowseConfiguration.Value = undefined; + } } } @@ -908,31 +945,29 @@ export class CppProperties { } // onBeforeOpen will be called after c_cpp_properties.json have been created (if it did not exist), but before the document is opened. - public handleConfigurationEditCommand(onBeforeOpen: (() => void) | undefined, showDocument: (document: vscode.TextDocument) => void): void { + public handleConfigurationEditCommand(onBeforeOpen: (() => void) | undefined, showDocument: (document: vscode.TextDocument, column?: vscode.ViewColumn) => void, viewColumn?: vscode.ViewColumn): void { const otherSettings: OtherSettings = new OtherSettings(this.rootUri); if (otherSettings.settingsEditor === "ui") { - this.handleConfigurationEditUICommand(onBeforeOpen, showDocument); + this.handleConfigurationEditUICommand(onBeforeOpen, showDocument, viewColumn); } else { - this.handleConfigurationEditJSONCommand(onBeforeOpen, showDocument); + this.handleConfigurationEditJSONCommand(onBeforeOpen, showDocument, viewColumn); } } // onBeforeOpen will be called after c_cpp_properties.json have been created (if it did not exist), but before the document is opened. - public handleConfigurationEditJSONCommand(onBeforeOpen: (() => void) | undefined, showDocument: (document: vscode.TextDocument) => void): void { - this.ensurePropertiesFile().then(() => { - console.assert(this.propertiesFile); - if (onBeforeOpen) { - onBeforeOpen(); - } - // Directly open the json file - if (this.propertiesFile) { - vscode.workspace.openTextDocument(this.propertiesFile).then((document: vscode.TextDocument) => { - if (showDocument) { - showDocument(document); - } - }); + public async handleConfigurationEditJSONCommand(onBeforeOpen: (() => void) | undefined, showDocument: (document: vscode.TextDocument, column?: vscode.ViewColumn) => void, viewColumn?: vscode.ViewColumn): Promise { + await this.ensurePropertiesFile(); + console.assert(this.propertiesFile); + if (onBeforeOpen) { + onBeforeOpen(); + } + // Directly open the json file + if (this.propertiesFile) { + const document: vscode.TextDocument = await vscode.workspace.openTextDocument(this.propertiesFile); + if (showDocument) { + showDocument(document, viewColumn); } - }); + } } private ensureSettingsPanelInitlialized(): void { @@ -949,58 +984,61 @@ export class CppProperties { } // onBeforeOpen will be called after c_cpp_properties.json have been created (if it did not exist), but before the document is opened. - public handleConfigurationEditUICommand(onBeforeOpen: (() => void) | undefined, showDocument: (document: vscode.TextDocument) => void): void { - this.ensurePropertiesFile().then(() => { - if (this.propertiesFile) { - if (onBeforeOpen) { - onBeforeOpen(); - } - if (this.parsePropertiesFile()) { - this.ensureSettingsPanelInitlialized(); - if (this.settingsPanel) { - const configNames: string[] | undefined = this.ConfigurationNames; - if (configNames && this.configurationJson) { - // Use the active configuration as the default selected configuration to load on UI editor - this.settingsPanel.selectedConfigIndex = this.CurrentConfigurationIndex; - this.settingsPanel.createOrShow(configNames, - this.configurationJson.configurations[this.settingsPanel.selectedConfigIndex], - this.getErrorsForConfigUI(this.settingsPanel.selectedConfigIndex)); - } + public async handleConfigurationEditUICommand(onBeforeOpen: (() => void) | undefined, showDocument: (document: vscode.TextDocument, column?: vscode.ViewColumn) => void, viewColumn?: vscode.ViewColumn): Promise { + await this.ensurePropertiesFile(); + if (this.propertiesFile) { + if (onBeforeOpen) { + onBeforeOpen(); + } + if (this.parsePropertiesFile()) { + this.ensureSettingsPanelInitlialized(); + if (this.settingsPanel) { + const configNames: string[] | undefined = this.ConfigurationNames; + if (configNames && this.configurationJson) { + // Use the active configuration as the default selected configuration to load on UI editor + this.settingsPanel.selectedConfigIndex = this.CurrentConfigurationIndex; + this.settingsPanel.createOrShow(configNames, + this.configurationJson.configurations[this.settingsPanel.selectedConfigIndex], + this.getErrorsForConfigUI(this.settingsPanel.selectedConfigIndex), + viewColumn); } - } else { - // Parse failed, open json file - vscode.workspace.openTextDocument(this.propertiesFile).then((document: vscode.TextDocument) => { - if (showDocument) { - showDocument(document); - } - }); + } + } else { + // Parse failed, open json file + const document: vscode.TextDocument = await vscode.workspace.openTextDocument(this.propertiesFile); + if (showDocument) { + showDocument(document, viewColumn); } } - }); + } } - private onSettingsPanelActivated(): void { + private async onSettingsPanelActivated(): Promise { if (this.configurationJson) { - this.ensurePropertiesFile().then(() => { - if (this.propertiesFile) { - if (this.parsePropertiesFile()) { - const configNames: string[] | undefined = this.ConfigurationNames; - if (configNames && this.settingsPanel && this.configurationJson) { - // The settings UI became visible or active. - // Ensure settingsPanel has copy of latest current configuration - if (this.settingsPanel.selectedConfigIndex >= this.configurationJson.configurations.length) { - this.settingsPanel.selectedConfigIndex = this.CurrentConfigurationIndex; - } - this.settingsPanel.updateConfigUI(configNames, - this.configurationJson.configurations[this.settingsPanel.selectedConfigIndex], - this.getErrorsForConfigUI(this.settingsPanel.selectedConfigIndex)); - } else { - // Parse failed, open json file - vscode.workspace.openTextDocument(this.propertiesFile); + await this.ensurePropertiesFile(); + if (this.propertiesFile) { + if (this.parsePropertiesFile()) { + const configNames: string[] | undefined = this.ConfigurationNames; + if (configNames && this.settingsPanel && this.configurationJson) { + // The settings UI became visible or active. + // Ensure settingsPanel has copy of latest current configuration + if (this.settingsPanel.selectedConfigIndex >= this.configurationJson.configurations.length) { + this.settingsPanel.selectedConfigIndex = this.CurrentConfigurationIndex; } + setTimeout(() => { + if (this.settingsPanel && this.configurationJson) { + this.settingsPanel.updateConfigUI(configNames, + this.configurationJson.configurations[this.settingsPanel.selectedConfigIndex], + this.getErrorsForConfigUI(this.settingsPanel.selectedConfigIndex)); + } + }, + 500); // Need some delay or the UI can randomly be blank, particularly in the remote scenario. + } else { + // Parse failed, open json file + vscode.workspace.openTextDocument(this.propertiesFile); } } - }); + } } } @@ -1078,11 +1116,11 @@ export class CppProperties { } private async ensurePropertiesFile(): Promise { - if (this.propertiesFile && fs.existsSync(this.propertiesFile.fsPath)) { + if (this.propertiesFile && await util.checkFileExists(this.propertiesFile.fsPath)) { return; } else { try { - if (!fs.existsSync(this.configFolder)) { + if (!await util.checkDirectoryExists(this.configFolder)) { fs.mkdirSync(this.configFolder); } @@ -1199,23 +1237,17 @@ export class CppProperties { delete (e).knownCompilers; dirty = true; } - if ((e).compilerPathIsExplicit !== undefined) { - delete (e).compilerPathIsExplicit; - dirty = true; - } - if ((e).cStandardIsExplicit !== undefined) { - delete (e).cStandardIsExplicit; - dirty = true; - } - if ((e).cppStandardIsExplicit !== undefined) { - delete (e).cppStandardIsExplicit; - dirty = true; - } - if ((e).intelliSenseModeIsExplicit !== undefined) { - delete (e).intelliSenseModeIsExplicit; + }); + + for (let i: number = 0; i < this.configurationJson.configurations.length; i++) { + if ((this.configurationJson.configurations[i].compilerPathIsExplicit !== undefined) + || (this.configurationJson.configurations[i].cStandardIsExplicit !== undefined) + || (this.configurationJson.configurations[i].cppStandardIsExplicit !== undefined) + || (this.configurationJson.configurations[i].intelliSenseModeIsExplicit !== undefined)) { dirty = true; + break; } - }); + } if (dirty) { try { @@ -1227,6 +1259,13 @@ export class CppProperties { } } + this.configurationJson.configurations.forEach(e => { + e.compilerPathIsExplicit = e.compilerPath !== undefined; + e.cStandardIsExplicit = e.cStandard !== undefined; + e.cppStandardIsExplicit = e.cppStandard !== undefined; + e.intelliSenseModeIsExplicit = e.intelliSenseMode !== undefined; + }); + } catch (err) { const failedToParse: string = localize("failed.to.parse.properties", 'Failed to parse "{0}"', this.propertiesFile.fsPath); vscode.window.showErrorMessage(`${failedToParse}: ${err.message}`); @@ -1583,6 +1622,7 @@ export class CppProperties { // Check for path-related squiggles. let paths: string[] = []; + let compilerPath: string | undefined; for (const pathArray of [ (currentConfiguration.browse ? currentConfiguration.browse.path : undefined), currentConfiguration.includePath, currentConfiguration.macFrameworkPath, currentConfiguration.forcedInclude ]) { if (pathArray) { @@ -1597,11 +1637,12 @@ export class CppProperties { if (currentConfiguration.compilerPath) { // Unlike other cases, compilerPath may not start or end with " due to trimming of whitespace and the possibility of compiler args. - paths.push(`${currentConfiguration.compilerPath}`); + compilerPath = currentConfiguration.compilerPath; } // Resolve and split any environment variables paths = this.resolveAndSplit(paths, undefined, this.ExtendedEnvironment); + compilerPath = util.resolveVariables(compilerPath, this.ExtendedEnvironment).trim(); // Get the start/end for properties that are file-only. const forcedIncludeStart: number = curText.search(/\s*\"forcedInclude\"\s*:\s*\[/); @@ -1609,10 +1650,51 @@ export class CppProperties { const compileCommandsStart: number = curText.search(/\s*\"compileCommands\"\s*:\s*\"/); const compileCommandsEnd: number = compileCommandsStart === -1 ? -1 : curText.indexOf('"', curText.indexOf('"', curText.indexOf(":", compileCommandsStart)) + 1); const compilerPathStart: number = curText.search(/\s*\"compilerPath\"\s*:\s*\"/); - const compilerPathEnd: number = compilerPathStart === -1 ? -1 : curText.indexOf('"', curText.indexOf('"', curText.indexOf(":", compilerPathStart)) + 1) + 1; - + const compilerPathValueStart: number = curText.indexOf('"', curText.indexOf(":", compilerPathStart)); + const compilerPathEnd: number = compilerPathStart === -1 ? -1 : curText.indexOf('"', compilerPathValueStart + 1) + 1; const processedPaths: Set = new Set(); + // Validate compiler paths + let compilerPathNeedsQuotes: boolean = false; + let compilerMessage: string | undefined; + const compilerPathAndArgs: util.CompilerPathAndArgs = util.extractCompilerPathAndArgs(compilerPath); + // Don't squiggle invalid cl.exe paths because it could be for an older preview build. + if (compilerPathAndArgs.compilerName.toLowerCase() !== "cl.exe" && compilerPathAndArgs.compilerPath !== undefined) { + // Squiggle when the compiler's path has spaces without quotes but args are used. + compilerPathNeedsQuotes = (compilerPathAndArgs.additionalArgs && compilerPathAndArgs.additionalArgs.length > 0) + && !compilerPath.startsWith('"') + && compilerPathAndArgs.compilerPath.includes(" "); + compilerPath = compilerPathAndArgs.compilerPath; + // Don't squiggle if compiler path is resolving with environment path. + if (compilerPathNeedsQuotes || (compilerPath && !which.sync(compilerPath, { nothrow: true }))) { + if (compilerPathNeedsQuotes) { + compilerMessage = localize("path.with.spaces", 'Compiler path with spaces and arguments is missing double quotes " around the path.'); + newSquiggleMetrics.CompilerPathMissingQuotes++; + } else if (!util.checkFileExistsSync(compilerPath)) { + compilerMessage = localize("path.is.not.a.file", "Path is not a file: {0}", compilerPath); + newSquiggleMetrics.PathNotAFile++; + } + } + } + const isWSL: boolean = isWindows && compilerPath.startsWith("/"); + let compilerPathExists: boolean = true; + if (this.rootUri) { + const checkPathExists: any = util.checkPathExistsSync(compilerPath, this.rootUri.fsPath + path.sep, isWindows, isWSL, true); + compilerPathExists = checkPathExists.pathExists; + compilerPath = checkPathExists.path; + } + if (!compilerPathExists) { + compilerMessage = localize('cannot.find2', "Cannot find \"{0}\".", compilerPath); + newSquiggleMetrics.PathNonExistent++; + } + if (compilerMessage) { + const diagnostic: vscode.Diagnostic = new vscode.Diagnostic( + new vscode.Range(document.positionAt(curTextStartOffset + compilerPathValueStart), + document.positionAt(curTextStartOffset + compilerPathEnd)), + compilerMessage, vscode.DiagnosticSeverity.Warning); + diagnostics.push(diagnostic); + } + // Validate paths for (const curPath of paths) { if (processedPaths.has(curPath)) { @@ -1621,7 +1703,6 @@ export class CppProperties { continue; } processedPaths.add(curPath); - const isCompilerPath: boolean = curPath === currentConfiguration.compilerPath; // Resolve special path cases. if (curPath === "${default}") { // TODO: Add squiggles for when the C_Cpp.default.* paths are invalid. @@ -1632,51 +1713,12 @@ export class CppProperties { if (!resolvedPath) { continue; } - - let compilerPathNeedsQuotes: boolean = false; - if (isCompilerPath) { - resolvedPath = resolvedPath.trim(); - const compilerPathAndArgs: util.CompilerPathAndArgs = util.extractCompilerPathAndArgs(resolvedPath); - if (compilerPathAndArgs.compilerName.toLowerCase() === "cl.exe") { - continue; // Don't squiggle invalid cl.exe paths because it could be for an older preview build. - } - if (compilerPathAndArgs.compilerPath === undefined) { - continue; - } - // Squiggle when the compiler's path has spaces without quotes but args are used. - compilerPathNeedsQuotes = (compilerPathAndArgs.additionalArgs && compilerPathAndArgs.additionalArgs.length > 0) - && !resolvedPath.startsWith('"') - && compilerPathAndArgs.compilerPath.includes(" "); - resolvedPath = compilerPathAndArgs.compilerPath; - - if (!compilerPathNeedsQuotes && which.sync(resolvedPath, {nothrow: true})) { - continue; // Don't squiggle if compiler path is resolving with environment path. - } - } - - const isWSL: boolean = isWindows && resolvedPath.startsWith("/"); let pathExists: boolean = true; - const existsWithExeAdded: (path: string) => boolean = (path: string) => isCompilerPath && isWindows && !isWSL && fs.existsSync(path + ".exe"); - if (!fs.existsSync(resolvedPath)) { - if (existsWithExeAdded(resolvedPath)) { - resolvedPath += ".exe"; - } else if (!this.rootUri) { - pathExists = false; - } else { - // Check again for a relative path. - const relativePath: string = this.rootUri.fsPath + path.sep + resolvedPath; - if (!fs.existsSync(relativePath)) { - if (existsWithExeAdded(resolvedPath)) { - resolvedPath += ".exe"; - } else { - pathExists = false; - } - } else { - resolvedPath = relativePath; - } - } + if (this.rootUri) { + const checkPathExists: any = util.checkPathExistsSync(resolvedPath, this.rootUri.fsPath + path.sep, isWindows, isWSL, false); + pathExists = checkPathExists.pathExists; + resolvedPath = checkPathExists.path; } - // Normalize path separators. if (path.sep === "/") { resolvedPath = resolvedPath.replace(/\\/g, path.sep); @@ -1701,6 +1743,9 @@ export class CppProperties { for (const curMatch of configMatches) { curOffset = curText.substr(endOffset).search(pattern) + endOffset; endOffset = curOffset + curMatch.length; + if (curOffset >= compilerPathStart && curOffset <= compilerPathEnd) { + continue; + } let message: string; if (!pathExists) { message = localize('cannot.find2', "Cannot find \"{0}\".", resolvedPath); @@ -1708,23 +1753,17 @@ export class CppProperties { } else { // Check for file versus path mismatches. if ((curOffset >= forcedIncludeStart && curOffset <= forcedeIncludeEnd) || - (curOffset >= compileCommandsStart && curOffset <= compileCommandsEnd) || - (curOffset >= compilerPathStart && curOffset <= compilerPathEnd)) { - if (compilerPathNeedsQuotes) { - message = localize("path.with.spaces", 'Compiler path with spaces and arguments is missing double quotes " around the path.'); - newSquiggleMetrics.CompilerPathMissingQuotes++; - } else { - if (util.checkFileExistsSync(resolvedPath)) { - continue; - } - message = localize("path.is.not.a.file", "Path is not a file: {0}", resolvedPath); - newSquiggleMetrics.PathNotAFile++; + (curOffset >= compileCommandsStart && curOffset <= compileCommandsEnd)) { + if (util.checkFileExistsSync(resolvedPath)) { + continue; } + message = localize("path.is.not.a.file", "Path is not a file: {0}", resolvedPath); + newSquiggleMetrics.PathNotAFile++; } else { if (util.checkDirectoryExistsSync(resolvedPath)) { continue; } - message = localize("path.is.not.a.directory", "Path is not a directory: {0}", resolvedPath); + message = localize("path.is.not.a.directory", "Path is not a directory: {0}", resolvedPath); newSquiggleMetrics.PathNotADirectory++; } } @@ -1840,10 +1879,46 @@ export class CppProperties { } private writeToJson(): void { + // Set aside IsExplicit values, and restore them after writing. + const savedCompilerPathIsExplicit: boolean[] = []; + const savedCStandardIsExplicit: boolean[] = []; + const savedCppStandardIsExplicit: boolean[] = []; + const savedIntelliSenseModeIsExplicit: boolean[] = []; + + if (this.configurationJson) { + this.configurationJson.configurations.forEach(e => { + savedCompilerPathIsExplicit.push(!!e.compilerPathIsExplicit); + if (e.compilerPathIsExplicit !== undefined) { + delete e.compilerPathIsExplicit; + } + savedCStandardIsExplicit.push(!!e.cStandardIsExplicit); + if (e.cStandardIsExplicit !== undefined) { + delete e.cStandardIsExplicit; + } + savedCppStandardIsExplicit.push(!!e.cppStandardIsExplicit); + if (e.cppStandardIsExplicit !== undefined) { + delete e.cppStandardIsExplicit; + } + savedIntelliSenseModeIsExplicit.push(!!e.intelliSenseModeIsExplicit); + if (e.intelliSenseModeIsExplicit !== undefined) { + delete e.intelliSenseModeIsExplicit; + } + }); + } + console.assert(this.propertiesFile); if (this.propertiesFile) { fs.writeFileSync(this.propertiesFile.fsPath, jsonc.stringify(this.configurationJson, null, 4)); } + + if (this.configurationJson) { + for (let i: number = 0; i < this.configurationJson.configurations.length; i++) { + this.configurationJson.configurations[i].compilerPathIsExplicit = savedCompilerPathIsExplicit[i]; + this.configurationJson.configurations[i].cStandardIsExplicit = savedCStandardIsExplicit[i]; + this.configurationJson.configurations[i].cppStandardIsExplicit = savedCppStandardIsExplicit[i]; + this.configurationJson.configurations[i].intelliSenseModeIsExplicit = savedIntelliSenseModeIsExplicit[i]; + } + } } public checkCppProperties(): void { diff --git a/Extension/src/LanguageServer/cppBuildTaskProvider.ts b/Extension/src/LanguageServer/cppBuildTaskProvider.ts index 10940e9b87..64532a4364 100644 --- a/Extension/src/LanguageServer/cppBuildTaskProvider.ts +++ b/Extension/src/LanguageServer/cppBuildTaskProvider.ts @@ -169,7 +169,7 @@ export class CppBuildTaskProvider implements TaskProvider { if (compilerArgs && compilerArgs.length > 0) { args = args.concat(compilerArgs); } - const cwd: string = isWindows && !isCl && !process.env.PATH?.includes(path.dirname(compilerPath)) ? path.dirname(compilerPath) : "${workspaceFolder}"; + const cwd: string = isWindows && !isCl && !process.env.PATH?.includes(path.dirname(compilerPath)) ? path.dirname(compilerPath) : "${fileDirname}"; const options: cp.ExecOptions | undefined = { cwd: cwd }; definition = { type: CppBuildTaskProvider.CppBuildScriptType, diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index b51a4e2449..9659621e71 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -55,28 +55,31 @@ let taskProvider: vscode.Disposable; let codeActionProvider: vscode.Disposable; export const intelliSenseDisabledError: string = "Do not activate the extension when IntelliSense is disabled."; -type vcpkgDatabase = { [key: string]: string[] }; // Stored as
-> [] -let vcpkgDbPromise: Promise; -function initVcpkgDatabase(): Promise { +type VcpkgDatabase = { [key: string]: string[] }; // Stored as
-> [] +let vcpkgDbPromise: Promise; +function initVcpkgDatabase(): Promise { return new Promise((resolve, reject) => { - yauzl.open(util.getExtensionFilePath('VCPkgHeadersDatabase.zip'), { lazyEntries: true }, (err? : Error, zipfile?: yauzl.ZipFile) => { + yauzl.open(util.getExtensionFilePath('VCPkgHeadersDatabase.zip'), { lazyEntries: true }, (err?: Error, zipfile?: yauzl.ZipFile) => { + // Resolves with an empty database instead of rejecting on failure. + const database: VcpkgDatabase = {}; if (err || !zipfile) { - resolve({}); + resolve(database); return; } - zipfile.readEntry(); - let dbFound: boolean = false; + // Waits until the input file is closed before resolving. + zipfile.on('close', () => { + resolve(database); + }); zipfile.on('entry', entry => { if (entry.fileName !== 'VCPkgHeadersDatabase.txt') { + zipfile.readEntry(); return; } - dbFound = true; zipfile.openReadStream(entry, (err?: Error, stream?: Readable) => { if (err || !stream) { - resolve({}); + zipfile.close(); return; } - const database: vcpkgDatabase = {}; const reader: rd.ReadLine = rd.createInterface(stream); reader.on('line', (lineText: string) => { const portFilePair: string[] = lineText.split(':'); @@ -94,15 +97,13 @@ function initVcpkgDatabase(): Promise { database[relativeHeader].push(portName); }); reader.on('close', () => { - resolve(database); + // We found the one file we wanted. + // It's OK to close instead of progressing through more files in the zip. + zipfile.close(); }); }); }); - zipfile.on('end', () => { - if (!dbFound) { - resolve({}); - } - }); + zipfile.readEntry(); }); }); } @@ -132,7 +133,7 @@ async function lookupIncludeInVcpkg(document: vscode.TextDocument, line: number) const missingHeader: string = matches.groups['includeFile'].replace(/\//g, '\\'); let portsWithHeader: string[] | undefined; - const vcpkgDb: vcpkgDatabase = await vcpkgDbPromise; + const vcpkgDb: VcpkgDatabase = await vcpkgDbPromise; if (vcpkgDb) { portsWithHeader = vcpkgDb[missingHeader]; } @@ -150,7 +151,7 @@ function isMissingIncludeDiagnostic(diagnostic: vscode.Diagnostic): boolean { /** * activate: set up the extension for language services */ -export function activate(activationEventOccurred: boolean): void { +export async function activate(activationEventOccurred: boolean): Promise { if (realActivationOccurred) { return; // Occurs if multiple delayed commands occur before the real commands are registered. } @@ -172,11 +173,10 @@ export function activate(activationEventOccurred: boolean): void { if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) { for (let i: number = 0; i < vscode.workspace.workspaceFolders.length; ++i) { const config: string = path.join(vscode.workspace.workspaceFolders[i].uri.fsPath, ".vscode/c_cpp_properties.json"); - if (fs.existsSync(config)) { + if (await util.checkFileExists(config)) { cppPropertiesExists = true; - vscode.workspace.openTextDocument(config).then((doc: vscode.TextDocument) => { - vscode.languages.setTextDocumentLanguage(doc, "jsonc"); - }); + const doc: vscode.TextDocument = await vscode.workspace.openTextDocument(config); + vscode.languages.setTextDocumentLanguage(doc, "jsonc"); } } } @@ -354,8 +354,7 @@ function realActivation(): void { } } }); - - clients.ActiveClient.notifyWhenReady(() => { + clients.ActiveClient.notifyWhenLanguageClientReady(() => { intervalTimer = global.setInterval(onInterval, 2500); }); } @@ -441,7 +440,7 @@ export function processDelayedDidOpen(document: vscode.TextDocument): void { client.TrackedDocuments.add(document); const finishDidOpen = (doc: vscode.TextDocument) => { client.provideCustomConfiguration(doc.uri, undefined); - client.notifyWhenReady(() => { + client.notifyWhenLanguageClientReady(() => { client.takeOwnership(doc); client.onDidOpenTextDocument(doc); }); @@ -487,7 +486,7 @@ function onInterval(): void { * Install a VSIX package. This helper function will exist until VSCode offers a command to do so. * @param updateChannel The user's updateChannel setting. */ -function installVsix(vsixLocation: string): Thenable { +async function installVsix(vsixLocation: string): Promise { const userVersion: PackageVersion = new PackageVersion(vscode.version); // 1.33.0 introduces workbench.extensions.installExtension. 1.32.3 was immediately prior. @@ -499,7 +498,7 @@ function installVsix(vsixLocation: string): Thenable { // Get the path to the VSCode command -- replace logic later when VSCode allows calling of // workbench.extensions.action.installVSIX from TypeScript w/o instead popping up a file dialog return PlatformInformation.GetPlatformInformation().then((platformInfo) => { - const vsCodeScriptPath: string | undefined = function(platformInfo): string | undefined { + const getVsCodeScriptPath = (platformInfo: any): string => { if (platformInfo.platform === 'win32') { const vsCodeBinName: string = path.basename(process.execPath); let cmdFile: string; // Windows VS Code Insiders/Exploration breaks VS Code naming conventions @@ -517,14 +516,13 @@ function installVsix(vsixLocation: string): Thenable { 'Resources', 'app', 'bin', 'code'); } else { const vsCodeBinName: string = path.basename(process.execPath); - try { - return which.sync(vsCodeBinName); - } catch (error) { - return undefined; - } + return which.sync(vsCodeBinName); } - }(platformInfo); - if (!vsCodeScriptPath) { + }; + let vsCodeScriptPath: string; + try { + vsCodeScriptPath = getVsCodeScriptPath(platformInfo); + } catch (err) { return Promise.reject(new Error('Failed to find VS Code script')); } @@ -605,15 +603,24 @@ function installVsix(vsixLocation: string): Thenable { } async function suggestInsidersChannel(): Promise { + if (util.isCodespaces()) { + // Do not prompt users of Codespaces to join Insiders. + return; + } + const suggestInsiders: PersistentState = new PersistentState("CPP.suggestInsiders", true); if (!suggestInsiders.Value) { return; } - if (util.isCodespaces()) { - // Do not prompt users of Codespaces to join Insiders. + + const suggestInsidersCount: PersistentState = new PersistentState("CPP.suggestInsidersCount", 0); + + if (suggestInsidersCount.Value < 10) { + suggestInsidersCount.Value = suggestInsidersCount.Value + 1; return; } + let buildInfo: BuildInfo | undefined; try { buildInfo = await getTargetBuildInfo("Insiders", false); @@ -631,22 +638,24 @@ async function suggestInsidersChannel(): Promise { const yes: string = localize("yes.button", "Yes"); const askLater: string = localize("ask.me.later.button", "Ask Me Later"); const dontShowAgain: string = localize("dont.show.again.button", "Don't Show Again"); - const selection: string | undefined = await vscode.window.showInformationMessage(message, yes, askLater, dontShowAgain); - switch (selection) { - case yes: - // Cache buildInfo. - buildInfoCache = buildInfo; - // It will call onDidChangeSettings. - vscode.workspace.getConfiguration("C_Cpp").update("updateChannel", "Insiders", vscode.ConfigurationTarget.Global); - break; - case dontShowAgain: - suggestInsiders.Value = false; - break; - case askLater: - break; - default: - break; - } + vscode.window.showInformationMessage(message, yes, askLater, dontShowAgain).then((selection) => { + switch (selection) { + case yes: + // Cache buildInfo. + buildInfoCache = buildInfo; + // It will call onDidChangeSettings. + vscode.workspace.getConfiguration("C_Cpp").update("updateChannel", "Insiders", vscode.ConfigurationTarget.Global); + break; + case dontShowAgain: + suggestInsiders.Value = false; + break; + case askLater: + break; + default: + break; + } + }); + } async function applyUpdate(buildInfo: BuildInfo): Promise { @@ -776,13 +785,14 @@ export function registerCommands(): void { disposables.push(vscode.commands.registerCommand('C_Cpp.GenerateEditorConfig', onGenerateEditorConfig)); disposables.push(vscode.commands.registerCommand('C_Cpp.GoToNextDirectiveInGroup', onGoToNextDirectiveInGroup)); disposables.push(vscode.commands.registerCommand('C_Cpp.GoToPrevDirectiveInGroup', onGoToPrevDirectiveInGroup)); + disposables.push(vscode.commands.registerCommand('C_Cpp.CheckForCompiler', onCheckForCompiler)); disposables.push(vscode.commands.registerCommand('cpptools.activeConfigName', onGetActiveConfigName)); disposables.push(vscode.commands.registerCommand('cpptools.activeConfigCustomVariable', onGetActiveConfigCustomVariable)); disposables.push(vscode.commands.registerCommand('cpptools.setActiveConfigName', onSetActiveConfigName)); getTemporaryCommandRegistrarInstance().executeDelayedCommands(); } -function onSwitchHeaderSource(): void { +async function onSwitchHeaderSource(): Promise { onActivationEvent(); const activeEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; if (!activeEditor || !activeEditor.document) { @@ -800,53 +810,49 @@ function onSwitchHeaderSource(): void { rootPath = path.dirname(fileName); // When switching without a folder open. } - clients.ActiveClient.requestSwitchHeaderSource(rootPath, fileName).then((targetFileName: string) => { - // If the targetFileName has a path that is a symlink target of a workspace folder, - // then replace the RootRealPath with the RootPath (the symlink path). - let targetFileNameReplaced: boolean = false; - clients.forEach(client => { - if (!targetFileNameReplaced && client.RootRealPath && client.RootPath !== client.RootRealPath - && targetFileName.indexOf(client.RootRealPath) === 0) { - targetFileName = client.RootPath + targetFileName.substr(client.RootRealPath.length); - targetFileNameReplaced = true; - } - }); - vscode.workspace.openTextDocument(targetFileName).then((document: vscode.TextDocument) => { - let foundEditor: boolean = false; - // If the document is already visible in another column, open it there. - vscode.window.visibleTextEditors.forEach((editor, index, array) => { - if (editor.document === document && !foundEditor) { - foundEditor = true; - vscode.window.showTextDocument(document, editor.viewColumn); - } - }); - - if (!foundEditor) { - vscode.window.showTextDocument(document); - } - }); + let targetFileName: string = await clients.ActiveClient.requestSwitchHeaderSource(rootPath, fileName); + // If the targetFileName has a path that is a symlink target of a workspace folder, + // then replace the RootRealPath with the RootPath (the symlink path). + let targetFileNameReplaced: boolean = false; + clients.forEach(client => { + if (!targetFileNameReplaced && client.RootRealPath && client.RootPath !== client.RootRealPath + && targetFileName.indexOf(client.RootRealPath) === 0) { + targetFileName = client.RootPath + targetFileName.substr(client.RootRealPath.length); + targetFileNameReplaced = true; + } }); + const document: vscode.TextDocument = await vscode.workspace.openTextDocument(targetFileName); + let foundEditor: boolean = false; + // If the document is already visible in another column, open it there. + vscode.window.visibleTextEditors.forEach((editor, index, array) => { + if (editor.document === document && !foundEditor) { + foundEditor = true; + vscode.window.showTextDocument(document, editor.viewColumn); + } + }); + if (!foundEditor) { + vscode.window.showTextDocument(document); + } } /** * Allow the user to select a workspace when multiple workspaces exist and get the corresponding Client back. * The resulting client is used to handle some command that was previously invoked. */ -function selectClient(): Thenable { +async function selectClient(): Promise { if (clients.Count === 1) { - return Promise.resolve(clients.ActiveClient); + return clients.ActiveClient; } else { - return ui.showWorkspaces(clients.Names).then(key => { - if (key !== "") { - const client: Client | undefined = clients.get(key); - if (client) { - return client; - } else { - console.assert("client not found"); - } + const key: string = await ui.showWorkspaces(clients.Names); + if (key !== "") { + const client: Client | undefined = clients.get(key); + if (client) { + return client; + } else { + console.assert("client not found"); } - return Promise.reject(localize("client.not.found", "client not found")); - }); + } + throw new Error(localize("client.not.found", "client not found")); } } @@ -875,32 +881,32 @@ function onSelectConfigurationProvider(): void { } } -function onEditConfigurationJSON(): void { +function onEditConfigurationJSON(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { onActivationEvent(); telemetry.logLanguageServerEvent("SettingsCommand", { "palette": "json" }, undefined); if (!isFolderOpen()) { vscode.window.showInformationMessage(localize('edit.configurations.open.first', 'Open a folder first to edit configurations')); } else { - selectClient().then(client => client.handleConfigurationEditJSONCommand(), rejected => {}); + selectClient().then(client => client.handleConfigurationEditJSONCommand(viewColumn), rejected => {}); } } -function onEditConfigurationUI(): void { +function onEditConfigurationUI(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { onActivationEvent(); telemetry.logLanguageServerEvent("SettingsCommand", { "palette": "ui" }, undefined); if (!isFolderOpen()) { vscode.window.showInformationMessage(localize('edit.configurations.open.first', 'Open a folder first to edit configurations')); } else { - selectClient().then(client => client.handleConfigurationEditUICommand(), rejected => {}); + selectClient().then(client => client.handleConfigurationEditUICommand(viewColumn), rejected => {}); } } -function onEditConfiguration(): void { +function onEditConfiguration(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { onActivationEvent(); if (!isFolderOpen()) { vscode.window.showInformationMessage(localize('edit.configurations.open.first', 'Open a folder first to edit configurations')); } else { - selectClient().then(client => client.handleConfigurationEditCommand(), rejected => {}); + selectClient().then(client => client.handleConfigurationEditCommand(viewColumn), rejected => {}); } } @@ -925,6 +931,12 @@ function onGoToPrevDirectiveInGroup(): void { client.handleGoToDirectiveInGroup(false); } +function onCheckForCompiler(): void { + onActivationEvent(); + const client: Client = getActiveClient(); + client.handleCheckForCompiler(); +} + function onAddToIncludePath(path: string): void { if (!isFolderOpen()) { vscode.window.showInformationMessage(localize('add.includepath.open.first', 'Open a folder first to add to {0}', "includePath")); diff --git a/Extension/src/LanguageServer/protocolFilter.ts b/Extension/src/LanguageServer/protocolFilter.ts index eee0cb54ec..687733e61d 100644 --- a/Extension/src/LanguageServer/protocolFilter.ts +++ b/Extension/src/LanguageServer/protocolFilter.ts @@ -14,7 +14,7 @@ import { onDidChangeActiveTextEditor, processDelayedDidOpen } from './extension' export function createProtocolFilter(clients: ClientCollection): Middleware { // Disabling lint for invoke handlers - const defaultHandler: (data: any, callback: (data: any) => void) => void = (data, callback: (data: any) => void) => { clients.ActiveClient.notifyWhenReady(() => callback(data)); }; + const defaultHandler: (data: any, callback: (data: any) => void) => void = (data, callback: (data: any) => void) => { clients.ActiveClient.notifyWhenLanguageClientReady(() => callback(data)); }; // let invoke1 = (a, callback: (a) => any) => { if (clients.ActiveClient === me) { return me.requestWhenReady(() => callback(a)); } return null; }; const invoke2 = (a: any, b: any, callback: (a: any, b: any) => any) => clients.ActiveClient.requestWhenReady(() => callback(a, b)); const invoke3 = (a: any, b: any, c: any, callback: (a: any, b: any, c: any) => any) => clients.ActiveClient.requestWhenReady(() => callback(a, b, c)); @@ -37,7 +37,7 @@ export function createProtocolFilter(clients: ClientCollection): Middleware { me.TrackedDocuments.add(document); const finishDidOpen = (doc: vscode.TextDocument) => { me.provideCustomConfiguration(doc.uri, undefined); - me.notifyWhenReady(() => { + me.notifyWhenLanguageClientReady(() => { sendMessage(doc); me.onDidOpenTextDocument(doc); if (editor && editor === vscode.window.activeTextEditor) { @@ -80,7 +80,7 @@ export function createProtocolFilter(clients: ClientCollection): Middleware { processDelayedDidOpen(textDocumentChangeEvent.document); } me.onDidChangeTextDocument(textDocumentChangeEvent); - me.notifyWhenReady(() => sendMessage(textDocumentChangeEvent)); + me.notifyWhenLanguageClientReady(() => sendMessage(textDocumentChangeEvent)); }, willSave: defaultHandler, willSaveWaitUntil: (event, sendMessage) => { @@ -96,7 +96,7 @@ export function createProtocolFilter(clients: ClientCollection): Middleware { if (me.TrackedDocuments.has(document)) { me.onDidCloseTextDocument(document); me.TrackedDocuments.delete(document); - me.notifyWhenReady(() => sendMessage(document)); + me.notifyWhenLanguageClientReady(() => sendMessage(document)); } }, diff --git a/Extension/src/LanguageServer/settings.ts b/Extension/src/LanguageServer/settings.ts index e3fd42451f..89f2cd5f03 100644 --- a/Extension/src/LanguageServer/settings.ts +++ b/Extension/src/LanguageServer/settings.ts @@ -691,18 +691,21 @@ function populateEditorConfig(rootUri: vscode.Uri | undefined, document: vscode. vscode.workspace.applyEdit(edits).then(() => vscode.window.showTextDocument(document)); } -export function generateEditorConfig(rootUri?: vscode.Uri): void { - if (rootUri !== undefined) { +export async function generateEditorConfig(rootUri?: vscode.Uri): Promise { + let document: vscode.TextDocument; + if (rootUri) { // If a folder is open and '.editorconfig' exists at the root, use that. const uri: vscode.Uri = vscode.Uri.joinPath(rootUri, ".editorconfig"); const edits: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); edits.createFile(uri, { ignoreIfExists: true, overwrite: false }); - vscode.workspace.applyEdit(edits).then(() => { - vscode.workspace.openTextDocument(uri).then( - (document) => populateEditorConfig(rootUri, document), - () => vscode.workspace.openTextDocument().then((document) => populateEditorConfig(rootUri, document))); - }, () => vscode.workspace.openTextDocument().then((document) => populateEditorConfig(rootUri, document))); + try { + await vscode.workspace.applyEdit(edits); + document = await vscode.workspace.openTextDocument(uri); + } catch (e) { + document = await vscode.workspace.openTextDocument(); + } } else { - vscode.workspace.openTextDocument().then((document) => populateEditorConfig(rootUri, document)); + document = await vscode.workspace.openTextDocument(); } + populateEditorConfig(rootUri, document); } diff --git a/Extension/src/LanguageServer/settingsPanel.ts b/Extension/src/LanguageServer/settingsPanel.ts index 3478394db6..c3338781ae 100644 --- a/Extension/src/LanguageServer/settingsPanel.ts +++ b/Extension/src/LanguageServer/settingsPanel.ts @@ -82,10 +82,8 @@ export class SettingsPanel { ); } - public createOrShow(configSelection: string[], activeConfiguration: config.Configuration, errors: config.ConfigurationErrors): void { - const column: vscode.ViewColumn | undefined = vscode.window.activeTextEditor - ? vscode.window.activeTextEditor.viewColumn - : undefined; + public createOrShow(configSelection: string[], activeConfiguration: config.Configuration, errors: config.ConfigurationErrors, viewColumn?: vscode.ViewColumn): void { + const column: vscode.ViewColumn | undefined = viewColumn ?? vscode.window.activeTextEditor?.viewColumn; // Show existing panel if (this.panel) { diff --git a/Extension/src/LanguageServer/ui.ts b/Extension/src/LanguageServer/ui.ts index 9aa16af1d8..383040370d 100644 --- a/Extension/src/LanguageServer/ui.ts +++ b/Extension/src/LanguageServer/ui.ts @@ -30,7 +30,7 @@ enum ConfigurationPriority { CustomProvider = 3, } -interface ConfigurationResult { +interface ConfigurationStatus { configured: boolean; priority: ConfigurationPriority; } @@ -40,7 +40,7 @@ export class UI { private browseEngineStatusBarItem: vscode.StatusBarItem; private intelliSenseStatusBarItem: vscode.StatusBarItem; private referencesStatusBarItem: vscode.StatusBarItem; - private configurationUIPromise?: Thenable; + private curConfigurationStatus?: Promise; private readonly referencesPreviewTooltip: string = ` (${localize("click.to.preview", "click to preview results")})`; constructor() { @@ -191,7 +191,7 @@ export class UI { client.ActiveConfigChanged(value => { this.ActiveConfig = value; }); } - public showConfigurations(configurationNames: string[]): Thenable { + public async showConfigurations(configurationNames: string[]): Promise { const options: vscode.QuickPickOptions = {}; options.placeHolder = localize("select.a.configuration", "Select a Configuration..."); @@ -202,11 +202,11 @@ export class UI { items.push({ label: localize("edit.configuration.ui", "Edit Configurations (UI)"), description: "", index: configurationNames.length }); items.push({ label: localize("edit.configuration.json", "Edit Configurations (JSON)"), description: "", index: configurationNames.length + 1 }); - return vscode.window.showQuickPick(items, options) - .then(selection => (selection) ? selection.index : -1); + const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); + return (selection) ? selection.index : -1; } - public showConfigurationProviders(currentProvider?: string): Thenable { + public async showConfigurationProviders(currentProvider?: string): Promise { const options: vscode.QuickPickOptions = {}; options.placeHolder = localize("select.configuration.provider", "Select a Configuration Provider..."); const providers: CustomConfigurationProviderCollection = getCustomConfigProviders(); @@ -221,11 +221,11 @@ export class UI { }); items.push({ label: `(${localize("none", "none")})`, description: localize("disable.configuration.provider", "Disable the active configuration provider, if applicable."), key: "" }); - return vscode.window.showQuickPick(items, options) - .then(selection => (selection) ? selection.key : undefined); + const selection: KeyedQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); + return (selection) ? selection.key : undefined; } - public showCompileCommands(paths: string[]): Thenable { + public async showCompileCommands(paths: string[]): Promise { const options: vscode.QuickPickOptions = {}; options.placeHolder = localize("select.compile.commands", "Select a compile_commands.json..."); @@ -234,22 +234,22 @@ export class UI { items.push({label: paths[i], description: "", index: i}); } - return vscode.window.showQuickPick(items, options) - .then(selection => (selection) ? selection.index : -1); + const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); + return (selection) ? selection.index : -1; } - public showWorkspaces(workspaceNames: { name: string; key: string }[]): Thenable { + public async showWorkspaces(workspaceNames: { name: string; key: string }[]): Promise { const options: vscode.QuickPickOptions = {}; options.placeHolder = localize("select.workspace", "Select a workspace folder..."); const items: KeyedQuickPickItem[] = []; workspaceNames.forEach(name => items.push({ label: name.name, description: "", key: name.key })); - return vscode.window.showQuickPick(items, options) - .then(selection => (selection) ? selection.key : ""); + const selection: KeyedQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); + return (selection) ? selection.key : ""; } - public showParsingCommands(): Thenable { + public async showParsingCommands(): Promise { const options: vscode.QuickPickOptions = {}; options.placeHolder = localize("select.parsing.command", "Select a parsing command..."); @@ -259,29 +259,28 @@ export class UI { } else { items.push({ label: localize("pause.parsing", "Pause Parsing"), description: "", index: 0 }); } - - return vscode.window.showQuickPick(items, options) - .then(selection => (selection) ? selection.index : -1); + const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); + return (selection) ? selection.index : -1; } - public showConfigureIncludePathMessage(prompt: () => Thenable, onSkip: () => void): void { + public showConfigureIncludePathMessage(prompt: () => Promise, onSkip: () => void): void { setTimeout(() => { this.showConfigurationPrompt(ConfigurationPriority.IncludePath, prompt, onSkip); }, 10000); } - public showConfigureCompileCommandsMessage(prompt: () => Thenable, onSkip: () => void): void { + public showConfigureCompileCommandsMessage(prompt: () => Promise, onSkip: () => void): void { setTimeout(() => { this.showConfigurationPrompt(ConfigurationPriority.CompileCommands, prompt, onSkip); }, 5000); } - public showConfigureCustomProviderMessage(prompt: () => Thenable, onSkip: () => void): void { + public showConfigureCustomProviderMessage(prompt: () => Promise, onSkip: () => void): void { this.showConfigurationPrompt(ConfigurationPriority.CustomProvider, prompt, onSkip); } private showConfigurationPrompt(priority: ConfigurationPriority, prompt: () => Thenable, onSkip: () => void): void { - const showPrompt: () => Thenable = async () => { + const showPrompt: () => Promise = async () => { const configured: boolean = await prompt(); return Promise.resolve({ priority: priority, @@ -289,8 +288,8 @@ export class UI { }); }; - if (this.configurationUIPromise) { - this.configurationUIPromise = this.configurationUIPromise.then(result => { + if (this.curConfigurationStatus) { + this.curConfigurationStatus = this.curConfigurationStatus.then(result => { if (priority > result.priority) { return showPrompt(); } else if (!result.configured) { @@ -303,7 +302,7 @@ export class UI { }); }); } else { - this.configurationUIPromise = showPrompt(); + this.curConfigurationStatus = showPrompt(); } } diff --git a/Extension/src/abTesting.ts b/Extension/src/abTesting.ts index 95052c8dc8..74a2d202c9 100644 --- a/Extension/src/abTesting.ts +++ b/Extension/src/abTesting.ts @@ -99,21 +99,20 @@ export class ABTestSettings { } } - private downloadCpptoolsJsonPkgAsync(): Promise { + private async downloadCpptoolsJsonPkgAsync(): Promise { let hasError: boolean = false; const telemetryProperties: { [key: string]: string } = {}; const localConfigPath: string = util.getExtensionFilePath(localConfigFile); // Download the latest cpptools.json. - return util.downloadFileToDestination("https://go.microsoft.com/fwlink/?linkid=2097702", localConfigPath) - .catch((error) => { - // More specific error info is not likely to be helpful, and we get detailed download data from the initial install. - hasError = true; - }) - .then(() => { - this.updateSettings(); - telemetryProperties['success'] = (!hasError).toString(); - Telemetry.logDebuggerEvent("cpptoolsJsonDownload", telemetryProperties); - }); + try { + await util.downloadFileToDestination("https://go.microsoft.com/fwlink/?linkid=2097702", localConfigPath); + } catch (error) { + // More specific error info is not likely to be helpful, and we get detailed download data from the initial install. + hasError = true; + } + this.updateSettings(); + telemetryProperties['success'] = (!hasError).toString(); + Telemetry.logDebuggerEvent("cpptoolsJsonDownload", telemetryProperties); } } diff --git a/Extension/src/commands.ts b/Extension/src/commands.ts index 7f55b1be57..5c376e5467 100644 --- a/Extension/src/commands.ts +++ b/Extension/src/commands.ts @@ -35,7 +35,8 @@ class TemporaryCommandRegistrar { "C_Cpp.RescanWorkspace", "C_Cpp.GenerateEditorConfig", "C_Cpp.VcpkgClipboardInstallSuggested", - "C_Cpp.VcpkgOnlineHelpSuggested" + "C_Cpp.VcpkgOnlineHelpSuggested", + "C_Cpp.CheckForCompiler" ]; constructor() { diff --git a/Extension/src/common.ts b/Extension/src/common.ts index f906154dcc..ab08d6e9c1 100644 --- a/Extension/src/common.ts +++ b/Extension/src/common.ts @@ -257,19 +257,19 @@ export function isUri(input: any): input is vscode.Uri { } export function isString(input: any): input is string { - return typeof(input) === "string"; + return typeof (input) === "string"; } export function isNumber(input: any): input is number { - return typeof(input) === "number"; + return typeof (input) === "number"; } export function isBoolean(input: any): input is boolean { - return typeof(input) === "boolean"; + return typeof (input) === "boolean"; } export function isObject(input: any): input is object { - return typeof(input) === "object"; + return typeof (input) === "object"; } export function isArray(input: any): input is any[] { @@ -288,7 +288,7 @@ export function isOptionalArrayOfString(input: any): input is string[] | undefin return input === undefined || isArrayOfString(input); } -export function resolveCachePath(input: string | undefined, additionalEnvironment: {[key: string]: string | string[]}): string { +export function resolveCachePath(input: string | undefined, additionalEnvironment: { [key: string]: string | string[] }): string { let resolvedPath: string = ""; if (!input) { // If no path is set, return empty string to language service process, where it will set the default path as @@ -301,7 +301,7 @@ export function resolveCachePath(input: string | undefined, additionalEnvironmen return resolvedPath; } -export function resolveVariables(input: string | undefined, additionalEnvironment?: {[key: string]: string | string[]}): string { +export function resolveVariables(input: string | undefined, additionalEnvironment?: { [key: string]: string | string[] }): string { if (!input) { return ""; } @@ -486,6 +486,32 @@ export function checkDirectoryExistsSync(dirPath: string): boolean { return false; } +/** Test whether a relative path exists */ +export function checkPathExistsSync(path: string, relativePath: string, isWindows: boolean, isWSL: boolean, isCompilerPath: boolean): { pathExists: boolean; path: string } { + let pathExists: boolean = true; + const existsWithExeAdded: (path: string) => boolean = (path: string) => isCompilerPath && isWindows && !isWSL && fs.existsSync(path + ".exe"); + if (!fs.existsSync(path)) { + if (existsWithExeAdded(path)) { + path += ".exe"; + } else if (!relativePath) { + pathExists = false; + } else { + // Check again for a relative path. + relativePath = relativePath + path; + if (!fs.existsSync(relativePath)) { + if (existsWithExeAdded(path)) { + path += ".exe"; + } else { + pathExists = false; + } + } else { + path = relativePath; + } + } + } + return { pathExists, path }; +} + /** Read the files in a directory */ export function readDir(dirPath: string): Promise { return new Promise((resolve) => { @@ -727,33 +753,29 @@ export function isExecutable(file: string): Promise { }); } -export function allowExecution(file: string): Promise { - return new Promise((resolve, reject) => { - if (process.platform !== 'win32') { - checkFileExists(file).then((exists: boolean) => { - if (exists) { - isExecutable(file).then((isExec: boolean) => { - if (isExec) { - resolve(); - } else { - fs.chmod(file, '755', (err: NodeJS.ErrnoException | null) => { - if (err) { - reject(err); - return; - } - resolve(); - }); - } - }); - } else { - getOutputChannelLogger().appendLine(""); - getOutputChannelLogger().appendLine(localize("warning.file.missing", "Warning: Expected file {0} is missing.", file)); - resolve(); - } - }); +export async function allowExecution(file: string): Promise { + if (process.platform !== 'win32') { + const exists: boolean = await checkFileExists(file); + if (exists) { + const isExec: boolean = await isExecutable(file); + if (!isExec) { + await chmodAsync(file, '755'); + } } else { - resolve(); + getOutputChannelLogger().appendLine(""); + getOutputChannelLogger().appendLine(localize("warning.file.missing", "Warning: Expected file {0} is missing.", file)); } + } +} + +export async function chmodAsync(path: fs.PathLike, mode: fs.Mode): Promise { + return new Promise((resolve, reject) => { + fs.chmod(path, mode, (err: NodeJS.ErrnoException | null) => { + if (err) { + return reject(err); + } + return resolve(); + }); }); } @@ -959,7 +981,8 @@ export function extractCompilerPathAndArgs(inputCompilerPath?: string, inputComp if (compilerPath) { if (compilerPathLowercase?.endsWith("\\cl.exe") || compilerPathLowercase?.endsWith("/cl.exe") || (compilerPathLowercase === "cl.exe") - || compilerPathLowercase?.endsWith("\\cl") || compilerPathLowercase?.endsWith("/cl") || (compilerPathLowercase === "cl")) { compilerName = path.basename(compilerPath); + || compilerPathLowercase?.endsWith("\\cl") || compilerPathLowercase?.endsWith("/cl") || (compilerPathLowercase === "cl")) { + compilerName = path.basename(compilerPath); } else if (compilerPath.startsWith("\"")) { // Input has quotes around compiler path const endQuote: number = compilerPath.substr(1).search("\"") + 1; @@ -1027,7 +1050,7 @@ export function escapeForSquiggles(s: string): string { newResults += "\\"; } lastWasBackslash = false; - lastBackslashWasEscaped = false; + lastBackslashWasEscaped = false; newResults += s[i]; } } @@ -1120,6 +1143,13 @@ export function getLocalizedString(params: LocalizeStringParams): string { return indent + text; } +export function getLocalizedSymbolScope(scope: string, detail: string): string { + return localize({ + key: "c.cpp.symbolscope.separator", comment: + ["{0} is an untranslated C++ keyword (e.g. \"private\") and {1} is either another keyword (e.g. \"typedef\") or a localized property (e.g. a localized version of \"declaration\""] + }, "{0}, {1}", scope, detail); +} + function decodeUCS16(input: string): number[] { const output: number[] = []; let counter: number = 0; @@ -1266,3 +1296,11 @@ export async function checkCuda(): Promise { const langs: string[] = await vscode.languages.getLanguages(); supportCuda = langs.findIndex((s) => s === "cuda-cpp") !== -1; } + +// Sequentially Resolve Promises. +export function sequentialResolve(items: T[], promiseBuilder: (item: T) => Promise): Promise { + return items.reduce(async (previousPromise, nextItem) => { + await previousPromise; + return promiseBuilder(nextItem); + }, Promise.resolve()); +} diff --git a/Extension/src/githubAPI.ts b/Extension/src/githubAPI.ts index 0ae6cd1a9a..321c0262e4 100644 --- a/Extension/src/githubAPI.ts +++ b/Extension/src/githubAPI.ts @@ -159,42 +159,35 @@ export interface BuildInfo { * does not need to update, resolves to undefined. */ export async function getTargetBuildInfo(updateChannel: string, isFromSettingsChange: boolean): Promise { - return getReleaseJson() - .then(builds => { - if (!builds || builds.length === 0) { - return undefined; - } + const builds: Build[] | undefined = await getReleaseJson(); + if (!builds || builds.length === 0) { + return undefined; + } + + const userVersion: PackageVersion = new PackageVersion(util.packageJson.version); + const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, isFromSettingsChange); + if (targetBuild === undefined) { + // no action + telemetry.logLanguageServerEvent("UpgradeCheck", { "action": "none" }); + } else if (userVersion.isExtensionVersionGreaterThan(new PackageVersion(targetBuild.name))) { + // downgrade + telemetry.logLanguageServerEvent("UpgradeCheck", { "action": "downgrade", "newVersion": targetBuild.name }); + } else { + // upgrade + telemetry.logLanguageServerEvent("UpgradeCheck", { "action": "upgrade", "newVersion": targetBuild.name }); + } + + if (!targetBuild) { + return undefined; + } + const platformInfo: PlatformInformation = await PlatformInformation.GetPlatformInformation(); + const vsixName: string = vsixNameForPlatform(platformInfo); + const downloadUrl: string = getVsixDownloadUrl(targetBuild, vsixName); + if (!downloadUrl) { + return undefined; + } + return { downloadUrl: downloadUrl, name: targetBuild.name }; - const userVersion: PackageVersion = new PackageVersion(util.packageJson.version); - const targetBuild: Build | undefined = getTargetBuild(builds, userVersion, updateChannel, isFromSettingsChange); - if (targetBuild === undefined) { - // no action - telemetry.logLanguageServerEvent("UpgradeCheck", { "action": "none" }); - } else if (userVersion.isExtensionVersionGreaterThan(new PackageVersion(targetBuild.name))) { - // downgrade - telemetry.logLanguageServerEvent("UpgradeCheck", { "action": "downgrade", "newVersion": targetBuild.name }); - } else { - // upgrade - telemetry.logLanguageServerEvent("UpgradeCheck", { "action": "upgrade", "newVersion": targetBuild.name }); - } - return targetBuild; - }) - .then(async build => { - if (!build) { - return Promise.resolve(undefined); - } - try { - const platformInfo: PlatformInformation = await PlatformInformation.GetPlatformInformation(); - const vsixName: string = vsixNameForPlatform(platformInfo); - const downloadUrl: string = getVsixDownloadUrl(build, vsixName); - if (!downloadUrl) { - return undefined; - } - return { downloadUrl: downloadUrl, name: build.name }; - } catch (error) { - return Promise.reject(error); - } - }); } /** @@ -266,28 +259,29 @@ function isRateLimit(input: any): input is RateLimit { async function getRateLimit(): Promise { const header: OutgoingHttpHeaders = { 'User-Agent': 'vscode-cpptools' }; - const data: string = await util.downloadFileToStr('https://api.github.com/rate_limit', header) - .catch((error) => { - if (error && error.code && error.code !== "ENOENT") { - // Only throw if the user is connected to the Internet. - throw new Error('Failed to download rate limit JSON'); - } - }); - if (!data) { - return Promise.resolve(undefined); - } - - let rateLimit: any; try { - rateLimit = JSON.parse(data); - } catch (error) { - throw new Error('Failed to parse rate limit JSON'); - } + const data: string = await util.downloadFileToStr('https://api.github.com/rate_limit', header); + if (!data) { + return undefined; + } + let rateLimit: any; + try { + rateLimit = JSON.parse(data); + } catch (error) { + throw new Error('Failed to parse rate limit JSON'); + } - if (isRateLimit(rateLimit)) { - return Promise.resolve(rateLimit); - } else { - throw new Error('Rate limit JSON is not of type RateLimit'); + if (isRateLimit(rateLimit)) { + return rateLimit; + } else { + throw new Error('Rate limit JSON is not of type RateLimit'); + } + + } catch (err) { + if (err && err.code && err.code !== "ENOENT") { + // Only throw if the user is connected to the Internet. + throw new Error('Failed to download rate limit JSON'); + } } } @@ -309,30 +303,31 @@ async function getReleaseJson(): Promise { const releaseUrl: string = 'https://api.github.com/repos/Microsoft/vscode-cpptools/releases'; const header: OutgoingHttpHeaders = { 'User-Agent': 'vscode-cpptools' }; - const data: string = await util.downloadFileToStr(releaseUrl, header) - .catch((error) => { - if (error && error.code && error.code !== "ENOENT") { - // Only throw if the user is connected to the Internet. - throw new Error('Failed to download release JSON'); - } - }); - if (!data) { - return Promise.resolve(undefined); - } - - // Parse the file - let releaseJson: any; try { - releaseJson = JSON.parse(data); - } catch (error) { - throw new Error('Failed to parse release JSON'); - } + const data: string = await util.downloadFileToStr(releaseUrl, header); + if (!data) { + return undefined; + } - // Find the latest released builds. - const builds: Build[] = getArrayOfBuilds(releaseJson); - if (!builds || builds.length === 0) { - throw new Error('Release JSON is not of type Build[]'); - } else { - return builds; + // Parse the file + let releaseJson: any; + try { + releaseJson = JSON.parse(data); + } catch (error) { + throw new Error('Failed to parse release JSON'); + } + + // Find the latest released builds. + const builds: Build[] = getArrayOfBuilds(releaseJson); + if (!builds || builds.length === 0) { + throw new Error('Release JSON is not of type Build[]'); + } else { + return builds; + } + } catch (err) { + if (err && err.code && err.code !== "ENOENT") { + // Only throw if the user is connected to the Internet. + throw new Error('Failed to download release JSON'); + } } } diff --git a/Extension/src/logger.ts b/Extension/src/logger.ts index 7ca31552c7..a6a2f1dffd 100644 --- a/Extension/src/logger.ts +++ b/Extension/src/logger.ts @@ -34,6 +34,7 @@ export class Logger { } } + // We should not await on this function. public showInformationMessage(message: string, items?: string[]): Thenable { this.appendLine(message); @@ -43,6 +44,7 @@ export class Logger { return vscode.window.showInformationMessage(message, ...items); } + // We should not await on this function. public showWarningMessage(message: string, items?: string[]): Thenable { this.appendLine(message); @@ -52,6 +54,7 @@ export class Logger { return vscode.window.showWarningMessage(message, ...items); } + // We should not await on this function. public showErrorMessage(message: string, items?: string[]): Thenable { this.appendLine(message); diff --git a/Extension/src/main.ts b/Extension/src/main.ts index 8af94840a8..36e9c112d6 100644 --- a/Extension/src/main.ts +++ b/Extension/src/main.ts @@ -40,7 +40,7 @@ export async function activate(context: vscode.ExtensionContext): Promise = new PersistentState("CPP.promptForMacArchictureMismatch", true); - // Read archictures of binaries from install.lock const fileContents: string = await util.readFileText(util.getInstallLockPath()); // Assume current platform if install.lock is empty. @@ -94,54 +92,42 @@ export async function activate(context: vscode.ExtensionContext): Promise { - if (selection === downloadLink) { - vscode.env.openExternal(vscode.Uri.parse(releaseDownloadUrl)); - } - }); + errMsg = localize("native.binaries.not.supported", "This {0} {1} version of the extension is incompatible with your OS. Please download and install the \"{2}\" version of the extension.", GetOSName(installedPlatformAndArchitecture.platform), installedPlatformAndArchitecture.architecture, vsixName); + vscode.window.showErrorMessage(errMsg, downloadLink).then(async (selection) => { + if (selection === downloadLink) { + vscode.env.openExternal(vscode.Uri.parse(releaseDownloadUrl)); } - } else { - // Reset the persistent boolean tracking whether to warn the user of architecture mismatch on OSX. - promptForMacArchictureMismatch.Value = true; - errMsg = localize("native.binaries.not.supported", "This {0} {1} version of the extension is incompatible with your OS. Please download and install the \"{2}\" version of the extension.", GetOSName(installedPlatformAndArchitecture.platform), installedPlatformAndArchitecture.architecture, vsixName); - vscode.window.showErrorMessage(errMsg, downloadLink).then(async (selection) => { - if (selection === downloadLink) { - vscode.env.openExternal(vscode.Uri.parse(releaseDownloadUrl)); - } - }); - } - } else { - // Reset the persistent boolean tracking whether to warn the user of architecture mismatch on OSX. - promptForMacArchictureMismatch.Value = true; - if (!(await util.checkInstallBinariesExist())) { - errMsg = localize("extension.installation.failed", "The C/C++ extension failed to install successfully. You will need to repair or reinstall the extension for C/C++ language features to function properly."); - const reload: string = localize("remove.extension", "Attempt to Repair"); - vscode.window.showErrorMessage(errMsg, reload).then(async (value?: string) => { - if (value === reload) { - await util.removeInstallLockFile(); - vscode.commands.executeCommand("workbench.action.reloadWindow"); - } - }); - } else if (!(await util.checkInstallJsonsExist())) { - // Check the Json files to declare if the extension has been installed successfully. - errMsg = localize("jason.files.missing", "The C/C++ extension failed to install successfully. You will need to reinstall the extension for C/C++ language features to function properly."); - const downloadLink: string = localize("download.button", "Go to Download Page"); - vscode.window.showErrorMessage(errMsg, downloadLink).then(async (selection) => { - if (selection === downloadLink) { - vscode.env.openExternal(vscode.Uri.parse(releaseDownloadUrl)); - } - }); - } + }); + } else if (!(await util.checkInstallBinariesExist())) { + errMsg = localize("extension.installation.failed", "The C/C++ extension failed to install successfully. You will need to repair or reinstall the extension for C/C++ language features to function properly."); + const reload: string = localize("remove.extension", "Attempt to Repair"); + vscode.window.showErrorMessage(errMsg, reload).then(async (value?: string) => { + if (value === reload) { + await util.removeInstallLockFile(); + vscode.commands.executeCommand("workbench.action.reloadWindow"); + } + }); + } else if (!(await util.checkInstallJsonsExist())) { + // Check the Json files to declare if the extension has been installed successfully. + errMsg = localize("jason.files.missing", "The C/C++ extension failed to install successfully. You will need to reinstall the extension for C/C++ language features to function properly."); + const downloadLink: string = localize("download.button", "Go to Download Page"); + vscode.window.showErrorMessage(errMsg, downloadLink).then(async (selection) => { + if (selection === downloadLink) { + vscode.env.openExternal(vscode.Uri.parse(releaseDownloadUrl)); + } + }); } return cppTools; @@ -176,7 +162,7 @@ async function processRuntimeDependencies(): Promise { // For macOS and if a user has upgraded their OS, check to see if we are on Mojave or later // and that the debugAdapters/lldb-mi folder exists. This will force a online install to get the correct binaries. if (!highSierraOrLowerRegex.test(info.version) && - !fs.existsSync(lldbMiFolderPath)) { + !await util.checkDirectoryExists(lldbMiFolderPath)) { forceOnlineInstall = true; @@ -298,7 +284,7 @@ function invalidPackageVersion(pkg: IPackage, info: PlatformInformation): boolea !VersionsMatch(pkg, info); } -function makeOfflineBinariesExecutable(info: PlatformInformation): Promise { +async function makeOfflineBinariesExecutable(info: PlatformInformation): Promise { const promises: Thenable[] = []; const packages: IPackage[] = util.packageJson["runtimeDependencies"]; packages.forEach(p => { @@ -307,10 +293,10 @@ function makeOfflineBinariesExecutable(info: PlatformInformation): Promise p.binaries.forEach(binary => promises.push(util.allowExecution(util.getExtensionFilePath(binary)))); } }); - return Promise.all(promises).then(() => { }); + await Promise.all(promises); } -function cleanUpUnusedBinaries(info: PlatformInformation): Promise { +async function cleanUpUnusedBinaries(info: PlatformInformation): Promise { const promises: Thenable[] = []; const packages: IPackage[] = util.packageJson["runtimeDependencies"]; const logger: Logger = getOutputChannelLogger(); @@ -327,7 +313,7 @@ function cleanUpUnusedBinaries(info: PlatformInformation): Promise { }); } }); - return Promise.all(promises).then(() => { }); + await Promise.all(promises); } function removeUnnecessaryFile(): Promise { @@ -428,7 +414,7 @@ async function postInstall(info: PlatformInformation): Promise { // If there is a download failure, we shouldn't continue activating the extension in some broken state. if (!installSuccess) { - return Promise.reject(""); + throw new Error(localize("failed.installing.dependencies", "Failed installing dependencies")); } else { // Notify users if debugging may not be supported on their OS. util.checkDistro(info); @@ -502,6 +488,7 @@ function rewriteManifest(): Promise { "onCommand:C_Cpp.GenerateEditorConfig", "onCommand:C_Cpp.GoToNextDirectiveInGroup", "onCommand:C_Cpp.GoToPrevDirectiveInGroup", + "onCommand:C_Cpp.CheckForCompiler", "onDebugInitialConfigurations", "onDebugResolve:cppdbg", "onDebugResolve:cppvsdbg", diff --git a/Extension/src/packageManager.ts b/Extension/src/packageManager.ts index 5657e29377..f94370bb1c 100644 --- a/Extension/src/packageManager.ts +++ b/Extension/src/packageManager.ts @@ -104,30 +104,25 @@ export class PackageManager { tmp.setGracefulCleanup(); } - public DownloadPackages(progress: vscode.Progress<{ message?: string; increment?: number }>): Promise { - return this.GetPackages() - .then((packages) => { - let count: number = 1; - return this.BuildPromiseChain(packages, (pkg): Promise => { - const p: Promise = this.DownloadPackage(pkg); - progress.report({ message: localize("downloading.progress.description", "Downloading {0}", pkg.description), increment: this.GetIncrement(count, packages.length) }); - count += 1; - return p; - }); - }); + public async DownloadPackages(progress: vscode.Progress<{ message?: string; increment?: number }>): Promise { + const packages: IPackage[] = await this.GetPackages(); + let count: number = 1; + return util.sequentialResolve(packages, async (pkg): Promise => { + progress.report({ message: localize("downloading.progress.description", "Downloading {0}", pkg.description), increment: this.GetIncrement(count, packages.length) }); + count += 1; + await this.DownloadPackage(pkg); + }); } - public InstallPackages(progress: vscode.Progress<{ message?: string; increment?: number }>): Promise { - return this.GetPackages() - .then((packages) => { - let count: number = 1; - return this.BuildPromiseChain(packages, (pkg): Promise => { - const p: Promise = this.InstallPackage(pkg); - progress.report({ message: localize("installing.progress.description", "Installing {0}", pkg.description), increment: this.GetIncrement(count, packages.length) }); - count += 1; - return p; - }); - }); + public async InstallPackages(progress: vscode.Progress<{ message?: string; increment?: number }>): Promise { + const packages: IPackage[] = await this.GetPackages(); + let count: number = 1; + return util.sequentialResolve(packages, async (pkg): Promise => { + progress.report({ message: localize("installing.progress.description", "Installing {0}", pkg.description), increment: this.GetIncrement(count, packages.length) }); + count += 1; + await this.InstallPackage(pkg); + }); + } private GetIncrement(curStep: number, totalSteps: number): number { @@ -138,28 +133,12 @@ export class PackageManager { return (curStep !== totalSteps) ? increment : maxIncrement - (totalSteps - 1) * increment; } - public GetPackages(): Promise { - return this.GetPackageList() - .then((list) => - list.filter((value, index, array) => - ArchitecturesMatch(value, this.platformInfo) && - PlatformsMatch(value, this.platformInfo) && - VersionsMatch(value, this.platformInfo) - ) - ); - } - - /** Builds a chain of promises by calling the promiseBuilder function once per item in the list. - * Like Promise.all, but runs the promises in sequence rather than simultaneously. - */ - private BuildPromiseChain(items: TItem[], promiseBuilder: (item: TItem) => Promise): Promise { - let promiseChain: Promise = Promise.resolve(null); - - for (const item of items) { - promiseChain = promiseChain.then(() => promiseBuilder(item)); - } - - return promiseChain; + public async GetPackages(): Promise { + const list: IPackage[] = await this.GetPackageList(); + return list.filter((value, index, array) => ArchitecturesMatch(value, this.platformInfo) && + PlatformsMatch(value, this.platformInfo) && + VersionsMatch(value, this.platformInfo) + ); } private GetPackageList(): Promise { @@ -364,17 +343,31 @@ export class PackageManager { return reject(new PackageManagerError('Downloaded file unavailable', localize("downloaded.unavailable", 'Downloaded file unavailable'), 'InstallPackage', pkg)); } - yauzl.fromFd(pkg.tmpFile.fd, { lazyEntries: true }, (err, zipfile) => { + yauzl.fromFd(pkg.tmpFile.fd, { lazyEntries: true, autoClose: true }, (err, zipfile) => { if (err || !zipfile) { return reject(new PackageManagerError('Zip file error', localize("zip.file.error", 'Zip file error'), 'InstallPackage', pkg, err)); } // setup zip file events - zipfile.on('end', resolve); - zipfile.on('error', err => reject(new PackageManagerError('Zip file error', localize("zip.file.error", 'Zip file error'), 'InstallPackage', pkg, err, err.code))); + // Keep track of any error that occurs, but don't resolve or reject the promise until the file is closed. + let pendingError: Error | undefined; + zipfile.on('close', () => { + if (!pendingError) { + resolve(); + } else { + reject(pendingError); + } + }); - zipfile.readEntry(); + zipfile.on('error', err => { + // Don't call reject() a second time. + // Errors can also arise from readStream and writeStream. + if (!pendingError) { + pendingError = new PackageManagerError('Zip file error', localize("zip.file.error", 'Zip file error'), 'InstallPackage', pkg, err, err.code); + zipfile.close(); + } + }); zipfile.on('entry', (entry: yauzl.Entry) => { const absoluteEntryPath: string = util.getExtensionFilePath(entry.fileName); @@ -383,7 +376,9 @@ export class PackageManager { // Directory - create it mkdirp(absoluteEntryPath, { mode: 0o775 }, (err) => { if (err) { - return reject(new PackageManagerError('Error creating directory', localize("create.directory.error", 'Error creating directory'), 'InstallPackage', pkg, err, err.code)); + pendingError = new PackageManagerError('Error creating directory', localize("create.directory.error", 'Error creating directory'), 'InstallPackage', pkg, err, err.code); + zipfile.close(); + return; } zipfile.readEntry(); @@ -394,25 +389,28 @@ export class PackageManager { // File - extract it zipfile.openReadStream(entry, (err, readStream: Readable | undefined) => { if (err || !readStream) { - return reject(new PackageManagerError('Error reading zip stream', localize("zip.stream.error", 'Error reading zip stream'), 'InstallPackage', pkg, err)); + pendingError = new PackageManagerError('Error reading zip stream', localize("zip.stream.error", 'Error reading zip stream'), 'InstallPackage', pkg, err); + zipfile.close(); + return; } - readStream.on('error', (err) => - reject(new PackageManagerError('Error in readStream', localize("read.stream.error", 'Error in read stream'), 'InstallPackage', pkg, err))); - mkdirp(path.dirname(absoluteEntryPath), { mode: 0o775 }, async (err) => { if (err) { - return reject(new PackageManagerError('Error creating directory', localize("create.directory.error", 'Error creating directory'), 'InstallPackage', pkg, err, err.code)); + pendingError = new PackageManagerError('Error creating directory', localize("create.directory.error", 'Error creating directory'), 'InstallPackage', pkg, err, err.code); + zipfile.close(); + return; } // Create as a .tmp file to avoid partially unzipped files // counting as completed files. const absoluteEntryTempFile: string = absoluteEntryPath + ".tmp"; - if (fs.existsSync(absoluteEntryTempFile)) { + if (await util.checkFileExists(absoluteEntryTempFile)) { try { await util.unlinkAsync(absoluteEntryTempFile); } catch (err) { - return reject(new PackageManagerError(`Error unlinking file ${absoluteEntryTempFile}`, localize("unlink.error", "Error unlinking file {0}", absoluteEntryTempFile), 'InstallPackage', pkg, err)); + pendingError = new PackageManagerError(`Error unlinking file ${absoluteEntryTempFile}`, localize("unlink.error", "Error unlinking file {0}", absoluteEntryTempFile), 'InstallPackage', pkg, err); + zipfile.close(); + return; } } @@ -421,19 +419,45 @@ export class PackageManager { const writeStream: fs.WriteStream = fs.createWriteStream(absoluteEntryTempFile, { mode: fileMode }); writeStream.on('close', async () => { - try { - // Remove .tmp extension from the file. - await util.renameAsync(absoluteEntryTempFile, absoluteEntryPath); - } catch (err) { - return reject(new PackageManagerError(`Error renaming file ${absoluteEntryTempFile}`, localize("rename.error", "Error renaming file {0}", absoluteEntryTempFile), 'InstallPackage', pkg, err)); + // Remove .tmp extension from the file, if there was no error. + // Otherwise, delete it. + // Don't move on to the next entry, if we've already called reject(), in + // which case zipfile.close() will already have been called. + if (!pendingError) { + try { + await util.renameAsync(absoluteEntryTempFile, absoluteEntryPath); + } catch (err) { + pendingError = new PackageManagerError(`Error renaming file ${absoluteEntryTempFile}`, localize("rename.error", "Error renaming file {0}", absoluteEntryTempFile), 'InstallPackage', pkg, err); + zipfile.close(); + return; + } + // Wait until output is done writing before reading the next zip entry. + // Otherwise, it's possible to try to launch the .exe before it is done being created. + zipfile.readEntry(); + } else { + try { + await util.unlinkAsync(absoluteEntryTempFile); + } catch (err) { + // Ignore failure to delete temp file. We already have an error to return. + } } - // Wait till output is done writing before reading the next zip entry. - // Otherwise, it's possible to try to launch the .exe before it is done being created. - zipfile.readEntry(); }); - writeStream.on('error', (err) => - reject(new PackageManagerError('Error in writeStream', localize("write.stream.error", 'Error in write stream'), 'InstallPackage', pkg, err))); + readStream.on('error', (err) => { + // Don't call reject() a second time. + if (!pendingError) { + pendingError = new PackageManagerError('Error in readStream', localize("read.stream.error", 'Error in read stream'), 'InstallPackage', pkg, err); + zipfile.close(); + } + }); + + writeStream.on('error', (err) => { + // Don't call reject() a second time. + if (!pendingError) { + pendingError = new PackageManagerError('Error in writeStream', localize("write.stream.error", 'Error in write stream'), 'InstallPackage', pkg, err); + zipfile.close(); + } + }); readStream.pipe(writeStream); }); @@ -448,6 +472,8 @@ export class PackageManager { }); } }); + + zipfile.readEntry(); }); }).then(() => { // Clean up temp file diff --git a/Extension/src/platform.ts b/Extension/src/platform.ts index a97d683236..48915c0ca1 100644 --- a/Extension/src/platform.ts +++ b/Extension/src/platform.ts @@ -25,32 +25,25 @@ export function GetOSName(processPlatform: string | undefined): string | undefin export class PlatformInformation { constructor(public platform: string, public architecture: string, public distribution?: LinuxDistribution, public version?: string) { } - public static GetPlatformInformation(): Promise { + public static async GetPlatformInformation(): Promise { const platform: string = os.platform(); const architecture: string = PlatformInformation.GetArchitecture(); - let distributionPromise: Promise = Promise.resolve(undefined); - let versionPromise: Promise = Promise.resolve(undefined); - + let distribution: LinuxDistribution | undefined; + let version: string | undefined; switch (platform) { case "win32": break; - case "linux": - distributionPromise = LinuxDistribution.GetDistroInformation(); + distribution = await LinuxDistribution.GetDistroInformation(); break; - case "darwin": - versionPromise = PlatformInformation.GetDarwinVersion(); + version = await PlatformInformation.GetDarwinVersion(); break; - default: throw new Error(localize("unknown.os.platform", "Unknown OS platform")); } - return Promise.all([distributionPromise, versionPromise]) - .then(([distro, version]) => - new PlatformInformation(platform, architecture, distro, version) - ); + return new PlatformInformation(platform, architecture, distribution, version); } public static GetArchitecture(): string { diff --git a/Extension/tools/OptionsSchema.json b/Extension/tools/OptionsSchema.json index 8b4290e74f..b2926f19a0 100644 --- a/Extension/tools/OptionsSchema.json +++ b/Extension/tools/OptionsSchema.json @@ -176,6 +176,23 @@ } } }, + "HardwareBreakpoints": { + "type": "object", + "description": "%c_cpp.debuggers.hardwareBreakpoints.description%", + "default": {}, + "properties": { + "require": { + "type": "boolean", + "description": "%c_cpp.debuggers.hardwareBreakpoints.require.description%", + "default": false + }, + "limit": { + "type": "integer", + "description": "%c_cpp.debuggers.hardwareBreakpoints.limit.description%", + "default": 0 + } + } + }, "CppdbgLaunchOptions": { "type": "object", "default": {}, @@ -360,6 +377,16 @@ "symbolLoadInfo": { "$ref": "#/definitions/SymbolLoadInfo", "description": "%c_cpp.debuggers.symbolLoadInfo.description%" + }, + "stopAtConnect": { + "type": "boolean", + "description": "%c_cpp.debuggers.stopAtConnect.description%", + "default": false + }, + "hardwareBreakpoints": { + "$ref": "#/definitions/HardwareBreakpoints", + "description": "%c_cpp.debuggers.hardwareBreakpoints.description%", + "default": {} } } }, diff --git a/Extension/translations_auto_pr.js b/Extension/translations_auto_pr.js index 3dc53ca466..54a4dbbd69 100644 --- a/Extension/translations_auto_pr.js +++ b/Extension/translations_auto_pr.js @@ -4,6 +4,7 @@ const fs = require("fs-extra"); const cp = require("child_process"); const Octokit = require('@octokit/rest') const path = require('path'); +const parseGitConfig = require('parse-git-config'); const branchName = 'localization'; const mergeTo = 'main'; @@ -12,23 +13,36 @@ const pullRequestTitle = '[Auto] Localization - Translated Strings'; let repoOwner = process.argv[2]; let repoName = process.argv[3]; -let locProjectName = process.argv[4]; -let authUser = process.argv[5]; -let authToken = process.argv[6]; - -if (!repoOwner || !repoName || !locProjectName || !authUser || !authToken) { - console.error(`ERROR: Usage: ${path.parse(process.argv[0]).base} ${path.parse(process.argv[1]).base} repo_owner repo_name loc_project_name auth_user auth_token`); +let authUser = process.argv[4]; +let authToken = process.argv[5]; +let userFullName = process.argv[6]; +let userEmail = process.argv[7]; +let locRootPath = process.argv[8]; +let locSubPath = process.argv[9]; + +if (!repoOwner || !repoName || !authUser || !authToken || !userFullName || !userEmail || !locRootPath || !locSubPath) { + console.error(`ERROR: Usage: ${path.parse(process.argv[0]).base} ${path.parse(process.argv[1]).base} repo_owner repo_name auth_token user_full_name user_email loc_root_path loc_sub_path`); + console.error(` repo_owner - The owner of the repo on GitHub. i.e. microsoft`); + console.error(` repo_name - The name of the repo on GitHub. i.e. vscode-cpptools`); + console.error(` auth_user - User account wiith permission to post a pull request against the GitHub repo.`); + console.error(` auth_token - A PAT associated with auth_user.`); + console.error(` user_full_name - A full name to associate with a git commit. (This is replaced by the PR account if commit is squashed.)`); + console.error(` user_email - An email to associate with a git commit. (This is replaced by the PR account if commit is squashed.)`); + console.error(` loc_root_path - The path to the folder with language-specific directories (containing localized xlf files).`); + console.error(` loc_sub_path - A sub-path after the language-specific directory, where the xlf to import is located. This should not include the name of the xlf file to import.)`); return; } console.log(`repoOwner=${repoOwner}`); console.log(`repoName=${repoName}`); -console.log(`locProjectName=${locProjectName}`); console.log(`authUser=${authUser}`); -console.log(`authToken=${authToken}`); +console.log(`userFullName=${userFullName}`); +console.log(`userEmail=${userEmail}`); +console.log(`locRootPath=${locRootPath}`); +console.log(`locSubPath=${locSubPath}`); function hasBranch(branchName) { - console.log(`Checking for existance of branch "${branchName}" (git branch --list ${branchName})`); + console.log(`Checking for existence of branch "${branchName}" (git branch --list ${branchName})`); let output = cp.execSync(`git branch --list ${branchName}`); let lines = output.toString().split("\n"); let found = false; @@ -45,7 +59,10 @@ function hasAnyChanges() { let lines = output.toString().split("\n"); let anyChanges = false; lines.forEach(line => { - anyChanges = anyChanges || (line != ''); + if (line != '') { + console.log("Change detected: " + line); + anyChanges = true; + } }); return anyChanges; @@ -66,19 +83,11 @@ function sleep(ms) { console.log("This script is potentially DESTRUCTIVE! Cancel now, or it will proceed in 10 seconds."); sleep(10000); -console.log("Looking for latest localization drop"); -let latestTxt = fs.readFileSync("\\\\simpleloc\\drops\\Drops\\vscode-extensions_2432\\Latest.txt") -let exp = /Build No:\s*(.*)(?!=\n)/gm; -let match = exp.exec(latestTxt.toString()); -let versionString = match[1]; - -console.log("Copying XLF files to vscode-translations-import directory"); -let rootSourcePath = `\\\\simpleloc\\drops\\Drops\\vscode-extensions_2432\\${versionString}\\Localization\\locdrop\\bin`; -let directories = fs.readdirSync(rootSourcePath); -directories.forEach(folderName => { - let sourcePath = `${rootSourcePath}\\${folderName}\\Projects\\Src\\vscode-extensions\\vscode-${locProjectName}.${folderName}.xlf`; - let destinationPath = `../vscode-translations-import/${folderName}/vscode-extensions/vscode-${locProjectName}.xlf`; - console.log(`Copying "${sourcePath}$" to "${destinationPath}"`); +let directories = [ "cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt-BR", "ru", "tr", "zh-Hans", "zh-Hant" ]; +directories.forEach(languageId => { + let sourcePath = `${locRootPath}\\${languageId}\\${locSubPath}\\${repoName}.${languageId}.xlf`; + let destinationPath = `../vscode-translations-import/${languageId}/vscode-extensions/${repoName}.xlf`; + console.log(`Copying "${sourcePath}" to "${destinationPath}"`); fs.copySync(sourcePath, destinationPath); }); @@ -115,22 +124,66 @@ if (!hasAnyChanges()) { return; } -// Commit changes files. -console.log(`Commiting changes (git commit -m "${commitComment}")`); -cp.execSync(`git commit -m "${commitComment}"`); +// Set up user and permissions + +// Save existing user name and email, in case already set. +var existingUserName; +var existingUserEmail; +var gitConfigPath = path.resolve(process.cwd(), '../.git/config'); +var config = parseGitConfig.sync({ path: gitConfigPath }); + +if (typeof config === 'object' && config.hasOwnProperty('user')) { + existingUserName = config.user.name; + existingUserEmail = config.user.email; +} +if (existingUserName === undefined) { + console.log(`Existing user name: undefined`); +} else { + console.log(`Existing user name: "${existingUserName}"`); + cp.execSync(`git config --local --unset user.name`); +} +if (existingUserEmail === undefined) { + console.log(`Existing user email: undefined`); +} else { + console.log(`Existing user email: "${existingUserEmail}"`); + cp.execSync(`git config --local --unset user.email`); +} + +console.log(`Setting local user name to: "${userFullName}"`); +cp.execSync(`git config --local user.name "${userFullName}"`); + +console.log(`Setting local user email to: "${userEmail}"`); +cp.execSync(`git config --local user.email "${userEmail}"`); console.log(`Configuring git with permission to push and to create pull requests (git remote remove origin && git remote add origin https://${authUser}:${authToken}@github.com/${repoOwner}/${repoName}.git`); cp.execSync('git remote remove origin'); cp.execSync(`git remote add origin https://${authUser}:${authToken}@github.com/${repoOwner}/${repoName}.git`); +// Commit changed files. +console.log(`Commiting changes (git commit -m "${commitComment}")`); +cp.execSync(`git commit -m "${commitComment}"`); + +if (existingUserName === undefined) { + console.log(`Restoring original user name: undefined`); + cp.execSync(`git config --local --unset user.name`); +} else { + console.log(`Restoring original user name: "${existingUserName}"`); + cp.execSync(`git config --local user.name "${existingUserName}"`); +} + +if (existingUserEmail === undefined) { + console.log(`Restoring original user email: undefined`); + cp.execSync(`git config --local --unset user.email`); +} else { + console.log(`Restoring original user email: "${existingUserEmail}"`); + cp.execSync(`git config --local user.email "${existingUserEmail}"`); +} + console.log(`pushing to remove branch (git push -f origin ${branchName})`); cp.execSync(`git push -f origin ${branchName}`); console.log("Checking if there is already a pull request..."); -const octokit = new Octokit({auth: { - username: authUser, - password: authToken} -}); +const octokit = new Octokit.Octokit({auth: authToken}); octokit.pulls.list({ owner: repoOwner, repo: repoName }).then(({data}) => { let alreadyHasPullRequest = false; if (data) { diff --git a/Extension/walkthrough/debugconfig/run-and-debug-project-linux.md b/Extension/walkthrough/debugconfig/run-and-debug-project-linux.md new file mode 100644 index 0000000000..5c8dcbda9c --- /dev/null +++ b/Extension/walkthrough/debugconfig/run-and-debug-project-linux.md @@ -0,0 +1,15 @@ +# Run and debug your C++ file on Linux + +To run and debug your C++ file in VS Code: + +1. Open the C++ source file that you want to run and debug. Make sure this file is active (currently displayed and selected) in the editor. + +2. Press `F5`. Or, from the main menu, choose **Run > Start Debugging**. + +3. Select **C++ (GDB/LLDB)**. + +4. Choose **g++ - Build and debug active file**. + +After running and debugging your C++ file for the first time, you'll notice two new files inside your project's **.vscode** folder: **tasks.json** and **launch.json**. + +For more complex build and debug scenarios, you can customize your build tasks and debug configurations in tasks.json and launch.json. For example, if you normally pass arguments to your compiler when building from the command line, you can specify those arguments in tasks.json using the **compilerArgs** property. Similarly, you can define arguments to pass to your program for debugging in launch.json. \ No newline at end of file diff --git a/Extension/walkthrough/debugconfig/run-and-debug-project-mac.md b/Extension/walkthrough/debugconfig/run-and-debug-project-mac.md new file mode 100644 index 0000000000..b49a3eef73 --- /dev/null +++ b/Extension/walkthrough/debugconfig/run-and-debug-project-mac.md @@ -0,0 +1,15 @@ +# Run and debug your C++ file on macOS + +To run and debug your C++ file in VS Code: + +1. Open the C++ source file that you want to run and debug. Make sure this file is active (currently displayed and selected) in the editor. + +2. Press `F5`. Or, from the main menu, choose **Run > Start Debugging**. + +3. Select **C++ (GDB/LLDB)**. + +4. Choose **clang++ - Build and debug active file**. + +After running and debugging your C++ file for the first time, you'll notice two new files inside your project's **.vscode** folder: **tasks.json** and **launch.json**. + +For more complex build and debug scenarios, you can customize your build tasks and debug configurations in tasks.json and launch.json. For example, if you normally pass arguments to your compiler when building from the command line, you can specify those arguments in tasks.json using the **compilerArgs** property. Similarly, you can define arguments to pass to your program for debugging in launch.json. diff --git a/Extension/walkthrough/debugconfig/run-and-debug-project-windows.md b/Extension/walkthrough/debugconfig/run-and-debug-project-windows.md new file mode 100644 index 0000000000..3d106bf4d9 --- /dev/null +++ b/Extension/walkthrough/debugconfig/run-and-debug-project-windows.md @@ -0,0 +1,15 @@ +# Run and debug your C++ file on Windows + +To run and debug your C++ file in VS Code: + +1. Open the C++ source file that you want to run and debug. Make sure this file is active (currently displayed and selected) in the editor. + +2. Press `F5`. Or, from the main menu, choose **Run > Start Debugging**. + +3. Select **C++ (Windows)**. + +4. Choose **cl.exe - Build and debug active file**. + +After running and debugging your C++ file for the first time, you'll notice two new files inside your project's **.vscode** folder: **tasks.json** and **launch.json**. + +For more complex build and debug scenarios, you can customize your build tasks and debug configurations in tasks.json and launch.json. For example, if you normally pass arguments to your compiler when building from the command line, you can specify those arguments in tasks.json using the **compilerArgs** property. Similarly, you can define arguments to pass to your program for debugging in launch.json. diff --git a/Extension/walkthrough/images/cmake-tools-dark.png b/Extension/walkthrough/images/cmake-tools-dark.png new file mode 100644 index 0000000000..ca0f4da733 Binary files /dev/null and b/Extension/walkthrough/images/cmake-tools-dark.png differ diff --git a/Extension/walkthrough/images/cmake-tools-hc.png b/Extension/walkthrough/images/cmake-tools-hc.png new file mode 100644 index 0000000000..0a6f0dbf07 Binary files /dev/null and b/Extension/walkthrough/images/cmake-tools-hc.png differ diff --git a/Extension/walkthrough/images/cmake-tools-light.png b/Extension/walkthrough/images/cmake-tools-light.png new file mode 100644 index 0000000000..d1fc19ff41 Binary files /dev/null and b/Extension/walkthrough/images/cmake-tools-light.png differ diff --git a/Extension/walkthrough/images/cpp-folder-explorer-dark.png b/Extension/walkthrough/images/cpp-folder-explorer-dark.png new file mode 100644 index 0000000000..afaad57f1a Binary files /dev/null and b/Extension/walkthrough/images/cpp-folder-explorer-dark.png differ diff --git a/Extension/walkthrough/images/cpp-folder-explorer-hc.png b/Extension/walkthrough/images/cpp-folder-explorer-hc.png new file mode 100644 index 0000000000..6d1980e865 Binary files /dev/null and b/Extension/walkthrough/images/cpp-folder-explorer-hc.png differ diff --git a/Extension/walkthrough/images/cpp-folder-explorer-light.png b/Extension/walkthrough/images/cpp-folder-explorer-light.png new file mode 100644 index 0000000000..39e5d119b9 Binary files /dev/null and b/Extension/walkthrough/images/cpp-folder-explorer-light.png differ diff --git a/Extension/walkthrough/images/getting-started-video.png b/Extension/walkthrough/images/getting-started-video.png new file mode 100644 index 0000000000..ba4bfa9d39 Binary files /dev/null and b/Extension/walkthrough/images/getting-started-video.png differ diff --git a/Extension/walkthrough/images/intellisense-config-dark.png b/Extension/walkthrough/images/intellisense-config-dark.png new file mode 100644 index 0000000000..9432346e42 Binary files /dev/null and b/Extension/walkthrough/images/intellisense-config-dark.png differ diff --git a/Extension/walkthrough/images/intellisense-config-hc.png b/Extension/walkthrough/images/intellisense-config-hc.png new file mode 100644 index 0000000000..26b22b3019 Binary files /dev/null and b/Extension/walkthrough/images/intellisense-config-hc.png differ diff --git a/Extension/walkthrough/images/intellisense-config-light.png b/Extension/walkthrough/images/intellisense-config-light.png new file mode 100644 index 0000000000..93b48edcd4 Binary files /dev/null and b/Extension/walkthrough/images/intellisense-config-light.png differ diff --git a/Extension/walkthrough/installcompiler/install-clang-macos.md b/Extension/walkthrough/installcompiler/install-clang-macos.md new file mode 100644 index 0000000000..9a1eeba0d3 --- /dev/null +++ b/Extension/walkthrough/installcompiler/install-clang-macos.md @@ -0,0 +1,13 @@ +# Install a C++ compiler on macOS + +If you're doing C++ development for macOS, we recommend installing the Clang compiler. All you need to do is run the following command in a Terminal window to install the command line developer tools: + +```bash +xcode-select --install +``` + +Then, to verify that clang is installed, run the following command in a Terminal window. You should see a message with information about the version of Clang you're using. + +```bash +clang --version +``` \ No newline at end of file diff --git a/Extension/walkthrough/installcompiler/install-compiler-windows.md b/Extension/walkthrough/installcompiler/install-compiler-windows.md new file mode 100644 index 0000000000..b1c6688d60 --- /dev/null +++ b/Extension/walkthrough/installcompiler/install-compiler-windows.md @@ -0,0 +1,17 @@ +# Install a C++ compiler on Windows + +If you're doing C++ development for Windows, we recommend installing the Microsoft Visual C++ (MSVC) compiler toolset. If you're targeting Linux from Windows, check out [Using C++ and Windows Subsystem for Linux (WSL) in VS Code](https://code.visualstudio.com/docs/cpp/config-wsl). Or, you could [install GCC on Windows with MinGW](https://code.visualstudio.com/docs/cpp/config-mingw). + + + +1. To install MSVC, download **C++ Build Tools** from the Visual Studio [Downloads](https://visualstudio.microsoft.com/downloads#other) page. + +2. In the Visual Studio Installer, check the **C++ build tools** workload and select **Install**. + + >**Note**: You can use the C++ toolset from Visual Studio Build Tools along with Visual Studio Code to compile, build, and verify any C++ codebase as long as you also have a valid Visual Studio license (either Community, Pro, or Enterprise) that you are actively using to develop that C++ codebase. + +3. Open the **Developer Command Prompt for VS** by typing 'developer' in the Windows Start menu. + +4. Check your MSVC installation by typing `cl` into the Developer Command Prompt for VS. You should see a copyright message with the version and basic usage description. + + >**Note**: To use MSVC from the command line or VS Code, you must run from a **Developer Command Prompt for VS**. An ordinary shell such as PowerShell, Bash, or the Windows command prompt does not have the necessary path environment variables set. diff --git a/Extension/walkthrough/installcompiler/install-gcc-linux.md b/Extension/walkthrough/installcompiler/install-gcc-linux.md new file mode 100644 index 0000000000..df97e121da --- /dev/null +++ b/Extension/walkthrough/installcompiler/install-gcc-linux.md @@ -0,0 +1,20 @@ + +# Install a C++ compiler on Linux +If you're doing C++ development for Linux, we recommend installing the GCC compiler. Installing GCC is simple, just follow these three steps: + +1. Run the following command from the terminal window to update the Ubuntu package lists. An out-of-date Linux distribution can sometimes interfere with attempts to install new packages. + + ```bash + sudo apt-get update + ``` + +2. Install the GNU compiler tools and the GDB debugger with this command: + + ```bash + sudo apt-get install build-essential gdb + +3. Verify GCC is installed by running the following command. You should see a copyright message and information about the version of GCC you're using. + + ```bash + gcc --version + ``` \ No newline at end of file diff --git a/Extension/yarn.lock b/Extension/yarn.lock index b97393ded7..a46049f63c 100644 --- a/Extension/yarn.lock +++ b/Extension/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -9,6 +16,20 @@ dependencies: "@babel/highlight" "^7.8.3" +"@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== + +"@babel/highlight@^7.10.4": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" + integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/highlight@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" @@ -23,6 +44,30 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== +"@es-joy/jsdoccomment@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.4.3.tgz#c66b42aa66d2e0718f77fccc8d9061cf0b1092ac" + integrity sha512-t0JWZfQiG+Qkr6+tl05dlGcgE/MMPqs7QfNlFkTsbpcCu2Zfukcan/fIiHKTc0iOs4Yh3cnfklMayJnlmKaOwQ== + dependencies: + comment-parser "^1.1.5" + esquery "^1.4.0" + jsdoctypeparser "^9.0.0" + +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@gulp-sourcemaps/identity-map@1.X": version "1.0.2" resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9" @@ -42,6 +87,27 @@ normalize-path "^2.0.1" through2 "^2.0.3" +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + "@octokit/auth-token@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" @@ -138,11 +204,6 @@ "@types/eslint" "*" "@types/estree" "*" -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - "@types/eslint@*": version "7.2.7" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.7.tgz#f7ef1cf0dceab0ae6f9a976a0a9af14ab1baca26" @@ -171,6 +232,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/minimatch@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -235,57 +301,84 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin-tslint@^2.19.2": - version "2.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-2.20.0.tgz#5e0a2cabec226081b615067be5d4a1477ba1b4c8" - integrity sha512-nvQqHXNtTg56eeLgl8BbTqw0+PILjgtthB2MEJ279NqfSMjTzUr7dkt/JIuGbxi9netT7u3iQaTE4nuGbGTTpQ== +"@typescript-eslint/eslint-plugin-tslint@^4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-4.22.1.tgz#5b66c35047f9c395a6d56d49a5666af588f6c270" + integrity sha512-pfidpEzYYvZpcbQDzC55yfwihEREk831rFC50i5f+4GMMvpFvwA5BmGjJL2+djCFHfowD9Y1MRD0hC26oU72Ew== dependencies: - "@typescript-eslint/experimental-utils" "2.20.0" + "@typescript-eslint/experimental-utils" "4.22.1" lodash "^4.17.15" -"@typescript-eslint/eslint-plugin@^2.19.2": - version "2.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.20.0.tgz#a522d0e1e4898f7c9c6a8e1ed3579b60867693fa" - integrity sha512-cimIdVDV3MakiGJqMXw51Xci6oEDEoPkvh8ggJe2IIzcc0fYqAxOXN6Vbeanahz6dLZq64W+40iUEc9g32FLDQ== +"@typescript-eslint/eslint-plugin@^4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.1.tgz#6bcdbaa4548553ab861b4e5f34936ead1349a543" + integrity sha512-kVTAghWDDhsvQ602tHBc6WmQkdaYbkcTwZu+7l24jtJiYvm9l+/y/b2BZANEezxPDiX5MK2ZecE+9BFi/YJryw== dependencies: - "@typescript-eslint/experimental-utils" "2.20.0" - eslint-utils "^1.4.3" + "@typescript-eslint/experimental-utils" "4.22.1" + "@typescript-eslint/scope-manager" "4.22.1" + debug "^4.1.1" functional-red-black-tree "^1.0.1" + lodash "^4.17.15" regexpp "^3.0.0" + semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.20.0": - version "2.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.20.0.tgz#3b6fa5a6b8885f126d5a4280e0d44f0f41e73e32" - integrity sha512-fEBy9xYrwG9hfBLFEwGW2lKwDRTmYzH3DwTmYbT+SMycmxAoPl0eGretnBFj/s+NfYBG63w/5c3lsvqqz5mYag== +"@typescript-eslint/experimental-utils@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.1.tgz#3938a5c89b27dc9a39b5de63a62ab1623ab27497" + integrity sha512-svYlHecSMCQGDO2qN1v477ax/IDQwWhc7PRBiwAdAMJE7GXk5stF4Z9R/8wbRkuX/5e9dHqbIWxjeOjckK3wLQ== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.20.0" + "@typescript-eslint/scope-manager" "4.22.1" + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/typescript-estree" "4.22.1" eslint-scope "^5.0.0" + eslint-utils "^2.0.0" -"@typescript-eslint/parser@^2.19.2": - version "2.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.20.0.tgz#608e5bb06ba98a415b64ace994c79ab20f9772a9" - integrity sha512-o8qsKaosLh2qhMZiHNtaHKTHyCHc3Triq6aMnwnWj7budm3xAY9owSZzV1uon5T9cWmJRJGzTFa90aex4m77Lw== +"@typescript-eslint/parser@^4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.1.tgz#a95bda0fd01d994a15fc3e99dc984294f25c19cc" + integrity sha512-l+sUJFInWhuMxA6rtirzjooh8cM/AATAe3amvIkqKFeMzkn85V+eLzb1RyuXkHak4dLfYzOmF6DXPyflJvjQnw== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.20.0" - "@typescript-eslint/typescript-estree" "2.20.0" - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/scope-manager" "4.22.1" + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/typescript-estree" "4.22.1" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.1.tgz#5bb357f94f9cd8b94e6be43dd637eb73b8f355b4" + integrity sha512-d5bAiPBiessSmNi8Amq/RuLslvcumxLmyhf1/Xa9IuaoFJ0YtshlJKxhlbY7l2JdEk3wS0EnmnfeJWSvADOe0g== + dependencies: + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/visitor-keys" "4.22.1" + +"@typescript-eslint/types@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.1.tgz#bf99c6cec0b4a23d53a61894816927f2adad856a" + integrity sha512-2HTkbkdAeI3OOcWbqA8hWf/7z9c6gkmnWNGz0dKSLYLWywUlkOAQ2XcjhlKLj5xBFDf8FgAOF5aQbnLRvgNbCw== -"@typescript-eslint/typescript-estree@2.20.0": - version "2.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.20.0.tgz#90a0f5598826b35b966ca83483b1a621b1a4d0c9" - integrity sha512-WlFk8QtI8pPaE7JGQGxU7nGcnk1ccKAJkhbVookv94ZcAef3m6oCE/jEDL6dGte3JcD7reKrA0o55XhBRiVT3A== +"@typescript-eslint/typescript-estree@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.1.tgz#dca379eead8cdfd4edc04805e83af6d148c164f9" + integrity sha512-p3We0pAPacT+onSGM+sPR+M9CblVqdA9F1JEdIqRVlxK5Qth4ochXQgIyb9daBomyQKAXbygxp1aXQRV0GC79A== dependencies: + "@typescript-eslint/types" "4.22.1" + "@typescript-eslint/visitor-keys" "4.22.1" debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" + globby "^11.0.1" is-glob "^4.0.1" - lodash "^4.17.15" - semver "^6.3.0" + semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/visitor-keys@4.22.1": + version "4.22.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.1.tgz#6045ae25a11662c671f90b3a403d682dfca0b7a6" + integrity sha512-WPkOrIRm+WCLZxXQHCi+WG8T2MMTUFR70rWjdWYddLT7cEfb2P4a3O/J2U1FBVsSFTocXLCoXWY6MZGejeStvQ== + dependencies: + "@typescript-eslint/types" "4.22.1" + eslint-visitor-keys "^2.0.0" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" @@ -444,6 +537,11 @@ acorn-jsx@^5.1.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + acorn@5.X, acorn@^5.0.3: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" @@ -454,6 +552,11 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + acorn@^8.0.4: version "8.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" @@ -481,7 +584,7 @@ ajv@^6.10.0, ajv@^6.10.2: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.12.5: +ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -491,6 +594,16 @@ ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.2.0.tgz#c89d3380a784ce81b2085f48811c4c101df4c602" + integrity sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-colors@4.1.1, ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -650,13 +763,15 @@ array-each@^1.0.0, array-each@^1.0.1: resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= -array-includes@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== +array-includes@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" is-string "^1.0.5" array-initial@^1.0.0: @@ -698,13 +813,14 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.flat@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" arrify@^2.0.1: version "2.0.1" @@ -721,6 +837,11 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-child-process@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/async-child-process/-/async-child-process-1.1.1.tgz#27d0a598b5738707f9898c048bd231340583747b" @@ -889,16 +1010,16 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5: - version "4.16.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" - integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== +browserslist@^4.14.5, browserslist@^4.16.6: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - caniuse-lite "^1.0.30001181" - colorette "^1.2.1" - electron-to-chromium "^1.3.649" + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" escalade "^3.1.1" - node-releases "^1.1.70" + node-releases "^1.1.71" btoa-lite@^1.0.0: version "1.0.0" @@ -940,6 +1061,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -960,10 +1089,10 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001181: - version "1.0.30001204" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" - integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ== +caniuse-lite@^1.0.30001219: + version "1.0.30001230" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" + integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" @@ -1170,7 +1299,7 @@ color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -colorette@^1.2.1: +colorette@^1.2.1, colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== @@ -1195,10 +1324,10 @@ comment-json@^3.0.3: has-own-prop "^2.0.0" repeat-string "^1.6.1" -comment-parser@^0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.2.tgz#baf6d99b42038678b81096f15b630d18142f4b8a" - integrity sha512-4Rjb1FnxtOcv9qsfuaNuVsmmVn4ooVoBHzYfyKteiXwIU84PClyGA5jASoFMwPV93+FPh9spwueXauxFJZkGAg== +comment-parser@1.1.5, comment-parser@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.5.tgz#453627ef8f67dbcec44e79a9bd5baa37f0bce9b2" + integrity sha512-RePCE4leIhBlmrqiYTvaqEeGYg7qpSl4etaIabKtdOQVi+mSTIBBklGUwIr79GXYnl3LpMwmDw4KeR2stNc6FA== component-emitter@^1.2.1: version "1.3.0" @@ -1274,7 +1403,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1329,7 +1458,7 @@ debug@3.X, debug@^3.1.0: dependencies: ms "^2.1.1" -debug@4.3.1: +debug@4.3.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -1365,7 +1494,7 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -1448,6 +1577,13 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -1496,10 +1632,10 @@ editorconfig@^0.15.3: semver "^5.6.0" sigmund "^1.0.1" -electron-to-chromium@^1.3.649: - version "1.3.700" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.700.tgz#a6999a954c698dc7da5e84c369d65432dbe895be" - integrity sha512-wQtaxVZzpOeCjW1CGuC5W3bYjE2jglvk076LcTautBOB9UtHztty7wNzjVsndiMcSsdUsdMy5w76w5J1U7OPTQ== +electron-to-chromium@^1.3.723: + version "1.3.738" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.738.tgz#aec24b091c82acbfabbdcce08076a703941d17ca" + integrity sha512-vCMf4gDOpEylPSLPLSwAEsz+R3ShP02Y3cAKMZvTqule3XcPp7tgc/0ESI7IS6ZeyBlGClE50N53fIOkcIVnpw== emitter-listener@^1.0.1, emitter-listener@^1.1.1: version "1.1.2" @@ -1547,7 +1683,7 @@ enhanced-resolve@^5.7.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.6: +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -1573,22 +1709,27 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1: - version "1.17.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184" - integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ== +es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" es-module-lexer@^0.4.0: version "0.4.1" @@ -1672,52 +1813,55 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -eslint-import-resolver-node@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" - integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== dependencies: debug "^2.6.9" resolve "^1.13.1" -eslint-module-utils@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" - integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== dependencies: debug "^2.6.9" pkg-dir "^2.0.0" -eslint-plugin-import@^2.20.1: - version "2.20.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" - integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== +eslint-plugin-import@^2.22.1: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" + array-includes "^3.1.1" + array.prototype.flat "^1.2.3" contains-path "^0.1.0" debug "^2.6.9" doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" + eslint-import-resolver-node "^0.3.4" + eslint-module-utils "^2.6.0" has "^1.0.3" minimatch "^3.0.4" - object.values "^1.1.0" + object.values "^1.1.1" read-pkg-up "^2.0.0" - resolve "^1.12.0" - -eslint-plugin-jsdoc@^21.0.0: - version "21.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-21.0.0.tgz#36bc215c5d22b320312a633dda6dfe81c34393af" - integrity sha512-CdLGe2oyw5YAX9rxq9bVz7H2PK+r8PVwdGuvYGMBstpbVD/66yUAgRFQRsJwAsRKLmReo58Lw1jFdNcxdOc4eg== - dependencies: - comment-parser "^0.7.2" - debug "^4.1.1" - jsdoctypeparser "^6.1.0" - lodash "^4.17.15" - regextras "^0.7.0" - semver "^6.3.0" - spdx-expression-parse "^3.0.0" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-plugin-jsdoc@^33.1.0: + version "33.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-33.1.0.tgz#9aa52d0eb0126ea42528aa352265007dce320565" + integrity sha512-nyH1qAj5f4uDnDpg4aiAS65wJSfxfBDf0lIgNfxtew31z3VRaM8WsVmpe4UhI2u27oOD/ChRuye6KAzzuHn6Jw== + dependencies: + "@es-joy/jsdoccomment" "^0.4.3" + comment-parser "1.1.5" + debug "^4.3.1" + esquery "^1.4.0" + jsdoctypeparser "^9.0.0" + lodash "^4.17.21" + regextras "^0.7.1" + semver "^7.3.5" + spdx-expression-parse "^3.0.1" eslint-scope@^5.0.0: version "5.0.0" @@ -1742,12 +1886,29 @@ eslint-utils@^1.4.3: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.0.0, eslint@^6.8.0: +eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^6.0.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== @@ -1790,6 +1951,49 @@ eslint@^6.0.0, eslint@^6.8.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" +eslint@^7.25.0: + version "7.25.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" + integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.21" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + espree@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" @@ -1799,6 +2003,15 @@ espree@^6.1.2: acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -1811,6 +2024,13 @@ esquery@^1.0.1: dependencies: estraverse "^4.0.0" +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" @@ -1830,7 +2050,7 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.2.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== @@ -1992,12 +2212,24 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== +fast-glob@^3.1.1: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -2007,6 +2239,13 @@ fastest-levenshtein@^1.0.12: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -2028,6 +2267,13 @@ file-entry-cache@^5.0.1: dependencies: flat-cache "^2.0.1" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -2133,6 +2379,14 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -2143,6 +2397,11 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -2230,6 +2489,15 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2247,6 +2515,11 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +git-config-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-2.0.0.tgz#62633d61af63af4405a5024efd325762f58a181b" + integrity sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA== + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -2262,7 +2535,7 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" -glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -2341,6 +2614,25 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^13.6.0: + version "13.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" + integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.1: + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + glogg@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" @@ -2471,6 +2763,11 @@ gulplog@^1.0.0: dependencies: glogg "^1.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2491,6 +2788,11 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -2541,10 +2843,12 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" -hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== +hosted-git-info@^2.1.4, hosted-git-info@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" http-proxy-agent@^2.1.0: version "2.1.0" @@ -2579,6 +2883,11 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-fresh@^3.0.0: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" @@ -2587,6 +2896,14 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -2618,6 +2935,11 @@ ini@^1.3.4: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + inquirer@^7.0.0: version "7.0.4" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" @@ -2679,6 +3001,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -2693,16 +3020,28 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.1.5: +is-callable@^1.1.4: version "1.1.5" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" @@ -2800,6 +3139,16 @@ is-negated-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -2846,12 +3195,13 @@ is-promise@^2.1, is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== +is-regex@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== dependencies: - has "^1.0.3" + call-bind "^1.0.2" + has-symbols "^1.0.1" is-relative@^1.0.0: version "1.0.0" @@ -2875,7 +3225,7 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== -is-symbol@^1.0.2: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== @@ -2965,10 +3315,10 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdoctypeparser@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz#acfb936c26300d98f1405cb03e20b06748e512a8" - integrity sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA== +jsdoctypeparser@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" + integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== json-parse-better-errors@^1.0.2: version "1.0.2" @@ -2980,11 +3330,23 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -3065,6 +3427,14 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + liftoff@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-3.1.0.tgz#c9ba6081f908670607ee79062d700df062c52ed3" @@ -3144,6 +3514,16 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -3154,12 +3534,17 @@ lodash.set@^4.3.2: resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.14, lodash@^4.17.15: +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3259,6 +3644,11 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -3286,6 +3676,14 @@ micromatch@^4.0.0: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + mime-db@1.46.0: version "1.46.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" @@ -3315,7 +3713,7 @@ minimist@0.0.8, minimist@^0.2.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg== -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -3459,10 +3857,10 @@ node-fetch@^2.3.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-releases@^1.1.70: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^1.1.71: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== normalize-package-data@^2.3.2: version "2.5.0" @@ -3526,10 +3924,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-inspect@^1.9.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.2.tgz#b6385a3e2b7cae0b5eafcf90cddf85d128767f30" + integrity sha512-gz58rdPpadwztRrPjZE9DZLOABUpTGdcANUgOwBFO1C+HZZhePoP83M65WGDmbpwFYJSWqavbl4SgDn4k8RYTA== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -3543,7 +3941,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.0.4, object.assign@^4.1.0: +object.assign@^4.0.4: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -3553,6 +3951,16 @@ object.assign@^4.0.4, object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + object.defaults@^1.0.0, object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" @@ -3586,14 +3994,14 @@ object.reduce@^1.0.0: for-own "^1.0.0" make-iterator "^1.0.0" -object.values@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== +object.values@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" octokit-pagination-methods@^1.1.0: @@ -3634,6 +4042,18 @@ optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + ordered-read-streams@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" @@ -3748,6 +4168,14 @@ parse-filepath@^1.0.1: map-cache "^0.2.0" path-root "^0.1.1" +parse-git-config@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-3.0.0.tgz#4a2de08c7b74a2555efa5ae94d40cd44302a6132" + integrity sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA== + dependencies: + git-config-path "^2.0.0" + ini "^1.3.5" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -3850,6 +4278,11 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pause-stream@^0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -3872,6 +4305,11 @@ picomatch@^2.0.5: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== +picomatch@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" + integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3927,6 +4365,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -3987,6 +4430,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4103,10 +4551,15 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== -regextras@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.0.tgz#2298bef8cfb92b1b7e3b9b12aa8f69547b7d71e4" - integrity sha512-ds+fL+Vhl918gbAUb0k2gVKbTZLsg84Re3DI6p85Et0U0tYME3hyW4nMK8Px4dtDaBA2qNjvG5uWyW7eK5gfmw== +regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regextras@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" + integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== remove-bom-buffer@^3.0.0: version "3.0.0" @@ -4159,6 +4612,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -4206,14 +4664,14 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.4.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.4.0: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" -resolve@^1.9.0: +resolve@^1.17.0, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -4234,6 +4692,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -4248,6 +4711,13 @@ rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -4255,6 +4725,13 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + rxjs@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" @@ -4310,12 +4787,12 @@ semver-greatest-satisfied-range@^1.1.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.1.2, semver@^6.3.0: +semver@^6.1.2: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -4395,6 +4872,11 @@ signal-exit@^3.0.3: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -4404,6 +4886,15 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -4504,6 +4995,14 @@ spdx-expression-parse@^3.0.0: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" +spdx-expression-parse@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + spdx-license-ids@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" @@ -4615,21 +5114,21 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - function-bind "^1.1.1" -string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - function-bind "^1.1.1" string_decoder@^1.1.1: version "1.3.0" @@ -4700,7 +5199,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -4756,6 +5255,19 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +table@^6.0.4: + version "6.6.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.6.0.tgz#905654b79df98d9e9a973de1dd58682532c40e8e" + integrity sha512-iZMtp5tUvcnAdtHpZTWLPF0M7AgiQsURR2DwmxnJwSy8I3+cY+ozzVvYha3BOLG2TB+L0CqjIz+91htuj6yCXg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -4912,6 +5424,16 @@ ts-loader@^8.1.0: micromatch "^4.0.0" semver "^7.3.4" +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -4950,6 +5472,13 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -4957,6 +5486,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -4987,6 +5521,16 @@ typescript@^3.5.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -5311,6 +5855,17 @@ webpack@^5.28.0: watchpack "^2.0.0" webpack-sources "^2.1.1" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -5354,7 +5909,7 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==