diff --git a/Extension/.eslintrc.js b/Extension/.eslintrc.js index bcecc89de..5d4f86f03 100644 --- a/Extension/.eslintrc.js +++ b/Extension/.eslintrc.js @@ -28,7 +28,6 @@ module.exports = { "format": ["PascalCase"] } ], - "@typescript-eslint/indent": "error", "@typescript-eslint/member-delimiter-style": [ "error", { diff --git a/Extension/CHANGELOG.md b/Extension/CHANGELOG.md index 1c3e8ddc0..0d7faa60f 100644 --- a/Extension/CHANGELOG.md +++ b/Extension/CHANGELOG.md @@ -1,5 +1,45 @@ # C/C++ for Visual Studio Code Changelog +## Version 1.16.2: June 22, 2023 + +### New Features +* Add Call Hierarchy. [#16](https://github.com/microsoft/vscode-cpptools/issues/16) +* Add "Copy Definition" and "Copy Declaration" code actions (for when the default Create placement isn't desired). [#10238](https://github.com/microsoft/vscode-cpptools/issues/10238), [#10942](https://github.com/microsoft/vscode-cpptools/issues/10942) + +### Enhancements +* Add support for other glob pattern syntax, such as `[]` and `^`. [#8960](https://github.com/microsoft/vscode-cpptools/issues/8960) +* Add support for C++23 z/Z and zu/ZU suffixes in clang/gcc modes. [#10190](https://github.com/microsoft/vscode-cpptools/issues/10190) +* Add warning logging when the database is reset due to a version change. [#10984](https://github.com/microsoft/vscode-cpptools/issues/10984) +* Move user compilers to the beginning of the "known compilers" lists. [#10985](https://github.com/microsoft/vscode-cpptools/issues/10985) +* Add file path to the details of a call hierarchy result. [#10997](https://github.com/microsoft/vscode-cpptools/issues/10997) +* Add `miDebuggerArgs` to debugger attach option. + * Thank you for the contribution @Summon528 [PR #11066](https://github.com/microsoft/vscode-cpptools/pull/11066) + +### Bug Fixes +* Fix an IntelliSense parsing bug with C++20 ranges. [#8039](https://github.com/microsoft/vscode-cpptools/issues/8039) +* Fix incorrect insertion of Create Declaration/Definition when it also adds a #include. [#10464](https://github.com/microsoft/vscode-cpptools/issues/#10464) +* Fix an IntelliSense bug with user-defined floating-point literals. [#10837](https://github.com/microsoft/vscode-cpptools/issues/10837) +* Fix deadlock with Find All References. [#10855](https://github.com/microsoft/vscode-cpptools/issues/10855) +* Fix performance issues on machines with > 32 threads. [#10874](https://github.com/microsoft/vscode-cpptools/issues/10874) +* Fix localization of "C/C++ Configurations". [#10907](https://github.com/microsoft/vscode-cpptools/issues/10907) +* Fix the workspace folder not getting added to the browse.path in some cases. [#10914](https://github.com/microsoft/vscode-cpptools/issues/10914) +* Fix incorrect Apple clang to LLVM clang version mappings. [#10920](https://github.com/microsoft/vscode-cpptools/issues/10920) +* Revert -fms-extensions being added for mingw compilers by default (due to bugs). [#10940](https://github.com/microsoft/vscode-cpptools/issues/10940) +* Fix the "known compilers" list not getting updated with "user compilers". [#10943](https://github.com/microsoft/vscode-cpptools/issues/10943) +* Fix cancelation of Find All References while confirming references. [#10947](https://github.com/microsoft/vscode-cpptools/issues/10947) +* Fix a bug with workspace parsing status. [PR #10974](https://github.com/microsoft/vscode-cpptools/pull/10974) +* Fix some bugs if settings were empty string or null. [#10994](https://github.com/microsoft/vscode-cpptools/issues/10994) +* Fix cancellation for Find All References/Rename/Call Hierarchy. [#10998](https://github.com/microsoft/vscode-cpptools/issues/10998) +* Fix two Doxygen comment generation bugs. [#10995](https://github.com/microsoft/vscode-cpptools/issues/10995), [#11016](https://github.com/microsoft/vscode-cpptools/issues/11016) +* Fix the thread pool sometimes not increasing in size, which could lead to the cpptools process incorrectly being shut down. [#11003](https://github.com/microsoft/vscode-cpptools/issues/11003) +* Stop using vcFormat if .editorconfig exists with only non-formatting cpp settings. [PR #11015](https://github.com/microsoft/vscode-cpptools/pull/11015) +* Use integratedTerminal when user is running cl.exe for debugger. [#11032](https://github.com/microsoft/vscode-cpptools/issues/11032) + * Thank you for the contribution @caiohamamura [PR #11035](https://github.com/microsoft/vscode-cpptools/pull/11035) +* Fix the configure your IntelliSense notification to not show again when the "Don't Show Again" option is selected. [#11070](https://github.com/microsoft/vscode-cpptools/issues/11070) +* Fix a bug that could cause incomplete reading of stdout/stderr of child processes on Windows. +* Fix incorrect "declaration is incompatible" IntelliSense errors. +* Fix some potential crashes. + ## Version 1.15.4: May 1, 2023 ### Enhancements * Support multiple natvis files in `visualizerFile`. [#925](https://github.com/microsoft/vscode-cpptools/issues/925) diff --git a/Extension/bin/messages/cs/messages.json b/Extension/bin/messages/cs/messages.json index 441db346e..85d53b0a3 100644 --- a/Extension/bin/messages/cs/messages.json +++ b/Extension/bin/messages/cs/messages.json @@ -3343,14 +3343,14 @@ "mapování souborů modulu pro %s bylo zadané více než jednou", "mapování jednotek záhlaví pro %s bylo zadané více než jednou", "není zadané žádné mapování pro %s", - "mapování souborů modulu pro %s je neplatné", + null, "nejde najít záhlaví %s, které se má importovat", "více než jeden soubor v seznamu souborů modulu odpovídá %s", "soubor modulu, který se našel pro %s, je pro jiný modul", "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", @@ -3483,5 +3483,19 @@ "Explicitní deklarace specializace nemůže být deklarací typu friend.", "typ std::float128_t se nepodporuje. místo toho se použije std::float64_t", "typ std::bfloat16_t se nepodporuje. místo toho se použije std::float32_t", - "vodítko pro dedukce se nedá deklarovat pro šablonu aliasu %no" + "vodítko pro dedukce se nedá deklarovat pro šablonu aliasu %no", + "%n bylo deklarováno jako nedostupné.", + "%n bylo deklarováno jako nedostupné (%sq).", + "kvůli atributu deprecated", + "explicitní parametry šablony lambda jsou funkcí C++20", + "použití _Noreturn je od C23 zastaralé. Místo toho použijte [[noreturn]].", + "použití _Alignof je od C23 zastaralé. Místo toho použijte alignof.", + "použití _Alignas je od C23 zastaralé. Místo toho použijte alignas.", + "použití _Bool je od C23 zastaralé. Místo toho použijte bool.", + "použití _Static_assert je od C23 zastaralé. Místo toho použijte static_assert.", + "použití _Thread_local je od C23 zastaralé. Místo toho použijte thread_local.", + "Aby bylo možné používat soubor modulu %sq (modul Microsoft Visual Studio IFC), musí být povolený režim Microsoftu.", + "soubor modulu %sq se nepovedlo otevřít", + "nalezeno v mapě modulu %sq.", + "nalezeno v mapě jednotek hlaviček pro %sq" ] \ No newline at end of file diff --git a/Extension/bin/messages/de/messages.json b/Extension/bin/messages/de/messages.json index 434840ab2..4563b77a9 100644 --- a/Extension/bin/messages/de/messages.json +++ b/Extension/bin/messages/de/messages.json @@ -3343,14 +3343,14 @@ "Die Moduldateizuordnung für \"%s\" wurde mehrmals angegeben.", "Die Zuordnung der Headereinheit für \"%s\" wurde mehrmals angegeben.", "Für \"%s\" wurde keine Zuordnung angegeben.", - "Die Moduldateizuordnung für \"%s\" ist ungültig.", + null, "Der zu importierende Header \"%s\" wurde nicht gefunden.", "Mehrere Dateien in der Moduldateiliste stimmen mit \"%s\" überein.", "Die für \"%s\" gefundene Moduldatei ist für ein anderes Modul bestimmt.", "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.", @@ -3483,5 +3483,19 @@ "Eine explizite Spezialisierungsdeklaration darf keine Frienddeklaration sein", "der Typ „std::float128_t“ wird nicht unterstützt. Stattdessen wird „std::float64_t“ verwendet", "der Typ „std::bfloat16_t“ wird nicht unterstützt. Stattdessen wird „std::float32_t“ verwendet", - "Für die Aliasvorlage %no darf keine Deduktionsanleitung deklariert werden." + "Für die Aliasvorlage %no darf keine Deduktionsanleitung deklariert werden.", + "%n wurde als nicht verfügbar deklariert.", + "%n wurde als nicht verfügbar deklariert (%sq).", + "aufgrund eines „veralteten“ Attributs", + "Explizite Lambdavorlagenparameter sind ein C++20-Feature.", + "Die Verwendung von „_Noreturn“ in C23 ist veraltet. Verwenden Sie stattdessen „[[noreturn]]“.", + "Die Verwendung von „_Alignof“ in C23 ist veraltet. Verwenden Sie stattdessen „alignof“.", + "Die Verwendung von „_Alignas“ in C23 ist veraltet. Verwenden Sie stattdessen „alignas“.", + "Die Verwendung von „_Bool“ in C23 ist veraltet. Verwenden Sie stattdessen „bool“.", + "Die Verwendung von „_Static_assert“ in C23 ist veraltet. Verwenden Sie stattdessen „static_assert“.", + "Die Verwendung von „_Thread_local“ in C23 ist veraltet. Verwenden Sie stattdessen „thread_local“.", + "Der Microsoft-Modus muss aktiviert sein, um die Moduldatei %sq (ein Microsoft Visual Studio IFC-Modul) zu verwenden.", + "Die Moduldatei \"%sq\" konnte nicht importiert werden.", + "wurde in der Modulzuordnung für das Modul %sq gefunden", + "wurde in der Headereinheitszuordnung für %sq gefunden" ] \ No newline at end of file diff --git a/Extension/bin/messages/es/messages.json b/Extension/bin/messages/es/messages.json index 209862f0f..ad767fc9d 100644 --- a/Extension/bin/messages/es/messages.json +++ b/Extension/bin/messages/es/messages.json @@ -2935,7 +2935,7 @@ "tipo %t no válido en puntero this para la función miembro %nfd con restricción amp", "Tipo de valor devuelto %t no válido para la función %nfd con restricción amp", "Tipo de parámetro %t no válido para la función %nfd con restricción amp", - null, + "construcción no válida en la función %nfd con restricción amp", "Clase de almacenamiento %s no válida en la función %nfd con restricción amp", "%s no se permite en la función %nfd con restricción amp", "conversión no válida en la función con restricción amp", @@ -3343,14 +3343,14 @@ "la asignación de archivos de módulo para \"%s\" se especificó más de una vez", "la asignación de unidades de encabezado para \"%s\" se especificó más de una vez", "no se especificó ninguna asignación para \"%s\"", - "la asignación del archivo de módulo para \"%s\" no es válida", + null, "no se encuentra el encabezado \"%s\" para importar", "hay más de un archivo de la lista de archivos de módulo que coincide con \"%s\"", "el archivo de módulo que se encontró para \"%s\" es para otro módulo", "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", @@ -3465,7 +3465,7 @@ "debido a un atributo “no disponible”", "calificador 'asm' duplicado", "un campo de bits con un tipo de enumeración incompleto o una enumeración opaca con un tipo base no válido", - "intentó construir un elemento a partir de la partición IFC %sq mediante un índice en la partición IFC %sq", + "intentó construir un elemento a partir de la partición IFC %sq mediante un índice en la partición IFC %sq2", "la partición %sq especificó su tamaño de entrada como %d1 cuando se esperaba %d2", "se encontró un requisito IFC inesperado al procesar el módulo %sq1", "error de condición en la línea %d en %s1: %sq2", @@ -3478,9 +3478,24 @@ "el módulo %sq es un valor de ordenación no válido", "una plantilla de función cargada desde un módulo IFC se analizó incorrectamente como %nd", "no se pudo cargar una referencia de entidad IFC en el módulo %sq", - "Ordenación de índice IFC = %d1, valor = %d2", + "de la partición %sq elemento %d1 (posición de archivo %d2, posición relativa %d3)", "no se permiten designadores encadenados para un tipo de clase con un destructor no trivial", "una declaración de especialización explícita no puede ser una declaración \"friend\"", "no se admite el tipo std::float128_t; se usará std::float64_t en su lugar", - "no se admite el tipo std::bfloat16_t; se usará std::float32_t en su lugar" + "no se admite el tipo std::bfloat16_t; se usará std::float32_t en su lugar", + "no se puede declarar una guía de deducción para la plantilla de alias %no", + "%n se declaró no disponible", + "%n se declaró no disponible (%sq)", + "debido a un atributo \"en desuso\"", + "los parámetros de plantilla lambda explícitos son una característica de C++20", + "el uso de \"_Noreturn\" ha quedado obsoleto en C23; usar '[[noreturn]]' en su lugar", + "el uso de \"_Alignof\" ha quedado obsoleto en C23; usar \"alignof\" en su lugar", + "el uso de \"_Alignas\" ha quedado obsoleto en C23; usar \"alignas\" en su lugar", + "el uso de \"_Bool\" ha quedado obsoleto en C23; usar 'bool' en su lugar", + "el uso de \"_Static_assert\" ha quedado obsoleto en C23; usar \"static_assert\" en su lugar", + "el uso de \"_Thread_local\" ha quedado obsoleto en C23; usar \"thread_local\" en su lugar", + "El modo Microsoft debe estar habilitado para usar el archivo de módulo %sq (un módulo IFC de Microsoft Visual Studio).", + "no se pudo abrir el archivo de módulo %sq", + "se encuentra en la asignación de módulo para el módulo %sq", + "se encuentra en el mapa de unidad de encabezado para %sq" ] \ No newline at end of file diff --git a/Extension/bin/messages/fr/messages.json b/Extension/bin/messages/fr/messages.json index 5c604df66..e1640c818 100644 --- a/Extension/bin/messages/fr/messages.json +++ b/Extension/bin/messages/fr/messages.json @@ -3343,14 +3343,14 @@ "mappage de fichier de module pour '%s' spécifié plusieurs fois", "mappage d'unité d'en-tête pour '%s' spécifié plusieurs fois", "aucun mappage spécifié pour '%s'", - "le mappage de fichier de module pour '%s' est non valide", + null, "l'en-tête '%s' à importer est introuvable", "plusieurs fichiers dans la liste de fichiers de module correspondent à '%s'", "le fichier de module trouvé pour '%s' est destiné à un autre module", "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", @@ -3483,5 +3483,19 @@ "une déclaration de spécialisation explicite ne peut pas être une déclaration friend", "le type std::float128_t n’est pas pris en charge ; std::float64_t sera utilisé à la place", "le type std::bfloat16_t n’est pas pris en charge ; std::float32_t sera utilisé à la place", - "un guide de déduction ne peut pas être déclaré pour le modèle d’alias %no" + "un guide de déduction ne peut pas être déclaré pour le modèle d’alias %no", + "%n a été déclaré non disponible", + "%n a été déclaré indisponible (%sq)", + "en raison d’un attribut 'deprecated'", + "les paramètres de modèle lambda explicites sont une fonctionnalité C++20", + "l’utilisation de '_Noreturn' a été obsolète en C23; utiliser '[[noreturn]]' à la place", + "l’utilisation de '_Alignof' a été obsolète en C23; utiliser 'alignof' à la place", + "l’utilisation de '_Alignas' a été obsolète en C23; utiliser 'alignas' à la place", + "l’utilisation de '_Bool' a été obsolète en C23; utiliser 'bool' à la place", + "l’utilisation de '_Static_assert' a été obsolète en C23; utiliser 'static_assert' à la place", + "l’utilisation de '_Thread_local' a été obsolète en C23; utiliser 'thread_local' à la place", + "Le mode Microsoft doit être activé pour utiliser le fichier de module %sq (module IFC Microsoft Visual Studio)", + "impossible d’ouvrir le fichier de module %sq", + "trouvé dans le mappage de module pour le module %sq", + "trouvé dans le mappage d’unité d’en-tête pour %sq" ] \ No newline at end of file diff --git a/Extension/bin/messages/it/messages.json b/Extension/bin/messages/it/messages.json index 47e2a8e41..17277e048 100644 --- a/Extension/bin/messages/it/messages.json +++ b/Extension/bin/messages/it/messages.json @@ -3343,14 +3343,14 @@ "il mapping del file del modulo per '%s' è stato specificato più di una volta", "il mapping dell'unità intestazione per '%s' è stato specificato più di una volta", "non è stato specificato alcun mapping per '%s'", - "Il mapping del file del modulo per '%s' non è valido", + null, "non è possibile trovare l'intestazione '%s' da importare", "più di un file nell'elenco file di modulo corrisponde a '%s'", "il file di modulo trovato per '%s' è riferito a un modulo diverso", "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", @@ -3483,5 +3483,19 @@ "una dichiarazione di specializzazione esplicita non può essere una dichiarazione Friend", "il tipo std::float128_t non è supportato; verrà invece usato std::float64_t", "il tipo std::bfloat16_t non è supportato; verrà utilizzato std::float32_t", - "non è possibile dichiarare una guida alla deduzione per il modello di alias %no" + "non è possibile dichiarare una guida alla deduzione per il modello di alias %no", + "%n dichiarato non disponibile", + "%n dichiarato non disponibile (%sq)", + "a causa di un attributo 'deprecato'", + "i parametri espliciti del modello lambda sono una funzionalità di C++20", + "l'uso di '_Noreturn' è obsoleto in C23; usare '[[noreturn]]'", + "l'uso di '_Alignof' è obsoleto in C23; usare 'alignof'", + "l'uso di '_Alignas' è obsoleto in C23; usare 'alignas'", + "l'uso di '_Bool' è obsoleto in C23; usare 'bool'", + "l'uso di '_Static_assert' è obsoleto in C23; usare 'static_assert'", + "l'uso di '_Thread_local' è obsoleto in C23; usare 'thread_local'", + "È necessario abilitare la modalità Microsoft per usare il file del modulo %sq (un modulo IFC Microsoft Visual Studio)", + "non è stato possibile aprire il file del modulo %sq", + "trovato nella mappa dei moduli per il modulo %sq", + "trovato nella mappa delle unità intestazione per %sq" ] \ No newline at end of file diff --git a/Extension/bin/messages/ja/messages.json b/Extension/bin/messages/ja/messages.json index f7941566b..cbb211523 100644 --- a/Extension/bin/messages/ja/messages.json +++ b/Extension/bin/messages/ja/messages.json @@ -2935,7 +2935,7 @@ "amp 制限メンバー関数 %nfd の this-pointer に無効な型 %t", "amp 制限関数 %nfd に無効な戻り値の型 %t", "amp 制限関数 %nfd に無効なパラメーター型 %t", - null, + "amp 制限関数 %nfd に無効なコンストラクト", "無効なストレージ クラス %s (amp 制限関数 %nfd)", "%s は amp 制限関数 %nfd では許可されていません", "amp 制限関数に無効なキャスト", @@ -3343,14 +3343,14 @@ "'%s' のモジュール ファイル マッピングが 2 回以上指定されました", "'%s' のヘッダー単位のマッピングが 2 回以上指定されました", "'%s' にマッピングが指定されていません", - "'%s' のモジュール ファイル マッピングが無効です", + null, "インポートするヘッダー '%s' が見つかりません", "モジュール ファイル リスト内の複数のファイルが '%s' と一致しています", "'%s' に対して見つかったモジュール ファイルは別のモジュール用です", "あらゆる種類のモジュール ファイル", "モジュール ファイルを読み取れません", "現在のオプションで char8_t 型がサポートされていないので、ビルトイン関数を使用できません", - "--ms_await コマンド ライン オプションは、C++20 コルーチンが有効になっている場合は指定できません", + null, "既定の集約要素の初期化における明示的なコンストラクター %nod の非標準的な使用", "memcpy に似た組み込み関数のソースやターゲットでオブジェクトが指定されていません", "memcpy に似た組み込み関数により、表現上個別の型である %t1 と %t2 のコピーが試行されます", @@ -3465,7 +3465,7 @@ "'unavailable' 属性が原因です", "'asm' 修飾子の複製", "不完全な列挙型を持つビット フィールド、または無効な基本型を持つ不透明な列挙のいずれかです", - "IFC パーティション %sq へのインデックスを使用して、IFC パーティション %sq から要素を構築しようとしました", + "IFC パーティション %sq2 へのインデックスを使用して、IFC パーティション %sq から要素を構築しようとしました", "パーティション %sq は、%d2 が予期されたときにエントリ サイズを %d1 として指定しました", "モジュール %sq1 の処理中に予期しない IFC 要件が発生しました", "条件が行 %d で失敗しました (%s1: %sq2)", @@ -3478,9 +3478,24 @@ "モジュール %sq は無効な並べ替え値です", "IFC モジュールから読み込まれた関数テンプレートが誤って %nd として解析されました", "モジュール %sq で IFC エンティティ参照を読み込めませんでした", - "IFC インデックスの並べ替え = %d1、値 = %d2", + "パーティション元 %sq 要素 %d1 (ファイル位置 %d2、相対位置 %d3)", "非単純デストラクターを持つクラス型では、チェーンされた指定子は許可されていません", "明示的特殊化宣言はフレンド宣言にできない場合があります", "std::float128_t 型はサポートされていません。代わりに std::float64_t が使用されます", - "std::bfloat16_t 型はサポートされていません。代わりに std::float32_t が使用されます" + "std::bfloat16_t 型はサポートされていません。代わりに std::float32_t が使用されます", + "エイリアス テンプレート %no に対して演繹ガイドを宣言することはできません", + "%n は使用できないと宣言されました", + "%n は使用できないと宣言されました (%sq)", + "'deprecated' 属性が原因です", + "明示的なラムダ テンプレート パラメーターは C++20 機能です", + "'_Noreturn' の使用は C23 で廃止されました。代わりに '[[noreturn]]' を使用してください", + "'_Alignof' の使用は C23 で廃止されました。代わりに 'alignof' を使用してください", + "'_Alignas' の使用は C23 で廃止されました。代わりに 'alignas' を使用してください", + "'_Bool' の使用は C23 で廃止されました。代わりに 'bool' を使用してください", + "'_Static_assert' の使用は C23 で廃止されました。代わりに 'static_assert' を使用してください", + "'_Thread_local' の使用は C23 で廃止されました。代わりに 'thread_local' を使用してください", + "モジュール ファイル %sq (Microsoft Visual Studio IFC モジュール) を使用するには、Microsoft モードを有効にする必要があります", + "モジュール ファイル %sq を開くことができませんでした", + "モジュール %sq のモジュール マップで見つかりました", + "%sq のヘッダー ユニット マップで見つかりました" ] \ No newline at end of file diff --git a/Extension/bin/messages/ko/messages.json b/Extension/bin/messages/ko/messages.json index eb2da69ac..10d5af7a5 100644 --- a/Extension/bin/messages/ko/messages.json +++ b/Extension/bin/messages/ko/messages.json @@ -3343,14 +3343,14 @@ "'%s'에 대한 모듈 파일 매핑이 두 번 이상 지정되었습니다.", "'%s'에 대한 헤더 단위 매핑이 두 번 이상 지정되었습니다.", "'%s'에 대한 매핑이 지정되지 않았습니다.", - "'%s'에 대한 모듈 파일 매핑이 잘못되었습니다.", + null, "가져올 '%s' 헤더를 찾을 수 없습니다.", "모듈 파일 목록에 있는 두 개 이상의 파일이 '%s'과(와) 일치합니다.", "'%s'에 대해 찾은 모듈 파일이 다른 모듈에 대한 것입니다.", "모든 종류의 모듈 파일", "모듈 파일을 읽을 수 없음", "char8_t 형식이 현재 옵션에서 지원되지 않기 때문에 기본 제공 함수를 사용할 수 없습니다.", - "C++20 코루틴을 사용하도록 설정한 경우 --ms_await 명령줄 옵션을 지정할 수 없습니다.", + null, "기본 집계 요소 초기화에 명시적 생성자 %nod의 비표준 사용", "memcpy 유사 내장의 소스 또는 대상이 개체를 가리키지 않음", "memcpy 유사 내장이 대표적으로 차별화된 형식 %t1 및 %t2을(를) 복사하려고 시도함", @@ -3483,5 +3483,19 @@ "명시적 전문화 선언은 friend 선언이 아닐 수 있습니다.", "std::float128_t 형식은 지원되지 않습니다. std::float64_t이(가) 대신 사용됩니다.", "std::bfloat16_t 형식은 지원되지 않습니다. std::float32_t이(가) 대신 사용됩니다.", - "별칭 템플릿 %no에 대해 추론 가이드를 선언할 수 없습니다." + "별칭 템플릿 %no에 대해 추론 가이드를 선언할 수 없습니다.", + "%n이(가) 사용할 수 없음으로 선언되었습니다.", + "%n이(가) 사용할 수 없음으로 선언되었습니다 (%sq).", + "'deprecated' 특성 때문에", + "명시적 람다 템플릿 매개 변수는 C++20 기능입니다.", + "'_Noreturn'은 C23에서 더 이상 사용되지 않습니다. 대신 '[[noreturn]]'을 사용하세요.", + "'_Alignof'는 C23에서 더 이상 사용되지 않습니다. 대신 'alignof'를 사용하세요.", + "'_Alignas'는 C23에서 더 이상 사용되지 않습니다. 대신 'alignas'를 사용하세요.", + "'_Bool'은 C23에서 더 이상 사용되지 않습니다. 대신 'bool'을 사용하세요.", + "'_Static_assert'는 C23에서 더 이상 사용되지 않습니다. 대신 'static_assert'을 사용하세요.", + "'_Thread_local'은 C23에서 더 이상 사용되지 않습니다. 대신 'thread_local'을 사용하세요.", + "모듈 파일 %sq(Microsoft Visual Studio IFC 모듈)을 사용하려면 Microsoft 모드를 활성화해야 합니다.", + "모듈 파일 %sq을(를) 열 수 없습니다.", + "모듈 %sq에 대한 모듈 맵에서 찾았습니다.", + "%sq의 헤더 단위 맵에서 찾았습니다." ] \ No newline at end of file diff --git a/Extension/bin/messages/pl/messages.json b/Extension/bin/messages/pl/messages.json index 67d387b8c..69582ea5e 100644 --- a/Extension/bin/messages/pl/messages.json +++ b/Extension/bin/messages/pl/messages.json @@ -3343,14 +3343,14 @@ "mapowanie pliku modułu dla elementu „%s” zostało określone więcej niż raz", "mapowanie jednostki nagłówka dla elementu „%s” zostało określone więcej niż raz", "nie określono mapowania dla elementu „%s”", - "mapowanie pliku modułu dla elementu „%s” jest nieprawidłowe", + null, "nie można odnaleźć nagłówka „%s” do zaimportowania", "więcej niż jeden plik na liście plików modułu pasuje do elementu „%s”", "plik modułu znaleziony dla elementu „%s” jest dla innego modułu", "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", @@ -3483,5 +3483,19 @@ "jawna deklaracja specjalizacji nie może być deklaracją zaprzyjaźnioną", "typ std::float128_t nie jest obsługiwany; zamiast tego zostanie użyty std::float64_t", "Typ std::bfloat16_t nie jest obsługiwany; zamiast tego zostanie użyty std::float32_t", - "nie można zadeklarować przewodnika wnioskowania dla szablonu aliasu %no" + "nie można zadeklarować przewodnika wnioskowania dla szablonu aliasu %no", + "Element %n został zadeklarowany jako niedostępny", + "Element %n został zadeklarowany jako niedostępny (%sq)", + "z powodu atrybutu „deprecated”", + "jawne parametry szablonu lambda są funkcją języka C++20", + "użycie elementu „_Noreturn” jest przestarzałe w języku C23; użyj zamiast tego „[[noreturn]]”", + "użycie elementu „_Alignof” jest przestarzałe w C23; użyj zamiast tego elementu „alignof”", + "użycie elementu „_Alignas” zostało uznane za przestarzałe w C23; użyj zamiast tego elementu „alignas”", + "użycie elementu „_Bool” jest przestarzałe w języku C23; użyj zamiast tego opcji „bool”", + "użycie elementu „_Static_assert” jest przestarzałe w języku C23; użyj zamiast tego elementu \"static_assert\"", + "użycie elementu „_Thread_local” jest przestarzałe w języku C23; użyj zamiast tego elementu \"thread_local\"", + "Aby można było używać pliku modułu %sq (modułu MICROSOFT Visual Studio IFC) musi być włączony tryb firmy Microsoft.", + "nie można otworzyć pliku modułu %sq", + "znaleziono w mapie modułu dla modułu %sq", + "znaleziono na mapie jednostki nagłówka dla %sq" ] \ 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 dca16848b..4bc7b7644 100644 --- a/Extension/bin/messages/pt-br/messages.json +++ b/Extension/bin/messages/pt-br/messages.json @@ -3343,14 +3343,14 @@ "o mapeamento de arquivo de módulo de '%s' foi especificado mais de uma vez", "o mapeamento de unidade de cabeçalho de '%s' foi especificado mais de uma vez", "não foi especificado nenhum mapeamento para '%s'", - "o mapeamento de arquivo de módulo de '%s' é inválido", + null, "não é possível localizar o cabeçalho '%s' a ser importado", "mais de um arquivo na lista de arquivos de módulo corresponde a '%s'", "o arquivo de módulo encontrado para '%s' é de um módulo diferente", "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", @@ -3483,5 +3483,19 @@ "uma declaração de especialização explícita não pode ser uma declaração de friend", "o tipo std::float128_t não tem suporte; em vez disso, std::float64_t será usado", "o tipo std::bfloat16_t não tem suporte; em vez disso, std::float32_t será usado", - "um guia de dedução não pode ser declarado para o modelo de alias %no" + "um guia de dedução não pode ser declarado para o modelo de alias %no", + "%n foi declarado indisponível", + "%n foi declarado indisponível (%sq)", + "por causa de um atributo 'obsoleto'", + "parâmetros de modelo lambda explícitos são um recurso do C++20", + "o uso de '_Noreturn' foi obsoleto em C23; use '[[noreturn]]' em vez disso", + "o uso de '_Alignof' foi obsoleto em C23; use 'alignof' em vez disso", + "o uso de '_Alignas' foi obsoleto em C23; use 'alignas' em vez disso", + "o uso de '_Bool' foi obsoleto em C23; use 'bool' em vez disso", + "o uso de '_Static_assert' foi obsoleto em C23; use 'static_assert' em vez disso", + "o uso de '_Thread_local' foi obsoleto em C23; use 'thread_local' em vez disso", + "O modo Microsoft deve estar ativado para usar o arquivo de módulo %sq (um módulo IFC do Microsoft Visual Studio)", + "não foi possível abrir o arquivo de módulo %sq", + "encontrado no mapa de módulo para o módulo %sq", + "encontrado no mapa de unidade de cabeçalho para %sq" ] \ No newline at end of file diff --git a/Extension/bin/messages/ru/messages.json b/Extension/bin/messages/ru/messages.json index 52934240f..a92aeef21 100644 --- a/Extension/bin/messages/ru/messages.json +++ b/Extension/bin/messages/ru/messages.json @@ -3343,14 +3343,14 @@ "сопоставление файла модуля для \"%s\" указано несколько раз", "сопоставление блока заголовка для \"%s\" указано несколько раз", "сопоставление для \"%s\" не указано", - "сопоставление файла модуля для \"%s\" является недопустимым", + null, "не удается найти заголовок \"%s\" для импорта", "несколько файлов в списке файлов модулей соответствуют \"%s\"", "файл модуля, обнаруженный для \"%s\", относится к другому модулю", "любой тип файла модуля", "не удалось прочитать файл модуля", "встроенная функция недоступна, так как тип char8_t не поддерживается с текущими параметрами.", - "невозможно указать параметр командной строки --ms_await, если включены сопрограммы C++20.", + null, "нестандартное использование явного конструктора %nod для агрегатной инициализации элементов по умолчанию.", "источник или назначение встроенной функции, похожей на memcpy, не указывает на объект", "Встроенная функция, похожая на memcpy, пытается скопировать различные с точки зрения представления типы %t1 и %t2", @@ -3483,5 +3483,19 @@ "явное объявление специализации не может быть объявлением дружественной функции", "тип std::float128_t не поддерживается; вместо этого будет использоваться std::float64_t", "тип std::bfloat16_t не поддерживается; вместо этого будет использоваться std::float32_t", - "руководство по дедукции не может быть объявлено для шаблона псевдонима %no" + "руководство по дедукции не может быть объявлено для шаблона псевдонима %no", + "%n объявлено недоступным", + "%n объявлено недоступным (%sq)", + "из-за атрибута \"deprecated\"", + "явные параметры шаблона лямбда-выражения — это функция C++20", + "использование \"_Noreturn\" устарело в C23; используйте вместо этого \"[[noreturn]]\"", + "использование \"_Alignof\" устарело в C23; используйте вместо этого \"alignof\"", + "использование \"_Alignas\" устарело в C23; используйте вместо этого \"alignas\"", + "использование \"_Bool\" устарело в C23; используйте вместо этого \"bool\"", + "использование \"_Static_assert\" устарело в C23; используйте вместо этого \"static_assert\"", + "использование \"_Thread_local\" устарело в C23; используйте вместо этого \"thread_local\"", + "Для использования файла модуля %sq должен быть включен режим Майкрософт (модуль IFC Microsoft Visual Studio)", + "не удалось открыть файл модуля %sq", + "найдено в сопоставлении модулей для модуля %sq", + "найдено в сопоставлении единиц заголовка для %sq" ] \ No newline at end of file diff --git a/Extension/bin/messages/tr/messages.json b/Extension/bin/messages/tr/messages.json index 3a3a3056f..c5c5f6c58 100644 --- a/Extension/bin/messages/tr/messages.json +++ b/Extension/bin/messages/tr/messages.json @@ -2935,7 +2935,7 @@ "this işaretçisinde amp kısıtlamalı %nfd üye işlevi için %t türü geçersiz", "AMP ile sınırlı %nfd işlevi için %t dönüş türü geçersiz", "AMP ile sınırlı %nfd işlevi için %t parametre türü geçersiz", - null, + "AMP ile sınırlı %nfd işlevinde geçersiz yapı", "%s depolama sınıfı AMP ile sınırlı %nfd işlevi için geçersiz", "%s kullanımına AMP ile sınırlı %nfd işlevinde izin verilmiyor", "AMP ile sınırlı işlevde geçersiz tür dönüştürme", @@ -3343,14 +3343,14 @@ "'%s' için modül dosyası eşlemesi birden çok kez belirtildi", "'%s' için üst bilgi birimi eşlemesi birden çok kez belirtildi", "'%s' için eşleme belirtilmedi", - "'%s' için modül dosyası eşlemesi geçersiz", + null, "içeri aktarılacak '%s' üst bilgisi bulunamıyor", "modül dosyası listesinde birden fazla dosya '%s' ile eşleşiyor", "'%s' için bulunan modül dosyası farklı bir modüle yönelik", "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", @@ -3465,7 +3465,7 @@ "'kullanılamayan' bir öznitelik nedeniyle", "yinelenen 'asm' niteleyicisi", "tamamlanmamış sabit listesi türüne sahip bir bit alanı veya geçersiz temel türe sahip opak bir sabit listesi", - "%sq IFC bölümü içinde bir dizin kullanılarak %sq IFC bölümündeki bir öğe oluşturulmaya çalışıldı", + "%sq2 IFC bölümü içinde bir dizin kullanılarak %sq IFC bölümündeki bir öğe oluşturulmaya çalışıldı", "%sq bölümü, %d2 beklenirken girdi boyutunu %d1 olarak belirtti", "%sq1 modülü işlenirken beklenmeyen bir IFC gereksinimiyle karşılaşıldı", "koşul, %d numaralı satırda (%s1 içinde) başarısız oldu: %sq2", @@ -3478,9 +3478,24 @@ "%sq modülü geçersiz sıralama değeri", "bir IFC modülünden yüklenen bir fonksiyon şablonu hatalı bir şekilde %nd olarak ayrıştırıldı", "%sq modülünde bir IFC varlık referansı yüklenemedi", - "IFC dizin sıralaması = %d1, değer = %d2", + "%sq bölümündeki %d1 öğesinden (%d2 dosya konumu, %d3 göreli konumu)", "zincirli belirleyicilere, önemsiz yıkıcıya sahip bir sınıf türü için izin verilmez", "açık bir özelleştirme bildirimi, arkadaş bildirimi olamaz", "std::float128_t türü desteklenmiyor; bunun yerine std::float64_t kullanılacak", - "std::bfloat16_t türü desteklenmiyor; bunun yerine std::float32_t kullanılacak" + "std::bfloat16_t türü desteklenmiyor; bunun yerine std::float32_t kullanılacak", + "%no diğer ad şablonu için çıkarsama kılavuzu bildirilmemiş olabilir", + "%n, kullanılamaz olarak bildirildi", + "%n, kullanılamaz olarak bildirildi (%sq)", + "'deprecated' özniteliği nedeniyle", + "açık lambda şablon parametreleri bir C++20 özelliğidir", + "'_Noreturn' kullanımı C23'te kullanımdan kaldırıldı. Bunun yerine '[[noreturn]]' kullanın", + "'_Alignof' kullanımı C23'te kullanımdan kaldırıldı. Bunun yerine 'alignof' kullanın", + "'_Alignas' kullanımı C23'te kullanımdan kaldırıldı. Bunun yerine 'alignas' kullanın", + "'_Bool' kullanımı C23'te kullanımdan kaldırıldı. Bunun yerine 'bool' kullanın", + "'_Static_assert' kullanımı C23'te kullanımdan kaldırıldı. Bunun yerine 'static_assert' kullanın", + "'_Thread_local' kullanımı C23'te kullanımdan kaldırıldı. Bunun yerine 'thread_local' kullanın", + "Microsoft modu, %sq modül dosyasını (Microsoft Visual Studio IFC modülü) kullanmak için etkinleştirilmelidir", + "%sq modül dosyası açılamadı", + "%sq modülü için modül eşlemesinde bulundu", + "%sq için üst bilgi birimi eşlemesinde bulundu" ] \ 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 87de6fc27..cb4ae58bb 100644 --- a/Extension/bin/messages/zh-cn/messages.json +++ b/Extension/bin/messages/zh-cn/messages.json @@ -3343,14 +3343,14 @@ "多次为“%s”指定了模块文件映射", "多次为“%s”指定了标头单元映射", "未为“%s”指定映射", - "“%s”的模块文件映射无效", + null, "找不到要导入的标头“%s”", "模块文件列表中有多个文件与“%s”匹配", "为“%s”找到的模块文件用于其他模块", "任何类型的模块文件", "无法读取模块文件", "内置函数不可用,因为当前选项不支持 char8_t 类型", - "如果启用了 C++20 协同程序,则无法指定 --ms_await 命令行选项", + null, "对默认聚合元素初始化使用显式构造函数 %nod 不是标准做法", "与 memcpy 类似的固有项的源或目标不指向对象", "与 memcpy 类似的固有项尝试复制在表达上不同的类型 %t1 和 %t2", @@ -3483,5 +3483,19 @@ "显式专用化声明不能是友元声明", "不支持 std::float128_t 类型; 将改用 std::float64_t", "不支持 std::bfloat16_t 类型; 将改用 std::float32_t", - "不能为别名模板 %no 声明推导指南" + "不能为别名模板 %no 声明推导指南", + "%n 已声明为不可用", + "%n 已声明为不可用 (%sq)", + "因为 'deprecated' 属性", + "显式 Lambda 模板参数是 C++20 功能", + "在 C23 中,已淘汰使用 '_Noreturn';请改用 '[[noreturn]]'", + "在 C23 中,已淘汰使用 '_Alignof';请改用 'alignof'", + "在 C23 中,已淘汰使用 '_Alignas';请改用 'alignas'", + "在 C23 中,已淘汰使用 '_Bool';请改用 'bool'", + "在 C23 中,已淘汰使用 '_Static_assert';请改用 'static_assert'", + "在 C23 中,已淘汰使用 '_Thread_local';请改用 'thread_local'", + "必须启用 Microsoft 模式才能使用模块文件 %sq (Microsoft Visual Studio IFC 模块)", + "无法打开模块文件 %sq", + "在模块 %sq 的模块映射中找到", + "在 %sq 的标头单元映射中找到" ] \ 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 50d356524..e124ec018 100644 --- a/Extension/bin/messages/zh-tw/messages.json +++ b/Extension/bin/messages/zh-tw/messages.json @@ -3343,14 +3343,14 @@ "指定了多次 '%s' 的模組檔案對應", "指定了多次 '%s' 的標頭單位對應", "未指定 '%s' 的對應", - "'%s' 的模組檔案對應無效", + null, "找不到要匯入的標頭 '%s'", "模組檔案清單中有多個檔案與 '%s' 相符", "為 '%s' 找到的模組檔案會用於其他模組", "任何類型的模組檔案", "無法讀取模組檔案", "因為目前的選項不支援 char8_t 類型,所以無法使用內建函式", - "如果啟用 C++ 20 協同程式,就不能指定 --ms_await 命令列選項", + null, "非標準地使用明確的建構函式 %nod 進行預設彙總元素初始化", "內建類 memcpy 的來源或目的地未指向物件", "內建類 memcpy 嘗試複製具象相異類型 %t1 與 %t2", @@ -3483,5 +3483,19 @@ "明確的特殊化宣告不能是 friend 宣告", "不支援 std::float128_t 類型,將改用 std::float64_t", "不支援 std::bfloat16_t 類型,將改用 std::float32_t", - "別名範本不可宣告扣除指南 %no" + "別名範本不可宣告扣除指南 %no", + "已宣告 %n 無法使用", + "已宣告 %n 無法使用 (%sq)", + "因為 'deprecated' 屬性", + "明確的 lambda 範本參數是 C++20 功能", + "'_Noreturn' 的使用已在 C23 中過時; 請改用 '[[noreturn]]'", + "'_Alignof' 的使用已在 C23 中過時; 請改用 'alignof'", + "'_Alignas' 的使用已在 C23 中過時; 請改用 'alignas'", + "'_Bool' 的使用已在 C23 中過時; 請改用 'bool'", + "'_Static_assert' 的使用已在 C23 中過時; 請改用 'static_assert'", + "'_Thread_local' 的使用已在 C23 中過時; 請改用 'thread_local'", + "必須啟用 Microsoft 模式,才能使用模組檔案 %sq (Microsoft Visual Studio IFC 模組)", + "無法開啟模組檔案 %sq", + "在模組對應中找到模組 %sq", + "在標頭單元對應中找到 %sq" ] \ No newline at end of file diff --git a/Extension/bin/windows.msvc.arm.json b/Extension/bin/windows.msvc.arm.json index b37d38da7..4eec87c15 100644 --- a/Extension/bin/windows.msvc.arm.json +++ b/Extension/bin/windows.msvc.arm.json @@ -4,11 +4,11 @@ "--microsoft", "--microsoft_bugs", "--microsoft_version", - "1934", + "1935", "--pack_alignment", "8", - "-D_MSC_VER=1934", - "-D_MSC_FULL_VER=193431933", + "-D_MSC_VER=1935", + "-D_MSC_FULL_VER=193532215", "-D_MSC_BUILD=0", "-D_M_ARM=7" ], diff --git a/Extension/bin/windows.msvc.arm64.json b/Extension/bin/windows.msvc.arm64.json index d96100c5f..b19a523cc 100644 --- a/Extension/bin/windows.msvc.arm64.json +++ b/Extension/bin/windows.msvc.arm64.json @@ -4,12 +4,12 @@ "--microsoft", "--microsoft_bugs", "--microsoft_version", - "1934", + "1935", "--pack_alignment", "8", "-D_CPPUNWIND=1", - "-D_MSC_VER=1934", - "-D_MSC_FULL_VER=193431933", + "-D_MSC_VER=1935", + "-D_MSC_FULL_VER=193532215", "-D_MSC_BUILD=0", "-D_M_ARM64=1" ], diff --git a/Extension/bin/windows.msvc.x64.json b/Extension/bin/windows.msvc.x64.json index 395e4c401..1956a7d25 100644 --- a/Extension/bin/windows.msvc.x64.json +++ b/Extension/bin/windows.msvc.x64.json @@ -4,12 +4,12 @@ "--microsoft", "--microsoft_bugs", "--microsoft_version", - "1934", + "1935", "--pack_alignment", "8", "-D_CPPUNWIND=1", - "-D_MSC_VER=1934", - "-D_MSC_FULL_VER=193431933", + "-D_MSC_VER=1935", + "-D_MSC_FULL_VER=193532215", "-D_MSC_BUILD=0", "-D_M_X64=100", "-D_M_AMD64=100" diff --git a/Extension/bin/windows.msvc.x86.json b/Extension/bin/windows.msvc.x86.json index d5629a521..1db0230e0 100644 --- a/Extension/bin/windows.msvc.x86.json +++ b/Extension/bin/windows.msvc.x86.json @@ -4,11 +4,11 @@ "--microsoft", "--microsoft_bugs", "--microsoft_version", - "1934", + "1935", "--pack_alignment", "8", - "-D_MSC_VER=1934", - "-D_MSC_FULL_VER=193431933", + "-D_MSC_VER=1935", + "-D_MSC_FULL_VER=193532215", "-D_MSC_BUILD=0", "-D_M_IX86=600", "-D_M_IX86_FP=2" diff --git a/Extension/i18n/chs/src/LanguageServer/client.i18n.json b/Extension/i18n/chs/src/LanguageServer/client.i18n.json index 01504bb8c..54ce81427 100644 --- a/Extension/i18n/chs/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/chs/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "配置提供程序", "compilers": "编译器", "setCompiler.message": "未配置编译器。除非设置自己的配置,否则 IntelliSense 可能无法正常工作。", - "selectCompiler.string": "选择 IntelliSense 配置...", + "selectIntelliSenseConfiguration.string": "选择 IntelliSense 配置...", "use.provider": "使用 {0}", "use.compileCommands": "使用 {0}", "selectAnotherCompiler.string": "在我的计算机上选择另一个编译器...", "installCompiler.string": "帮助我安装编译器", "noConfig.string": "请勿适用编译器进行配置(不推荐)", + "selectCompiler.string": "选择编译器", "confirmCompiler.string": "是", "selectCompiler.message": "已找到编译器 {0}。是否要使用此编译器配置 IntelliSense?", - "selectIntelliSenseConfiguration.string": "选择 IntelliSense 配置...", "server.crashed.restart": "语言服务器崩溃。正在重新启动...", "server.crashed2": "在过去 3 分钟内,语言服务器崩溃了 5 次。它不会重新启动。", "loggingLevel.changed": "{0} 已更改为: {1}", @@ -49,5 +49,6 @@ "yes.button": "是", "no.button": "否", "configurations.received": "已收到自定义配置:", - "browse.configuration.received": "已收到自定义浏览配置: {0}" + "browse.configuration.received": "已收到自定义浏览配置: {0}", + "fallback.clipboard": "已复制声明/定义。" } \ No newline at end of file diff --git a/Extension/i18n/chs/src/LanguageServer/references.i18n.json b/Extension/i18n/chs/src/LanguageServer/references.i18n.json index 4edce687b..c0b18d5a3 100644 --- a/Extension/i18n/chs/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/chs/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "查找所有引用", "peek.references": "速览引用", "rename": "重命名", + "call.hierarchy": "调用层次结构", "confirmed.reference.upper": "已确认引用", "confirmation.in.progress.upper": "正在进行确认", "comment.reference.upper": "注释引用", diff --git a/Extension/i18n/chs/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/chs/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..76189a447 --- /dev/null +++ b/Extension/i18n/chs/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "C/C++ 配置" +} \ No newline at end of file diff --git a/Extension/i18n/chs/src/LanguageServer/ui.i18n.json b/Extension/i18n/chs/src/LanguageServer/ui.i18n.json index ba3abf3b9..5c0dfcd0d 100644 --- a/Extension/i18n/chs/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/chs/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "分析工作区", + "paused.tagparser.text": "分析工作区: 已暂停", + "complete.tagparser.text": "分析完毕", + "initializing.tagparser.text": "正在初始化工作区", + "indexing.tagparser.text": "正在索引工作区", + "rescan.tagparse.text": "重新扫描工作区", "c.cpp.parsing.open.files.tooltip": "正在分析打开的文件", "click.to.preview": "单击以预览结果", - "updating.intellisense.tooltip": "正在更新 IntelliSense", + "updating.intellisense.text": "IntelliSense: 正在更新", + "idle.intellisense.text": "IntelliSense: 就绪", + "absent.intellisense.text": "IntelliSense: 未配置", + "running.analysis.text": "Code Analysis: 正在运行", + "paused.analysis.text": "Code Analysis: 已暂停", + "mode.analysis.prefix": "Code Analysis 模式:", "c.cpp.configureIntelliSenseStatus.text": "配置 IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ 配置 IntelliSense", "select.command": "选择命令...", + "select.code.analysis.command": "选择代码分析命令...", "c.cpp.configuration.tooltip": "C/C++ 配置", "c.cpp.references.statusbar": "C/C++ 引用状态", - "c.cpp.intellisense.statusbar": "C/C++ IntelliSense 状态", - "c.cpp.tagparser.statusbar": "C/C++ 标记分析器状态", - "discovering.files.tooltip": "正在发现文件", - "running.analysis.tooltip": "正在运行 {0}", - "code.analysis.paused.tooltip": "已暂停 {0}", - "running.analysis.processed.tooltip": "正在运行 {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "C/C++ IntelliSense 状态", + "cpptools.status.tagparser": "C/C++ 标记分析器状态", + "cpptools.detail.tagparser": "正在初始化...", + "cpptools.status.codeanalysis": "C/C++ Code Analysis 状态", + "c.cpp.codeanalysis.statusbar.runNow": "立即运行", + "tagparser.pause.text": "暂停", + "tagparser.resume.text": "继续", + "intellisense.select.text": "选择编译器", + "rescan.intellisense.text": "重新扫描", + "rescan.intellisense.tooltip": "重新扫描 IntelliSense", + "mode.codeanalysis.status.automatic": "自动", + "mode.codeanalysis.status.manual": "手动", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "选项", + "startup.codeanalysis.status": "正在启动...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "立即运行", + "running.analysis.processed.tooltip": "正在运行: {0}/{1} ({2}%)", "select.a.configuration": "选择配置...", "edit.configuration.ui": "编辑配置(UI)", "edit.configuration.json": "编辑配置(JSON)", @@ -29,7 +51,11 @@ "select.workspace": "选择工作区文件夹…", "resume.parsing": "恢复工作区分析", "pause.parsing": "暂停工作区分析", - "cancel.analysis": "取消 {0}", - "resume.analysis": "恢复 {0}", - "pause.analysis": "暂停 {0}" + "cancel.analysis": "取消", + "resume.analysis": "继续", + "pause.analysis": "暂停", + "another.analysis": "启动另一个...", + "active.analysis": "在活动文件上运行 Code Analysis", + "all.analysis": "在所有文件上运行 Code Analysis", + "open.analysis": "在打开的文件上运行 Code Analysis" } \ No newline at end of file diff --git a/Extension/i18n/chs/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/chs/src/LanguageServer/ui_new.i18n.json index d0631288a..5c0dfcd0d 100644 --- a/Extension/i18n/chs/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/chs/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "配置 IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ 配置 IntelliSense", "select.command": "选择命令...", + "select.code.analysis.command": "选择代码分析命令...", "c.cpp.configuration.tooltip": "C/C++ 配置", "c.cpp.references.statusbar": "C/C++ 引用状态", "cpptools.status.intellisense": "C/C++ IntelliSense 状态", @@ -33,11 +34,12 @@ "intellisense.select.text": "选择编译器", "rescan.intellisense.text": "重新扫描", "rescan.intellisense.tooltip": "重新扫描 IntelliSense", - "mode.codeanalysis.status": "自动", + "mode.codeanalysis.status.automatic": "自动", + "mode.codeanalysis.status.manual": "手动", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "选项", "startup.codeanalysis.status": "正在启动...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "立即运行", - "running.analysis.processed.tooltip": "正在运行 {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "正在运行: {0}/{1} ({2}%)", "select.a.configuration": "选择配置...", "edit.configuration.ui": "编辑配置(UI)", "edit.configuration.json": "编辑配置(JSON)", @@ -49,10 +51,10 @@ "select.workspace": "选择工作区文件夹…", "resume.parsing": "恢复工作区分析", "pause.parsing": "暂停工作区分析", - "cancel.analysis": "取消 {0}", - "resume.analysis": "恢复 {0}", - "pause.analysis": "暂停 {0}", - "another.analysis": "启动另一个 {0}...", + "cancel.analysis": "取消", + "resume.analysis": "继续", + "pause.analysis": "暂停", + "another.analysis": "启动另一个...", "active.analysis": "在活动文件上运行 Code Analysis", "all.analysis": "在所有文件上运行 Code Analysis", "open.analysis": "在打开的文件上运行 Code Analysis" diff --git a/Extension/i18n/chs/src/nativeStrings.i18n.json b/Extension/i18n/chs/src/nativeStrings.i18n.json index 098d19b81..505df1bc1 100644 --- a/Extension/i18n/chs/src/nativeStrings.i18n.json +++ b/Extension/i18n/chs/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "找不到文件“%s”。", "refactor_create_declaration_definition_failed": "创建声明/定义失败: %s", "refactor_create_default_delete": "无法创建函数 \"%s\" 。不支持创建默认函数或已删除的函数。", - "refactor_function_copied_to_clipboard": "函数签名已复制到剪贴板。", "refactor_function_not_created": "无法创建函数'%s'。", "refactor_ambiguous_locations": "无法找到函数“%s”的明确位置。", "refactor_file_not_in_project": "找不到文件“%s”。", "refactor_not_class_namespace": "找不到类或命名空间'%s'。", "refactor_operation_unsupported": "此操作不支持“%s”。", "unknown_error": "未知错误。", - "run_select_intellisense_configuration": "请运行“选择 IntelliSense 配置...”命令以定位系统标头。" + "run_select_intellisense_configuration": "请运行“选择 IntelliSense 配置...”命令以定位系统标头。", + "offer_copy_declaration": "\"{0}\" 的复制声明", + "offer_copy_definition": "\"{0}\" 的复制定义", + "refactor_copy_declaration_definition_failed": "将声明/定义复制到剪贴板失败: %s" } \ No newline at end of file diff --git a/Extension/i18n/cht/src/LanguageServer/client.i18n.json b/Extension/i18n/cht/src/LanguageServer/client.i18n.json index 1d41fddf0..3a10756b1 100644 --- a/Extension/i18n/cht/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/cht/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "設定提供者", "compilers": "編譯器", "setCompiler.message": "您尚未設定 IntelliSense。除非您自行加以設定,否則 IntelliSense 可能無法運作。", - "selectCompiler.string": "選取 IntelliSense 設定...", + "selectIntelliSenseConfiguration.string": "選取 IntelliSense 設定...", "use.provider": "使用 {0}", "use.compileCommands": "使用 {0}", "selectAnotherCompiler.string": "在我的機器上選取另一個編譯器...", "installCompiler.string": "協助我安裝編譯器", "noConfig.string": "不要設定編譯器 (不建議)", + "selectCompiler.string": "選取編譯器", "confirmCompiler.string": "是", "selectCompiler.message": "找到編譯器 {0}。您要使用此編譯器來設定 IntelliSense 嗎?", - "selectIntelliSenseConfiguration.string": "選取 IntelliSense 設定...", "server.crashed.restart": "語言伺服器當機。正在重新啟動...", "server.crashed2": "語言伺服器在過去 3 分鐘內發生 5 次故障。將不會重新啟動。", "loggingLevel.changed": "{0} 已變更為: {1}", @@ -49,5 +49,6 @@ "yes.button": "是", "no.button": "否", "configurations.received": "收到的自訂組態:", - "browse.configuration.received": "收到的自訂瀏覽組態: {0}" + "browse.configuration.received": "收到的自訂瀏覽組態: {0}", + "fallback.clipboard": "已複製宣告/定義。" } \ No newline at end of file diff --git a/Extension/i18n/cht/src/LanguageServer/references.i18n.json b/Extension/i18n/cht/src/LanguageServer/references.i18n.json index 34a1b212c..85fd4e206 100644 --- a/Extension/i18n/cht/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/cht/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "尋找所有參考", "peek.references": "瞄核參考", "rename": "重新命名", + "call.hierarchy": "呼叫階層圖", "confirmed.reference.upper": "已確認參考", "confirmation.in.progress.upper": "正在確認", "comment.reference.upper": "註解參考", diff --git a/Extension/i18n/cht/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/cht/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..f0f771f68 --- /dev/null +++ b/Extension/i18n/cht/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "C/C++ 設定" +} \ No newline at end of file diff --git a/Extension/i18n/cht/src/LanguageServer/ui.i18n.json b/Extension/i18n/cht/src/LanguageServer/ui.i18n.json index 9c4c9a1fa..3b3fab241 100644 --- a/Extension/i18n/cht/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/cht/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "c.cpp.parsing.open.files.tooltip": "正在剖析開啟的檔案", + "running.tagparser.text": "剖析工作區", + "paused.tagparser.text": "剖析工作區: 已暫停", + "complete.tagparser.text": "剖析完成", + "initializing.tagparser.text": "正在初始化工作區", + "indexing.tagparser.text": "索引工作區", + "rescan.tagparse.text": "重新掃描工作區", + "c.cpp.parsing.open.files.tooltip": "剖析開啟的檔案", "click.to.preview": "按一下以預覽結果", - "updating.intellisense.tooltip": "正在更新 IntelliSense...", + "updating.intellisense.text": "IntelliSense: 更新中", + "idle.intellisense.text": "IntelliSense: 就緒", + "absent.intellisense.text": "IntelliSense: 未設定", + "running.analysis.text": "Code Analysis: 執行中", + "paused.analysis.text": "Code Analysis: 已暫停", + "mode.analysis.prefix": "Code Analysis 模式: ", "c.cpp.configureIntelliSenseStatus.text": "設定 IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ 設定 IntelliSense", "select.command": "選取命令...", + "select.code.analysis.command": "選取程式碼分析命令...", "c.cpp.configuration.tooltip": "C/C++ 組態", "c.cpp.references.statusbar": "C/C++ 參考狀態", - "c.cpp.intellisense.statusbar": "C/C++ IntelliSense 狀態", - "c.cpp.tagparser.statusbar": "C/C++ 標記剖析器狀態", - "discovering.files.tooltip": "正在探索檔案", - "running.analysis.tooltip": "正在執行 {0}", - "code.analysis.paused.tooltip": "{0} 已暫停", - "running.analysis.processed.tooltip": "正在執行 {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "C/C++ IntelliSense 狀態", + "cpptools.status.tagparser": "C/C++ 標記剖析器狀態", + "cpptools.detail.tagparser": "正在初始化...", + "cpptools.status.codeanalysis": "C/C++ Code Analysis 狀態", + "c.cpp.codeanalysis.statusbar.runNow": "立即執行", + "tagparser.pause.text": "暫停", + "tagparser.resume.text": "繼續", + "intellisense.select.text": "選取編譯器", + "rescan.intellisense.text": "重新掃描", + "rescan.intellisense.tooltip": "重新掃描 IntelliSense", + "mode.codeanalysis.status.automatic": "自動", + "mode.codeanalysis.status.manual": "手動", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "選項", + "startup.codeanalysis.status": "正在啟動...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "立即執行", + "running.analysis.processed.tooltip": "正在執行: {0} / {1} ({2}%)", "select.a.configuration": "選取組態...", "edit.configuration.ui": "編輯組態 (UI)", "edit.configuration.json": "編輯組態 (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "選取工作區資料夾...", "resume.parsing": "繼續工作區剖析", "pause.parsing": "暫停工作區剖析", - "cancel.analysis": "取消 {0}", - "resume.analysis": "繼續 {0}", - "pause.analysis": "暫停 {0}" + "cancel.analysis": "取消", + "resume.analysis": "繼續", + "pause.analysis": "暫停", + "another.analysis": "啟動另一個...", + "active.analysis": "在使用中檔案上執行程式碼分析", + "all.analysis": "在所有檔案上執行程式碼分析", + "open.analysis": "在開啟檔案上執行程式碼分析" } \ No newline at end of file diff --git a/Extension/i18n/cht/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/cht/src/LanguageServer/ui_new.i18n.json index 09d00a0f8..01e28344e 100644 --- a/Extension/i18n/cht/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/cht/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "設定 IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ 設定 IntelliSense", "select.command": "選取命令...", + "select.code.analysis.command": "選取程式碼分析命令...", "c.cpp.configuration.tooltip": "C/C++ 組態", "c.cpp.references.statusbar": "C/C++ 參考狀態", "cpptools.status.intellisense": "C/C++ IntelliSense 狀態", @@ -33,11 +34,12 @@ "intellisense.select.text": "選取編譯器", "rescan.intellisense.text": "重新掃描", "rescan.intellisense.tooltip": "重新掃描 IntelliSense", - "mode.codeanalysis.status": "自動", + "mode.codeanalysis.status.automatic": "自動", + "mode.codeanalysis.status.manual": "手動", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "選項", "startup.codeanalysis.status": "正在啟動...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "立即執行", - "running.analysis.processed.tooltip": "正在執行 {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "正在執行: {0} / {1} ({2}%)", "select.a.configuration": "選取設定...", "edit.configuration.ui": "編輯設定 (UI)", "edit.configuration.json": "編輯設定 (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "選取工作區資料夾...", "resume.parsing": "繼續工作區剖析", "pause.parsing": "暫停工作區剖析", - "cancel.analysis": "取消 {0}", - "resume.analysis": "繼續 {0}", - "pause.analysis": "暫停 {0}", - "another.analysis": "啟動另一個 {0}...", + "cancel.analysis": "取消", + "resume.analysis": "繼續", + "pause.analysis": "暫停", + "another.analysis": "啟動另一個...", "active.analysis": "在使用中檔案上執行程式碼分析", "all.analysis": "在所有檔案上執行程式碼分析", "open.analysis": "在開啟檔案上執行程式碼分析" diff --git a/Extension/i18n/cht/src/nativeStrings.i18n.json b/Extension/i18n/cht/src/nativeStrings.i18n.json index 2a2901f87..362ca8e8e 100644 --- a/Extension/i18n/cht/src/nativeStrings.i18n.json +++ b/Extension/i18n/cht/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "找不到檔案 '%s'。", "refactor_create_declaration_definition_failed": "宣告/定義建立失敗: %s", "refactor_create_default_delete": "無法建立函數 '%s'。不支援建立已預設或已刪除的函數。", - "refactor_function_copied_to_clipboard": "已將函數簽章複製到剪貼簿。", "refactor_function_not_created": "無法建立函式 '%s'。", "refactor_ambiguous_locations": "找不到函式 '%s' 的明確位置。", "refactor_file_not_in_project": "找不到檔案 '%s'。", "refactor_not_class_namespace": "找不到類別或命名空間 '%s'。", "refactor_operation_unsupported": "'%s' 不支援此作業。", "unknown_error": "未知的錯誤。", - "run_select_intellisense_configuration": "請執行 'Select IntelliSense Configuration...' 命令以尋找您的系統標頭。" + "run_select_intellisense_configuration": "請執行 'Select IntelliSense Configuration...' 命令以尋找您的系統標頭。", + "offer_copy_declaration": "複製 '{0}' 的宣告", + "offer_copy_definition": "複製 '{0}' 的定義", + "refactor_copy_declaration_definition_failed": "將宣告/定義複製到剪貼簿已失敗: %s" } \ No newline at end of file diff --git a/Extension/i18n/csy/src/LanguageServer/client.i18n.json b/Extension/i18n/csy/src/LanguageServer/client.i18n.json index f2500b11f..e1dbde645 100644 --- a/Extension/i18n/csy/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/csy/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "poskytovatelé konfigurace", "compilers": "kompilátory", "setCompiler.message": "Nemáte nakonfigurovaný technologii IntelliSense. Pokud nenastavíte vlastní konfigurace, IntelliSense nemusí být funkční.", - "selectCompiler.string": "Vybrat konfiguraci IntelliSense...", + "selectIntelliSenseConfiguration.string": "Vybrat konfiguraci IntelliSense...", "use.provider": "Použít {0}", "use.compileCommands": "Použít {0}", "selectAnotherCompiler.string": "Vybrat jiný kompilátor na mém počítači...", "installCompiler.string": "Pomoc s instalací kompilátoru", "noConfig.string": "Nekonfigurovat pomocí kompilátoru (nedoporučuje se)", + "selectCompiler.string": "Vybrat kompilátor", "confirmCompiler.string": "Ano", "selectCompiler.message": "Byl nalezen {0} kompilátoru. Chcete nakonfigurovat IntelliSense s tímto kompilátorem?", - "selectIntelliSenseConfiguration.string": "Vybrat konfiguraci IntelliSense...", "server.crashed.restart": "Došlo k chybovému ukončení jazykového serveru. Restartuje se…", "server.crashed2": "Jazykový server se 5krát za poslední 3 minuty chybově ukončil. Nebude se restartovat.", "loggingLevel.changed": "{0} se změnila na: {1}", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " Deklarace nebo definice se zkopírovala." } \ No newline at end of file diff --git a/Extension/i18n/csy/src/LanguageServer/references.i18n.json b/Extension/i18n/csy/src/LanguageServer/references.i18n.json index 78dbe625b..51360a135 100644 --- a/Extension/i18n/csy/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/csy/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Najít všechny odkazy", "peek.references": "Náhled na odkazy", "rename": "Přejmenovat", + "call.hierarchy": "Hierarchie volání", "confirmed.reference.upper": "POTVRZENÝ ODKAZ", "confirmation.in.progress.upper": "PROBÍHÁ POTVRZOVÁNÍ", "comment.reference.upper": "ODKAZ NA KOMENTÁŘ", diff --git a/Extension/i18n/csy/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/csy/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..e1682bbd6 --- /dev/null +++ b/Extension/i18n/csy/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "Konfigurace C/C++" +} \ No newline at end of file diff --git a/Extension/i18n/csy/src/LanguageServer/ui.i18n.json b/Extension/i18n/csy/src/LanguageServer/ui.i18n.json index 204eae8b6..25b7cd41c 100644 --- a/Extension/i18n/csy/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/csy/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "c.cpp.parsing.open.files.tooltip": "Analýza otevřených souborů.", + "running.tagparser.text": "Parsování pracovního prostoru", + "paused.tagparser.text": "Pracovní prostor analýzy: Pozastaveno", + "complete.tagparser.text": "Analýza byla dokončena.", + "initializing.tagparser.text": "Inicializuje se pracovní prostor", + "indexing.tagparser.text": "Pracovní prostor indexování", + "rescan.tagparse.text": "Znovu prohledat pracovní prostor", + "c.cpp.parsing.open.files.tooltip": "Analýza otevřených souborů", "click.to.preview": "kliknutím si můžete zobrazit náhled výsledků", - "updating.intellisense.tooltip": "Aktualizuje se IntelliSense.", + "updating.intellisense.text": "IntelliSense: Aktualizace", + "idle.intellisense.text": "IntelliSense: Připraveno", + "absent.intellisense.text": "IntelliSense: Nenakonfigurováno", + "running.analysis.text": "Code Analysis: Spuštěno", + "paused.analysis.text": "Code Analysis: Pozastaveno", + "mode.analysis.prefix": "Režim Code Analysis: ", "c.cpp.configureIntelliSenseStatus.text": "Konfigurovat IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Konfigurovat IntelliSense v C/C++", "select.command": "Vyberte příkaz…", + "select.code.analysis.command": "Vyberte příkaz pro analýzu kódu…", "c.cpp.configuration.tooltip": "Konfigurace C/C++", "c.cpp.references.statusbar": "Stav odkazů jazyka C/C++", - "c.cpp.intellisense.statusbar": "C/C++ IntelliSense Status", - "c.cpp.tagparser.statusbar": "Stav analyzátoru značky jazyka C/C++", - "discovering.files.tooltip": "Zjišťují se soubory.", - "running.analysis.tooltip": "Probíhá {0}", - "code.analysis.paused.tooltip": "{0} pozastaveno", - "running.analysis.processed.tooltip": "Spuštěno {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "C/C++ IntelliSense Status", + "cpptools.status.tagparser": "Stav analyzátoru značky jazyka C/C++", + "cpptools.detail.tagparser": "Probíhá inicializace...", + "cpptools.status.codeanalysis": "Stav Code Analysis C/C++", + "c.cpp.codeanalysis.statusbar.runNow": "Spustit", + "tagparser.pause.text": "Pozastavit", + "tagparser.resume.text": "Pokračovat", + "intellisense.select.text": "Vyberte kompilátor.", + "rescan.intellisense.text": "Prohledat znovu", + "rescan.intellisense.tooltip": "Znovu prohledat IntelliSense", + "mode.codeanalysis.status.automatic": "Automaticky", + "mode.codeanalysis.status.manual": "Ručně", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Možnosti", + "startup.codeanalysis.status": "Spouštění...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Spustit", + "running.analysis.processed.tooltip": "Spuštěno: {0} / {1} ({2} %)", "select.a.configuration": "Vybrat konfiguraci...", "edit.configuration.ui": "Upravit konfigurace (uživatelské rozhraní)", "edit.configuration.json": "Upravit konfigurace (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Vyberte složku pracovního prostoru...", "resume.parsing": "Pokračovat v analýze pracovního prostoru", "pause.parsing": "Pozastavit analýzu pracovního prostoru", - "cancel.analysis": "Zrušit {0}", - "resume.analysis": "Obnovit {0}", - "pause.analysis": "Pozastavit {0}" + "cancel.analysis": "Zrušit", + "resume.analysis": "Pokračovat", + "pause.analysis": "Pozastavit", + "another.analysis": "Spustit další…", + "active.analysis": "Spustit Code Analysis u aktivního souboru", + "all.analysis": "Spustit Code Analysis u všech souborů", + "open.analysis": "Spustit Code Analysis při otevírání souborů" } \ No newline at end of file diff --git a/Extension/i18n/csy/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/csy/src/LanguageServer/ui_new.i18n.json index 38fa49c03..102520342 100644 --- a/Extension/i18n/csy/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/csy/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "Konfigurovat IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Konfigurovat IntelliSense v C/C++", "select.command": "Vyberte příkaz...", + "select.code.analysis.command": "Vyberte příkaz pro analýzu kódu…", "c.cpp.configuration.tooltip": "Konfigurace C/C++", "c.cpp.references.statusbar": "Stav odkazů jazyka C/C++", "cpptools.status.intellisense": "C/C++ IntelliSense Status", @@ -33,11 +34,12 @@ "intellisense.select.text": "Vyberte kompilátor.", "rescan.intellisense.text": "Prohledat znovu", "rescan.intellisense.tooltip": "Znovu prohledat IntelliSense", - "mode.codeanalysis.status": "Automaticky", + "mode.codeanalysis.status.automatic": "Automaticky", + "mode.codeanalysis.status.manual": "Ručně", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Možnosti", "startup.codeanalysis.status": "Spouštění...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Spustit", - "running.analysis.processed.tooltip": "Spuštěno {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "Spuštěno: {0} / {1} ({2} %)", "select.a.configuration": "Vybrat konfiguraci...", "edit.configuration.ui": "Upravit konfigurace (uživatelské rozhraní)", "edit.configuration.json": "Upravit konfigurace (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Vyberte složku pracovního prostoru...", "resume.parsing": "Pokračovat v analýze pracovního prostoru", "pause.parsing": "Pozastavit analýzu pracovního prostoru", - "cancel.analysis": "Zrušit {0}", - "resume.analysis": "Obnovit {0}", - "pause.analysis": "Pozastavit {0}", - "another.analysis": "Spustit další {0}...", + "cancel.analysis": "Zrušit", + "resume.analysis": "Pokračovat", + "pause.analysis": "Pozastavit", + "another.analysis": "Spustit další…", "active.analysis": "Spustit Code Analysis u aktivního souboru", "all.analysis": "Spustit Code Analysis u všech souborů", "open.analysis": "Spustit Code Analysis při otevírání souborů" diff --git a/Extension/i18n/csy/src/nativeStrings.i18n.json b/Extension/i18n/csy/src/nativeStrings.i18n.json index ce6efd3ff..0650c6422 100644 --- a/Extension/i18n/csy/src/nativeStrings.i18n.json +++ b/Extension/i18n/csy/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "Soubor '%s' nebyl nalezen.", "refactor_create_declaration_definition_failed": "Vytvoření deklarace nebo definice se nepovedlo: %s", "refactor_create_default_delete": "Funkci %s nejde vytvořit. Vytváření výchozích nebo odstraněných funkcí se nepodporuje.", - "refactor_function_copied_to_clipboard": "Signatura funkce se zkopírovala do schránky.", "refactor_function_not_created": "Funkce %s se nedá vytvořit.", "refactor_ambiguous_locations": "Jednoznačné umístění funkce %s se nedá najít.", "refactor_file_not_in_project": "Soubor '%s' nebyl nalezen.", "refactor_not_class_namespace": "Nenašla se třída nebo obor názvů %s.", "refactor_operation_unsupported": "Operace není pro: %s podporovaná.", "unknown_error": "Neznámá chyba.", - "run_select_intellisense_configuration": "Spusťte prosím příkaz Vybrat konfiguraci IntelliSense, abyste vyhledali systémové hlavičky." + "run_select_intellisense_configuration": "Spusťte prosím příkaz Vybrat konfiguraci IntelliSense, abyste vyhledali systémové hlavičky.", + "offer_copy_declaration": "Kopírovat deklaraci {0}", + "offer_copy_definition": "Kopírovat definici {0}", + "refactor_copy_declaration_definition_failed": "Kopírování deklarace nebo definice do schránky se nezdařilo: %s" } \ No newline at end of file diff --git a/Extension/i18n/deu/src/LanguageServer/client.i18n.json b/Extension/i18n/deu/src/LanguageServer/client.i18n.json index a5dd04b0f..3d35d367f 100644 --- a/Extension/i18n/deu/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/deu/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "Konfigurationsanbieter", "compilers": "Compiler", "setCompiler.message": "IntelliSense ist nicht konfiguriert. Wenn Sie keine eigenen Konfigurationen festlegen, ist IntelliSense möglicherweise nicht funktionsfähig.", - "selectCompiler.string": "IntelliSense-Konfiguration auswählen...", + "selectIntelliSenseConfiguration.string": "IntelliSense-Konfiguration auswählen...", "use.provider": "{0} verwenden", "use.compileCommands": "{0} verwenden", "selectAnotherCompiler.string": "Anderen Compiler auf meinem Computer auswählen...", "installCompiler.string": "Hilfe bei der Installation eines Compilers", "noConfig.string": "Nicht mit einem Compiler konfigurieren (nicht empfohlen)", + "selectCompiler.string": "Compiler auswählen", "confirmCompiler.string": "Ja", "selectCompiler.message": "Der Compiler {0} wurde gefunden. Möchten Sie IntelliSense mit diesem Compiler konfigurieren?", - "selectIntelliSenseConfiguration.string": "IntelliSense-Konfiguration auswählen...", "server.crashed.restart": "Der Sprach-Server ist abgestürzt. Neustart wird ausgeführt ...", "server.crashed2": "Der Sprachserver ist in den letzten 3 Minuten 5-mal abgestürzt. Er wird nicht neu gestartet.", "loggingLevel.changed": "{0} wurde geändert in {1}", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " Die Deklaration/Definition wurde kopiert." } \ No newline at end of file diff --git a/Extension/i18n/deu/src/LanguageServer/references.i18n.json b/Extension/i18n/deu/src/LanguageServer/references.i18n.json index 753f2c8d1..fab8311be 100644 --- a/Extension/i18n/deu/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/deu/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Alle Verweise suchen", "peek.references": "Verweisvorschau", "rename": "Umbenennen", + "call.hierarchy": "Aufrufhierarchie", "confirmed.reference.upper": "BESTÄTIGTER VERWEIS", "confirmation.in.progress.upper": "BESTÄTIGUNG WIRD AUSGEFÜHRT", "comment.reference.upper": "KOMMENTARVERWEIS", diff --git a/Extension/i18n/deu/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/deu/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..5f67f51a9 --- /dev/null +++ b/Extension/i18n/deu/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "C/C++-Konfigurationen" +} \ No newline at end of file diff --git a/Extension/i18n/deu/src/LanguageServer/ui.i18n.json b/Extension/i18n/deu/src/LanguageServer/ui.i18n.json index 13e032d0e..d269c38a4 100644 --- a/Extension/i18n/deu/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/deu/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "c.cpp.parsing.open.files.tooltip": "Offene Dateien werden analysiert", + "running.tagparser.text": "Parsing-Arbeitsbereich", + "paused.tagparser.text": "Parsing-Arbeitsbereich: Angehalten", + "complete.tagparser.text": "Parsing abgeschlossen", + "initializing.tagparser.text": "Arbeitsbereich wird initialisiert", + "indexing.tagparser.text": "Arbeitsbereich für die Indizierung", + "rescan.tagparse.text": "Arbeitsbereich neu einlesen", + "c.cpp.parsing.open.files.tooltip": "Offene Dateien werden geparst", "click.to.preview": "Klicken Sie, um eine Vorschau der Ergebnisse anzuzeigen.", - "updating.intellisense.tooltip": "IntelliSense wird aktualisiert", + "updating.intellisense.text": "IntelliSense: Aktualisieren", + "idle.intellisense.text": "IntelliSense: Bereit", + "absent.intellisense.text": "IntelliSense: Nicht konfiguriert", + "running.analysis.text": "Code Analysis: Wird ausgeführt", + "paused.analysis.text": "Code Analysis: Angehalten", + "mode.analysis.prefix": "Code Analysis-Modus: ", "c.cpp.configureIntelliSenseStatus.text": "IntelliSense konfigurieren", "c.cpp.configureIntelliSenseStatus.cppText": "IntelliSense in C/C++ konfigurieren", "select.command": "Befehl auswählen...", + "select.code.analysis.command": "Codeanalysebefehl auswählen...", "c.cpp.configuration.tooltip": "C/C++-Konfiguration", "c.cpp.references.statusbar": "C/C++-Verweisstatus", - "c.cpp.intellisense.statusbar": "Status von C/C++-IntelliSense", - "c.cpp.tagparser.statusbar": "Status des C/C++-Tagparsers", - "discovering.files.tooltip": "Dateien werden ermittelt", - "running.analysis.tooltip": "\"{0}\" wird ausgeführt", - "code.analysis.paused.tooltip": "{0} angehalten", - "running.analysis.processed.tooltip": "Ausführen von {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "Status von C/C++-IntelliSense", + "cpptools.status.tagparser": "Status des C/C++-Tagparsers", + "cpptools.detail.tagparser": "Wird initialisiert...", + "cpptools.status.codeanalysis": "C/C++-Code Analysis-Status", + "c.cpp.codeanalysis.statusbar.runNow": "Jetzt ausführen", + "tagparser.pause.text": "Anhalten", + "tagparser.resume.text": "Fortsetzen", + "intellisense.select.text": "Compiler auswählen", + "rescan.intellisense.text": "Neu einlesen", + "rescan.intellisense.tooltip": "IntelliSense neu einlesen", + "mode.codeanalysis.status.automatic": "Automatisch", + "mode.codeanalysis.status.manual": "Manuell", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Optionen", + "startup.codeanalysis.status": "Wird gestartet...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Jetzt ausführen", + "running.analysis.processed.tooltip": "Wird ausgeführt: {0} / {1} ({2}%)", "select.a.configuration": "Konfiguration auswählen...", "edit.configuration.ui": "Konfigurationen bearbeiten (Benutzeroberfläche)", "edit.configuration.json": "Konfigurationen bearbeiten (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Arbeitsbereichsordner auswählen...", "resume.parsing": "Arbeitsbereichsanalyse fortsetzen", "pause.parsing": "Arbeitsbereichsanalyse anhalten", - "cancel.analysis": "\"{0}\" abbrechen", - "resume.analysis": "\"{0}\" fortsetzen", - "pause.analysis": "\"{0}\" anhalten" + "cancel.analysis": "Abbrechen", + "resume.analysis": "Fortsetzen", + "pause.analysis": "Anhalten", + "another.analysis": "Starten Sie eine weitere...", + "active.analysis": "Code Analysis auf \"Aktive Dateien\" ausführen", + "all.analysis": "Code Analysis auf \"Alle Dateien\" ausführen", + "open.analysis": "Code Analysis auf \"Dateien öffnen\" ausführen" } \ No newline at end of file diff --git a/Extension/i18n/deu/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/deu/src/LanguageServer/ui_new.i18n.json index 6078962e8..30dee0ee0 100644 --- a/Extension/i18n/deu/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/deu/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "IntelliSense konfigurieren", "c.cpp.configureIntelliSenseStatus.cppText": "IntelliSense in C/C++ konfigurieren", "select.command": "Befehl auswählen...", + "select.code.analysis.command": "Codeanalysebefehl auswählen...", "c.cpp.configuration.tooltip": "C/C++-Konfiguration", "c.cpp.references.statusbar": "C/C++-Referenzenstatus", "cpptools.status.intellisense": "C/C++-IntelliSense-Status", @@ -33,11 +34,12 @@ "intellisense.select.text": "Compiler auswählen", "rescan.intellisense.text": "Neu einlesen", "rescan.intellisense.tooltip": "IntelliSense neu einlesen", - "mode.codeanalysis.status": "Automatisch", + "mode.codeanalysis.status.automatic": "Automatisch", + "mode.codeanalysis.status.manual": "Manuell", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Optionen", "startup.codeanalysis.status": "Wird gestartet...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Jetzt ausführen", - "running.analysis.processed.tooltip": "Ausführen von {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "Wird ausgeführt: {0} / {1} ({2}%)", "select.a.configuration": "Konfiguration auswählen...", "edit.configuration.ui": "Konfigurationen bearbeiten (Benutzeroberfläche)", "edit.configuration.json": "Konfigurationen bearbeiten (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Arbeitsbereichsordner auswählen...", "resume.parsing": "Parsing des Arbeitsbereichs fortsetzen", "pause.parsing": "Parsing des Arbeitsbereichs anhalten", - "cancel.analysis": "{0} abbrechen", - "resume.analysis": "{0} fortsetzen", - "pause.analysis": "{0} anhalten", - "another.analysis": "Starten Sie eine weitere {0}...", + "cancel.analysis": "Abbrechen", + "resume.analysis": "Fortsetzen", + "pause.analysis": "Anhalten", + "another.analysis": "Starten Sie eine weitere...", "active.analysis": "Code Analysis auf \"Aktive Dateien\" ausführen", "all.analysis": "Code Analysis auf \"Alle Dateien\" ausführen", "open.analysis": "Code Analysis auf \"Dateien öffnen\" ausführen" diff --git a/Extension/i18n/deu/src/nativeStrings.i18n.json b/Extension/i18n/deu/src/nativeStrings.i18n.json index fbf09af85..a91ed5537 100644 --- a/Extension/i18n/deu/src/nativeStrings.i18n.json +++ b/Extension/i18n/deu/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "Datei '%s' nicht gefunden", "refactor_create_declaration_definition_failed": "Fehler beim Erstellen der Deklaration/Definition: %s", "refactor_create_default_delete": "Die Funktion \"%s\" kann nicht erstellt werden. Das Erstellen standardmäßiger oder gelöschter Funktionen wird nicht unterstützt.", - "refactor_function_copied_to_clipboard": "Die Funktionssignatur wurde in die Zwischenablage kopiert.", "refactor_function_not_created": "Erstellen der Funktion '%s' nicht möglich.", "refactor_ambiguous_locations": "Es wurde kein eindeutiger Speicherort für Funktion '%s' gefunden.", "refactor_file_not_in_project": "Datei '%s' nicht gefunden", "refactor_not_class_namespace": "Klasse oder Namespace '%s' wurde nicht gefunden.", "refactor_operation_unsupported": "Der Vorgang wird für '%s' nicht unterstützt.", "unknown_error": "Unbekannter Fehler.", - "run_select_intellisense_configuration": "Führen Sie den Befehl „IntelliSense-Konfiguration auswählen...“ aus, um nach Ihren Systemheadern zu suchen." + "run_select_intellisense_configuration": "Führen Sie den Befehl „IntelliSense-Konfiguration auswählen...“ aus, um nach Ihren Systemheadern zu suchen.", + "offer_copy_declaration": "Deklaration von \"{0}\" kopieren", + "offer_copy_definition": "Definition von \"{0}\" kopieren", + "refactor_copy_declaration_definition_failed": "Fehler beim Kopieren der Deklaration/Definition in die Zwischenablage: %s" } \ No newline at end of file diff --git a/Extension/i18n/esn/src/LanguageServer/client.i18n.json b/Extension/i18n/esn/src/LanguageServer/client.i18n.json index 6bf61de7b..e65979476 100644 --- a/Extension/i18n/esn/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/esn/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "proveedores de configuración", "compilers": "Compiladores", "setCompiler.message": "No tiene configurado IntelliSense. A menos que establezca sus propias configuraciones, puede que IntelliSense no funcione.", - "selectCompiler.string": "Seleccionar configuración de IntelliSense...", + "selectIntelliSenseConfiguration.string": "Seleccionar configuración de IntelliSense...", "use.provider": "Uso {0}", "use.compileCommands": "Uso {0}", "selectAnotherCompiler.string": "Seleccionar otro compilador en mi máquina...", "installCompiler.string": "Ayuda para instalar un compilador", "noConfig.string": "No configurar con un compilador (no recomendado)", + "selectCompiler.string": "Selecciona un compilador", "confirmCompiler.string": "Sí", "selectCompiler.message": "Se encontró el compilador {0}. ¿Desea configurar IntelliSense con este compilador?", - "selectIntelliSenseConfiguration.string": "Seleccionar configuración de IntelliSense...", "server.crashed.restart": "El servidor de lenguaje se bloqueó. Se está reiniciando...", "server.crashed2": "El servidor de lenguaje se ha bloqueado cinco veces en los tres últimos minutos. No se reiniciará.", "loggingLevel.changed": "{0} se cambió a: {1}", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " Se copió la declaración o definición." } \ No newline at end of file diff --git a/Extension/i18n/esn/src/LanguageServer/references.i18n.json b/Extension/i18n/esn/src/LanguageServer/references.i18n.json index 4c589016b..bbb82f15b 100644 --- a/Extension/i18n/esn/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/esn/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Buscar todas las referencias", "peek.references": "Inspeccionar referencias", "rename": "Cambiar nombre", + "call.hierarchy": "Jerarquía de llamadas", "confirmed.reference.upper": "REFERENCIA CONFIRMADA", "confirmation.in.progress.upper": "CONFIRMACIÓN EN CURSO", "comment.reference.upper": "REFERENCIA DE COMENTARIO", diff --git a/Extension/i18n/esn/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/esn/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..941311699 --- /dev/null +++ b/Extension/i18n/esn/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "Configuración de C/C++" +} \ No newline at end of file diff --git a/Extension/i18n/esn/src/LanguageServer/ui.i18n.json b/Extension/i18n/esn/src/LanguageServer/ui.i18n.json index 7d5663154..c6f40a88e 100644 --- a/Extension/i18n/esn/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/esn/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "Analizar área de trabajo", + "paused.tagparser.text": "Área de trabajo de análisis: en pausa", + "complete.tagparser.text": "Análisis finalizado", + "initializing.tagparser.text": "Inicializando área de trabajo", + "indexing.tagparser.text": "Área de trabajo de indexación", + "rescan.tagparse.text": "Volver a examinar el área de trabajo", "c.cpp.parsing.open.files.tooltip": "Analizando archivos abiertos", "click.to.preview": "hacer clic para obtener una vista previa de los resultados", - "updating.intellisense.tooltip": "Actualizando IntelliSense...", + "updating.intellisense.text": "IntelliSense: actualización", + "idle.intellisense.text": "IntelliSense: listo", + "absent.intellisense.text": "IntelliSense: no configurado", + "running.analysis.text": "Code Analysis: en ejecución", + "paused.analysis.text": "Code Analysis: en pausa", + "mode.analysis.prefix": "Modo de Code Analysis: ", "c.cpp.configureIntelliSenseStatus.text": "Configurar IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Configuración de IntelliSense en C/C++", "select.command": "Seleccione un comando...", + "select.code.analysis.command": "Seleccione un comando de análisis de código...", "c.cpp.configuration.tooltip": "Configuración de C/C++", "c.cpp.references.statusbar": "Estado de referencias de C/C++", - "c.cpp.intellisense.statusbar": "Estado de IntelliSense de C/C++", - "c.cpp.tagparser.statusbar": "Estado del analizador de etiquetas de C/C++", - "discovering.files.tooltip": "Detectando archivos", - "running.analysis.tooltip": "Ejecutando {0}", - "code.analysis.paused.tooltip": "{0} en pausa", - "running.analysis.processed.tooltip": "{0} en ejecución: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "Estado de IntelliSense de C/C++", + "cpptools.status.tagparser": "Estado del analizador de etiquetas de C/C++", + "cpptools.detail.tagparser": "Inicializando...", + "cpptools.status.codeanalysis": "Estado de Code Analysis de C/C++", + "c.cpp.codeanalysis.statusbar.runNow": "Ejecutar ahora", + "tagparser.pause.text": "Pausa", + "tagparser.resume.text": "Reanudar", + "intellisense.select.text": "Seleccione un compilador", + "rescan.intellisense.text": "Volver a examinar", + "rescan.intellisense.tooltip": "Volver a examinar IntelliSense", + "mode.codeanalysis.status.automatic": "Automático", + "mode.codeanalysis.status.manual": "Manual", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opciones", + "startup.codeanalysis.status": "Iniciando...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Ejecutar ahora", + "running.analysis.processed.tooltip": "En ejecución: {0} / {1} ({2}%)", "select.a.configuration": "Seleccione una configuración...", "edit.configuration.ui": "Editar configuraciones (interfaz de usuario)", "edit.configuration.json": "Editar configuraciones (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Seleccione una carpeta del área de trabajo...", "resume.parsing": "Reanudar el análisis de área de trabajo", "pause.parsing": "Pausar el análisis de área de trabajo", - "cancel.analysis": "Cancelar {0}", - "resume.analysis": "Reanudación de {0}", - "pause.analysis": "Pausa de {0}" + "cancel.analysis": "Cancelar", + "resume.analysis": "Reanudar", + "pause.analysis": "Pausa", + "another.analysis": "Iniciar otro...", + "active.analysis": "Ejecutar Code Analysis en el archivo activo", + "all.analysis": "Ejecutar análisis de código en todos los archivos", + "open.analysis": "Ejecutar análisis de código en archivos abiertos" } \ No newline at end of file diff --git a/Extension/i18n/esn/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/esn/src/LanguageServer/ui_new.i18n.json index 4af652cdc..c6f40a88e 100644 --- a/Extension/i18n/esn/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/esn/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "Configurar IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Configuración de IntelliSense en C/C++", "select.command": "Seleccione un comando...", + "select.code.analysis.command": "Seleccione un comando de análisis de código...", "c.cpp.configuration.tooltip": "Configuración de C/C++", "c.cpp.references.statusbar": "Estado de referencias de C/C++", "cpptools.status.intellisense": "Estado de IntelliSense de C/C++", @@ -33,11 +34,12 @@ "intellisense.select.text": "Seleccione un compilador", "rescan.intellisense.text": "Volver a examinar", "rescan.intellisense.tooltip": "Volver a examinar IntelliSense", - "mode.codeanalysis.status": "Automático", + "mode.codeanalysis.status.automatic": "Automático", + "mode.codeanalysis.status.manual": "Manual", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opciones", "startup.codeanalysis.status": "Iniciando...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Ejecutar ahora", - "running.analysis.processed.tooltip": "{0} en ejecución: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "En ejecución: {0} / {1} ({2}%)", "select.a.configuration": "Seleccione una configuración...", "edit.configuration.ui": "Editar configuraciones (interfaz de usuario)", "edit.configuration.json": "Editar configuraciones (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Seleccione una carpeta del área de trabajo...", "resume.parsing": "Reanudar el análisis de área de trabajo", "pause.parsing": "Pausar el análisis de área de trabajo", - "cancel.analysis": "Cancelar {0}", - "resume.analysis": "Reanudación de {0}", - "pause.analysis": "Pausa de {0}", - "another.analysis": "Iniciar otro {0}...", + "cancel.analysis": "Cancelar", + "resume.analysis": "Reanudar", + "pause.analysis": "Pausa", + "another.analysis": "Iniciar otro...", "active.analysis": "Ejecutar Code Analysis en el archivo activo", "all.analysis": "Ejecutar análisis de código en todos los archivos", "open.analysis": "Ejecutar análisis de código en archivos abiertos" diff --git a/Extension/i18n/esn/src/nativeStrings.i18n.json b/Extension/i18n/esn/src/nativeStrings.i18n.json index 3c7eeea97..fd1c22040 100644 --- a/Extension/i18n/esn/src/nativeStrings.i18n.json +++ b/Extension/i18n/esn/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "No se encontró el archivo '%s'.", "refactor_create_declaration_definition_failed": "Error al crear la declaración o definición: %s", "refactor_create_default_delete": "No se puede crear la función \"%s\". No se admite la creación de funciones predeterminadas o eliminadas.", - "refactor_function_copied_to_clipboard": "La signatura de función se copió en el Portapapeles.", "refactor_function_not_created": "No se pudo crear la función '%s'.", "refactor_ambiguous_locations": "No se encuentra una ubicación ambigua para la función '%s'.", "refactor_file_not_in_project": "No se encontró el archivo '%s'.", "refactor_not_class_namespace": "No se encuentra la clase o el espacio de nombres '%s'.", "refactor_operation_unsupported": "La operación no se admite para '%s'.", "unknown_error": "Error desconocido.", - "run_select_intellisense_configuration": "Ejecute la opción \"Seleccionar configuración de IntelliSense...\". para buscar los encabezados del sistema." + "run_select_intellisense_configuration": "Ejecute la opción \"Seleccionar configuración de IntelliSense...\". para buscar los encabezados del sistema.", + "offer_copy_declaration": "Copiar la declaración de “{0}”", + "offer_copy_definition": "Copiar la definición de “{0}”", + "refactor_copy_declaration_definition_failed": "Error al copiar la declaración o definición en el Portapapeles: %s" } \ No newline at end of file diff --git a/Extension/i18n/fra/src/LanguageServer/client.i18n.json b/Extension/i18n/fra/src/LanguageServer/client.i18n.json index 7a3d78ae0..fe9a10f1b 100644 --- a/Extension/i18n/fra/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/fra/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "fournisseurs de configuration", "compilers": "compilateurs", "setCompiler.message": "Vous n’avez aucun IntelliSense configuré. À moins que vous ne définissiez vos propres configurations, IntelliSense risque de ne pas être fonctionnel.", - "selectCompiler.string": "Sélectionner la configuration IntelliSense…", + "selectIntelliSenseConfiguration.string": "Sélectionner la configuration IntelliSense…", "use.provider": "Utiliser {0}", "use.compileCommands": "Utiliser {0}", "selectAnotherCompiler.string": "Sélectionner un autre compilateur sur ma machine…", "installCompiler.string": "M’aider à installer un compilateur", "noConfig.string": "Ne pas configurer avec un compilateur (non recommandé)", + "selectCompiler.string": "Sélectionner un compilateur", "confirmCompiler.string": "Oui", "selectCompiler.message": "Le compilateur {0} a été trouvé. Voulez-vous configurer IntelliSense avec ce compilateur ?", - "selectIntelliSenseConfiguration.string": "Sélectionner la configuration IntelliSense…", "server.crashed.restart": "Le serveur de langue s’est arrêté. Redémarrage...", "server.crashed2": "Le serveur de langage s'est bloqué 5 fois au cours des 3 dernières minutes. Il n'est pas redémarré.", "loggingLevel.changed": "{0} a été changé en : {1}", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " La déclaration/définition a été copiée." } \ No newline at end of file diff --git a/Extension/i18n/fra/src/LanguageServer/references.i18n.json b/Extension/i18n/fra/src/LanguageServer/references.i18n.json index 0c777ec00..fef5367bb 100644 --- a/Extension/i18n/fra/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/fra/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Rechercher toutes les références", "peek.references": "Références d'aperçu", "rename": "Renommer", + "call.hierarchy": "Hiérarchie des appels", "confirmed.reference.upper": "RÉFÉRENCE CONFIRMÉE", "confirmation.in.progress.upper": "CONFIRMATION EN COURS", "comment.reference.upper": "RÉFÉRENCE DE COMMENTAIRE", diff --git a/Extension/i18n/fra/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/fra/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..b38d4daf0 --- /dev/null +++ b/Extension/i18n/fra/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "Configurations C/C++" +} \ No newline at end of file diff --git a/Extension/i18n/fra/src/LanguageServer/ui.i18n.json b/Extension/i18n/fra/src/LanguageServer/ui.i18n.json index 6a2bc8b4c..b90b9a949 100644 --- a/Extension/i18n/fra/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/fra/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "Analyse de l’espace de travail", + "paused.tagparser.text": "Analyse de l’espace de travail : suspendu", + "complete.tagparser.text": "Analyse terminée", + "initializing.tagparser.text": "Initialisation de l’espace de travail", + "indexing.tagparser.text": "Indexation de l’espace de travail", + "rescan.tagparse.text": "Réanalyser l'espace de travail", "c.cpp.parsing.open.files.tooltip": "Analyse des fichiers ouverts", "click.to.preview": "cliquez pour voir un aperçu des résultats", - "updating.intellisense.tooltip": "Mise à jour d'IntelliSense", + "updating.intellisense.text": "IntelliSense : mise à jour", + "idle.intellisense.text": "IntelliSense : prêt", + "absent.intellisense.text": "IntelliSense : non configuré", + "running.analysis.text": "Code Analysis : en cours d’exécution", + "paused.analysis.text": "Code Analysis : suspendu", + "mode.analysis.prefix": "Mode Code Analysis : ", "c.cpp.configureIntelliSenseStatus.text": "Configurer IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Configuration d’IntelliSense en C/C++", "select.command": "Sélectionner une commande...", + "select.code.analysis.command": "Sélectionner une commande d’analyse du code...", "c.cpp.configuration.tooltip": "Configuration C/C++", "c.cpp.references.statusbar": "État des références C/C++", - "c.cpp.intellisense.statusbar": "État IntelliSense C/C++", - "c.cpp.tagparser.statusbar": "État de l’analyseur de balises C/C++", - "discovering.files.tooltip": "Détection de fichiers", - "running.analysis.tooltip": "Exécution de {0}", - "code.analysis.paused.tooltip": "{0} en pause", - "running.analysis.processed.tooltip": "En cours d'exécution {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "État IntelliSense C/C++", + "cpptools.status.tagparser": "État de l’analyseur de balises C/C++", + "cpptools.detail.tagparser": "Initialisation en cours...", + "cpptools.status.codeanalysis": "État du Code Analysis C/C++", + "c.cpp.codeanalysis.statusbar.runNow": "Exécuter maintenant", + "tagparser.pause.text": "Pause", + "tagparser.resume.text": "Reprendre", + "intellisense.select.text": "Sélectionnez un compilateur", + "rescan.intellisense.text": "Relancer l'analyse", + "rescan.intellisense.tooltip": "Relancer l'analyse IntelliSense", + "mode.codeanalysis.status.automatic": "Automatique", + "mode.codeanalysis.status.manual": "Manuel", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Options", + "startup.codeanalysis.status": "Démarrage en cours...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Exécuter maintenant", + "running.analysis.processed.tooltip": "En cours d’exécution : {0}/{1} ({2} %)", "select.a.configuration": "Sélectionner une configuration...", "edit.configuration.ui": "Modifier les configurations (IU)", "edit.configuration.json": "Modifier les configurations (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Sélectionner un dossier d'espace de travail...", "resume.parsing": "Reprendre l’analyse de l’espace de travail", "pause.parsing": "Suspendre l’analyse de l’espace de travail", - "cancel.analysis": "Annuler {0}", - "resume.analysis": "Reprendre {0}", - "pause.analysis": "Mettre en pause {0}" + "cancel.analysis": "Annuler", + "resume.analysis": "Reprendre", + "pause.analysis": "Suspendre", + "another.analysis": "Démarrer une autre...", + "active.analysis": "Exécuter Code Analysis sur le fichier actif", + "all.analysis": "Exécuter une analyse de code sur Tous les fichiers", + "open.analysis": "Exécuter une analyse de code sur Ouvrir les fichiers" } \ No newline at end of file diff --git a/Extension/i18n/fra/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/fra/src/LanguageServer/ui_new.i18n.json index 119943662..b90b9a949 100644 --- a/Extension/i18n/fra/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/fra/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "Configurer IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Configuration d’IntelliSense en C/C++", "select.command": "Sélectionner une commande...", + "select.code.analysis.command": "Sélectionner une commande d’analyse du code...", "c.cpp.configuration.tooltip": "Configuration C/C++", "c.cpp.references.statusbar": "État des références C/C++", "cpptools.status.intellisense": "État IntelliSense C/C++", @@ -33,11 +34,12 @@ "intellisense.select.text": "Sélectionnez un compilateur", "rescan.intellisense.text": "Relancer l'analyse", "rescan.intellisense.tooltip": "Relancer l'analyse IntelliSense", - "mode.codeanalysis.status": "Automatique", + "mode.codeanalysis.status.automatic": "Automatique", + "mode.codeanalysis.status.manual": "Manuel", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Options", "startup.codeanalysis.status": "Démarrage en cours...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Exécuter maintenant", - "running.analysis.processed.tooltip": "En cours d'exécution {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "En cours d’exécution : {0}/{1} ({2} %)", "select.a.configuration": "Sélectionner une configuration...", "edit.configuration.ui": "Modifier les configurations (IU)", "edit.configuration.json": "Modifier les configurations (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Sélectionner un dossier d'espace de travail...", "resume.parsing": "Reprendre l’analyse de l’espace de travail", "pause.parsing": "Suspendre l’analyse de l’espace de travail", - "cancel.analysis": "Annuler {0}", - "resume.analysis": "Reprendre {0}", - "pause.analysis": "Mettre en pause {0}", - "another.analysis": "Démarrer une autre {0}...", + "cancel.analysis": "Annuler", + "resume.analysis": "Reprendre", + "pause.analysis": "Suspendre", + "another.analysis": "Démarrer une autre...", "active.analysis": "Exécuter Code Analysis sur le fichier actif", "all.analysis": "Exécuter une analyse de code sur Tous les fichiers", "open.analysis": "Exécuter une analyse de code sur Ouvrir les fichiers" diff --git a/Extension/i18n/fra/src/nativeStrings.i18n.json b/Extension/i18n/fra/src/nativeStrings.i18n.json index 449ae62d8..6d364926f 100644 --- a/Extension/i18n/fra/src/nativeStrings.i18n.json +++ b/Extension/i18n/fra/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "Le fichier '%s' est introuvable.", "refactor_create_declaration_definition_failed": "Échec de la création de la déclaration/définition : %s", "refactor_create_default_delete": "Impossible de créer la fonction '%s'. La création de fonctions par défaut ou supprimées n’est pas prise en charge.", - "refactor_function_copied_to_clipboard": "La signature de fonction a été copiée dans le Presse-papiers.", "refactor_function_not_created": "Impossible de créer la fonction '%s'.", "refactor_ambiguous_locations": "Impossible de trouver un emplacement non ambigu pour la fonction '%s'.", "refactor_file_not_in_project": "Le fichier '%s' est introuvable.", "refactor_not_class_namespace": "La classe ou l'espace de noms '%s' est introuvable.", "refactor_operation_unsupported": "L'opération n'est pas prise en charge pour '%s'.", "unknown_error": "Erreur inconnue.", - "run_select_intellisense_configuration": "Veuillez exécuter la commande « Sélectionner la configuration IntelliSense… » pour localiser vos en-têtes système." + "run_select_intellisense_configuration": "Veuillez exécuter la commande « Sélectionner la configuration IntelliSense… » pour localiser vos en-têtes système.", + "offer_copy_declaration": "Copier la déclaration de '{0}'", + "offer_copy_definition": "Copier la définition de '{0}'", + "refactor_copy_declaration_definition_failed": "Échec de la copie de la déclaration/définition dans le presse-papiers : %s" } \ No newline at end of file diff --git a/Extension/i18n/ita/src/LanguageServer/client.i18n.json b/Extension/i18n/ita/src/LanguageServer/client.i18n.json index 8a6a3fe20..57f7ce232 100644 --- a/Extension/i18n/ita/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/ita/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "Provider di configurazione", "compilers": "compilatori", "setCompiler.message": "Compilatore IntelliSense non configurato. A meno che non si impostino configurazioni personalizzate, IntelliSense potrebbe non funzionare.", - "selectCompiler.string": "Seleziona configurazione IntelliSense...", + "selectIntelliSenseConfiguration.string": "Seleziona configurazione IntelliSense...", "use.provider": "Usa {0}", "use.compileCommands": "Usa {0}", "selectAnotherCompiler.string": "Seleziona un altro compilatore nel computer...", "installCompiler.string": "Aiutami a installare un compilatore", "noConfig.string": "Non configurare un compilatore (scelta non consigliata)", + "selectCompiler.string": "Seleziona compilatore", "confirmCompiler.string": "Sì", "selectCompiler.message": "È stato trovato il {0} del compilatore. Configurare IntelliSense con questo compilatore?", - "selectIntelliSenseConfiguration.string": "Seleziona configurazione IntelliSense...", "server.crashed.restart": "Si è verificato un arresto anomalo del server di linguaggio. Riavvio...", "server.crashed2": "Si sono verificati cinque arresti anomali del server di linguaggio negli ultimi tre minuti. Non verrà riavviato.", "loggingLevel.changed": "{0} è stato modificato in: {1}", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " Dichiarazione/definizione copiata." } \ No newline at end of file diff --git a/Extension/i18n/ita/src/LanguageServer/references.i18n.json b/Extension/i18n/ita/src/LanguageServer/references.i18n.json index 97a7ca590..d9ae16928 100644 --- a/Extension/i18n/ita/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/ita/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Trova tutti i riferimenti", "peek.references": "Visualizza in anteprima riferimenti", "rename": "Rinomina", + "call.hierarchy": "Gerarchia delle chiamate", "confirmed.reference.upper": "RIFERIMENTO CONFERMATO", "confirmation.in.progress.upper": "CONFERMA IN CORSO", "comment.reference.upper": "RIFERIMENTO A COMMENTO", diff --git a/Extension/i18n/ita/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/ita/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..259b0710f --- /dev/null +++ b/Extension/i18n/ita/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "Configurazioni C/C++" +} \ No newline at end of file diff --git a/Extension/i18n/ita/src/LanguageServer/ui.i18n.json b/Extension/i18n/ita/src/LanguageServer/ui.i18n.json index d4ec63955..a79331d31 100644 --- a/Extension/i18n/ita/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/ita/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "Analisi area di lavoro", + "paused.tagparser.text": "Analisi area di lavoro: Sospesa", + "complete.tagparser.text": "Analisi completata", + "initializing.tagparser.text": "Inizializzazione dell'area di lavoro", + "indexing.tagparser.text": "Area di lavoro di indicizzazione", + "rescan.tagparse.text": "Ripeti analisi area di lavoro", "c.cpp.parsing.open.files.tooltip": "Analisi dei file aperti", "click.to.preview": "fare clic per visualizzare l'anteprima dei risultati", - "updating.intellisense.tooltip": "Aggiornamento di IntelliSense", + "updating.intellisense.text": "IntelliSense: aggiornamento", + "idle.intellisense.text": "IntelliSense: Pronto", + "absent.intellisense.text": "IntelliSense: Non configurato", + "running.analysis.text": "Code Analysis: In esecuzione", + "paused.analysis.text": "Code Analysis: Sospeso", + "mode.analysis.prefix": "Modalità Code Analysis: ", "c.cpp.configureIntelliSenseStatus.text": "Configura IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ - Configura IntelliSense", "select.command": "Seleziona un comando...", + "select.code.analysis.command": "Selezionare un comando di Code Analysis...", "c.cpp.configuration.tooltip": "Configurazione C/C++", "c.cpp.references.statusbar": "Stato riferimenti C/C++", - "c.cpp.intellisense.statusbar": "Stato IntelliSense C/C++", - "c.cpp.tagparser.statusbar": "Stato del parser del tag C/C++", - "discovering.files.tooltip": "Individuazione dei file", - "running.analysis.tooltip": "{0} in esecuzione", - "code.analysis.paused.tooltip": "{0} in pausa", - "running.analysis.processed.tooltip": "In esecuzione {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "Stato IntelliSense C/C++", + "cpptools.status.tagparser": "Stato del parser del tag C/C++", + "cpptools.detail.tagparser": "Inizializzazione...", + "cpptools.status.codeanalysis": "Stato Code Analysis C/C++", + "c.cpp.codeanalysis.statusbar.runNow": "Esegui", + "tagparser.pause.text": "Sospendi", + "tagparser.resume.text": "Riprendi", + "intellisense.select.text": "Seleziona un compilatore", + "rescan.intellisense.text": "Ripeti analisi", + "rescan.intellisense.tooltip": "Ripeti analisi di IntelliSense", + "mode.codeanalysis.status.automatic": "Automatico", + "mode.codeanalysis.status.manual": "Manuale", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opzioni", + "startup.codeanalysis.status": "Avvio...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Esegui", + "running.analysis.processed.tooltip": "In esecuzione: {0} / {1} ({2}%)", "select.a.configuration": "Seleziona una configurazione...", "edit.configuration.ui": "Modifica configurazioni (interfaccia utente)", "edit.configuration.json": "Modifica configurazioni (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Seleziona una cartella dell'area di lavoro...", "resume.parsing": "Riprendi analisi area di lavoro", "pause.parsing": "Sospendi analisi area di lavoro", - "cancel.analysis": "Annulla {0}", - "resume.analysis": "Riprendi {0}", - "pause.analysis": "Sospendi {0}" + "cancel.analysis": "Annulla", + "resume.analysis": "Riprendi", + "pause.analysis": "Sospendi", + "another.analysis": "Avvia un'altra...", + "active.analysis": "Esegui analisi del codice su File attivo", + "all.analysis": "Esegui analisi del codice su Tutti i file", + "open.analysis": "Esegui analisi del codice su Apri file" } \ No newline at end of file diff --git a/Extension/i18n/ita/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/ita/src/LanguageServer/ui_new.i18n.json index 0fe129085..887fe34c8 100644 --- a/Extension/i18n/ita/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/ita/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "Configura IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ - Configura IntelliSense", "select.command": "Seleziona un comando...", + "select.code.analysis.command": "Selezionare un comando di Code Analysis...", "c.cpp.configuration.tooltip": "Configurazione di C/C++", "c.cpp.references.statusbar": "Stato riferimenti C/C++", "cpptools.status.intellisense": "Stato IntelliSense C/C++", @@ -33,11 +34,12 @@ "intellisense.select.text": "Seleziona un compilatore", "rescan.intellisense.text": "Ripeti analisi", "rescan.intellisense.tooltip": "Ripeti analisi di IntelliSense", - "mode.codeanalysis.status": "Automatico", + "mode.codeanalysis.status.automatic": "Automatico", + "mode.codeanalysis.status.manual": "Manuale", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opzioni", "startup.codeanalysis.status": "Avvio...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Esegui", - "running.analysis.processed.tooltip": "In esecuzione {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "In esecuzione: {0} / {1} ({2}%)", "select.a.configuration": "Seleziona una configurazione...", "edit.configuration.ui": "Modifica configurazioni (interfaccia utente)", "edit.configuration.json": "Modifica configurazioni (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Seleziona una cartella dell'area di lavoro...", "resume.parsing": "Riprendi analisi area di lavoro", "pause.parsing": "Sospendi analisi area di lavoro", - "cancel.analysis": "Annulla {0}", - "resume.analysis": "Riprendi {0}", - "pause.analysis": "Sospendi {0}", - "another.analysis": "Avvia un'altra {0}...", + "cancel.analysis": "Annulla", + "resume.analysis": "Riprendi", + "pause.analysis": "Sospendi", + "another.analysis": "Avvia un'altra...", "active.analysis": "Esegui analisi del codice su File attivo", "all.analysis": "Esegui analisi del codice su Tutti i file", "open.analysis": "Esegui analisi del codice su Apri file" diff --git a/Extension/i18n/ita/src/nativeStrings.i18n.json b/Extension/i18n/ita/src/nativeStrings.i18n.json index a40076ff4..822174a9e 100644 --- a/Extension/i18n/ita/src/nativeStrings.i18n.json +++ b/Extension/i18n/ita/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "Impossibile trovare il file \"%s\".", "refactor_create_declaration_definition_failed": "La creazione della dichiarazione/definizione non è stata completata: %", "refactor_create_default_delete": "Impossibile creare la funzione '%s'. La creazione di funzioni eliminate o predefinite non è supportata.", - "refactor_function_copied_to_clipboard": "La firma della funzione è stata copiata negli Appunti.", "refactor_function_not_created": "Non è possibile creare la funzione '%s'.", "refactor_ambiguous_locations": "Non è possibile trovare una posizione non ambigua per la funzione '%s'.", "refactor_file_not_in_project": "Impossibile trovare il file \"%s\".", "refactor_not_class_namespace": "Non è stato possibile trovare la classe o lo spazio dei nomi '%s'.", "refactor_operation_unsupported": "L'operazione non è supportata per '%s'.", "unknown_error": "Errore sconosciuto.", - "run_select_intellisense_configuration": "Eseguire il comando 'Seleziona configurazione IntelliSense' per individuare le intestazioni di sistema." + "run_select_intellisense_configuration": "Eseguire il comando 'Seleziona configurazione IntelliSense' per individuare le intestazioni di sistema.", + "offer_copy_declaration": "Copia dichiarazione di '{0}'", + "offer_copy_definition": "Copia definizione di '{0}'", + "refactor_copy_declaration_definition_failed": "Copia della dichiarazione/definizione negli Appunti non riuscita: %s" } \ No newline at end of file diff --git a/Extension/i18n/jpn/src/LanguageServer/client.i18n.json b/Extension/i18n/jpn/src/LanguageServer/client.i18n.json index 5565e2cb0..c13203fd6 100644 --- a/Extension/i18n/jpn/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/jpn/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "構成プロバイダー", "compilers": "コンパイラ", "setCompiler.message": "IntelliSense が構成されていません。独自の構成を設定しない限り、IntelliSense は機能しない可能性があります。", - "selectCompiler.string": "IntelliSense 構成を選択...", + "selectIntelliSenseConfiguration.string": "IntelliSense 構成を選択...", "use.provider": "{0}を使用する", "use.compileCommands": "{0}を使用する", "selectAnotherCompiler.string": "コンピューター上の別のコンパイラを選択...", "installCompiler.string": "コンパイラのインストールに関するヘルプ", "noConfig.string": "コンパイラで構成しない (推奨されません)", + "selectCompiler.string": "コンパイラを選択する", "confirmCompiler.string": "はい", "selectCompiler.message": "コンパイラ {0} が見つかりました。このコンパイラで IntelliSense を構成しますか?", - "selectIntelliSenseConfiguration.string": "IntelliSense 構成を選択...", "server.crashed.restart": "言語サーバーがクラッシュしました。再起動しています...", "server.crashed2": "言語サーバーが過去 3 分間に 5 回クラッシュしました。再起動されません。", "loggingLevel.changed": "{0} が次に変更されました: {1}", @@ -49,5 +49,6 @@ "yes.button": "はい", "no.button": "いいえ", "configurations.received": "カスタム構成を受信しました:", - "browse.configuration.received": "カスタムの参照構成を受信しました: {0}" + "browse.configuration.received": "カスタムの参照構成を受信しました: {0}", + "fallback.clipboard": " 宣言/定義がコピーされました。" } \ No newline at end of file diff --git a/Extension/i18n/jpn/src/LanguageServer/references.i18n.json b/Extension/i18n/jpn/src/LanguageServer/references.i18n.json index dbbb3aa62..e96c4bb97 100644 --- a/Extension/i18n/jpn/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/jpn/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "すべての参照を検索", "peek.references": "参照のクイック表示", "rename": "名前の変更", + "call.hierarchy": "呼び出し階層", "confirmed.reference.upper": "参照が確認されました", "confirmation.in.progress.upper": "確認が進行中です", "comment.reference.upper": "コメント参照", diff --git a/Extension/i18n/jpn/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/jpn/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..52ec7183a --- /dev/null +++ b/Extension/i18n/jpn/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "C/C++ 構成" +} \ No newline at end of file diff --git a/Extension/i18n/jpn/src/LanguageServer/ui.i18n.json b/Extension/i18n/jpn/src/LanguageServer/ui.i18n.json index b9b9f7ea0..7deaaaa1c 100644 --- a/Extension/i18n/jpn/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/jpn/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "ワークスペースを解析しています", + "paused.tagparser.text": "ワークスペースを解析しています: 一時停止", + "complete.tagparser.text": "解析完了", + "initializing.tagparser.text": "ワークスペースの初期化", + "indexing.tagparser.text": "ワークスペースのインデックス作成", + "rescan.tagparse.text": "ワークスペースの再スキャン", "c.cpp.parsing.open.files.tooltip": "開いているファイルを解析しています", "click.to.preview": "クリックして結果をプレビューします", - "updating.intellisense.tooltip": "IntelliSense を更新しています...", + "updating.intellisense.text": "IntelliSense: 更新中", + "idle.intellisense.text": "IntelliSense: 準備完了", + "absent.intellisense.text": "IntelliSense: 未構成", + "running.analysis.text": "Code Analysis: 実行中", + "paused.analysis.text": "Code Analysis: 一時停止", + "mode.analysis.prefix": "Code Analysis モード: ", "c.cpp.configureIntelliSenseStatus.text": "IntelliSense の構成", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ IntelliSense の構成", "select.command": "コマンドを選択する...", + "select.code.analysis.command": "コード分析コマンドを選択...", "c.cpp.configuration.tooltip": "C/C++ 構成", "c.cpp.references.statusbar": "C/C + + リファレンスの状態", - "c.cpp.intellisense.statusbar": "C/c + + IntelliSense の状態", - "c.cpp.tagparser.statusbar": "C/C + + タグ パーサーの状態", - "discovering.files.tooltip": "ファイルを検出しています", - "running.analysis.tooltip": "{0} を実行しています", - "code.analysis.paused.tooltip": "{0}一時停止", - "running.analysis.processed.tooltip": "実行中{0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "C/c + + IntelliSense の状態", + "cpptools.status.tagparser": "C/C + + タグ パーサーの状態", + "cpptools.detail.tagparser": "初期化しています...", + "cpptools.status.codeanalysis": "C/C++ Code Analysis の状態", + "c.cpp.codeanalysis.statusbar.runNow": "直ちに実行", + "tagparser.pause.text": "一時停止", + "tagparser.resume.text": "再開", + "intellisense.select.text": "コンパイラを選択する", + "rescan.intellisense.text": "再スキャン", + "rescan.intellisense.tooltip": "IntelliSense の再スキャン", + "mode.codeanalysis.status.automatic": "自動", + "mode.codeanalysis.status.manual": "手動", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "オプション", + "startup.codeanalysis.status": "開始しています...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "直ちに実行", + "running.analysis.processed.tooltip": "実行中: {0} / {1} ({2}%)", "select.a.configuration": "構成を選択する...", "edit.configuration.ui": "構成の編集 (UI)", "edit.configuration.json": "構成の編集 (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "ワークスペース フォルダーを選択します...", "resume.parsing": "ワークスペースの解析の再開", "pause.parsing": "ワークスペースの解析の一時停止", - "cancel.analysis": "{0} の取り消し", - "resume.analysis": "{0} の再開", - "pause.analysis": "{0}の一時停止" + "cancel.analysis": "キャンセル", + "resume.analysis": "再開", + "pause.analysis": "一時停止", + "another.analysis": "別のファイルを開始...", + "active.analysis": "アクティブ ファイルで Code Analysis を実行する", + "all.analysis": "すべてのファイルで Code Analysis を実行する", + "open.analysis": "開いているファイルで Code Analysis を実行する" } \ No newline at end of file diff --git a/Extension/i18n/jpn/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/jpn/src/LanguageServer/ui_new.i18n.json index 46f9ffc5c..ebd5ae7c3 100644 --- a/Extension/i18n/jpn/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/jpn/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "IntelliSense の構成", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ IntelliSense の構成", "select.command": "コマンドを選択する...", + "select.code.analysis.command": "コード分析コマンドを選択...", "c.cpp.configuration.tooltip": "C/C++ 構成", "c.cpp.references.statusbar": "C/C + + リファレンスの状態", "cpptools.status.intellisense": "C/C++ IntelliSense の状態", @@ -33,11 +34,12 @@ "intellisense.select.text": "コンパイラを選択する", "rescan.intellisense.text": "再スキャン", "rescan.intellisense.tooltip": "IntelliSense の再スキャン", - "mode.codeanalysis.status": "自動", + "mode.codeanalysis.status.automatic": "自動", + "mode.codeanalysis.status.manual": "手動", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "オプション", "startup.codeanalysis.status": "開始しています...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "直ちに実行", - "running.analysis.processed.tooltip": "実行中{0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "実行中: {0} / {1} ({2}%)", "select.a.configuration": "構成を選択する...", "edit.configuration.ui": "構成の編集 (UI)", "edit.configuration.json": "構成の編集 (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "ワークスペース フォルダーを選択します...", "resume.parsing": "ワークスペースの解析の再開", "pause.parsing": "ワークスペースの解析の一時停止", - "cancel.analysis": "{0} の取り消し", - "resume.analysis": "{0} の再開", - "pause.analysis": "{0} の一時停止", - "another.analysis": "別の {0} を開始...", + "cancel.analysis": "キャンセル", + "resume.analysis": "再開", + "pause.analysis": "一時停止", + "another.analysis": "別のファイルを開始...", "active.analysis": "アクティブ ファイルで Code Analysis を実行する", "all.analysis": "すべてのファイルで Code Analysis を実行する", "open.analysis": "開いているファイルで Code Analysis を実行する" diff --git a/Extension/i18n/jpn/src/nativeStrings.i18n.json b/Extension/i18n/jpn/src/nativeStrings.i18n.json index d351f8a3a..9c01cf587 100644 --- a/Extension/i18n/jpn/src/nativeStrings.i18n.json +++ b/Extension/i18n/jpn/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "ファイル '%s' が見つかりませんでした。", "refactor_create_declaration_definition_failed": "宣言 / 定義の作成に失敗しました: %s", "refactor_create_default_delete": "関数 '%s' を作成できません。既定の関数または削除された関数の作成はサポートされていません。", - "refactor_function_copied_to_clipboard": "関数シグネチャがクリップボードにコピーされました。", "refactor_function_not_created": "関数 '%s' を作成できませんでした。", "refactor_ambiguous_locations": "関数 '%s' の明確な場所が見つかりません。", "refactor_file_not_in_project": "ファイル '%s' が見つかりませんでした。", "refactor_not_class_namespace": "クラスまたは名前空間 '%s' が見つかりませんでした。", "refactor_operation_unsupported": "この操作は '%s' でサポートされていません。", "unknown_error": "不明なエラーです。", - "run_select_intellisense_configuration": "システム ヘッダーを見つけるには、'IntelliSense 構成の選択...' コマンドを実行してください。" + "run_select_intellisense_configuration": "システム ヘッダーを見つけるには、'IntelliSense 構成の選択...' コマンドを実行してください。", + "offer_copy_declaration": "'{0}' の宣言をコピーする", + "offer_copy_definition": "'{0}' の定義をコピーする", + "refactor_copy_declaration_definition_failed": "宣言/定義をクリップボードにコピーできませんでした: %s" } \ No newline at end of file diff --git a/Extension/i18n/kor/src/LanguageServer/client.i18n.json b/Extension/i18n/kor/src/LanguageServer/client.i18n.json index 1d1021995..954b450a0 100644 --- a/Extension/i18n/kor/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/kor/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "구성 공급자", "compilers": "컴파일러", "setCompiler.message": "IntelliSense를 구성하지 않았습니다. 고유한 구성을 설정하지 않으면 IntelliSense가 작동하지 않을 수 있습니다.", - "selectCompiler.string": "IntelliSense 구성 선택...", + "selectIntelliSenseConfiguration.string": "IntelliSense 구성 선택...", "use.provider": "{0} 사용", "use.compileCommands": "{0} 사용", "selectAnotherCompiler.string": "내 컴퓨터에서 다른 컴파일러 선택...", "installCompiler.string": "컴파일러 설치 도움말", "noConfig.string": "컴파일러를 사용하여 구성하지 않음(권장하지 않음)", + "selectCompiler.string": "컴파일러 선택", "confirmCompiler.string": "예", "selectCompiler.message": "{0} 컴파일러를 발견했습니다. 이 컴파일러를 사용하여 IntelliSense를 구성할까요?", - "selectIntelliSenseConfiguration.string": "IntelliSense 구성 선택...", "server.crashed.restart": "언어 서버가 중단되었습니다. 다시 시작하는 중입니다...", "server.crashed2": "지난 3분 동안 언어 서버에서 크래시가 5회 발생했습니다. 다시 시작되지 않습니다.", "loggingLevel.changed": "{0}이(가) {1}(으)로 변경되었습니다.", @@ -49,5 +49,6 @@ "yes.button": "예", "no.button": "아니요", "configurations.received": "사용자 지정 구성이 수신됨:", - "browse.configuration.received": "사용자 지정 찾아보기 구성이 수신됨: {0}" + "browse.configuration.received": "사용자 지정 찾아보기 구성이 수신됨: {0}", + "fallback.clipboard": " 선언/정의가 복사되었습니다." } \ No newline at end of file diff --git a/Extension/i18n/kor/src/LanguageServer/references.i18n.json b/Extension/i18n/kor/src/LanguageServer/references.i18n.json index f2131b13c..773efeadc 100644 --- a/Extension/i18n/kor/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/kor/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "모든 참조 찾기", "peek.references": "참조 피킹(peeking)", "rename": "이름 바꾸기", + "call.hierarchy": "호출 계층 구조", "confirmed.reference.upper": "확인된 참조", "confirmation.in.progress.upper": "확인 진행 중", "comment.reference.upper": "주석 참조", diff --git a/Extension/i18n/kor/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/kor/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..cd0012980 --- /dev/null +++ b/Extension/i18n/kor/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "C/C++ 구성" +} \ No newline at end of file diff --git a/Extension/i18n/kor/src/LanguageServer/ui.i18n.json b/Extension/i18n/kor/src/LanguageServer/ui.i18n.json index 2cce10ddd..50b1921fb 100644 --- a/Extension/i18n/kor/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/kor/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "작업 영역 구문 분석", + "paused.tagparser.text": "작업 영역 구문 분석: 일시 중지됨", + "complete.tagparser.text": "구문 분석이 완료되었습니다.", + "initializing.tagparser.text": "작업 영역 초기화", + "indexing.tagparser.text": "작업 영역 인덱싱", + "rescan.tagparse.text": "작업 영역 다시 검사", "c.cpp.parsing.open.files.tooltip": "열린 파일을 구문 분석하는 중", "click.to.preview": "결과를 미리 보려면 클릭", - "updating.intellisense.tooltip": "IntelliSense를 업데이트하는 중", + "updating.intellisense.text": "IntelliSense: 업데이트 중", + "idle.intellisense.text": "IntelliSense: 준비 완료", + "absent.intellisense.text": "IntelliSense: 구성되지 않음", + "running.analysis.text": "Code Analysis: 실행 중", + "paused.analysis.text": "Code Analysis: 일시 중지됨", + "mode.analysis.prefix": "Code Analysis 모드: ", "c.cpp.configureIntelliSenseStatus.text": "IntelliSense 구성", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ IntelliSense 구성", "select.command": "명령 선택...", + "select.code.analysis.command": "코드 분석 명령 선택...", "c.cpp.configuration.tooltip": "C/C++ 구성", "c.cpp.references.statusbar": "C/C++ 참조 상태", - "c.cpp.intellisense.statusbar": "C/C++ IntelliSense 상태", - "c.cpp.tagparser.statusbar": "C/C++ 태그 파서 상태", - "discovering.files.tooltip": "파일을 검색하는 중", - "running.analysis.tooltip": "{0} 실행 중", - "code.analysis.paused.tooltip": "{0} 일시 중지됨", - "running.analysis.processed.tooltip": "{0}: {1} / {2} 실행 중({3}%)", + "cpptools.status.intellisense": "C/C++ IntelliSense 상태", + "cpptools.status.tagparser": "C/C++ 태그 파서 상태", + "cpptools.detail.tagparser": "초기화하는 중...", + "cpptools.status.codeanalysis": "C/C++ Code Analysis 상태", + "c.cpp.codeanalysis.statusbar.runNow": "지금 실행", + "tagparser.pause.text": "일시 중지", + "tagparser.resume.text": "다시 시작", + "intellisense.select.text": "컴파일러 선택", + "rescan.intellisense.text": "다시 검사", + "rescan.intellisense.tooltip": "IntelliSense 다시 검사", + "mode.codeanalysis.status.automatic": "자동", + "mode.codeanalysis.status.manual": "수동", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "옵션", + "startup.codeanalysis.status": "시작 중...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "지금 실행", + "running.analysis.processed.tooltip": "실행 중: {0} / {1} ({2}%)", "select.a.configuration": "구성 선택...", "edit.configuration.ui": "구성 편집(UI)", "edit.configuration.json": "구성 편집(JSON)", @@ -29,7 +51,11 @@ "select.workspace": "작업 영역 폴더 선택...", "resume.parsing": "작업 영역 구문 분석 다시 시작", "pause.parsing": "작업 영역 구문 분석 일시 중지", - "cancel.analysis": "{0} 취소", - "resume.analysis": "{0} 다시 시작", - "pause.analysis": "{0} 일시 중지" + "cancel.analysis": "취소", + "resume.analysis": "다시 시작", + "pause.analysis": "일시 중지", + "another.analysis": "다른 시작...", + "active.analysis": "활성 파일에서 코드 분석 실행", + "all.analysis": "모든 파일에 대한 코드 분석 실행", + "open.analysis": "열린 파일에서 코드 분석 실행" } \ No newline at end of file diff --git a/Extension/i18n/kor/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/kor/src/LanguageServer/ui_new.i18n.json index b8d4b8d92..50b1921fb 100644 --- a/Extension/i18n/kor/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/kor/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "IntelliSense 구성", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ IntelliSense 구성", "select.command": "명령 선택...", + "select.code.analysis.command": "코드 분석 명령 선택...", "c.cpp.configuration.tooltip": "C/C++ 구성", "c.cpp.references.statusbar": "C/C++ 참조 상태", "cpptools.status.intellisense": "C/C++ IntelliSense 상태", @@ -33,11 +34,12 @@ "intellisense.select.text": "컴파일러 선택", "rescan.intellisense.text": "다시 검사", "rescan.intellisense.tooltip": "IntelliSense 다시 검사", - "mode.codeanalysis.status": "자동", + "mode.codeanalysis.status.automatic": "자동", + "mode.codeanalysis.status.manual": "수동", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "옵션", "startup.codeanalysis.status": "시작 중...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "지금 실행", - "running.analysis.processed.tooltip": "{0}: {1} / {2} 실행 중({3}%)", + "running.analysis.processed.tooltip": "실행 중: {0} / {1} ({2}%)", "select.a.configuration": "구성 선택...", "edit.configuration.ui": "구성 편집(UI)", "edit.configuration.json": "구성 편집(JSON)", @@ -49,10 +51,10 @@ "select.workspace": "작업 영역 폴더 선택...", "resume.parsing": "작업 영역 구문 분석 다시 시작", "pause.parsing": "작업 영역 구문 분석 일시 중지", - "cancel.analysis": "{0} 취소", - "resume.analysis": "{0} 다시 시작", - "pause.analysis": "{0} 일시 중지", - "another.analysis": "다른 {0} 시작...", + "cancel.analysis": "취소", + "resume.analysis": "다시 시작", + "pause.analysis": "일시 중지", + "another.analysis": "다른 시작...", "active.analysis": "활성 파일에서 코드 분석 실행", "all.analysis": "모든 파일에 대한 코드 분석 실행", "open.analysis": "열린 파일에서 코드 분석 실행" diff --git a/Extension/i18n/kor/src/nativeStrings.i18n.json b/Extension/i18n/kor/src/nativeStrings.i18n.json index a34c69359..a5010b7bc 100644 --- a/Extension/i18n/kor/src/nativeStrings.i18n.json +++ b/Extension/i18n/kor/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "'%s' 파일을 찾을 수 없습니다.", "refactor_create_declaration_definition_failed": "선언/정의 만들기 실패: %s", "refactor_create_default_delete": "함수 '%s'을(를) 만들 수 없습니다. 기본값 또는 삭제된 함수 만들기는 지원되지 않습니다.", - "refactor_function_copied_to_clipboard": "함수 서명이 클립보드에 복사되었습니다.", "refactor_function_not_created": "'%s' 함수를 만들 수 없습니다.", "refactor_ambiguous_locations": "'%s' 함수에 대한 명확한 위치를 찾을 수 없습니다.", "refactor_file_not_in_project": "'%s' 파일을 찾을 수 없습니다.", "refactor_not_class_namespace": "'%s' 클래스 또는 네임스페이스를 찾을 수 없습니다.", "refactor_operation_unsupported": "'%s'에서는 작업이 지원되지 않습니다.", "unknown_error": "알 수 없는 오류입니다.", - "run_select_intellisense_configuration": "시스템 헤더를 찾으려면 'IntelliSense 구성 선택...' 명령을 실행하세요." + "run_select_intellisense_configuration": "시스템 헤더를 찾으려면 'IntelliSense 구성 선택...' 명령을 실행하세요.", + "offer_copy_declaration": "'{0}'의 선언 복사", + "offer_copy_definition": "'{0}'의 정의 복사", + "refactor_copy_declaration_definition_failed": "선언/정의를 클립보드에 복사하지 못했습니다. %s" } \ No newline at end of file diff --git a/Extension/i18n/plk/src/LanguageServer/client.i18n.json b/Extension/i18n/plk/src/LanguageServer/client.i18n.json index 2c7eb5e97..dc406abfb 100644 --- a/Extension/i18n/plk/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/plk/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "dostawcy konfiguracji", "compilers": "kompilatory", "setCompiler.message": "Nie skonfigurowano funkcji IntelliSense. Jeśli nie ustawisz własnych konfiguracji, funkcja IntelliSense może nie działać.", - "selectCompiler.string": "Wybierz konfigurację funkcji IntelliSense...", + "selectIntelliSenseConfiguration.string": "Wybierz konfigurację funkcji IntelliSense...", "use.provider": "Użyj kompilatora {0}", "use.compileCommands": "Użyj kompilatora {0}", "selectAnotherCompiler.string": "Wybierz inny kompilator na mojej maszynie...", "installCompiler.string": "Pomóż mi zainstalować kompilator", "noConfig.string": "Nie konfiguruj za pomocą kompilatora (niezalecane)", + "selectCompiler.string": "Wybierz kompilator", "confirmCompiler.string": "Tak", "selectCompiler.message": "Znaleziono kompilator {0}. Czy chcesz skonfigurować funkcję IntelliSense za pomocą tego kompilatora?", - "selectIntelliSenseConfiguration.string": "Wybierz konfigurację funkcji IntelliSense...", "server.crashed.restart": "Wystąpiła awaria serwera języka. Trwa ponowne uruchamianie...", "server.crashed2": "W ciągu ostatnich 3 minut awaria serwera języka wystąpiła 5 razy. Nie zostanie on ponownie uruchomiony.", "loggingLevel.changed": "Poziom {0} zmienił się na: {1}", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " Deklaracja/definicja została skopiowana." } \ No newline at end of file diff --git a/Extension/i18n/plk/src/LanguageServer/references.i18n.json b/Extension/i18n/plk/src/LanguageServer/references.i18n.json index dd210d6a4..d8f9efed7 100644 --- a/Extension/i18n/plk/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/plk/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Znajdowanie wszystkich odwołań", "peek.references": "Wgląd w odwołania", "rename": "Zmień nazwę", + "call.hierarchy": "Wywołaj hierarchię", "confirmed.reference.upper": "ODWOŁANIE POTWIERDZONE", "confirmation.in.progress.upper": "POTWIERDZENIE W TOKU", "comment.reference.upper": "ODWOŁANIE DO KOMENTARZA", diff --git a/Extension/i18n/plk/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/plk/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..d89788f58 --- /dev/null +++ b/Extension/i18n/plk/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "Konfiguracje języka C/C++" +} \ No newline at end of file diff --git a/Extension/i18n/plk/src/LanguageServer/ui.i18n.json b/Extension/i18n/plk/src/LanguageServer/ui.i18n.json index fa27c8b0b..118e255e7 100644 --- a/Extension/i18n/plk/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/plk/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "Analizowanie obszaru roboczego", + "paused.tagparser.text": "Analizowanie obszaru roboczego: wstrzymane", + "complete.tagparser.text": "Analizowanie zakończone", + "initializing.tagparser.text": "Inicjowanie obszaru roboczego", + "indexing.tagparser.text": "Indeksowanie obszaru roboczego", + "rescan.tagparse.text": "Ponowne skanowanie obszaru roboczego", "c.cpp.parsing.open.files.tooltip": "Analizowanie otwartych plików", "click.to.preview": "kliknij, aby wyświetlić podgląd wyników", - "updating.intellisense.tooltip": "Aktualizowanie funkcji IntelliSense", + "updating.intellisense.text": "IntelliSense: aktualizowanie", + "idle.intellisense.text": "IntelliSense: gotowe", + "absent.intellisense.text": "IntelliSense: nieskonfigurowane", + "running.analysis.text": "Analiza kodu: uruchamianie", + "paused.analysis.text": "Analiza kodu: wstrzymano", + "mode.analysis.prefix": "Tryb analizy kodu: ", "c.cpp.configureIntelliSenseStatus.text": "Konfigurowanie funkcji IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Konfigurowanie funkcji IntelliSense (C/C++)", "select.command": "Wybierz polecenie...", + "select.code.analysis.command": "Wybierz polecenie analizy kodu...", "c.cpp.configuration.tooltip": "Konfiguracja języka C/C++", "c.cpp.references.statusbar": "Stan odwołań języka C/C++", - "c.cpp.intellisense.statusbar": "Stan funkcji IntelliSense języka C/C++", - "c.cpp.tagparser.statusbar": "Stan parsera tagów języka C/C++", - "discovering.files.tooltip": "Odnajdowanie plików", - "running.analysis.tooltip": "Wykonywanie {0}", - "code.analysis.paused.tooltip": "{0} wstrzymana", - "running.analysis.processed.tooltip": "Uruchamianie {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "Stan funkcji IntelliSense języka C/C++", + "cpptools.status.tagparser": "Stan parsera tagów języka C/C++", + "cpptools.detail.tagparser": "Trwa inicjowanie...", + "cpptools.status.codeanalysis": "Stan analizy kodu C/C++", + "c.cpp.codeanalysis.statusbar.runNow": "Uruchom teraz", + "tagparser.pause.text": "Wstrzymaj", + "tagparser.resume.text": "Wznów", + "intellisense.select.text": "Wybierz kompilator", + "rescan.intellisense.text": "Skanuj ponownie", + "rescan.intellisense.tooltip": "Ponowne skanowanie funkcji IntelliSense", + "mode.codeanalysis.status.automatic": "Automatycznie", + "mode.codeanalysis.status.manual": "Ręczny", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opcje", + "startup.codeanalysis.status": "Trwa uruchamianie...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Uruchom teraz", + "running.analysis.processed.tooltip": "Uruchomione: {0} / {1} ({2}%)", "select.a.configuration": "Wybierz konfigurację...", "edit.configuration.ui": "Edytowanie konfiguracji (interfejs użytkownika)", "edit.configuration.json": "Edytowanie konfiguracji (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Wybierz folder obszaru roboczego...", "resume.parsing": "Wznów analizowanie obszaru roboczego", "pause.parsing": "Wstrzymaj analizowanie obszaru roboczego", - "cancel.analysis": "Anuluj {0}", - "resume.analysis": "Wznów {0}", - "pause.analysis": "Wstrzymaj {0}" + "cancel.analysis": "Anuluj", + "resume.analysis": "Wznów", + "pause.analysis": "Wstrzymaj", + "another.analysis": "Uruchom kolejną...", + "active.analysis": "Uruchom analizę kodu dla aktywnego pliku", + "all.analysis": "Uruchamianie analizy kodu dla wszystkich plików", + "open.analysis": "Uruchamianie rozszerzenia Code Analysis na otwartych plikach" } \ No newline at end of file diff --git a/Extension/i18n/plk/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/plk/src/LanguageServer/ui_new.i18n.json index cb59b05f5..118e255e7 100644 --- a/Extension/i18n/plk/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/plk/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "Konfigurowanie funkcji IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Konfigurowanie funkcji IntelliSense (C/C++)", "select.command": "Wybierz polecenie...", + "select.code.analysis.command": "Wybierz polecenie analizy kodu...", "c.cpp.configuration.tooltip": "Konfiguracja języka C/C++", "c.cpp.references.statusbar": "Stan odwołań języka C/C++", "cpptools.status.intellisense": "Stan funkcji IntelliSense języka C/C++", @@ -33,11 +34,12 @@ "intellisense.select.text": "Wybierz kompilator", "rescan.intellisense.text": "Skanuj ponownie", "rescan.intellisense.tooltip": "Ponowne skanowanie funkcji IntelliSense", - "mode.codeanalysis.status": "Automatycznie", + "mode.codeanalysis.status.automatic": "Automatycznie", + "mode.codeanalysis.status.manual": "Ręczny", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opcje", "startup.codeanalysis.status": "Trwa uruchamianie...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Uruchom teraz", - "running.analysis.processed.tooltip": "Uruchamianie {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "Uruchomione: {0} / {1} ({2}%)", "select.a.configuration": "Wybierz konfigurację...", "edit.configuration.ui": "Edytowanie konfiguracji (interfejs użytkownika)", "edit.configuration.json": "Edytowanie konfiguracji (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Wybierz folder obszaru roboczego...", "resume.parsing": "Wznów analizowanie obszaru roboczego", "pause.parsing": "Wstrzymaj analizowanie obszaru roboczego", - "cancel.analysis": "Anuluj {0}", - "resume.analysis": "Wznów {0}", - "pause.analysis": "Wstrzymaj {0}", - "another.analysis": "Uruchom kolejną {0}...", + "cancel.analysis": "Anuluj", + "resume.analysis": "Wznów", + "pause.analysis": "Wstrzymaj", + "another.analysis": "Uruchom kolejną...", "active.analysis": "Uruchom analizę kodu dla aktywnego pliku", "all.analysis": "Uruchamianie analizy kodu dla wszystkich plików", "open.analysis": "Uruchamianie rozszerzenia Code Analysis na otwartych plikach" diff --git a/Extension/i18n/plk/src/nativeStrings.i18n.json b/Extension/i18n/plk/src/nativeStrings.i18n.json index 1fa9b62c9..be62bbd35 100644 --- a/Extension/i18n/plk/src/nativeStrings.i18n.json +++ b/Extension/i18n/plk/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "Plik '%s' nie odnaleziony.", "refactor_create_declaration_definition_failed": "Tworzenie deklaracji / definicji nie powiodło się: %s", "refactor_create_default_delete": "Nie można utworzyć funkcji „%s”. Tworzenie domyślnych lub usuniętych funkcji nie jest obsługiwane.", - "refactor_function_copied_to_clipboard": "Podpis funkcji został skopiowany do schowka.", "refactor_function_not_created": "Nie można utworzyć funkcji „%s”.", "refactor_ambiguous_locations": "Nie można znaleźć jednoznacznej lokalizacji funkcji „%s”.", "refactor_file_not_in_project": "Plik '%s' nie odnaleziony.", "refactor_not_class_namespace": "Nie można znaleźć klasy lub obszaru nazw „%s”.", "refactor_operation_unsupported": "Operacja elementu „%s” nie jest obsługiwana.", "unknown_error": "Nieznany błąd.", - "run_select_intellisense_configuration": "Uruchom polecenie „Wybierz konfigurację funkcji IntelliSense...”, aby zlokalizować nagłówki systemu." + "run_select_intellisense_configuration": "Uruchom polecenie „Wybierz konfigurację funkcji IntelliSense...”, aby zlokalizować nagłówki systemu.", + "offer_copy_declaration": "Kopiuj deklarację '{0}'", + "offer_copy_definition": "Kopiuj definicję '{0}'", + "refactor_copy_declaration_definition_failed": "Kopiowanie deklaracji/definicji do schowka nie powiodło się: %s" } \ No newline at end of file diff --git a/Extension/i18n/ptb/src/LanguageServer/client.i18n.json b/Extension/i18n/ptb/src/LanguageServer/client.i18n.json index ce50d3c85..e11c4bbb0 100644 --- a/Extension/i18n/ptb/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/ptb/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "provedores de configuração", "compilers": "compiladores", "setCompiler.message": "Você não tem o IntelliSense configurado. A menos que você defina suas próprias configurações, o IntelliSense pode não funcionar.", - "selectCompiler.string": "Selecione Configuração do IntelliSense...", + "selectIntelliSenseConfiguration.string": "Selecione Configuração do IntelliSense...", "use.provider": "Usar {0}", "use.compileCommands": "Usar {0}", "selectAnotherCompiler.string": "Selecione outro compilador na minha máquina...", "installCompiler.string": "Ajude-me a instalar um compilador", "noConfig.string": "Não configure com um compilador (não recomendado)", + "selectCompiler.string": "Selecionar Compilador", "confirmCompiler.string": "Sim", "selectCompiler.message": "O compilador {0} foi encontrado. Deseja configurar o IntelliSense com este compilador?", - "selectIntelliSenseConfiguration.string": "Selecione Configuração do IntelliSense...", "server.crashed.restart": "O servidor de idiomas travou. Reiniciando...", "server.crashed2": "O servidor de idioma falhou cinco vezes nos últimos três minutos. Ele não será reiniciado.", "loggingLevel.changed": "{0} foi alterado para: {1}", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " A declaração/definição foi copiada." } \ No newline at end of file diff --git a/Extension/i18n/ptb/src/LanguageServer/references.i18n.json b/Extension/i18n/ptb/src/LanguageServer/references.i18n.json index 6ea5ebab4..d59b74e59 100644 --- a/Extension/i18n/ptb/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/ptb/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Localizar Todas as Referências", "peek.references": "Espiar Referências", "rename": "Renomear", + "call.hierarchy": "Hierarquia de Chamadas", "confirmed.reference.upper": "REFERÊNCIA CONFIRMADA", "confirmation.in.progress.upper": "CONFIRMAÇÃO EM ANDAMENTO", "comment.reference.upper": "REFERÊNCIA DE COMENTÁRIO", diff --git a/Extension/i18n/ptb/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/ptb/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..88eaf384e --- /dev/null +++ b/Extension/i18n/ptb/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "Configurações C/C++" +} \ No newline at end of file diff --git a/Extension/i18n/ptb/src/LanguageServer/ui.i18n.json b/Extension/i18n/ptb/src/LanguageServer/ui.i18n.json index 1b4ffed9c..1aa8ec465 100644 --- a/Extension/i18n/ptb/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/ptb/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "c.cpp.parsing.open.files.tooltip": "Analisando arquivos abertos", + "running.tagparser.text": "Analisando o Workspace", + "paused.tagparser.text": "Workspace de Análise: Pausado", + "complete.tagparser.text": "Análise Concluída", + "initializing.tagparser.text": "Inicializando o Workspace", + "indexing.tagparser.text": "Workspace da Indexação", + "rescan.tagparse.text": "Examinar Novamente o Workspace", + "c.cpp.parsing.open.files.tooltip": "Analisando Arquivos Abertos", "click.to.preview": "clique aqui para visualizar os resultados", - "updating.intellisense.tooltip": "Atualizando o IntelliSense", + "updating.intellisense.text": "IntelliSense: Atualizando", + "idle.intellisense.text": "IntelliSense: Pronto", + "absent.intellisense.text": "IntelliSense: Não Configurado", + "running.analysis.text": "Code Analysis: em Execução", + "paused.analysis.text": "Code Analysis: Pausado", + "mode.analysis.prefix": "Modo do Code Analysis: ", "c.cpp.configureIntelliSenseStatus.text": "Configurar o IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ Configurar IntelliSense", "select.command": "Selecionar um comando...", + "select.code.analysis.command": "Selecione um comando de análise de código...", "c.cpp.configuration.tooltip": "Configuração de C/C++", "c.cpp.references.statusbar": "Status de Referências do C/C++", - "c.cpp.intellisense.statusbar": "Status do IntelliSense do C/C++", - "c.cpp.tagparser.statusbar": "Status do Analisador de Marcas do C/C++", - "discovering.files.tooltip": "Descobrindo arquivos", - "running.analysis.tooltip": "Executando {0}", - "code.analysis.paused.tooltip": "{0} pausado", - "running.analysis.processed.tooltip": "Executando {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "Status do IntelliSense do C/C++", + "cpptools.status.tagparser": "Status do Analisador de Marcas do C/C++", + "cpptools.detail.tagparser": "Inicializando...", + "cpptools.status.codeanalysis": "Status do Code Analysis do C/C++", + "c.cpp.codeanalysis.statusbar.runNow": "Executar Agora", + "tagparser.pause.text": "Pausar", + "tagparser.resume.text": "Retomar", + "intellisense.select.text": "Selecionar um Compilador", + "rescan.intellisense.text": "Examinar novamente", + "rescan.intellisense.tooltip": "Examinar Novamente o IntelliSense", + "mode.codeanalysis.status.automatic": "Automático", + "mode.codeanalysis.status.manual": "Manual", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opções", + "startup.codeanalysis.status": "Iniciando...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Executar Agora", + "running.analysis.processed.tooltip": "Executando: {0} / {1} ({2}%)", "select.a.configuration": "Selecione uma Configuração...", "edit.configuration.ui": "Editar Configurações (IU)", "edit.configuration.json": "Editar Configurações (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Selecionar uma pasta de workspace...", "resume.parsing": "Retomar a Análise do Espaço de trabalho", "pause.parsing": "Pausar a Análise do Espaço de trabalho", - "cancel.analysis": "Cancelar {0}.", - "resume.analysis": "Retomar {0}", - "pause.analysis": "Pausar {0}" + "cancel.analysis": "Cancelar", + "resume.analysis": "Retomar", + "pause.analysis": "Pausar", + "another.analysis": "Iniciar Outro...", + "active.analysis": "Executar Code Analysis no Arquivo Ativo", + "all.analysis": "Executar Code Analysis em Todos os Arquivos", + "open.analysis": "Executar Code Analysis em Abrir Arquivos" } \ No newline at end of file diff --git a/Extension/i18n/ptb/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/ptb/src/LanguageServer/ui_new.i18n.json index 55327a880..1aa8ec465 100644 --- a/Extension/i18n/ptb/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/ptb/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "Configurar o IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ Configurar IntelliSense", "select.command": "Selecionar um comando...", + "select.code.analysis.command": "Selecione um comando de análise de código...", "c.cpp.configuration.tooltip": "Configuração de C/C++", "c.cpp.references.statusbar": "Status de Referências do C/C++", "cpptools.status.intellisense": "Status do IntelliSense do C/C++", @@ -33,11 +34,12 @@ "intellisense.select.text": "Selecionar um Compilador", "rescan.intellisense.text": "Examinar novamente", "rescan.intellisense.tooltip": "Examinar Novamente o IntelliSense", - "mode.codeanalysis.status": "Automático", + "mode.codeanalysis.status.automatic": "Automático", + "mode.codeanalysis.status.manual": "Manual", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Opções", "startup.codeanalysis.status": "Iniciando...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Executar Agora", - "running.analysis.processed.tooltip": "Executando {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "Executando: {0} / {1} ({2}%)", "select.a.configuration": "Selecione uma Configuração...", "edit.configuration.ui": "Editar Configurações (IU)", "edit.configuration.json": "Editar Configurações (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Selecionar uma pasta de workspace...", "resume.parsing": "Retomar a Análise do Espaço de trabalho", "pause.parsing": "Pausar a Análise do Espaço de trabalho", - "cancel.analysis": "Cancelar {0}", - "resume.analysis": "Retomar {0}", - "pause.analysis": "Pausar {0}", - "another.analysis": "Iniciar Outro {0}...", + "cancel.analysis": "Cancelar", + "resume.analysis": "Retomar", + "pause.analysis": "Pausar", + "another.analysis": "Iniciar Outro...", "active.analysis": "Executar Code Analysis no Arquivo Ativo", "all.analysis": "Executar Code Analysis em Todos os Arquivos", "open.analysis": "Executar Code Analysis em Abrir Arquivos" diff --git a/Extension/i18n/ptb/src/nativeStrings.i18n.json b/Extension/i18n/ptb/src/nativeStrings.i18n.json index f68d2c5f2..476ca4def 100644 --- a/Extension/i18n/ptb/src/nativeStrings.i18n.json +++ b/Extension/i18n/ptb/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "O arquivo %s não foi encontrado.", "refactor_create_declaration_definition_failed": "Falha ao criar Declaração/Definição: %s", "refactor_create_default_delete": "Não é possível criar a função '%s'. Não há suporte para a criação de funções padrão ou excluídas.", - "refactor_function_copied_to_clipboard": "A assinatura da função foi copiada para a área de transferência.", "refactor_function_not_created": "Não é possível criar a função '%s'.", "refactor_ambiguous_locations": "Não é possível encontrar uma localização inequívoca para a função '%s'.", "refactor_file_not_in_project": "O arquivo %s não foi encontrado.", "refactor_not_class_namespace": "Não foi possível localizar a classe ou o namespace '%s'.", "refactor_operation_unsupported": "Operação sem suporte para \"%s\".", "unknown_error": "Erro desconhecido.", - "run_select_intellisense_configuration": "Execute o comando 'Selecionar configuração do IntelliSense...' para localizar os cabeçalhos do sistema." + "run_select_intellisense_configuration": "Execute o comando 'Selecionar configuração do IntelliSense...' para localizar os cabeçalhos do sistema.", + "offer_copy_declaration": "Copiar declaração de '{0}'", + "offer_copy_definition": "Copiar definição de '{0}'", + "refactor_copy_declaration_definition_failed": "Falha ao copiar Declaração/Definição para a área de transferência: %s" } \ No newline at end of file diff --git a/Extension/i18n/rus/src/LanguageServer/client.i18n.json b/Extension/i18n/rus/src/LanguageServer/client.i18n.json index 634dec7f1..4e934312d 100644 --- a/Extension/i18n/rus/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/rus/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "поставщики конфигурации", "compilers": "компиляторы", "setCompiler.message": "Нет настроенных функций IntelliSense. Если не настроить собственные конфигурации, IntelliSense может не работать.", - "selectCompiler.string": "Выбрать конфигурацию IntelliSense…", + "selectIntelliSenseConfiguration.string": "Выбрать конфигурацию IntelliSense…", "use.provider": "Использовать {0}", "use.compileCommands": "Использовать {0}", "selectAnotherCompiler.string": "Выбрать другой компилятор на моем компьютере…", "installCompiler.string": "Помогите мне установить компилятор", "noConfig.string": "Не настраивать компилятор (не рекомендуется)", + "selectCompiler.string": "Выбор компилятора", "confirmCompiler.string": "Да", "selectCompiler.message": "Обнаружен компилятор {0}. Настроить IntelliSense с этим компилятором?", - "selectIntelliSenseConfiguration.string": "Выбрать конфигурацию IntelliSense…", "server.crashed.restart": "Сбой языкового сервера. Перезапуск…", "server.crashed2": "Языковой сервер аварийно завершил работу 5 раз за последние 3 минуты. Он не будет перезапущен.", "loggingLevel.changed": "{0} был изменен на: {1}", @@ -49,5 +49,6 @@ "yes.button": "Да", "no.button": "Нет", "configurations.received": "Получены пользовательские конфигурации:", - "browse.configuration.received": "Получена настраиваемая конфигурация просмотра: {0}" + "browse.configuration.received": "Получена настраиваемая конфигурация просмотра: {0}", + "fallback.clipboard": " Объявление/определение скопировано." } \ No newline at end of file diff --git a/Extension/i18n/rus/src/LanguageServer/references.i18n.json b/Extension/i18n/rus/src/LanguageServer/references.i18n.json index 2ed7cc2ae..009f2fb28 100644 --- a/Extension/i18n/rus/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/rus/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Найти все ссылки", "peek.references": "Показать ссылки", "rename": "Переименовать", + "call.hierarchy": "Иерархия вызовов", "confirmed.reference.upper": "Ссылка подтверждена.", "confirmation.in.progress.upper": "Выполняется подтверждение.", "comment.reference.upper": "Ссылка на комментарий", diff --git a/Extension/i18n/rus/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/rus/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..3c0a00c4d --- /dev/null +++ b/Extension/i18n/rus/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "Конфигурации C/C++" +} \ No newline at end of file diff --git a/Extension/i18n/rus/src/LanguageServer/ui.i18n.json b/Extension/i18n/rus/src/LanguageServer/ui.i18n.json index d48e7226c..acf76c7c7 100644 --- a/Extension/i18n/rus/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/rus/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "running.tagparser.text": "Анализ рабочей области", + "paused.tagparser.text": "Анализ рабочей области: приостановлено", + "complete.tagparser.text": "Анализ завершен", + "initializing.tagparser.text": "Инициализация рабочей области", + "indexing.tagparser.text": "Индексация рабочей области", + "rescan.tagparse.text": "Повторное сканирование рабочей области", "c.cpp.parsing.open.files.tooltip": "Анализ открытых файлов", "click.to.preview": "щелкните для предварительного просмотра результатов", - "updating.intellisense.tooltip": "Обновление IntelliSense", + "updating.intellisense.text": "IntelliSense: обновление", + "idle.intellisense.text": "IntelliSense: готово", + "absent.intellisense.text": "IntelliSense: не настроено", + "running.analysis.text": "Code Analysis: запуск", + "paused.analysis.text": "Code Analysis: приостановлено", + "mode.analysis.prefix": "Режим Code Analysis: ", "c.cpp.configureIntelliSenseStatus.text": "Настройка IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Настройка IntelliSense C/C++", "select.command": "Выберите команду...", + "select.code.analysis.command": "Выберите команду анализа кода...", "c.cpp.configuration.tooltip": "Конфигурация C/C++", "c.cpp.references.statusbar": "Состояние ссылок C/C++", - "c.cpp.intellisense.statusbar": "Состояние IntelliSense C/C++", - "c.cpp.tagparser.statusbar": "Состояние анализатора тегов C/C++", - "discovering.files.tooltip": "Обнаружение файлов", - "running.analysis.tooltip": "Выполняется {0}", - "code.analysis.paused.tooltip": "Выполнение {0} приостановлено", - "running.analysis.processed.tooltip": "Выполняется {0}: {1} / {2} ({3}%)", + "cpptools.status.intellisense": "Состояние IntelliSense C/C++", + "cpptools.status.tagparser": "Состояние анализатора тегов C/C++", + "cpptools.detail.tagparser": "Выполняется инициализация…", + "cpptools.status.codeanalysis": "Состояние Code Analysis C/C++", + "c.cpp.codeanalysis.statusbar.runNow": "Запустить сейчас", + "tagparser.pause.text": "Приостановить", + "tagparser.resume.text": "Возобновить", + "intellisense.select.text": "Выбор компилятора", + "rescan.intellisense.text": "Повторное сканирование", + "rescan.intellisense.tooltip": "Повторное сканирование IntelliSense", + "mode.codeanalysis.status.automatic": "Автоматически", + "mode.codeanalysis.status.manual": "Вручную", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Параметры", + "startup.codeanalysis.status": "Запуск…", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Запустить сейчас", + "running.analysis.processed.tooltip": "Выполняется: {0}/{1} ({2}%)", "select.a.configuration": "Выберите конфигурацию...", "edit.configuration.ui": "Изменить конфигурации (пользовательский интерфейс)", "edit.configuration.json": "Изменить конфигурации (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Выберите папку рабочей области…", "resume.parsing": "Возобновить анализ рабочей области", "pause.parsing": "Приостановить анализ рабочей области", - "cancel.analysis": "Отмена {0}", - "resume.analysis": "Возобновление работы {0}", - "pause.analysis": "Приостановка {0}" + "cancel.analysis": "Отмена", + "resume.analysis": "Возобновить", + "pause.analysis": "Приостановить", + "another.analysis": "Запустить другой...", + "active.analysis": "Запустить Code Analysis в активном файле", + "all.analysis": "Запустить Code Analysis во всех файлах", + "open.analysis": "Запустить Code Analysis в открытых файлах" } \ No newline at end of file diff --git a/Extension/i18n/rus/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/rus/src/LanguageServer/ui_new.i18n.json index c1cd2221e..715f24453 100644 --- a/Extension/i18n/rus/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/rus/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "Настройка IntelliSense", "c.cpp.configureIntelliSenseStatus.cppText": "Настройка IntelliSense C/C++", "select.command": "Выбор команды...", + "select.code.analysis.command": "Выберите команду анализа кода...", "c.cpp.configuration.tooltip": "Конфигурация C/C++", "c.cpp.references.statusbar": "Состояние ссылок C/C++", "cpptools.status.intellisense": "Состояние IntelliSense C/C++", @@ -33,11 +34,12 @@ "intellisense.select.text": "Выбор компилятора", "rescan.intellisense.text": "Повторное сканирование", "rescan.intellisense.tooltip": "Повторное сканирование IntelliSense", - "mode.codeanalysis.status": "Автоматически", + "mode.codeanalysis.status.automatic": "Автоматически", + "mode.codeanalysis.status.manual": "Вручную", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Параметры", "startup.codeanalysis.status": "Запуск…", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Запустить сейчас", - "running.analysis.processed.tooltip": "Выполняется {0}: {1} / {2} ({3}%)", + "running.analysis.processed.tooltip": "Выполняется: {0}/{1} ({2}%)", "select.a.configuration": "Выберите конфигурацию...", "edit.configuration.ui": "Изменить конфигурации (пользовательский интерфейс)", "edit.configuration.json": "Изменить конфигурации (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Выберите папку рабочей области…", "resume.parsing": "Возобновить анализ рабочей области", "pause.parsing": "Приостановить анализ рабочей области", - "cancel.analysis": "Отменить {0}", - "resume.analysis": "Возобновление работы {0}", - "pause.analysis": "Приостановить {0}", - "another.analysis": "Запустить другой {0}...", + "cancel.analysis": "Отмена", + "resume.analysis": "Возобновить", + "pause.analysis": "Приостановить", + "another.analysis": "Запустить другой...", "active.analysis": "Запустить Code Analysis в активном файле", "all.analysis": "Запустить Code Analysis во всех файлах", "open.analysis": "Запустить Code Analysis в открытых файлах" diff --git a/Extension/i18n/rus/src/nativeStrings.i18n.json b/Extension/i18n/rus/src/nativeStrings.i18n.json index 795b2dda5..168ae7bd4 100644 --- a/Extension/i18n/rus/src/nativeStrings.i18n.json +++ b/Extension/i18n/rus/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "Не удалось найти файл \"%s\".", "refactor_create_declaration_definition_failed": "Сбой создания объявления или определения: %s", "refactor_create_default_delete": "Не удалось создать функцию \"%s\". Создание стандартных или удаленных функций не поддерживается.", - "refactor_function_copied_to_clipboard": "Сигнатура функции скопирована в буфер обмена.", "refactor_function_not_created": "Не удалось создать функцию \"%s\".", "refactor_ambiguous_locations": "Не удается найти однозначное расположение для функции \"%s\".", "refactor_file_not_in_project": "Не удалось найти файл \"%s\".", "refactor_not_class_namespace": "Не удалось найти класс или пространство имен \"%s\".", "refactor_operation_unsupported": "Операция не поддерживается для \"%s\".", "unknown_error": "Неизвестная ошибка.", - "run_select_intellisense_configuration": "Выполните команду \"Выбрать конфигурацию IntelliSense…\", чтобы найти системные заголовки." + "run_select_intellisense_configuration": "Выполните команду \"Выбрать конфигурацию IntelliSense…\", чтобы найти системные заголовки.", + "offer_copy_declaration": "Копировать объявление \"{0}\"", + "offer_copy_definition": "Копировать определение \"{0}\"", + "refactor_copy_declaration_definition_failed": "Не удалось скопировать объявление/определение в буфер обмена: %s" } \ No newline at end of file diff --git a/Extension/i18n/trk/Reinstalling the Extension.md.i18n.json b/Extension/i18n/trk/Reinstalling the Extension.md.i18n.json index 9606bd40d..7895a7e3c 100644 --- a/Extension/i18n/trk/Reinstalling the Extension.md.i18n.json +++ b/Extension/i18n/trk/Reinstalling the Extension.md.i18n.json @@ -16,6 +16,6 @@ "reinstall.extension.text5": "Windows üzerinde:", "reinstall.extension.text6": "Linux'ta:", "reinstall.extension.text7": "Ardından, VS Code’daki pazar yeri kullanıcı arabirimi aracılığıyla yeniden yükleyin.", - "reinstall.extension.text8": "Uzantının doğru sürümü VS Code tarafından dağıtılamazsa, sisteminiz için doğru VSIX {0} olabilir ve VS Code’daki market kullanıcı arabirimindeki '...' menüsü altındaki 'VSIX'ten Yükle...' seçeneği kullanılarak yüklenebilir.", + "reinstall.extension.text8": "Uzantının doğru sürümü VS Code tarafından dağıtılamazsa, sisteminiz için doğru VSIX {0} olabilir ve VS Code’daki market kullanıcı arabirimindeki '...' menüsü altındaki `VSIX'ten Yükle...` seçeneği kullanılarak yüklenebilir.", "download.vsix.link.title": "VS Code market web sitesinden indirildi" } \ No newline at end of file diff --git a/Extension/i18n/trk/src/LanguageServer/client.i18n.json b/Extension/i18n/trk/src/LanguageServer/client.i18n.json index cb1d87e85..59093ae78 100644 --- a/Extension/i18n/trk/src/LanguageServer/client.i18n.json +++ b/Extension/i18n/trk/src/LanguageServer/client.i18n.json @@ -14,15 +14,15 @@ "configuration.providers": "yapılandırma sağlayıcıları", "compilers": "derleyiciler", "setCompiler.message": "Yapılandırılmış IntelliSense’niz yok. Kendi yapılandırmalarınızı ayarlamazsanız IntelliSense çalışmayabilir.", - "selectCompiler.string": "IntelliSense Yapılandırmasını Seç...", + "selectIntelliSenseConfiguration.string": "IntelliSense Yapılandırmasını Seç...", "use.provider": "{0} kullan", "use.compileCommands": "{0} kullan", "selectAnotherCompiler.string": "Makinem üzerinde başka bir derleyici seç...", "installCompiler.string": "Derleyici yüklememe yardım et", "noConfig.string": "Derleyiciyle yapılandırma (önerilmez)", + "selectCompiler.string": "Derleyici Seç", "confirmCompiler.string": "Evet", "selectCompiler.message": "{0} derleyicisi bulundu. IntelliSense'i bu derleyiciyle yapılandırmak istiyor musunuz?", - "selectIntelliSenseConfiguration.string": "IntelliSense Yapılandırmasını Seç...", "server.crashed.restart": "Dil sunucusu kilitlendi. Yeniden başlatılıyor...", "server.crashed2": "Dil sunucusu son 3 dakikada 5 kez kilitlendi. Sunucu yeniden başlatılmayacak.", "loggingLevel.changed": "{0} {1} olarak değiştirildi", @@ -49,5 +49,6 @@ "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}", + "fallback.clipboard": " Bildirim/tanım kopyalandı." } \ No newline at end of file diff --git a/Extension/i18n/trk/src/LanguageServer/references.i18n.json b/Extension/i18n/trk/src/LanguageServer/references.i18n.json index 443593cb9..7ad6923dd 100644 --- a/Extension/i18n/trk/src/LanguageServer/references.i18n.json +++ b/Extension/i18n/trk/src/LanguageServer/references.i18n.json @@ -7,6 +7,7 @@ "find.all.references": "Tüm Başvuruları Bul", "peek.references": "Başvurulara Göz Atın", "rename": "Yeniden Adlandır", + "call.hierarchy": "Çağrı Hiyerarşisi", "confirmed.reference.upper": "BAŞVURU ONAYLANDI", "confirmation.in.progress.upper": "Onay işlemi devam ediyor", "comment.reference.upper": "AÇIKLAMA BAŞVURUSU", diff --git a/Extension/i18n/trk/src/LanguageServer/settingsPanel.i18n.json b/Extension/i18n/trk/src/LanguageServer/settingsPanel.i18n.json new file mode 100644 index 000000000..f460366ec --- /dev/null +++ b/Extension/i18n/trk/src/LanguageServer/settingsPanel.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "c.cpp.configurations": "C/C++ Yapılandırmaları" +} \ No newline at end of file diff --git a/Extension/i18n/trk/src/LanguageServer/ui.i18n.json b/Extension/i18n/trk/src/LanguageServer/ui.i18n.json index 29ee0636c..2acf1736c 100644 --- a/Extension/i18n/trk/src/LanguageServer/ui.i18n.json +++ b/Extension/i18n/trk/src/LanguageServer/ui.i18n.json @@ -4,20 +4,42 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "c.cpp.parsing.open.files.tooltip": "Açık dosyalar ayrıştırılıyor", + "running.tagparser.text": "Çalışma Alanı Ayrıştırılıyor", + "paused.tagparser.text": "Çalışma Alanı Ayrıştırılıyor: Duraklatıldı", + "complete.tagparser.text": "Ayrıştırma Tamamlandı", + "initializing.tagparser.text": "Çalışma Alanı Başlatılıyor", + "indexing.tagparser.text": "Çalışma Alanı Dizine Ekleniyor", + "rescan.tagparse.text": "Çalışma Alanını Yeniden Tara", + "c.cpp.parsing.open.files.tooltip": "Açık Dosyalar Ayrıştırılıyor", "click.to.preview": "sonuçların önizlemesini görüntülemek için tıklayın", - "updating.intellisense.tooltip": "IntelliSense güncelleştiriliyor", + "updating.intellisense.text": "IntelliSense: Güncelleştiriliyor", + "idle.intellisense.text": "IntelliSense: Hazır", + "absent.intellisense.text": "IntelliSense: Yapılandırılmadı", + "running.analysis.text": "Code Analysis: Çalışıyor", + "paused.analysis.text": "Code Analysis: Duraklatıldı", + "mode.analysis.prefix": "Code Analysis Modu: ", "c.cpp.configureIntelliSenseStatus.text": "IntelliSense'i Yapılandır", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ IntelliSense'i Yapılandır", "select.command": "Komut seç...", + "select.code.analysis.command": "Kod analizi komutu seçin...", "c.cpp.configuration.tooltip": "C/C++ Yapılandırması", "c.cpp.references.statusbar": "C/C++ Başvuruları Durumu", - "c.cpp.intellisense.statusbar": "C/C++ IntelliSense Durumu", - "c.cpp.tagparser.statusbar": "C/C++ Etiket Ayrıştırıcısı Durumu", - "discovering.files.tooltip": "Dosyalar bulunuyor", - "running.analysis.tooltip": "{0} çalıştırılıyor", - "code.analysis.paused.tooltip": "{0} durduruldu", - "running.analysis.processed.tooltip": "{0} Çalışıyor: {1} / {2} (%{3})", + "cpptools.status.intellisense": "C/C++ IntelliSense Durumu", + "cpptools.status.tagparser": "C/C++ Etiket Ayrıştırıcısı Durumu", + "cpptools.detail.tagparser": "Başlatılıyor...", + "cpptools.status.codeanalysis": "C/C++ Code Analysis Durumu", + "c.cpp.codeanalysis.statusbar.runNow": "Şimdi Çalıştır", + "tagparser.pause.text": "Duraklat", + "tagparser.resume.text": "Sürdür", + "intellisense.select.text": "Derleyici seçin", + "rescan.intellisense.text": "Yeniden tara", + "rescan.intellisense.tooltip": "Rescan IntelliSense", + "mode.codeanalysis.status.automatic": "Otomatik", + "mode.codeanalysis.status.manual": "El ile", + "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Seçenekler", + "startup.codeanalysis.status": "Başlatılıyor...", + "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Şimdi Çalıştır", + "running.analysis.processed.tooltip": "Çalışıyor: {0}/{1} (%{2})", "select.a.configuration": "Yapılandırma Seçin...", "edit.configuration.ui": "Yapılandırmaları Düzenle (UI)", "edit.configuration.json": "Yapılandırmaları Düzenle (JSON)", @@ -29,7 +51,11 @@ "select.workspace": "Çalışma alanı klasörü seçin...", "resume.parsing": "Çalışma Alanı Ayrıştırmasını Sürdür", "pause.parsing": "Çalışma Alanı Ayrıştırmasını Duraklat", - "cancel.analysis": "{0} işlemini iptal et", - "resume.analysis": "{0} işlemini sürdür", - "pause.analysis": "{0} işlemini duraklat" + "cancel.analysis": "İptal", + "resume.analysis": "Sürdür", + "pause.analysis": "Duraklat", + "another.analysis": "Başkasını Başlat...", + "active.analysis": "Aktif Dosyada Code Analysis’i Çalıştır", + "all.analysis": "Tüm Dosyalarda Code Analysis’i Çalıştır", + "open.analysis": "Açık Dosyalarda Code Analysis’i Çalıştır" } \ No newline at end of file diff --git a/Extension/i18n/trk/src/LanguageServer/ui_new.i18n.json b/Extension/i18n/trk/src/LanguageServer/ui_new.i18n.json index f4a1eb47a..e1c79b7f2 100644 --- a/Extension/i18n/trk/src/LanguageServer/ui_new.i18n.json +++ b/Extension/i18n/trk/src/LanguageServer/ui_new.i18n.json @@ -21,6 +21,7 @@ "c.cpp.configureIntelliSenseStatus.text": "IntelliSense'i Yapılandır", "c.cpp.configureIntelliSenseStatus.cppText": "C/C++ IntelliSense'i Yapılandır", "select.command": "Komut seçin...", + "select.code.analysis.command": "Kod analizi komutu seçin...", "c.cpp.configuration.tooltip": "C/C++ Yapılandırması", "c.cpp.references.statusbar": "C/C++ Başvuruları Durumu", "cpptools.status.intellisense": "C/C++ IntelliSense Durumu", @@ -33,11 +34,12 @@ "intellisense.select.text": "Derleyici seçin", "rescan.intellisense.text": "Yeniden tara", "rescan.intellisense.tooltip": "Rescan IntelliSense", - "mode.codeanalysis.status": "Otomatik", + "mode.codeanalysis.status.automatic": "Otomatik", + "mode.codeanalysis.status.manual": "El ile", "c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions": "Seçenekler", "startup.codeanalysis.status": "Başlatılıyor...", "c.cpp.codeanalysis.statusbar.showRunNowOptions": "Şimdi Çalıştır", - "running.analysis.processed.tooltip": "{0} Çalışıyor: {1} / {2} (%{3})", + "running.analysis.processed.tooltip": "Çalışıyor: {0}/{1} (%{2})", "select.a.configuration": "Yapılandırma Seçin...", "edit.configuration.ui": "Yapılandırmaları Düzenle (UI)", "edit.configuration.json": "Yapılandırmaları Düzenle (JSON)", @@ -49,10 +51,10 @@ "select.workspace": "Çalışma alanı klasörü seçin...", "resume.parsing": "Çalışma Alanı Ayrıştırmasını Sürdür", "pause.parsing": "Çalışma Alanı Ayrıştırmasını Duraklat", - "cancel.analysis": "{0} işlemini iptal et", - "resume.analysis": "{0} işlemini sürdür", - "pause.analysis": "{0} işlemini duraklat", - "another.analysis": "Başka Bir {0} başlat...", + "cancel.analysis": "İptal", + "resume.analysis": "Sürdür", + "pause.analysis": "Duraklat", + "another.analysis": "Başkasını Başlat...", "active.analysis": "Aktif Dosyada Code Analysis’i Çalıştır", "all.analysis": "Tüm Dosyalarda Code Analysis’i Çalıştır", "open.analysis": "Açık Dosyalarda Code Analysis’i Çalıştır" diff --git a/Extension/i18n/trk/src/nativeStrings.i18n.json b/Extension/i18n/trk/src/nativeStrings.i18n.json index 19b03a3f6..391243569 100644 --- a/Extension/i18n/trk/src/nativeStrings.i18n.json +++ b/Extension/i18n/trk/src/nativeStrings.i18n.json @@ -287,12 +287,14 @@ "e_cm_file_not_in_project": "'%s' dosyası bulunamadı.", "refactor_create_declaration_definition_failed": "Bildirim/Tanım oluşturulamadı: %s", "refactor_create_default_delete": "'%s' işlevi oluşturulamıyor. Varsayılan olarak ayarlanmış veya silinmiş işlevlerin oluşturulması desteklenmiyor.", - "refactor_function_copied_to_clipboard": "İşlev imzası, panoya kopyalandı.", "refactor_function_not_created": "'%s' işlevi oluşturulamıyor.", "refactor_ambiguous_locations": "'%s' işlevi için açık konum bulunamıyor.", "refactor_file_not_in_project": "'%s' dosyası bulunamadı.", "refactor_not_class_namespace": "Sınıf veya ad alanı '%s' bulunamadı.", "refactor_operation_unsupported": "İşlem '%s' için desteklenmiyor.", "unknown_error": "Bilinmeyen hata.", - "run_select_intellisense_configuration": "Lütfen sistem başlıklarınızı bulmak için 'IntelliSense Yapılandırmasını Seç...' komutunu çalıştırın." + "run_select_intellisense_configuration": "Lütfen sistem başlıklarınızı bulmak için 'IntelliSense Yapılandırmasını Seç...' komutunu çalıştırın.", + "offer_copy_declaration": "'{0}' bildirimini kopyala", + "offer_copy_definition": "'{0}' tanımını kopyala", + "refactor_copy_declaration_definition_failed": "Bildirim / Tanım panoya kopyalanamadı: %s" } \ No newline at end of file diff --git a/Extension/package.json b/Extension/package.json index b1953b6d0..95ea7bc9b 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.15.4-main", + "version": "1.16.2-main", "publisher": "ms-vscode", "icon": "LanguageCCPP_color_128x.png", "readme": "README.md", @@ -733,7 +733,6 @@ }, "C_Cpp.default.dotConfig": { "type": "string", - "default": null, "markdownDescription": "%c_cpp.configuration.default.dotConfig.markdownDescription%", "scope": "resource" }, @@ -4231,6 +4230,11 @@ "description": "%c_cpp.debuggers.miDebuggerPath.description%", "default": "/usr/bin/gdb" }, + "miDebuggerArgs": { + "type": "string", + "description": "%c_cpp.debuggers.miDebuggerArgs.description%", + "default": "" + }, "miDebuggerServerAddress": { "type": "string", "description": "%c_cpp.debuggers.miDebuggerServerAddress.description%", @@ -6009,9 +6013,7 @@ "integrationTests": "tsc -p test.tsconfig.json && node ./out/test/integrationTests/languageServer/runTest.js", "intelliSenseFeaturesTests": "tsc -p test.tsconfig.json && node ./out/test/integrationTests/IntelliSenseFeatures/runTest.js", "import-edge-strings": "node ./import_edge_strings.js", - "download-api": "vscode-dts dev", - "postdownload-api": "vscode-dts master", - "postinstall": "npm run download-api" + "postinstall": "npx vscode-dts dev && npx vscode-dts main" }, "devDependencies": { "@octokit/rest": "^18.12.0", @@ -6030,6 +6032,7 @@ "@typescript-eslint/eslint-plugin-tslint": "^4.31.1", "@typescript-eslint/parser": "^4.31.1", "@vscode/test-electron": "^1.6.1", + "@vscode/dts": "^0.4.0", "async-child-process": "^1.1.1", "await-notify": "^1.0.1", "eslint": "^7.32.0", @@ -6054,7 +6057,6 @@ "typescript": "^4.4.3", "vscode-debugadapter": "^1.35.0", "vscode-debugprotocol": "^1.35.0", - "vscode-dts": "^0.3.2", "vscode-nls-dev": "^4.0.0-next.1", "webpack": "^5.76.0", "webpack-cli": "^5.0.1", @@ -6104,4 +6106,4 @@ "yargs-parser": "^15.0.1", "y18n": "^5.0.5" } -} +} \ No newline at end of file diff --git a/Extension/src/Debugger/configurationProvider.ts b/Extension/src/Debugger/configurationProvider.ts index ba8844d28..8208f5428 100644 --- a/Extension/src/Debugger/configurationProvider.ts +++ b/Extension/src/Debugger/configurationProvider.ts @@ -64,6 +64,11 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv this.type = type; } + public static ClearDetectedBuildTasks(): void { + DebugConfigurationProvider.detectedCppBuildTasks = []; + DebugConfigurationProvider.detectedCBuildTasks = []; + } + /** * Returns a list of initial debug configurations based on contextual information, e.g. package.json or folder. * resolveDebugConfiguration will be automatically called after this function. @@ -429,7 +434,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv if (newConfig.type === DebuggerType.cppdbg) { newConfig.externalConsole = false; } else { - newConfig.console = "externalTerminal"; + newConfig.console = "integratedTerminal"; } const isWindows: boolean = platformInfo.platform === 'win32'; // Extract the .exe path from the defined task. diff --git a/Extension/src/LanguageServer/Providers/callHierarchyProvider.ts b/Extension/src/LanguageServer/Providers/callHierarchyProvider.ts new file mode 100644 index 000000000..4ddf78541 --- /dev/null +++ b/Extension/src/LanguageServer/Providers/callHierarchyProvider.ts @@ -0,0 +1,301 @@ +/* -------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All Rights Reserved. + * See 'LICENSE' in the project root for license information. + * ------------------------------------------------------------------------------------------ */ +import * as vscode from 'vscode'; +import * as path from 'path'; +import * as Telemetry from '../../telemetry'; +import { DefaultClient, workspaceReferences } from '../client'; +import { processDelayedDidOpen } from '../extension'; +import { CancellationSender } from '../references'; +import { Position, Range, RequestType, TextDocumentIdentifier } from 'vscode-languageclient'; +import { makeVscodeRange } from '../utils'; + +interface CallHierarchyItem { + /** + * The name of this item or symbol. + */ + name: string; + + /** + * The kind of this item. + */ + kind: vscode.SymbolKind; + + /** + * More detail for this item, e.g. the scope or class of a function. + */ + detail: string; + + /** + * The resource identifier of this item. + */ + uri: string; + + /** + * The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code. + */ + range: Range; + + /** + * The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function. + * Must be contained by the `CallHierarchyItem.range`. + */ + selectionRange: Range; +} + +export interface CallHierarchyParams { + textDocument: TextDocumentIdentifier; + position: Position; +} + +interface CallHierarchyItemResult { + item?: CallHierarchyItem; + + /** + * If a request is cancelled, `succeeded` will be undefined to indicate no result was returned. + * Therefore, object is not defined as optional on the language server. + */ + succeeded: boolean; +} + +interface CallHierarchyCallsItem { + /** + * For CallHierarchyIncomingCall or calls to, this is the item that makes the call. + * For CallHierarchyOutgoingCall or calls from, this is the item that is called. + */ + item: CallHierarchyItem; + + /** + * For CallHierarchyIncomingCall or calls to, this is the range at which the call appears. + * For CallHierarchyOutgoingCall or calls from, this is the range at which this item is called. + */ + fromRanges: Range[]; +} + +export interface CallHierarchyCallsItemResult { + calls: CallHierarchyCallsItem[]; +} + +enum CallHierarchyRequestStatus { + Unknown, + Succeeded, + Canceled, + CanceledByUser, + Failed +} + +const CallHierarchyItemRequest: RequestType = + new RequestType('cpptools/prepareCallHierarchy'); + +const CallHierarchyCallsToRequest: RequestType = + new RequestType('cpptools/callHierarchyCallsTo'); + +const CallHierarchyCallsFromRequest: RequestType = + new RequestType('cpptools/callHierarchyCallsFrom'); + +export class CallHierarchyProvider implements vscode.CallHierarchyProvider { + // Indicates whether a request is from an entry root node (e.g. top function in the call tree). + private isEntryRootNodeTelemetry: boolean = false; + private client: DefaultClient; + + constructor(client: DefaultClient) { + this.client = client; + } + + public async prepareCallHierarchy(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): + Promise { + await this.client.requestWhenReady(() => processDelayedDidOpen(document)); + workspaceReferences.cancelCurrentReferenceRequest(CancellationSender.NewRequest); + workspaceReferences.clearViews(); + + const range: vscode.Range | undefined = document.getWordRangeAtPosition(position); + if (range === undefined) { + return undefined; + } + + // Listen to a cancellation for this request. When this request is cancelled, + // use a local cancellation source to explicitly cancel a token. + const cancelSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource(); + const cancellationTokenListener: vscode.Disposable = token.onCancellationRequested(() => { + cancelSource.cancel(); + }); + const requestCanceledListener: vscode.Disposable = workspaceReferences.onCancellationRequested(sender => { + cancelSource.cancel(); + }); + + const params: CallHierarchyParams = { + textDocument: { uri: document.uri.toString() }, + position: Position.create(position.line, position.character) + }; + const response: CallHierarchyItemResult = await this.client.languageClient.sendRequest(CallHierarchyItemRequest, params, cancelSource.token); + + cancellationTokenListener.dispose(); + requestCanceledListener.dispose(); + + if (cancelSource.token.isCancellationRequested || response.succeeded === undefined) { + // Return undefined instead of vscode.CancellationError to avoid the following error message from VS Code: + // "MISSING provider." + // TODO: per issue https://github.com/microsoft/vscode/issues/169698 vscode.CancellationError is expected, + // so when VS Code fixes the error use vscode.CancellationError again. + return undefined; + } else if (response.item === undefined) { + return undefined; + } + + this.isEntryRootNodeTelemetry = true; + return this.makeVscodeCallHierarchyItem(response.item); + } + + public async provideCallHierarchyIncomingCalls(item: vscode.CallHierarchyItem, token: vscode.CancellationToken): + Promise { + await this.client.awaitUntilLanguageClientReady(); + workspaceReferences.cancelCurrentReferenceRequest(CancellationSender.NewRequest); + + const CallHierarchyCallsToEvent: string = "CallHierarchyCallsTo"; + if (item === undefined) { + this.logTelemetry(CallHierarchyCallsToEvent, CallHierarchyRequestStatus.Failed); + return undefined; + } + + // Listen to a cancellation for this request. When this request is cancelled, + // use a local cancellation source to explicitly cancel a token. + let requestCanceled: CancellationSender | undefined; + const cancelSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource(); + const cancellationTokenListener: vscode.Disposable = token.onCancellationRequested(() => { + requestCanceled = CancellationSender.ProviderToken; + cancelSource.cancel(); + }); + const requestCanceledListener: vscode.Disposable = workspaceReferences.onCancellationRequested(sender => { + requestCanceled = sender; + cancelSource.cancel(); + }); + + // Send the request to the language server. + let result: vscode.CallHierarchyIncomingCall[] | undefined; + const params: CallHierarchyParams = { + textDocument: { uri: item.uri.toString() }, + position: Position.create(item.range.start.line, item.range.start.character) + }; + const response: CallHierarchyCallsItemResult = await this.client.languageClient.sendRequest(CallHierarchyCallsToRequest, params, cancelSource.token); + + // Reset anything that can be cleared before processing the result. + const progressBarDuration: number | undefined = workspaceReferences.getCallHierarchyProgressBarDuration(); + workspaceReferences.resetProgressBar(); + workspaceReferences.resetReferences(); + cancellationTokenListener.dispose(); + requestCanceledListener.dispose(); + + // Process the result. + if (cancelSource.token.isCancellationRequested || response.calls === undefined || requestCanceled !== undefined) { + const requestStatus: CallHierarchyRequestStatus = requestCanceled === CancellationSender.User ? + CallHierarchyRequestStatus.CanceledByUser : CallHierarchyRequestStatus.Canceled; + this.logTelemetry(CallHierarchyCallsToEvent, requestStatus, progressBarDuration); + throw new vscode.CancellationError(); + } else if (response.calls.length !== 0) { + result = this.createIncomingCalls(response.calls); + } + + this.logTelemetry(CallHierarchyCallsToEvent, CallHierarchyRequestStatus.Succeeded, progressBarDuration); + return result; + } + + public async provideCallHierarchyOutgoingCalls(item: vscode.CallHierarchyItem, token: vscode.CancellationToken): + Promise { + const CallHierarchyCallsFromEvent: string = "CallHierarchyCallsFrom"; + if (item === undefined) { + this.logTelemetry(CallHierarchyCallsFromEvent, CallHierarchyRequestStatus.Failed); + return undefined; + } + + await this.client.awaitUntilLanguageClientReady(); + + let result: vscode.CallHierarchyOutgoingCall[] | undefined; + const params: CallHierarchyParams = { + textDocument: { uri: item.uri.toString() }, + position: Position.create(item.range.start.line, item.range.start.character) + }; + const response: CallHierarchyCallsItemResult = await this.client.languageClient.sendRequest(CallHierarchyCallsFromRequest, params, token); + + if (token.isCancellationRequested || response.calls === undefined) { + this.logTelemetry(CallHierarchyCallsFromEvent, CallHierarchyRequestStatus.Canceled); + throw new vscode.CancellationError(); + } else if (response.calls.length !== 0) { + result = this.createOutgoingCalls(response.calls); + } + + this.logTelemetry(CallHierarchyCallsFromEvent, CallHierarchyRequestStatus.Succeeded); + return result; + } + + private makeVscodeCallHierarchyItem(item: CallHierarchyItem): vscode.CallHierarchyItem { + const containerDetail: string = (item.detail !== "") ? `${item.detail} - ` : ""; + const fileDetail: string = `${path.basename(item.uri)} (${path.dirname(item.uri)})`; + return new vscode.CallHierarchyItem( + item.kind, item.name, containerDetail + fileDetail, + vscode.Uri.file(item.uri), + makeVscodeRange(item.range), + makeVscodeRange(item.selectionRange)); + } + + private createIncomingCalls(calls: CallHierarchyCallsItem[]): vscode.CallHierarchyIncomingCall[] { + const result: vscode.CallHierarchyIncomingCall[] = []; + + for (const call of calls) { + const item: vscode.CallHierarchyItem = this.makeVscodeCallHierarchyItem(call.item); + const ranges: vscode.Range[] = []; + call.fromRanges.forEach(r => { + ranges.push(makeVscodeRange(r)); + }); + + const incomingCall: vscode.CallHierarchyIncomingCall = + new vscode.CallHierarchyIncomingCall(item, ranges); + result.push(incomingCall); + } + + return result; + } + + private createOutgoingCalls(calls: CallHierarchyCallsItem[]): vscode.CallHierarchyOutgoingCall[] { + const result: vscode.CallHierarchyOutgoingCall[] = []; + + for (const call of calls) { + const item: vscode.CallHierarchyItem = this.makeVscodeCallHierarchyItem(call.item); + const ranges: vscode.Range[] = []; + call.fromRanges.forEach(r => { + ranges.push(makeVscodeRange(r)); + }); + + const outgoingCall: vscode.CallHierarchyOutgoingCall = + new vscode.CallHierarchyOutgoingCall(item, ranges); + result.push(outgoingCall); + } + + return result; + } + + private logTelemetry(eventName: string, requestStatus: CallHierarchyRequestStatus, progressBarDuration?: number): void { + const properties: { [key: string]: string } = {}; + const metrics: { [key: string]: number } = {}; + + let status: string = "Unknown"; + switch (requestStatus) { + case CallHierarchyRequestStatus.Unknown: status = "Unknown"; break; + case CallHierarchyRequestStatus.Succeeded: status = "Succeeded"; break; + case CallHierarchyRequestStatus.Canceled: status = "Canceled"; break; + case CallHierarchyRequestStatus.CanceledByUser: status = "CanceledByUser"; break; + case CallHierarchyRequestStatus.Failed: status = "Failed"; break; + } + + properties["Status"] = status; + metrics["FirstRequest"] = this.isEntryRootNodeTelemetry ? 1 : 0; + if (progressBarDuration) { + metrics["ProgressBarDuration"] = progressBarDuration; + } + + Telemetry.logLanguageServerEvent(eventName, properties, metrics); + + // Reset telemetry + this.isEntryRootNodeTelemetry = false; + } +} diff --git a/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts b/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts index 403c080d6..309acc054 100644 --- a/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts +++ b/Extension/src/LanguageServer/Providers/findAllReferencesProvider.ts @@ -3,106 +3,67 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ import * as vscode from 'vscode'; -import { DefaultClient, workspaceReferences, FindAllReferencesParams, ReferencesCancellationState, RequestReferencesNotification, CancelReferencesNotification } from '../client'; -import { Position } from 'vscode-languageclient'; -import * as refs from '../references'; +import { DefaultClient, workspaceReferences } from '../client'; +import { Position, RequestType } from 'vscode-languageclient'; +import { ReferencesParams, ReferencesResult, ReferenceType, ReferenceInfo, CancellationSender } from '../references'; + +const FindAllReferencesRequest: RequestType = + new RequestType('cpptools/findAllReferences'); export class FindAllReferencesProvider implements vscode.ReferenceProvider { private client: DefaultClient; + constructor(client: DefaultClient) { this.client = client; } - public async provideReferences(document: vscode.TextDocument, position: vscode.Position, context: vscode.ReferenceContext, token: vscode.CancellationToken): Promise { - return new Promise((resolve, reject) => { - const callback: () => Promise = async () => { - const params: FindAllReferencesParams = { - position: Position.create(position.line, position.character), - textDocument: this.client.languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document) - }; - DefaultClient.referencesParams = params; - 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); - } - if (DefaultClient.referencesPendingCancellations.length > 0) { - while (DefaultClient.referencesPendingCancellations.length > 1) { - const pendingCancel: ReferencesCancellationState = DefaultClient.referencesPendingCancellations[0]; - DefaultClient.referencesPendingCancellations.pop(); - pendingCancel.reject(); - } - 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 { - // This is a preview (2nd or later preview) - workspaceReferences.referencesRequestPending = true; - workspaceReferences.setResultsCallback(resultCallback); - this.client.languageClient.sendNotification(RequestReferencesNotification); - } - } - token.onCancellationRequested(e => { - if (params === DefaultClient.referencesParams) { - this.client.cancelReferences(); - } - }); - }; - if (DefaultClient.referencesRequestPending || (workspaceReferences.symbolSearchInProgress && !workspaceReferences.referencesRefreshPending)) { - const cancelling: boolean = DefaultClient.referencesPendingCancellations.length > 0; - DefaultClient.referencesPendingCancellations.push({ - reject: () => { - // Complete with nothing instead of rejecting, to avoid an error message from VS Code - const locations: vscode.Location[] = []; - resolve(locations); - }, callback - }); - if (!cancelling) { - DefaultClient.renamePending = false; - workspaceReferences.referencesCanceled = true; - if (!DefaultClient.referencesRequestPending) { - workspaceReferences.referencesCanceledWhilePreviewing = true; - } - this.client.languageClient.sendNotification(CancelReferencesNotification); + public async provideReferences(document: vscode.TextDocument, position: vscode.Position, context: vscode.ReferenceContext, token: vscode.CancellationToken): + Promise { + await this.client.awaitUntilLanguageClientReady(); + workspaceReferences.cancelCurrentReferenceRequest(CancellationSender.NewRequest); + + // Listen to a cancellation for this request. When this request is cancelled, + // use a local cancellation source to explicitly cancel a token. + const cancelSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource(); + const cancellationTokenListener: vscode.Disposable = token.onCancellationRequested(() => { cancelSource.cancel(); }); + const requestCanceledListener: vscode.Disposable = workspaceReferences.onCancellationRequested(sender => { cancelSource.cancel(); }); + + // Send the request to the language server. + const locationsResult: vscode.Location[] = []; + const params: ReferencesParams = { + newName: "", + position: Position.create(position.line, position.character), + textDocument: { uri: document.uri.toString() } + }; + const response: ReferencesResult = await this.client.languageClient.sendRequest(FindAllReferencesRequest, params, cancelSource.token); + + // Reset anything that can be cleared before processing the result. + // Note: ReferencesManager.resetReferences is called in ReferencesManager.showResultsInPanelView + workspaceReferences.resetProgressBar(); + cancellationTokenListener.dispose(); + requestCanceledListener.dispose(); + + // Process the result. + if (cancelSource.token.isCancellationRequested || response.referenceInfos === null || response.isCanceled) { + // Return undefined instead of vscode.CancellationError to avoid the following error message from VS Code: + // "Cannot destructure property 'range' of 'e.location' as it is undefined." + // TODO: per issue https://github.com/microsoft/vscode/issues/169698 + // vscode.CancellationError is expected, so when VS Code fixes the error use vscode.CancellationError again. + return undefined; + } else if (response.referenceInfos.length !== 0) { + response.referenceInfos.forEach((referenceInfo: ReferenceInfo) => { + if (referenceInfo.type === 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 + response.text.length); + locationsResult.push(new vscode.Location(uri, range)); } - } else { - callback(); - } - }); + }); + + // Display other reference types in panel or channel view. + workspaceReferences.showResultsInPanelView(response); + } + + return locationsResult; } } diff --git a/Extension/src/LanguageServer/Providers/renameProvider.ts b/Extension/src/LanguageServer/Providers/renameProvider.ts index 661531b10..250eac1d9 100644 --- a/Extension/src/LanguageServer/Providers/renameProvider.ts +++ b/Extension/src/LanguageServer/Providers/renameProvider.ts @@ -3,118 +3,77 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ import * as vscode from 'vscode'; -import { DefaultClient, workspaceReferences, ReferencesCancellationState, RenameParams, CancelReferencesNotification } from '../client'; -import * as refs from '../references'; +import { DefaultClient, workspaceReferences } from '../client'; +import { ReferencesParams, ReferencesResult, ReferenceType, getReferenceTagString, getReferenceItemIconPath, CancellationSender } from '../references'; import { CppSettings } from '../settings'; -import { Position } from 'vscode-languageclient'; +import { Position, RequestType } from 'vscode-languageclient'; import * as nls from 'vscode-nls'; import * as util from '../../common'; nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); +const RenameRequest: RequestType = + new RequestType('cpptools/rename'); + export class RenameProvider implements vscode.RenameProvider { private client: DefaultClient; + constructor(client: DefaultClient) { this.client = client; } - public async provideRenameEdits(document: vscode.TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken): Promise { + + public async provideRenameEdits(document: vscode.TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken): + Promise { + await this.client.awaitUntilLanguageClientReady(); + workspaceReferences.cancelCurrentReferenceRequest(CancellationSender.NewRequest); + const settings: CppSettings = new CppSettings(); 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 workspaceEdit; + return undefined; } - // Normally, VS Code considers rename to be an atomic operation. - // If the user clicks anywhere in the document, it attempts to cancel it. - // Because that prevents our rename UI, we ignore cancellation requests. - // VS Code will attempt to issue new rename requests while another is still active. - // When we receive another rename request, cancel the one that is in progress. - DefaultClient.renamePending = true; - ++DefaultClient.renameRequestsPending; - return new Promise((resolve, reject) => { - 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; - 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; - } - // 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.reject(); - } - 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); - } - } - } - 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); - }; + // Listen to a cancellation for this request. When this request is cancelled, + // use a local cancellation source to explicitly cancel a token. + // Don't listen to the token from the provider, as it will cancel when the cursor is moved to a different position. + const cancelSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource(); + const requestCanceledListener: vscode.Disposable = workspaceReferences.onCancellationRequested(sender => { cancelSource.cancel(); }); - if (DefaultClient.referencesRequestPending || workspaceReferences.symbolSearchInProgress) { - const cancelling: boolean = DefaultClient.referencesPendingCancellations.length > 0; - DefaultClient.referencesPendingCancellations.push({ - reject: () => { - --DefaultClient.renameRequestsPending; - // Complete with nothing instead of rejecting, to avoid an error message from VS Code - const workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); - resolve(workspaceEdit); - }, callback - }); - if (!cancelling) { - workspaceReferences.referencesCanceled = true; - if (!DefaultClient.referencesRequestPending) { - workspaceReferences.referencesCanceledWhilePreviewing = true; - } - this.client.languageClient.sendNotification(CancelReferencesNotification); - } - } else { - callback(); + // Send the request to the language server. + workspaceReferences.startRename(); + const workspaceEditResult: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); + const params: ReferencesParams = { + newName: newName, + position: Position.create(position.line, position.character), + textDocument: { uri: document.uri.toString() } + }; + const response: ReferencesResult = await this.client.languageClient.sendRequest(RenameRequest, params, cancelSource.token); + + // Reset anything that can be cleared before processing the result. + workspaceReferences.resetProgressBar(); + workspaceReferences.resetReferences(); + requestCanceledListener.dispose(); + + // Process the result. + if (cancelSource.token.isCancellationRequested || response.referenceInfos === null || response.isCanceled) { + throw new vscode.CancellationError(); + } else if (response.referenceInfos.length === 0) { + vscode.window.showErrorMessage(localize("unable.to.locate.selected.symbol", "A definition for the selected symbol could not be located.")); + } else { + for (const reference of response.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 + response.text.length); + const metadata: vscode.WorkspaceEditEntryMetadata = { + needsConfirmation: reference.type !== ReferenceType.Confirmed, + label: getReferenceTagString(reference.type, false, true), + iconPath: getReferenceItemIconPath(reference.type, false) + }; + workspaceEditResult.replace(uri, range, newName, metadata); } - }); + } + + return workspaceEditResult; } } diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index a34729a61..1123ec87a 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -17,6 +17,7 @@ import { DocumentSymbolProvider } from './Providers/documentSymbolProvider'; import { WorkspaceSymbolProvider } from './Providers/workspaceSymbolProvider'; import { RenameProvider } from './Providers/renameProvider'; import { FindAllReferencesProvider } from './Providers/findAllReferencesProvider'; +import { CallHierarchyProvider } from './Providers/callHierarchyProvider'; import { CodeActionProvider } from './Providers/codeActionProvider'; import { InlayHintsProvider } from './Providers/inlayHintProvider'; // End provider imports @@ -26,14 +27,14 @@ import { LanguageClient, ServerOptions } from 'vscode-languageclient/node'; import { SourceFileConfigurationItem, WorkspaceBrowseConfiguration, SourceFileConfiguration, Version } from 'vscode-cpptools'; import { Status, IntelliSenseStatus } from 'vscode-cpptools/out/testApi'; import { getLocaleId, getLocalizedString, LocalizeStringParams } from './localization'; -import { Location, TextEdit } from './commonTypes'; +import { Location, TextEdit, WorkspaceEdit } from './commonTypes'; import { makeVscodeRange, makeVscodeLocation, handleChangedFromCppToC } from './utils'; import * as util from '../common'; import * as configs from './configurations'; import { CppSettings, getEditorConfigSettings, OtherSettings, SettingsParams, WorkspaceFolderSettingsParams } from './settings'; import * as telemetry from '../telemetry'; import { PersistentState, PersistentFolderState, PersistentWorkspaceState } from './persistentState'; -import { UI, getUI } from './ui'; +import { ConfigurationType, LanguageStatusUI, getUI } from './ui'; import { createProtocolFilter } from './protocolFilter'; import { DataBinding } from './dataBinding'; import minimatch = require("minimatch"); @@ -52,12 +53,13 @@ import { } from './codeAnalysis'; import { DebugProtocolParams, getDiagnosticsChannel, getOutputChannelLogger, logDebugProtocol, Logger, logLocalized, showWarning, ShowWarningParams } from '../logger'; import _ = require('lodash'); +import { DebugConfigurationProvider } from '../Debugger/configurationProvider'; const deepCopy = (obj: any) => _.cloneDeep(obj); nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); -let ui: UI; +let ui: LanguageStatusUI; let timeStamp: number = 0; const configProviderTimeout: number = 2000; let initializedClientCount: number = 0; @@ -68,14 +70,6 @@ export function hasTrustedCompilerPaths(): boolean { return trustedCompilerPaths.length !== 0; } -export function addTrustedCompiler(path: string): void { - // Detect duplicate paths or invalid paths. - if (trustedCompilerPaths.includes(path) || path === null || path === undefined) { - return; - } - trustedCompilerPaths.push(path); -} - // Data shared by all clients. let languageClient: LanguageClient; let firstClientStarted: Promise; @@ -212,7 +206,7 @@ interface ReportStatusNotificationBody extends WorkspaceFolderParams { } interface QueryDefaultCompilerParams { - trustedCompilerPaths: string[]; + newTrustedCompilerPath: string; } interface CppPropertiesParams extends WorkspaceFolderParams { @@ -327,10 +321,13 @@ interface PublishRefactorDiagnosticsParams { export interface CreateDeclarationOrDefinitionParams { uri: string; range: Range; + copyToClipboard: boolean; } export interface CreateDeclarationOrDefinitionResult { - changes: { [key: string]: any[] }; + edit: WorkspaceEdit; + clipboardText?: string; + errorText?: string; } interface ShowMessageWindowParams { @@ -375,17 +372,6 @@ export interface LocalizeSymbolInformation { suffix: LocalizeStringParams; } -export interface RenameParams { - newName: string; - position: Position; - textDocument: TextDocumentIdentifier; -} - -export interface FindAllReferencesParams { - position: Position; - textDocument: TextDocumentIdentifier; -} - export interface FormatParams { uri: string; range: Range; @@ -598,12 +584,9 @@ const CustomConfigurationNotification: NotificationType = new NotificationType('cpptools/didChangeCustomBrowseConfiguration'); const ClearCustomConfigurationsNotification: NotificationType = new NotificationType('cpptools/clearCustomConfigurations'); const ClearCustomBrowseConfigurationNotification: NotificationType = new NotificationType('cpptools/clearCustomBrowseConfiguration'); +const PreviewReferencesNotification: NotificationType = new NotificationType('cpptools/previewReferences'); const RescanFolderNotification: NotificationType = new NotificationType('cpptools/rescanFolder'); -export const RequestReferencesNotification: NotificationType = new NotificationType('cpptools/requestReferences'); -export const CancelReferencesNotification: NotificationType = new NotificationType('cpptools/cancelReferences'); const FinishedRequestCustomConfig: NotificationType = new NotificationType('cpptools/finishedRequestCustomConfig'); -const FindAllReferencesNotification: NotificationType = new NotificationType('cpptools/findAllReferences'); -const RenameNotification: NotificationType = new NotificationType('cpptools/rename'); const DidChangeSettingsNotification: NotificationType = new NotificationType('cpptools/didChangeSettings'); const InitializationNotification: NotificationType = new NotificationType('cpptools/initialize'); @@ -638,14 +621,10 @@ const SetTemporaryTextDocumentLanguageNotification: NotificationType = new NotificationType('cpptools/reportCodeAnalysisProcessed'); const ReportCodeAnalysisTotalNotification: NotificationType = new NotificationType('cpptools/reportCodeAnalysisTotal'); const DoxygenCommentGeneratedNotification: NotificationType = new NotificationType('cpptools/insertDoxygenComment'); +const CanceledReferencesNotification: NotificationType = new NotificationType('cpptools/canceledReferences'); let failureMessageShown: boolean = false; -export interface ReferencesCancellationState { - reject(): void; - callback(): void; -} - class ClientModel { public isInitializingWorkspace: DataBinding; public isIndexingWorkspace: DataBinding; @@ -811,7 +790,7 @@ export interface Client { handleRemoveCodeAnalysisProblems(refreshSquigglesOnSave: boolean, identifiersAndUris: CodeAnalysisDiagnosticIdentifiersAndUri[]): Promise; handleFixCodeAnalysisProblems(workspaceEdit: vscode.WorkspaceEdit, refreshSquigglesOnSave: boolean, identifiersAndUris: CodeAnalysisDiagnosticIdentifiersAndUri[]): Promise; handleDisableAllTypeCodeAnalysisProblems(code: string, identifiersAndUris: CodeAnalysisDiagnosticIdentifiersAndUri[]): Promise; - handleCreateDeclarationOrDefinition(): Promise; + handleCreateDeclarationOrDefinition(copy?: boolean): Promise; onInterval(): void; dispose(): void; addFileAssociations(fileAssociations: string, languageId: string): void; @@ -819,6 +798,7 @@ export interface Client { isInitialized(): boolean; getShowConfigureIntelliSenseButton(): boolean; setShowConfigureIntelliSenseButton(show: boolean): void; + addTrustedCompiler(path: string): Promise; } export function createClient(workspaceFolder?: vscode.WorkspaceFolder): Client { @@ -860,13 +840,6 @@ export class DefaultClient implements Client { private configStateReceived: ConfigStateReceived = { compilers: false, compileCommands: false, configProviders: undefined, timeout: false }; private showConfigureIntelliSenseButton: boolean = false; - public static referencesParams: RenameParams | FindAllReferencesParams | undefined; - public static referencesRequestPending: boolean = false; - public static referencesPendingCancellations: ReferencesCancellationState[] = []; - - public static renameRequestsPending: number = 0; - public static renamePending: boolean = false; - // The "model" that is displayed via the UI (status bar). private model: ClientModel = new ClientModel(); @@ -1069,7 +1042,7 @@ export class DefaultClient implements Client { if (showSecondPrompt) { this.showPrompt(selectIntelliSenseConfig, true, sender); } - ui.ShowConfigureIntelliSenseButton(false, this); + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.CompilerPath, "disablePrompt"); return; } if (index === paths.length - 2) { @@ -1086,6 +1059,7 @@ export class DefaultClient implements Client { return; } } + const showButtonSender: string = "quickPick"; if (index === paths.length - 3) { const result: vscode.Uri[] | undefined = await vscode.window.showOpenDialog(); if (result === undefined || result.length === 0) { @@ -1107,12 +1081,12 @@ export class DefaultClient implements Client { await this.configuration.updateCustomConfigurationProvider(provider.extensionId); this.onCustomConfigurationProviderRegistered(provider); telemetry.logLanguageServerEvent("customConfigurationProvider", { "providerId": provider.extensionId }); - ui.ShowConfigureIntelliSenseButton(false, this); + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.ConfigProvider, showButtonSender); return; } else if (index < compileCommandsIndex) { action = "select compile commands"; this.configuration.setCompileCommands(this.compileCommandsPaths[index - configProvidersIndex - 1]); - ui.ShowConfigureIntelliSenseButton(false, this); + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.CompileCommands, showButtonSender); return; } else { action = "select compiler"; @@ -1121,9 +1095,8 @@ export class DefaultClient implements Client { } } - ui.ShowConfigureIntelliSenseButton(false, this); - addTrustedCompiler(settings.defaultCompilerPath); - compilerDefaults = await this.requestCompiler(trustedCompilerPaths); + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.CompilerPath, showButtonSender); + await this.addTrustedCompiler(settings.defaultCompilerPath); DefaultClient.updateClientConfigurations(); } finally { if (compilersOnly) { @@ -1154,7 +1127,7 @@ export class DefaultClient implements Client { } public async rescanCompilers(sender?: any): Promise { - compilerDefaults = await this.requestCompiler(trustedCompilerPaths); + compilerDefaults = await this.requestCompiler(); DefaultClient.updateClientConfigurations(); if (compilerDefaults.knownCompilers !== undefined && compilerDefaults.knownCompilers.length > 0) { await this.promptSelectCompiler(true, sender); @@ -1174,12 +1147,11 @@ export class DefaultClient implements Client { if (!isCommand && (compilerDefaults.compilerPath !== undefined)) { const value: string | undefined = await vscode.window.showInformationMessage(localize("selectCompiler.message", "The compiler {0} was found. Do you want to configure IntelliSense with this compiler?", compilerDefaults.compilerPath), confirmCompiler, selectCompiler); if (value === confirmCompiler) { - addTrustedCompiler(compilerDefaults.compilerPath); settings.defaultCompilerPath = compilerDefaults.compilerPath; - compilerDefaults = await this.requestCompiler(trustedCompilerPaths); + await this.addTrustedCompiler(settings.defaultCompilerPath); DefaultClient.updateClientConfigurations(); action = "confirm compiler"; - ui.ShowConfigureIntelliSenseButton(false, this); + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.CompilerPath, "promptSelectCompiler"); } else if (value === selectCompiler) { this.handleIntelliSenseConfigurationQuickPick(true, sender, true); action = "show quickpick"; @@ -1209,12 +1181,11 @@ export class DefaultClient implements Client { if (!isCommand && (compilerDefaults.compilerPath !== undefined)) { const value: string | undefined = await vscode.window.showInformationMessage(localize("selectCompiler.message", "The compiler {0} was found. Do you want to configure IntelliSense with this compiler?", compilerDefaults.compilerPath), confirmCompiler, selectCompiler); if (value === confirmCompiler) { - addTrustedCompiler(compilerDefaults.compilerPath); settings.defaultCompilerPath = compilerDefaults.compilerPath; - compilerDefaults = await this.requestCompiler(trustedCompilerPaths); + await this.addTrustedCompiler(settings.defaultCompilerPath); DefaultClient.updateClientConfigurations(); action = "confirm compiler"; - ui.ShowConfigureIntelliSenseButton(false, this); + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.CompilerPath, "promptSelectIntelliSense"); } else if (value === selectCompiler) { this.handleIntelliSenseConfigurationQuickPick(true, sender); action = "show quickpick"; @@ -1343,6 +1314,7 @@ export class DefaultClient implements Client { this.disposables.push(vscode.languages.registerWorkspaceSymbolProvider(new WorkspaceSymbolProvider(this))); this.disposables.push(vscode.languages.registerDocumentSymbolProvider(util.documentSelector, new DocumentSymbolProvider(), undefined)); this.disposables.push(vscode.languages.registerCodeActionsProvider(util.documentSelector, new CodeActionProvider(this), undefined)); + this.disposables.push(vscode.languages.registerCallHierarchyProvider(util.documentSelector, new CallHierarchyProvider(this))); // Because formatting and codeFolding can vary per folder, we need to register these providers once // and leave them registered. The decision of whether to provide results needs to be made on a per folder basis, // within the providers themselves. @@ -1378,7 +1350,7 @@ 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. - compilerDefaults = await this.requestCompiler(trustedCompilerPaths); + compilerDefaults = await this.requestCompiler(); DefaultClient.updateClientConfigurations(); clients.forEach(client => { if (client instanceof DefaultClient) { @@ -1411,14 +1383,6 @@ export class DefaultClient implements Client { } } - public sendFindAllReferencesNotification(params: FindAllReferencesParams): void { - this.languageClient.sendNotification(FindAllReferencesNotification, params); - } - - public sendRenameNotification(params: RenameParams): void { - this.languageClient.sendNotification(RenameNotification, params); - } - private getWorkspaceFolderSettings(workspaceFolderUri: vscode.Uri | undefined, settings: CppSettings, otherSettings: OtherSettings): WorkspaceFolderSettingsParams { const result: WorkspaceFolderSettingsParams = { uri: workspaceFolderUri?.toString(), @@ -1438,7 +1402,7 @@ export class DefaultClient implements Client { defaultSystemIncludePath: settings.defaultSystemIncludePath, cppFilesExclude: settings.filesExclude, clangFormatPath: util.resolveVariables(settings.clangFormatPath, this.AdditionalEnvironment), - clangFormatStyle: util.resolveVariables(settings.clangFormatStyle, this.AdditionalEnvironment), + clangFormatStyle: settings.clangFormatStyle ? util.resolveVariables(settings.clangFormatStyle, this.AdditionalEnvironment) : undefined, clangFormatFallbackStyle: settings.clangFormatFallbackStyle, clangFormatSortIncludes: settings.clangFormatSortIncludes, codeAnalysisRunAutomatically: settings.codeAnalysisRunAutomatically, @@ -1723,8 +1687,13 @@ export class DefaultClient implements Client { if (changedSettings["legacyCompilerArgsBehavior"]) { this.configuration.handleConfigurationChange(); } - if (changedSettings["default.compilerPath"] !== undefined || changedSettings["default.compileCommands"] !== undefined || changedSettings["default.configurationProvider"] !== undefined) { - ui.ShowConfigureIntelliSenseButton(false, this); + const showButtonSender: string = "settingsChanged"; + if (changedSettings["default.configurationProvider"] !== undefined) { + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.ConfigProvider, showButtonSender); + } else if (changedSettings["default.compileCommands"] !== undefined) { + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.CompileCommands, showButtonSender); + } if (changedSettings["default.compilerPath"] !== undefined) { + ui.ShowConfigureIntelliSenseButton(false, this, ConfigurationType.CompilerPath, showButtonSender); } this.configuration.onDidChangeSettings(); telemetry.logLanguageServerEvent("CppSettingsChange", changedSettings, undefined); @@ -1747,8 +1716,8 @@ export class DefaultClient implements Client { public onDidChangeTextDocument(textDocumentChangeEvent: vscode.TextDocumentChangeEvent): void { if (util.isCpp(textDocumentChangeEvent.document)) { // If any file has changed, we need to abort the current rename operation - if (DefaultClient.renamePending) { - this.cancelReferences(); + if (workspaceReferences.renamePending) { + workspaceReferences.cancelCurrentReferenceRequest(refs.CancellationSender.User); } const oldVersion: number | undefined = openFileVersions.get(textDocumentChangeEvent.document.uri.toString()); @@ -2294,13 +2263,13 @@ export class DefaultClient implements Client { console.assert(this.languageClient !== undefined, "This method must not be called until this.languageClient is set in \"onReady\""); this.languageClient.onNotification(ReloadWindowNotification, () => void util.promptForReloadWindowDueToSettingsChange()); - this.languageClient.onNotification(UpdateTrustedCompilersNotification, (e) => addTrustedCompiler(e.compilerPath)); + this.languageClient.onNotification(UpdateTrustedCompilersNotification, (e) => { this.addTrustedCompiler(e.compilerPath); return; }); this.languageClient.onNotification(LogTelemetryNotification, logTelemetry); this.languageClient.onNotification(ReportStatusNotification, (e) => void this.updateStatus(e)); this.languageClient.onNotification(ReportTagParseStatusNotification, (e) => this.updateTagParseStatus(e)); this.languageClient.onNotification(InactiveRegionNotification, (e) => this.updateInactiveRegions(e)); this.languageClient.onNotification(CompileCommandsPathsNotification, (e) => this.promptCompileCommands(e)); - this.languageClient.onNotification(ReferencesNotification, (e) => this.processReferencesResult(e)); + this.languageClient.onNotification(ReferencesNotification, (e) => this.processReferencesPreview(e)); this.languageClient.onNotification(ReportReferencesProgressNotification, (e) => this.handleReferencesProgress(e)); this.languageClient.onNotification(RequestCustomConfig, (requestFile: string) => { const client: Client = clients.getClientFor(vscode.Uri.file(requestFile)); @@ -2322,6 +2291,7 @@ export class DefaultClient implements Client { this.languageClient.onNotification(ReportCodeAnalysisProcessedNotification, (e) => this.updateCodeAnalysisProcessed(e)); this.languageClient.onNotification(ReportCodeAnalysisTotalNotification, (e) => this.updateCodeAnalysisTotal(e)); this.languageClient.onNotification(DoxygenCommentGeneratedNotification, (e) => void this.insertDoxygenComment(e)); + this.languageClient.onNotification(CanceledReferencesNotification, this.serverCanceledReferences); } private setTextDocumentLanguage(languageStr: string): void { @@ -2494,18 +2464,10 @@ export class DefaultClient implements Client { const status: IntelliSenseStatus = { status: Status.TagParsingBegun }; testHook.updateStatus(status); } else if (message.endsWith("Initializing")) { - if (ui.isNewUI) { - this.model.isInitializingWorkspace.Value = true; - } else { - this.model.isParsingWorkspace.Value = true; - } + this.model.isInitializingWorkspace.Value = true; } else if (message.endsWith("Indexing")) { - if (ui.isNewUI) { - this.model.isIndexingWorkspace.Value = true; - this.model.isInitializingWorkspace.Value = false; - } else { - this.model.isParsingWorkspace.Value = true; - } + this.model.isIndexingWorkspace.Value = true; + this.model.isInitializingWorkspace.Value = false; } else if (message.endsWith("files")) { this.model.isParsingFiles.Value = true; } else if (message.endsWith("IntelliSense")) { @@ -2550,7 +2512,6 @@ export class DefaultClient implements Client { const defaultClient: DefaultClient = client; if (!defaultClient.configuration.CurrentConfiguration?.configurationProvider) { const showIntelliSenseFallbackMessage: PersistentState = new PersistentState("CPP.showIntelliSenseFallbackMessage", true); - showIntelliSenseFallbackMessage.Value = true; if (showIntelliSenseFallbackMessage.Value && !await telemetry.showStatusBarIntelliSenseButton()) { ui.showConfigureIncludePathMessage(async () => { @@ -2603,18 +2564,10 @@ export class DefaultClient implements Client { const settings: CppSettings = new CppSettings(this.RootUri); const opacity: number | undefined = settings.inactiveRegionOpacity; if (opacity !== null && opacity !== undefined) { - let backgroundColor: string | undefined = settings.inactiveRegionBackgroundColor; - if (backgroundColor === "") { - backgroundColor = undefined; - } - let color: string | undefined = settings.inactiveRegionForegroundColor; - if (color === "") { - color = undefined; - } const decoration: vscode.TextEditorDecorationType = vscode.window.createTextEditorDecorationType({ opacity: opacity.toString(), - backgroundColor: backgroundColor, - color: color, + backgroundColor: settings.inactiveRegionBackgroundColor, + color: settings.inactiveRegionForegroundColor, rangeBehavior: vscode.DecorationRangeBehavior.OpenOpen }); // We must convert to vscode.Ranges in order to make use of the API's @@ -2679,8 +2632,8 @@ export class DefaultClient implements Client { const rootFolder: vscode.WorkspaceFolder | undefined = this.RootFolder; const settings: CppSettings = new CppSettings(this.RootUri); const configProviderNotSet: boolean = !settings.defaultConfigurationProvider && !this.configuration.CurrentConfiguration?.configurationProvider && - !this.configuration.CurrentConfiguration?.configurationProviderInCppPropertiesJson && - (this.lastCustomBrowseConfigurationProviderId === undefined || this.lastCustomBrowseConfigurationProviderId.Value === undefined); + !this.configuration.CurrentConfiguration?.configurationProviderInCppPropertiesJson; + const configProviderNotSetAndNoCache: boolean = configProviderNotSet && this.lastCustomBrowseConfigurationProviderId?.Value === undefined; const compileCommandsNotSet: boolean = !settings.defaultCompileCommands && !this.configuration.CurrentConfiguration?.compileCommands && !this.configuration.CurrentConfiguration?.compileCommandsInCppPropertiesJson; // Handle config providers @@ -2688,7 +2641,7 @@ export class DefaultClient implements Client { !this.configStateReceived.configProviders ? undefined : (this.configStateReceived.configProviders.length === 0 ? undefined : this.configStateReceived.configProviders[0]); let showConfigStatus: boolean = false; - if (rootFolder && configProviderNotSet && provider && (statusBarIndicatorEnabled || sender === "configProviders")) { + if (rootFolder && configProviderNotSetAndNoCache && provider && (statusBarIndicatorEnabled || sender === "configProviders")) { const ask: PersistentFolderState = new PersistentFolderState("Client.registerProvider", true, rootFolder); if (ask.Value) { if (statusBarIndicatorEnabled) { @@ -2727,7 +2680,7 @@ export class DefaultClient implements Client { } // Handle compile commands - if (rootFolder && configProviderNotSet && !this.configStateReceived.configProviders && + if (rootFolder && configProviderNotSetAndNoCache && !this.configStateReceived.configProviders && compileCommandsNotSet && this.compileCommandsPaths.length > 0 && (statusBarIndicatorEnabled || sender === "compileCommands")) { const ask: PersistentFolderState = new PersistentFolderState("CPP.showCompileCommandsSelection", true, rootFolder); if (ask.Value) { @@ -2766,14 +2719,14 @@ export class DefaultClient implements Client { return false; }); }, - () => ask.Value = false); + () => ask.Value = false); return; } } } const compilerPathNotSet: boolean = settings.defaultCompilerPath === undefined && this.configuration.CurrentConfiguration?.compilerPath === undefined && this.configuration.CurrentConfiguration?.compilerPathInCppPropertiesJson === undefined; - const configurationNotSet: boolean = configProviderNotSet && compileCommandsNotSet && compilerPathNotSet; + const configurationNotSet: boolean = configProviderNotSetAndNoCache && compileCommandsNotSet && compilerPathNotSet; showConfigStatus = showConfigStatus || (configurationNotSet && !!compilerDefaults && !compilerDefaults.trustedCompilerFound && trustedCompilerPaths && (trustedCompilerPaths.length !== 1 || trustedCompilerPaths[0] !== "")); @@ -2784,11 +2737,22 @@ export class DefaultClient implements Client { } else { this.showConfigureIntelliSenseButton = false; } - ui.ShowConfigureIntelliSenseButton(this.showConfigureIntelliSenseButton, this); } else if (showConfigStatus && !displayedSelectCompiler) { this.promptSelectIntelliSenseConfiguration(false, "notification"); displayedSelectCompiler = true; } + + const configProviderType: ConfigurationType = this.configuration.ConfigProviderAutoSelected ? ConfigurationType.AutoConfigProvider : ConfigurationType.ConfigProvider; + const compilerType: ConfigurationType = this.configuration.CurrentConfiguration?.compilerPathIsExplicit ? ConfigurationType.CompilerPath : ConfigurationType.AutoCompilerPath; + const configType: ConfigurationType = + !configProviderNotSet ? configProviderType : + !compileCommandsNotSet ? ConfigurationType.CompileCommands : + !compilerPathNotSet ? compilerType : + ConfigurationType.NotConfigured; + + // It's ok to call this method even when the experiment is not enabled because it checks the experiment state + // before enabling the button. This method logs configuration telemetry and we always want that. + ui.ShowConfigureIntelliSenseButton(showConfigStatus, this, configType, "handleConfig"); } /** @@ -2802,9 +2766,9 @@ export class DefaultClient implements Client { return this.requestWhenReady(() => this.languageClient.sendRequest(SwitchHeaderSourceRequest, params)); } - public async requestCompiler(compilerPath: string[]): Promise { + public async requestCompiler(newCompilerPath?: string): Promise { const params: QueryDefaultCompilerParams = { - trustedCompilerPaths: compilerPath + newTrustedCompilerPath: newCompilerPath ?? "" }; const results: configs.CompilerDefaults = await this.languageClient.sendRequest(QueryCompilerDefaultsRequest, params); vscode.commands.executeCommand('setContext', 'cpptools.scanForCompilersDone', true); @@ -3082,7 +3046,7 @@ export class DefaultClient implements Client { util.isArrayOfString(itemConfig.compilerArgs) ? itemConfig.compilerArgs : undefined); itemConfig.compilerPath = compilerPathAndArgs.compilerPath; if (itemConfig.compilerPath !== undefined) { - addTrustedCompiler(itemConfig.compilerPath); + this.addTrustedCompiler(itemConfig.compilerPath); } if (providerVersion < Version.v6) { itemConfig.compilerArgsLegacy = compilerPathAndArgs.allCompilerArgs; @@ -3185,7 +3149,7 @@ export class DefaultClient implements Client { util.isArrayOfString(sanitized.compilerArgs) ? sanitized.compilerArgs : undefined); sanitized.compilerPath = compilerPathAndArgs.compilerPath; if (sanitized.compilerPath !== undefined) { - addTrustedCompiler(sanitized.compilerPath); + this.addTrustedCompiler(sanitized.compilerPath); } if (providerVersion < Version.v6) { sanitized.compilerArgsLegacy = compilerPathAndArgs.allCompilerArgs; @@ -3374,7 +3338,7 @@ export class DefaultClient implements Client { // If the cursor is on the signature line or is inside the boby, the comment will be inserted on the same line of the signature and it shouldn't replace the content of the signature line. if (cursorOnEmptyLineAboveSignature) { if (codeActionArguments !== undefined) { - // The reson why we cannot use finalInsertionLine is because the line number sent from the result is not correct. + // The reason why we cannot use finalInsertionLine is because the line number sent from the result is not correct. // In most cases, the finalInsertionLine is the line of the signature line. newRange = new vscode.Range(initCursorPosition.line, 0, initCursorPosition.line, maxColumn); } else { @@ -3471,9 +3435,10 @@ export class DefaultClient implements Client { this.handleRemoveCodeAnalysisProblems(false, identifiersAndUris); } - public async handleCreateDeclarationOrDefinition(): Promise { + public async handleCreateDeclarationOrDefinition(copy?: boolean): Promise { let range: vscode.Range | undefined; let uri: vscode.Uri | undefined; + // range is based on the cursor position. const editor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; if (editor) { @@ -3502,45 +3467,55 @@ export class DefaultClient implements Client { character: range.end.character, line: range.end.line } - } + }, + copyToClipboard: copy ?? false }; const result: CreateDeclarationOrDefinitionResult = await this.languageClient.sendRequest(CreateDeclarationOrDefinitionRequest, params); - // TODO: return specific errors info in result. - if (result.changes === undefined) { + // Create/Copy returned no result. + if (result.edit === undefined) { + // The only condition in which result.edit would be undefined is a + // server-initiated cancellation, in which case the object is actually + // a ResponseError. https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#responseMessage + return; + } + + // Handle CDD error messaging + if (result.errorText) { + let copiedToClipboard: boolean = false; + if (result.clipboardText && !params.copyToClipboard) { + vscode.env.clipboard.writeText(result.clipboardText); + copiedToClipboard = true; + } + vscode.window.showInformationMessage(result.errorText + (copiedToClipboard ? localize("fallback.clipboard", " Declaration/definition was copied.") : "")); + return; + } + + // Handle copy to clipboard. + if (result.clipboardText && params.copyToClipboard) { + vscode.env.clipboard.writeText(result.clipboardText); return; } const workspaceEdits: vscode.WorkspaceEdit = new vscode.WorkspaceEdit(); let modifiedDocument: vscode.Uri | undefined; let lastEdit: vscode.TextEdit | undefined; - let editPositionAdjustment: number = 0; let selectionPositionAdjustment: number = 0; - for (const file in result.changes) { + for (const file in result.edit.changes) { const uri: vscode.Uri = vscode.Uri.file(file); // At most, there will only be two text edits: // 1.) an edit for: #include header file // 2.) an edit for: definition or declaration - for (const edit of result.changes[file]) { + for (const edit of result.edit.changes[file]) { const range: vscode.Range = makeVscodeRange(edit.range); // Get new lines from an edit for: #include header file. - if (lastEdit && lastEdit.newText.includes("#include")) { - if (lastEdit.range.isEqual(range)) { - // Destination file is empty. - // The edit positions for #include header file and definition or declaration are the same. - selectionPositionAdjustment = (lastEdit.newText.match(/\n/g) || []).length; - } else { - // Destination file is not empty. - // VS Code workspace.applyEdit calculates the position of subsequent edits. - // That is, the positions of text edits that are originally calculated by the language server - // are adjusted based on the number of text edits applied by VS Code workspace.applyEdit. - // Since the language server's refactoring API already pre-calculates the positions of multiple text edits, - // re-adjust the new line of the next text edit for the VS Code applyEdit to calculate again. - editPositionAdjustment = (lastEdit.newText.match(/\n/g) || []).length; - } + if (lastEdit && lastEdit.newText.includes("#include") && lastEdit.range.isEqual(range)) { + // Destination file is empty. + // The edit positions for #include header file and definition or declaration are the same. + selectionPositionAdjustment = (lastEdit.newText.match(/\n/g) || []).length; } lastEdit = new vscode.TextEdit(range, edit.newText); - const position: vscode.Position = new vscode.Position(edit.range.start.line - editPositionAdjustment, edit.range.start.character); + const position: vscode.Position = new vscode.Position(edit.range.start.line, edit.range.start.character); workspaceEdits.insert(uri, position, edit.newText); } modifiedDocument = uri; @@ -3644,56 +3619,46 @@ export class DefaultClient implements Client { public handleReferencesIcon(): void { this.notifyWhenLanguageClientReady(() => { - const cancelling: boolean = DefaultClient.referencesPendingCancellations.length > 0; - if (!cancelling) { - workspaceReferences.UpdateProgressUICounter(this.model.referencesCommandMode.Value); - if (this.ReferencesCommandMode === refs.ReferencesCommandMode.Find) { - if (!workspaceReferences.referencesRequestPending) { - if (workspaceReferences.referencesRequestHasOccurred) { - // References are not usable if a references request is pending, - // So after the initial request, we don't send a 2nd references request until the next request occurs. - if (!workspaceReferences.referencesRefreshPending) { - workspaceReferences.referencesRefreshPending = true; - vscode.commands.executeCommand("references-view.refresh"); - } - } else { - workspaceReferences.referencesRequestHasOccurred = true; - workspaceReferences.referencesRequestPending = true; - this.languageClient.sendNotification(RequestReferencesNotification); - } - } - } + workspaceReferences.UpdateProgressUICounter(this.model.referencesCommandMode.Value); + + // If the search is find all references, preview partial results. + // This will cause the language server to send partial results to display + // in the "Other References" view or channel. Doing a preview should not complete + // an in-progress request until it is finished or canceled. + if (this.ReferencesCommandMode === refs.ReferencesCommandMode.Find) { + this.languageClient.sendNotification(PreviewReferencesNotification); } }); } - public cancelReferences(): void { - DefaultClient.referencesParams = undefined; - DefaultClient.renamePending = false; - if (DefaultClient.referencesRequestPending || workspaceReferences.symbolSearchInProgress) { - const cancelling: boolean = DefaultClient.referencesPendingCancellations.length > 0; - DefaultClient.referencesPendingCancellations.push({ - reject: () => { }, - callback: () => { } - }); - if (!cancelling) { - workspaceReferences.referencesCanceled = true; - languageClient.sendNotification(CancelReferencesNotification); - } - } + private serverCanceledReferences(): void { + workspaceReferences.cancelCurrentReferenceRequest(refs.CancellationSender.LanguageServer); } private handleReferencesProgress(notificationBody: refs.ReportReferencesProgressNotification): void { workspaceReferences.handleProgress(notificationBody); } - private processReferencesResult(referencesResult: refs.ReferencesResult): void { - workspaceReferences.processResults(referencesResult); + private processReferencesPreview(referencesResult: refs.ReferencesResult): void { + workspaceReferences.showResultsInPanelView(referencesResult); } public setReferencesCommandMode(mode: refs.ReferencesCommandMode): void { this.model.referencesCommandMode.Value = mode; } + + public async addTrustedCompiler(path: string): Promise { + if (path === null || path === undefined) { + return; + } + if (trustedCompilerPaths.includes(path)) { + DebugConfigurationProvider.ClearDetectedBuildTasks(); + return; + } + trustedCompilerPaths.push(path); + compilerDefaults = await this.requestCompiler(path); + DebugConfigurationProvider.ClearDetectedBuildTasks(); + } } function getLanguageServerFileName(): string { @@ -3791,7 +3756,7 @@ class NullClient implements Client { handleRemoveCodeAnalysisProblems(refreshSquigglesOnSave: boolean, identifiersAndUris: CodeAnalysisDiagnosticIdentifiersAndUri[]): Promise { return Promise.resolve(); } handleFixCodeAnalysisProblems(workspaceEdit: vscode.WorkspaceEdit, refreshSquigglesOnSave: boolean, identifiersAndUris: CodeAnalysisDiagnosticIdentifiersAndUri[]): Promise { return Promise.resolve(); } handleDisableAllTypeCodeAnalysisProblems(code: string, identifiersAndUris: CodeAnalysisDiagnosticIdentifiersAndUri[]): Promise { return Promise.resolve(); } - handleCreateDeclarationOrDefinition(): Promise { return Promise.resolve(); } + handleCreateDeclarationOrDefinition(copy?: boolean): Promise { return Promise.resolve(); } onInterval(): void { } dispose(): void { this.booleanEvent.dispose(); @@ -3802,4 +3767,5 @@ class NullClient implements Client { isInitialized(): boolean { return true; } getShowConfigureIntelliSenseButton(): boolean { return false; } setShowConfigureIntelliSenseButton(show: boolean): void { } + addTrustedCompiler(path: string): Promise { return Promise.resolve(); } } diff --git a/Extension/src/LanguageServer/configurations.ts b/Extension/src/LanguageServer/configurations.ts index a060c88be..27e5bc8d5 100644 --- a/Extension/src/LanguageServer/configurations.ts +++ b/Extension/src/LanguageServer/configurations.ts @@ -20,8 +20,8 @@ import * as nls from 'vscode-nls'; import { setTimeout } from 'timers'; import * as which from 'which'; import { getOutputChannelLogger } from '../logger'; -import { addTrustedCompiler, DefaultClient } from './client'; -import { UI, getUI } from './ui'; +import { DefaultClient } from './client'; +import { ConfigurationType, LanguageStatusUI, getUI } from './ui'; nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); @@ -351,9 +351,6 @@ export class CppProperties { if (this.configurationIncomplete && this.defaultIncludes && this.defaultFrameworks && this.vcpkgPathReady) { const configuration: Configuration | undefined = this.CurrentConfiguration; if (configuration) { - if (configuration.compilerPath !== undefined || configuration.compileCommands !== undefined || configuration.configurationProvider !== undefined) { - getUI().then((ui: UI) => ui.ShowConfigureIntelliSenseButton(false, this.client)); - } this.applyDefaultConfigurationValues(configuration); this.configurationIncomplete = false; } @@ -832,7 +829,13 @@ export class CppProperties { return []; } + private configProviderAutoSelected: boolean = false; + public get ConfigProviderAutoSelected(): boolean { + return this.configProviderAutoSelected; + } + private updateServerOnFolderSettingsChange(): void { + this.configProviderAutoSelected = false; if (!this.configurationJson) { return; } @@ -908,7 +911,7 @@ export class CppProperties { } else { // add compiler to list of trusted compilers if (i === this.CurrentConfigurationIndex) { - addTrustedCompiler(configuration.compilerPath); + this.client.addTrustedCompiler(configuration.compilerPath); } } } else { @@ -945,6 +948,8 @@ export class CppProperties { ) { configuration.browse.path.push("${workspaceFolder}"); } + } else { + configuration.browse.path = [ "${workspaceFolder}" ]; } } else { configuration.browse.path = this.updateConfigurationPathsArray(configuration.browse.path, settings.defaultBrowsePath, env); @@ -961,14 +966,14 @@ export class CppProperties { && !settings.defaultIncludePath && !settings.defaultDefines && !settings.defaultMacFrameworkPath - && settings.defaultWindowsSdkVersion === "" + && !settings.defaultWindowsSdkVersion && !settings.defaultForcedInclude - && settings.defaultCompileCommands === "" + && !settings.defaultCompileCommands && !settings.defaultCompilerArgs && settings.defaultCStandard === "" && settings.defaultCppStandard === "" && settings.defaultIntelliSenseMode === "" - && settings.defaultConfigurationProvider === ""; + && !settings.defaultConfigurationProvider; // Only keep a cached custom browse config if there is an empty configuration, // or if a specified provider ID has not changed. @@ -976,9 +981,12 @@ export class CppProperties { if (hasEmptyConfiguration) { if (providers.size === 1) { providers.forEach(provider => { configuration.configurationProvider = provider.extensionId; }); + this.configProviderAutoSelected = true; if (this.client.lastCustomBrowseConfigurationProviderId !== undefined) { keepCachedBrowseConfig = configuration.configurationProvider === this.client.lastCustomBrowseConfigurationProviderId.Value; } + } else if (providers.size > 1) { + keepCachedBrowseConfig = false; } } else if (this.client.lastCustomBrowseConfigurationProviderId !== undefined) { keepCachedBrowseConfig = configuration.configurationProvider === this.client.lastCustomBrowseConfigurationProviderId.Value; @@ -989,6 +997,17 @@ export class CppProperties { this.client.lastCustomBrowseConfigurationProviderId.Value = undefined; } } + + const showButtonSender: string = "configChange"; + if (configuration.configurationProvider !== undefined) { + const configType: ConfigurationType = this.configProviderAutoSelected ? ConfigurationType.AutoConfigProvider : ConfigurationType.ConfigProvider; + getUI().then((ui: LanguageStatusUI) => ui.ShowConfigureIntelliSenseButton(false, this.client, configType, showButtonSender)); + } else if (configuration.compileCommands !== undefined) { + getUI().then((ui: LanguageStatusUI) => ui.ShowConfigureIntelliSenseButton(false, this.client, ConfigurationType.CompileCommands, showButtonSender)); + } else if (configuration.compilerPath !== undefined) { + const configType: ConfigurationType = configuration.compilerPathIsExplicit ? ConfigurationType.CompilerPath : ConfigurationType.AutoCompilerPath; + getUI().then((ui: LanguageStatusUI) => ui.ShowConfigureIntelliSenseButton(false, this.client, configType, showButtonSender)); + } } /* diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index 528635b1f..8d82de6cd 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -11,7 +11,7 @@ import * as fs from 'fs'; import * as util from '../common'; import * as telemetry from '../telemetry'; import { TreeNode, NodeType } from './referencesModel'; -import { UI, getUI } from './ui'; +import { LanguageStatusUI, getUI } from './ui'; import { Client, DefaultClient, DoxygenCodeActionCommandArguments, openFileVersions } from './client'; import { CodeAnalysisDiagnosticIdentifiersAndUri, CodeActionDiagnosticInfo, codeAnalysisCodeToFixes, codeAnalysisFileToCodeActions, codeAnalysisAllFixes } from './codeAnalysis'; @@ -35,7 +35,7 @@ export const configPrefix: string = "C/C++: "; let prevCrashFile: string; export let clients: ClientCollection; let activeDocument: string; -let ui: UI; +let ui: LanguageStatusUI; const disposables: vscode.Disposable[] = []; const commandDisposables: vscode.Disposable[] = []; let languageConfigurations: vscode.Disposable[] = []; @@ -451,19 +451,10 @@ export function registerCommands(enabled: boolean): void { commandDisposables.push(vscode.commands.registerCommand('C_Cpp.RestartIntelliSenseForFile', enabled ? onRestartIntelliSenseForFile : onDisabledCommand)); commandDisposables.push(vscode.commands.registerCommand('C_Cpp.GenerateDoxygenComment', enabled ? onGenerateDoxygenComment : onDisabledCommand)); commandDisposables.push(vscode.commands.registerCommand('C_Cpp.CreateDeclarationOrDefinition', enabled ? onCreateDeclarationOrDefinition : onDisabledCommand)); + commandDisposables.push(vscode.commands.registerCommand('C_Cpp.CopyDeclarationOrDefinition', enabled ? onCopyDeclarationOrDefinition : onDisabledCommand)); commandDisposables.push(vscode.commands.registerCommand('C_Cpp.RescanCompilers', enabled ? onRescanCompilers : onDisabledCommand)); } -function logForUIExperiment(command: string, sender?: any): void { - const settings: CppSettings = new CppSettings(); - const properties: {[key: string]: string} = { - newUI: ui.isNewUI.toString(), - uiOverride: (settings.experimentalFeatures ?? false).toString(), - sender: util.getSenderType(sender) - }; - telemetry.logLanguageServerEvent(`experiment${command}`, properties); -} - function onDisabledCommand(): void { const message: string = localize( { @@ -477,7 +468,6 @@ function onDisabledCommand(): void { } function onRestartIntelliSenseForFile(sender?: any): void { - logForUIExperiment("RestartIntelliSenseForFile", sender); const activeEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; if (!activeEditor || !util.isCpp(activeEditor.document)) { return; @@ -573,7 +563,6 @@ function selectIntelliSenseConfiguration(sender?: any): void { } function onSelectConfiguration(sender?: any): void { - logForUIExperiment("ConfigurationSelect", sender); if (!isFolderOpen()) { vscode.window.showInformationMessage(localize("configuration.select.first", 'Open a folder first to select a configuration.')); } else { @@ -709,6 +698,14 @@ async function onDisableAllTypeCodeAnalysisProblems(code: string, identifiersAnd getActiveClient().handleDisableAllTypeCodeAnalysisProblems(code, identifiersAndUris); } +async function onCopyDeclarationOrDefinition(sender?: any): Promise { + const properties: { [key: string]: string } = { + sender: util.getSenderType(sender) + }; + telemetry.logLanguageServerEvent('CopyDeclDefn', properties); + getActiveClient().handleCreateDeclarationOrDefinition(true); +} + async function onCreateDeclarationOrDefinition(sender?: any): Promise { const properties: { [key: string]: string } = { sender: util.getSenderType(sender) @@ -752,12 +749,10 @@ function onToggleDimInactiveRegions(): void { } function onPauseParsing(sender?: any): void { - logForUIExperiment("ParsingCommands", sender); clients.ActiveClient.pauseParsing(); } function onResumeParsing(sender?: any): void { - logForUIExperiment("ParsingCommands", sender); clients.ActiveClient.resumeParsing(); } @@ -774,22 +769,18 @@ function onCancelCodeAnalysis(): void { } function onShowParsingCommands(sender?: any): void { - logForUIExperiment("ParsingCommands", sender); clients.ActiveClient.handleShowParsingCommands(); } function onShowActiveCodeAnalysisCommands(sender?: any): void { - logForUIExperiment("ShowActiveCodeAnalysisCommands", sender); clients.ActiveClient.handleShowActiveCodeAnalysisCommands(); } function onShowIdleCodeAnalysisCommands(sender?: any): void { - logForUIExperiment("ShowIdleCodeAnalysisCommands", sender); clients.ActiveClient.handleShowIdleCodeAnalysisCommands(); } function onShowReferencesProgress(sender?: any): void { - logForUIExperiment("ShowReferencesProgress", sender); clients.ActiveClient.handleReferencesIcon(); } @@ -887,7 +878,6 @@ function onLogDiagnostics(): void { } function onRescanWorkspace(sender?: string): void { - logForUIExperiment("RescanWorkspace", sender); clients.ActiveClient.rescanFolder(); } diff --git a/Extension/src/LanguageServer/references.ts b/Extension/src/LanguageServer/references.ts index cbf78c417..97e3e52fa 100644 --- a/Extension/src/LanguageServer/references.ts +++ b/Extension/src/LanguageServer/references.ts @@ -4,14 +4,15 @@ * ------------------------------------------------------------------------------------------ */ 'use strict'; import * as vscode from 'vscode'; -import { DefaultClient, RenameParams, FindAllReferencesParams } from './client'; -import { FindAllRefsView } from './referencesView'; +import { DefaultClient } from './client'; import * as telemetry from '../telemetry'; import * as nls from 'vscode-nls'; import * as logger from '../logger'; import { PersistentState } from './persistentState'; import * as util from '../common'; import { setInterval } from 'timers'; +import { Position, TextDocumentIdentifier } from 'vscode-languageclient'; +import { FindAllRefsView } from './referencesView'; nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); @@ -33,17 +34,25 @@ export interface ReferenceInfo { type: ReferenceType; } +export interface ReferencesParams { + newName: string; + position: Position; + textDocument: TextDocumentIdentifier; +} + export interface ReferencesResult { referenceInfos: ReferenceInfo[]; text: string; isFinished: boolean; + isCanceled: boolean; } -export type ReferencesResultCallback = (result: ReferencesResult | null, doResolve: boolean) => void; +export type ReferencesResultCallback = (result: ReferencesResult | null) => void; enum ReferencesProgress { Started, StartedRename, + StartedCallHierarchy, ProcessingSource, ProcessingTargets } @@ -67,7 +76,25 @@ export enum ReferencesCommandMode { None, Find, Peek, - Rename + Rename, + CallHierarchy +} + +export enum CancellationSender { + /* No cancellations */ + None, + + /* Cancellation was from a new request */ + NewRequest, + + /* Cancellation was from the provider cancellation token */ + ProviderToken, + + /* Cancellation was from the language server */ + LanguageServer, + + /* Cancellation was from the user selecting the cancel button in the reference search progress bar */ + User } export function referencesCommandModeToString(referencesCommandMode: ReferencesCommandMode): string { @@ -78,6 +105,8 @@ export function referencesCommandModeToString(referencesCommandMode: ReferencesC return localize("peek.references", "Peek References"); case ReferencesCommandMode.Rename: return localize("rename", "Rename"); + case ReferencesCommandMode.CallHierarchy: + return localize("call.hierarchy", "Call Hierarchy"); default: return ""; } @@ -105,7 +134,6 @@ export function convertReferenceTypeToString(referenceType: ReferenceType, upper case ReferenceType.NotAReference: return localize("not.a.reference", "Not a reference"); } } - return ""; } function getReferenceCanceledString(upperCase?: boolean): string { @@ -167,39 +195,36 @@ export class ReferencesManager { private findAllRefsView?: FindAllRefsView; private viewsInitialized: boolean = false; - public symbolSearchInProgress: boolean = false; + public renamePending: boolean = false; + private referenceRequestCanceled = new vscode.EventEmitter(); + private referencesCurrentProgress?: ReportReferencesProgressNotification; private referencesPrevProgressIncrement: number = 0; private referencesPrevProgressMessage: string = ""; - public referencesRequestHasOccurred: boolean = false; - private referencesFinished: boolean = false; - public referencesRequestPending: boolean = false; - public referencesRefreshPending: boolean = false; private referencesDelayProgress?: NodeJS.Timeout; private referencesProgressOptions?: vscode.ProgressOptions; - public referencesCanceled: boolean = false; - public referencesCanceledWhilePreviewing?: boolean; private referencesStartedWhileTagParsing?: boolean; private referencesProgressMethod?: (progress: vscode.Progress<{ message?: string; increment?: number; }>, token: vscode.CancellationToken) => Thenable; + private referencesProgressBarStartTime: number = 0; private referencesCurrentProgressUICounter: number = 0; private readonly referencesProgressUpdateInterval: number = 1000; private readonly referencesProgressDelayInterval: number = 2000; + private currentUpdateProgressTimer?: NodeJS.Timeout; + private currentUpdateProgressResolve?: (value: unknown) => void; private prevVisibleRangesLength: number = 0; private visibleRangesDecreased: boolean = false; private visibleRangesDecreasedTicks: number = 0; private readonly ticksForDetectingPeek: number = 1000; // TODO: Might need tweaking? - private resultsCallback?: ReferencesResultCallback; - private currentUpdateProgressTimer?: NodeJS.Timeout; - private currentUpdateProgressResolve?: (value: unknown) => void; public groupByFile: PersistentState = new PersistentState("CPP.referencesGroupByFile", false); constructor(client: DefaultClient) { this.client = client; + this.disposables.push(vscode.Disposable.from(this.referenceRequestCanceled)); } initializeViews(): void { @@ -209,6 +234,15 @@ export class ReferencesManager { } } + public get onCancellationRequested(): vscode.Event { + return this.referenceRequestCanceled.event; + } + + public cancelCurrentReferenceRequest(sender: CancellationSender): void { + // Notify the current listener to cancel its request. + this.referenceRequestCanceled.fire(sender); + } + public dispose(): void { this.disposables.forEach((d) => d.dispose()); this.disposables = []; @@ -241,6 +275,7 @@ export class ReferencesManager { switch (this.referencesCurrentProgress.referencesProgress) { case ReferencesProgress.Started: case ReferencesProgress.StartedRename: + case ReferencesProgress.StartedCallHierarchy: progress.report({ message: localize("started", "Started."), increment: 0 }); break; case ReferencesProgress.ProcessingSource: @@ -312,10 +347,16 @@ export class ReferencesManager { private handleProgressStarted(referencesProgress: ReferencesProgress): void { this.referencesStartedWhileTagParsing = this.client.IsTagParsing; - const mode: ReferencesCommandMode = - (referencesProgress === ReferencesProgress.StartedRename) ? ReferencesCommandMode.Rename : - (this.visibleRangesDecreased && (Date.now() - this.visibleRangesDecreasedTicks < this.ticksForDetectingPeek) ? - ReferencesCommandMode.Peek : ReferencesCommandMode.Find); + let mode: ReferencesCommandMode = ReferencesCommandMode.None; + if (referencesProgress === ReferencesProgress.StartedCallHierarchy) { + mode = ReferencesCommandMode.CallHierarchy; + } else if (referencesProgress === ReferencesProgress.StartedRename) { + mode = ReferencesCommandMode.Rename; + } else if (this.visibleRangesDecreased && (Date.now() - this.visibleRangesDecreasedTicks < this.ticksForDetectingPeek)) { + mode = ReferencesCommandMode.Peek; + } else { + mode = ReferencesCommandMode.Find; + } this.client.setReferencesCommandMode(mode); this.referencesPrevProgressIncrement = 0; @@ -324,20 +365,25 @@ export class ReferencesManager { this.currentUpdateProgressTimer = undefined; this.currentUpdateProgressResolve = undefined; let referencePreviousProgressUICounter: number = 0; - + this.referencesProgressBarStartTime = Date.now(); this.clearViews(); this.referencesDelayProgress = setInterval(() => { - - this.referencesProgressOptions = { location: vscode.ProgressLocation.Notification, title: referencesCommandModeToString(this.client.ReferencesCommandMode), cancellable: true }; + const progressTitle: string = referencesCommandModeToString(this.client.ReferencesCommandMode); + this.referencesProgressOptions = { location: vscode.ProgressLocation.Notification, title: progressTitle, cancellable: true }; this.referencesProgressMethod = (progress: vscode.Progress<{message?: string; increment?: number }>, token: vscode.CancellationToken) => new Promise((resolve) => { this.currentUpdateProgressResolve = resolve; this.reportProgress(progress, true, mode); this.currentUpdateProgressTimer = setInterval(() => { - if (token.isCancellationRequested && !this.referencesCanceled) { - this.client.cancelReferences(); - this.referencesCanceled = true; + if (token.isCancellationRequested) { + this.cancelCurrentReferenceRequest(CancellationSender.User); + if (this.currentUpdateProgressTimer) { + clearInterval(this.currentUpdateProgressTimer); + } + if (this.referencesDelayProgress) { + clearInterval(this.referencesDelayProgress); + } } if (this.referencesCurrentProgressUICounter !== referencePreviousProgressUICounter) { if (this.currentUpdateProgressTimer) { @@ -368,6 +414,7 @@ export class ReferencesManager { this.initializeViews(); switch (notificationBody.referencesProgress) { + case ReferencesProgress.StartedCallHierarchy: case ReferencesProgress.StartedRename: case ReferencesProgress.Started: if (this.client.ReferencesCommandMode === ReferencesCommandMode.Peek) { @@ -381,42 +428,34 @@ export class ReferencesManager { } } - public startRename(params: RenameParams): void { - this.lastResults = null; - this.referencesFinished = false; - this.referencesRequestHasOccurred = false; - this.referencesRequestPending = false; - this.referencesCanceledWhilePreviewing = false; - if (this.referencesCanceled) { - this.referencesCanceled = false; - if (this.resultsCallback) { - this.resultsCallback(null, true); + public resetProgressBar(): void { + if (this.referencesDelayProgress) { + clearInterval(this.referencesDelayProgress); + } + if (this.currentUpdateProgressTimer) { + if (this.currentUpdateProgressTimer) { + clearInterval(this.currentUpdateProgressTimer); } - } else { - this.client.sendRenameNotification(params); + if (this.currentUpdateProgressResolve) { + this.currentUpdateProgressResolve(undefined); + } + this.currentUpdateProgressResolve = undefined; + this.currentUpdateProgressTimer = undefined; } + this.referencesProgressBarStartTime = 0; } - public startFindAllReferences(params: FindAllReferencesParams): void { - this.lastResults = null; - this.referencesFinished = false; - this.referencesRequestHasOccurred = false; - this.referencesRequestPending = false; - this.referencesCanceledWhilePreviewing = false; - if (this.referencesCanceled) { - this.referencesCanceled = false; - if (this.resultsCallback) { - this.resultsCallback(null, true); - } - } else { - this.client.sendFindAllReferencesNotification(params); - } + public startRename(): void { + this.renamePending = true; } - public processResults(referencesResult: ReferencesResult): void { - if (this.referencesFinished) { - return; - } + public resetReferences(): void { + this.renamePending = false; + this.initializeViews(); + this.client.setReferencesCommandMode(ReferencesCommandMode.None); + } + + public showResultsInPanelView(referencesResult: ReferencesResult): void { this.initializeViews(); this.clearViews(); @@ -442,52 +481,14 @@ export class ReferencesManager { } } - // Need to reset these before we call the callback, as the callback my trigger another request - // and we need to ensure these values are already reset before that happens. - const referencesRequestPending: boolean = this.referencesRequestPending; - const referencesCanceled: boolean = this.referencesCanceled; - this.referencesRequestPending = false; - this.referencesCanceled = false; - - const currentReferenceCommandMode: ReferencesCommandMode = this.client.ReferencesCommandMode; - - if (referencesResult.isFinished) { - this.symbolSearchInProgress = false; - if (this.referencesDelayProgress) { - clearInterval(this.referencesDelayProgress); - } - if (this.currentUpdateProgressTimer) { - if (this.currentUpdateProgressTimer) { - clearInterval(this.currentUpdateProgressTimer); - } - if (this.currentUpdateProgressResolve) { - this.currentUpdateProgressResolve(undefined); - } - this.currentUpdateProgressResolve = undefined; - this.currentUpdateProgressTimer = undefined; - } - this.client.setReferencesCommandMode(ReferencesCommandMode.None); - } - - if (currentReferenceCommandMode === ReferencesCommandMode.Rename) { - if (!referencesCanceled) { - if (this.resultsCallback) { - this.resultsCallback(referencesResult, true); - } - } else { - // Do nothing when rename is canceled while searching for references was in progress. - if (this.resultsCallback) { - this.resultsCallback(null, true); - } - } - } else { + if (this.client.ReferencesCommandMode === ReferencesCommandMode.Find || this.client.ReferencesCommandMode === ReferencesCommandMode.Peek) { if (this.findAllRefsView) { - this.findAllRefsView.setData(referencesResult, referencesCanceled, this.groupByFile.Value); + this.findAllRefsView.setData(referencesResult, this.groupByFile.Value); } - // Display data based on command mode: peek references OR find all references - if (currentReferenceCommandMode === ReferencesCommandMode.Peek) { - const showConfirmedReferences: boolean = referencesCanceled; + // Display in "Other References" view or channel based on command mode: "peek references" OR "find all references" + if (this.client.ReferencesCommandMode === ReferencesCommandMode.Peek) { + const showConfirmedReferences: boolean = referencesResult.isCanceled; if (this.findAllRefsView) { const peekReferencesResults: string = this.findAllRefsView.getResultsAsText(showConfirmedReferences); if (peekReferencesResults) { @@ -497,33 +498,27 @@ export class ReferencesManager { } } } - } else if (currentReferenceCommandMode === ReferencesCommandMode.Find) { + } else if (this.client.ReferencesCommandMode === ReferencesCommandMode.Find) { if (this.findAllRefsView) { this.findAllRefsView.show(true); } } - if (referencesResult.isFinished) { - this.lastResults = referencesResult; - this.referencesFinished = true; - } - if (!this.referencesRefreshPending) { - if (referencesResult.isFinished && this.referencesRequestHasOccurred && !referencesRequestPending && !this.referencesCanceledWhilePreviewing) { - this.referencesRefreshPending = true; - vscode.commands.executeCommand("references-view.refresh"); - } else { - if (this.resultsCallback) { - this.resultsCallback(referencesResult, !this.referencesCanceledWhilePreviewing); - } - } - } + } + + // If this is the final result, reset after process results. + if (referencesResult.isFinished || referencesResult.isCanceled) { + this.resetReferences(); } } - public lastResults: ReferencesResult | null = null; // Saved for the final request after a preview occurs. + public getCallHierarchyProgressBarDuration(): number | undefined { + let referencesProgressBarDuration: number | undefined; - public setResultsCallback(callback: ReferencesResultCallback): void { - this.symbolSearchInProgress = true; - this.resultsCallback = callback; + if (this.referencesProgressBarStartTime !== 0) { + referencesProgressBarDuration = Date.now() - this.referencesProgressBarStartTime; + this.referencesProgressBarStartTime = 0; + } + return referencesProgressBarDuration; } public clearViews(): void { diff --git a/Extension/src/LanguageServer/referencesModel.ts b/Extension/src/LanguageServer/referencesModel.ts index a9aae90b2..929a71be9 100644 --- a/Extension/src/LanguageServer/referencesModel.ts +++ b/Extension/src/LanguageServer/referencesModel.ts @@ -15,7 +15,10 @@ export class ReferencesModel { this.originalSymbol = resultsInput.text; this.groupByFile = groupByFile; - const results: ReferenceInfo[] = resultsInput.referenceInfos.filter(r => r.type !== ReferenceType.Confirmed); + // Only filter out confirmed references when operation has finished. + // Otherwise, show all results in the "Other References" view while previewing or if the request was canceled. + const results: ReferenceInfo[] = resultsInput.isFinished ? + resultsInput.referenceInfos.filter(r => r.type !== ReferenceType.Confirmed) : resultsInput.referenceInfos; // Build a single flat list of all leaf nodes // Currently, the hierarchy is built each time referencesTreeDataProvider requests nodes. diff --git a/Extension/src/LanguageServer/referencesView.ts b/Extension/src/LanguageServer/referencesView.ts index 8f68eae0a..810937de6 100644 --- a/Extension/src/LanguageServer/referencesView.ts +++ b/Extension/src/LanguageServer/referencesView.ts @@ -30,12 +30,13 @@ export class FindAllRefsView { vscode.commands.executeCommand('setContext', 'cpptools.hasReferencesResults', hasResults); } - setData(results: ReferencesResult, isCanceled: boolean, groupByFile: boolean): void { - this.referencesModel = new ReferencesModel(results, isCanceled, groupByFile, () => { this.referenceViewProvider.refresh(); }); + setData(results: ReferencesResult, groupByFile: boolean): void { + this.referencesModel = new ReferencesModel(results, results.isCanceled, groupByFile, () => { this.referenceViewProvider.refresh(); }); this.referenceViewProvider.setModel(this.referencesModel); } clearData(): void { + this.referencesModel = undefined; this.referenceViewProvider.clear(); } diff --git a/Extension/src/LanguageServer/settings.ts b/Extension/src/LanguageServer/settings.ts index 1f4255e0a..9609c377b 100644 --- a/Extension/src/LanguageServer/settings.ts +++ b/Extension/src/LanguageServer/settings.ts @@ -210,6 +210,11 @@ class Settings { } } +function changeBlankStringToUndefined(input: string | undefined): string | undefined { + // Although null is not a valid type, user could enter a null anyway. + return (input === undefined || input === null || input.trim() === "") ? undefined : input; +} + export class CppSettings extends Settings { /** * Create the CppSettings object. @@ -248,19 +253,20 @@ export class CppSettings extends Settings { } private getClangPath(isFormat: boolean): string | undefined { - let path: string | undefined | null = super.Section.get(isFormat ? "clang_format_path" : "codeAnalysis.clangTidy.path"); + let path: string | undefined = changeBlankStringToUndefined(super.Section.get(isFormat ? "clang_format_path" : "codeAnalysis.clangTidy.path")); if (!path) { - const cachedClangPath: string | null | undefined = isFormat ? getCachedClangFormatPath() : getCachedClangTidyPath(); + const cachedClangPath: string | undefined = isFormat ? getCachedClangFormatPath() : getCachedClangTidyPath(); if (cachedClangPath !== undefined) { - if (cachedClangPath === null) { - return undefined; - } return cachedClangPath; } const clangStr: string = isFormat ? this.clangFormatStr : this.clangTidyStr; const clangName: string = isFormat ? this.clangFormatName : this.clangTidyName; - const setCachedClangPath: (path: string | null) => void = isFormat ? setCachedClangFormatPath : setCachedClangTidyPath; - path = which.sync(clangName, { nothrow: true }); + const setCachedClangPath: (path: string) => void = isFormat ? setCachedClangFormatPath : setCachedClangTidyPath; + const whichPath: string | null = which.sync(clangName, { nothrow: true }); + if (whichPath === null) { + return undefined; + } + path = whichPath; setCachedClangPath(path); if (!path) { return undefined; @@ -316,8 +322,8 @@ export class CppSettings extends Settings { public get codeAnalysisRunAutomatically(): boolean | undefined { return super.Section.get("codeAnalysis.runAutomatically"); } public get codeAnalysisRunOnBuild(): boolean | undefined { return false; } // super.Section.get("codeAnalysis.runOnBuild"); } public get clangTidyEnabled(): boolean | undefined { return super.Section.get("codeAnalysis.clangTidy.enabled"); } - public get clangTidyConfig(): string | undefined { return super.Section.get("codeAnalysis.clangTidy.config"); } - public get clangTidyFallbackConfig(): string | undefined { return super.Section.get("codeAnalysis.clangTidy.fallbackConfig"); } + public get clangTidyConfig(): string | undefined { return changeBlankStringToUndefined(super.Section.get("codeAnalysis.clangTidy.config")); } + public get clangTidyFallbackConfig(): string | undefined { return changeBlankStringToUndefined(super.Section.get("codeAnalysis.clangTidy.fallbackConfig")); } public get clangTidyFixWarnings(): boolean | undefined { return false; } // super.Section.get("codeAnalysis.clangTidy.fix.warnings"); } public get clangTidyFixErrors(): boolean | undefined { return false; } // super.Section.get("codeAnalysis.clangTidy.fix.errors"); } public get clangTidyFixNotes(): boolean | undefined { return false; } // super.Section.get("codeAnalysis.clangTidy.fix.notes"); } @@ -338,21 +344,21 @@ export class CppSettings extends Settings { checks.push(value); super.Section.update("codeAnalysis.clangTidy.checks.disabled", checks, vscode.ConfigurationTarget.WorkspaceFolder); } - public get clangFormatStyle(): string | undefined { return super.Section.get("clang_format_style"); } - public get clangFormatFallbackStyle(): string | undefined { return super.Section.get("clang_format_fallbackStyle"); } + public get clangFormatStyle(): string | undefined { return changeBlankStringToUndefined(super.Section.get("clang_format_style")); } + public get clangFormatFallbackStyle(): string | undefined { return changeBlankStringToUndefined(super.Section.get("clang_format_fallbackStyle")); } public get clangFormatSortIncludes(): boolean | undefined | null { return super.Section.get("clang_format_sortIncludes"); } public get experimentalFeatures(): boolean | undefined { return super.Section.get("experimentalFeatures")?.toLowerCase() === "enabled"; } public get suggestSnippets(): boolean | undefined { return super.Section.get("suggestSnippets"); } public get intelliSenseEngine(): string | undefined { return super.Section.get("intelliSenseEngine")?.toLowerCase(); } public get intelliSenseEngineFallback(): boolean | undefined { return super.Section.get("intelliSenseEngineFallback")?.toLowerCase() === "enabled"; } - public get intelliSenseCachePath(): string | undefined { return super.Section.get("intelliSenseCachePath"); } + public get intelliSenseCachePath(): string | undefined { return changeBlankStringToUndefined(super.Section.get("intelliSenseCachePath")); } public get intelliSenseCacheSize(): number | undefined { return super.Section.get("intelliSenseCacheSize"); } public get intelliSenseMemoryLimit(): number | undefined { return super.Section.get("intelliSenseMemoryLimit"); } public get intelliSenseUpdateDelay(): number | undefined { return super.Section.get("intelliSenseUpdateDelay"); } public get errorSquiggles(): string | undefined { return super.Section.get("errorSquiggles")?.toLowerCase(); } public get inactiveRegionOpacity(): number | undefined { return super.Section.get("inactiveRegionOpacity"); } - public get inactiveRegionForegroundColor(): string | undefined { return super.Section.get("inactiveRegionForegroundColor"); } - public get inactiveRegionBackgroundColor(): string | undefined { return super.Section.get("inactiveRegionBackgroundColor"); } + public get inactiveRegionForegroundColor(): string | undefined { return changeBlankStringToUndefined(super.Section.get("inactiveRegionForegroundColor")); } + public get inactiveRegionBackgroundColor(): string | undefined { return changeBlankStringToUndefined(super.Section.get("inactiveRegionBackgroundColor")); } public get autocomplete(): string | undefined { return super.Section.get("autocomplete"); } public get autocompleteAddParentheses(): boolean | undefined { return super.Section.get("autocompleteAddParentheses"); } public get loggingLevel(): string | undefined { return super.Section.get("loggingLevel"); } @@ -373,10 +379,10 @@ export class CppSettings extends Settings { public get filesExclude(): vscode.WorkspaceConfiguration | undefined { return super.Section.get("files.exclude"); } public get defaultIncludePath(): string[] | undefined { return super.getWithUndefinedDefault("default.includePath"); } public get defaultDefines(): string[] | undefined { return super.getWithUndefinedDefault("default.defines"); } - public get defaultDotconfig(): string | undefined { return super.Section.get("default.dotConfig"); } + public get defaultDotconfig(): string | undefined { return changeBlankStringToUndefined(super.Section.get("default.dotConfig")); } public get defaultMacFrameworkPath(): string[] | undefined { return super.getWithUndefinedDefault("default.macFrameworkPath"); } - public get defaultWindowsSdkVersion(): string | undefined { return super.Section.get("default.windowsSdkVersion"); } - public get defaultCompileCommands(): string | undefined { return super.Section.get("default.compileCommands"); } + public get defaultWindowsSdkVersion(): string | undefined { return changeBlankStringToUndefined(super.Section.get("default.windowsSdkVersion")); } + public get defaultCompileCommands(): string | undefined { return changeBlankStringToUndefined(super.Section.get("default.compileCommands")); } public get defaultForcedInclude(): string[] | undefined { return super.getWithUndefinedDefault("default.forcedInclude"); } public get defaultIntelliSenseMode(): string | undefined { return super.Section.get("default.intelliSenseMode"); } public get defaultCompilerPath(): string | undefined { return super.Section.get("default.compilerPath") ?? undefined; } @@ -403,17 +409,17 @@ export class CppSettings extends Settings { public get defaultCompilerArgs(): string[] | undefined { return super.getWithUndefinedDefault("default.compilerArgs"); } public get defaultCStandard(): string | undefined { return super.Section.get("default.cStandard"); } public get defaultCppStandard(): string | undefined { return super.Section.get("default.cppStandard"); } - public get defaultConfigurationProvider(): string | undefined { return super.Section.get("default.configurationProvider"); } + public get defaultConfigurationProvider(): string | undefined { return changeBlankStringToUndefined(super.Section.get("default.configurationProvider")); } public get defaultMergeConfigurations(): boolean | undefined { return super.Section.get("default.mergeConfigurations"); } public get defaultBrowsePath(): string[] | undefined { return super.getWithUndefinedDefault("default.browse.path") ?? undefined; } - public get defaultDatabaseFilename(): string | undefined { return super.Section.get("default.browse.databaseFilename"); } + public get defaultDatabaseFilename(): string | undefined { return changeBlankStringToUndefined(super.Section.get("default.browse.databaseFilename")); } public get defaultLimitSymbolsToIncludedHeaders(): boolean | undefined { return super.Section.get("default.browse.limitSymbolsToIncludedHeaders"); } public get defaultSystemIncludePath(): string[] | undefined { return super.getWithUndefinedDefault("default.systemIncludePath"); } public get defaultEnableConfigurationSquiggles(): boolean | undefined { return super.Section.get("default.enableConfigurationSquiggles"); } public get defaultCustomConfigurationVariables(): { [key: string]: string } | undefined { return super.Section.get<{ [key: string]: string }>("default.customConfigurationVariables"); } public get useBacktickCommandSubstitution(): boolean | undefined { return super.Section.get("debugger.useBacktickCommandSubstitution"); } public get codeFolding(): boolean { return super.Section.get("codeFolding")?.toLowerCase() === "enabled"; } - public get caseSensitiveFileSupport(): boolean { return !isWindows() || super.Section.get("caseSensitiveFileSupport") === "enabled" ; } + public get caseSensitiveFileSupport(): boolean { return !isWindows() || super.Section.get("caseSensitiveFileSupport") === "enabled"; } public get doxygenSectionTags(): string[] | undefined { return super.Section.get("doxygen.sectionTags"); } public get hover(): string | undefined { return super.Section.get("hover"); } public get legacyCompilerArgsBehavior(): boolean | undefined { return super.Section.get("legacyCompilerArgsBehavior"); } @@ -897,7 +903,7 @@ export class CppSettings extends Settings { if (this.formattingEngine !== "default") { return this.formattingEngine === "vcformat"; } - if (this.clangFormatStyle !== "file") { + if (this.clangFormatStyle && this.clangFormatStyle !== "file") { // If a clang-format style other than file is specified, don't try to switch to vcFormat. return false; } @@ -913,14 +919,18 @@ export class CppSettings extends Settings { const keys: string[] = Object.keys(editorConfigSettings); for (let i: number = 0; i < keys.length; ++i) { if (keys[i].startsWith("cpp_")) { - foundEditorConfigWithVcFormatSettings = true; - const didEditorConfigNotice: PersistentState = new PersistentState("Cpp.didEditorConfigNotice", false); - if (!didEditorConfigNotice.Value) { - vscode.window.showInformationMessage(localize({ key: "editorconfig.default.behavior", comment: ["Single-quotes are used here, as this message is displayed in a context that does not render markdown. Do not change them to back-ticks. Do not change the contents of the single-quoted text."] }, - "Code formatting is using settings from .editorconfig instead of .clang-format. For more information, see the documentation for the 'default' value of the 'C_Cpp.formatting' setting.")); - didEditorConfigNotice.Value = true; + const cppCheck: string = keys[i].substring(4); + if (cppCheck.startsWith("indent_") || cppCheck.startsWith("new_line_") || + cppCheck.startsWith("space_") || cppCheck.startsWith("wrap_")) { + foundEditorConfigWithVcFormatSettings = true; + const didEditorConfigNotice: PersistentState = new PersistentState("Cpp.didEditorConfigNotice", false); + if (!didEditorConfigNotice.Value) { + vscode.window.showInformationMessage(localize({ key: "editorconfig.default.behavior", comment: ["Single-quotes are used here, as this message is displayed in a context that does not render markdown. Do not change them to back-ticks. Do not change the contents of the single-quoted text."] }, + "Code formatting is using settings from .editorconfig instead of .clang-format. For more information, see the documentation for the 'default' value of the 'C_Cpp.formatting' setting.")); + didEditorConfigNotice.Value = true; + } + return true; } - return true; } } switch (typeof editorConfigSettings.root) { @@ -990,7 +1000,7 @@ export class OtherSettings { public get editorInlayHintsEnabled(): boolean { return vscode.workspace.getConfiguration("editor.inlayHints").get("enabled") !== "off"; } public get editorParameterHintsEnabled(): boolean | undefined { return vscode.workspace.getConfiguration("editor.parameterHints").get("enabled"); } public get searchExclude(): vscode.WorkspaceConfiguration | undefined { return vscode.workspace.getConfiguration("search", this.resource).get("exclude"); } - public get workbenchSettingsEditor (): string | undefined { return vscode.workspace.getConfiguration("workbench.settings").get("editor"); } + public get workbenchSettingsEditor(): string | undefined { return vscode.workspace.getConfiguration("workbench.settings").get("editor"); } public get colorTheme(): string | undefined { return vscode.workspace.getConfiguration("workbench").get("colorTheme"); } diff --git a/Extension/src/LanguageServer/settingsPanel.ts b/Extension/src/LanguageServer/settingsPanel.ts index e37e60ea5..f3f71b649 100644 --- a/Extension/src/LanguageServer/settingsPanel.ts +++ b/Extension/src/LanguageServer/settingsPanel.ts @@ -10,9 +10,13 @@ import * as vscode from 'vscode'; import * as util from '../common'; import * as config from './configurations'; import * as telemetry from '../telemetry'; +import * as nls from 'vscode-nls'; import { getLocalizedHtmlPath } from './localization'; import _ = require('lodash'); +nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); +const localize: nls.LocalizeFunc = nls.loadMessageBundle(); + const deepCopy = (obj: any) => _.cloneDeep(obj); // TODO: share ElementId between SettingsPanel and SettingsApp. Investigate why SettingsApp cannot import/export @@ -77,7 +81,7 @@ export class SettingsPanel { private panel?: vscode.WebviewPanel; private disposablesPanel?: vscode.Disposable; private static readonly viewType: string = 'settingsPanel'; - private static readonly title: string = 'C/C++ Configurations'; + private static readonly title: string = localize("c.cpp.configurations", 'C/C++ Configurations'); // Used to workaround a VS Code 1.56 regression in which webViewPanel.onDidChangeViewState // gets called before the SettingsApp constructor is finished running. diff --git a/Extension/src/LanguageServer/ui.ts b/Extension/src/LanguageServer/ui.ts index c291c0652..d7af89559 100644 --- a/Extension/src/LanguageServer/ui.ts +++ b/Extension/src/LanguageServer/ui.ts @@ -7,35 +7,17 @@ import * as vscode from 'vscode'; import { Client } from './client'; import * as nls from 'vscode-nls'; -import { NewUI } from './ui_new'; import { ReferencesCommandMode, referencesCommandModeToString } from './references'; import { getCustomConfigProviders, CustomConfigurationProviderCollection, isSameProviderExtensionId } from './customProviders'; import * as telemetry from '../telemetry'; import * as util from '../common'; +import { CppSettings } from './settings'; nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); const localize: nls.LocalizeFunc = nls.loadMessageBundle(); -let uiPromise: Promise | undefined; -let ui: UI; - -export interface UI { - isNewUI: boolean; - activeDocumentChanged(): void; - bind(client: Client): void; - showConfigurations(configurationNames: string[]): Promise; - ShowConfigureIntelliSenseButton(show: boolean, client?: Client): Promise; - showConfigurationProviders(currentProvider?: string): Promise; - showCompileCommands(paths: string[]): Promise; - showWorkspaces(workspaceNames: { name: string; key: string }[]): Promise; - showParsingCommands(): Promise; - showActiveCodeAnalysisCommands(): Promise; - showIdleCodeAnalysisCommands(): Promise; - showConfigureIncludePathMessage(prompt: () => Promise, onSkip: () => void): void; - showConfigureCompileCommandsMessage(prompt: () => Promise, onSkip: () => void): void; - showConfigureCustomProviderMessage(prompt: () => Promise, onSkip: () => void): void; - dispose(): void; -} +let uiPromise: Promise | undefined; +let ui: LanguageStatusUI; interface IndexableQuickPickItem extends vscode.QuickPickItem { index: number; @@ -56,33 +38,60 @@ interface ConfigurationStatus { priority: ConfigurationPriority; } -const commandArguments: string[] = ['oldUI']; // We report the sender of the command +enum LanguageStatusPriority { + First = 0, + High = 1, + Mid = 2, + Low = 3 +} + +export enum ConfigurationType { + AutoConfigProvider = "autoConfigProvider", + ConfigProvider = "configProvider", + CompileCommands = "compileCommands", + AutoCompilerPath = "autoCompilerPath", + CompilerPath = "compilerPath", + NotConfigured = "notConfigured" +} + +const commandArguments: string[] = []; // We report the sender of the command -export class OldUI implements UI { +export class LanguageStatusUI { private currentClient: Client | undefined; private configStatusBarItem: vscode.StatusBarItem; - private browseEngineStatusBarItem: vscode.StatusBarItem; - private intelliSenseStatusBarItem: vscode.StatusBarItem; + private browseEngineStatusItem: vscode.LanguageStatusItem; + private intelliSenseStatusItem: vscode.LanguageStatusItem; private configureIntelliSenseStatusItem: vscode.StatusBarItem; private referencesStatusBarItem: vscode.StatusBarItem; + private codeAnalysisStatusItem: vscode.LanguageStatusItem; + /** **************************************************** */ private curConfigurationStatus?: Promise; private isParsingWorkspace: boolean = false; private isParsingWorkspacePaused: boolean = false; private isParsingFiles: boolean = false; - private isUpdatingIntelliSense: boolean = false; private isRunningCodeAnalysis: boolean = false; private isCodeAnalysisPaused: boolean = false; private codeAnalysisProcessed: number = 0; private codeAnalysisTotal: number = 0; + private readonly workspaceParsingRunningText: string = localize("running.tagparser.text", "Parsing Workspace"); + private readonly workspaceParsingPausedText: string = localize("paused.tagparser.text", "Parsing Workspace: Paused"); + private readonly workspaceParsingDoneText: string = localize("complete.tagparser.text", "Parsing Complete"); + private readonly workspaceParsingInitializing: string = localize("initializing.tagparser.text", "Initializing Workspace"); + private readonly workspaceParsingIndexing: string = localize("indexing.tagparser.text", "Indexing Workspace"); private workspaceParsingStatus: string = ""; - private codeAnalysisProgram: string = ""; - private readonly parsingFilesTooltip: string = localize("c.cpp.parsing.open.files.tooltip", "Parsing open files"); + private workspaceParsingProgress: string = ""; + private readonly workspaceRescanText = localize("rescan.tagparse.text", "Rescan Workspace"); + private readonly parsingFilesTooltip: string = localize("c.cpp.parsing.open.files.tooltip", "Parsing Open Files"); private readonly referencesPreviewTooltip: string = ` (${localize("click.to.preview", "click to preview results")})`; - private readonly updatingIntelliSenseTooltip: string = localize("updating.intellisense.tooltip", "Updating IntelliSense"); - private readonly codeAnalysisTranslationHint: string = "{0} is a program name, such as clang-tidy"; - private runningCodeAnalysisTooltip: string = ""; - private codeAnalysisPausedTooltip: string = ""; - get isNewUI(): boolean { return false; }; + private readonly updatingIntelliSenseText: string = localize("updating.intellisense.text", "IntelliSense: Updating"); + private readonly idleIntelliSenseText: string = localize("idle.intellisense.text", "IntelliSense: Ready"); + private readonly missingIntelliSenseText: string = localize("absent.intellisense.text", "IntelliSense: Not configured"); + private readonly codeAnalysisRunningText: string = localize("running.analysis.text", "Code Analysis: Running"); + private readonly codeAnalysisPausedText: string = localize("paused.analysis.text", "Code Analysis: Paused"); + private readonly codeAnalysisModePrefix: string = localize("mode.analysis.prefix", "Code Analysis Mode: "); + private codeAnalysProgress: string = ""; + // Prevent icons from appearing too often and for too short of a time. + private readonly iconDelayTime: number = 1000; private readonly configureIntelliSenseText: string = localize("c.cpp.configureIntelliSenseStatus.text", "Configure IntelliSense"); private readonly cppConfigureIntelliSenseText: string = localize("c.cpp.configureIntelliSenseStatus.cppText", "C/C++ Configure IntelliSense"); @@ -98,7 +107,7 @@ export class OldUI implements UI { this.configStatusBarItem.tooltip = configTooltip; this.ShowConfiguration = true; - this.referencesStatusBarItem = vscode.window.createStatusBarItem("c.cpp.references.statusbar", vscode.StatusBarAlignment.Right, 0); + this.referencesStatusBarItem = vscode.window.createStatusBarItem(`c.cpp.references.statusbar`, vscode.StatusBarAlignment.Right, 901); this.referencesStatusBarItem.name = localize("c.cpp.references.statusbar", "C/C++ References Status"); this.referencesStatusBarItem.tooltip = ""; this.referencesStatusBarItem.command = { @@ -108,7 +117,7 @@ export class OldUI implements UI { }; this.ShowReferencesIcon = false; - this.configureIntelliSenseStatusItem = vscode.window.createStatusBarItem(`c.cpp.configureIntelliSenseStatus.statusbar`, vscode.StatusBarAlignment.Right, 901); + this.configureIntelliSenseStatusItem = vscode.window.createStatusBarItem(`c.cpp.configureIntelliSenseStatus.statusbar`, vscode.StatusBarAlignment.Right, 0); this.configureIntelliSenseStatusItem.name = this.cppConfigureIntelliSenseText; this.configureIntelliSenseStatusItem.tooltip = this.cppConfigureIntelliSenseText; this.configureIntelliSenseStatusItem.text = `$(warning) ${this.configureIntelliSenseText}`; @@ -120,90 +129,226 @@ export class OldUI implements UI { }; this.ShowConfigureIntelliSenseButton(false, this.currentClient); - this.intelliSenseStatusBarItem = vscode.window.createStatusBarItem("c.cpp.intellisense.statusbar", vscode.StatusBarAlignment.Right, 903); - this.intelliSenseStatusBarItem.name = localize("c.cpp.intellisense.statusbar", "C/C++ IntelliSense Status"); - this.intelliSenseStatusBarItem.tooltip = this.updatingIntelliSenseTooltip; - this.ShowFlameIcon = false; + this.intelliSenseStatusItem = vscode.languages.createLanguageStatusItem(`cpptools.status.${LanguageStatusPriority.Mid}.intellisense`, util.documentSelector); + this.intelliSenseStatusItem.name = localize("cpptools.status.intellisense", "C/C++ IntelliSense Status"); + this.intelliSenseStatusItem.text = this.idleIntelliSenseText; + + this.browseEngineStatusItem = vscode.languages.createLanguageStatusItem(`cpptools.status.${LanguageStatusPriority.Mid}.tagparser`, util.documentSelector); + this.browseEngineStatusItem.name = localize("cpptools.status.tagparser", "C/C++ Tag Parser Status"); + this.browseEngineStatusItem.detail = localize("cpptools.detail.tagparser", "Initializing..."); + this.browseEngineStatusItem.text = "$(database)"; + this.browseEngineStatusItem.command = { + command: "C_Cpp.RescanWorkspace", + title: this.workspaceRescanText, + arguments: commandArguments + }; + this.workspaceParsingStatus = this.workspaceParsingRunningText; + + this.codeAnalysisStatusItem = vscode.languages.createLanguageStatusItem(`cpptools.status.${LanguageStatusPriority.Low}.codeanalysis`, util.documentSelector); + this.codeAnalysisStatusItem.name = localize("cpptools.status.codeanalysis", "C/C++ Code Analysis Status"); + this.codeAnalysisStatusItem.text = this.codeAnalysisModePrefix + this.codeAnalysisCurrentMode(); + this.codeAnalysisStatusItem.command = { + command: "C_Cpp.ShowIdleCodeAnalysisCommands", + title: localize("c.cpp.codeanalysis.statusbar.runNow", "Run Now"), + arguments: commandArguments + }; - this.browseEngineStatusBarItem = vscode.window.createStatusBarItem("c.cpp.tagparser.statusbar", vscode.StatusBarAlignment.Right, 902); - this.browseEngineStatusBarItem.name = localize("c.cpp.tagparser.statusbar", "C/C++ Tag Parser Status"); - this.browseEngineStatusBarItem.tooltip = localize("discovering.files.tooltip", "Discovering files"); - this.ShowDBIcon = false; + } - this.codeAnalysisProgram = "clang-tidy"; - this.runningCodeAnalysisTooltip = localize( - { key: "running.analysis.tooltip", comment: [this.codeAnalysisTranslationHint] }, "Running {0}", this.codeAnalysisProgram); - this.codeAnalysisPausedTooltip = localize( - { key: "code.analysis.paused.tooltip", comment: [this.codeAnalysisTranslationHint] }, "{0} paused", this.codeAnalysisProgram); + private set TagParseStatus(label: string) { + this.workspaceParsingProgress = label; + if (this.browseEngineStatusItem.command) { + // Currently needed in order to update hover tooltip + this.browseEngineStatusItem.command.tooltip = (this.isParsingFiles ? `${this.parsingFilesTooltip} | ` : "") + this.workspaceParsingProgress; + this.browseEngineStatusItem.text = this.browseEngineStatusItem.text; + } } - private set ActiveConfig(label: string) { - this.configStatusBarItem.text = label; + private setIsInitializingWorkspace(val: boolean): void { + if (val) { + this.browseEngineStatusItem.text = "$(database)"; + this.browseEngineStatusItem.detail = this.workspaceParsingInitializing; + } + } + private setIsIndexingWorkspace(val: boolean): void { + if (val) { + this.browseEngineStatusItem.text = "$(database)"; + this.browseEngineStatusItem.detail = this.workspaceParsingIndexing; + this.browseEngineStatusItem.busy = true; + } } - private set TagParseStatus(label: string) { - this.workspaceParsingStatus = label; - this.browseEngineStatusBarItem.tooltip = (this.isParsingFiles ? `${this.parsingFilesTooltip} | ` : "") + label; + private set ActiveConfig(label: string) { + this.configStatusBarItem.text = label; } + private dbTimeout?: NodeJS.Timeout; private setIsParsingWorkspace(val: boolean): void { + if (!val && this.isParsingWorkspacePaused) { + // Unpause before handling the no longer parsing state. + this.setIsParsingWorkspacePaused(false); + } this.isParsingWorkspace = val; const showIcon: boolean = val || this.isParsingFiles; - const twoStatus: boolean = val && this.isParsingFiles; - this.ShowDBIcon = showIcon; - this.browseEngineStatusBarItem.text = showIcon ? "$(database)" : ""; - this.browseEngineStatusBarItem.tooltip = (this.isParsingFiles ? this.parsingFilesTooltip : "") - + (twoStatus ? " | " : "") - + (val ? this.workspaceParsingStatus : ""); + + // Leave this outside for more real-time response + this.browseEngineStatusItem.busy = showIcon; + + if (showIcon) { + this.browseEngineStatusItem.text = "$(database)"; + this.browseEngineStatusItem.detail = this.tagParseText(); + + if (this.dbTimeout) { + clearTimeout(this.dbTimeout); + this.dbTimeout = undefined; + } + } else { + this.dbTimeout = setTimeout(() => { + this.browseEngineStatusItem.text = this.workspaceParsingDoneText; + this.browseEngineStatusItem.detail = ""; + this.browseEngineStatusItem.command = { + command: "C_Cpp.RescanWorkspace", + title: this.workspaceRescanText, + arguments: commandArguments + }; + }, this.iconDelayTime); + } + } + + private tagParseText(): string { + if (this.isParsingWorkspacePaused) { + const twoStatus: boolean = this.isParsingFiles && this.isParsingWorkspace; + return (this.isParsingFiles ? this.parsingFilesTooltip : "") + + (twoStatus ? " | " : "") + + (this.isParsingWorkspace ? this.workspaceParsingStatus : ""); + } else { + return this.isParsingWorkspace ? this.workspaceParsingStatus : this.parsingFilesTooltip; + } } private setIsParsingWorkspacePausable(val: boolean): void { - if (val) { - this.browseEngineStatusBarItem.command = { - command: "C_Cpp.ShowParsingCommands", - title: this.browseEngineStatusBarItem.name ?? '', + if (val && this.isParsingWorkspace) { + this.browseEngineStatusItem.command = { + command: "C_Cpp.PauseParsing", + title: localize("tagparser.pause.text", "Pause"), arguments: commandArguments }; - } else { - this.browseEngineStatusBarItem.command = undefined; } } private setIsParsingWorkspacePaused(val: boolean): void { + if (!this.isParsingFiles && !this.isParsingWorkspace) { + // Ignore a pause change if no parsing is actually happening. + return; + } this.isParsingWorkspacePaused = val; + this.browseEngineStatusItem.busy = !val || this.isParsingFiles; + this.browseEngineStatusItem.text = "$(database)"; + this.workspaceParsingStatus = val ? this.workspaceParsingPausedText : this.workspaceParsingRunningText; + this.browseEngineStatusItem.detail = this.tagParseText(); + this.browseEngineStatusItem.command = val ? { + command: "C_Cpp.ResumeParsing", + title: localize("tagparser.resume.text", "Resume"), + arguments: commandArguments + } : { + command: "C_Cpp.PauseParsing", + title: localize("tagparser.pause.text", "Pause"), + arguments: commandArguments + }; + } + + private set ShowConfiguration(show: boolean) { + if (show) { + this.configStatusBarItem.show(); + } else { + this.configStatusBarItem.hide(); + } } private setIsCodeAnalysisPaused(val: boolean): void { if (!this.isRunningCodeAnalysis) { return; } + this.isCodeAnalysisPaused = val; - const twoStatus: boolean = val && this.isUpdatingIntelliSense; - this.intelliSenseStatusBarItem.tooltip = (this.isUpdatingIntelliSense ? this.updatingIntelliSenseTooltip : "") - + (twoStatus ? " | " : "") - + (val ? this.codeAnalysisPausedTooltip : this.runningCodeAnalysisTooltip); + this.codeAnalysisStatusItem.busy = !val; + this.codeAnalysisStatusItem.text = val ? this.codeAnalysisPausedText : this.codeAnalysisRunningText; } private setIsParsingFiles(val: boolean): void { this.isParsingFiles = val; const showIcon: boolean = val || this.isParsingWorkspace; - const twoStatus: boolean = val && this.isParsingWorkspace; - this.ShowDBIcon = showIcon; - this.browseEngineStatusBarItem.text = showIcon ? "$(database)" : ""; - this.browseEngineStatusBarItem.tooltip = (val ? this.parsingFilesTooltip : "") - + (twoStatus ? " | " : "") - + (this.isParsingWorkspace ? this.workspaceParsingStatus : ""); + + // Leave this outside for more real-time response + this.browseEngineStatusItem.busy = val || (!this.isParsingWorkspacePaused && this.isParsingWorkspace); + + if (showIcon) { + this.browseEngineStatusItem.text = "$(database)"; + this.browseEngineStatusItem.detail = this.tagParseText(); + + if (this.dbTimeout) { + clearTimeout(this.dbTimeout); + this.dbTimeout = undefined; + } + } else { + this.dbTimeout = setTimeout(() => { + this.browseEngineStatusItem.text = this.workspaceParsingDoneText; + this.browseEngineStatusItem.detail = ""; + this.browseEngineStatusItem.command = { + command: "C_Cpp.RescanWorkspace", + title: this.workspaceRescanText, + arguments: commandArguments + }; + }, this.iconDelayTime); + } } + private flameTimeout?: NodeJS.Timeout; private setIsUpdatingIntelliSense(val: boolean): void { - this.isUpdatingIntelliSense = val; - const showIcon: boolean = val || this.isRunningCodeAnalysis; - const twoStatus: boolean = val && this.isRunningCodeAnalysis; - this.ShowFlameIcon = showIcon; - this.intelliSenseStatusBarItem.text = showIcon ? "$(flame)" : ""; - this.intelliSenseStatusBarItem.tooltip = (val ? this.updatingIntelliSenseTooltip : "") - + (twoStatus ? " | " : "") - + (this.isRunningCodeAnalysis ? this.runningCodeAnalysisTooltip : ""); + const settings: CppSettings = new CppSettings((vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) ? vscode.workspace.workspaceFolders[0]?.uri : undefined); + + if (settings.intelliSenseEngine === "disabled") { + this.intelliSenseStatusItem.text = this.missingIntelliSenseText; + this.intelliSenseStatusItem.command = { + command: "C_Cpp.SelectDefaultCompiler", + title: localize("intellisense.select.text", "Select a Compiler"), + arguments: commandArguments + }; + return; + } + + this.intelliSenseStatusItem.busy = val; + + if (this.flameTimeout) { + clearTimeout(this.flameTimeout); + } + + if (val) { + this.intelliSenseStatusItem.text = "$(flame)"; + this.intelliSenseStatusItem.detail = this.updatingIntelliSenseText; + this.flameTimeout = undefined; + } else { + this.flameTimeout = setTimeout(() => { + if (this.intelliSenseStatusItem) { + this.intelliSenseStatusItem.text = this.idleIntelliSenseText; + this.intelliSenseStatusItem.detail = ""; + } + }, this.iconDelayTime); + } + this.intelliSenseStatusItem.command = { + command: "C_Cpp.RestartIntelliSenseForFile", + title: localize("rescan.intellisense.text", "Rescan"), + tooltip: localize("rescan.intellisense.tooltip", "Rescan IntelliSense"), + arguments: commandArguments + }; + } + + private codeAnalysisCurrentMode(): string { + const settings: CppSettings = new CppSettings((vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) ? vscode.workspace.workspaceFolders[0]?.uri : undefined); + const state: string = (settings.codeAnalysisRunAutomatically && settings.clangTidyEnabled) + ? localize("mode.codeanalysis.status.automatic", "Automatic") + : localize("mode.codeanalysis.status.manual", "Manual"); + return state; } private setIsRunningCodeAnalysis(val: boolean): void { @@ -213,23 +358,32 @@ export class OldUI implements UI { this.isCodeAnalysisPaused = false; } this.isRunningCodeAnalysis = val; - const showIcon: boolean = val || this.isUpdatingIntelliSense; - const twoStatus: boolean = val && this.isUpdatingIntelliSense; - this.ShowFlameIcon = showIcon; - this.intelliSenseStatusBarItem.text = showIcon ? "$(flame)" : ""; - this.intelliSenseStatusBarItem.tooltip = (this.isUpdatingIntelliSense ? this.updatingIntelliSenseTooltip : "") - + (twoStatus ? " | " : "") - + (val ? this.runningCodeAnalysisTooltip : ""); - this.intelliSenseStatusBarItem.command = val ? { + this.codeAnalysisStatusItem.busy = val; + const activeText: string = this.isCodeAnalysisPaused ? this.codeAnalysisPausedText : this.codeAnalysisRunningText; + const idleText: string = this.codeAnalysisModePrefix + this.codeAnalysisCurrentMode(); + this.codeAnalysisStatusItem.text = val ? activeText : idleText; + this.codeAnalysisStatusItem.command = val ? { command: "C_Cpp.ShowActiveCodeAnalysisCommands", - title: this.intelliSenseStatusBarItem.name ?? '', + title: localize("c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions", "Options"), + // Make sure not to overwrite current progress + tooltip: this.codeAnalysisStatusItem.command?.tooltip ?? localize("startup.codeanalysis.status", "Starting..."), + arguments: commandArguments + } : { + command: "C_Cpp.ShowIdleCodeAnalysisCommands", + title: localize("c.cpp.codeanalysis.statusbar.showRunNowOptions", "Run Now"), arguments: commandArguments - } : undefined; + }; } private updateCodeAnalysisTooltip(): void { - this.runningCodeAnalysisTooltip = localize({ key: "running.analysis.processed.tooltip", comment: [this.codeAnalysisTranslationHint] }, "Running {0}: {1} / {2} ({3}%)", this.codeAnalysisProgram, + this.codeAnalysProgress = localize("running.analysis.processed.tooltip", "Running: {0} / {1} ({2}%)", this.codeAnalysisProcessed, Math.max(this.codeAnalysisTotal, 1), Math.floor(100 * this.codeAnalysisProcessed / Math.max(this.codeAnalysisTotal, 1))); + + if (this.codeAnalysisStatusItem.command) { + this.codeAnalysisStatusItem.command.tooltip = this.codeAnalysProgress; + this.codeAnalysisStatusItem.text = this.codeAnalysisStatusItem.text; + + } this.setIsRunningCodeAnalysis(true); } @@ -265,38 +419,11 @@ export class OldUI implements UI { this.ShowReferencesIcon = false; } else { this.referencesStatusBarItem.text = "$(search)"; - this.referencesStatusBarItem.tooltip = referencesCommandModeToString(val) + (val !== ReferencesCommandMode.Find ? "" : this.referencesPreviewTooltip); + this.referencesStatusBarItem.tooltip = referencesCommandModeToString(val) + (val !== ReferencesCommandMode.Find ? "" : this.referencesPreviewTooltip); this.ShowReferencesIcon = true; } } - // Prevent icons from appearing too often and for too short of a time. - private readonly iconDelayTime: number = 1000; - - private dbTimeout?: NodeJS.Timeout; - private set ShowDBIcon(show: boolean) { - if (this.dbTimeout) { - clearTimeout(this.dbTimeout); - } - if (show && (this.isParsingWorkspace || this.isParsingFiles)) { - this.dbTimeout = setTimeout(() => { this.browseEngineStatusBarItem.show(); }, this.iconDelayTime); - } else { - this.dbTimeout = setTimeout(() => { this.browseEngineStatusBarItem.hide(); }, this.iconDelayTime); - } - } - - private flameTimeout?: NodeJS.Timeout; - private set ShowFlameIcon(show: boolean) { - if (this.flameTimeout) { - clearTimeout(this.flameTimeout); - } - if (show && (this.isUpdatingIntelliSense || this.isRunningCodeAnalysis)) { - this.flameTimeout = setTimeout(() => { this.intelliSenseStatusBarItem.show(); }, this.iconDelayTime); - } else { - this.flameTimeout = setTimeout(() => { this.intelliSenseStatusBarItem.hide(); }, this.iconDelayTime); - } - } - private set ShowReferencesIcon(show: boolean) { if (show && this.ReferencesCommand !== ReferencesCommandMode.None) { this.referencesStatusBarItem.show(); @@ -305,24 +432,23 @@ export class OldUI implements UI { } } - private set ShowConfiguration(show: boolean) { - if (show) { - this.configStatusBarItem.show(); - } else { - this.configStatusBarItem.hide(); - } - } - private showConfigureIntelliSenseButton: boolean = false; - private configureIntelliSenseTimeout?: NodeJS.Timeout; - public async ShowConfigureIntelliSenseButton(show: boolean, client?: Client): Promise { - if (!await telemetry.showStatusBarIntelliSenseButton() || client !== this.currentClient) { + public async ShowConfigureIntelliSenseButton(show: boolean, client?: Client, configurationType?: ConfigurationType, sender?: string): Promise { + if (client !== this.currentClient) { + return; + } + if (configurationType !== undefined && sender !== undefined) { + const showButton: string = show ? 'true' : 'false'; + telemetry.logLanguageServerEvent('showConfigureIntelliSenseButton', { configurationType, sender, showButton }); + } + + if (!await telemetry.showStatusBarIntelliSenseButton()) { return; } this.showConfigureIntelliSenseButton = show; - if (client) { + if (client !== undefined) { client.setShowConfigureIntelliSenseButton(show); } if (show) { @@ -363,7 +489,7 @@ export class OldUI implements UI { // It's sometimes desirable to see the config and icons when making changes to files with C/C++-related content. // TODO: Check some "AlwaysShow" setting here. this.ShowConfiguration = isCppOrRelated || (util.getWorkspaceIsCpp() && - (activeEditor.document.fileName.endsWith("tasks.json") || + (activeEditor.document.fileName.endsWith("tasks.json") || activeEditor.document.fileName.endsWith("launch.json"))); if (this.showConfigureIntelliSenseButton) { @@ -382,6 +508,8 @@ export class OldUI implements UI { } public bind(client: Client): void { + client.InitializingWorkspaceChanged(value => { this.setIsInitializingWorkspace(value); }); + client.IndexingWorkspaceChanged(value => { this.setIsIndexingWorkspace(value); }); client.ParsingWorkspaceChanged(value => { this.setIsParsingWorkspace(value); }); client.ParsingWorkspacePausableChanged(value => { this.setIsParsingWorkspacePausable(value); }); client.ParsingWorkspacePausedChanged(value => { this.setIsParsingWorkspacePaused(value); }); @@ -411,7 +539,7 @@ export class OldUI implements 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 }); - const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); + const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); return (selection) ? selection.index : -1; } @@ -440,7 +568,7 @@ export class OldUI implements UI { const items: IndexableQuickPickItem[] = []; for (let i: number = 0; i < paths.length; i++) { - items.push({label: paths[i], description: "", index: i}); + items.push({ label: paths[i], description: "", index: i }); } const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); @@ -459,6 +587,7 @@ export class OldUI implements UI { } private readonly selectACommandString: string = localize("select.command", "Select a command..."); + private readonly selectACodeAnalysisCommandString: string = localize("select.code.analysis.command", "Select a code analysis command..."); public async showParsingCommands(): Promise { const options: vscode.QuickPickOptions = {}; @@ -476,21 +605,32 @@ export class OldUI implements UI { public async showActiveCodeAnalysisCommands(): Promise { const options: vscode.QuickPickOptions = {}; - options.placeHolder = this.selectACommandString; + options.placeHolder = this.selectACodeAnalysisCommandString; const items: IndexableQuickPickItem[] = []; - items.push({ label: localize({ key: "cancel.analysis", comment: [this.codeAnalysisTranslationHint]}, "Cancel {0}", this.codeAnalysisProgram), description: "", index: 0 }); + items.push({ label: localize("cancel.analysis", "Cancel"), description: "", index: 0 }); if (this.isCodeAnalysisPaused) { - items.push({ label: localize({ key: "resume.analysis", comment: [this.codeAnalysisTranslationHint]}, "Resume {0}", this.codeAnalysisProgram), description: "", index: 2 }); + items.push({ label: localize("resume.analysis", "Resume"), description: "", index: 2 }); } else { - items.push({ label: localize({ key: "pause.analysis", comment: [this.codeAnalysisTranslationHint]}, "Pause {0}", this.codeAnalysisProgram), description: "", index: 1 }); + items.push({ label: localize("pause.analysis", "Pause"), description: "", index: 1 }); } + items.push({ label: localize("another.analysis", "Start Another..."), description: "", index: 3 }); const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); return (selection) ? selection.index : -1; } - public async showIdleCodeAnalysisCommands(): Promise {return -1; } + public async showIdleCodeAnalysisCommands(): Promise { + const options: vscode.QuickPickOptions = {}; + options.placeHolder = this.selectACommandString; + + const items: IndexableQuickPickItem[] = []; + items.push({ label: localize("active.analysis", "Run Code Analysis on Active File"), description: "", index: 0 }); + items.push({ label: localize("all.analysis", "Run Code Analysis on All Files"), description: "", index: 1 }); + items.push({ label: localize("open.analysis", "Run Code Analysis on Open Files"), description: "", index: 2 }); + const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); + return (selection) ? selection.index : -1; + } public showConfigureIncludePathMessage(prompt: () => Promise, onSkip: () => void): void { setTimeout(() => { @@ -537,23 +677,21 @@ export class OldUI implements UI { public dispose(): void { this.configStatusBarItem.dispose(); - this.browseEngineStatusBarItem.dispose(); - this.intelliSenseStatusBarItem.dispose(); + this.browseEngineStatusItem.dispose(); + this.intelliSenseStatusItem.dispose(); this.referencesStatusBarItem.dispose(); + this.codeAnalysisStatusItem.dispose(); } } -export async function getUI(): Promise { +export async function getUI(): Promise { if (!uiPromise) { uiPromise = _getUI(); } return uiPromise; } -async function _getUI(): Promise { - if (!ui) { - const useNewUI: boolean = await telemetry.showLanguageStatusExperiment(); - ui = useNewUI ? new NewUI() : new OldUI(); - } +async function _getUI(): Promise { + ui = new LanguageStatusUI(); return ui; } diff --git a/Extension/src/LanguageServer/ui_new.ts b/Extension/src/LanguageServer/ui_new.ts deleted file mode 100644 index 7fd91c245..000000000 --- a/Extension/src/LanguageServer/ui_new.ts +++ /dev/null @@ -1,667 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All Rights Reserved. - * See 'LICENSE' in the project root for license information. - * ------------------------------------------------------------------------------------------ */ -'use strict'; - -import * as vscode from 'vscode'; -import { Client } from './client'; -import { ReferencesCommandMode, referencesCommandModeToString } from './references'; -import { getCustomConfigProviders, CustomConfigurationProviderCollection, isSameProviderExtensionId } from './customProviders'; -import * as nls from 'vscode-nls'; -import { setTimeout } from 'timers'; -import { CppSettings } from './settings'; -import { UI } from './ui'; -import * as telemetry from '../telemetry'; -import * as util from '../common'; - -nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })(); -const localize: nls.LocalizeFunc = nls.loadMessageBundle(); - -interface IndexableQuickPickItem extends vscode.QuickPickItem { - index: number; -} -interface KeyedQuickPickItem extends vscode.QuickPickItem { - key: string; -} - -// Higher numbers mean greater priority. -enum ConfigurationPriority { - IncludePath = 1, - CompileCommands = 2, - CustomProvider = 3, -} - -interface ConfigurationStatus { - configured: boolean; - priority: ConfigurationPriority; -} - -enum LanguageStatusPriority { - First = 0, - High = 1, - Mid = 2, - Low = 3 -} - -const commandArguments: string[] = ['newUI']; // We report the sender of the command - -export class NewUI implements UI { - private currentClient: Client | undefined; - private configStatusBarItem: vscode.StatusBarItem; - private browseEngineStatusItem: vscode.LanguageStatusItem; - private intelliSenseStatusItem: vscode.LanguageStatusItem; - private configureIntelliSenseStatusItem: vscode.StatusBarItem; - private referencesStatusBarItem: vscode.StatusBarItem; - private codeAnalysisStatusItem: vscode.LanguageStatusItem; - /** **************************************************** */ - private curConfigurationStatus?: Promise; - private isParsingWorkspace: boolean = false; - private isParsingWorkspacePaused: boolean = false; - private isParsingFiles: boolean = false; - private isRunningCodeAnalysis: boolean = false; - private isCodeAnalysisPaused: boolean = false; - private codeAnalysisProcessed: number = 0; - private codeAnalysisTotal: number = 0; - private readonly workspaceParsingRunningText: string = localize("running.tagparser.text", "Parsing Workspace"); - private readonly workspaceParsingPausedText: string = localize("paused.tagparser.text", "Parsing Workspace: Paused"); - private readonly workspaceParsingDoneText: string = localize("complete.tagparser.text", "Parsing Complete"); - private readonly workspaceParsingInitializing: string = localize("initializing.tagparser.text", "Initializing Workspace"); - private readonly workspaceParsingIndexing: string = localize("indexing.tagparser.text", "Indexing Workspace"); - private workspaceParsingStatus: string = ""; - private workspaceParsingProgress: string = ""; - private readonly workspaceRescanText = localize("rescan.tagparse.text", "Rescan Workspace"); - private codeAnalysisProgram: string = ""; - private readonly parsingFilesTooltip: string = localize("c.cpp.parsing.open.files.tooltip", "Parsing Open Files"); - private readonly referencesPreviewTooltip: string = ` (${localize("click.to.preview", "click to preview results")})`; - private readonly updatingIntelliSenseText: string = localize("updating.intellisense.text", "IntelliSense: Updating"); - private readonly idleIntelliSenseText: string = localize("idle.intellisense.text", "IntelliSense: Ready"); - private readonly missingIntelliSenseText: string = localize("absent.intellisense.text", "IntelliSense: Not configured"); - private readonly codeAnalysisTranslationHint: string = "{0} is a program name, such as clang-tidy"; - private readonly codeAnalysisRunningText: string = localize("running.analysis.text", "Code Analysis: Running"); - private readonly codeAnalysisPausedText: string = localize("paused.analysis.text", "Code Analysis: Paused"); - private readonly codeAnalysisModePrefix: string = localize("mode.analysis.prefix", "Code Analysis Mode: "); - private codeAnalysProgress: string = ""; - // Prevent icons from appearing too often and for too short of a time. - private readonly iconDelayTime: number = 1000; - get isNewUI(): boolean { return true; }; - private readonly configureIntelliSenseText: string = localize("c.cpp.configureIntelliSenseStatus.text", "Configure IntelliSense"); - private readonly cppConfigureIntelliSenseText: string = localize("c.cpp.configureIntelliSenseStatus.cppText", "C/C++ Configure IntelliSense"); - - constructor() { - const configTooltip: string = localize("c.cpp.configuration.tooltip", "C/C++ Configuration"); - this.configStatusBarItem = vscode.window.createStatusBarItem("c.cpp.configuration.tooltip", vscode.StatusBarAlignment.Right, 0); - this.configStatusBarItem.name = configTooltip; - this.configStatusBarItem.command = { - command: "C_Cpp.ConfigurationSelect", - title: configTooltip, - arguments: commandArguments - }; - this.configStatusBarItem.tooltip = configTooltip; - this.ShowConfiguration = true; - - this.referencesStatusBarItem = vscode.window.createStatusBarItem(`c.cpp.references.statusbar`, vscode.StatusBarAlignment.Right, 901); - this.referencesStatusBarItem.name = localize("c.cpp.references.statusbar", "C/C++ References Status"); - this.referencesStatusBarItem.tooltip = ""; - this.referencesStatusBarItem.command = { - command: "C_Cpp.ShowReferencesProgress", - title: this.referencesStatusBarItem.name, - arguments: commandArguments - }; - this.ShowReferencesIcon = false; - - this.configureIntelliSenseStatusItem = vscode.window.createStatusBarItem(`c.cpp.configureIntelliSenseStatus.statusbar`, vscode.StatusBarAlignment.Right, 0); - this.configureIntelliSenseStatusItem.name = this.cppConfigureIntelliSenseText; - this.configureIntelliSenseStatusItem.tooltip = this.cppConfigureIntelliSenseText; - this.configureIntelliSenseStatusItem.text = `$(warning) ${this.configureIntelliSenseText}`; - this.configureIntelliSenseStatusItem.backgroundColor = new vscode.ThemeColor('statusBarItem.warningBackground'); - this.configureIntelliSenseStatusItem.command = { - command: "C_Cpp.SelectIntelliSenseConfiguration", - title: this.configureIntelliSenseStatusItem.name, - arguments: ['statusBar'] - }; - this.ShowConfigureIntelliSenseButton(false, this.currentClient); - - this.intelliSenseStatusItem = vscode.languages.createLanguageStatusItem(`cpptools.status.${LanguageStatusPriority.Mid}.intellisense`, util.documentSelector); - this.intelliSenseStatusItem.name = localize("cpptools.status.intellisense", "C/C++ IntelliSense Status"); - this.intelliSenseStatusItem.text = this.idleIntelliSenseText; - - this.browseEngineStatusItem = vscode.languages.createLanguageStatusItem(`cpptools.status.${LanguageStatusPriority.Mid}.tagparser`, util.documentSelector); - this.browseEngineStatusItem.name = localize("cpptools.status.tagparser", "C/C++ Tag Parser Status"); - this.browseEngineStatusItem.detail = localize("cpptools.detail.tagparser", "Initializing..."); - this.browseEngineStatusItem.text = "$(database)"; - this.browseEngineStatusItem.command = { - command: "C_Cpp.RescanWorkspace", - title: this.workspaceRescanText, - arguments: commandArguments - }; - this.workspaceParsingStatus = this.workspaceParsingRunningText; - - this.codeAnalysisStatusItem = vscode.languages.createLanguageStatusItem(`cpptools.status.${LanguageStatusPriority.Low}.codeanalysis`, util.documentSelector); - this.codeAnalysisStatusItem.name = localize("cpptools.status.codeanalysis", "C/C++ Code Analysis Status"); - this.codeAnalysisStatusItem.text = this.codeAnalysisModePrefix + this.codeAnalysisCurrentMode(); - this.codeAnalysisStatusItem.command = { - command: "C_Cpp.ShowIdleCodeAnalysisCommands", - title: localize("c.cpp.codeanalysis.statusbar.runNow", "Run Now"), - arguments: commandArguments - }; - - } - - private set TagParseStatus(label: string) { - this.workspaceParsingProgress = label; - if (this.browseEngineStatusItem.command) { - // Currently needed in order to update hover tooltip - this.browseEngineStatusItem.command.tooltip = (this.isParsingFiles ? `${this.parsingFilesTooltip} | ` : "") + this.workspaceParsingProgress; - this.browseEngineStatusItem.text = this.browseEngineStatusItem.text; - } - } - - private setIsInitializingWorkspace(val: boolean): void { - if (val) { - this.browseEngineStatusItem.text = "$(database)"; - this.browseEngineStatusItem.detail = this.workspaceParsingInitializing; - } - } - private setIsIndexingWorkspace(val: boolean): void { - if (val) { - this.browseEngineStatusItem.text = "$(database)"; - this.browseEngineStatusItem.detail = this.workspaceParsingIndexing; - this.browseEngineStatusItem.busy = true; - } - } - - private set ActiveConfig(label: string) { - this.configStatusBarItem.text = label; - } - - private dbTimeout?: NodeJS.Timeout; - private setIsParsingWorkspace(val: boolean): void { - this.isParsingWorkspace = val; - const showIcon: boolean = val || this.isParsingFiles; - - // Leave this outside for more realtime respone - this.browseEngineStatusItem.busy = showIcon; - - if (showIcon) { - this.browseEngineStatusItem.text = "$(database)"; - this.browseEngineStatusItem.detail = this.tagParseText(); - - if (this.dbTimeout) { - clearTimeout(this.dbTimeout); - this.dbTimeout = undefined; - } - } else { - this.dbTimeout = setTimeout(() => { - this.browseEngineStatusItem.text = this.workspaceParsingDoneText; - this.browseEngineStatusItem.detail = ""; - this.browseEngineStatusItem.command = { - command: "C_Cpp.RescanWorkspace", - title: this.workspaceRescanText, - arguments: commandArguments - }; - }, this.iconDelayTime); - } - } - - private tagParseText(): string { - if (this.isParsingWorkspacePaused) { - const twoStatus: boolean = this.isParsingFiles && this.isParsingWorkspace; - return (this.isParsingFiles ? this.parsingFilesTooltip : "") - + (twoStatus ? " | " : "") - + (this.isParsingWorkspace ? this.workspaceParsingStatus : ""); - } else { - return this.isParsingWorkspace ? this.workspaceParsingStatus : this.parsingFilesTooltip; - } - } - - private setIsParsingWorkspacePausable(val: boolean): void { - if (val && this.isParsingWorkspace) { - this.browseEngineStatusItem.command = { - command: "C_Cpp.PauseParsing", - title: localize("tagparser.pause.text", "Pause"), - arguments: commandArguments - }; - } - } - - private setIsParsingWorkspacePaused(val: boolean): void { - if (!this.isParsingFiles && !this.isParsingWorkspace) { - // Ignore a pause change if no parsing is actually happening. - return; - } - this.isParsingWorkspacePaused = val; - this.browseEngineStatusItem.busy = !val || this.isParsingFiles; - this.browseEngineStatusItem.text = "$(database)"; - this.workspaceParsingStatus = val ? this.workspaceParsingPausedText : this.workspaceParsingRunningText; - this.browseEngineStatusItem.detail = this.tagParseText(); - this.browseEngineStatusItem.command = val ? { - command: "C_Cpp.ResumeParsing", - title: localize("tagparser.resume.text", "Resume"), - arguments: commandArguments - } : { - command: "C_Cpp.PauseParsing", - title: localize("tagparser.pause.text", "Pause"), - arguments: commandArguments - }; - } - - private set ShowConfiguration(show: boolean) { - if (show) { - this.configStatusBarItem.show(); - } else { - this.configStatusBarItem.hide(); - } - } - - private setIsCodeAnalysisPaused(val: boolean): void { - if (!this.isRunningCodeAnalysis) { - return; - } - - this.isCodeAnalysisPaused = val; - this.codeAnalysisStatusItem.busy = !val; - this.codeAnalysisStatusItem.text = val ? this.codeAnalysisPausedText : this.codeAnalysisRunningText; - } - - private setIsParsingFiles(val: boolean): void { - this.isParsingFiles = val; - const showIcon: boolean = val || this.isParsingWorkspace; - - // Leave this outside for more realtime respone - this.browseEngineStatusItem.busy = val || (!this.isParsingWorkspacePaused && this.isParsingWorkspace); - - if (showIcon) { - this.browseEngineStatusItem.text = "$(database)"; - this.browseEngineStatusItem.detail = this.tagParseText(); - - if (this.dbTimeout) { - clearTimeout(this.dbTimeout); - this.dbTimeout = undefined; - } - } else { - this.dbTimeout = setTimeout(() => { - this.browseEngineStatusItem.text = this.workspaceParsingDoneText; - this.browseEngineStatusItem.detail = ""; - this.browseEngineStatusItem.command = { - command: "C_Cpp.RescanWorkspace", - title: this.workspaceRescanText, - arguments: commandArguments - }; - }, this.iconDelayTime); - } - } - - private flameTimeout?: NodeJS.Timeout; - private setIsUpdatingIntelliSense(val: boolean): void { - const settings: CppSettings = new CppSettings((vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) ? vscode.workspace.workspaceFolders[0]?.uri : undefined); - - // TODO: Integrate with Tarik's feature to determine if compiler/bare-IntelliSense is configured - if (settings.intelliSenseEngine === "disabled") { - this.intelliSenseStatusItem.text = this.missingIntelliSenseText; - this.intelliSenseStatusItem.command = { - command: "C_Cpp.SelectDefaultCompiler", - title: localize("intellisense.select.text", "Select a Compiler"), - arguments: commandArguments - }; - return; - } - - this.intelliSenseStatusItem.busy = val; - - if (this.flameTimeout) { - clearTimeout(this.flameTimeout); - } - - if (val) { - this.intelliSenseStatusItem.text = "$(flame)"; - this.intelliSenseStatusItem.detail = this.updatingIntelliSenseText; - this.flameTimeout = undefined; - } else { - this.flameTimeout = setTimeout(() => { - if (this.intelliSenseStatusItem) { - this.intelliSenseStatusItem.text = this.idleIntelliSenseText; - this.intelliSenseStatusItem.detail = ""; - } - }, this.iconDelayTime); - } - this.intelliSenseStatusItem.command = { - command: "C_Cpp.RestartIntelliSenseForFile", - title: localize("rescan.intellisense.text", "Rescan"), - tooltip: localize("rescan.intellisense.tooltip", "Rescan IntelliSense"), - arguments: commandArguments - }; - } - - private codeAnalysisCurrentMode(): string { - const settings: CppSettings = new CppSettings((vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) ? vscode.workspace.workspaceFolders[0]?.uri : undefined); - const state: string = (settings.codeAnalysisRunAutomatically && settings.clangTidyEnabled) - ? localize("mode.codeanalysis.status.automatic", "Automatic") - : localize("mode.codeanalysis.status.manual", "Manual"); - return state; - } - - private setIsRunningCodeAnalysis(val: boolean): void { - if (this.isRunningCodeAnalysis && !val) { - this.codeAnalysisTotal = 0; - this.codeAnalysisProcessed = 0; - this.isCodeAnalysisPaused = false; - } - this.isRunningCodeAnalysis = val; - this.codeAnalysisStatusItem.busy = val; - const activeText: string = this.isCodeAnalysisPaused ? this.codeAnalysisPausedText : this.codeAnalysisRunningText; - const idleText: string = this.codeAnalysisModePrefix + this.codeAnalysisCurrentMode(); - this.codeAnalysisStatusItem.text = val ? activeText : idleText; - this.codeAnalysisStatusItem.command = val ? { - command: "C_Cpp.ShowActiveCodeAnalysisCommands", - title: localize("c.cpp.codeanalysis.statusbar.showCodeAnalysisOptions", "Options"), - // Make sure not to overwrite current progress - tooltip: this.codeAnalysisStatusItem.command?.tooltip ?? localize("startup.codeanalysis.status", "Starting..."), - arguments: commandArguments - } : { - command: "C_Cpp.ShowIdleCodeAnalysisCommands", - title: localize("c.cpp.codeanalysis.statusbar.showRunNowOptions", "Run Now"), - arguments: commandArguments - }; - } - - private updateCodeAnalysisTooltip(): void { - this.codeAnalysProgress = localize({ key: "running.analysis.processed.tooltip", comment: [this.codeAnalysisTranslationHint] }, "Running {0}: {1} / {2} ({3}%)", this.codeAnalysisProgram, - this.codeAnalysisProcessed, Math.max(this.codeAnalysisTotal, 1), Math.floor(100 * this.codeAnalysisProcessed / Math.max(this.codeAnalysisTotal, 1))); - - if (this.codeAnalysisStatusItem.command) { - this.codeAnalysisStatusItem.command.tooltip = this.codeAnalysProgress; - this.codeAnalysisStatusItem.text = this.codeAnalysisStatusItem.text; - - } - this.setIsRunningCodeAnalysis(true); - } - - private setCodeAnalysisProcessed(processed: number): void { - if (!this.isRunningCodeAnalysis) { - return; // Occurs when a multi-root workspace is activated. - } - this.codeAnalysisProcessed = processed; - if (this.codeAnalysisProcessed > this.codeAnalysisTotal) { - this.codeAnalysisTotal = this.codeAnalysisProcessed + 1; - } - this.updateCodeAnalysisTooltip(); - } - - private setCodeAnalysisTotal(total: number): void { - if (!this.isRunningCodeAnalysis) { - return; // Occurs when a multi-root workspace is activated. - } - this.codeAnalysisTotal = total; - this.updateCodeAnalysisTooltip(); - } - - private get ReferencesCommand(): ReferencesCommandMode { - return this.referencesStatusBarItem.tooltip === "" ? ReferencesCommandMode.None : - (this.referencesStatusBarItem.tooltip === referencesCommandModeToString(ReferencesCommandMode.Find) ? ReferencesCommandMode.Find : - (this.referencesStatusBarItem.tooltip === referencesCommandModeToString(ReferencesCommandMode.Rename) ? ReferencesCommandMode.Rename : - ReferencesCommandMode.Peek)); - } - - private set ReferencesCommand(val: ReferencesCommandMode) { - if (val === ReferencesCommandMode.None) { - this.referencesStatusBarItem.text = ""; - this.ShowReferencesIcon = false; - } else { - this.referencesStatusBarItem.text = "$(search)"; - this.referencesStatusBarItem.tooltip = referencesCommandModeToString(val) + (val !== ReferencesCommandMode.Find ? "" : this.referencesPreviewTooltip); - this.ShowReferencesIcon = true; - } - } - - private set ShowReferencesIcon(show: boolean) { - if (show && this.ReferencesCommand !== ReferencesCommandMode.None) { - this.referencesStatusBarItem.show(); - } else { - this.referencesStatusBarItem.hide(); - } - } - - private showConfigureIntelliSenseButton: boolean = false; - private configureIntelliSenseTimeout?: NodeJS.Timeout; - - public async ShowConfigureIntelliSenseButton(show: boolean, client?: Client): Promise { - if (!await telemetry.showStatusBarIntelliSenseButton() || client !== this.currentClient) { - return; - } - this.showConfigureIntelliSenseButton = show; - if (client) { - client.setShowConfigureIntelliSenseButton(show); - } - if (show) { - const activeEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; - telemetry.logLanguageServerEvent('configureIntelliSenseStatusBar'); - if (activeEditor && util.isCppOrRelated(activeEditor.document)) { - this.configureIntelliSenseStatusItem.show(); - if (!this.configureIntelliSenseTimeout) { - this.configureIntelliSenseTimeout = setTimeout(() => { - this.configureIntelliSenseStatusItem.text = "$(warning)"; - }, 15000); - } - } - } else { - this.configureIntelliSenseStatusItem.hide(); - if (this.configureIntelliSenseTimeout) { - clearTimeout(this.configureIntelliSenseTimeout); - this.configureIntelliSenseStatusItem.text = `$(warning) ${this.configureIntelliSenseText}`; - this.configureIntelliSenseTimeout = undefined; - } - } - } - - public activeDocumentChanged(): void { - const activeEditor: vscode.TextEditor | undefined = vscode.window.activeTextEditor; - if (!activeEditor) { - this.ShowConfiguration = false; - if (this.showConfigureIntelliSenseButton) { - this.configureIntelliSenseStatusItem.hide(); - } - } else { - const isCppPropertiesJson: boolean = util.isCppPropertiesJson(activeEditor.document); - if (isCppPropertiesJson) { - vscode.languages.setTextDocumentLanguage(activeEditor.document, "jsonc"); - } - const isCppOrRelated: boolean = isCppPropertiesJson || util.isCppOrRelated(activeEditor.document); - - // It's sometimes desirable to see the config and icons when making changes to files with C/C++-related content. - // TODO: Check some "AlwaysShow" setting here. - this.ShowConfiguration = isCppOrRelated || (util.getWorkspaceIsCpp() && - (activeEditor.document.fileName.endsWith("tasks.json") || - activeEditor.document.fileName.endsWith("launch.json"))); - - if (this.showConfigureIntelliSenseButton) { - if (isCppOrRelated && !!this.currentClient && this.currentClient.getShowConfigureIntelliSenseButton()) { - this.configureIntelliSenseStatusItem.show(); - if (!this.configureIntelliSenseTimeout) { - this.configureIntelliSenseTimeout = setTimeout(() => { - this.configureIntelliSenseStatusItem.text = "$(warning)"; - }, 15000); - } - } else { - this.configureIntelliSenseStatusItem.hide(); - } - } - } - } - - public bind(client: Client): void { - client.InitializingWorkspaceChanged(value => { this.setIsInitializingWorkspace(value); }); - client.IndexingWorkspaceChanged(value => { this.setIsIndexingWorkspace(value); }); - client.ParsingWorkspaceChanged(value => { this.setIsParsingWorkspace(value); }); - client.ParsingWorkspacePausableChanged(value => { this.setIsParsingWorkspacePausable(value); }); - client.ParsingWorkspacePausedChanged(value => { this.setIsParsingWorkspacePaused(value); }); - client.ParsingFilesChanged(value => { this.setIsParsingFiles(value); }); - client.IntelliSenseParsingChanged(value => { this.setIsUpdatingIntelliSense(value); }); - client.RunningCodeAnalysisChanged(value => { this.setIsRunningCodeAnalysis(value); }); - client.CodeAnalysisPausedChanged(value => { this.setIsCodeAnalysisPaused(value); }); - client.CodeAnalysisProcessedChanged(value => { this.setCodeAnalysisProcessed(value); }); - client.CodeAnalysisTotalChanged(value => { this.setCodeAnalysisTotal(value); }); - client.ReferencesCommandModeChanged(value => { this.ReferencesCommand = value; }); - client.TagParserStatusChanged(value => { this.TagParseStatus = value; }); - client.ActiveConfigChanged(value => { - this.ActiveConfig = value; - this.currentClient = client; - this.ShowConfigureIntelliSenseButton(client.getShowConfigureIntelliSenseButton(), client); - }); - } - - public async showConfigurations(configurationNames: string[]): Promise { - const options: vscode.QuickPickOptions = {}; - options.placeHolder = localize("select.a.configuration", "Select a Configuration..."); - - const items: IndexableQuickPickItem[] = []; - for (let i: number = 0; i < configurationNames.length; i++) { - items.push({ label: configurationNames[i], description: "", index: i }); - } - 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 }); - - const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); - return (selection) ? selection.index : -1; - } - - public async showConfigurationProviders(currentProvider?: string): Promise { - const options: vscode.QuickPickOptions = {}; - options.placeHolder = localize("select.configuration.provider", "Select a Configuration Provider..."); - const providers: CustomConfigurationProviderCollection = getCustomConfigProviders(); - - const items: KeyedQuickPickItem[] = []; - providers.forEach(provider => { - let label: string = provider.name; - if (isSameProviderExtensionId(currentProvider, provider.extensionId)) { - label += ` (${localize("active", "active")})`; - } - items.push({ label: label, description: "", key: provider.extensionId }); - }); - items.push({ label: `(${localize("none", "none")})`, description: localize("disable.configuration.provider", "Disable the active configuration provider, if applicable."), key: "" }); - - const selection: KeyedQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); - return (selection) ? selection.key : undefined; - } - - public async showCompileCommands(paths: string[]): Promise { - const options: vscode.QuickPickOptions = {}; - options.placeHolder = localize("select.compile.commands", "Select a compile_commands.json..."); - - const items: IndexableQuickPickItem[] = []; - for (let i: number = 0; i < paths.length; i++) { - items.push({label: paths[i], description: "", index: i}); - } - - const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); - return (selection) ? selection.index : -1; - } - - 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 })); - - const selection: KeyedQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); - return (selection) ? selection.key : ""; - } - - private readonly selectACommandString: string = localize("select.command", "Select a command..."); - - public async showParsingCommands(): Promise { - const options: vscode.QuickPickOptions = {}; - options.placeHolder = this.selectACommandString; - - const items: IndexableQuickPickItem[] = []; - if (this.isParsingWorkspacePaused) { - items.push({ label: localize("resume.parsing", "Resume Workspace Parsing"), description: "", index: 1 }); - } else { - items.push({ label: localize("pause.parsing", "Pause Workspace Parsing"), description: "", index: 0 }); - } - const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); - return (selection) ? selection.index : -1; - } - - public async showActiveCodeAnalysisCommands(): Promise { - const options: vscode.QuickPickOptions = {}; - options.placeHolder = this.selectACommandString; - - const items: IndexableQuickPickItem[] = []; - items.push({ label: localize({ key: "cancel.analysis", comment: [this.codeAnalysisTranslationHint]}, "Cancel {0}", this.codeAnalysisProgram), description: "", index: 0 }); - - if (this.isCodeAnalysisPaused) { - items.push({ label: localize({ key: "resume.analysis", comment: [this.codeAnalysisTranslationHint]}, "Resume {0}", this.codeAnalysisProgram), description: "", index: 2 }); - } else { - items.push({ label: localize({ key: "pause.analysis", comment: [this.codeAnalysisTranslationHint]}, "Pause {0}", this.codeAnalysisProgram), description: "", index: 1 }); - } - items.push({ label: localize({ key: "another.analysis", comment: [this.codeAnalysisTranslationHint]}, "Start Another {0}...", this.codeAnalysisProgram), description: "", index: 3 }); - const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); - return (selection) ? selection.index : -1; - } - - public async showIdleCodeAnalysisCommands(): Promise { - const options: vscode.QuickPickOptions = {}; - options.placeHolder = this.selectACommandString; - - const items: IndexableQuickPickItem[] = []; - items.push({ label: localize({ key: "active.analysis", comment: [this.codeAnalysisTranslationHint]}, "Run Code Analysis on Active File", this.codeAnalysisProgram), description: "", index: 0 }); - items.push({ label: localize({ key: "all.analysis", comment: [this.codeAnalysisTranslationHint]}, "Run Code Analysis on All Files", this.codeAnalysisProgram), description: "", index: 1 }); - items.push({ label: localize({ key: "open.analysis", comment: [this.codeAnalysisTranslationHint]}, "Run Code Analysis on Open Files", this.codeAnalysisProgram), description: "", index: 2 }); - const selection: IndexableQuickPickItem | undefined = await vscode.window.showQuickPick(items, options); - return (selection) ? selection.index : -1; - } - - public showConfigureIncludePathMessage(prompt: () => Promise, onSkip: () => void): void { - setTimeout(() => { - this.showConfigurationPrompt(ConfigurationPriority.IncludePath, prompt, onSkip); - }, 10000); - } - - public showConfigureCompileCommandsMessage(prompt: () => Promise, onSkip: () => void): void { - setTimeout(() => { - this.showConfigurationPrompt(ConfigurationPriority.CompileCommands, prompt, onSkip); - }, 5000); - } - - public showConfigureCustomProviderMessage(prompt: () => Promise, onSkip: () => void): void { - this.showConfigurationPrompt(ConfigurationPriority.CustomProvider, prompt, onSkip); - } - - private showConfigurationPrompt(priority: ConfigurationPriority, prompt: () => Thenable, onSkip: () => void): void { - const showPrompt: () => Promise = async () => { - const configured: boolean = await prompt(); - return Promise.resolve({ - priority: priority, - configured: configured - }); - }; - - if (this.curConfigurationStatus) { - this.curConfigurationStatus = this.curConfigurationStatus.then(result => { - if (priority > result.priority) { - return showPrompt(); - } else if (!result.configured) { - return showPrompt(); - } - onSkip(); - return Promise.resolve({ - priority: result.priority, - configured: true - }); - }); - } else { - this.curConfigurationStatus = showPrompt(); - } - } - - public dispose(): void { - this.configStatusBarItem.dispose(); - this.browseEngineStatusItem.dispose(); - this.intelliSenseStatusItem.dispose(); - this.referencesStatusBarItem.dispose(); - this.codeAnalysisStatusItem.dispose(); - } -} - diff --git a/Extension/src/SSH/sshCommandToConfig.ts b/Extension/src/SSH/sshCommandToConfig.ts index 20454414d..06b49f340 100644 --- a/Extension/src/SSH/sshCommandToConfig.ts +++ b/Extension/src/SSH/sshCommandToConfig.ts @@ -91,7 +91,7 @@ const flags: { q: null, R: (entries, address) => (entries.RemoteForward = address), S: (entries, path) => (entries.ControlPath = path), - // -s (remote subsystem invokation), no setting in the config for this + // -s (remote subsystem invocation), no setting in the config for this s: null, // -T (disable pseudo tty), no setting in the config for this T: null, diff --git a/Extension/src/common.ts b/Extension/src/common.ts index 0509a1118..0fcba3fdc 100644 --- a/Extension/src/common.ts +++ b/Extension/src/common.ts @@ -41,19 +41,19 @@ export function setExtensionPath(path: string): void { extensionPath = path; } -let cachedClangFormatPath: string | null | undefined; -export function getCachedClangFormatPath(): string | null | undefined { +let cachedClangFormatPath: string | undefined; +export function getCachedClangFormatPath(): string | undefined { return cachedClangFormatPath; } -export function setCachedClangFormatPath(path: string | null): void { +export function setCachedClangFormatPath(path: string): void { cachedClangFormatPath = path; } -let cachedClangTidyPath: string | null | undefined; -export function getCachedClangTidyPath(): string | null | undefined { +let cachedClangTidyPath: string | undefined; +export function getCachedClangTidyPath(): string | undefined { return cachedClangTidyPath; } -export function setCachedClangTidyPath(path: string | null): void { +export function setCachedClangTidyPath(path: string): void { cachedClangTidyPath = path; } @@ -335,7 +335,7 @@ export function isOptionalArrayOfString(input: any): input is string[] | undefin export function resolveCachePath(input: string | undefined, additionalEnvironment: { [key: string]: string | string[] }): string { let resolvedPath: string = ""; - if (!input) { + if (!input || input.trim() === "") { // If no path is set, return empty string to language service process, where it will set the default path as // Windows: %LocalAppData%/Microsoft/vscode-cpptools/ // Linux and Mac: ~/.vscode-cpptools/ diff --git a/Extension/src/main.ts b/Extension/src/main.ts index f2d81f684..3d4ce6b8b 100644 --- a/Extension/src/main.ts +++ b/Extension/src/main.ts @@ -153,7 +153,7 @@ export async function deactivate(): Promise { Telemetry.deactivate(); disposables.forEach(d => d.dispose()); if (languageServiceDisabled) { - return Promise.resolve(); + return; } await LanguageServer.deactivate(); disposeOutputChannels(); diff --git a/Extension/src/nativeStrings.json b/Extension/src/nativeStrings.json index d437ff91f..209bdd635 100644 --- a/Extension/src/nativeStrings.json +++ b/Extension/src/nativeStrings.json @@ -188,10 +188,10 @@ "author_label": "Author:", "authors_label": "Authors:", "bug_label": "Bug:", - "copyright_label" : "Copyright:", + "copyright_label": "Copyright:", "deprecated_label": "Deprecated:", - "date_label" : "Date:", - "details_label" : "Details:", + "date_label": "Date:", + "details_label": "Details:", "exceptions_label": { "text": "Exceptions:", "hint": "This label is for describing the exceptions thrown by a function. Usage example: Exception: std::out_of_range parameter is out of range." @@ -268,7 +268,7 @@ "multiple_locations_note": "(Multiple locations)", "folder_tag": "Folder", "file_tag": "File", - "compiler_default_language_standard_version_old" : "Compiler returned default language standard version: {0}. Since this version is old, will try to use newer version {1} as default.", + "compiler_default_language_standard_version_old": "Compiler returned default language standard version: {0}. Since this version is old, will try to use newer version {1} as default.", "unexpected_output_from_clang_tidy": "Unexpected output from clang-tidy: {0}. Expected: {1}.", "generate_doxygen_comment": "Generate Doxygen comment", "offer_create_declaration": { @@ -393,55 +393,59 @@ "hint": "%s is the file that could not be created." }, "e_access_file": { - "text": "Cannot access directory or file '%s' for writing.", + "text": "Cannot access directory or file '%s' for writing.", "hint": "%s is the directory or file that could not be accessed for writing." }, "e_invalid_pathname": { - "text": "Invalid file path: '%s'.", + "text": "Invalid file path: '%s'.", "hint": "%s is the file that has an invalid path." }, "e_cm_file_not_in_project": { - "text": "File '%s' was not found.", + "text": "File '%s' was not found.", "hint": "%s is the file that was not found." }, - "refactor_create_declaration_definition_failed": - { + "refactor_create_declaration_definition_failed": { "text": "Create Declaration / Definition failed: %s", "hint": "The operation 'Create Declaration / Definition' on a function was not successful. %s is the error info that has a period at the end of the string." }, - "refactor_create_default_delete": - { + "refactor_create_default_delete": { "text": "Unable to create function '%s'. Creating defaulted or deleted functions is not supported.", "hint": "%s is the function that could not be created." }, - "refactor_function_copied_to_clipboard": "The function signature was copied to the clipboard.", - "refactor_function_not_created": - { + "refactor_function_not_created": { "text": "Unable to create function '%s'.", "hint": "%s is the function that could not be created." }, - "refactor_ambiguous_locations": - { + "refactor_ambiguous_locations": { "text": "Unable to find an unambiguous location for function '%s'.", "hint": "%s is the function for the unambiguous location." }, - "refactor_file_not_in_project": - { + "refactor_file_not_in_project": { "text": "File '%s' was not found.", "hint": "%s is the file that was not found." }, - "refactor_not_class_namespace": - { + "refactor_not_class_namespace": { "text": "Could not find class or namespace '%s'.", "hint": "%s is the class or namespace code that could not be found." }, - "refactor_operation_unsupported": - { + "refactor_operation_unsupported": { "text": "The operation is not supported for '%s'.", "hint": "%s is the function that is not supported for an operation that involves automatically generating code." }, "unknown_error": "Unknown error.", "run_select_intellisense_configuration": { "text": "Please run the 'Select IntelliSense Configuration...' command to locate your system headers." + }, + "offer_copy_declaration": { + "text": "Copy declaration of '{0}'", + "hint": "{0} is the name of a C/C++ function." + }, + "offer_copy_definition": { + "text": "Copy definition of '{0}'", + "hint": "{0} is the name of a C/C++ function." + }, + "refactor_copy_declaration_definition_failed": { + "text": "Copying Declaration / Definition to clipboard failed: %s", + "hint": "The operation 'Copy Declaration / Definition' on a function was not successful. %s is the error info that has a period at the end of the string." } -} +} \ No newline at end of file diff --git a/Extension/tools/OptionsSchema.json b/Extension/tools/OptionsSchema.json index f85d76957..0a85f18c0 100644 --- a/Extension/tools/OptionsSchema.json +++ b/Extension/tools/OptionsSchema.json @@ -874,6 +874,11 @@ "description": "%c_cpp.debuggers.miDebuggerPath.description%", "default": "/usr/bin/gdb" }, + "miDebuggerArgs": { + "type": "string", + "description": "%c_cpp.debuggers.miDebuggerArgs.description%", + "default": "" + }, "miDebuggerServerAddress": { "type": "string", "description": "%c_cpp.debuggers.miDebuggerServerAddress.description%", diff --git a/Extension/yarn.lock b/Extension/yarn.lock index 43a0cd1de..04e1f6c3b 100644 --- a/Extension/yarn.lock +++ b/Extension/yarn.lock @@ -517,6 +517,15 @@ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@vscode/dts@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@vscode/dts/-/dts-0.4.0.tgz#76b7b215c3094a919e244db024d08c64483528f7" + integrity sha512-m28fZnyS9PlzVvYHppyC3Q98U2RFIZO2srnBMvyupPBY5QkSxoNIjTV9roLaU7kE+gc+HXczH8XHPETUkt9IAA== + dependencies: + https-proxy-agent "^7.0.0" + minimist "^1.2.8" + prompts "^2.4.2" + "@vscode/extension-telemetry@^0.6.2": version "0.6.2" resolved "https://registry.yarnpkg.com/@vscode/extension-telemetry/-/extension-telemetry-0.6.2.tgz#b86814ee680615730da94220c2b03ea9c3c14a8e" @@ -718,6 +727,13 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.0.2: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -3015,6 +3031,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz#75cb70d04811685667183b31ab158d006750418a" + integrity sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -3858,7 +3882,7 @@ minimatch@3.0.4, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch dependencies: brace-expansion "^1.1.7" -minimist@0.0.8, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.7: +minimist@0.0.8, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.7, minimist@^1.2.8: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== @@ -4535,7 +4559,7 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -prompts@^2.1.0: +prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -5915,15 +5939,6 @@ vscode-debugprotocol@1.38.0, vscode-debugprotocol@^1.35.0: resolved "https://registry.yarnpkg.com/vscode-debugprotocol/-/vscode-debugprotocol-1.38.0.tgz#7a9bcd457e6642f48fabef114c0fa1c25a2fb1e7" integrity sha512-oam9iSjNfXSn71a8bmNsXv8k/rIKSOcllIPrFnNgxd1EMBpfnum+gb7lmRpcH0zSjGb+OH8Ncn8B5tv8srWbNQ== -vscode-dts@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/vscode-dts/-/vscode-dts-0.3.3.tgz#e5ef3afe76182875b252cca7f449938e4a0bf28a" - integrity sha512-JfOsWL0NvfVw0UF9bcTjlv1Onz3Ted7cgpPWKWMnHGB+72t/tn8WFDeKLZO42l2k9KJq/NGS9rFC5gZbyI4FTg== - dependencies: - minimist "^1.2.0" - prompts "^2.1.0" - rimraf "^3.0.0" - vscode-jsonrpc@8.1.0-next.5: version "8.1.0-next.5" resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0-next.5.tgz#93fede04082a05268c735b77dae1edbb31708f33" diff --git a/LICENSE.md b/LICENSE.md index ef220fe89..3bce6eb07 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ -Additional binary files may be downloaded at runtime after the initial -installation; these are governed by the more restrictive proprietary license -terms found at [RuntimeLicenses](RuntimeLicenses). +Additional binary files are included in the official VSIX files built and +distributed by Microsoft; these are governed by the more restrictive proprietary +license terms found at [RuntimeLicenses](RuntimeLicenses). MIT License