From 1f57b28aec24968a251ee5c6e9ebf25980649485 Mon Sep 17 00:00:00 2001 From: dibarbet Date: Sat, 14 Sep 2024 00:32:58 +0000 Subject: [PATCH 01/14] Update main version --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index daaeeb396..1481c3f44 100644 --- a/version.json +++ b/version.json @@ -1,6 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "2.48", + "version": "2.49", "publicReleaseRefSpec": [ "^refs/heads/release$", "^refs/heads/prerelease$", From 7cc052fc1f4fafb446ddb2c0cfff09213924029d Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Sat, 14 Sep 2024 00:51:16 +0000 Subject: [PATCH 02/14] Localization result of 6ef78970b018ba4d77637e29aa7cba9230c30bee. --- package.nls.cs.json | 2 +- package.nls.de.json | 2 +- package.nls.es.json | 2 +- package.nls.fr.json | 2 +- package.nls.it.json | 2 +- package.nls.ja.json | 2 +- package.nls.ko.json | 2 +- package.nls.pl.json | 2 +- package.nls.pt-br.json | 2 +- package.nls.ru.json | 2 +- package.nls.tr.json | 2 +- package.nls.zh-cn.json | 2 +- package.nls.zh-tw.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.nls.cs.json b/package.nls.cs.json index 5fa75be20..2c91f7046 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Potlačit nápovědy, když argument odpovídá názvu parametru", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Potlačit nápovědy, když název parametru odpovídá záměru metody", "configuration.dotnet.navigation.navigateToDecompiledSources": "Povolit navigaci na dekompilované zdroje.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Povolit navigaci ke zdrojovým odkazům a vloženým zdrojům", "configuration.dotnet.preferCSharpExtension": "Vynutí načtení projektů pouze s rozšířením jazyka C#. To může být užitečné při použití starších typů projektů, které jazyk C# Dev Kit nepodporuje. (Vyžaduje opětovné načtení okna)", "configuration.dotnet.projects.binaryLogPath": "Nastaví cestu, do které se při načítání projektů zapisují binární protokoly MSBuildu, aby se usnadnil diagnostika chyb načítání.", "configuration.dotnet.projects.enableAutomaticRestore": "Povolí automatické obnovení balíčku NuGet, pokud rozšíření zjistí, že chybí prostředky.", diff --git a/package.nls.de.json b/package.nls.de.json index d808fb4db..8263ae6c7 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Hinweise unterdrücken, wenn das Argument mit dem Namen des Parameters übereinstimmt", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Hinweise unterdrücken, wenn der Parametername mit der Methodenabsicht übereinstimmt", "configuration.dotnet.navigation.navigateToDecompiledSources": "Aktivieren der Navigation zu dekompilierten Quellen.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Navigation zu Quelllinks und eingebetteten Quellen aktivieren", "configuration.dotnet.preferCSharpExtension": "Erzwingt, dass Projekte nur mit der C#-Erweiterung geladen werden. Dies kann nützlich sein, wenn Legacy-Projekttypen verwendet werden, die vom C# Dev Kit nicht unterstützt werden. (Erfordert erneutes Laden des Fensters)", "configuration.dotnet.projects.binaryLogPath": "Legt einen Pfad fest, in den binäre MSBuild-Protokolle beim Laden von Projekten geschrieben werden, um die Diagnose von Ladefehlern zu unterstützen.", "configuration.dotnet.projects.enableAutomaticRestore": "Aktiviert die automatische NuGet-Wiederherstellung, wenn die Erweiterung erkennt, dass Ressourcen fehlen.", diff --git a/package.nls.es.json b/package.nls.es.json index 83b849f38..b6708eee8 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Suprimir las sugerencias cuando el argumento coincide con el nombre del parámetro", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Suprimir las sugerencias cuando el nombre del parámetro coincida con la intención del método", "configuration.dotnet.navigation.navigateToDecompiledSources": "Habilitar la navegación a fuentes descompiladas.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Habilita la navegación al vínculo de origen y a los orígenes incrustados.", "configuration.dotnet.preferCSharpExtension": "Fuerza la carga de proyectos solo con la extensión de C#. Esto puede ser útil cuando se usan tipos de proyecto heredados que no son compatibles con el kit de desarrollo de C#. (Requiere volver a cargar la ventana)", "configuration.dotnet.projects.binaryLogPath": "Establece una ruta de acceso en la que se escriben los registros binarios de MSBuild al cargar proyectos para ayudar a diagnosticar errores de carga.", "configuration.dotnet.projects.enableAutomaticRestore": "Habilita la restauración automática de NuGet si la extensión detecta que faltan activos.", diff --git a/package.nls.fr.json b/package.nls.fr.json index 6ca801d36..f7f008be1 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Supprimer les conseils lorsque l'argument correspond au nom du paramètre", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Supprimer les indicateurs quand le nom de paramètre correspond à l'intention de la méthode", "configuration.dotnet.navigation.navigateToDecompiledSources": "Activez la navigation vers les sources décompliées.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Activez la navigation du lien vers la source et des sources incorporées.", "configuration.dotnet.preferCSharpExtension": "Force le chargement des projets avec l'extension C# uniquement. Cela peut être utile lors de l’utilisation de types de projets hérités qui ne sont pas pris en charge par C# Dev Kit. (Nécessite le rechargement de la fenêtre)", "configuration.dotnet.projects.binaryLogPath": "Définit un chemin d’accès dans lequel les journaux binaires MSBuild sont écrits lors du chargement des projets, pour faciliter le diagnostic des erreurs de chargement.", "configuration.dotnet.projects.enableAutomaticRestore": "Active la restauration automatique de NuGet si l’extension détecte que des actifs sont manquants.", diff --git a/package.nls.it.json b/package.nls.it.json index 88e06fc45..285aaed6a 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Elimina hint quando l'argomento corrisponde al nome del parametro", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Non visualizzare suggerimenti quando il nome del parametro corrisponde alla finalità del metodo", "configuration.dotnet.navigation.navigateToDecompiledSources": "Abilita la navigazione verso origini decompilate.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Abilita la navigazione al collegamento all'origine e alle origini incorporate.", "configuration.dotnet.preferCSharpExtension": "Forza il caricamento dei progetti solo con l'estensione C#. Può essere utile quando si usano tipi di progetto legacy non supportati dal Kit di sviluppo C#. (Richiede il ricaricamento della finestra)", "configuration.dotnet.projects.binaryLogPath": "Imposta un percorso in cui vengono scritti i log binari di MSBuild durante il caricamento dei progetti per diagnosticare gli errori di caricamento.", "configuration.dotnet.projects.enableAutomaticRestore": "Abilita il ripristino automatico di NuGet se l'estensione rileva che mancano asset.", diff --git a/package.nls.ja.json b/package.nls.ja.json index c52938f70..443e8ca3d 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "引数がパラメーター名と一致するとき、ヒントを抑制する", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "パラメーター名がメソッドの意図と一致する場合にヒントを非表示にする", "configuration.dotnet.navigation.navigateToDecompiledSources": "逆コンパイルされたソースへのナビゲーションを有効にします。", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Source Link および埋め込みソースに移動できるようにします。", "configuration.dotnet.preferCSharpExtension": "C# 拡張機能のみを使用してプロジェクトを強制的に読み込みます。 これは、C# Dev Kit でサポートされていないレガシ プロジェクトの種類を使用する場合に役立ちます。(ウィンドウの再読み込みが必要)", "configuration.dotnet.projects.binaryLogPath": "読み込みエラーの診断に役立つ、プロジェクト読み込み時に MSBuild バイナリ ログが書き込まれるパスを設定します。", "configuration.dotnet.projects.enableAutomaticRestore": "拡張機能で資産が見つからないと検出された場合に、NuGet の自動復元を有効にします。", diff --git a/package.nls.ko.json b/package.nls.ko.json index 4cac28482..766b0c752 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "인수가 매개 변수 이름과 일치하는 경우 힌트 표시 안 함", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "매개 변수 이름이 메서드의 의도와 일치하는 경우 힌트 표시 안 함", "configuration.dotnet.navigation.navigateToDecompiledSources": "디컴파일된 원본 탐색을 사용하도록 설정합니다.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "소스 링크 및 포함된 원본에 대한 탐색을 사용하도록 설정합니다.", "configuration.dotnet.preferCSharpExtension": "프로젝트가 C# 확장으로만 로드되도록 합니다. C# 개발 키트에서 지원되지 않는 레거시 프로젝트 형식을 사용할 때 유용할 수 있습니다(창 다시 로드 필요).", "configuration.dotnet.projects.binaryLogPath": "로드 오류를 진단하는 데 도움이 되도록 프로젝트를 로드할 때 MSBuild 이진 로그가 기록되는 경로를 설정합니다.", "configuration.dotnet.projects.enableAutomaticRestore": "확장에서 자산이 누락된 것을 감지하는 경우 자동 NuGet 복원을 사용하도록 설정합니다.", diff --git a/package.nls.pl.json b/package.nls.pl.json index 176dd0017..9b84795e0 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Pomiń wskazówki, gdy argument pasuje do nazwy parametru", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Pomiń wskazówki, gdy nazwa parametru pasuje do intencji metody", "configuration.dotnet.navigation.navigateToDecompiledSources": "Włącz nawigację do zdekompilowanych źródeł.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Włącz nawigację do linku do źródła i osadzonych źródeł.", "configuration.dotnet.preferCSharpExtension": "Wymusza ładowanie projektów tylko z rozszerzeniem języka C#. Może to być przydatne w przypadku korzystania ze starszych typów projektów, które nie są obsługiwane przez zestaw C# Dev Kit. (Wymaga ponownego załadowania okna)", "configuration.dotnet.projects.binaryLogPath": "Ustawia ścieżkę, w której dzienniki binarne programu MSBuild są zapisywane podczas ładowania projektów, aby ułatwić diagnozowanie błędów ładowania.", "configuration.dotnet.projects.enableAutomaticRestore": "Włącza automatyczne przywracanie pakietu NuGet, jeśli rozszerzenie wykryje brak zasobów.", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 9a7b6e059..cfe480b9d 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Suprimir as dicas quando o argumento corresponder ao nome do parâmetro", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Suprimir as dicas quando o nome do parâmetro corresponder à intenção do método", "configuration.dotnet.navigation.navigateToDecompiledSources": "Habilite a navegação para fontes não compatíveis.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Habilite a navegação para o link de origem e fontes inseridas.", "configuration.dotnet.preferCSharpExtension": "Força o carregamento dos projetos somente com a extensão C#. Isso pode ser útil ao usar tipos de projetos herdados que não são suportados pelo C# Dev Kit. (Requer recarga da janela)", "configuration.dotnet.projects.binaryLogPath": "Define um caminho no qual os registros binários do MSBuild são gravados ao carregar projetos para ajudar a diagnosticar erros de carregamento.", "configuration.dotnet.projects.enableAutomaticRestore": "Habilita a restauração automática do NuGet se a extensão detectar que os ativos estão ausentes.", diff --git a/package.nls.ru.json b/package.nls.ru.json index fd8cd9609..4fa0b793c 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Скрывать подсказки, когда аргумент соответствует имени параметра", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Скрывать подсказки, если имя параметра соответствует намерению метода.", "configuration.dotnet.navigation.navigateToDecompiledSources": "Включить переход к декомпилированным источникам.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Включить навигацию для исходной ссылки и внедренных источников.", "configuration.dotnet.preferCSharpExtension": "Принудительно загружает проекты только с расширением C#. Это может быть полезно при использовании устаревших типов проектов, которые не поддерживаются C# Dev Kit. (Требуется перезагрузка окна)", "configuration.dotnet.projects.binaryLogPath": "Настраивает путь, в который записываются двоичные журналы MSBuild при загрузке проектов, чтобы помочь диагностировать ошибки загрузки.", "configuration.dotnet.projects.enableAutomaticRestore": "Включает автоматическое восстановление NuGet при обнаружении расширением отсутствия ресурсов.", diff --git a/package.nls.tr.json b/package.nls.tr.json index bc7fbcc5b..da1b1e00d 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Bağımsız değişken parametre adıyla eşleştiğinde ipuçlarını bastır", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Parametre adı metodun hedefi ile eşleştiğinde ipuçlarını gizle", "configuration.dotnet.navigation.navigateToDecompiledSources": "Derlenmiş kaynaklarda gezinmeyi etkinleştir.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Kaynak bağlantısı ve ekli kaynaklarda gezinmeyi etkinleştirin.", "configuration.dotnet.preferCSharpExtension": "Projeleri yalnızca C# uzantısıyla yüklenmeye zorlar. Bu, C# Dev Kit tarafından desteklenmeyen eski proje türlerini kullanırken yararlı olabilir. (Pencerenin yeniden yüklenmesi gerekir)", "configuration.dotnet.projects.binaryLogPath": "Yükleme hatalarını teşhis etmeye yardımcı olmak için projeler yüklenirken MSBuild ikili günlüklerinin yazılacağı bir yol belirler.", "configuration.dotnet.projects.enableAutomaticRestore": "Uzantı varlıkların eksik olduğunu algılarsa otomatik NuGet geri yükleme işlemini etkinleştirir.", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index db00a1181..3e647e250 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "当参数与参数名称匹配时抑制提示", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "当参数名称与方法的意图匹配时禁止显示提示", "configuration.dotnet.navigation.navigateToDecompiledSources": "启用对分解源的导航。", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "启用对源链接和嵌入源的导航。", "configuration.dotnet.preferCSharpExtension": "仅强制使用 C# 扩展加载项目。使用 C# Dev Kit 不支持的旧项目类型时,这可能很有用。(需要重新加载窗口)", "configuration.dotnet.projects.binaryLogPath": "设置在加载项目时写入 MSBuild 二进制日志的路径,以帮助诊断加载错误。", "configuration.dotnet.projects.enableAutomaticRestore": "如果扩展检测到缺少资产,则启用“自动 NuGet 还原”。", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index ace6572ce..651a1e18c 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "當引數符合參數名稱時抑制提示", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "當參數名稱符合方法的意圖時,不出現提示", "configuration.dotnet.navigation.navigateToDecompiledSources": "啟用到反向組譯來源的瀏覽。", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "啟用瀏覽至 Source Link 和內嵌來源。", "configuration.dotnet.preferCSharpExtension": "強制專案僅以 C# 延伸模組載入。使用 C# 開發人員套件不支援的舊版專案類型時,這會很有用。(需要重新載入視窗)", "configuration.dotnet.projects.binaryLogPath": "設定載入專案時,寫入 MSBuild 二進位記錄的路徑,以協助診斷載入錯誤。", "configuration.dotnet.projects.enableAutomaticRestore": "如果延伸模組偵測到資產遺失,則啟用自動 NuGet 還原。", From c0f8bdf60a9a53a98ceebf3e9176c78d0fff2f92 Mon Sep 17 00:00:00 2001 From: dotnet-bot Date: Sat, 14 Sep 2024 01:04:03 +0000 Subject: [PATCH 03/14] Localization result of 3e0ea9657da54504db78b48113abbe8cfd94d0f6. --- package.nls.cs.json | 2 +- package.nls.de.json | 2 +- package.nls.es.json | 2 +- package.nls.fr.json | 2 +- package.nls.it.json | 2 +- package.nls.ja.json | 2 +- package.nls.ko.json | 2 +- package.nls.pl.json | 2 +- package.nls.pt-br.json | 2 +- package.nls.ru.json | 2 +- package.nls.tr.json | 2 +- package.nls.zh-cn.json | 2 +- package.nls.zh-tw.json | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.nls.cs.json b/package.nls.cs.json index 5fa75be20..2c91f7046 100644 --- a/package.nls.cs.json +++ b/package.nls.cs.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Potlačit nápovědy, když argument odpovídá názvu parametru", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Potlačit nápovědy, když název parametru odpovídá záměru metody", "configuration.dotnet.navigation.navigateToDecompiledSources": "Povolit navigaci na dekompilované zdroje.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Povolit navigaci ke zdrojovým odkazům a vloženým zdrojům", "configuration.dotnet.preferCSharpExtension": "Vynutí načtení projektů pouze s rozšířením jazyka C#. To může být užitečné při použití starších typů projektů, které jazyk C# Dev Kit nepodporuje. (Vyžaduje opětovné načtení okna)", "configuration.dotnet.projects.binaryLogPath": "Nastaví cestu, do které se při načítání projektů zapisují binární protokoly MSBuildu, aby se usnadnil diagnostika chyb načítání.", "configuration.dotnet.projects.enableAutomaticRestore": "Povolí automatické obnovení balíčku NuGet, pokud rozšíření zjistí, že chybí prostředky.", diff --git a/package.nls.de.json b/package.nls.de.json index d808fb4db..8263ae6c7 100644 --- a/package.nls.de.json +++ b/package.nls.de.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Hinweise unterdrücken, wenn das Argument mit dem Namen des Parameters übereinstimmt", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Hinweise unterdrücken, wenn der Parametername mit der Methodenabsicht übereinstimmt", "configuration.dotnet.navigation.navigateToDecompiledSources": "Aktivieren der Navigation zu dekompilierten Quellen.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Navigation zu Quelllinks und eingebetteten Quellen aktivieren", "configuration.dotnet.preferCSharpExtension": "Erzwingt, dass Projekte nur mit der C#-Erweiterung geladen werden. Dies kann nützlich sein, wenn Legacy-Projekttypen verwendet werden, die vom C# Dev Kit nicht unterstützt werden. (Erfordert erneutes Laden des Fensters)", "configuration.dotnet.projects.binaryLogPath": "Legt einen Pfad fest, in den binäre MSBuild-Protokolle beim Laden von Projekten geschrieben werden, um die Diagnose von Ladefehlern zu unterstützen.", "configuration.dotnet.projects.enableAutomaticRestore": "Aktiviert die automatische NuGet-Wiederherstellung, wenn die Erweiterung erkennt, dass Ressourcen fehlen.", diff --git a/package.nls.es.json b/package.nls.es.json index 83b849f38..b6708eee8 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Suprimir las sugerencias cuando el argumento coincide con el nombre del parámetro", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Suprimir las sugerencias cuando el nombre del parámetro coincida con la intención del método", "configuration.dotnet.navigation.navigateToDecompiledSources": "Habilitar la navegación a fuentes descompiladas.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Habilita la navegación al vínculo de origen y a los orígenes incrustados.", "configuration.dotnet.preferCSharpExtension": "Fuerza la carga de proyectos solo con la extensión de C#. Esto puede ser útil cuando se usan tipos de proyecto heredados que no son compatibles con el kit de desarrollo de C#. (Requiere volver a cargar la ventana)", "configuration.dotnet.projects.binaryLogPath": "Establece una ruta de acceso en la que se escriben los registros binarios de MSBuild al cargar proyectos para ayudar a diagnosticar errores de carga.", "configuration.dotnet.projects.enableAutomaticRestore": "Habilita la restauración automática de NuGet si la extensión detecta que faltan activos.", diff --git a/package.nls.fr.json b/package.nls.fr.json index 6ca801d36..f7f008be1 100644 --- a/package.nls.fr.json +++ b/package.nls.fr.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Supprimer les conseils lorsque l'argument correspond au nom du paramètre", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Supprimer les indicateurs quand le nom de paramètre correspond à l'intention de la méthode", "configuration.dotnet.navigation.navigateToDecompiledSources": "Activez la navigation vers les sources décompliées.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Activez la navigation du lien vers la source et des sources incorporées.", "configuration.dotnet.preferCSharpExtension": "Force le chargement des projets avec l'extension C# uniquement. Cela peut être utile lors de l’utilisation de types de projets hérités qui ne sont pas pris en charge par C# Dev Kit. (Nécessite le rechargement de la fenêtre)", "configuration.dotnet.projects.binaryLogPath": "Définit un chemin d’accès dans lequel les journaux binaires MSBuild sont écrits lors du chargement des projets, pour faciliter le diagnostic des erreurs de chargement.", "configuration.dotnet.projects.enableAutomaticRestore": "Active la restauration automatique de NuGet si l’extension détecte que des actifs sont manquants.", diff --git a/package.nls.it.json b/package.nls.it.json index 88e06fc45..285aaed6a 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Elimina hint quando l'argomento corrisponde al nome del parametro", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Non visualizzare suggerimenti quando il nome del parametro corrisponde alla finalità del metodo", "configuration.dotnet.navigation.navigateToDecompiledSources": "Abilita la navigazione verso origini decompilate.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Abilita la navigazione al collegamento all'origine e alle origini incorporate.", "configuration.dotnet.preferCSharpExtension": "Forza il caricamento dei progetti solo con l'estensione C#. Può essere utile quando si usano tipi di progetto legacy non supportati dal Kit di sviluppo C#. (Richiede il ricaricamento della finestra)", "configuration.dotnet.projects.binaryLogPath": "Imposta un percorso in cui vengono scritti i log binari di MSBuild durante il caricamento dei progetti per diagnosticare gli errori di caricamento.", "configuration.dotnet.projects.enableAutomaticRestore": "Abilita il ripristino automatico di NuGet se l'estensione rileva che mancano asset.", diff --git a/package.nls.ja.json b/package.nls.ja.json index c52938f70..443e8ca3d 100644 --- a/package.nls.ja.json +++ b/package.nls.ja.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "引数がパラメーター名と一致するとき、ヒントを抑制する", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "パラメーター名がメソッドの意図と一致する場合にヒントを非表示にする", "configuration.dotnet.navigation.navigateToDecompiledSources": "逆コンパイルされたソースへのナビゲーションを有効にします。", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Source Link および埋め込みソースに移動できるようにします。", "configuration.dotnet.preferCSharpExtension": "C# 拡張機能のみを使用してプロジェクトを強制的に読み込みます。 これは、C# Dev Kit でサポートされていないレガシ プロジェクトの種類を使用する場合に役立ちます。(ウィンドウの再読み込みが必要)", "configuration.dotnet.projects.binaryLogPath": "読み込みエラーの診断に役立つ、プロジェクト読み込み時に MSBuild バイナリ ログが書き込まれるパスを設定します。", "configuration.dotnet.projects.enableAutomaticRestore": "拡張機能で資産が見つからないと検出された場合に、NuGet の自動復元を有効にします。", diff --git a/package.nls.ko.json b/package.nls.ko.json index 4cac28482..766b0c752 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "인수가 매개 변수 이름과 일치하는 경우 힌트 표시 안 함", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "매개 변수 이름이 메서드의 의도와 일치하는 경우 힌트 표시 안 함", "configuration.dotnet.navigation.navigateToDecompiledSources": "디컴파일된 원본 탐색을 사용하도록 설정합니다.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "소스 링크 및 포함된 원본에 대한 탐색을 사용하도록 설정합니다.", "configuration.dotnet.preferCSharpExtension": "프로젝트가 C# 확장으로만 로드되도록 합니다. C# 개발 키트에서 지원되지 않는 레거시 프로젝트 형식을 사용할 때 유용할 수 있습니다(창 다시 로드 필요).", "configuration.dotnet.projects.binaryLogPath": "로드 오류를 진단하는 데 도움이 되도록 프로젝트를 로드할 때 MSBuild 이진 로그가 기록되는 경로를 설정합니다.", "configuration.dotnet.projects.enableAutomaticRestore": "확장에서 자산이 누락된 것을 감지하는 경우 자동 NuGet 복원을 사용하도록 설정합니다.", diff --git a/package.nls.pl.json b/package.nls.pl.json index 176dd0017..9b84795e0 100644 --- a/package.nls.pl.json +++ b/package.nls.pl.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Pomiń wskazówki, gdy argument pasuje do nazwy parametru", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Pomiń wskazówki, gdy nazwa parametru pasuje do intencji metody", "configuration.dotnet.navigation.navigateToDecompiledSources": "Włącz nawigację do zdekompilowanych źródeł.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Włącz nawigację do linku do źródła i osadzonych źródeł.", "configuration.dotnet.preferCSharpExtension": "Wymusza ładowanie projektów tylko z rozszerzeniem języka C#. Może to być przydatne w przypadku korzystania ze starszych typów projektów, które nie są obsługiwane przez zestaw C# Dev Kit. (Wymaga ponownego załadowania okna)", "configuration.dotnet.projects.binaryLogPath": "Ustawia ścieżkę, w której dzienniki binarne programu MSBuild są zapisywane podczas ładowania projektów, aby ułatwić diagnozowanie błędów ładowania.", "configuration.dotnet.projects.enableAutomaticRestore": "Włącza automatyczne przywracanie pakietu NuGet, jeśli rozszerzenie wykryje brak zasobów.", diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json index 9a7b6e059..cfe480b9d 100644 --- a/package.nls.pt-br.json +++ b/package.nls.pt-br.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Suprimir as dicas quando o argumento corresponder ao nome do parâmetro", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Suprimir as dicas quando o nome do parâmetro corresponder à intenção do método", "configuration.dotnet.navigation.navigateToDecompiledSources": "Habilite a navegação para fontes não compatíveis.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Habilite a navegação para o link de origem e fontes inseridas.", "configuration.dotnet.preferCSharpExtension": "Força o carregamento dos projetos somente com a extensão C#. Isso pode ser útil ao usar tipos de projetos herdados que não são suportados pelo C# Dev Kit. (Requer recarga da janela)", "configuration.dotnet.projects.binaryLogPath": "Define um caminho no qual os registros binários do MSBuild são gravados ao carregar projetos para ajudar a diagnosticar erros de carregamento.", "configuration.dotnet.projects.enableAutomaticRestore": "Habilita a restauração automática do NuGet se a extensão detectar que os ativos estão ausentes.", diff --git a/package.nls.ru.json b/package.nls.ru.json index fd8cd9609..4fa0b793c 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Скрывать подсказки, когда аргумент соответствует имени параметра", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Скрывать подсказки, если имя параметра соответствует намерению метода.", "configuration.dotnet.navigation.navigateToDecompiledSources": "Включить переход к декомпилированным источникам.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Включить навигацию для исходной ссылки и внедренных источников.", "configuration.dotnet.preferCSharpExtension": "Принудительно загружает проекты только с расширением C#. Это может быть полезно при использовании устаревших типов проектов, которые не поддерживаются C# Dev Kit. (Требуется перезагрузка окна)", "configuration.dotnet.projects.binaryLogPath": "Настраивает путь, в который записываются двоичные журналы MSBuild при загрузке проектов, чтобы помочь диагностировать ошибки загрузки.", "configuration.dotnet.projects.enableAutomaticRestore": "Включает автоматическое восстановление NuGet при обнаружении расширением отсутствия ресурсов.", diff --git a/package.nls.tr.json b/package.nls.tr.json index bc7fbcc5b..da1b1e00d 100644 --- a/package.nls.tr.json +++ b/package.nls.tr.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "Bağımsız değişken parametre adıyla eşleştiğinde ipuçlarını bastır", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "Parametre adı metodun hedefi ile eşleştiğinde ipuçlarını gizle", "configuration.dotnet.navigation.navigateToDecompiledSources": "Derlenmiş kaynaklarda gezinmeyi etkinleştir.", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Kaynak bağlantısı ve ekli kaynaklarda gezinmeyi etkinleştirin.", "configuration.dotnet.preferCSharpExtension": "Projeleri yalnızca C# uzantısıyla yüklenmeye zorlar. Bu, C# Dev Kit tarafından desteklenmeyen eski proje türlerini kullanırken yararlı olabilir. (Pencerenin yeniden yüklenmesi gerekir)", "configuration.dotnet.projects.binaryLogPath": "Yükleme hatalarını teşhis etmeye yardımcı olmak için projeler yüklenirken MSBuild ikili günlüklerinin yazılacağı bir yol belirler.", "configuration.dotnet.projects.enableAutomaticRestore": "Uzantı varlıkların eksik olduğunu algılarsa otomatik NuGet geri yükleme işlemini etkinleştirir.", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index db00a1181..3e647e250 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "当参数与参数名称匹配时抑制提示", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "当参数名称与方法的意图匹配时禁止显示提示", "configuration.dotnet.navigation.navigateToDecompiledSources": "启用对分解源的导航。", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "启用对源链接和嵌入源的导航。", "configuration.dotnet.preferCSharpExtension": "仅强制使用 C# 扩展加载项目。使用 C# Dev Kit 不支持的旧项目类型时,这可能很有用。(需要重新加载窗口)", "configuration.dotnet.projects.binaryLogPath": "设置在加载项目时写入 MSBuild 二进制日志的路径,以帮助诊断加载错误。", "configuration.dotnet.projects.enableAutomaticRestore": "如果扩展检测到缺少资产,则启用“自动 NuGet 还原”。", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index ace6572ce..651a1e18c 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -55,7 +55,7 @@ "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchArgumentName": "當引數符合參數名稱時抑制提示", "configuration.dotnet.inlayHints.suppressInlayHintsForParametersThatMatchMethodIntent": "當參數名稱符合方法的意圖時,不出現提示", "configuration.dotnet.navigation.navigateToDecompiledSources": "啟用到反向組譯來源的瀏覽。", - "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "Enable navigation to source link and embedded sources.", + "configuration.dotnet.navigation.navigateToSourceLinkAndEmbeddedSources": "啟用瀏覽至 Source Link 和內嵌來源。", "configuration.dotnet.preferCSharpExtension": "強制專案僅以 C# 延伸模組載入。使用 C# 開發人員套件不支援的舊版專案類型時,這會很有用。(需要重新載入視窗)", "configuration.dotnet.projects.binaryLogPath": "設定載入專案時,寫入 MSBuild 二進位記錄的路徑,以協助診斷載入錯誤。", "configuration.dotnet.projects.enableAutomaticRestore": "如果延伸模組偵測到資產遺失,則啟用自動 NuGet 還原。", From ceac6adc4bec69f879edefe4144542822e36dbde Mon Sep 17 00:00:00 2001 From: David Barbet Date: Fri, 13 Sep 2024 15:19:30 -0700 Subject: [PATCH 04/14] Update TS version --- .eslintrc.js | 2 +- package-lock.json | 1457 +++++------------ package.json | 7 +- src/common.ts | 2 +- src/omnisharp/engines/stdioEngine.ts | 2 +- src/omnisharp/features/codeLensProvider.ts | 6 +- src/omnisharp/features/completionProvider.ts | 6 +- src/omnisharp/features/definitionProvider.ts | 4 +- src/omnisharp/features/diagnosticsProvider.ts | 2 +- .../features/documentSymbolProvider.ts | 2 +- src/omnisharp/features/dotnetTest.ts | 8 +- src/omnisharp/features/hoverProvider.ts | 2 +- src/omnisharp/features/renameProvider.ts | 2 +- .../features/signatureHelpProvider.ts | 2 +- src/omnisharp/features/structureProvider.ts | 2 +- src/omnisharp/languageMiddlewareFeature.ts | 2 +- src/omnisharp/requirementCheck.ts | 2 +- .../downloadAndInstallPackages.ts | 2 +- src/packageManager/fileDownloader.ts | 2 +- .../src/diagnostics/reportIssueCreator.ts | 4 +- .../integrationTests/testAssets/testAssets.ts | 2 +- .../unitTests/packageNlsJson.test.ts | 2 +- .../typeDefinitionProvider.test.ts | 4 +- .../logging/dotnetTestLoggerObserver.test.ts | 2 +- .../packages/fileDownloader.test.ts | 2 +- 25 files changed, 459 insertions(+), 1071 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5a1fd3933..050209c7f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,7 +21,7 @@ module.exports = { rules: { "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/semi": ["error", "always"], + "@typescript-eslint/no-require-imports": "off", // Allow unused vars if prefixed by _ "@typescript-eslint/no-unused-vars": [ "warn", diff --git a/package-lock.json b/package-lock.json index b3e8fbe0d..4b07c3e83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,8 +56,8 @@ "@types/uuid": "^9.0.1", "@types/vscode": "1.73.0", "@types/yauzl": "2.10.0", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/test-electron": "2.3.8", "@vscode/vsce": "3.0.0", @@ -65,7 +65,6 @@ "del": "3.0.0", "eslint": "^8.43.0", "eslint-config-prettier": "^8.8.0", - "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^15.7.0", @@ -89,7 +88,7 @@ "ts-jest": "^29.1.1", "ts-loader": "9.0.0", "ts-node": "9.1.1", - "typescript": "^5.1.6", + "typescript": "5.6.2", "unzipper": "0.10.11", "vscode-oniguruma": "^1.6.1", "vscode-textmate": "^6.0.0", @@ -540,29 +539,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", @@ -1016,23 +992,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-11.12.0.tgz", @@ -1042,12 +1001,6 @@ "node": ">=4" } }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@babel/types": { "version": "7.23.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@babel/types/-/types-7.23.0.tgz", @@ -1093,23 +1046,25 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.11.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha1-sP/QMStKP9LW93I35ySKWtOmgK4=", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -1127,31 +1082,16 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "integrity": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } + "license": "Python-2.0" }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "integrity": "sha1-wftl+PUBeQHN0slRhkuhhFihBgI=", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1162,8 +1102,9 @@ "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1171,17 +1112,12 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@eslint/js": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha1-pUF66EJ4c/HdCLcLNXS0U+Z7X38=", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -1210,42 +1146,20 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.14", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha1-145IGgOfdWbsyWYLTqf+ax/sRCs=", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -1260,10 +1174,11 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha1-Siho111taWPkI7z5C3/RvjQ0CdM=", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -3106,32 +3021,32 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", + "integrity": "sha1-fBhjaTqYNxcDaG4cD6xk/8V2zbE=", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/type-utils": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3139,49 +3054,28 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-8.5.0.tgz", + "integrity": "sha1-1ZDh758x8m1COZmtP2h3IyR+a8w=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3189,40 +3083,18 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha1-OFNB3mW5dvArKVuKylS7T/1rXwc=", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3230,62 +3102,38 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", + "integrity": "sha1-YhWyOqOdu9jd4KTvnuD3RUEMKbE=", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/utils": "8.5.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "*" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha1-RGXZkzHRJ2+PsgMOT5xz/gGgW/k=", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3293,21 +3141,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha1-bldYzy9jqobp3fpOKE4uC4G4dVc=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3319,107 +3169,93 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4=", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=", "dev": true, + "license": "ISC", "dependencies": { - "ms": "2.1.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.3.tgz", + "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha1-TU/+2W0GVFRqN/qluEvc4W2VFjQ=", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha1-EwKN87hm0uPi4sxBk88sHg4ExL8=", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha1-dWZBrbWHhRtcyz4JXa8nrlgchAY=", + "dev": true, + "license": "ISC" + }, "node_modules/@vscode/debugprotocol": { "version": "1.56.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/debugprotocol/-/debugprotocol-1.56.0.tgz", @@ -3582,23 +3418,6 @@ "node": ">=12" } }, - "node_modules/@vscode/l10n-dev/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@vscode/l10n-dev/node_modules/entities": { "version": "4.5.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/entities/-/entities-4.5.0.tgz", @@ -3684,12 +3503,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@vscode/l10n-dev/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@vscode/l10n-dev/node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/uc.micro/-/uc.micro-2.1.0.tgz", @@ -3751,23 +3564,6 @@ "node": ">= 6.0.0" } }, - "node_modules/@vscode/test-electron/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@vscode/test-electron/node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -3795,12 +3591,6 @@ "node": ">= 6" } }, - "node_modules/@vscode/test-electron/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@vscode/vsce": { "version": "3.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/vsce/-/vsce-3.0.0.tgz", @@ -4333,10 +4123,11 @@ "license": "Apache-2.0" }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha1-cWFr3MviXielRDngBG6JynbfIkg=", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4357,8 +4148,9 @@ "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4374,27 +4166,6 @@ "node": ">= 14" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -5857,6 +5628,29 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "license": "MIT" + }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/decompress-response/-/decompress-response-6.0.0.tgz", @@ -5900,8 +5694,9 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=", + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", @@ -6036,27 +5831,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/doctrine/-/doctrine-3.0.0.tgz", @@ -6419,27 +6193,29 @@ } }, "node_modules/eslint": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha1-x4am/Q4LaJQar2JFlvuYcIkZVmg=", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -6449,7 +6225,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -6459,9 +6234,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -6486,50 +6260,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0" - } - }, - "node_modules/eslint-config-standard-with-typescript": { - "version": "35.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-35.0.0.tgz", - "integrity": "sha512-Xa7DY9GgduZyp0qmXxBF0/dB+Vm4/DgWu1lGpNLJV2d46aCaUxTKDEnkzjUWX/1O9S0a+Dhnw7A4oI0JpYzwtw==", - "dev": true, - "dependencies": { - "@typescript-eslint/parser": "^5.50.0", - "eslint-config-standard": "17.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.50.0", - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0", - "eslint-plugin-promise": "^6.0.0", - "typescript": "*" - } - }, "node_modules/eslint-import-resolver-node": { "version": "0.3.7", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", @@ -6999,10 +6729,11 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha1-DNcv6FUOPC6uFWqWpN3c0cisWAA=", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -7079,23 +6810,6 @@ "node": ">= 8" } }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -7109,10 +6823,11 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha1-3rT5JWM5DzIAaJSvYqItuhxGQj8=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7178,12 +6893,6 @@ "node": "*" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/eslint/node_modules/path-key": { "version": "3.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-key/-/path-key-3.1.1.tgz", @@ -7242,12 +6951,13 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz", + "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -7495,10 +7205,11 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha1-qQRQHlfP3S/83tRemaVP71XkYSk=", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7519,8 +7230,9 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.12", @@ -8202,10 +7914,11 @@ } }, "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", + "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -8591,27 +8304,6 @@ "node": ">= 14" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/https-proxy-agent": { "version": "7.0.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", @@ -8624,27 +8316,6 @@ "node": ">= 14" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/human-signals/-/human-signals-2.1.0.tgz", @@ -8686,10 +8357,11 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -8708,8 +8380,9 @@ "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8724,8 +8397,9 @@ "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -9366,29 +9040,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/source-map/-/source-map-0.6.1.tgz", @@ -11459,8 +11110,9 @@ "node_modules/levn": { "version": "0.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -11732,8 +11384,9 @@ "node_modules/merge2": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -11981,12 +11634,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/neo-async/-/neo-async-2.6.2.tgz", @@ -12425,17 +12072,18 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha1-fqHBpdkddk+yghOciP4R4YKjpzQ=", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -12513,8 +12161,9 @@ "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -12850,8 +12499,9 @@ "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -14320,6 +13970,19 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha1-S0kOJxKfHo5oa0XMSrY3FNxg7qE=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-jest/-/ts-jest-29.1.1.tgz", @@ -14526,21 +14189,6 @@ "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tunnel/-/tunnel-0.0.6.tgz", @@ -14567,8 +14215,9 @@ "node_modules/type-check": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -14588,8 +14237,9 @@ "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -14637,9 +14287,9 @@ } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.6.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha1-0d5ntr73fEGCP4It+PCzvP9gpaA=", "dev": true, "bin": { "tsc": "bin/tsc", @@ -15479,10 +15129,11 @@ "dev": true }, "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "version": "1.2.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha1-0sRcbdT7zmIaZvE2y+Mor9BBCzQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16117,21 +15768,6 @@ "semver": "^6.3.1" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "6.3.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-6.3.1.tgz", @@ -16468,26 +16104,11 @@ "globals": "^11.1.0" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "globals": { "version": "11.12.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -16524,20 +16145,20 @@ } }, "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.11.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha1-sP/QMStKP9LW93I35ySKWtOmgK4=", "dev": true }, "@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -16549,22 +16170,13 @@ "argparse": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "integrity": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=", "dev": true }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "js-yaml": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "integrity": "sha1-wftl+PUBeQHN0slRhkuhhFihBgI=", "dev": true, "requires": { "argparse": "^2.0.1" @@ -16573,24 +16185,18 @@ "minimatch": { "version": "3.1.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", "dev": true, "requires": { "brace-expansion": "^1.1.7" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "@eslint/js": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.43.0.tgz", - "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha1-pUF66EJ4c/HdCLcLNXS0U+Z7X38=", "dev": true }, "@gulpjs/messages": { @@ -16609,31 +16215,14 @@ } }, "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.14", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha1-145IGgOfdWbsyWYLTqf+ax/sRCs=", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@humanwhocodes/module-importer": { @@ -16643,9 +16232,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha1-Siho111taWPkI7z5C3/RvjQ0CdM=", "dev": true }, "@isaacs/cliui": { @@ -18143,200 +17732,133 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", + "integrity": "sha1-fBhjaTqYNxcDaG4cD6xk/8V2zbE=", "dev": true, "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/type-utils": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/parser/-/parser-8.5.0.tgz", + "integrity": "sha1-1ZDh758x8m1COZmtP2h3IyR+a8w=", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha1-OFNB3mW5dvArKVuKylS7T/1rXwc=", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" } }, "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", + "integrity": "sha1-YhWyOqOdu9jd4KTvnuD3RUEMKbE=", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/utils": "8.5.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha1-RGXZkzHRJ2+PsgMOT5xz/gGgW/k=", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha1-bldYzy9jqobp3fpOKE4uC4G4dVc=", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4=", "dev": true, "requires": { - "ms": "2.1.2" + "balanced-match": "^1.0.0" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "minimatch": { + "version": "9.0.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "brace-expansion": "^2.0.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "semver": { + "version": "7.6.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.6.3.tgz", + "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=", "dev": true } } }, "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha1-TU/+2W0GVFRqN/qluEvc4W2VFjQ=", "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "dependencies": { - "@types/semver": { - "version": "7.5.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - } + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "8.5.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha1-EwKN87hm0uPi4sxBk88sHg4ExL8=", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" } }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha1-dWZBrbWHhRtcyz4JXa8nrlgchAY=", + "dev": true + }, "@vscode/debugprotocol": { "version": "1.56.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@vscode/debugprotocol/-/debugprotocol-1.56.0.tgz", @@ -18463,15 +17985,6 @@ "wrap-ansi": "^7.0.0" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "entities": { "version": "4.5.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/entities/-/entities-4.5.0.tgz", @@ -18529,12 +18042,6 @@ "brace-expansion": "^2.0.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "uc.micro": { "version": "2.1.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/uc.micro/-/uc.micro-2.1.0.tgz", @@ -18585,15 +18092,6 @@ "debug": "4" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -18614,12 +18112,6 @@ "agent-base": "6", "debug": "4" } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -19009,9 +18501,9 @@ "dev": true }, "acorn": { - "version": "8.8.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.12.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha1-cWFr3MviXielRDngBG6JynbfIkg=", "dev": true }, "acorn-import-attributes": { @@ -19024,7 +18516,7 @@ "acorn-jsx": { "version": "5.3.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=", "dev": true, "requires": {} }, @@ -19034,21 +18526,6 @@ "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "requires": { "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "aggregate-error": { @@ -20177,6 +19654,21 @@ "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, + "debug": { + "version": "4.3.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.7.tgz", + "integrity": "sha1-h5RbQVGgEddtlaGY1xEchlw2ClI=", + "requires": { + "ms": "^2.1.3" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=" + } + } + }, "decompress-response": { "version": "6.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/decompress-response/-/decompress-response-6.0.0.tgz", @@ -20204,7 +19696,7 @@ "deep-is": { "version": "0.1.4", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=", "dev": true }, "deepmerge": { @@ -20297,23 +19789,6 @@ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/doctrine/-/doctrine-3.0.0.tgz", @@ -20597,27 +20072,28 @@ "dev": true }, "eslint": { - "version": "8.43.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.43.0.tgz", - "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", + "version": "8.57.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha1-x4am/Q4LaJQar2JFlvuYcIkZVmg=", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.43.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -20627,7 +20103,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -20637,9 +20112,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "dependencies": { @@ -20694,15 +20168,6 @@ "which": "^2.0.1" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -20710,9 +20175,9 @@ "dev": true }, "eslint-scope": { - "version": "7.2.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha1-3rT5JWM5DzIAaJSvYqItuhxGQj8=", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -20758,12 +20223,6 @@ "brace-expansion": "^1.1.7" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/path-key/-/path-key-3.1.1.tgz", @@ -20812,23 +20271,6 @@ "dev": true, "requires": {} }, - "eslint-config-standard": { - "version": "17.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", - "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", - "dev": true, - "requires": {} - }, - "eslint-config-standard-with-typescript": { - "version": "35.0.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-35.0.0.tgz", - "integrity": "sha512-Xa7DY9GgduZyp0qmXxBF0/dB+Vm4/DgWu1lGpNLJV2d46aCaUxTKDEnkzjUWX/1O9S0a+Dhnw7A4oI0JpYzwtw==", - "dev": true, - "requires": { - "@typescript-eslint/parser": "^5.50.0", - "eslint-config-standard": "17.0.0" - } - }, "eslint-import-resolver-node": { "version": "0.3.7", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", @@ -21181,18 +20623,18 @@ } }, "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha1-DNcv6FUOPC6uFWqWpN3c0cisWAA=", "dev": true }, "espree": { - "version": "9.5.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.1", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/espree/-/espree-9.6.1.tgz", + "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=", "dev": true, "requires": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } @@ -21369,9 +20811,9 @@ "dev": true }, "fast-glob": { - "version": "3.3.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha1-qQRQHlfP3S/83tRemaVP71XkYSk=", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -21390,7 +20832,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fastest-levenshtein": { @@ -21895,9 +21337,9 @@ } }, "globals": { - "version": "13.20.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.24.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/globals/-/globals-13.24.0.tgz", + "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -22164,21 +21606,6 @@ "requires": { "agent-base": "^7.1.0", "debug": "^4.3.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "https-proxy-agent": { @@ -22188,21 +21615,6 @@ "requires": { "agent-base": "^7.0.2", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "human-signals": { @@ -22226,9 +21638,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=", "dev": true }, "immediate": { @@ -22245,7 +21657,7 @@ "import-fresh": { "version": "3.3.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -22255,7 +21667,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", "dev": true } } @@ -22703,21 +22115,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/source-map/-/source-map-0.6.1.tgz", @@ -24260,7 +23657,7 @@ "levn": { "version": "0.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", "dev": true, "requires": { "prelude-ls": "^1.2.1", @@ -24494,7 +23891,7 @@ "merge2": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=", "dev": true }, "micromatch": { @@ -24684,12 +24081,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "neo-async": { "version": "2.6.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/neo-async/-/neo-async-2.6.2.tgz", @@ -25023,9 +24414,9 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha1-fqHBpdkddk+yghOciP4R4YKjpzQ=", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -25033,7 +24424,7 @@ "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" } }, "os-tmpdir": { @@ -25086,7 +24477,7 @@ "parent-module": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", "dev": true, "requires": { "callsites": "^3.0.0" @@ -25346,7 +24737,7 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", "dev": true }, "prettier": { @@ -26408,6 +25799,13 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", "dev": true }, + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha1-S0kOJxKfHo5oa0XMSrY3FNxg7qE=", + "dev": true, + "requires": {} + }, "ts-jest": { "version": "29.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/ts-jest/-/ts-jest-29.1.1.tgz", @@ -26544,15 +25942,6 @@ "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tslib/-/tslib-1.13.0.tgz", "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/tunnel/-/tunnel-0.0.6.tgz", @@ -26572,7 +25961,7 @@ "type-check": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", "dev": true, "requires": { "prelude-ls": "^1.2.1" @@ -26587,7 +25976,7 @@ "type-fest": { "version": "0.20.2", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=", "dev": true }, "type-is": { @@ -26623,9 +26012,9 @@ } }, "typescript": { - "version": "5.1.6", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.6.2", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha1-0d5ntr73fEGCP4It+PCzvP9gpaA=", "dev": true }, "uc.micro": { @@ -27261,9 +26650,9 @@ "dev": true }, "word-wrap": { - "version": "1.2.4", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "version": "1.2.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha1-0sRcbdT7zmIaZvE2y+Mor9BBCzQ=", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index b7ba98d98..eb159c57f 100644 --- a/package.json +++ b/package.json @@ -133,8 +133,8 @@ "@types/uuid": "^9.0.1", "@types/vscode": "1.73.0", "@types/yauzl": "2.10.0", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", "@vscode/l10n-dev": "^0.0.35", "@vscode/test-electron": "2.3.8", "@vscode/vsce": "3.0.0", @@ -142,7 +142,6 @@ "del": "3.0.0", "eslint": "^8.43.0", "eslint-config-prettier": "^8.8.0", - "eslint-config-standard-with-typescript": "^35.0.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^15.7.0", @@ -166,7 +165,7 @@ "ts-jest": "^29.1.1", "ts-loader": "9.0.0", "ts-node": "9.1.1", - "typescript": "^5.1.6", + "typescript": "5.6.2", "unzipper": "0.10.11", "vscode-oniguruma": "^1.6.1", "vscode-textmate": "^6.0.0", diff --git a/src/common.ts b/src/common.ts index 2fb5a6a59..5cf8efa7c 100644 --- a/src/common.ts +++ b/src/common.ts @@ -220,7 +220,7 @@ export function findPowerShell(): string | undefined { if (fs.statSync(candidate).isFile()) { return name; } - } catch (e) { + } catch (_) { /* empty */ } } diff --git a/src/omnisharp/engines/stdioEngine.ts b/src/omnisharp/engines/stdioEngine.ts index 1fda3bcc3..5fa9640d8 100644 --- a/src/omnisharp/engines/stdioEngine.ts +++ b/src/omnisharp/engines/stdioEngine.ts @@ -399,7 +399,7 @@ export class StdioEngine implements IEngine { let packet: protocol.WireProtocol.Packet; try { packet = JSON.parse(line); - } catch (err) { + } catch (_) { // This isn't JSON return; } diff --git a/src/omnisharp/features/codeLensProvider.ts b/src/omnisharp/features/codeLensProvider.ts index ea00eac36..935f81e8e 100644 --- a/src/omnisharp/features/codeLensProvider.ts +++ b/src/omnisharp/features/codeLensProvider.ts @@ -96,7 +96,7 @@ export default class OmniSharpCodeLensProvider extends AbstractProvider implemen if (response && response.Elements) { return createCodeLenses(response.Elements, document.fileName); } - } catch (error) { + } catch (_) { /* empty */ } @@ -162,7 +162,7 @@ export default class OmniSharpCodeLensProvider extends AbstractProvider implemen }; return codeLens; - } catch (error) { + } catch (_) { return undefined; } } @@ -188,7 +188,7 @@ export default class OmniSharpCodeLensProvider extends AbstractProvider implemen let projectInfo: protocol.ProjectInformationResponse; try { projectInfo = await serverUtils.requestProjectInformation(this._server, { FileName: codeLens.fileName }); - } catch (error) { + } catch (_) { return undefined; } diff --git a/src/omnisharp/features/completionProvider.ts b/src/omnisharp/features/completionProvider.ts index 251f340e3..8eb0e0b13 100644 --- a/src/omnisharp/features/completionProvider.ts +++ b/src/omnisharp/features/completionProvider.ts @@ -95,7 +95,7 @@ export default class OmniSharpCompletionProvider extends AbstractProvider implem this.#lastCompletions = lastCompletions; return { items: mappedItems }; - } catch (error) { + } catch (_) { return; } } @@ -115,7 +115,7 @@ export default class OmniSharpCompletionProvider extends AbstractProvider implem try { const response = await serverUtils.getCompletionResolve(this._server, request, token); return this._convertToVscodeCompletionItem(response.Item, item.command?.arguments?.[1] as TextDocument); - } catch (error) { + } catch (_) { return item; } } @@ -155,7 +155,7 @@ export default class OmniSharpCompletionProvider extends AbstractProvider implem const finalPosition = new Position(response.Line, response.Column); editor.selections = [new Selection(finalPosition, finalPosition)]; - } catch (error) { + } catch (_) { return; } } diff --git a/src/omnisharp/features/definitionProvider.ts b/src/omnisharp/features/definitionProvider.ts index 9a8534b3c..a57ceb592 100644 --- a/src/omnisharp/features/definitionProvider.ts +++ b/src/omnisharp/features/definitionProvider.ts @@ -51,7 +51,7 @@ export default class OmniSharpDefinitionProvider try { const gotoDefinitionResponse = await serverUtils.goToDefinition(this._server, req, token); return await this.GetLocationsFromResponse(gotoDefinitionResponse, token); - } catch (error) { + } catch (_) { return []; } } @@ -67,7 +67,7 @@ export default class OmniSharpDefinitionProvider try { const goToTypeDefinitionResponse = await serverUtils.goToTypeDefinition(this._server, req, token); return await this.GetLocationsFromResponse(goToTypeDefinitionResponse, token); - } catch (error) { + } catch (_) { return []; } } diff --git a/src/omnisharp/features/diagnosticsProvider.ts b/src/omnisharp/features/diagnosticsProvider.ts index 8decafb43..9bf31235a 100644 --- a/src/omnisharp/features/diagnosticsProvider.ts +++ b/src/omnisharp/features/diagnosticsProvider.ts @@ -279,7 +279,7 @@ class OmniSharpDiagnosticsProvider extends AbstractSupport { document.uri, diagnosticsInFile.map((x) => x.diagnostic) ); - } catch (error) { + } catch (_) { return; } } diff --git a/src/omnisharp/features/documentSymbolProvider.ts b/src/omnisharp/features/documentSymbolProvider.ts index 532f3d19d..88bacf3b9 100644 --- a/src/omnisharp/features/documentSymbolProvider.ts +++ b/src/omnisharp/features/documentSymbolProvider.ts @@ -26,7 +26,7 @@ export default class OmniSharpDocumentSymbolProvider extends AbstractSupport imp } return []; - } catch (error) { + } catch (_) { return []; } } diff --git a/src/omnisharp/features/dotnetTest.ts b/src/omnisharp/features/dotnetTest.ts index ebd3805d0..d9f583b63 100644 --- a/src/omnisharp/features/dotnetTest.ts +++ b/src/omnisharp/features/dotnetTest.ts @@ -190,7 +190,7 @@ export default class TestManager extends AbstractProvider { let projectInfo: protocol.ProjectInformationResponse; try { projectInfo = await serverUtils.requestProjectInformation(this._server, { FileName: fileName }); - } catch (error) { + } catch (_) { return undefined; } @@ -465,7 +465,7 @@ export default class TestManager extends AbstractProvider { let projectInfo: protocol.ProjectInformationResponse; try { projectInfo = await serverUtils.requestProjectInformation(this._server, { FileName: fileName }); - } catch (error) { + } catch (_) { throw new Error('Could not determine project type.'); } @@ -708,7 +708,7 @@ class DebugEventListener { let event: DebuggerEventsProtocol.DebuggerEvent; try { event = DebuggerEventsProtocol.decodePacket(buffer); - } catch (e) { + } catch (_) { this._eventStream.post(new DotNetTestDebugWarning('Invalid event received from debugger')); return; } @@ -803,7 +803,7 @@ class DebugEventListener { try { serverUtils.debugTestStop(this._server, request); this.close(); - } catch (error) { + } catch (_) { return; } } diff --git a/src/omnisharp/features/hoverProvider.ts b/src/omnisharp/features/hoverProvider.ts index b812413dc..6c7f76ebe 100644 --- a/src/omnisharp/features/hoverProvider.ts +++ b/src/omnisharp/features/hoverProvider.ts @@ -26,7 +26,7 @@ export default class OmniSharpHoverProvider extends AbstractSupport implements H markdownString.appendMarkdown(response.Markdown); return new Hover(markdownString); - } catch (error) { + } catch (_) { return undefined; } } diff --git a/src/omnisharp/features/renameProvider.ts b/src/omnisharp/features/renameProvider.ts index e160b06bb..d0a0a347b 100644 --- a/src/omnisharp/features/renameProvider.ts +++ b/src/omnisharp/features/renameProvider.ts @@ -44,7 +44,7 @@ export default class OmniSharpRenameProvider extends AbstractSupport implements // Allow language middlewares to re-map its edits if necessary. const result = await this._languageMiddlewareFeature.remap('remapWorkspaceEdit', edit, token); return result; - } catch (error) { + } catch (_) { return undefined; } } diff --git a/src/omnisharp/features/signatureHelpProvider.ts b/src/omnisharp/features/signatureHelpProvider.ts index 1cea58fc4..44791bf5a 100644 --- a/src/omnisharp/features/signatureHelpProvider.ts +++ b/src/omnisharp/features/signatureHelpProvider.ts @@ -55,7 +55,7 @@ export default class OmniSharpSignatureHelpProvider extends AbstractSupport impl } return ret; - } catch (error) { + } catch (_) { return undefined; } } diff --git a/src/omnisharp/features/structureProvider.ts b/src/omnisharp/features/structureProvider.ts index 6a0c7a52f..437e50eeb 100644 --- a/src/omnisharp/features/structureProvider.ts +++ b/src/omnisharp/features/structureProvider.ts @@ -35,7 +35,7 @@ export class OmniSharpStructureProvider extends AbstractSupport implements Foldi } return ranges; - } catch (error) { + } catch (_) { return []; } } diff --git a/src/omnisharp/languageMiddlewareFeature.ts b/src/omnisharp/languageMiddlewareFeature.ts index bca7e54e5..cfaba25ae 100644 --- a/src/omnisharp/languageMiddlewareFeature.ts +++ b/src/omnisharp/languageMiddlewareFeature.ts @@ -79,7 +79,7 @@ export class LanguageMiddlewareFeature implements IDisposable { } return remapped; - } catch (error) { + } catch (_) { // Something happened while remapping. Return the original. return original; } diff --git a/src/omnisharp/requirementCheck.ts b/src/omnisharp/requirementCheck.ts index ead017f35..5c5e4d2f7 100644 --- a/src/omnisharp/requirementCheck.ts +++ b/src/omnisharp/requirementCheck.ts @@ -74,7 +74,7 @@ async function checkRequirements(): Promise { let monoError = false; try { await monoResolver.getHostExecutableInfo(); - } catch (e) { + } catch (_) { monoError = true; } diff --git a/src/packageManager/downloadAndInstallPackages.ts b/src/packageManager/downloadAndInstallPackages.ts index d75aae2fa..a148a666e 100644 --- a/src/packageManager/downloadAndInstallPackages.ts +++ b/src/packageManager/downloadAndInstallPackages.ts @@ -67,7 +67,7 @@ export async function downloadAndInstallPackages( if (await installFileExists(pkg.installPath, InstallFileType.Begin)) { await deleteInstallFile(pkg.installPath, InstallFileType.Begin); } - } catch (error) { + } catch (_) { /* empty */ } } diff --git a/src/packageManager/fileDownloader.ts b/src/packageManager/fileDownloader.ts index cea218574..b1535a213 100644 --- a/src/packageManager/fileDownloader.ts +++ b/src/packageManager/fileDownloader.ts @@ -43,7 +43,7 @@ export async function DownloadFile( const buffer = await downloadFile(description, fallbackUrl, eventStream, networkSettingsProvider); eventStream.post(new DownloadSuccess(' Done!')); return buffer; - } catch (fallbackUrlError) { + } catch (_) { throw primaryUrlError; } } else { diff --git a/src/razor/src/diagnostics/reportIssueCreator.ts b/src/razor/src/diagnostics/reportIssueCreator.ts index 75735c46c..f2ca9a499 100644 --- a/src/razor/src/diagnostics/reportIssueCreator.ts +++ b/src/razor/src/diagnostics/reportIssueCreator.ts @@ -212,7 +212,7 @@ ${csharpTextDocument.getText()}`; csharpContent = `${csharpContent} ${errorSuffix}`; } - } catch (e) { + } catch (_) { csharpContent = `${csharpContent} ${errorSuffix}`; } @@ -239,7 +239,7 @@ ${htmlTextDocument.getText()}`; htmlContent = `${htmlContent} ${errorSuffix}`; } - } catch (e) { + } catch (_) { htmlContent = `${htmlContent} ${errorSuffix}`; } diff --git a/test/lsptoolshost/integrationTests/testAssets/testAssets.ts b/test/lsptoolshost/integrationTests/testAssets/testAssets.ts index 965204fca..8e9b8d405 100644 --- a/test/lsptoolshost/integrationTests/testAssets/testAssets.ts +++ b/test/lsptoolshost/integrationTests/testAssets/testAssets.ts @@ -59,7 +59,7 @@ export class TestAssetWorkspace { try { await cleanUpRoutine(); - } catch (error) { + } catch (_error) { // Its possible that cleanup fails for locked files etc, for this reason retry is added. await sleep(); await cleanUpRoutine(); diff --git a/test/lsptoolshost/unitTests/packageNlsJson.test.ts b/test/lsptoolshost/unitTests/packageNlsJson.test.ts index b4dd49fdc..dc3725ea6 100644 --- a/test/lsptoolshost/unitTests/packageNlsJson.test.ts +++ b/test/lsptoolshost/unitTests/packageNlsJson.test.ts @@ -21,7 +21,7 @@ describe('package.nls.json validation tests', () => { for (const key of keysWithURLExamples) { try { expect(packageNLSJson[key]).toContain('\u200b'); - } catch (e) { + } catch (_) { throw "Missing \\u200b in example urls, please run 'gulp fixLocURLs' and check in those changes."; } } diff --git a/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts b/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts index 3b4bb74dd..f0b450560 100644 --- a/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts +++ b/test/omnisharp/omnisharpIntegrationTests/typeDefinitionProvider.test.ts @@ -68,9 +68,9 @@ describeIfNotRazorOrGenerator(`${OmniSharpDefinitionProvider.name}: ${testAssetW ) ); expect(definitionList.length).toEqual(2); - expect(definitionList[0]).toBeDefined; + expect(definitionList[0]).toBeDefined(); expect(definitionList[0].uri.path).toContain('typeDefinition.cs'); - expect(definitionList[1]).toBeDefined; + expect(definitionList[1]).toBeDefined(); expect(definitionList[1].uri.path).toContain('typeDefinition.cs'); }); diff --git a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts index dc01fc6bc..4de7ae08c 100644 --- a/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts +++ b/test/omnisharp/omnisharpUnitTests/logging/dotnetTestLoggerObserver.test.ts @@ -63,7 +63,7 @@ describe(`${DotNetTestLoggerObserver.name}`, () => { [new DotNetTestRunInContextStart('foo', 1, 2), new DotNetTestDebugInContextStart('foo', 1, 2)].forEach( (event: BaseEvent) => { test(`${event.constructor.name}: File name and line/column are logged`, () => { - expect(appendedMessage).toBeFalsy; + expect(appendedMessage).toBeFalsy(); observer.post(event); expect(appendedMessage).toContain('foo'); expect(appendedMessage).toContain('2'); diff --git a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts index 73719d77e..15c4102d9 100644 --- a/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts +++ b/test/omnisharp/omnisharpUnitTests/packages/fileDownloader.test.ts @@ -135,7 +135,7 @@ describe('FileDownloader', () => { ]; try { await DownloadFile(fileDescription, eventStream, networkSettingsProvider, getURL(errorUrlPath)); - } catch (error) { + } catch (_) { expect(eventBus.getEvents()).toStrictEqual(eventsSequence); } }); From 1426bf416889642b15b7276552932b82badc7113 Mon Sep 17 00:00:00 2001 From: David Barbet Date: Thu, 12 Sep 2024 15:25:09 -0700 Subject: [PATCH 05/14] Update integration tests to run against C# Dev Kit as well Fixup tasks Separate integration tests into more CI jobs --- .vscode/launch.json | 43 ++- CONTRIBUTING.md | 4 +- azure-pipelines.yml | 77 +++-- azure-pipelines/test-matrix.yml | 30 ++ azure-pipelines/test.yml | 12 +- jest.config.ts | 3 +- package-lock.json | 33 ++- package.json | 5 +- src/omnisharp/features/dotnetTest.ts | 2 +- src/packageManager/zipInstaller.ts | 5 +- .../src/document/razorDocumentSynchronizer.ts | 2 +- .../src/html/htmlTagCompletionProvider.ts | 2 +- tasks/testTasks.ts | 275 ++++++++++++------ test/csharp-standalone-profile.code-profile | 1 - test/csharp-test-profile.code-profile | 1 + .../buildDiagnostics.integration.test.ts | 2 +- .../classification.integration.test.ts | 2 +- .../codeactions.integration.test.ts | 2 +- .../codelens.integration.test.ts | 2 +- .../commandEnablement.integration.test.ts | 2 +- .../completion.integration.test.ts | 2 +- .../documentDiagnostics.integration.test.ts | 18 +- ...documentSymbolProvider.integration.test.ts | 2 +- .../formatting.integration.test.ts | 2 +- ...formattingEditorConfig.integration.test.ts | 2 +- .../gotoDefinition.integration.test.ts | 82 +++++- .../gotoImplementation.integration.test.ts | 2 +- .../hover.integration.test.ts | 2 +- .../integrationTests/integrationHelpers.ts | 53 +++- .../lspInlayHints.integration.test.ts | 2 +- .../onAutoInsert.integration.test.ts | 2 +- .../references.integration.test.ts | 2 +- .../signatureHelp.integration.test.ts | 2 +- .../devkit_slnWithCsproj.code-workspace | 13 + ...omnisharp_lsp_slnWithCsproj.code-workspace | 14 - .../omnisharp_slnWithCsproj.code-workspace | 14 - ...workspace => slnWithCsproj.code-workspace} | 2 +- .../unitTests.integration.test.ts | 5 +- .../workspaceDiagnostics.integration.test.ts | 8 +- .../omnisharp_BasicRazorApp2_1.code-workspace | 3 +- ...isharp_lsp_BasicRazorApp2_1.code-workspace | 3 +- .../omnisharp_lsp_singleCsproj.code-workspace | 3 +- .../omnisharp_singleCsproj.code-workspace | 3 +- ...arp_lsp_slnFilterWithCsproj.code-workspace | 1 + ...nisharp_slnFilterWithCsproj.code-workspace | 3 +- ...sp_tools_host_slnWithCsproj.code-workspace | 3 +- ...omnisharp_lsp_slnWithCsproj.code-workspace | 3 +- .../omnisharp_slnWithCsproj.code-workspace | 1 + .../slnWithGenerator/.vscode/settings.json | 3 +- ...kspace => BasicRazorApp2_1.code-workspace} | 3 +- test/vscodeLauncher.ts | 152 +++++----- 51 files changed, 603 insertions(+), 312 deletions(-) create mode 100644 azure-pipelines/test-matrix.yml delete mode 100644 test/csharp-standalone-profile.code-profile create mode 100644 test/csharp-test-profile.code-profile create mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace delete mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace delete mode 100644 test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace rename test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/{lsp_tools_host_slnWithCsproj.code-workspace => slnWithCsproj.code-workspace} (84%) rename test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/{lsp_tools_host_BasicRazorApp2_1.code-workspace => BasicRazorApp2_1.code-workspace} (76%) diff --git a/.vscode/launch.json b/.vscode/launch.json index 85a3417f6..377cb83ac 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -19,10 +19,10 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", - "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace", + "csharp-test-profile", + "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/lsptoolshost/integrationTests" ], @@ -36,6 +36,31 @@ "preLaunchTask": "buildDev", "internalConsoleOptions": "openOnSessionStart" }, + { + "name": "[DevKit] Launch Current File slnWithCsproj Integration Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + // Launch VSCode using a specific profile to ensure that user settings are not used. + // This profile must be imported into vscode before running this launch configuration. + // The profile can be found under /test/csharp-test-profile. + "--profile", + "csharp-test-profile", + "${workspaceRoot}/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace", + "--extensionDevelopmentPath=${workspaceRoot}", + "--extensionTestsPath=${workspaceRoot}/out/test/lsptoolshost/integrationTests" + ], + "env": { + "CODE_EXTENSIONS_PATH": "${workspaceRoot}", + "TEST_FILE_FILTER": "${file}", + }, + "sourceMaps": true, + "outFiles": ["${workspaceRoot}/dist/*.js", "${workspaceRoot}/out/test/**/*.js"], + "resolveSourceMapLocations": ["${workspaceFolder}/**", "!**/node_modules/**"], + "preLaunchTask": "buildDev", + "internalConsoleOptions": "openOnSessionStart" + }, { "name": "Launch Current File BasicRazorApp2_1 Integration Tests", "type": "extensionHost", @@ -44,9 +69,9 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", + "csharp-test-profile", "${workspaceRoot}/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/razor/razorIntegrationTests" @@ -69,9 +94,9 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", + "csharp-test-profile", "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" @@ -94,9 +119,9 @@ "args": [ // Launch VSCode using a specific profile to ensure that user settings are not used. // This profile must be imported into vscode before running this launch configuration. - // The profile can be found under /test/csharp-standalone-profile. + // The profile can be found under /test/csharp-test-profile. "--profile", - "csharp-standalone-profile", + "csharp-test-profile", "${workspaceRoot}/test/omnisharp/omnisharpIntegrationTests/testAssets/${input:omnisharpAssetName}/.vscode/omnisharp_lsp_${input:omnisharpAssetName}.code-workspace", "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/omnisharp/omnisharpIntegrationTests" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d885f3285..f26f949b6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -56,9 +56,9 @@ To run all tests, execute `npm run test`. To debug unit tests locally, press F5 in VS Code with the "Launch Tests" debug configuration selected. To debug integration tests -1. Import the `csharp-standalone-profile.code-profile` in VSCode to setup a clean profile in which to run integration tests. This must be imported at least once to use the launch configurations. +1. Import the `csharp-test-profile.code-profile` in VSCode to setup a clean profile in which to run integration tests. This must be imported at least once to use the launch configurations (ensure the extensions are updated in the profile). 2. Open any integration test file and F5 launch with the correct launch configuration selected. - - For integration tests inside `test/lsptoolshost`, use `Launch Current File slnWithCsproj Integration Tests` + - For integration tests inside `test/lsptoolshost`, use either `Launch Current File slnWithCsproj Integration Tests` or `[DevKit] Launch Current File slnWithCsproj Integration Tests` (to run tests using C# + C# Dev Kit) - For integration tests inside `test/razor`, use `Launch Current File BasicRazorApp2_1 Integration Tests` - For integration tests inside `test/omnisharp`, use one of the `Omnisharp:` current file profiles diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 72375d570..ce5870df0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -24,58 +24,55 @@ stages: isOfficial: false signType: test -- stage: Test_Linux_Stage - displayName: Test Linux +- stage: + displayName: Test Linux (.NET 6) dependsOn: [] jobs: - - job: Test_Linux_Job - displayName: Test Linux - strategy: - matrix: - DotNet6: - containerName: mcr.microsoft.com/dotnet/sdk:6.0 - DotNet7: - containerName: mcr.microsoft.com/dotnet/sdk:7.0 - DotNet8: - containerName: mcr.microsoft.com/dotnet/sdk:8.0 - pool: - name: NetCore-Public - demands: ImageOverride -equals 1es-ubuntu-2004-open - container: $[ variables['containerName'] ] - steps: - - template: azure-pipelines/test.yml - parameters: - # Prefer the dotnet from the container. - installDotNet: false - installAdditionalLinuxDependencies: true + - template: azure-pipelines/test-matrix.yml + parameters: + # Prefer the dotnet from the container. + installDotNet: false + installAdditionalLinuxDependencies: true + pool: + name: NetCore-Public + demands: ImageOverride -equals 1es-ubuntu-2004-open + containerName: mcr.microsoft.com/dotnet/sdk:6.0 + +- stage: + displayName: Test Linux (.NET 8) + dependsOn: [] + jobs: + - template: azure-pipelines/test-matrix.yml + parameters: + # Prefer the dotnet from the container. + installDotNet: false + installAdditionalLinuxDependencies: true + pool: + name: NetCore-Public + demands: ImageOverride -equals 1es-ubuntu-2004-open + containerName: mcr.microsoft.com/dotnet/sdk:8.0 - stage: Test_Windows_Stage displayName: Test Windows dependsOn: [] jobs: - - job: Test_Windows_Job - displayName: Test Windows - pool: - name: NetCore-Public - demands: ImageOverride -equals 1es-windows-2022-open - steps: - - template: azure-pipelines/test.yml - parameters: - installDotNet: true + - template: azure-pipelines/test-matrix.yml + parameters: + installDotNet: true + pool: + name: NetCore-Public + demands: ImageOverride -equals 1es-windows-2022-open - stage: Test_MacOS_Stage displayName: Test MacOS dependsOn: [] jobs: - - job: Test_MacOS_Job - displayName: Test MacOS - pool: - name: Azure Pipelines - vmImage: macOS-13 - steps: - - template: azure-pipelines/test.yml - parameters: - installDotNet: true + - template: azure-pipelines/test-matrix.yml + parameters: + installDotNet: true + pool: + name: Azure Pipelines + vmImage: macOS-13 - stage: Test_OmniSharp displayName: Test OmniSharp diff --git a/azure-pipelines/test-matrix.yml b/azure-pipelines/test-matrix.yml new file mode 100644 index 000000000..dacf360ff --- /dev/null +++ b/azure-pipelines/test-matrix.yml @@ -0,0 +1,30 @@ +parameters: + - name: pool + type: object + - name: containerName + type: string + default: '' + - name: installDotNet + type: boolean + - name: installAdditionalLinuxDependencies + type: boolean + default: false + +jobs: +- job: + strategy: + matrix: + CSharpTests: + npmCommand: 'test:withoutDevKit' + DevKitTests: + npmCommand: test:integration:devkit + pool: ${{ parameters.pool }} + ${{ if parameters.containerName }}: + container: ${{ parameters.containerName }} + steps: + - template: /azure-pipelines/test.yml@self + parameters: + # Prefer the dotnet from the container. + installDotNet: false + installAdditionalLinuxDependencies: true + npmCommand: $(npmCommand) \ No newline at end of file diff --git a/azure-pipelines/test.yml b/azure-pipelines/test.yml index e4da1d476..bde85db28 100644 --- a/azure-pipelines/test.yml +++ b/azure-pipelines/test.yml @@ -4,6 +4,8 @@ parameters: - name: installAdditionalLinuxDependencies type: boolean default: false + - name: npmCommand + type: string steps: - checkout: self @@ -23,8 +25,8 @@ steps: parameters: installAdditionalLinuxDependencies: ${{ parameters.installAdditionalLinuxDependencies }} -- script: npm run test - displayName: 🧪 Run unit and integration tests +- script: npm run ${{ parameters.npmCommand }} + displayName: 🧪 Run $(Agent.JobName) env: DISPLAY: :99.0 @@ -37,11 +39,11 @@ steps: searchFolder: '$(Build.SourcesDirectory)/out' publishRunAttachments: true mergeTestResults: true - testRunTitle: $(Agent.JobName) (Attempt $(System.JobAttempt)) + testRunTitle: $(System.StageDisplayName) $(Agent.JobName) (Attempt $(System.JobAttempt)) - task: PublishPipelineArtifact@1 condition: failed() displayName: 'Upload integration test logs' inputs: - targetPath: '$(Build.SourcesDirectory)/.vscode-test/user-data/logs' - artifactName: 'VSCode Test Logs ($(Agent.JobName)-$(System.JobAttempt))' + targetPath: '$(Build.SourcesDirectory)/out/logs' + artifactName: 'Test Logs ($(System.StageDisplayName)-$(Agent.JobName)-$(System.JobAttempt))' diff --git a/jest.config.ts b/jest.config.ts index cf4a2d1de..3b98eb49c 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -27,7 +27,8 @@ const config: Config = { // Azure DevOps does not display test suites (it ignores them entirely). // So we have to put all the info in the test case name so the UI shows anything relatively useful. // See https://github.com/microsoft/azure-pipelines-tasks/issues/7659 - titleTemplate: '{filename} / {suitename} / {title}', + classNameTemplate: '{suitename}', + titleTemplate: `${process.env.JEST_SUITE_NAME} {suitename} / {title}`, }, ], ], diff --git a/package-lock.json b/package-lock.json index 4b07c3e83..c290c8ef6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "@types/fs-extra": "5.0.4", "@types/gulp": "4.0.5", "@types/minimist": "1.2.1", - "@types/node": "16.11.38", + "@types/node": "20.14.8", "@types/semver": "7.3.13", "@types/tmp": "0.0.33", "@types/unzipper": "^0.9.1", @@ -2910,9 +2910,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.11.38", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-16.11.38.tgz", - "integrity": "sha512-hjO/0K140An3GWDw2HJfq7gko3wWeznbjXgg+rzPdVzhe198hp4x2i1dgveAOEiFKd8sOilAxzoSJiVv5P/CUg==" + "version": "20.14.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-20.14.8.tgz", + "integrity": "sha1-RcJqKl3ibDU0qVBFMN2zsnzgMaw=", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -14291,6 +14295,7 @@ "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/typescript/-/typescript-5.6.2.tgz", "integrity": "sha1-0d5ntr73fEGCP4It+PCzvP9gpaA=", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14384,6 +14389,12 @@ "fastest-levenshtein": "^1.0.7" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha1-vNU5iT0AtW6WT9JlekhmsiGmVhc=", + "license": "MIT" + }, "node_modules/universal-github-app-jwt": { "version": "1.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", @@ -17621,9 +17632,12 @@ "dev": true }, "@types/node": { - "version": "16.11.38", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-16.11.38.tgz", - "integrity": "sha512-hjO/0K140An3GWDw2HJfq7gko3wWeznbjXgg+rzPdVzhe198hp4x2i1dgveAOEiFKd8sOilAxzoSJiVv5P/CUg==" + "version": "20.14.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/@types/node/-/node-20.14.8.tgz", + "integrity": "sha1-RcJqKl3ibDU0qVBFMN2zsnzgMaw=", + "requires": { + "undici-types": "~5.26.4" + } }, "@types/normalize-package-data": { "version": "2.4.1", @@ -26085,6 +26099,11 @@ "integrity": "sha1-1DQkbjmERHQN1/5MlUPkAq2Z5Mo=", "dev": true }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha1-vNU5iT0AtW6WT9JlekhmsiGmVhc=" + }, "universal-github-app-jwt": { "version": "1.1.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", diff --git a/package.json b/package.json index eb159c57f..2c3ed3d51 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,8 @@ "compileDev": "tsc -p ./ && npx eslint ./ && webpack --mode development && npm run l10nDevGenerateLocalizationBundle", "watch": "tsc -watch -p ./", "test": "tsc -p ./ && gulp test", - "test:integration": "tsc -p ./ && gulp test:integration", + "test:withoutDevKit": "tsc -p ./ && gulp test:withoutDevKit", + "test:integration:devkit": "tsc -p ./ && gulp test:integration:devkit", "test:razor": "tsc -p ./ && npm run compile:razorTextMate && gulp test:razor", "test:razorintegration": "tsc -p ./ && gulp test:razorintegration", "test:artifacts": "tsc -p ./ && gulp test:artifacts", @@ -126,7 +127,7 @@ "@types/fs-extra": "5.0.4", "@types/gulp": "4.0.5", "@types/minimist": "1.2.1", - "@types/node": "16.11.38", + "@types/node": "20.14.8", "@types/semver": "7.3.13", "@types/tmp": "0.0.33", "@types/unzipper": "^0.9.1", diff --git a/src/omnisharp/features/dotnetTest.ts b/src/omnisharp/features/dotnetTest.ts index d9f583b63..a7bf07204 100644 --- a/src/omnisharp/features/dotnetTest.ts +++ b/src/omnisharp/features/dotnetTest.ts @@ -41,7 +41,7 @@ const TelemetryReportingDelay = 2 * 60 * 1000; // two minutes export default class TestManager extends AbstractProvider { private _runCounts?: { [testFrameworkName: string]: number }; private _debugCounts?: { [testFrameworkName: string]: number }; - private _telemetryIntervalId?: NodeJS.Timer = undefined; + private _telemetryIntervalId?: NodeJS.Timeout = undefined; private _eventStream: EventStream; constructor( diff --git a/src/packageManager/zipInstaller.ts b/src/packageManager/zipInstaller.ts index 832d5b88f..5e99ff418 100644 --- a/src/packageManager/zipInstaller.ts +++ b/src/packageManager/zipInstaller.ts @@ -43,10 +43,7 @@ export async function InstallZip( } catch (err) { const error = err as NodeJS.ErrnoException; // Hack for TypeScript to type err correctly return reject( - new NestedError( - 'Error creating directory for zip directory entry:' + error.code ?? '', - error - ) + new NestedError('Error creating directory for zip directory entry:' + error.code, error) ); } } else { diff --git a/src/razor/src/document/razorDocumentSynchronizer.ts b/src/razor/src/document/razorDocumentSynchronizer.ts index d98274662..e8e8cbc80 100644 --- a/src/razor/src/document/razorDocumentSynchronizer.ts +++ b/src/razor/src/document/razorDocumentSynchronizer.ts @@ -256,7 +256,7 @@ interface SynchronizationContext { readonly projectedDocument: IProjectedDocument; readonly logIdentifier: number; readonly toHostDocumentVersion: number; - readonly timeoutId: NodeJS.Timer; + readonly timeoutId: NodeJS.Timeout; readonly projectedDocumentSynchronized: () => void; readonly onProjectedDocumentSynchronized: Promise; readonly projectedTextDocumentSynchronized: () => void; diff --git a/src/razor/src/html/htmlTagCompletionProvider.ts b/src/razor/src/html/htmlTagCompletionProvider.ts index 7c7792f5f..aef25c419 100644 --- a/src/razor/src/html/htmlTagCompletionProvider.ts +++ b/src/razor/src/html/htmlTagCompletionProvider.ts @@ -15,7 +15,7 @@ import { RazorLanguageServiceClient } from '../razorLanguageServiceClient'; import { LanguageKind } from '../rpc/languageKind'; export class HtmlTagCompletionProvider { - private timeout: NodeJS.Timer | undefined = void 0; + private timeout: NodeJS.Timeout | undefined = void 0; private enabled = false; private htmlLanguageService: HtmlLanguageService | undefined; diff --git a/tasks/testTasks.ts b/tasks/testTasks.ts index c84e53a1a..f8d705d48 100644 --- a/tasks/testTasks.ts +++ b/tasks/testTasks.ts @@ -7,94 +7,142 @@ import * as fs from 'fs'; import * as gulp from 'gulp'; import * as path from 'path'; import { codeExtensionPath, rootPath, outPath } from './projectPaths'; -import spawnNode from './spawnNode'; import * as jest from 'jest'; import { Config } from '@jest/types'; import { jestOmniSharpUnitTestProjectName } from '../test/omnisharp/omnisharpUnitTests/jest.config'; import { jestUnitTestProjectName } from '../test/lsptoolshost/unitTests/jest.config'; import { razorTestProjectName } from '../test/razor/razorTests/jest.config'; import { jestArtifactTestsProjectName } from '../test/lsptoolshost/artifactTests/jest.config'; +import { prepareVSCodeAndExecuteTests } from '../test/vscodeLauncher'; -gulp.task('test:razor', async () => { - runJestTest(razorTestProjectName); -}); - -const razorIntegrationTestProjects = ['BasicRazorApp2_1']; -for (const projectName of razorIntegrationTestProjects) { - gulp.task(`test:razorintegration:${projectName}`, async () => - runIntegrationTest( - projectName, - path.join('razor', 'razorIntegrationTests'), - `Razor Test Integration ${projectName}` - ) - ); -} - -gulp.task( - 'test:razorintegration', - gulp.series(razorIntegrationTestProjects.map((projectName) => `test:razorintegration:${projectName}`)) -); +createUnitTestSubTasks(); +createIntegrationTestSubTasks(); +createOmniSharpTestSubTasks(); gulp.task('test:artifacts', async () => { runJestTest(jestArtifactTestsProjectName); }); -gulp.task('omnisharptest:unit', async () => { - await runJestTest(jestOmniSharpUnitTestProjectName); -}); +// Overall test command that runs everything except O# tests. +gulp.task('test', gulp.series('test:unit', 'test:integration')); + +// Bit of a special task for CI. We want to generally combine test runs to save preparation time. +// However the Dev Kit integration tests are much slower than everything else (VSCode restarts on each test file). +// So we can have one run for all of the general C# extension tests, and then another for Dev Kit integration tests. +gulp.task('test:withoutDevKit', gulp.series('test:unit', 'test:integration:csharp', 'test:razorintegration')); + +gulp.task('test:razor', gulp.series('test:unit:razor', 'test:razorintegration')); + +// OmniSharp tests are run separately in CI, so we have separate tasks for these. +// TODO: Enable lsp integration tests once tests for unimplemented features are disabled. +gulp.task('omnisharptest', gulp.series('omnisharptest:unit', 'omnisharptest:integration:stdio')); + +function createUnitTestSubTasks() { + gulp.task('test:unit:csharp', async () => { + await runJestTest(jestUnitTestProjectName); + }); + + gulp.task('test:unit:razor', async () => { + runJestTest(razorTestProjectName); + }); + + gulp.task('test:unit', gulp.series('test:unit:csharp', 'test:unit:razor')); +} + +async function createIntegrationTestSubTasks() { + const integrationTestProjects = ['slnWithCsproj']; + for (const projectName of integrationTestProjects) { + gulp.task(`test:integration:csharp:${projectName}`, async () => + runIntegrationTest(projectName, path.join('lsptoolshost', 'integrationTests'), `[C#][${projectName}]`) + ); -const omnisharpIntegrationTestProjects = ['singleCsproj', 'slnWithCsproj', 'slnFilterWithCsproj', 'BasicRazorApp2_1']; + gulp.task(`test:integration:devkit:${projectName}`, async () => + runDevKitIntegrationTests( + projectName, + path.join('lsptoolshost', 'integrationTests'), + `[DevKit][${projectName}]` + ) + ); + } -for (const projectName of omnisharpIntegrationTestProjects) { - gulp.task(`omnisharptest:integration:${projectName}:stdio`, async () => - runOmnisharpJestIntegrationTest(projectName, 'stdio', `OmniSharp Test Integration ${projectName} STDIO}`) + gulp.task( + 'test:integration:csharp', + gulp.series(integrationTestProjects.map((projectName) => `test:integration:csharp:${projectName}`)) ); - gulp.task(`omnisharptest:integration:${projectName}:lsp`, async () => - runOmnisharpJestIntegrationTest(projectName, 'lsp', `OmniSharp Test Integration ${projectName} LSP}`) + + gulp.task( + 'test:integration:devkit', + gulp.series(integrationTestProjects.map((projectName) => `test:integration:devkit:${projectName}`)) ); + + const razorIntegrationTestProjects = ['BasicRazorApp2_1']; + for (const projectName of razorIntegrationTestProjects) { + gulp.task(`test:razorintegration:${projectName}`, async () => + runIntegrationTest( + projectName, + path.join('razor', 'razorIntegrationTests'), + `Razor Test Integration ${projectName}` + ) + ); + } + + gulp.task( + 'test:razorintegration', + gulp.series(razorIntegrationTestProjects.map((projectName) => `test:razorintegration:${projectName}`)) + ); + gulp.task( - `omnisharptest:integration:${projectName}`, - gulp.series(`omnisharptest:integration:${projectName}:stdio`, `omnisharptest:integration:${projectName}:lsp`) + 'test:integration', + gulp.series('test:integration:csharp', 'test:integration:devkit', 'test:razorintegration') ); } -gulp.task( - 'omnisharptest:integration', - gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}`)) -); -gulp.task( - 'omnisharptest:integration:stdio', - gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:stdio`)) -); -gulp.task( - 'omnisharptest:integration:lsp', - gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:lsp`)) -); -// TODO: Enable lsp integration tests once tests for unimplemented features are disabled. -gulp.task('omnisharptest', gulp.series('omnisharptest:unit', 'omnisharptest:integration:stdio')); +function createOmniSharpTestSubTasks() { + gulp.task('omnisharptest:unit', async () => { + await runJestTest(jestOmniSharpUnitTestProjectName); + }); -gulp.task('test:unit', async () => { - await runJestTest(jestUnitTestProjectName); -}); + const omnisharpIntegrationTestProjects = [ + 'singleCsproj', + 'slnWithCsproj', + 'slnFilterWithCsproj', + 'BasicRazorApp2_1', + ]; -const integrationTestProjects = ['slnWithCsproj']; -for (const projectName of integrationTestProjects) { - gulp.task(`test:integration:${projectName}`, async () => - runIntegrationTest( - projectName, - path.join('lsptoolshost', 'integrationTests'), - `Test Integration ${projectName}` + for (const projectName of omnisharpIntegrationTestProjects) { + gulp.task(`omnisharptest:integration:${projectName}:stdio`, async () => + runOmnisharpJestIntegrationTest(projectName, 'stdio', `[O#][${projectName}][STDIO]`) + ); + gulp.task(`omnisharptest:integration:${projectName}:lsp`, async () => + runOmnisharpJestIntegrationTest(projectName, 'lsp', `[O#][${projectName}][LSP]`) + ); + gulp.task( + `omnisharptest:integration:${projectName}`, + gulp.series( + `omnisharptest:integration:${projectName}:stdio`, + `omnisharptest:integration:${projectName}:lsp` + ) + ); + } + + gulp.task( + 'omnisharptest:integration', + gulp.series(omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}`)) + ); + gulp.task( + 'omnisharptest:integration:stdio', + gulp.series( + omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:stdio`) + ) + ); + gulp.task( + 'omnisharptest:integration:lsp', + gulp.series( + omnisharpIntegrationTestProjects.map((projectName) => `omnisharptest:integration:${projectName}:lsp`) ) ); } -gulp.task( - 'test:integration', - gulp.series(integrationTestProjects.map((projectName) => `test:integration:${projectName}`)) -); - -gulp.task('test', gulp.series('test:unit', 'test:integration', 'test:razor', 'test:razorintegration')); - async function runOmnisharpJestIntegrationTest(testAssetName: string, engine: 'stdio' | 'lsp', suiteName: string) { const workspaceFile = `omnisharp${engine === 'lsp' ? '_lsp' : ''}_${testAssetName}.code-workspace`; const testFolder = path.join('test', 'omnisharp', 'omnisharpIntegrationTests'); @@ -111,10 +159,56 @@ async function runOmnisharpJestIntegrationTest(testAssetName: string, engine: 's await runJestIntegrationTest(testAssetName, testFolder, workspaceFile, suiteName, env); } -async function runIntegrationTest(testAssetName: string, testFolderName: string, suiteName: string) { - const vscodeWorkspaceFileName = `lsp_tools_host_${testAssetName}.code-workspace`; +async function runDevKitIntegrationTests(testAssetName: string, testFolderName: string, suiteName: string) { + // Tests using C# Dev Kit tests are a bit different from the rest - we are not able to restart the Dev Kit server and there + // are not easy APIs to use to know if the project is reloading due to workspace changes. + // So we have to isolate the C# Dev Kit tests into smaller test runs (in this case, per file), where each run + // launches VSCode and runs the tests in that file. + const testFolder = path.join(rootPath, 'test', testFolderName); + console.log(`Searching for test files in ${testFolder}`); + const allFiles = fs + .readdirSync(testFolder, { + recursive: true, + }) + .filter((f) => typeof f === 'string'); + const devKitTestFiles = allFiles.filter((f) => f.endsWith('.test.ts')).map((f) => path.join(testFolder, f)); + if (devKitTestFiles.length === 0) { + throw new Error(`No test files found in ${testFolder}`); + } + + let failed: boolean = false; + for (const testFile of devKitTestFiles) { + try { + await runIntegrationTest( + testAssetName, + testFolderName, + suiteName, + `devkit_${testAssetName}.code-workspace`, + testFile + ); + } catch (err) { + // We have to catch the error to continue running tests from the rest of the files. + console.error(`##[error] Tests in ${path.basename(testFile)} failed`, err); + failed = true; + } + } + + if (failed) { + // Ensure the task fails if any tests failed. + throw new Error(`One or more tests failed`); + } +} + +async function runIntegrationTest( + testAssetName: string, + testFolderName: string, + suiteName: string, + vscodeWorkspaceFileName = `${testAssetName}.code-workspace`, + testFile: string | undefined = undefined +) { const testFolder = path.join('test', testFolderName); - return await runJestIntegrationTest(testAssetName, testFolder, vscodeWorkspaceFileName, suiteName); + const env: NodeJS.ProcessEnv = {}; + return await runJestIntegrationTest(testAssetName, testFolder, vscodeWorkspaceFileName, suiteName, env, testFile); } /** @@ -124,14 +218,21 @@ async function runIntegrationTest(testAssetName: string, testFolderName: string, * @param workspaceFileName the name of the vscode workspace file to use. * @param suiteName a unique name for the test suite being run. * @param env any environment variables needed. + * @param testFile the full path to a specific test file to run. */ async function runJestIntegrationTest( testAssetName: string, testFolderName: string, workspaceFileName: string, suiteName: string, - env: NodeJS.ProcessEnv = {} + env: NodeJS.ProcessEnv = {}, + testFile: string | undefined = undefined ) { + const logName = testFile ? `${suiteName}_${path.basename(testFile)}` : suiteName; + + // Set VSCode to produce logs in a unique directory for this test run. + const userDataDir = path.join(outPath, 'userData', logName); + // Test assets are always in a testAssets folder inside the integration test folder. const assetsPath = path.join(rootPath, testFolderName, 'testAssets'); if (!fs.existsSync(assetsPath)) { @@ -142,33 +243,39 @@ async function runJestIntegrationTest( throw new Error(`Could not find vscode workspace to open at ${workspacePath}`); } - // The launcher (that downloads and opens vscode) is always compiled to out/test/vscodeLauncher.js - const launcherPath = path.join(outPath, 'test', 'vscodeLauncher.js'); - if (!fs.existsSync(launcherPath)) { - throw new Error('Could not find test runner in out/ directory'); - } // The runner (that loads in the vscode process to run tests) is in the test folder in the *output* directory. const vscodeRunnerPath = path.join(outPath, testFolderName, 'index.js'); if (!fs.existsSync(vscodeRunnerPath)) { throw new Error(`Could not find vscode runner in out/ at ${vscodeRunnerPath}`); } - env.CODE_TESTS_WORKSPACE = workspacePath; - env.CODE_EXTENSIONS_PATH = rootPath; - env.EXTENSIONS_TESTS_PATH = vscodeRunnerPath; - // Configure the file and suite name in CI to avoid having multiple test runs stomp on each other. - env.JEST_JUNIT_OUTPUT_NAME = getJUnitFileName(suiteName); + env.JEST_JUNIT_OUTPUT_NAME = getJUnitFileName(logName); env.JEST_SUITE_NAME = suiteName; - const result = await spawnNode([launcherPath, '--enable-source-maps'], { env, cwd: rootPath }); - - if (result.code === null || result.code > 0) { - // Ensure that gulp fails when tests fail - throw new Error(`Exit code: ${result.code} Signal: ${result.signal}`); + if (testFile) { + console.log(`Setting test file filter to: ${testFile}`); + process.env.TEST_FILE_FILTER = testFile; } - return result; + try { + const result = await prepareVSCodeAndExecuteTests(rootPath, vscodeRunnerPath, workspacePath, userDataDir, env); + if (result > 0) { + // The VSCode API will generally throw if jest fails the test, but we can get errors before the test runs (e.g. launching VSCode). + // So here we make sure to error if we don't get a clean exit code. + throw new Error(`Exit code: ${result}`); + } + + return result; + } catch (err) { + // If we hit an error, copy the logs VSCode produced to a directory that CI can find. + const vscodeLogs = path.join(userDataDir, 'logs'); + const logOutputPath = path.join(outPath, 'logs', logName); + console.log(`Copying logs from ${vscodeLogs} to ${logOutputPath}`); + fs.cpSync(vscodeLogs, logOutputPath, { recursive: true, force: true }); + + throw err; + } } async function runJestTest(project: string) { @@ -189,6 +296,6 @@ async function runJestTest(project: string) { } } -function getJUnitFileName(suiteName: string) { - return `${suiteName.replaceAll(' ', '_')}_junit.xml`; +function getJUnitFileName(logName: string) { + return `${logName.replaceAll(' ', '_')}_junit.xml`; } diff --git a/test/csharp-standalone-profile.code-profile b/test/csharp-standalone-profile.code-profile deleted file mode 100644 index 795669a96..000000000 --- a/test/csharp-standalone-profile.code-profile +++ /dev/null @@ -1 +0,0 @@ -{"name":"csharp-standalone-profile","extensions":"[{\"identifier\":{\"id\":\"ms-dotnettools.csharp\",\"uuid\":\"d0bfc4ab-1d3a-4487-8782-7cf6027b4fff\"},\"displayName\":\"C#\"},{\"identifier\":{\"id\":\"ms-dotnettools.vscode-dotnet-runtime\",\"uuid\":\"1aab81a1-b3d9-4aef-976b-577d5d90fe3f\"},\"displayName\":\".NET Install Tool\"}]","globalState":"{\"storage\":{\"workbench.panel.pinnedPanels\":\"[{\\\"id\\\":\\\"workbench.panel.markers\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"refactorPreview\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.panel.testResults\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"terminal\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"~remote.forwardedPortsContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":5},{\\\"id\\\":\\\"workbench.panel.repl\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.panel.comments\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10}]\",\"workbench.activity.pinnedViewlets2\":\"[{\\\"id\\\":\\\"workbench.view.explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.view.debug\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.view.remote\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.scm\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.view.extension.test\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extensions\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.search\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.panel.chatSidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.extension.references-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":7},{\\\"id\\\":\\\"workbench.view.sync\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.view.editSessions\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"workbench.explorer.views.state.hidden\":\"[{\\\"id\\\":\\\"workbench.explorer.openEditorsView\\\",\\\"isHidden\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"solutionExplorer\\\",\\\"isHidden\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.explorer.fileView\\\",\\\"isHidden\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"outline\\\",\\\"isHidden\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"timeline\\\",\\\"isHidden\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"npm\\\",\\\"isHidden\\\":true,\\\"order\\\":5},{\\\"id\\\":\\\"copilot-chat-requests\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.graph\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.graphDetails\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureActivityLog\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"syntaxTree\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.home\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"operationTree\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.launchpad\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.drafts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.workspaces\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.account\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.commitDetails\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.pullRequest\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.lineHistory\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.fileHistory\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.timeline\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.searchAndCompare\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.patchDetails\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureFocusView\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureResourceGroups\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"azureWorkspace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"ms-azuretools.helpAndFeedback\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerContainers\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerImages\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerRegistries\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerNetworks\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"dockerVolumes\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.dockerContexts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"vscode-docker.views.help\\\",\\\"isHidden\\\":false}]\",\"colorThemeData\":\"{\\\"id\\\":\\\"vs-dark vscode-theme-defaults-themes-dark_modern-json\\\",\\\"label\\\":\\\"Dark Modern\\\",\\\"settingsId\\\":\\\"Default Dark Modern\\\",\\\"themeTokenColors\\\":[{\\\"settings\\\":{\\\"foreground\\\":\\\"#D4D4D4\\\"},\\\"scope\\\":[\\\"meta.embedded\\\",\\\"source.groovy.embedded\\\",\\\"string meta.image.inline.markdown\\\",\\\"variable.legacy.builtin.python\\\"]},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"emphasis\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\"},\\\"scope\\\":\\\"strong\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#000080\\\"},\\\"scope\\\":\\\"header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"comment\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"constant.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":[\\\"constant.numeric\\\",\\\"variable.other.enummember\\\",\\\"keyword.operator.plus.exponent\\\",\\\"keyword.operator.minus.exponent\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#646695\\\"},\\\"scope\\\":\\\"constant.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"entity.name.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.name.tag.css\\\",\\\"entity.name.tag.less\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"entity.other.attribute-name\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.other.attribute-name.class.css\\\",\\\"source.css entity.other.attribute-name.class\\\",\\\"entity.other.attribute-name.id.css\\\",\\\"entity.other.attribute-name.parent-selector.css\\\",\\\"entity.other.attribute-name.parent.less\\\",\\\"source.css entity.other.attribute-name.pseudo-class\\\",\\\"entity.other.attribute-name.pseudo-element.css\\\",\\\"source.css.less entity.other.attribute-name.id\\\",\\\"entity.other.attribute-name.scss\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#f44747\\\"},\\\"scope\\\":\\\"invalid\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"underline\\\"},\\\"scope\\\":\\\"markup.underline\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.bold\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.heading\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"markup.italic\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"strikethrough\\\"},\\\"scope\\\":\\\"markup.strikethrough\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"markup.inserted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.deleted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.changed\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"punctuation.definition.quote.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6796e6\\\"},\\\"scope\\\":\\\"punctuation.definition.list.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.inline.raw\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#808080\\\"},\\\"scope\\\":\\\"punctuation.definition.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"meta.preprocessor\\\",\\\"entity.name.function.preprocessor\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"meta.preprocessor.string\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"meta.preprocessor.numeric\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"meta.structure.dictionary.key.python\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"meta.diff.header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage.type\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"storage.modifier\\\",\\\"keyword.operator.noexcept\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":[\\\"string\\\",\\\"meta.embedded.assembly\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.value\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":\\\"string.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.definition.template-expression.begin\\\",\\\"punctuation.definition.template-expression.end\\\",\\\"punctuation.section.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"meta.template.expression\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":[\\\"support.type.vendored.property-name\\\",\\\"support.type.property-name\\\",\\\"source.css variable\\\",\\\"source.coffee.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword.control\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":\\\"keyword.operator\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"keyword.operator.new\\\",\\\"keyword.operator.expression\\\",\\\"keyword.operator.cast\\\",\\\"keyword.operator.sizeof\\\",\\\"keyword.operator.alignof\\\",\\\"keyword.operator.typeid\\\",\\\"keyword.operator.alignas\\\",\\\"keyword.operator.instanceof\\\",\\\"keyword.operator.logical.python\\\",\\\"keyword.operator.wordlike\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"keyword.other.unit\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.section.embedded.begin.php\\\",\\\"punctuation.section.embedded.end.php\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"support.function.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"constant.sha.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"storage.modifier.import.java\\\",\\\"variable.language.wildcard.java\\\",\\\"storage.modifier.package.java\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"variable.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"entity.name.function\\\",\\\"support.function\\\",\\\"support.constant.handlebars\\\",\\\"source.powershell variable.other.member\\\",\\\"entity.name.operator.custom-literal\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"support.class\\\",\\\"support.type\\\",\\\"entity.name.type\\\",\\\"entity.name.namespace\\\",\\\"entity.other.attribute\\\",\\\"entity.name.scope-resolution\\\",\\\"entity.name.class\\\",\\\"storage.type.numeric.go\\\",\\\"storage.type.byte.go\\\",\\\"storage.type.boolean.go\\\",\\\"storage.type.string.go\\\",\\\"storage.type.uintptr.go\\\",\\\"storage.type.error.go\\\",\\\"storage.type.rune.go\\\",\\\"storage.type.cs\\\",\\\"storage.type.generic.cs\\\",\\\"storage.type.modifier.cs\\\",\\\"storage.type.variable.cs\\\",\\\"storage.type.annotation.java\\\",\\\"storage.type.generic.java\\\",\\\"storage.type.java\\\",\\\"storage.type.object.array.java\\\",\\\"storage.type.primitive.array.java\\\",\\\"storage.type.primitive.java\\\",\\\"storage.type.token.java\\\",\\\"storage.type.groovy\\\",\\\"storage.type.annotation.groovy\\\",\\\"storage.type.parameters.groovy\\\",\\\"storage.type.generic.groovy\\\",\\\"storage.type.object.array.groovy\\\",\\\"storage.type.primitive.array.groovy\\\",\\\"storage.type.primitive.groovy\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"meta.type.cast.expr\\\",\\\"meta.type.new.expr\\\",\\\"support.constant.math\\\",\\\"support.constant.dom\\\",\\\"support.constant.json\\\",\\\"entity.other.inherited-class\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C586C0\\\"},\\\"scope\\\":[\\\"keyword.control\\\",\\\"source.cpp keyword.operator.new\\\",\\\"keyword.operator.delete\\\",\\\"keyword.other.using\\\",\\\"keyword.other.directive.using\\\",\\\"keyword.other.operator\\\",\\\"entity.name.operator\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"variable\\\",\\\"meta.definition.variable.name\\\",\\\"support.variable\\\",\\\"entity.name.variable\\\",\\\"constant.other.placeholder\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4FC1FF\\\"},\\\"scope\\\":[\\\"variable.other.constant\\\",\\\"variable.other.enummember\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"meta.object-literal.key\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"support.constant.property-value\\\",\\\"support.constant.font-name\\\",\\\"support.constant.media-type\\\",\\\"support.constant.media\\\",\\\"constant.other.color.rgb-value\\\",\\\"constant.other.rgb-value\\\",\\\"support.constant.color\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"punctuation.definition.group.regexp\\\",\\\"punctuation.definition.group.assertion.regexp\\\",\\\"punctuation.definition.character-class.regexp\\\",\\\"punctuation.character.set.begin.regexp\\\",\\\"punctuation.character.set.end.regexp\\\",\\\"keyword.operator.negation.regexp\\\",\\\"support.other.parenthesis.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":[\\\"constant.character.character-class.regexp\\\",\\\"constant.other.character-class.set.regexp\\\",\\\"constant.other.character-class.regexp\\\",\\\"constant.character.set.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"keyword.operator.or.regexp\\\",\\\"keyword.control.anchor.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"keyword.operator.quantifier.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"constant.character\\\",\\\"constant.other.option\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"constant.character.escape\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C8C8C8\\\"},\\\"scope\\\":\\\"entity.name.label\\\"}],\\\"semanticTokenRules\\\":[{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#c586c0\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#dcdcaa\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}}],\\\"extensionData\\\":{\\\"_extensionId\\\":\\\"vscode.theme-defaults\\\",\\\"_extensionIsBuiltin\\\":true,\\\"_extensionName\\\":\\\"theme-defaults\\\",\\\"_extensionPublisher\\\":\\\"vscode\\\"},\\\"themeSemanticHighlighting\\\":true,\\\"colorMap\\\":{\\\"checkbox.border\\\":\\\"#3c3c3c\\\",\\\"editor.background\\\":\\\"#1f1f1f\\\",\\\"editor.foreground\\\":\\\"#cccccc\\\",\\\"editor.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"editorIndentGuide.background1\\\":\\\"#404040\\\",\\\"editorIndentGuide.activeBackground1\\\":\\\"#707070\\\",\\\"editor.selectionHighlightBackground\\\":\\\"#add6ff26\\\",\\\"list.dropBackground\\\":\\\"#383b3d\\\",\\\"activityBarBadge.background\\\":\\\"#0078d4\\\",\\\"sideBarTitle.foreground\\\":\\\"#cccccc\\\",\\\"input.placeholderForeground\\\":\\\"#989898\\\",\\\"menu.background\\\":\\\"#1f1f1f\\\",\\\"menu.foreground\\\":\\\"#cccccc\\\",\\\"menu.separatorBackground\\\":\\\"#454545\\\",\\\"menu.border\\\":\\\"#454545\\\",\\\"menu.selectionBackground\\\":\\\"#0078d4\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#ffffff\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#0078d4\\\",\\\"ports.iconRunningProcessForeground\\\":\\\"#369432\\\",\\\"sideBarSectionHeader.background\\\":\\\"#181818\\\",\\\"sideBarSectionHeader.border\\\":\\\"#2b2b2b\\\",\\\"tab.selectedBackground\\\":\\\"#222222\\\",\\\"tab.selectedForeground\\\":\\\"#ffffffa0\\\",\\\"tab.lastPinnedBorder\\\":\\\"#cccccc33\\\",\\\"list.activeSelectionIconForeground\\\":\\\"#ffffff\\\",\\\"terminal.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"widget.border\\\":\\\"#313131\\\",\\\"actionBar.toggledBackground\\\":\\\"#383a49\\\",\\\"activityBar.activeBorder\\\":\\\"#0078d4\\\",\\\"activityBar.background\\\":\\\"#181818\\\",\\\"activityBar.border\\\":\\\"#2b2b2b\\\",\\\"activityBar.foreground\\\":\\\"#d7d7d7\\\",\\\"activityBar.inactiveForeground\\\":\\\"#868686\\\",\\\"activityBarBadge.foreground\\\":\\\"#ffffff\\\",\\\"badge.background\\\":\\\"#616161\\\",\\\"badge.foreground\\\":\\\"#f8f8f8\\\",\\\"button.background\\\":\\\"#0078d4\\\",\\\"button.border\\\":\\\"#ffffff12\\\",\\\"button.foreground\\\":\\\"#ffffff\\\",\\\"button.hoverBackground\\\":\\\"#026ec1\\\",\\\"button.secondaryBackground\\\":\\\"#313131\\\",\\\"button.secondaryForeground\\\":\\\"#cccccc\\\",\\\"button.secondaryHoverBackground\\\":\\\"#3c3c3c\\\",\\\"chat.slashCommandBackground\\\":\\\"#34414b\\\",\\\"chat.slashCommandForeground\\\":\\\"#40a6ff\\\",\\\"checkbox.background\\\":\\\"#313131\\\",\\\"debugToolBar.background\\\":\\\"#181818\\\",\\\"descriptionForeground\\\":\\\"#9d9d9d\\\",\\\"dropdown.background\\\":\\\"#313131\\\",\\\"dropdown.border\\\":\\\"#3c3c3c\\\",\\\"dropdown.foreground\\\":\\\"#cccccc\\\",\\\"dropdown.listBackground\\\":\\\"#1f1f1f\\\",\\\"editor.findMatchBackground\\\":\\\"#9e6a03\\\",\\\"editorGroup.border\\\":\\\"#ffffff17\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#181818\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#2b2b2b\\\",\\\"editorGutter.addedBackground\\\":\\\"#2ea043\\\",\\\"editorGutter.deletedBackground\\\":\\\"#f85149\\\",\\\"editorGutter.modifiedBackground\\\":\\\"#0078d4\\\",\\\"editorLineNumber.activeForeground\\\":\\\"#cccccc\\\",\\\"editorLineNumber.foreground\\\":\\\"#6e7681\\\",\\\"editorOverviewRuler.border\\\":\\\"#010409\\\",\\\"editorWidget.background\\\":\\\"#202020\\\",\\\"errorForeground\\\":\\\"#f85149\\\",\\\"focusBorder\\\":\\\"#0078d4\\\",\\\"foreground\\\":\\\"#cccccc\\\",\\\"icon.foreground\\\":\\\"#cccccc\\\",\\\"input.background\\\":\\\"#313131\\\",\\\"input.border\\\":\\\"#3c3c3c\\\",\\\"input.foreground\\\":\\\"#cccccc\\\",\\\"inputOption.activeBackground\\\":\\\"#2489db82\\\",\\\"inputOption.activeBorder\\\":\\\"#2488db\\\",\\\"keybindingLabel.foreground\\\":\\\"#cccccc\\\",\\\"notificationCenterHeader.background\\\":\\\"#1f1f1f\\\",\\\"notificationCenterHeader.foreground\\\":\\\"#cccccc\\\",\\\"notifications.background\\\":\\\"#1f1f1f\\\",\\\"notifications.border\\\":\\\"#2b2b2b\\\",\\\"notifications.foreground\\\":\\\"#cccccc\\\",\\\"panel.background\\\":\\\"#181818\\\",\\\"panel.border\\\":\\\"#2b2b2b\\\",\\\"panelInput.border\\\":\\\"#2b2b2b\\\",\\\"panelTitle.activeBorder\\\":\\\"#0078d4\\\",\\\"panelTitle.activeForeground\\\":\\\"#cccccc\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"peekViewEditor.background\\\":\\\"#1f1f1f\\\",\\\"peekViewEditor.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"peekViewResult.background\\\":\\\"#1f1f1f\\\",\\\"peekViewResult.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"pickerGroup.border\\\":\\\"#3c3c3c\\\",\\\"progressBar.background\\\":\\\"#0078d4\\\",\\\"quickInput.background\\\":\\\"#222222\\\",\\\"quickInput.foreground\\\":\\\"#cccccc\\\",\\\"settings.dropdownBackground\\\":\\\"#313131\\\",\\\"settings.dropdownBorder\\\":\\\"#3c3c3c\\\",\\\"settings.headerForeground\\\":\\\"#ffffff\\\",\\\"settings.modifiedItemIndicator\\\":\\\"#bb800966\\\",\\\"sideBar.background\\\":\\\"#181818\\\",\\\"sideBar.border\\\":\\\"#2b2b2b\\\",\\\"sideBar.foreground\\\":\\\"#cccccc\\\",\\\"sideBarSectionHeader.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.background\\\":\\\"#181818\\\",\\\"statusBar.border\\\":\\\"#2b2b2b\\\",\\\"statusBar.debuggingBackground\\\":\\\"#0078d4\\\",\\\"statusBar.debuggingForeground\\\":\\\"#ffffff\\\",\\\"statusBar.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBar.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.noFolderBackground\\\":\\\"#1f1f1f\\\",\\\"statusBarItem.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#6e768166\\\",\\\"tab.activeBackground\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorder\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorderTop\\\":\\\"#0078d4\\\",\\\"tab.activeForeground\\\":\\\"#ffffff\\\",\\\"tab.selectedBorderTop\\\":\\\"#6caddf\\\",\\\"tab.border\\\":\\\"#2b2b2b\\\",\\\"tab.hoverBackground\\\":\\\"#1f1f1f\\\",\\\"tab.inactiveBackground\\\":\\\"#181818\\\",\\\"tab.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"tab.unfocusedActiveBorder\\\":\\\"#1f1f1f\\\",\\\"tab.unfocusedActiveBorderTop\\\":\\\"#2b2b2b\\\",\\\"tab.unfocusedHoverBackground\\\":\\\"#1f1f1f\\\",\\\"terminal.foreground\\\":\\\"#cccccc\\\",\\\"terminal.tab.activeBorder\\\":\\\"#0078d4\\\",\\\"textBlockQuote.background\\\":\\\"#2b2b2b\\\",\\\"textBlockQuote.border\\\":\\\"#616161\\\",\\\"textCodeBlock.background\\\":\\\"#2b2b2b\\\",\\\"textLink.activeForeground\\\":\\\"#4daafc\\\",\\\"textLink.foreground\\\":\\\"#4daafc\\\",\\\"textPreformat.foreground\\\":\\\"#d0d0d0\\\",\\\"textPreformat.background\\\":\\\"#3c3c3c\\\",\\\"textSeparator.foreground\\\":\\\"#21262d\\\",\\\"titleBar.activeBackground\\\":\\\"#181818\\\",\\\"titleBar.activeForeground\\\":\\\"#cccccc\\\",\\\"titleBar.border\\\":\\\"#2b2b2b\\\",\\\"titleBar.inactiveBackground\\\":\\\"#1f1f1f\\\",\\\"titleBar.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"welcomePage.tileBackground\\\":\\\"#2b2b2b\\\",\\\"welcomePage.progress.foreground\\\":\\\"#0078d4\\\"},\\\"watch\\\":false}\",\"workbench.view.extension.gitlens.state.hidden\":\"[{\\\"id\\\":\\\"gitlens.views.home\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.launchpad\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.drafts\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.workspaces\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"gitlens.views.account\\\",\\\"isHidden\\\":false}]\",\"terminal.hidden\":\"[{\\\"id\\\":\\\"terminal\\\",\\\"isHidden\\\":false}]\",\"workbench.scm.views.state.hidden\":\"[{\\\"id\\\":\\\"workbench.scm.repositories\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.scm\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.scm.history\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.chatSidebar.hidden\":\"[{\\\"id\\\":\\\"workbench.panel.chat.view.copilot\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.alignment\":\"center\",\"workbench.view.extensions.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.extensions.installed\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchOutdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.workspaceRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.popular\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchRecentlyUpdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.otherRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"extensions.recommendedList\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.enabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.disabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.marketplace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchInstalled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchEnabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchDisabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchBuiltin\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchWorkspaceUnsupported\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinFeatureExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinThemeExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinProgrammingLanguageExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.deprecatedExtensions\\\",\\\"isHidden\\\":false}]\"}}"} \ No newline at end of file diff --git a/test/csharp-test-profile.code-profile b/test/csharp-test-profile.code-profile new file mode 100644 index 000000000..7c6621563 --- /dev/null +++ b/test/csharp-test-profile.code-profile @@ -0,0 +1 @@ +{"name":"csharp-test-profile","extensions":"[{\"identifier\":{\"id\":\"ms-dotnettools.csdevkit\",\"uuid\":\"7ad42776-8f7e-4214-bf67-4f0b518ef629\"},\"displayName\":\"C# Dev Kit\"},{\"identifier\":{\"id\":\"ms-dotnettools.csharp\",\"uuid\":\"d0bfc4ab-1d3a-4487-8782-7cf6027b4fff\"},\"displayName\":\"C#\"},{\"identifier\":{\"id\":\"ms-dotnettools.vscode-dotnet-runtime\",\"uuid\":\"1aab81a1-b3d9-4aef-976b-577d5d90fe3f\"},\"displayName\":\".NET Install Tool\"}]","globalState":"{\"storage\":{\"workbench.panel.pinnedPanels\":\"[{\\\"id\\\":\\\"workbench.panel.output\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.panel.testResults\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"terminal\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"~remote.forwardedPortsContainer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":5},{\\\"id\\\":\\\"refactorPreview\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.panel.repl\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.panel.comments\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":10},{\\\"id\\\":\\\"workbench.panel.markers\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0}]\",\"workbench.activity.pinnedViewlets2\":\"[{\\\"id\\\":\\\"workbench.view.explorer\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":0},{\\\"id\\\":\\\"workbench.view.search\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":1},{\\\"id\\\":\\\"workbench.view.debug\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":3},{\\\"id\\\":\\\"workbench.view.scm\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":2},{\\\"id\\\":\\\"workbench.view.remote\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.extensions\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":4},{\\\"id\\\":\\\"workbench.view.extension.test\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":6},{\\\"id\\\":\\\"workbench.view.extension.references-view\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":7},{\\\"id\\\":\\\"workbench.panel.chatSidebar\\\",\\\"pinned\\\":true,\\\"visible\\\":false,\\\"order\\\":100},{\\\"id\\\":\\\"workbench.view.sync\\\",\\\"pinned\\\":true,\\\"visible\\\":false},{\\\"id\\\":\\\"workbench.view.editSessions\\\",\\\"pinned\\\":true,\\\"visible\\\":false}]\",\"colorThemeData\":\"{\\\"id\\\":\\\"vs-dark vscode-theme-defaults-themes-dark_modern-json\\\",\\\"label\\\":\\\"Dark Modern\\\",\\\"settingsId\\\":\\\"Default Dark Modern\\\",\\\"themeTokenColors\\\":[{\\\"settings\\\":{\\\"foreground\\\":\\\"#D4D4D4\\\"},\\\"scope\\\":[\\\"meta.embedded\\\",\\\"source.groovy.embedded\\\",\\\"string meta.image.inline.markdown\\\",\\\"variable.legacy.builtin.python\\\"]},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"emphasis\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\"},\\\"scope\\\":\\\"strong\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#000080\\\"},\\\"scope\\\":\\\"header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"comment\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"constant.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":[\\\"constant.numeric\\\",\\\"variable.other.enummember\\\",\\\"keyword.operator.plus.exponent\\\",\\\"keyword.operator.minus.exponent\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#646695\\\"},\\\"scope\\\":\\\"constant.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"entity.name.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.name.tag.css\\\",\\\"entity.name.tag.less\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"entity.other.attribute-name\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":[\\\"entity.other.attribute-name.class.css\\\",\\\"source.css entity.other.attribute-name.class\\\",\\\"entity.other.attribute-name.id.css\\\",\\\"entity.other.attribute-name.parent-selector.css\\\",\\\"entity.other.attribute-name.parent.less\\\",\\\"source.css entity.other.attribute-name.pseudo-class\\\",\\\"entity.other.attribute-name.pseudo-element.css\\\",\\\"source.css.less entity.other.attribute-name.id\\\",\\\"entity.other.attribute-name.scss\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#f44747\\\"},\\\"scope\\\":\\\"invalid\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"underline\\\"},\\\"scope\\\":\\\"markup.underline\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.bold\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"bold\\\",\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.heading\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"italic\\\"},\\\"scope\\\":\\\"markup.italic\\\"},{\\\"settings\\\":{\\\"fontStyle\\\":\\\"strikethrough\\\"},\\\"scope\\\":\\\"markup.strikethrough\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"markup.inserted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.deleted\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"markup.changed\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6A9955\\\"},\\\"scope\\\":\\\"punctuation.definition.quote.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#6796e6\\\"},\\\"scope\\\":\\\"punctuation.definition.list.begin.markdown\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"markup.inline.raw\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#808080\\\"},\\\"scope\\\":\\\"punctuation.definition.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"meta.preprocessor\\\",\\\"entity.name.function.preprocessor\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"meta.preprocessor.string\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"meta.preprocessor.numeric\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"meta.structure.dictionary.key.python\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"meta.diff.header\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"storage.type\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"storage.modifier\\\",\\\"keyword.operator.noexcept\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":[\\\"string\\\",\\\"meta.embedded.assembly\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.tag\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#ce9178\\\"},\\\"scope\\\":\\\"string.value\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":\\\"string.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.definition.template-expression.begin\\\",\\\"punctuation.definition.template-expression.end\\\",\\\"punctuation.section.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"meta.template.expression\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":[\\\"support.type.vendored.property-name\\\",\\\"support.type.property-name\\\",\\\"source.css variable\\\",\\\"source.coffee.embedded\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"keyword.control\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":\\\"keyword.operator\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"keyword.operator.new\\\",\\\"keyword.operator.expression\\\",\\\"keyword.operator.cast\\\",\\\"keyword.operator.sizeof\\\",\\\"keyword.operator.alignof\\\",\\\"keyword.operator.typeid\\\",\\\"keyword.operator.alignas\\\",\\\"keyword.operator.instanceof\\\",\\\"keyword.operator.logical.python\\\",\\\"keyword.operator.wordlike\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"keyword.other.unit\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"punctuation.section.embedded.begin.php\\\",\\\"punctuation.section.embedded.end.php\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9cdcfe\\\"},\\\"scope\\\":\\\"support.function.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#b5cea8\\\"},\\\"scope\\\":\\\"constant.sha.git-rebase\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d4d4d4\\\"},\\\"scope\\\":[\\\"storage.modifier.import.java\\\",\\\"variable.language.wildcard.java\\\",\\\"storage.modifier.package.java\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":\\\"variable.language\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"entity.name.function\\\",\\\"support.function\\\",\\\"support.constant.handlebars\\\",\\\"source.powershell variable.other.member\\\",\\\"entity.name.operator.custom-literal\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"support.class\\\",\\\"support.type\\\",\\\"entity.name.type\\\",\\\"entity.name.namespace\\\",\\\"entity.other.attribute\\\",\\\"entity.name.scope-resolution\\\",\\\"entity.name.class\\\",\\\"storage.type.numeric.go\\\",\\\"storage.type.byte.go\\\",\\\"storage.type.boolean.go\\\",\\\"storage.type.string.go\\\",\\\"storage.type.uintptr.go\\\",\\\"storage.type.error.go\\\",\\\"storage.type.rune.go\\\",\\\"storage.type.cs\\\",\\\"storage.type.generic.cs\\\",\\\"storage.type.modifier.cs\\\",\\\"storage.type.variable.cs\\\",\\\"storage.type.annotation.java\\\",\\\"storage.type.generic.java\\\",\\\"storage.type.java\\\",\\\"storage.type.object.array.java\\\",\\\"storage.type.primitive.array.java\\\",\\\"storage.type.primitive.java\\\",\\\"storage.type.token.java\\\",\\\"storage.type.groovy\\\",\\\"storage.type.annotation.groovy\\\",\\\"storage.type.parameters.groovy\\\",\\\"storage.type.generic.groovy\\\",\\\"storage.type.object.array.groovy\\\",\\\"storage.type.primitive.array.groovy\\\",\\\"storage.type.primitive.groovy\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4EC9B0\\\"},\\\"scope\\\":[\\\"meta.type.cast.expr\\\",\\\"meta.type.new.expr\\\",\\\"support.constant.math\\\",\\\"support.constant.dom\\\",\\\"support.constant.json\\\",\\\"entity.other.inherited-class\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C586C0\\\"},\\\"scope\\\":[\\\"keyword.control\\\",\\\"source.cpp keyword.operator.new\\\",\\\"keyword.operator.delete\\\",\\\"keyword.other.using\\\",\\\"keyword.other.directive.using\\\",\\\"keyword.other.operator\\\",\\\"entity.name.operator\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"variable\\\",\\\"meta.definition.variable.name\\\",\\\"support.variable\\\",\\\"entity.name.variable\\\",\\\"constant.other.placeholder\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#4FC1FF\\\"},\\\"scope\\\":[\\\"variable.other.constant\\\",\\\"variable.other.enummember\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#9CDCFE\\\"},\\\"scope\\\":[\\\"meta.object-literal.key\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"support.constant.property-value\\\",\\\"support.constant.font-name\\\",\\\"support.constant.media-type\\\",\\\"support.constant.media\\\",\\\"constant.other.color.rgb-value\\\",\\\"constant.other.rgb-value\\\",\\\"support.constant.color\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#CE9178\\\"},\\\"scope\\\":[\\\"punctuation.definition.group.regexp\\\",\\\"punctuation.definition.group.assertion.regexp\\\",\\\"punctuation.definition.character-class.regexp\\\",\\\"punctuation.character.set.begin.regexp\\\",\\\"punctuation.character.set.end.regexp\\\",\\\"keyword.operator.negation.regexp\\\",\\\"support.other.parenthesis.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d16969\\\"},\\\"scope\\\":[\\\"constant.character.character-class.regexp\\\",\\\"constant.other.character-class.set.regexp\\\",\\\"constant.other.character-class.regexp\\\",\\\"constant.character.set.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#DCDCAA\\\"},\\\"scope\\\":[\\\"keyword.operator.or.regexp\\\",\\\"keyword.control.anchor.regexp\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"keyword.operator.quantifier.regexp\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#569cd6\\\"},\\\"scope\\\":[\\\"constant.character\\\",\\\"constant.other.option\\\"]},{\\\"settings\\\":{\\\"foreground\\\":\\\"#d7ba7d\\\"},\\\"scope\\\":\\\"constant.character.escape\\\"},{\\\"settings\\\":{\\\"foreground\\\":\\\"#C8C8C8\\\"},\\\"scope\\\":\\\"entity.name.label\\\"}],\\\"semanticTokenRules\\\":[{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#d4d4d4\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"newOperator\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#c586c0\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"stringLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#ce9178\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"customLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#dcdcaa\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}},{\\\"_selector\\\":\\\"numberLiteral\\\",\\\"_style\\\":{\\\"_foreground\\\":\\\"#b5cea8\\\",\\\"_bold\\\":null,\\\"_underline\\\":null,\\\"_italic\\\":null,\\\"_strikethrough\\\":null}}],\\\"extensionData\\\":{\\\"_extensionId\\\":\\\"vscode.theme-defaults\\\",\\\"_extensionIsBuiltin\\\":true,\\\"_extensionName\\\":\\\"theme-defaults\\\",\\\"_extensionPublisher\\\":\\\"vscode\\\"},\\\"themeSemanticHighlighting\\\":true,\\\"colorMap\\\":{\\\"checkbox.border\\\":\\\"#3c3c3c\\\",\\\"editor.background\\\":\\\"#1f1f1f\\\",\\\"editor.foreground\\\":\\\"#cccccc\\\",\\\"editor.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"editorIndentGuide.background1\\\":\\\"#404040\\\",\\\"editorIndentGuide.activeBackground1\\\":\\\"#707070\\\",\\\"editor.selectionHighlightBackground\\\":\\\"#add6ff26\\\",\\\"list.dropBackground\\\":\\\"#383b3d\\\",\\\"activityBarBadge.background\\\":\\\"#0078d4\\\",\\\"sideBarTitle.foreground\\\":\\\"#cccccc\\\",\\\"input.placeholderForeground\\\":\\\"#989898\\\",\\\"menu.background\\\":\\\"#1f1f1f\\\",\\\"menu.foreground\\\":\\\"#cccccc\\\",\\\"menu.separatorBackground\\\":\\\"#454545\\\",\\\"menu.border\\\":\\\"#454545\\\",\\\"menu.selectionBackground\\\":\\\"#0078d4\\\",\\\"statusBarItem.remoteForeground\\\":\\\"#ffffff\\\",\\\"statusBarItem.remoteBackground\\\":\\\"#0078d4\\\",\\\"ports.iconRunningProcessForeground\\\":\\\"#369432\\\",\\\"sideBarSectionHeader.background\\\":\\\"#181818\\\",\\\"sideBarSectionHeader.border\\\":\\\"#2b2b2b\\\",\\\"tab.selectedBackground\\\":\\\"#222222\\\",\\\"tab.selectedForeground\\\":\\\"#ffffffa0\\\",\\\"tab.lastPinnedBorder\\\":\\\"#cccccc33\\\",\\\"list.activeSelectionIconForeground\\\":\\\"#ffffff\\\",\\\"terminal.inactiveSelectionBackground\\\":\\\"#3a3d41\\\",\\\"widget.border\\\":\\\"#313131\\\",\\\"actionBar.toggledBackground\\\":\\\"#383a49\\\",\\\"activityBar.activeBorder\\\":\\\"#0078d4\\\",\\\"activityBar.background\\\":\\\"#181818\\\",\\\"activityBar.border\\\":\\\"#2b2b2b\\\",\\\"activityBar.foreground\\\":\\\"#d7d7d7\\\",\\\"activityBar.inactiveForeground\\\":\\\"#868686\\\",\\\"activityBarBadge.foreground\\\":\\\"#ffffff\\\",\\\"badge.background\\\":\\\"#616161\\\",\\\"badge.foreground\\\":\\\"#f8f8f8\\\",\\\"button.background\\\":\\\"#0078d4\\\",\\\"button.border\\\":\\\"#ffffff12\\\",\\\"button.foreground\\\":\\\"#ffffff\\\",\\\"button.hoverBackground\\\":\\\"#026ec1\\\",\\\"button.secondaryBackground\\\":\\\"#313131\\\",\\\"button.secondaryForeground\\\":\\\"#cccccc\\\",\\\"button.secondaryHoverBackground\\\":\\\"#3c3c3c\\\",\\\"chat.slashCommandBackground\\\":\\\"#34414b\\\",\\\"chat.slashCommandForeground\\\":\\\"#40a6ff\\\",\\\"checkbox.background\\\":\\\"#313131\\\",\\\"debugToolBar.background\\\":\\\"#181818\\\",\\\"descriptionForeground\\\":\\\"#9d9d9d\\\",\\\"dropdown.background\\\":\\\"#313131\\\",\\\"dropdown.border\\\":\\\"#3c3c3c\\\",\\\"dropdown.foreground\\\":\\\"#cccccc\\\",\\\"dropdown.listBackground\\\":\\\"#1f1f1f\\\",\\\"editor.findMatchBackground\\\":\\\"#9e6a03\\\",\\\"editorGroup.border\\\":\\\"#ffffff17\\\",\\\"editorGroupHeader.tabsBackground\\\":\\\"#181818\\\",\\\"editorGroupHeader.tabsBorder\\\":\\\"#2b2b2b\\\",\\\"editorGutter.addedBackground\\\":\\\"#2ea043\\\",\\\"editorGutter.deletedBackground\\\":\\\"#f85149\\\",\\\"editorGutter.modifiedBackground\\\":\\\"#0078d4\\\",\\\"editorLineNumber.activeForeground\\\":\\\"#cccccc\\\",\\\"editorLineNumber.foreground\\\":\\\"#6e7681\\\",\\\"editorOverviewRuler.border\\\":\\\"#010409\\\",\\\"editorWidget.background\\\":\\\"#202020\\\",\\\"errorForeground\\\":\\\"#f85149\\\",\\\"focusBorder\\\":\\\"#0078d4\\\",\\\"foreground\\\":\\\"#cccccc\\\",\\\"icon.foreground\\\":\\\"#cccccc\\\",\\\"input.background\\\":\\\"#313131\\\",\\\"input.border\\\":\\\"#3c3c3c\\\",\\\"input.foreground\\\":\\\"#cccccc\\\",\\\"inputOption.activeBackground\\\":\\\"#2489db82\\\",\\\"inputOption.activeBorder\\\":\\\"#2488db\\\",\\\"keybindingLabel.foreground\\\":\\\"#cccccc\\\",\\\"notificationCenterHeader.background\\\":\\\"#1f1f1f\\\",\\\"notificationCenterHeader.foreground\\\":\\\"#cccccc\\\",\\\"notifications.background\\\":\\\"#1f1f1f\\\",\\\"notifications.border\\\":\\\"#2b2b2b\\\",\\\"notifications.foreground\\\":\\\"#cccccc\\\",\\\"panel.background\\\":\\\"#181818\\\",\\\"panel.border\\\":\\\"#2b2b2b\\\",\\\"panelInput.border\\\":\\\"#2b2b2b\\\",\\\"panelTitle.activeBorder\\\":\\\"#0078d4\\\",\\\"panelTitle.activeForeground\\\":\\\"#cccccc\\\",\\\"panelTitle.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"peekViewEditor.background\\\":\\\"#1f1f1f\\\",\\\"peekViewEditor.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"peekViewResult.background\\\":\\\"#1f1f1f\\\",\\\"peekViewResult.matchHighlightBackground\\\":\\\"#bb800966\\\",\\\"pickerGroup.border\\\":\\\"#3c3c3c\\\",\\\"progressBar.background\\\":\\\"#0078d4\\\",\\\"quickInput.background\\\":\\\"#222222\\\",\\\"quickInput.foreground\\\":\\\"#cccccc\\\",\\\"settings.dropdownBackground\\\":\\\"#313131\\\",\\\"settings.dropdownBorder\\\":\\\"#3c3c3c\\\",\\\"settings.headerForeground\\\":\\\"#ffffff\\\",\\\"settings.modifiedItemIndicator\\\":\\\"#bb800966\\\",\\\"sideBar.background\\\":\\\"#181818\\\",\\\"sideBar.border\\\":\\\"#2b2b2b\\\",\\\"sideBar.foreground\\\":\\\"#cccccc\\\",\\\"sideBarSectionHeader.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.background\\\":\\\"#181818\\\",\\\"statusBar.border\\\":\\\"#2b2b2b\\\",\\\"statusBar.debuggingBackground\\\":\\\"#0078d4\\\",\\\"statusBar.debuggingForeground\\\":\\\"#ffffff\\\",\\\"statusBar.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBar.foreground\\\":\\\"#cccccc\\\",\\\"statusBar.noFolderBackground\\\":\\\"#1f1f1f\\\",\\\"statusBarItem.focusBorder\\\":\\\"#0078d4\\\",\\\"statusBarItem.prominentBackground\\\":\\\"#6e768166\\\",\\\"tab.activeBackground\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorder\\\":\\\"#1f1f1f\\\",\\\"tab.activeBorderTop\\\":\\\"#0078d4\\\",\\\"tab.activeForeground\\\":\\\"#ffffff\\\",\\\"tab.selectedBorderTop\\\":\\\"#6caddf\\\",\\\"tab.border\\\":\\\"#2b2b2b\\\",\\\"tab.hoverBackground\\\":\\\"#1f1f1f\\\",\\\"tab.inactiveBackground\\\":\\\"#181818\\\",\\\"tab.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"tab.unfocusedActiveBorder\\\":\\\"#1f1f1f\\\",\\\"tab.unfocusedActiveBorderTop\\\":\\\"#2b2b2b\\\",\\\"tab.unfocusedHoverBackground\\\":\\\"#1f1f1f\\\",\\\"terminal.foreground\\\":\\\"#cccccc\\\",\\\"terminal.tab.activeBorder\\\":\\\"#0078d4\\\",\\\"textBlockQuote.background\\\":\\\"#2b2b2b\\\",\\\"textBlockQuote.border\\\":\\\"#616161\\\",\\\"textCodeBlock.background\\\":\\\"#2b2b2b\\\",\\\"textLink.activeForeground\\\":\\\"#4daafc\\\",\\\"textLink.foreground\\\":\\\"#4daafc\\\",\\\"textPreformat.foreground\\\":\\\"#d0d0d0\\\",\\\"textPreformat.background\\\":\\\"#3c3c3c\\\",\\\"textSeparator.foreground\\\":\\\"#21262d\\\",\\\"titleBar.activeBackground\\\":\\\"#181818\\\",\\\"titleBar.activeForeground\\\":\\\"#cccccc\\\",\\\"titleBar.border\\\":\\\"#2b2b2b\\\",\\\"titleBar.inactiveBackground\\\":\\\"#1f1f1f\\\",\\\"titleBar.inactiveForeground\\\":\\\"#9d9d9d\\\",\\\"welcomePage.tileBackground\\\":\\\"#2b2b2b\\\",\\\"welcomePage.progress.foreground\\\":\\\"#0078d4\\\"},\\\"watch\\\":false}\",\"workbench.view.extensions.state.hidden\":\"[{\\\"id\\\":\\\"workbench.views.extensions.installed\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchOutdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.workspaceRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.popular\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchRecentlyUpdated\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.otherRecommendations\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"extensions.recommendedList\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.enabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.disabled\\\",\\\"isHidden\\\":true},{\\\"id\\\":\\\"workbench.views.extensions.marketplace\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchInstalled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchEnabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchDisabled\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchBuiltin\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.searchWorkspaceUnsupported\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinFeatureExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinThemeExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.builtinProgrammingLanguageExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.untrustedPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualUnsupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.virtualPartiallySupportedExtensions\\\",\\\"isHidden\\\":false},{\\\"id\\\":\\\"workbench.views.extensions.deprecatedExtensions\\\",\\\"isHidden\\\":false}]\",\"workbench.panel.alignment\":\"center\",\"terminal.hidden\":\"[{\\\"id\\\":\\\"terminal\\\",\\\"isHidden\\\":false}]\"}}"} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts index c94481110..cc915e429 100644 --- a/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/buildDiagnostics.integration.test.ts @@ -9,7 +9,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { AnalysisSetting, BuildDiagnosticsService } from '../../../src/lsptoolshost/buildDiagnosticsService'; import * as integrationHelpers from './integrationHelpers'; import path = require('path'); -describe(`Build and live diagnostics dedupe ${testAssetWorkspace.description}`, () => { +describe(`Build and live diagnostics dedupe`, () => { beforeAll(async () => { await integrationHelpers.activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/classification.integration.test.ts b/test/lsptoolshost/integrationTests/classification.integration.test.ts index 173cb48f5..eeb454deb 100644 --- a/test/lsptoolshost/integrationTests/classification.integration.test.ts +++ b/test/lsptoolshost/integrationTests/classification.integration.test.ts @@ -9,7 +9,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Classification Tests`, () => { +describe(`Classification Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts index 371b1732f..0c82b08ca 100644 --- a/test/lsptoolshost/integrationTests/codeactions.integration.test.ts +++ b/test/lsptoolshost/integrationTests/codeactions.integration.test.ts @@ -14,7 +14,7 @@ import { openFileInWorkspaceAsync, } from './integrationHelpers'; -describe(`[${testAssetWorkspace.description}] Test Code Actions`, () => { +describe(`Code Actions Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/codelens.integration.test.ts b/test/lsptoolshost/integrationTests/codelens.integration.test.ts index 23689a13d..26435533f 100644 --- a/test/lsptoolshost/integrationTests/codelens.integration.test.ts +++ b/test/lsptoolshost/integrationTests/codelens.integration.test.ts @@ -15,7 +15,7 @@ import { openFileInWorkspaceAsync, } from './integrationHelpers'; -describe(`[${testAssetWorkspace.description}] Test CodeLens`, () => { +describe(`CodeLens Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts b/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts index 7b85c4f21..167f59aba 100644 --- a/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts +++ b/test/lsptoolshost/integrationTests/commandEnablement.integration.test.ts @@ -9,7 +9,7 @@ import { activateCSharpExtension } from './integrationHelpers'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { CommonCommands, OmniSharpCommands, RoslynCommands } from './expectedCommands'; -describe(`Command Enablement: ${testAssetWorkspace.description}`, () => { +describe(`Command Enablement Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/completion.integration.test.ts b/test/lsptoolshost/integrationTests/completion.integration.test.ts index 6ed3b93f2..fa3a15008 100644 --- a/test/lsptoolshost/integrationTests/completion.integration.test.ts +++ b/test/lsptoolshost/integrationTests/completion.integration.test.ts @@ -9,7 +9,7 @@ import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } fr import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; -describe(`[${testAssetWorkspace.description}] Test Completion`, () => { +describe(`Completion Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts index 502a8c553..6c8549ac3 100644 --- a/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/documentDiagnostics.integration.test.ts @@ -7,13 +7,19 @@ import * as vscode from 'vscode'; import { describe, test, beforeAll, afterAll, expect, beforeEach, afterEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { AnalysisSetting } from '../../../src/lsptoolshost/buildDiagnosticsService'; -import * as integrationHelpers from './integrationHelpers'; import path = require('path'); import { getCode, setBackgroundAnalysisScopes, waitForExpectedDiagnostics } from './diagnosticsHelpers'; - -describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { +import { + activateCSharpExtension, + closeAllEditorsAsync, + describeIfCSharp, + openFileInWorkspaceAsync, +} from './integrationHelpers'; + +// Restarting the server is required for these tests, but not supported with C# Dev Kit. +describeIfCSharp(`Document Diagnostics Tests`, () => { beforeAll(async () => { - await integrationHelpers.activateCSharpExtension(); + await activateCSharpExtension(); }); afterAll(async () => { @@ -23,11 +29,11 @@ describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { describe('Open document diagnostics', () => { let file: vscode.Uri; beforeEach(async () => { - file = await integrationHelpers.openFileInWorkspaceAsync(path.join('src', 'app', 'diagnostics.cs')); + file = await openFileInWorkspaceAsync(path.join('src', 'app', 'diagnostics.cs')); }); afterEach(async () => { - await integrationHelpers.closeAllEditorsAsync(); + await closeAllEditorsAsync(); }); test('Compiler and analyzer diagnostics reported for open file when set to OpenFiles', async () => { diff --git a/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts b/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts index 404eaf11c..9e489bed9 100644 --- a/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts +++ b/test/lsptoolshost/integrationTests/documentSymbolProvider.integration.test.ts @@ -9,7 +9,7 @@ import * as path from 'path'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; -describe(`DocumentSymbolProvider: ${testAssetWorkspace.description}`, () => { +describe(`Document Symbol Tests`, () => { let fileUri: vscode.Uri; beforeAll(async () => { diff --git a/test/lsptoolshost/integrationTests/formatting.integration.test.ts b/test/lsptoolshost/integrationTests/formatting.integration.test.ts index 654cdd48a..7e7f228ad 100644 --- a/test/lsptoolshost/integrationTests/formatting.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formatting.integration.test.ts @@ -15,7 +15,7 @@ import { import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; import { formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; -describe(`[${testAssetWorkspace.description}] Formatting Tests`, () => { +describe(`Formatting Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts index 998b1268f..70945a9e6 100644 --- a/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts +++ b/test/lsptoolshost/integrationTests/formattingEditorConfig.integration.test.ts @@ -15,7 +15,7 @@ import { import { describe, beforeAll, beforeEach, afterAll, test, afterEach } from '@jest/globals'; import { formatDocumentAsync, formatOnTypeAsync, formatRangeAsync } from './formattingTestHelpers'; -describe(`[${testAssetWorkspace.description}] Formatting With EditorConfig Tests`, () => { +describe(`Formatting With EditorConfig Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts b/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts index 348e714c9..0cf5fc6b2 100644 --- a/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts +++ b/test/lsptoolshost/integrationTests/gotoDefinition.integration.test.ts @@ -11,10 +11,12 @@ import { closeAllEditorsAsync, findRangeOfString, openFileInWorkspaceAsync, + testIfCSharp, + testIfDevKit, } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { +describe(`Go To Definition Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); @@ -61,7 +63,7 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { await navigate(requestPosition, definitionList, 'diagnostics.cs'); }); - test('Navigates to definition in decompiled source', async () => { + testIfCSharp('Navigates to definition in decompiled source', async () => { await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); // Get definitions @@ -84,7 +86,7 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { ); }); - test('Navigates from definition in decompiled source goes to decompiled source', async () => { + testIfCSharp('Navigates from definition in decompiled source goes to decompiled source', async () => { await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); // Get definitions @@ -209,6 +211,80 @@ describe(`[${testAssetWorkspace.description}] Test Go To Definition`, () => { new vscode.Range(new vscode.Position(14, 25), new vscode.Position(14, 35)) ); }); + + testIfDevKit('Navigates to definition in source link', async () => { + await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); + + // Get definitions + const requestPosition = new vscode.Position(13, 9); + const definitionList = ( + await vscode.commands.executeCommand( + 'vscode.executeDefinitionProvider', + vscode.window.activeTextEditor!.document.uri, + requestPosition + ) + ); + expect(definitionList.length).toEqual(1); + const definitionPath = definitionList[0].uri; + expect(definitionPath.fsPath).toContain('FactAttribute.cs'); + + // Navigate + await navigate(requestPosition, definitionList, 'FactAttribute.cs'); + + // File should not be decompiled and should come from the symbol cache + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + expect(vscode.window.activeTextEditor?.document.uri.path.toLowerCase()).toContain('symbolcache'); + }); + + testIfDevKit('Navigates from definition in source link source goes to source link', async () => { + await openFileInWorkspaceAsync(path.join('test', 'UnitTest1.cs')); + + // Get definitions + const requestPosition = new vscode.Position(13, 9); + const definitionList = ( + await vscode.commands.executeCommand( + 'vscode.executeDefinitionProvider', + vscode.window.activeTextEditor!.document.uri, + requestPosition + ) + ); + expect(definitionList.length).toEqual(1); + const definitionPath = definitionList[0].uri; + expect(definitionPath.fsPath).toContain('FactAttribute.cs'); + + // Navigate + await navigate(requestPosition, definitionList, 'FactAttribute.cs'); + // File should not be decompiled and should come from the symbol cache + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + expect(vscode.window.activeTextEditor?.document.uri.path.toLowerCase()).toContain('symbolcache'); + + // Get definitions from inside FactAttribute.cs + // Rather than hardcoding a location, we find the location by searching the document as different SDKs may have different versions of the source. + const rangeOfDefinition = findRangeOfString(vscode.window.activeTextEditor!, 'XunitTestCaseDiscoverer')[0]; + const attributeUsageDefinition = ( + await vscode.commands.executeCommand( + 'vscode.executeDefinitionProvider', + vscode.window.activeTextEditor!.document.uri, + rangeOfDefinition.start + ) + ); + + expect(attributeUsageDefinition.length).toEqual(1); + const attributeDefinitionPath = attributeUsageDefinition[0].uri; + expect(attributeDefinitionPath.fsPath).toContain('XunitTestCaseDiscovererAttribute.cs'); + + // Navigate + await navigate(rangeOfDefinition.start, attributeUsageDefinition, 'XunitTestCaseDiscovererAttribute.cs'); + // File should not be decompiled and should come from the symbol cache + expect(vscode.window.activeTextEditor?.document.getText()).not.toContain( + '// Decompiled with ICSharpCode.Decompiler' + ); + expect(vscode.window.activeTextEditor?.document.uri.path.toLowerCase()).toContain('symbolcache'); + }); }); async function navigate( diff --git a/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts b/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts index 51a3c4400..f077b290b 100644 --- a/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts +++ b/test/lsptoolshost/integrationTests/gotoImplementation.integration.test.ts @@ -14,7 +14,7 @@ import { } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test Go To Implementation`, () => { +describe(`Go To Implementation Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/hover.integration.test.ts b/test/lsptoolshost/integrationTests/hover.integration.test.ts index 46bbe7fac..ff9a3a318 100644 --- a/test/lsptoolshost/integrationTests/hover.integration.test.ts +++ b/test/lsptoolshost/integrationTests/hover.integration.test.ts @@ -10,7 +10,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Hover Tests`, () => { +describe(`Hover Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/integrationHelpers.ts b/test/lsptoolshost/integrationTests/integrationHelpers.ts index 6bf5a5273..4513f8b4d 100644 --- a/test/lsptoolshost/integrationTests/integrationHelpers.ts +++ b/test/lsptoolshost/integrationTests/integrationHelpers.ts @@ -5,12 +5,13 @@ import * as vscode from 'vscode'; import * as path from 'path'; +import * as semver from 'semver'; import { CSharpExtensionExports } from '../../../src/csharpExtensionExports'; import { existsSync } from 'fs'; import { ServerState } from '../../../src/lsptoolshost/serverStateChange'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { EOL } from 'os'; -import { expect } from '@jest/globals'; +import { describe, expect, test } from '@jest/globals'; export async function activateCSharpExtension(): Promise { const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); @@ -18,14 +19,29 @@ export async function activateCSharpExtension(): Promise { throw new Error('Failed to find installation of ms-dotnettools.csharp'); } - // Run a restore manually to make sure the project is up to date since we don't have automatic restore. - await testAssetWorkspace.restoreLspToolsHostAsync(); - - // If the extension is already active, we need to restart it to ensure we start with a clean server state. - // For example, a previous test may have changed configs, deleted restored packages or made other changes that would put it in an invalid state. let shouldRestart = false; - if (csharpExtension.isActive) { - shouldRestart = true; + + const csDevKitExtension = vscode.extensions.getExtension('ms-dotnettools.csdevkit'); + if (usingDevKit()) { + if (!csDevKitExtension) { + throw new Error('Failed to find installation of ms-dotnettools.csdevkit'); + } + + // Ensure C# Dev Kit has a minimum version. + const version = csDevKitExtension.packageJSON.version; + const minimumVersion = '1.10.18'; + if (semver.lt(version, minimumVersion)) { + throw new Error(`C# Dev Kit version ${version} is below required minimum of ${minimumVersion}`); + } + } else { + // Run a restore manually to make sure the project is up to date since we don't have automatic restore. + await testAssetWorkspace.restoreLspToolsHostAsync(); + + // If the extension is already active, we need to restart it to ensure we start with a clean server state. + // For example, a previous test may have changed configs, deleted restored packages or made other changes that would put it in an invalid state. + if (csharpExtension.isActive) { + shouldRestart = true; + } } // Explicitly await the extension activation even if completed so that we capture any errors it threw during activation. @@ -39,6 +55,10 @@ export async function activateCSharpExtension(): Promise { } } +export function usingDevKit(): boolean { + return vscode.workspace.getConfiguration().get('dotnet.preferCSharpExtension') !== true; +} + export async function openFileInWorkspaceAsync(relativeFilePath: string): Promise { const root = vscode.workspace.workspaceFolders![0].uri.fsPath; const filePath = path.join(root, relativeFilePath); @@ -64,6 +84,10 @@ export async function revertActiveFile(): Promise { } export async function restartLanguageServer(): Promise { + if (usingDevKit()) { + // Restarting the server will cause us to lose all project information when using C# Dev Kit. + throw new Error('Cannot restart language server when using the C# Dev Kit'); + } const csharpExtension = vscode.extensions.getExtension('ms-dotnettools.csharp'); // Register to wait for initialization events and restart the server. const waitForInitialProjectLoad = new Promise((resolve, _) => { @@ -174,3 +198,16 @@ export async function expectText(document: vscode.TextDocument, expectedLines: s const expectedText = expectedLines.join(EOL); expect(document.getText()).toBe(expectedText); } + +export const describeIfCSharp = describeIf(!usingDevKit()); +export const describeIfDevKit = describeIf(usingDevKit()); +export const testIfCSharp = testIf(!usingDevKit()); +export const testIfDevKit = testIf(usingDevKit()); + +function describeIf(condition: boolean) { + return condition ? describe : describe.skip; +} + +function testIf(condition: boolean) { + return condition ? test : test.skip; +} diff --git a/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts b/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts index b3281667a..a85c1df20 100644 --- a/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts +++ b/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts @@ -10,7 +10,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import * as integrationHelpers from './integrationHelpers'; import { InlayHint, InlayHintKind, Position } from 'vscode-languageserver-protocol'; -describe(`[${testAssetWorkspace.description}] Test LSP Inlay Hints `, () => { +describe(`Inlay Hints Tests`, () => { beforeAll(async () => { const editorConfig = vscode.workspace.getConfiguration('editor'); await editorConfig.update('inlayHints.enabled', true); diff --git a/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts b/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts index 19eb9ecfa..8a91c10f8 100644 --- a/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts +++ b/test/lsptoolshost/integrationTests/onAutoInsert.integration.test.ts @@ -16,7 +16,7 @@ import { } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test OnAutoInsert`, () => { +describe(`OnAutoInsert Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/references.integration.test.ts b/test/lsptoolshost/integrationTests/references.integration.test.ts index 7b9042e25..f17706c7e 100644 --- a/test/lsptoolshost/integrationTests/references.integration.test.ts +++ b/test/lsptoolshost/integrationTests/references.integration.test.ts @@ -14,7 +14,7 @@ import { } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Test Find References`, () => { +describe(`Find References Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts b/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts index 6ac5f7aa0..92d0f4111 100644 --- a/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts +++ b/test/lsptoolshost/integrationTests/signatureHelp.integration.test.ts @@ -9,7 +9,7 @@ import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, openFileInWorkspaceAsync } from './integrationHelpers'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; -describe(`[${testAssetWorkspace.description}] Signature Help Tests`, () => { +describe(`Signature Help Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace new file mode 100644 index 000000000..cb1af05bd --- /dev/null +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/devkit_slnWithCsproj.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "path": ".." + } + ], + "settings": { + "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", + "dotnet.server.trace": "Trace", + "dotnet.server.useOmnisharp": false, + "dotnet.preferCSharpExtension": false, + } +} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace deleted file mode 100644 index a2db107ff..000000000 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace +++ /dev/null @@ -1,14 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "omnisharp.path": "latest", - "omnisharp.enableRoslynAnalyzers": true, - "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": true, - "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln" - } -} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace deleted file mode 100644 index 02f5acaa6..000000000 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace +++ /dev/null @@ -1,14 +0,0 @@ -{ - "folders": [ - { - "path": ".." - } - ], - "settings": { - "omnisharp.path": "latest", - "omnisharp.enableRoslynAnalyzers": true, - "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": false, - "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", - } -} \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace similarity index 84% rename from test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace rename to test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace index cef8ba814..6da609d8b 100644 --- a/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace +++ b/test/lsptoolshost/integrationTests/testAssets/slnWithCsproj/.vscode/slnWithCsproj.code-workspace @@ -8,6 +8,6 @@ "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", "dotnet.server.trace": "Trace", "dotnet.server.useOmnisharp": false, - "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts index 11e9fcd48..50d41afb6 100644 --- a/test/lsptoolshost/integrationTests/unitTests.integration.test.ts +++ b/test/lsptoolshost/integrationTests/unitTests.integration.test.ts @@ -5,17 +5,18 @@ import * as vscode from 'vscode'; import * as path from 'path'; -import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; +import { beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { activateCSharpExtension, closeAllEditorsAsync, + describeIfCSharp, getCodeLensesAsync, openFileInWorkspaceAsync, } from './integrationHelpers'; import { TestProgress } from '../../../src/lsptoolshost/roslynProtocol'; -describe(`[${testAssetWorkspace.description}] Test Unit Testing`, () => { +describeIfCSharp(`Unit Testing Tests`, () => { beforeAll(async () => { await activateCSharpExtension(); }); diff --git a/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts b/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts index 47803daa4..234f87a4c 100644 --- a/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts +++ b/test/lsptoolshost/integrationTests/workspaceDiagnostics.integration.test.ts @@ -7,11 +7,13 @@ import * as vscode from 'vscode'; import { describe, test, expect, beforeAll, afterAll } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import { AnalysisSetting } from '../../../src/lsptoolshost/buildDiagnosticsService'; -import * as integrationHelpers from './integrationHelpers'; import { getCode, setBackgroundAnalysisScopes, waitForExpectedDiagnostics } from './diagnosticsHelpers'; -describe(`[${testAssetWorkspace.description}] Test diagnostics`, () => { +import { activateCSharpExtension, describeIfCSharp } from './integrationHelpers'; + +// Restarting the server is required for these tests, but not supported with C# Dev Kit. +describeIfCSharp(`Workspace Diagnostic Tests`, () => { beforeAll(async () => { - await integrationHelpers.activateCSharpExtension(); + await activateCSharpExtension(); }); afterAll(async () => { diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace index 52264bf4f..2803e626d 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_BasicRazorApp2_1.code-workspace @@ -6,6 +6,7 @@ ], "settings": { "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": false + "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace index 93e63a168..91aed1b9b 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/omnisharp_lsp_BasicRazorApp2_1.code-workspace @@ -6,6 +6,7 @@ ], "settings": { "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": true + "omnisharp.enableLspDriver": true, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace index d2bbe1696..c8bcfca06 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_lsp_singleCsproj.code-workspace @@ -8,6 +8,7 @@ "omnisharp.path": "latest", "omnisharp.enableRoslynAnalyzers": true, "omnisharp.enableLspDriver": true, - "dotnet.server.useOmnisharp": true + "dotnet.server.useOmnisharp": true, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace index 8bce15410..047b8152a 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/singleCsproj/.vscode/omnisharp_singleCsproj.code-workspace @@ -8,6 +8,7 @@ "omnisharp.path": "latest", "omnisharp.enableRoslynAnalyzers": true, "omnisharp.enableLspDriver": false, - "dotnet.server.useOmnisharp": true + "dotnet.server.useOmnisharp": true, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace index 3b81724d7..804fdce25 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_lsp_slnFilterWithCsproj.code-workspace @@ -10,5 +10,6 @@ "omnisharp.enableRoslynAnalyzers": true, "dotnet.server.useOmnisharp": true, "omnisharp.enableLspDriver": true, + "dotnet.preferCSharpExtension": true, } } diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace index 2b4d5a258..33ee62602 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnFilterWithCsproj/.vscode/omnisharp_slnFilterWithCsproj.code-workspace @@ -9,6 +9,7 @@ "omnisharp.path": "latest", "omnisharp.enableRoslynAnalyzers": true, "dotnet.server.useOmnisharp": true, - "omnisharp.enableLspDriver": false + "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace index cef8ba814..46ef8b6ed 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/lsp_tools_host_slnWithCsproj.code-workspace @@ -8,6 +8,7 @@ "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", "dotnet.server.trace": "Trace", "dotnet.server.useOmnisharp": false, - "omnisharp.enableLspDriver": false, + "omnisharp.enableLspDriver": false, + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace index a2db107ff..bd81a9ff7 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_lsp_slnWithCsproj.code-workspace @@ -9,6 +9,7 @@ "omnisharp.enableRoslynAnalyzers": true, "dotnet.server.useOmnisharp": true, "omnisharp.enableLspDriver": true, - "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln" + "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace index 02f5acaa6..3fa872aa9 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithCsproj/.vscode/omnisharp_slnWithCsproj.code-workspace @@ -10,5 +10,6 @@ "dotnet.server.useOmnisharp": true, "omnisharp.enableLspDriver": false, "dotnet.defaultSolution": "b_SecondInOrder_SlnFile.sln", + "dotnet.preferCSharpExtension": true, } } \ No newline at end of file diff --git a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json index 16163b0cf..5ad5ec910 100644 --- a/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json +++ b/test/omnisharp/omnisharpIntegrationTests/testAssets/slnWithGenerator/.vscode/settings.json @@ -1,3 +1,4 @@ { - "dotnet.server.useOmnisharp": true + "dotnet.server.useOmnisharp": true, + "dotnet.preferCSharpExtension": true, } \ No newline at end of file diff --git a/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/BasicRazorApp2_1.code-workspace similarity index 76% rename from test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace rename to test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/BasicRazorApp2_1.code-workspace index 18b2ef247..805d62e7e 100644 --- a/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/lsp_tools_host_BasicRazorApp2_1.code-workspace +++ b/test/razor/razorIntegrationTests/testAssets/BasicRazorApp2_1/.vscode/BasicRazorApp2_1.code-workspace @@ -9,6 +9,7 @@ "dotnet.server.trace": "Trace", "dotnet.server.useOmnisharp": false, "omnisharp.enableLspDriver": false, - "razor.server.trace": "Trace" + "razor.server.trace": "Trace", + "dotnet.preferCSharpExtension": true, } } diff --git a/test/vscodeLauncher.ts b/test/vscodeLauncher.ts index 1b51df03a..13e6798aa 100644 --- a/test/vscodeLauncher.ts +++ b/test/vscodeLauncher.ts @@ -8,91 +8,85 @@ import * as path from 'path'; import { downloadAndUnzipVSCode, resolveCliArgsFromVSCodeExecutablePath, runTests } from '@vscode/test-electron'; import { execChildProcess } from '../src/common'; -function getSln(workspacePath: string): string | undefined { - if (workspacePath.endsWith('slnWithGenerator')) { - return 'slnWithGenerator.sln'; - } - return undefined; -} - -async function main() { - try { - const vscodeExecutablePath = await downloadAndUnzipVSCode('stable'); - const [cli, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath); - - console.log('Display: ' + process.env.DISPLAY); - - const fullArgs = [...args, '--install-extension', 'ms-dotnettools.vscode-dotnet-runtime']; - - // Since we're using shell execute, spaces in the CLI path will get interpeted as args - // Therefore we wrap the CLI path in quotes as on MacOS the path can contain spaces. - const cliWrapped = `"${cli}"`; - console.log(`${cliWrapped} ${fullArgs}`); - - const result = cp.spawnSync(cliWrapped, fullArgs, { - encoding: 'utf-8', - stdio: 'inherit', - // Workaround as described in https://github.com/nodejs/node/issues/52554 - shell: true, - }); - if (result.error || result.status !== 0) { - throw new Error(`Failed to install the runtime extension: ${JSON.stringify(result)}`); - } - - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = process.env.CODE_EXTENSIONS_PATH; - if (!extensionDevelopmentPath) { - throw new Error('Environment variable CODE_EXTENSIONS_PATH is empty'); - } - - // The path to the extension test runner script - // Passed to --extensionTestsPath - const extensionTestsPath = process.env.EXTENSIONS_TESTS_PATH; - - if (!extensionTestsPath) { - console.error('Empty extension tests path'); - process.exit(-1); +export async function prepareVSCodeAndExecuteTests( + extensionDevelopmentPath: string, + extensionTestsPath: string, + workspacePath: string, + userDataDir: string, + env: NodeJS.ProcessEnv +): Promise { + const vscodeExecutablePath = await downloadAndUnzipVSCode('stable'); + const [cli, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath); + + console.log('Display: ' + env.DISPLAY); + + // Different test runs may want to have Dev Kit be active or in-active. + // Rather than having to uninstall Dev Kit between different test runs, we use workspace settings + // to control which extensions are active - and we always install Dev Kit. + const extensionsToInstall = [ + 'ms-dotnettools.vscode-dotnet-runtime', + 'ms-dotnettools.csharp', + 'ms-dotnettools.csdevkit', + ]; + + await installExtensions(extensionsToInstall, cli, args); + + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + env.CODE_EXTENSIONS_PATH = extensionDevelopmentPath; + + console.log(`workspace path = '${workspacePath}'`); + + const sln = getSln(workspacePath); + if (sln) { + // Run a build before the tests, to ensure that source generators are set up correctly + if (!process.env.DOTNET_ROOT) { + throw new Error('Environment variable DOTNET_ROOT is not set'); } - // The integration tests expect that the workspace to run the - // tests against is set in an environment variable. - const workspacePath = process.env.CODE_TESTS_WORKSPACE; + const dotnetPath = path.join(process.env.DOTNET_ROOT, 'dotnet'); + await execChildProcess(`${dotnetPath} build ${sln}`, workspacePath, process.env); + } - if (!workspacePath) { - console.error(`Empty workspace path`); - process.exit(-1); - } + // Download VS Code, unzip it and run the integration test + const exitCode = await runTests({ + vscodeExecutablePath: vscodeExecutablePath, + extensionDevelopmentPath: extensionDevelopmentPath, + extensionTestsPath: extensionTestsPath, + // Launch with info logging as anything else is way too verbose and will hide test results. + launchArgs: [workspacePath, '-n', '--log', 'info', '--user-data-dir', userDataDir], + extensionTestsEnv: env, + }); + + return exitCode; +} - console.log(`workspace path = '${workspacePath}'`); +async function installExtensions(extensionIds: string[], vscodeCli: string, vscodeArgs: string[]): Promise { + for (const extensionId of extensionIds) { + vscodeArgs.push('--install-extension', extensionId); + } - const sln = getSln(workspacePath); - if (sln) { - // Run a build before the tests, to ensure that source generators are set up correctly - if (!process.env.DOTNET_ROOT) { - throw new Error('Environment variable DOTNET_ROOT is not set'); - } + // Since we're using shell execute, spaces in the CLI path will get interpeted as args + // Therefore we wrap the CLI path in quotes as on MacOS the path can contain spaces. + const cliWrapped = `"${vscodeCli}"`; + console.log(`${cliWrapped} ${vscodeArgs}`); + + const result = cp.spawnSync(cliWrapped, vscodeArgs, { + encoding: 'utf-8', + stdio: 'inherit', + // Workaround as described in https://github.com/nodejs/node/issues/52554 + shell: true, + }); + if (result.error || result.status !== 0) { + throw new Error(`Failed to install the runtime extension: ${JSON.stringify(result)}`); + } - const dotnetPath = path.join(process.env.DOTNET_ROOT, 'dotnet'); - await execChildProcess(`${dotnetPath} build ${sln}`, workspacePath, process.env); - } + console.log(); +} - // Download VS Code, unzip it and run the integration test - const exitCode = await runTests({ - vscodeExecutablePath: vscodeExecutablePath, - extensionDevelopmentPath: extensionDevelopmentPath, - extensionTestsPath: extensionTestsPath, - // Launch with info logging as anything else is way too verbose and will hide test results. - launchArgs: [workspacePath, '-n', '--log', 'info'], - extensionTestsEnv: process.env, - }); - - process.exit(exitCode); - } catch (err) { - console.error(err); - console.error('Failed to run tests'); - process.exit(1); +function getSln(workspacePath: string): string | undefined { + if (workspacePath.endsWith('slnWithGenerator')) { + return 'slnWithGenerator.sln'; } + return undefined; } - -main(); From c56cf2f6897168099c179b25d52ac692dd3e08dd Mon Sep 17 00:00:00 2001 From: David Barbet Date: Mon, 16 Sep 2024 14:22:13 -0700 Subject: [PATCH 06/14] Add documentation on reporting issues --- .vscodeignore | 1 + SUPPORT.md | 60 ++++++++++++++++++++++++++++++++++- docs/background_analysis.png | Bin 0 -> 49281 bytes docs/crash_dump.png | Bin 0 -> 34826 bytes docs/inspect_tokens.png | Bin 0 -> 68871 bytes docs/language_status.png | Bin 0 -> 13786 bytes docs/report_issue.png | Bin 0 -> 12936 bytes docs/trace_logs.png | Bin 0 -> 12897 bytes 8 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 docs/background_analysis.png create mode 100644 docs/crash_dump.png create mode 100644 docs/inspect_tokens.png create mode 100644 docs/language_status.png create mode 100644 docs/report_issue.png create mode 100644 docs/trace_logs.png diff --git a/.vscodeignore b/.vscodeignore index b4e55e60b..987329b20 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -13,6 +13,7 @@ .vscode/** .vscode-test/** coverage/** +docs/** out/** msbuild/** src/** diff --git a/SUPPORT.md b/SUPPORT.md index c13db59d4..6a60ce364 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,11 +1,69 @@ # Support -## How to file issues and get help +## How to get help This project uses GitHub Issues to track bugs and feature requests. Please search the [existing issues](https://github.com/dotnet/vscode-csharp/issues) before filing new issues to avoid duplicates. For new issues, file your bug or feature request as a new Issue. +This repository tracks issues related to the C# extension. Any issues related to the C# editing experience, Roslyn language server and other basic C# functionality should be filed here (regardless of if you're using C# Dev Kit or not). + +For C# Dev Kit only features such as the Solution Explorer, Test Window, etc, please see https://github.com/microsoft/vscode-dotnettools/blob/main/SUPPORT.md + For help and questions about using this project, please see the [README](https://github.com/dotnet/vscode-csharp/blob/main/README.md). +### How to file an issue + +We highly recommend using the C# extension's built-in command, `CSharp: Report an issue` (`csharp.reportIssue`) to create a pre-filled issue template. This will include helpful details such as local dotnet installations, installed extensions, and other information. +![csharp.reportIssue command](./docs/report_issue.png) + +#### Collecting general logs + +The template has a section to include the `C#` output window logs. These logs are not automatically included as they may contain personal information (such as full file paths and project names), but they are key to resolving problems. + +1. First, set `dotnet.server.trace` to `Trace` in VSCode settings + ![settings window showing trace option](./docs/trace_logs.png) +2. Reload the window via the `Developer: Reload Window` (`workbench.action.reloadWindow`) command +3. Reproduce the issue +4. Open the output window via `View` -> `Output` and change to the `C#` output window. +5. Select all (e.g. cntrl+a) and copy paste into the issue template under the 'C# Log' section. If you need to redact file paths and other information, please do so at this time. +6. Once the logs are collected, reset `dotnet.server.trace` back to `Information` + +Oftentimes the C# logs are enough, but sometimes when dealing with LSP server issues, the LSP trace logs are required. These can be found by following the same steps as above, but using the `C# LSP Trace Logs` output window instead. + +#### Project loading problems + +A common cause of missing language features is a failure to load the project(s) or solution. There can be a number of reasons why this happens, and some additional information is generally necessary to figure out what is going wrong. + +First, providing the information from the issue template and the general logs (see above section) is almost always necessary. After that there are a couple things to check: + +1. Is the file found in the correct project by the language server? This information is displayed in the bottom right corner of the VSCode window in the language status section. This item can be pinned using the pin icon so that it is always displayed. + + ![language status bar opened showing file active project context](./docs/language_status.png) +2. If using C# Dev Kit, check that the Solution Explorer displays the project with the expected references. If not as expected, please also provide the contents of the `Projects` output window in the issue. + +#### Colorization problems + +For issues related to classification (colorizing the document), please provide the following +1. Which theme is currently being used +2. A screenshot of the `Developer: Inspect Editor Tokens and Scopes` (`editor.action.inspectTMScopes`) command output on the incorrect word +![inspect tokens and scopes output](./docs/inspect_tokens.png) + +#### Diagnostics problems + +For issues with diagnostics, please provide values of the background analysis scope options, `dotnet.backgroundAnalysis.analyzerDiagnosticsScope` and `dotnet.backgroundAnalysis.compilerDiagnosticsScope` +![background analysis settings](./docs/background_analysis.png) + +#### Language server crashing + +As before, the general log collection is usually useful. However we're not always able to diagnose just from the logs. In that case a crash dump is useful. This can be collected by setting the `dotnet.server.crashDumpPath` VSCode setting to a user-writeable folder. +![vscode setting for crash dump path](./docs/crash_dump.png) + +When the server crashes, this should create a crash dump for it. + +> [!WARNING] +> The dump can contain detailed information on the project - generally we will provide an email so that it can be shared privately + + + ## Microsoft Support Policy Support for this project is limited to the resources listed above. diff --git a/docs/background_analysis.png b/docs/background_analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..66d2bfb4cc1c9a9d318a561aa4f617247e98f1cc GIT binary patch literal 49281 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 z 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 W_l=kS%i%rL(aTE8Nfe3e`~Mf?KeNXG literal 0 HcmV?d00001 diff --git a/docs/crash_dump.png b/docs/crash_dump.png new file mode 100644 index 0000000000000000000000000000000000000000..42a6e3dca2a431f18c22c320cf633a9bc941cdd9 GIT binary patch literal 34826 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 gZ{*T3<$;8?Q1yf|ghTl8dn^nU1 literal 0 HcmV?d00001 diff --git a/docs/report_issue.png b/docs/report_issue.png new file mode 100644 index 0000000000000000000000000000000000000000..8726d4121982667b557b78dc4f72d9635ca3c776 GIT binary patch literal 12936 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 Date: Tue, 17 Sep 2024 17:34:01 -0700 Subject: [PATCH 07/14] bump razor to 9.0.0-preview.24467.1 --- CHANGELOG.md | 13 +++++++++++++ package.json | 4 ++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6e135efa..aa0974b28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,19 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest +* Update Razor to 9.0.0-preview.24467.1 + * Fixing WrapWithDiv bug (PR: [#10871](https://github.com/dotnet/razor/pull/10871)) + * Switch to new VMR control schema. (PR: [#10883](https://github.com/dotnet/razor/pull/10883)) + * Ensure type arguments are `global::` qualified (PR: [#10834](https://github.com/dotnet/razor/pull/10834)) + * Fix LF line-ending auto format bug (PR: [#10802](https://github.com/dotnet/razor/pull/10802)) + * Change RazorSyntaxTree.Diagnostics from an IReadOnlyList to an ImmutableArray (PR: [#10797](https://github.com/dotnet/razor/pull/10797)) + * Clarify [EventHandler] tag helper discovery logic and avoid exception (PR: [#10828](https://github.com/dotnet/razor/pull/10828)) + * Fix setting breakpoints with self versioned documents (PR: [#10811](https://github.com/dotnet/razor/pull/10811)) + * Write out JS comments when there would be 4 or more consecutive tildes in generated Html (PR: [#10805](https://github.com/dotnet/razor/pull/10805)) + * Global namespace component bind (PR: [#10798](https://github.com/dotnet/razor/pull/10798)) + * Fix find all references calls to Roslyn (PR: [#10807](https://github.com/dotnet/razor/pull/10807)) + * Change UseConsolidatedMvcViews to default to true (PR: [#10795](https://github.com/dotnet/razor/pull/10795)) + * Fix provisional completion corrupting generated C# documents (PR: [#10806](https://github.com/dotnet/razor/pull/10806)) * Add signing support to VSIX (PR: [#7490](https://github.com/dotnet/vscode-csharp/pull/7490)) * Update Debugger to v2.47.0 (PR: [#7547](https://github.com/dotnet/vscode-csharp/pull/7547)) * Adds in support for .NET 9 Break for Async User-Unhandled diff --git a/package.json b/package.json index a333bc6db..337dc2161 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "defaults": { "roslyn": "4.12.0-3.24463.6", "omniSharp": "1.39.11", - "razor": "9.0.0-preview.24427.2", + "razor": "9.0.0-preview.24467.1", "razorOmnisharp": "7.0.0-preview.23363.1", "xamlTools": "17.12.35311.18" }, @@ -5592,4 +5592,4 @@ } } } -} \ No newline at end of file +} From dd71f42a954a91f238745dab4b24cf6d1d9190bc Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 18 Sep 2024 10:47:43 -0400 Subject: [PATCH 08/14] Bump xamlTools to 17.12.35318.29 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6e135efa..c8ab5b783 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest +* Bump xamltools to 17.12.35318.29 (PR: [#7577](https://github.com/dotnet/vscode-csharp/pull/7577)) + +# 2.48.x * Add signing support to VSIX (PR: [#7490](https://github.com/dotnet/vscode-csharp/pull/7490)) * Update Debugger to v2.47.0 (PR: [#7547](https://github.com/dotnet/vscode-csharp/pull/7547)) * Adds in support for .NET 9 Break for Async User-Unhandled diff --git a/package.json b/package.json index a333bc6db..133e0482b 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "omniSharp": "1.39.11", "razor": "9.0.0-preview.24427.2", "razorOmnisharp": "7.0.0-preview.23363.1", - "xamlTools": "17.12.35311.18" + "xamlTools": "17.12.35318.29" }, "main": "./dist/extension", "l10n": "./l10n", From 0b71cbfe83357ff4ead1b5b97db060422f78c5ad Mon Sep 17 00:00:00 2001 From: Jordi Ramos Date: Wed, 18 Sep 2024 09:35:29 -0700 Subject: [PATCH 09/14] fix changelog and package.json --- CHANGELOG.md | 13 ++----------- package.json | 2 +- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa0974b28..5f0f34365 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,18 +5,9 @@ # Latest * Update Razor to 9.0.0-preview.24467.1 - * Fixing WrapWithDiv bug (PR: [#10871](https://github.com/dotnet/razor/pull/10871)) - * Switch to new VMR control schema. (PR: [#10883](https://github.com/dotnet/razor/pull/10883)) - * Ensure type arguments are `global::` qualified (PR: [#10834](https://github.com/dotnet/razor/pull/10834)) * Fix LF line-ending auto format bug (PR: [#10802](https://github.com/dotnet/razor/pull/10802)) - * Change RazorSyntaxTree.Diagnostics from an IReadOnlyList to an ImmutableArray (PR: [#10797](https://github.com/dotnet/razor/pull/10797)) - * Clarify [EventHandler] tag helper discovery logic and avoid exception (PR: [#10828](https://github.com/dotnet/razor/pull/10828)) - * Fix setting breakpoints with self versioned documents (PR: [#10811](https://github.com/dotnet/razor/pull/10811)) - * Write out JS comments when there would be 4 or more consecutive tildes in generated Html (PR: [#10805](https://github.com/dotnet/razor/pull/10805)) - * Global namespace component bind (PR: [#10798](https://github.com/dotnet/razor/pull/10798)) - * Fix find all references calls to Roslyn (PR: [#10807](https://github.com/dotnet/razor/pull/10807)) - * Change UseConsolidatedMvcViews to default to true (PR: [#10795](https://github.com/dotnet/razor/pull/10795)) - * Fix provisional completion corrupting generated C# documents (PR: [#10806](https://github.com/dotnet/razor/pull/10806)) + +# 2.48.x * Add signing support to VSIX (PR: [#7490](https://github.com/dotnet/vscode-csharp/pull/7490)) * Update Debugger to v2.47.0 (PR: [#7547](https://github.com/dotnet/vscode-csharp/pull/7547)) * Adds in support for .NET 9 Break for Async User-Unhandled diff --git a/package.json b/package.json index 337dc2161..960d673b1 100644 --- a/package.json +++ b/package.json @@ -5592,4 +5592,4 @@ } } } -} +} \ No newline at end of file From 4369bdb0d260430e21049087e6373d1e940d7f95 Mon Sep 17 00:00:00 2001 From: "gel@microsoft.com" Date: Mon, 16 Sep 2024 17:55:31 -0700 Subject: [PATCH 10/14] Register relatedFilesProvider for C# --- src/lsptoolshost/copilot.ts | 89 ++++++++++++++++++++++++ src/lsptoolshost/roslynLanguageServer.ts | 2 + src/lsptoolshost/roslynProtocol.ts | 22 ++++++ 3 files changed, 113 insertions(+) create mode 100644 src/lsptoolshost/copilot.ts diff --git a/src/lsptoolshost/copilot.ts b/src/lsptoolshost/copilot.ts new file mode 100644 index 000000000..9df291455 --- /dev/null +++ b/src/lsptoolshost/copilot.ts @@ -0,0 +1,89 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { CSharpExtensionId } from '../constants/csharpExtensionId'; +import { CopilotRelatedDocumentsReport, CopilotRelatedDocumentsRequest } from './roslynProtocol'; +import { RoslynLanguageServer } from './roslynLanguageServer'; +import { UriConverter } from './uriConverter'; +import { TextDocumentIdentifier } from 'vscode-languageserver-protocol'; + +export async function registerCopilotExtension(languageServer: RoslynLanguageServer, channel: vscode.OutputChannel) { + const ext = vscode.extensions.getExtension('github.copilot'); + if (!ext) { + channel.appendLine('GitHub Copilot extension not installed. Skipping call to `registerRelatedFilesProvider`'); + return; + } + await ext.activate(); + const relatedAPI = ext.exports as + | { + registerRelatedFilesProvider( + providerId: { extensionId: string; languageId: string }, + callback: ( + uri: vscode.Uri + ) => Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> + ): void; + } + | undefined; + if (!relatedAPI) { + channel.appendLine( + 'Incompatible GitHub Copilot extension installed. Skipping call to `registerRelatedFilesProvider`' + ); + return; + } + channel.appendLine('registerRelatedFilesProvider succeeded.'); + + const id = { + extensionId: CSharpExtensionId, + languageId: 'csharp', + }; + + relatedAPI.registerRelatedFilesProvider(id, async (uri) => { + const writeOutput = (output: CopilotRelatedDocumentsReport[], builder: vscode.Uri[] | null) => { + if (output) { + for (const report of output) { + if (report._vs_file_paths) { + for (const filePath of report._vs_file_paths) { + channel.appendLine('found related file: ' + filePath); + builder?.push(vscode.Uri.file(filePath)); + } + } + } + } + }; + + const relatedFiles: vscode.Uri[] = []; + const uriString = UriConverter.serialize(uri); + const textDocument = TextDocumentIdentifier.create(uriString); + const responsePromise = languageServer.sendRequestWithProgress( + CopilotRelatedDocumentsRequest.type, + { + _vs_textDocument: textDocument, + position: { + line: 0, + character: 0, + }, + }, + async (p) => { + writeOutput(p, relatedFiles); + } + ); + + await responsePromise.then( + (result) => { + writeOutput(result, null); + return; + }, + (err) => { + channel.appendLine(err); + return; + } + ); + + return { + entries: relatedFiles, + }; + }); +} diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index b46507392..105d0e9f0 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -68,6 +68,7 @@ import { registerLanguageStatusItems } from './languageStatusBar'; import { ProjectContextService } from './services/projectContextService'; import { ProvideDynamicFileResponse } from '../razor/src/dynamicFile/provideDynamicFileResponse'; import { ProvideDynamicFileParams } from '../razor/src/dynamicFile/provideDynamicFileParams'; +import { registerCopilotExtension } from './copilot'; let _channel: vscode.OutputChannel; let _traceChannel: vscode.OutputChannel; @@ -1036,6 +1037,7 @@ export async function activateRoslynLanguageServer( ); registerLanguageStatusItems(context, languageServer, languageServerEvents); + await registerCopilotExtension(languageServer, _channel); // Register any commands that need to be handled by the extension. registerCommands(context, languageServer, hostExecutableResolver, _channel); diff --git a/src/lsptoolshost/roslynProtocol.ts b/src/lsptoolshost/roslynProtocol.ts index 4e5850770..942212c18 100644 --- a/src/lsptoolshost/roslynProtocol.ts +++ b/src/lsptoolshost/roslynProtocol.ts @@ -221,6 +221,16 @@ export interface ProjectNeedsRestoreName { projectFilePaths: string[]; } +export interface CopilotRelatedDocumentsParams extends lsp.WorkDoneProgressParams, lsp.PartialResultParams { + _vs_textDocument: lsp.TextDocumentIdentifier; + position: lsp.Position; +} + +export interface CopilotRelatedDocumentsReport { + _vs_resultId: string | null; + _vs_file_paths: string[] | null; +} + export namespace WorkspaceDebugConfigurationRequest { export const method = 'workspace/debugConfiguration'; export const messageDirection: lsp.MessageDirection = lsp.MessageDirection.clientToServer; @@ -330,3 +340,15 @@ export namespace ProjectNeedsRestoreRequest { export const messageDirection: lsp.MessageDirection = lsp.MessageDirection.serverToClient; export const type = new lsp.RequestType(method); } + +export namespace CopilotRelatedDocumentsRequest { + export const method = 'copilot/_related_documents'; + export const messageDirection: lsp.MessageDirection = lsp.MessageDirection.clientToServer; + export const type = new lsp.ProtocolRequestType< + CopilotRelatedDocumentsParams, + CopilotRelatedDocumentsReport[], + CopilotRelatedDocumentsReport[], + void, + void + >(method); +} From b70b82c76289a5ddfc1b05cf5d00e348eb168504 Mon Sep 17 00:00:00 2001 From: "gel@microsoft.com" Date: Thu, 19 Sep 2024 13:13:33 -0700 Subject: [PATCH 11/14] Address review comments --- src/lsptoolshost/copilot.ts | 65 +++++++++++------------- src/lsptoolshost/roslynLanguageServer.ts | 4 +- src/lsptoolshost/roslynProtocol.ts | 3 +- 3 files changed, 32 insertions(+), 40 deletions(-) diff --git a/src/lsptoolshost/copilot.ts b/src/lsptoolshost/copilot.ts index 9df291455..935bda00d 100644 --- a/src/lsptoolshost/copilot.ts +++ b/src/lsptoolshost/copilot.ts @@ -10,30 +10,33 @@ import { RoslynLanguageServer } from './roslynLanguageServer'; import { UriConverter } from './uriConverter'; import { TextDocumentIdentifier } from 'vscode-languageserver-protocol'; -export async function registerCopilotExtension(languageServer: RoslynLanguageServer, channel: vscode.OutputChannel) { +interface CopilotRelatedFilesProviderRegistration { + registerRelatedFilesProvider( + providerId: { extensionId: string; languageId: string }, + callback: (uri: vscode.Uri) => Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> + ): void; +} + +export async function registerCopilotExtensionAsync( + languageServer: RoslynLanguageServer, + tracingChannel: vscode.OutputChannel +) { const ext = vscode.extensions.getExtension('github.copilot'); if (!ext) { - channel.appendLine('GitHub Copilot extension not installed. Skipping call to `registerRelatedFilesProvider`'); + tracingChannel.appendLine( + 'GitHub Copilot extension not installed. Skip registeration of C# related files provider.' + ); return; } await ext.activate(); - const relatedAPI = ext.exports as - | { - registerRelatedFilesProvider( - providerId: { extensionId: string; languageId: string }, - callback: ( - uri: vscode.Uri - ) => Promise<{ entries: vscode.Uri[]; traits?: { name: string; value: string }[] }> - ): void; - } - | undefined; + const relatedAPI = ext.exports as CopilotRelatedFilesProviderRegistration | undefined; if (!relatedAPI) { - channel.appendLine( - 'Incompatible GitHub Copilot extension installed. Skipping call to `registerRelatedFilesProvider`' + tracingChannel.appendLine( + 'Incompatible GitHub Copilot extension installed. Skip registeration of C# related files provider.' ); return; } - channel.appendLine('registerRelatedFilesProvider succeeded.'); + tracingChannel.appendLine('registeration of C# related files provider for GitHub Copilot extension succeeded.'); const id = { extensionId: CSharpExtensionId, @@ -41,19 +44,17 @@ export async function registerCopilotExtension(languageServer: RoslynLanguageSer }; relatedAPI.registerRelatedFilesProvider(id, async (uri) => { - const writeOutput = (output: CopilotRelatedDocumentsReport[], builder: vscode.Uri[] | null) => { - if (output) { - for (const report of output) { + const buildResult = (reports: CopilotRelatedDocumentsReport[], builder?: vscode.Uri[]) => { + if (reports) { + for (const report of reports) { if (report._vs_file_paths) { for (const filePath of report._vs_file_paths) { - channel.appendLine('found related file: ' + filePath); builder?.push(vscode.Uri.file(filePath)); } } } } }; - const relatedFiles: vscode.Uri[] = []; const uriString = UriConverter.serialize(uri); const textDocument = TextDocumentIdentifier.create(uriString); @@ -66,24 +67,16 @@ export async function registerCopilotExtension(languageServer: RoslynLanguageSer character: 0, }, }, - async (p) => { - writeOutput(p, relatedFiles); - } + async (r) => buildResult(r, relatedFiles) ); - await responsePromise.then( - (result) => { - writeOutput(result, null); - return; - }, - (err) => { - channel.appendLine(err); - return; + try { + await responsePromise; + } catch (e) { + if (e instanceof Error) { + tracingChannel.appendLine(e.message); } - ); - - return { - entries: relatedFiles, - }; + } + return { entries: relatedFiles }; }); } diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index 105d0e9f0..73a38b7b3 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -68,7 +68,7 @@ import { registerLanguageStatusItems } from './languageStatusBar'; import { ProjectContextService } from './services/projectContextService'; import { ProvideDynamicFileResponse } from '../razor/src/dynamicFile/provideDynamicFileResponse'; import { ProvideDynamicFileParams } from '../razor/src/dynamicFile/provideDynamicFileParams'; -import { registerCopilotExtension } from './copilot'; +import { registerCopilotExtensionAsync } from './copilot'; let _channel: vscode.OutputChannel; let _traceChannel: vscode.OutputChannel; @@ -1037,7 +1037,7 @@ export async function activateRoslynLanguageServer( ); registerLanguageStatusItems(context, languageServer, languageServerEvents); - await registerCopilotExtension(languageServer, _channel); + await registerCopilotExtensionAsync(languageServer, _traceChannel); // Register any commands that need to be handled by the extension. registerCommands(context, languageServer, hostExecutableResolver, _channel); diff --git a/src/lsptoolshost/roslynProtocol.ts b/src/lsptoolshost/roslynProtocol.ts index 942212c18..9c612502b 100644 --- a/src/lsptoolshost/roslynProtocol.ts +++ b/src/lsptoolshost/roslynProtocol.ts @@ -227,8 +227,7 @@ export interface CopilotRelatedDocumentsParams extends lsp.WorkDoneProgressParam } export interface CopilotRelatedDocumentsReport { - _vs_resultId: string | null; - _vs_file_paths: string[] | null; + _vs_file_paths?: string[]; } export namespace WorkspaceDebugConfigurationRequest { From abd21b3c8b0f43f739787ca5a923059c2ed4ff4d Mon Sep 17 00:00:00 2001 From: "gel@microsoft.com" Date: Thu, 19 Sep 2024 17:19:59 -0700 Subject: [PATCH 12/14] Fix --- src/lsptoolshost/copilot.ts | 54 ++++++++++++++---------- src/lsptoolshost/roslynLanguageServer.ts | 2 +- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/lsptoolshost/copilot.ts b/src/lsptoolshost/copilot.ts index 935bda00d..53a67912b 100644 --- a/src/lsptoolshost/copilot.ts +++ b/src/lsptoolshost/copilot.ts @@ -9,6 +9,7 @@ import { CopilotRelatedDocumentsReport, CopilotRelatedDocumentsRequest } from '. import { RoslynLanguageServer } from './roslynLanguageServer'; import { UriConverter } from './uriConverter'; import { TextDocumentIdentifier } from 'vscode-languageserver-protocol'; +import { languageServerOptions } from '../shared/options'; interface CopilotRelatedFilesProviderRegistration { registerRelatedFilesProvider( @@ -19,24 +20,35 @@ interface CopilotRelatedFilesProviderRegistration { export async function registerCopilotExtensionAsync( languageServer: RoslynLanguageServer, - tracingChannel: vscode.OutputChannel + channel: vscode.OutputChannel ) { + const isTraceLogLevel = + languageServerOptions.logLevel && + (languageServerOptions.logLevel === 'Trace' || languageServerOptions.logLevel === 'Debug'); + const ext = vscode.extensions.getExtension('github.copilot'); if (!ext) { - tracingChannel.appendLine( - 'GitHub Copilot extension not installed. Skip registeration of C# related files provider.' - ); + if (isTraceLogLevel) { + channel.appendLine( + 'GitHub Copilot extension not installed. Skip registeration of C# related files provider.' + ); + } return; } await ext.activate(); const relatedAPI = ext.exports as CopilotRelatedFilesProviderRegistration | undefined; if (!relatedAPI) { - tracingChannel.appendLine( - 'Incompatible GitHub Copilot extension installed. Skip registeration of C# related files provider.' - ); + if (isTraceLogLevel) { + channel.appendLine( + 'Incompatible GitHub Copilot extension installed. Skip registeration of C# related files provider.' + ); + } return; } - tracingChannel.appendLine('registeration of C# related files provider for GitHub Copilot extension succeeded.'); + + if (isTraceLogLevel) { + channel.appendLine('registeration of C# related files provider for GitHub Copilot extension succeeded.'); + } const id = { extensionId: CSharpExtensionId, @@ -58,23 +70,21 @@ export async function registerCopilotExtensionAsync( const relatedFiles: vscode.Uri[] = []; const uriString = UriConverter.serialize(uri); const textDocument = TextDocumentIdentifier.create(uriString); - const responsePromise = languageServer.sendRequestWithProgress( - CopilotRelatedDocumentsRequest.type, - { - _vs_textDocument: textDocument, - position: { - line: 0, - character: 0, - }, - }, - async (r) => buildResult(r, relatedFiles) - ); - try { - await responsePromise; + await languageServer.sendRequestWithProgress( + CopilotRelatedDocumentsRequest.type, + { + _vs_textDocument: textDocument, + position: { + line: 0, + character: 0, + }, + }, + async (r) => buildResult(r, relatedFiles) + ); } catch (e) { if (e instanceof Error) { - tracingChannel.appendLine(e.message); + channel.appendLine(e.message); } } return { entries: relatedFiles }; diff --git a/src/lsptoolshost/roslynLanguageServer.ts b/src/lsptoolshost/roslynLanguageServer.ts index 73a38b7b3..e525eec57 100644 --- a/src/lsptoolshost/roslynLanguageServer.ts +++ b/src/lsptoolshost/roslynLanguageServer.ts @@ -1037,7 +1037,7 @@ export async function activateRoslynLanguageServer( ); registerLanguageStatusItems(context, languageServer, languageServerEvents); - await registerCopilotExtensionAsync(languageServer, _traceChannel); + await registerCopilotExtensionAsync(languageServer, _channel); // Register any commands that need to be handled by the extension. registerCommands(context, languageServer, hostExecutableResolver, _channel); From 62b30a962a59baaeb6b6c324dd501bc9ea40cfc1 Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Fri, 20 Sep 2024 11:39:47 -0400 Subject: [PATCH 13/14] Bumped xamlTools to 17.12.35319.159 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf7dda45c..314d41de7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) # Latest +* Bump xamltools to 17.12.35319.159 (PR: [#7583](https://github.com/dotnet/vscode-csharp/pull/7583)) + +# 2.49.x * Update Razor to 9.0.0-preview.24467.1 * Fix LF line-ending auto format bug (PR: [#10802](https://github.com/dotnet/razor/pull/10802)) * Bump xamltools to 17.12.35318.29 (PR: [#7577](https://github.com/dotnet/vscode-csharp/pull/7577)) diff --git a/package.json b/package.json index 9506f3c8a..188589209 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "omniSharp": "1.39.11", "razor": "9.0.0-preview.24467.1", "razorOmnisharp": "7.0.0-preview.23363.1", - "xamlTools": "17.12.35318.29" + "xamlTools": "17.12.35319.159" }, "main": "./dist/extension", "l10n": "./l10n", From 08feedd64f65aee2d34dcf31297c68fc8ccbc245 Mon Sep 17 00:00:00 2001 From: Joey Robichaud Date: Fri, 20 Sep 2024 16:02:58 -0700 Subject: [PATCH 14/14] Update CHANGELOG for snap --- CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 314d41de7..1c0ac88d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,14 @@ - Diagnostics related feature requests and improvements [#5951](https://github.com/dotnet/vscode-csharp/issues/5951) - Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876) -# Latest -* Bump xamltools to 17.12.35319.159 (PR: [#7583](https://github.com/dotnet/vscode-csharp/pull/7583)) +# 2.50.x # 2.49.x * Update Razor to 9.0.0-preview.24467.1 * Fix LF line-ending auto format bug (PR: [#10802](https://github.com/dotnet/razor/pull/10802)) -* Bump xamltools to 17.12.35318.29 (PR: [#7577](https://github.com/dotnet/vscode-csharp/pull/7577)) +* Bumped xamltools to 17.12.35319.159 (PR: [#7583](https://github.com/dotnet/vscode-csharp/pull/7583)) +* Bump xamlTools to 17.12.35318.29 (PR: [#7577](https://github.com/OmniSharp/omnisharp-vscode/pull/7577)) +* Register Copilot `relatedFilesProvider` for C# (PR: [#7578](https://github.com/OmniSharp/omnisharp-vscode/pull/7578)) # 2.48.x * Add signing support to VSIX (PR: [#7490](https://github.com/dotnet/vscode-csharp/pull/7490))